From e56c6a36abc3a34501417600668826917435901f Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 29 Jan 2025 14:58:24 +0100
Subject: [PATCH 001/132] GO-4459: Add descriptions for swagger data models
---
core/api/docs/docs.go | 207 ++++++++++++++++++++---
core/api/docs/swagger.json | 207 ++++++++++++++++++++---
core/api/docs/swagger.yaml | 172 ++++++++++++++++---
core/api/internal/auth/model.go | 6 +-
core/api/internal/export/model.go | 4 +-
core/api/internal/object/model.go | 112 ++++++------
core/api/internal/object/service_test.go | 9 +-
core/api/internal/search/model.go | 10 +-
core/api/internal/space/model.go | 56 +++---
core/api/pagination/model.go | 12 +-
10 files changed, 614 insertions(+), 181 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 838673118..34e2a56f6 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -947,6 +947,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"challenge_id": {
+ "description": "The challenge id associated with the displayed code and needed to solve the challenge for token",
"type": "string",
"example": "67647f5ecda913e9a2e11b26"
}
@@ -956,10 +957,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"app_key": {
+ "description": "The permanent app key",
"type": "string",
"example": "zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="
},
"session_token": {
+ "description": "The ephemeral session token",
"type": "string",
"example": "eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII"
}
@@ -969,6 +972,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"path": {
+ "description": "The path the object was exported to",
"type": "string",
"example": "/path/to/export"
}
@@ -978,6 +982,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"align": {
+ "description": "The alignment of the block",
"type": "string",
"enum": [
"AlignLeft",
@@ -988,10 +993,12 @@ const docTemplate = `{
"example": "AlignLeft"
},
"background_color": {
+ "description": "The background color of the block",
"type": "string",
"example": "red"
},
"children_ids": {
+ "description": "The ids of the block's children",
"type": "array",
"items": {
"type": "string"
@@ -1001,16 +1008,28 @@ const docTemplate = `{
]
},
"file": {
- "$ref": "#/definitions/object.File"
+ "description": "The file of the block, if applicable",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.File"
+ }
+ ]
},
"id": {
+ "description": "The id of the block",
"type": "string",
"example": "64394517de52ad5acb89c66c"
},
"text": {
- "$ref": "#/definitions/object.Text"
+ "description": "The text of the block, if applicable",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Text"
+ }
+ ]
},
"vertical_align": {
+ "description": "The vertical alignment of the block",
"type": "string",
"enum": [
"VerticalAlignTop",
@@ -1025,30 +1044,37 @@ const docTemplate = `{
"type": "object",
"properties": {
"body": {
+ "description": "The body of the object",
"type": "string",
- "example": "Object Body"
+ "example": "This is the body of the object. Markdown syntax is supported here."
},
"description": {
+ "description": "The description of the object",
"type": "string",
- "example": "Object Description"
+ "example": "This is a description of the object."
},
"icon": {
+ "description": "The icon of the object",
"type": "string",
"example": "📄"
},
"name": {
+ "description": "The name of the object",
"type": "string",
- "example": "Object Name"
+ "example": "My object"
},
"object_type_unique_key": {
+ "description": "The unique key of the object type",
"type": "string",
"example": "ot-page"
},
"source": {
+ "description": "The source url, only applicable for bookmarks",
"type": "string",
- "example": "https://source.com"
+ "example": "https://bookmark-source.com"
},
"template_id": {
+ "description": "The id of the template to use",
"type": "string",
"example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
}
@@ -1058,10 +1084,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"details": {
+ "description": "The details",
"type": "object",
"additionalProperties": true
},
"id": {
+ "description": "The id of the detail",
"type": "string",
"enum": [
"last_modified_date",
@@ -1079,30 +1107,39 @@ const docTemplate = `{
"type": "object",
"properties": {
"added_at": {
+ "description": "The added at of the file",
"type": "integer"
},
"hash": {
+ "description": "The hash of the file",
"type": "string"
},
"mime": {
+ "description": "The mime of the file",
"type": "string"
},
"name": {
+ "description": "The name of the file",
"type": "string"
},
"size": {
+ "description": "The size of the file",
"type": "integer"
},
"state": {
+ "description": "The state of the file",
"type": "string"
},
"style": {
+ "description": "The style of the file",
"type": "string"
},
"target_object_id": {
+ "description": "The target object id of the file",
"type": "string"
},
"type": {
+ "description": "The type of the file",
"type": "string"
}
}
@@ -1111,46 +1148,56 @@ const docTemplate = `{
"type": "object",
"properties": {
"blocks": {
+ "description": "The blocks of the object",
"type": "array",
"items": {
"$ref": "#/definitions/object.Block"
}
},
"details": {
+ "description": "The details of the object",
"type": "array",
"items": {
"$ref": "#/definitions/object.Detail"
}
},
"icon": {
+ "description": "The icon of the object",
"type": "string",
"example": "📄"
},
"id": {
+ "description": "The id of the object",
"type": "string",
"example": "bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"
},
"layout": {
+ "description": "The layout of the object",
"type": "string",
"example": "basic"
},
"name": {
+ "description": "The name of the object",
"type": "string",
- "example": "Object Name"
+ "example": "My object"
},
"root_id": {
+ "description": "The id of the object's root",
"type": "string",
"example": "bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"
},
"snippet": {
+ "description": "The snippet of the object, especially important for notes as they don't have a name",
"type": "string",
"example": "The beginning of the object body..."
},
"space_id": {
+ "description": "The id of the space the object is in",
"type": "string",
"example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "Page"
}
@@ -1160,7 +1207,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"object": {
- "$ref": "#/definitions/object.Object"
+ "description": "The object",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Object"
+ }
+ ]
}
}
},
@@ -1168,18 +1220,22 @@ const docTemplate = `{
"type": "object",
"properties": {
"icon": {
+ "description": "The icon of the template",
"type": "string",
"example": "📄"
},
"id": {
+ "description": "The id of the template",
"type": "string",
"example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
},
"name": {
+ "description": "The name of the template",
"type": "string",
- "example": "Template Name"
+ "example": "My template"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "template"
}
@@ -1189,7 +1245,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"template": {
- "$ref": "#/definitions/object.Template"
+ "description": "The template",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Template"
+ }
+ ]
}
}
},
@@ -1197,18 +1258,22 @@ const docTemplate = `{
"type": "object",
"properties": {
"checked": {
+ "description": "Whether the text is checked",
"type": "boolean",
"example": true
},
"color": {
+ "description": "The color of the text",
"type": "string",
"example": "red"
},
"icon": {
+ "description": "The icon of the text",
"type": "string",
"example": "📄"
},
"style": {
+ "description": "The style of the text",
"type": "string",
"enum": [
"Paragraph",
@@ -1229,8 +1294,9 @@ const docTemplate = `{
"example": "Paragraph"
},
"text": {
+ "description": "The text",
"type": "string",
- "example": "Some text"
+ "example": "Some text..."
}
}
},
@@ -1238,26 +1304,32 @@ const docTemplate = `{
"type": "object",
"properties": {
"icon": {
+ "description": "The icon of the type",
"type": "string",
"example": "📄"
},
"id": {
+ "description": "The id of the type",
"type": "string",
"example": "bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"
},
"name": {
+ "description": "The name of the type",
"type": "string",
"example": "Page"
},
"recommended_layout": {
+ "description": "The recommended layout of the type",
"type": "string",
"example": "todo"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "type"
},
"unique_key": {
+ "description": "The unique key of the type",
"type": "string",
"example": "ot-page"
}
@@ -1267,7 +1339,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"type": {
- "$ref": "#/definitions/object.Type"
+ "description": "The type",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Type"
+ }
+ ]
}
}
},
@@ -1275,13 +1352,19 @@ const docTemplate = `{
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/object.Object"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1289,13 +1372,19 @@ const docTemplate = `{
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/object.Template"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1303,13 +1392,19 @@ const docTemplate = `{
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/object.Type"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1317,13 +1412,19 @@ const docTemplate = `{
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/space.Member"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1331,13 +1432,19 @@ const docTemplate = `{
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/space.Space"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1345,22 +1452,22 @@ const docTemplate = `{
"type": "object",
"properties": {
"has_more": {
- "description": "whether there are more items available",
+ "description": "Indicates if there are more items available beyond the current result set",
"type": "boolean",
"example": true
},
"limit": {
- "description": "the current limit",
+ "description": "The maximum number of items returned in the result set",
"type": "integer",
"example": 100
},
"offset": {
- "description": "the current offset",
+ "description": "The number of items skipped before starting to collect the result set",
"type": "integer",
"example": 0
},
"total": {
- "description": "the total number of items available on that endpoint",
+ "description": "The total number of items available for the endpoint",
"type": "integer",
"example": 1024
}
@@ -1370,16 +1477,30 @@ const docTemplate = `{
"type": "object",
"properties": {
"query": {
- "type": "string"
+ "description": "The search term to look for in object names and snippets",
+ "type": "string",
+ "example": "test"
},
"sort": {
- "$ref": "#/definitions/search.SortOptions"
+ "description": "The sorting criteria and direction for the search results",
+ "allOf": [
+ {
+ "$ref": "#/definitions/search.SortOptions"
+ }
+ ]
},
"types": {
+ "description": "The types of objects to search for, specified by unique key or ID",
"type": "array",
"items": {
"type": "string"
- }
+ },
+ "example": [
+ "ot-note",
+ "ot-page",
+ "ot-678043f0cda9133be777049f",
+ "bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"
+ ]
}
}
},
@@ -1387,6 +1508,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"direction": {
+ "description": "The direction to sort the search results",
"type": "string",
"default": "desc",
"enum": [
@@ -1395,6 +1517,7 @@ const docTemplate = `{
]
},
"timestamp": {
+ "description": "The timestamp to sort the search results by",
"type": "string",
"default": "last_modified_date",
"enum": [
@@ -1409,6 +1532,7 @@ const docTemplate = `{
"type": "object",
"properties": {
"name": {
+ "description": "The name of the space",
"type": "string",
"example": "New Space"
}
@@ -1418,7 +1542,12 @@ const docTemplate = `{
"type": "object",
"properties": {
"space": {
- "$ref": "#/definitions/space.Space"
+ "description": "The created space",
+ "allOf": [
+ {
+ "$ref": "#/definitions/space.Space"
+ }
+ ]
}
}
},
@@ -1426,26 +1555,32 @@ const docTemplate = `{
"type": "object",
"properties": {
"global_name": {
+ "description": "The global name of the member in the network",
"type": "string",
"example": "john.any"
},
"icon": {
+ "description": "The icon of the member",
"type": "string",
"example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"
},
"id": {
+ "description": "The profile object id of the member",
"type": "string",
"example": "_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"
},
"identity": {
+ "description": "The identity of the member in the network",
"type": "string",
"example": "AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"
},
"name": {
+ "description": "The name of the member",
"type": "string",
"example": "John Doe"
},
"role": {
+ "description": "The role of the member",
"type": "string",
"enum": [
"Reader",
@@ -1456,6 +1591,7 @@ const docTemplate = `{
"example": "Owner"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "member"
}
@@ -1465,78 +1601,97 @@ const docTemplate = `{
"type": "object",
"properties": {
"account_space_id": {
+ "description": "The id of the account space",
"type": "string",
"example": "bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"
},
"analytics_id": {
+ "description": "The analytics id of the account",
"type": "string",
"example": "624aecdd-4797-4611-9d61-a2ae5f53cf1c"
},
"archive_object_id": {
+ "description": "The id of the archive object",
"type": "string",
"example": "bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"
},
"device_id": {
+ "description": "The id of the device",
"type": "string",
"example": "12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"
},
"gateway_url": {
+ "description": "The gateway url to serve files and media",
"type": "string",
"example": "http://127.0.0.1:31006"
},
"home_object_id": {
+ "description": "The id of the home object",
"type": "string",
"example": "bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"
},
"icon": {
+ "description": "The icon of the space",
"type": "string",
"example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"
},
"id": {
+ "description": "The id of the space",
"type": "string",
"example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
},
"local_storage_path": {
+ "description": "The local storage path of the account",
"type": "string",
"example": "/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"
},
"marketplace_workspace_id": {
+ "description": "The id of the marketplace workspace",
"type": "string",
"example": "_anytype_marketplace"
},
"name": {
+ "description": "The name of the space",
"type": "string",
- "example": "Space Name"
+ "example": "My Space"
},
"network_id": {
+ "description": "The network id of the space",
"type": "string",
"example": "N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"
},
"profile_object_id": {
+ "description": "The id of the profile object",
"type": "string",
"example": "bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"
},
"space_view_id": {
+ "description": "The id of the space view",
"type": "string",
"example": "bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"
},
"tech_space_id": {
+ "description": "The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself",
"type": "string",
"example": "bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"
},
"timezone": {
+ "description": "The timezone of the account",
"type": "string",
"example": ""
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "space"
},
"widgets_id": {
+ "description": "The id of the widgets",
"type": "string",
"example": "bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"
},
"workspace_object_id": {
+ "description": "The id of the workspace object",
"type": "string",
"example": "bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"
}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index cf8fe16d3..f5647435c 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -941,6 +941,7 @@
"type": "object",
"properties": {
"challenge_id": {
+ "description": "The challenge id associated with the displayed code and needed to solve the challenge for token",
"type": "string",
"example": "67647f5ecda913e9a2e11b26"
}
@@ -950,10 +951,12 @@
"type": "object",
"properties": {
"app_key": {
+ "description": "The permanent app key",
"type": "string",
"example": "zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="
},
"session_token": {
+ "description": "The ephemeral session token",
"type": "string",
"example": "eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII"
}
@@ -963,6 +966,7 @@
"type": "object",
"properties": {
"path": {
+ "description": "The path the object was exported to",
"type": "string",
"example": "/path/to/export"
}
@@ -972,6 +976,7 @@
"type": "object",
"properties": {
"align": {
+ "description": "The alignment of the block",
"type": "string",
"enum": [
"AlignLeft",
@@ -982,10 +987,12 @@
"example": "AlignLeft"
},
"background_color": {
+ "description": "The background color of the block",
"type": "string",
"example": "red"
},
"children_ids": {
+ "description": "The ids of the block's children",
"type": "array",
"items": {
"type": "string"
@@ -995,16 +1002,28 @@
]
},
"file": {
- "$ref": "#/definitions/object.File"
+ "description": "The file of the block, if applicable",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.File"
+ }
+ ]
},
"id": {
+ "description": "The id of the block",
"type": "string",
"example": "64394517de52ad5acb89c66c"
},
"text": {
- "$ref": "#/definitions/object.Text"
+ "description": "The text of the block, if applicable",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Text"
+ }
+ ]
},
"vertical_align": {
+ "description": "The vertical alignment of the block",
"type": "string",
"enum": [
"VerticalAlignTop",
@@ -1019,30 +1038,37 @@
"type": "object",
"properties": {
"body": {
+ "description": "The body of the object",
"type": "string",
- "example": "Object Body"
+ "example": "This is the body of the object. Markdown syntax is supported here."
},
"description": {
+ "description": "The description of the object",
"type": "string",
- "example": "Object Description"
+ "example": "This is a description of the object."
},
"icon": {
+ "description": "The icon of the object",
"type": "string",
"example": "📄"
},
"name": {
+ "description": "The name of the object",
"type": "string",
- "example": "Object Name"
+ "example": "My object"
},
"object_type_unique_key": {
+ "description": "The unique key of the object type",
"type": "string",
"example": "ot-page"
},
"source": {
+ "description": "The source url, only applicable for bookmarks",
"type": "string",
- "example": "https://source.com"
+ "example": "https://bookmark-source.com"
},
"template_id": {
+ "description": "The id of the template to use",
"type": "string",
"example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
}
@@ -1052,10 +1078,12 @@
"type": "object",
"properties": {
"details": {
+ "description": "The details",
"type": "object",
"additionalProperties": true
},
"id": {
+ "description": "The id of the detail",
"type": "string",
"enum": [
"last_modified_date",
@@ -1073,30 +1101,39 @@
"type": "object",
"properties": {
"added_at": {
+ "description": "The added at of the file",
"type": "integer"
},
"hash": {
+ "description": "The hash of the file",
"type": "string"
},
"mime": {
+ "description": "The mime of the file",
"type": "string"
},
"name": {
+ "description": "The name of the file",
"type": "string"
},
"size": {
+ "description": "The size of the file",
"type": "integer"
},
"state": {
+ "description": "The state of the file",
"type": "string"
},
"style": {
+ "description": "The style of the file",
"type": "string"
},
"target_object_id": {
+ "description": "The target object id of the file",
"type": "string"
},
"type": {
+ "description": "The type of the file",
"type": "string"
}
}
@@ -1105,46 +1142,56 @@
"type": "object",
"properties": {
"blocks": {
+ "description": "The blocks of the object",
"type": "array",
"items": {
"$ref": "#/definitions/object.Block"
}
},
"details": {
+ "description": "The details of the object",
"type": "array",
"items": {
"$ref": "#/definitions/object.Detail"
}
},
"icon": {
+ "description": "The icon of the object",
"type": "string",
"example": "📄"
},
"id": {
+ "description": "The id of the object",
"type": "string",
"example": "bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"
},
"layout": {
+ "description": "The layout of the object",
"type": "string",
"example": "basic"
},
"name": {
+ "description": "The name of the object",
"type": "string",
- "example": "Object Name"
+ "example": "My object"
},
"root_id": {
+ "description": "The id of the object's root",
"type": "string",
"example": "bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"
},
"snippet": {
+ "description": "The snippet of the object, especially important for notes as they don't have a name",
"type": "string",
"example": "The beginning of the object body..."
},
"space_id": {
+ "description": "The id of the space the object is in",
"type": "string",
"example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "Page"
}
@@ -1154,7 +1201,12 @@
"type": "object",
"properties": {
"object": {
- "$ref": "#/definitions/object.Object"
+ "description": "The object",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Object"
+ }
+ ]
}
}
},
@@ -1162,18 +1214,22 @@
"type": "object",
"properties": {
"icon": {
+ "description": "The icon of the template",
"type": "string",
"example": "📄"
},
"id": {
+ "description": "The id of the template",
"type": "string",
"example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
},
"name": {
+ "description": "The name of the template",
"type": "string",
- "example": "Template Name"
+ "example": "My template"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "template"
}
@@ -1183,7 +1239,12 @@
"type": "object",
"properties": {
"template": {
- "$ref": "#/definitions/object.Template"
+ "description": "The template",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Template"
+ }
+ ]
}
}
},
@@ -1191,18 +1252,22 @@
"type": "object",
"properties": {
"checked": {
+ "description": "Whether the text is checked",
"type": "boolean",
"example": true
},
"color": {
+ "description": "The color of the text",
"type": "string",
"example": "red"
},
"icon": {
+ "description": "The icon of the text",
"type": "string",
"example": "📄"
},
"style": {
+ "description": "The style of the text",
"type": "string",
"enum": [
"Paragraph",
@@ -1223,8 +1288,9 @@
"example": "Paragraph"
},
"text": {
+ "description": "The text",
"type": "string",
- "example": "Some text"
+ "example": "Some text..."
}
}
},
@@ -1232,26 +1298,32 @@
"type": "object",
"properties": {
"icon": {
+ "description": "The icon of the type",
"type": "string",
"example": "📄"
},
"id": {
+ "description": "The id of the type",
"type": "string",
"example": "bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"
},
"name": {
+ "description": "The name of the type",
"type": "string",
"example": "Page"
},
"recommended_layout": {
+ "description": "The recommended layout of the type",
"type": "string",
"example": "todo"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "type"
},
"unique_key": {
+ "description": "The unique key of the type",
"type": "string",
"example": "ot-page"
}
@@ -1261,7 +1333,12 @@
"type": "object",
"properties": {
"type": {
- "$ref": "#/definitions/object.Type"
+ "description": "The type",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Type"
+ }
+ ]
}
}
},
@@ -1269,13 +1346,19 @@
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/object.Object"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1283,13 +1366,19 @@
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/object.Template"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1297,13 +1386,19 @@
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/object.Type"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1311,13 +1406,19 @@
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/space.Member"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1325,13 +1426,19 @@
"type": "object",
"properties": {
"data": {
+ "description": "The list of items in the current result set",
"type": "array",
"items": {
"$ref": "#/definitions/space.Space"
}
},
"pagination": {
- "$ref": "#/definitions/pagination.PaginationMeta"
+ "description": "The pagination metadata for the response",
+ "allOf": [
+ {
+ "$ref": "#/definitions/pagination.PaginationMeta"
+ }
+ ]
}
}
},
@@ -1339,22 +1446,22 @@
"type": "object",
"properties": {
"has_more": {
- "description": "whether there are more items available",
+ "description": "Indicates if there are more items available beyond the current result set",
"type": "boolean",
"example": true
},
"limit": {
- "description": "the current limit",
+ "description": "The maximum number of items returned in the result set",
"type": "integer",
"example": 100
},
"offset": {
- "description": "the current offset",
+ "description": "The number of items skipped before starting to collect the result set",
"type": "integer",
"example": 0
},
"total": {
- "description": "the total number of items available on that endpoint",
+ "description": "The total number of items available for the endpoint",
"type": "integer",
"example": 1024
}
@@ -1364,16 +1471,30 @@
"type": "object",
"properties": {
"query": {
- "type": "string"
+ "description": "The search term to look for in object names and snippets",
+ "type": "string",
+ "example": "test"
},
"sort": {
- "$ref": "#/definitions/search.SortOptions"
+ "description": "The sorting criteria and direction for the search results",
+ "allOf": [
+ {
+ "$ref": "#/definitions/search.SortOptions"
+ }
+ ]
},
"types": {
+ "description": "The types of objects to search for, specified by unique key or ID",
"type": "array",
"items": {
"type": "string"
- }
+ },
+ "example": [
+ "ot-note",
+ "ot-page",
+ "ot-678043f0cda9133be777049f",
+ "bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"
+ ]
}
}
},
@@ -1381,6 +1502,7 @@
"type": "object",
"properties": {
"direction": {
+ "description": "The direction to sort the search results",
"type": "string",
"default": "desc",
"enum": [
@@ -1389,6 +1511,7 @@
]
},
"timestamp": {
+ "description": "The timestamp to sort the search results by",
"type": "string",
"default": "last_modified_date",
"enum": [
@@ -1403,6 +1526,7 @@
"type": "object",
"properties": {
"name": {
+ "description": "The name of the space",
"type": "string",
"example": "New Space"
}
@@ -1412,7 +1536,12 @@
"type": "object",
"properties": {
"space": {
- "$ref": "#/definitions/space.Space"
+ "description": "The created space",
+ "allOf": [
+ {
+ "$ref": "#/definitions/space.Space"
+ }
+ ]
}
}
},
@@ -1420,26 +1549,32 @@
"type": "object",
"properties": {
"global_name": {
+ "description": "The global name of the member in the network",
"type": "string",
"example": "john.any"
},
"icon": {
+ "description": "The icon of the member",
"type": "string",
"example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"
},
"id": {
+ "description": "The profile object id of the member",
"type": "string",
"example": "_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"
},
"identity": {
+ "description": "The identity of the member in the network",
"type": "string",
"example": "AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"
},
"name": {
+ "description": "The name of the member",
"type": "string",
"example": "John Doe"
},
"role": {
+ "description": "The role of the member",
"type": "string",
"enum": [
"Reader",
@@ -1450,6 +1585,7 @@
"example": "Owner"
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "member"
}
@@ -1459,78 +1595,97 @@
"type": "object",
"properties": {
"account_space_id": {
+ "description": "The id of the account space",
"type": "string",
"example": "bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"
},
"analytics_id": {
+ "description": "The analytics id of the account",
"type": "string",
"example": "624aecdd-4797-4611-9d61-a2ae5f53cf1c"
},
"archive_object_id": {
+ "description": "The id of the archive object",
"type": "string",
"example": "bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"
},
"device_id": {
+ "description": "The id of the device",
"type": "string",
"example": "12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"
},
"gateway_url": {
+ "description": "The gateway url to serve files and media",
"type": "string",
"example": "http://127.0.0.1:31006"
},
"home_object_id": {
+ "description": "The id of the home object",
"type": "string",
"example": "bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"
},
"icon": {
+ "description": "The icon of the space",
"type": "string",
"example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"
},
"id": {
+ "description": "The id of the space",
"type": "string",
"example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
},
"local_storage_path": {
+ "description": "The local storage path of the account",
"type": "string",
"example": "/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"
},
"marketplace_workspace_id": {
+ "description": "The id of the marketplace workspace",
"type": "string",
"example": "_anytype_marketplace"
},
"name": {
+ "description": "The name of the space",
"type": "string",
- "example": "Space Name"
+ "example": "My Space"
},
"network_id": {
+ "description": "The network id of the space",
"type": "string",
"example": "N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"
},
"profile_object_id": {
+ "description": "The id of the profile object",
"type": "string",
"example": "bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"
},
"space_view_id": {
+ "description": "The id of the space view",
"type": "string",
"example": "bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"
},
"tech_space_id": {
+ "description": "The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself",
"type": "string",
"example": "bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"
},
"timezone": {
+ "description": "The timezone of the account",
"type": "string",
"example": ""
},
"type": {
+ "description": "The type of the object",
"type": "string",
"example": "space"
},
"widgets_id": {
+ "description": "The id of the widgets",
"type": "string",
"example": "bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"
},
"workspace_object_id": {
+ "description": "The id of the workspace object",
"type": "string",
"example": "bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"
}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 550a59d1c..c9ba28757 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -3,27 +3,33 @@ definitions:
auth.DisplayCodeResponse:
properties:
challenge_id:
+ description: The challenge id associated with the displayed code and needed
+ to solve the challenge for token
example: 67647f5ecda913e9a2e11b26
type: string
type: object
auth.TokenResponse:
properties:
app_key:
+ description: The permanent app key
example: zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=
type: string
session_token:
+ description: The ephemeral session token
example: eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII
type: string
type: object
export.ObjectExportResponse:
properties:
path:
+ description: The path the object was exported to
example: /path/to/export
type: string
type: object
object.Block:
properties:
align:
+ description: The alignment of the block
enum:
- AlignLeft
- AlignCenter
@@ -32,22 +38,30 @@ definitions:
example: AlignLeft
type: string
background_color:
+ description: The background color of the block
example: red
type: string
children_ids:
+ description: The ids of the block's children
example:
- '[''6797ce8ecda913cde14b02dc'']'
items:
type: string
type: array
file:
- $ref: '#/definitions/object.File'
+ allOf:
+ - $ref: '#/definitions/object.File'
+ description: The file of the block, if applicable
id:
+ description: The id of the block
example: 64394517de52ad5acb89c66c
type: string
text:
- $ref: '#/definitions/object.Text'
+ allOf:
+ - $ref: '#/definitions/object.Text'
+ description: The text of the block, if applicable
vertical_align:
+ description: The vertical alignment of the block
enum:
- VerticalAlignTop
- VerticalAlignMiddle
@@ -58,24 +72,31 @@ definitions:
object.CreateObjectRequest:
properties:
body:
- example: Object Body
+ description: The body of the object
+ example: This is the body of the object. Markdown syntax is supported here.
type: string
description:
- example: Object Description
+ description: The description of the object
+ example: This is a description of the object.
type: string
icon:
+ description: The icon of the object
example: "\U0001F4C4"
type: string
name:
- example: Object Name
+ description: The name of the object
+ example: My object
type: string
object_type_unique_key:
+ description: The unique key of the object type
example: ot-page
type: string
source:
- example: https://source.com
+ description: The source url, only applicable for bookmarks
+ example: https://bookmark-source.com
type: string
template_id:
+ description: The id of the template to use
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
type: string
type: object
@@ -83,8 +104,10 @@ definitions:
properties:
details:
additionalProperties: true
+ description: The details
type: object
id:
+ description: The id of the detail
enum:
- last_modified_date
- last_modified_by
@@ -98,96 +121,128 @@ definitions:
object.File:
properties:
added_at:
+ description: The added at of the file
type: integer
hash:
+ description: The hash of the file
type: string
mime:
+ description: The mime of the file
type: string
name:
+ description: The name of the file
type: string
size:
+ description: The size of the file
type: integer
state:
+ description: The state of the file
type: string
style:
+ description: The style of the file
type: string
target_object_id:
+ description: The target object id of the file
type: string
type:
+ description: The type of the file
type: string
type: object
object.Object:
properties:
blocks:
+ description: The blocks of the object
items:
$ref: '#/definitions/object.Block'
type: array
details:
+ description: The details of the object
items:
$ref: '#/definitions/object.Detail'
type: array
icon:
+ description: The icon of the object
example: "\U0001F4C4"
type: string
id:
+ description: The id of the object
example: bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ
type: string
layout:
+ description: The layout of the object
example: basic
type: string
name:
- example: Object Name
+ description: The name of the object
+ example: My object
type: string
root_id:
+ description: The id of the object's root
example: bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u
type: string
snippet:
+ description: The snippet of the object, especially important for notes as
+ they don't have a name
example: The beginning of the object body...
type: string
space_id:
+ description: The id of the space the object is in
example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
type: string
type:
+ description: The type of the object
example: Page
type: string
type: object
object.ObjectResponse:
properties:
object:
- $ref: '#/definitions/object.Object'
+ allOf:
+ - $ref: '#/definitions/object.Object'
+ description: The object
type: object
object.Template:
properties:
icon:
+ description: The icon of the template
example: "\U0001F4C4"
type: string
id:
+ description: The id of the template
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
type: string
name:
- example: Template Name
+ description: The name of the template
+ example: My template
type: string
type:
+ description: The type of the object
example: template
type: string
type: object
object.TemplateResponse:
properties:
template:
- $ref: '#/definitions/object.Template'
+ allOf:
+ - $ref: '#/definitions/object.Template'
+ description: The template
type: object
object.Text:
properties:
checked:
+ description: Whether the text is checked
example: true
type: boolean
color:
+ description: The color of the text
example: red
type: string
icon:
+ description: The icon of the text
example: "\U0001F4C4"
type: string
style:
+ description: The style of the text
enum:
- Paragraph
- Header1
@@ -206,106 +261,143 @@ definitions:
example: Paragraph
type: string
text:
- example: Some text
+ description: The text
+ example: Some text...
type: string
type: object
object.Type:
properties:
icon:
+ description: The icon of the type
example: "\U0001F4C4"
type: string
id:
+ description: The id of the type
example: bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu
type: string
name:
+ description: The name of the type
example: Page
type: string
recommended_layout:
+ description: The recommended layout of the type
example: todo
type: string
type:
+ description: The type of the object
example: type
type: string
unique_key:
+ description: The unique key of the type
example: ot-page
type: string
type: object
object.TypeResponse:
properties:
type:
- $ref: '#/definitions/object.Type'
+ allOf:
+ - $ref: '#/definitions/object.Type'
+ description: The type
type: object
pagination.PaginatedResponse-object_Object:
properties:
data:
+ description: The list of items in the current result set
items:
$ref: '#/definitions/object.Object'
type: array
pagination:
- $ref: '#/definitions/pagination.PaginationMeta'
+ allOf:
+ - $ref: '#/definitions/pagination.PaginationMeta'
+ description: The pagination metadata for the response
type: object
pagination.PaginatedResponse-object_Template:
properties:
data:
+ description: The list of items in the current result set
items:
$ref: '#/definitions/object.Template'
type: array
pagination:
- $ref: '#/definitions/pagination.PaginationMeta'
+ allOf:
+ - $ref: '#/definitions/pagination.PaginationMeta'
+ description: The pagination metadata for the response
type: object
pagination.PaginatedResponse-object_Type:
properties:
data:
+ description: The list of items in the current result set
items:
$ref: '#/definitions/object.Type'
type: array
pagination:
- $ref: '#/definitions/pagination.PaginationMeta'
+ allOf:
+ - $ref: '#/definitions/pagination.PaginationMeta'
+ description: The pagination metadata for the response
type: object
pagination.PaginatedResponse-space_Member:
properties:
data:
+ description: The list of items in the current result set
items:
$ref: '#/definitions/space.Member'
type: array
pagination:
- $ref: '#/definitions/pagination.PaginationMeta'
+ allOf:
+ - $ref: '#/definitions/pagination.PaginationMeta'
+ description: The pagination metadata for the response
type: object
pagination.PaginatedResponse-space_Space:
properties:
data:
+ description: The list of items in the current result set
items:
$ref: '#/definitions/space.Space'
type: array
pagination:
- $ref: '#/definitions/pagination.PaginationMeta'
+ allOf:
+ - $ref: '#/definitions/pagination.PaginationMeta'
+ description: The pagination metadata for the response
type: object
pagination.PaginationMeta:
properties:
has_more:
- description: whether there are more items available
+ description: Indicates if there are more items available beyond the current
+ result set
example: true
type: boolean
limit:
- description: the current limit
+ description: The maximum number of items returned in the result set
example: 100
type: integer
offset:
- description: the current offset
+ description: The number of items skipped before starting to collect the result
+ set
example: 0
type: integer
total:
- description: the total number of items available on that endpoint
+ description: The total number of items available for the endpoint
example: 1024
type: integer
type: object
search.SearchRequest:
properties:
query:
+ description: The search term to look for in object names and snippets
+ example: test
type: string
sort:
- $ref: '#/definitions/search.SortOptions'
+ allOf:
+ - $ref: '#/definitions/search.SortOptions'
+ description: The sorting criteria and direction for the search results
types:
+ description: The types of objects to search for, specified by unique key or
+ ID
+ example:
+ - ot-note
+ - ot-page
+ - ot-678043f0cda9133be777049f
+ - bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q
items:
type: string
type: array
@@ -314,12 +406,14 @@ definitions:
properties:
direction:
default: desc
+ description: The direction to sort the search results
enum:
- asc
- desc
type: string
timestamp:
default: last_modified_date
+ description: The timestamp to sort the search results by
enum:
- created_date
- last_modified_date
@@ -329,32 +423,41 @@ definitions:
space.CreateSpaceRequest:
properties:
name:
+ description: The name of the space
example: New Space
type: string
type: object
space.CreateSpaceResponse:
properties:
space:
- $ref: '#/definitions/space.Space'
+ allOf:
+ - $ref: '#/definitions/space.Space'
+ description: The created space
type: object
space.Member:
properties:
global_name:
+ description: The global name of the member in the network
example: john.any
type: string
icon:
+ description: The icon of the member
example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100
type: string
id:
+ description: The profile object id of the member
example: _participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ
type: string
identity:
+ description: The identity of the member in the network
example: AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ
type: string
name:
+ description: The name of the member
example: John Doe
type: string
role:
+ description: The role of the member
enum:
- Reader
- Writer
@@ -363,66 +466,87 @@ definitions:
example: Owner
type: string
type:
+ description: The type of the object
example: member
type: string
type: object
space.Space:
properties:
account_space_id:
+ description: The id of the account space
example: bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1
type: string
analytics_id:
+ description: The analytics id of the account
example: 624aecdd-4797-4611-9d61-a2ae5f53cf1c
type: string
archive_object_id:
+ description: The id of the archive object
example: bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri
type: string
device_id:
+ description: The id of the device
example: 12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF
type: string
gateway_url:
+ description: The gateway url to serve files and media
example: http://127.0.0.1:31006
type: string
home_object_id:
+ description: The id of the home object
example: bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya
type: string
icon:
+ description: The icon of the space
example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
type: string
id:
+ description: The id of the space
example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
type: string
local_storage_path:
+ description: The local storage path of the account
example: /Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha
type: string
marketplace_workspace_id:
+ description: The id of the marketplace workspace
example: _anytype_marketplace
type: string
name:
- example: Space Name
+ description: The name of the space
+ example: My Space
type: string
network_id:
+ description: The network id of the space
example: N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU
type: string
profile_object_id:
+ description: The id of the profile object
example: bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4
type: string
space_view_id:
+ description: The id of the space view
example: bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy
type: string
tech_space_id:
+ description: The id of tech space, where objects outside of user's actual
+ spaces are stored, e.g. spaces itself
example: bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1
type: string
timezone:
+ description: The timezone of the account
example: ""
type: string
type:
+ description: The type of the object
example: space
type: string
widgets_id:
+ description: The id of the widgets
example: bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva
type: string
workspace_object_id:
+ description: The id of the workspace object
example: bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y
type: string
type: object
diff --git a/core/api/internal/auth/model.go b/core/api/internal/auth/model.go
index 2d34926f5..221797cd3 100644
--- a/core/api/internal/auth/model.go
+++ b/core/api/internal/auth/model.go
@@ -1,10 +1,10 @@
package auth
type DisplayCodeResponse struct {
- ChallengeId string `json:"challenge_id" example:"67647f5ecda913e9a2e11b26"`
+ ChallengeId string `json:"challenge_id" example:"67647f5ecda913e9a2e11b26"` // The challenge id associated with the displayed code and needed to solve the challenge for token
}
type TokenResponse struct {
- SessionToken string `json:"session_token" example:"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII"`
- AppKey string `json:"app_key" example:"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="`
+ SessionToken string `json:"session_token" example:"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII"` // The ephemeral session token
+ AppKey string `json:"app_key" example:"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="` // The permanent app key
}
diff --git a/core/api/internal/export/model.go b/core/api/internal/export/model.go
index dde242246..e6541b62b 100644
--- a/core/api/internal/export/model.go
+++ b/core/api/internal/export/model.go
@@ -1,9 +1,9 @@
package export
type ObjectExportRequest struct {
- Path string `json:"path" example:"/path/to/export"`
+ Path string `json:"path" example:"/path/to/export"` // The path to export the object to
}
type ObjectExportResponse struct {
- Path string `json:"path" example:"/path/to/export"`
+ Path string `json:"path" example:"/path/to/export"` // The path the object was exported to
}
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 70ba449aa..d59121491 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -1,93 +1,93 @@
package object
type CreateObjectRequest struct {
- Name string `json:"name" example:"Object Name"`
- Icon string `json:"icon" example:"📄"`
- Description string `json:"description" example:"Object Description"`
- Body string `json:"body" example:"Object Body"`
- Source string `json:"source" example:"https://source.com"`
- TemplateId string `json:"template_id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"`
- ObjectTypeUniqueKey string `json:"object_type_unique_key" example:"ot-page"`
+ Name string `json:"name" example:"My object"` // The name of the object
+ Icon string `json:"icon" example:"📄"` // The icon of the object
+ Description string `json:"description" example:"This is a description of the object."` // The description of the object
+ Body string `json:"body" example:"This is the body of the object. Markdown syntax is supported here."` // The body of the object
+ Source string `json:"source" example:"https://bookmark-source.com"` // The source url, only applicable for bookmarks
+ TemplateId string `json:"template_id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template to use
+ ObjectTypeUniqueKey string `json:"object_type_unique_key" example:"ot-page"` // The unique key of the object type
}
type ObjectResponse struct {
- Object Object `json:"object"`
+ Object Object `json:"object"` // The object
}
type Object struct {
- Type string `json:"type" example:"Page"`
- Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"`
- Name string `json:"name" example:"Object Name"`
- Icon string `json:"icon" example:"📄"`
- Snippet string `json:"snippet" example:"The beginning of the object body..."`
- Layout string `json:"layout" example:"basic"`
- SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"`
- RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"`
- Blocks []Block `json:"blocks"`
- Details []Detail `json:"details"`
+ Type string `json:"type" example:"Page"` // The type of the object
+ Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"` // The id of the object
+ Name string `json:"name" example:"My object"` // The name of the object
+ Icon string `json:"icon" example:"📄"` // The icon of the object
+ Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
+ Layout string `json:"layout" example:"basic"` // The layout of the object
+ SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
+ RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"` // The id of the object's root
+ Blocks []Block `json:"blocks"` // The blocks of the object
+ Details []Detail `json:"details"` // The details of the object
}
type Block struct {
- Id string `json:"id" example:"64394517de52ad5acb89c66c"`
- ChildrenIds []string `json:"children_ids" example:"['6797ce8ecda913cde14b02dc']"`
- BackgroundColor string `json:"background_color" example:"red"`
- Align string `json:"align" enums:"AlignLeft,AlignCenter,AlignRight,AlignJustify" example:"AlignLeft"`
- VerticalAlign string `json:"vertical_align" enums:"VerticalAlignTop,VerticalAlignMiddle,VerticalAlignBottom" example:"VerticalAlignTop"`
- Text *Text `json:"text,omitempty"`
- File *File `json:"file,omitempty"`
+ Id string `json:"id" example:"64394517de52ad5acb89c66c"` // The id of the block
+ ChildrenIds []string `json:"children_ids" example:"['6797ce8ecda913cde14b02dc']"` // The ids of the block's children
+ BackgroundColor string `json:"background_color" example:"red"` // The background color of the block
+ Align string `json:"align" enums:"AlignLeft,AlignCenter,AlignRight,AlignJustify" example:"AlignLeft"` // The alignment of the block
+ VerticalAlign string `json:"vertical_align" enums:"VerticalAlignTop,VerticalAlignMiddle,VerticalAlignBottom" example:"VerticalAlignTop"` // The vertical alignment of the block
+ Text *Text `json:"text,omitempty"` // The text of the block, if applicable
+ File *File `json:"file,omitempty"` // The file of the block, if applicable
}
type Text struct {
- Text string `json:"text" example:"Some text"`
- Style string `json:"style" enums:"Paragraph,Header1,Header2,Header3,Header4,Quote,Code,Title,Checkbox,Marked,Numbered,Toggle,Description,Callout" example:"Paragraph"`
- Checked bool `json:"checked" example:"true"`
- Color string `json:"color" example:"red"`
- Icon string `json:"icon" example:"📄"`
+ Text string `json:"text" example:"Some text..."` // The text
+ Style string `json:"style" enums:"Paragraph,Header1,Header2,Header3,Header4,Quote,Code,Title,Checkbox,Marked,Numbered,Toggle,Description,Callout" example:"Paragraph"` // The style of the text
+ Checked bool `json:"checked" example:"true"` // Whether the text is checked
+ Color string `json:"color" example:"red"` // The color of the text
+ Icon string `json:"icon" example:"📄"` // The icon of the text
}
type File struct {
- Hash string `json:"hash"`
- Name string `json:"name"`
- Type string `json:"type"`
- Mime string `json:"mime"`
- Size int `json:"size"`
- AddedAt int `json:"added_at"`
- TargetObjectId string `json:"target_object_id"`
- State string `json:"state"`
- Style string `json:"style"`
+ Hash string `json:"hash"` // The hash of the file
+ Name string `json:"name"` // The name of the file
+ Type string `json:"type"` // The type of the file
+ Mime string `json:"mime"` // The mime of the file
+ Size int `json:"size"` // The size of the file
+ AddedAt int `json:"added_at"` // The added at of the file
+ TargetObjectId string `json:"target_object_id"` // The target object id of the file
+ State string `json:"state"` // The state of the file
+ Style string `json:"style"` // The style of the file
}
type Detail struct {
- Id string `json:"id" enums:"last_modified_date,last_modified_by,created_date,created_by,last_opened_date,tags" example:"last_modified_date"`
- Details map[string]interface{} `json:"details"`
+ Id string `json:"id" enums:"last_modified_date,last_modified_by,created_date,created_by,last_opened_date,tags" example:"last_modified_date"` // The id of the detail
+ Details map[string]interface{} `json:"details"` // The details
}
type Tag struct {
- Id string `json:"id" example:"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq"`
- Name string `json:"name" example:"Tag Name"`
- Color string `json:"color" example:"yellow"`
+ Id string `json:"id" example:"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq"` // The id of the tag
+ Name string `json:"name" example:"in-progress"` // The name of the tag
+ Color string `json:"color" example:"yellow"` // The color of the tag
}
type TypeResponse struct {
- Type Type `json:"type"`
+ Type Type `json:"type"` // The type
}
type Type struct {
- Type string `json:"type" example:"type"`
- Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"`
- UniqueKey string `json:"unique_key" example:"ot-page"`
- Name string `json:"name" example:"Page"`
- Icon string `json:"icon" example:"📄"`
- RecommendedLayout string `json:"recommended_layout" example:"todo"`
+ Type string `json:"type" example:"type"` // The type of the object
+ Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type
+ UniqueKey string `json:"unique_key" example:"ot-page"` // The unique key of the type
+ Name string `json:"name" example:"Page"` // The name of the type
+ Icon string `json:"icon" example:"📄"` // The icon of the type
+ RecommendedLayout string `json:"recommended_layout" example:"todo"` // The recommended layout of the type
}
type TemplateResponse struct {
- Template Template `json:"template"`
+ Template Template `json:"template"` // The template
}
type Template struct {
- Type string `json:"type" example:"template"`
- Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"`
- Name string `json:"name" example:"Template Name"`
- Icon string `json:"icon" example:"📄"`
+ Type string `json:"type" example:"template"` // The type of the object
+ Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template
+ Name string `json:"name" example:"My template"` // The name of the template
+ Icon string `json:"icon" example:"📄"` // The icon of the template
}
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 10ba7e1c4..5ae1f6ba2 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -390,7 +390,7 @@ func TestObjectService_CreateObject(t *testing.T) {
bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)),
},
},
- TemplateId: "",
+ TemplateId: mockedTemplateId,
SpaceId: mockedSpaceId,
ObjectTypeUniqueKey: mockedObjectTypeUniqueKey,
WithChat: false,
@@ -483,10 +483,9 @@ func TestObjectService_CreateObject(t *testing.T) {
// when
object, err := fx.CreateObject(ctx, mockedSpaceId, CreateObjectRequest{
- Name: mockedObjectName,
- Icon: mockedObjectIcon,
- // TODO: use actual values
- TemplateId: "",
+ Name: mockedObjectName,
+ Icon: mockedObjectIcon,
+ TemplateId: mockedTemplateId,
ObjectTypeUniqueKey: mockedObjectTypeUniqueKey,
})
diff --git a/core/api/internal/search/model.go b/core/api/internal/search/model.go
index f52cf59e4..170933841 100644
--- a/core/api/internal/search/model.go
+++ b/core/api/internal/search/model.go
@@ -1,12 +1,12 @@
package search
type SearchRequest struct {
- Query string `json:"query"`
- Types []string `json:"types"`
- Sort SortOptions `json:"sort"`
+ Query string `json:"query" example:"test"` // The search term to look for in object names and snippets
+ Types []string `json:"types" example:"ot-note,ot-page,ot-678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by unique key or ID
+ Sort SortOptions `json:"sort"` // The sorting criteria and direction for the search results
}
type SortOptions struct {
- Direction string `json:"direction" enums:"asc,desc" default:"desc"`
- Timestamp string `json:"timestamp" enums:"created_date,last_modified_date,last_opened_date" default:"last_modified_date"`
+ Direction string `json:"direction" enums:"asc,desc" default:"desc"` // The direction to sort the search results
+ Timestamp string `json:"timestamp" enums:"created_date,last_modified_date,last_opened_date" default:"last_modified_date"` // The timestamp to sort the search results by
}
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index d13951c3f..73cbe732b 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -1,41 +1,41 @@
package space
type CreateSpaceRequest struct {
- Name string `json:"name" example:"New Space"`
+ Name string `json:"name" example:"New Space"` // The name of the space
}
type CreateSpaceResponse struct {
- Space Space `json:"space"`
+ Space Space `json:"space"` // The created space
}
type Space struct {
- Type string `json:"type" example:"space"`
- Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"`
- Name string `json:"name" example:"Space Name"`
- Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"`
- HomeObjectId string `json:"home_object_id" example:"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"`
- ArchiveObjectId string `json:"archive_object_id" example:"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"`
- ProfileObjectId string `json:"profile_object_id" example:"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"`
- MarketplaceWorkspaceId string `json:"marketplace_workspace_id" example:"_anytype_marketplace"`
- WorkspaceObjectId string `json:"workspace_object_id" example:"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"`
- DeviceId string `json:"device_id" example:"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"`
- AccountSpaceId string `json:"account_space_id" example:"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"`
- WidgetsId string `json:"widgets_id" example:"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"`
- SpaceViewId string `json:"space_view_id" example:"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"`
- TechSpaceId string `json:"tech_space_id" example:"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"`
- GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"`
- LocalStoragePath string `json:"local_storage_path" example:"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"`
- Timezone string `json:"timezone" example:""`
- AnalyticsId string `json:"analytics_id" example:"624aecdd-4797-4611-9d61-a2ae5f53cf1c"`
- NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"`
+ Type string `json:"type" example:"space"` // The type of the object
+ Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
+ Name string `json:"name" example:"My Space"` // The name of the space
+ Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The icon of the space
+ HomeObjectId string `json:"home_object_id" example:"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"` // The id of the home object
+ ArchiveObjectId string `json:"archive_object_id" example:"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"` // The id of the archive object
+ ProfileObjectId string `json:"profile_object_id" example:"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"` // The id of the profile object
+ MarketplaceWorkspaceId string `json:"marketplace_workspace_id" example:"_anytype_marketplace"` // The id of the marketplace workspace
+ WorkspaceObjectId string `json:"workspace_object_id" example:"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"` // The id of the workspace object
+ DeviceId string `json:"device_id" example:"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"` // The id of the device
+ AccountSpaceId string `json:"account_space_id" example:"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"` // The id of the account space
+ WidgetsId string `json:"widgets_id" example:"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"` // The id of the widgets
+ SpaceViewId string `json:"space_view_id" example:"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"` // The id of the space view
+ TechSpaceId string `json:"tech_space_id" example:"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"` // The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself
+ GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"` // The gateway url to serve files and media
+ LocalStoragePath string `json:"local_storage_path" example:"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"` // The local storage path of the account
+ Timezone string `json:"timezone" example:""` // The timezone of the account
+ AnalyticsId string `json:"analytics_id" example:"624aecdd-4797-4611-9d61-a2ae5f53cf1c"` // The analytics id of the account
+ NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
}
type Member struct {
- Type string `json:"type" example:"member"`
- Id string `json:"id" example:"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"`
- Name string `json:"name" example:"John Doe"`
- Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"`
- Identity string `json:"identity" example:"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"`
- GlobalName string `json:"global_name" example:"john.any"`
- Role string `json:"role" enums:"Reader,Writer,Owner,NoPermission" example:"Owner"`
+ Type string `json:"type" example:"member"` // The type of the object
+ Id string `json:"id" example:"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"` // The profile object id of the member
+ Name string `json:"name" example:"John Doe"` // The name of the member
+ Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"` // The icon of the member
+ Identity string `json:"identity" example:"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"` // The identity of the member in the network
+ GlobalName string `json:"global_name" example:"john.any"` // The global name of the member in the network
+ Role string `json:"role" enums:"Reader,Writer,Owner,NoPermission" example:"Owner"` // The role of the member
}
diff --git a/core/api/pagination/model.go b/core/api/pagination/model.go
index 06539ce63..3d679fec4 100644
--- a/core/api/pagination/model.go
+++ b/core/api/pagination/model.go
@@ -1,13 +1,13 @@
package pagination
type PaginationMeta struct {
- Total int `json:"total" example:"1024"` // the total number of items available on that endpoint
- Offset int `json:"offset" example:"0"` // the current offset
- Limit int `json:"limit" example:"100"` // the current limit
- HasMore bool `json:"has_more" example:"true"` // whether there are more items available
+ Total int `json:"total" example:"1024"` // The total number of items available for the endpoint
+ Offset int `json:"offset" example:"0"` // The number of items skipped before starting to collect the result set
+ Limit int `json:"limit" example:"100"` // The maximum number of items returned in the result set
+ HasMore bool `json:"has_more" example:"true"` // Indicates if there are more items available beyond the current result set
}
type PaginatedResponse[T any] struct {
- Data []T `json:"data"`
- Pagination PaginationMeta `json:"pagination"`
+ Data []T `json:"data"` // The list of items in the current result set
+ Pagination PaginationMeta `json:"pagination"` // The pagination metadata for the response
}
From c7acd87e2b90c48e49caa24ee2fdee1104367a30 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 29 Jan 2025 15:08:08 +0100
Subject: [PATCH 002/132] GO-4459: Add swagger examples for errors
---
core/api/docs/docs.go | 15 ++++++++-----
core/api/docs/swagger.json | 15 ++++++++-----
core/api/docs/swagger.yaml | 5 +++++
core/api/util/error.go | 46 +++++++++++++++++++++++---------------
4 files changed, 53 insertions(+), 28 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 34e2a56f6..239cbb9d8 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -1704,7 +1704,8 @@ const docTemplate = `{
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Forbidden"
}
}
}
@@ -1717,7 +1718,8 @@ const docTemplate = `{
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Resource not found"
}
}
}
@@ -1730,7 +1732,8 @@ const docTemplate = `{
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Internal server error"
}
}
}
@@ -1743,7 +1746,8 @@ const docTemplate = `{
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Unauthorized"
}
}
}
@@ -1756,7 +1760,8 @@ const docTemplate = `{
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Bad request"
}
}
}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index f5647435c..72c7919b2 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1698,7 +1698,8 @@
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Forbidden"
}
}
}
@@ -1711,7 +1712,8 @@
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Resource not found"
}
}
}
@@ -1724,7 +1726,8 @@
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Internal server error"
}
}
}
@@ -1737,7 +1740,8 @@
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Unauthorized"
}
}
}
@@ -1750,7 +1754,8 @@
"type": "object",
"properties": {
"message": {
- "type": "string"
+ "type": "string",
+ "example": "Bad request"
}
}
}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index c9ba28757..fbbc53a88 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -555,6 +555,7 @@ definitions:
error:
properties:
message:
+ example: Forbidden
type: string
type: object
type: object
@@ -563,6 +564,7 @@ definitions:
error:
properties:
message:
+ example: Resource not found
type: string
type: object
type: object
@@ -571,6 +573,7 @@ definitions:
error:
properties:
message:
+ example: Internal server error
type: string
type: object
type: object
@@ -579,6 +582,7 @@ definitions:
error:
properties:
message:
+ example: Unauthorized
type: string
type: object
type: object
@@ -587,6 +591,7 @@ definitions:
error:
properties:
message:
+ example: Bad request
type: string
type: object
type: object
diff --git a/core/api/util/error.go b/core/api/util/error.go
index b7553f3fd..acec46041 100644
--- a/core/api/util/error.go
+++ b/core/api/util/error.go
@@ -5,38 +5,38 @@ import (
"net/http"
)
-// 400
+// ValidationError is a struct for 400 errors
type ValidationError struct {
Error struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Bad request"`
} `json:"error"`
}
-// 401
+// UnauthorizedError is a struct for 401 errors
type UnauthorizedError struct {
Error struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Unauthorized"`
} `json:"error"`
}
-// 403
+// ForbiddenError is a struct for 403 errors
type ForbiddenError struct {
Error struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Forbidden"`
} `json:"error"`
}
-// 404
+// NotFoundError is a struct for 404 errors
type NotFoundError struct {
Error struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Resource not found"`
} `json:"error"`
}
-// 500
+// ServerError is a struct for 500 errors
type ServerError struct {
Error struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Internal server error"`
} `json:"error"`
}
@@ -72,10 +72,11 @@ func MapErrorCode(err error, mappings ...errCodeMapping) int {
// for the given HTTP code, embedding the supplied message.
func CodeToAPIError(code int, message string) any {
switch code {
- case http.StatusNotFound:
- return NotFoundError{
+
+ case http.StatusBadRequest:
+ return ValidationError{
Error: struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Bad request"`
}{
Message: message,
},
@@ -84,16 +85,25 @@ func CodeToAPIError(code int, message string) any {
case http.StatusUnauthorized:
return UnauthorizedError{
Error: struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Unauthorized"`
}{
Message: message,
},
}
- case http.StatusBadRequest:
- return ValidationError{
+ case http.StatusForbidden:
+ return ForbiddenError{
Error: struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Forbidden"`
+ }{
+ Message: message,
+ },
+ }
+
+ case http.StatusNotFound:
+ return NotFoundError{
+ Error: struct {
+ Message string `json:"message" example:"Resource not found"`
}{
Message: message,
},
@@ -102,7 +112,7 @@ func CodeToAPIError(code int, message string) any {
default:
return ServerError{
Error: struct {
- Message string `json:"message"`
+ Message string `json:"message" example:"Internal server error"`
}{
Message: message,
},
From cfbe6135e17b86c347649809b3d7508f10822ab5 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 31 Jan 2025 10:50:54 +0100
Subject: [PATCH 003/132] GO-4459: Return proper api errors and 423 from
middleware
---
core/api/docs/docs.go | 32 +++++++++++++++++++++++++++++
core/api/docs/swagger.json | 32 +++++++++++++++++++++++++++++
core/api/docs/swagger.yaml | 21 +++++++++++++++++++
core/api/internal/object/handler.go | 2 ++
core/api/internal/space/handler.go | 1 +
core/api/server/middleware.go | 16 ++++++++++-----
core/api/util/error.go | 16 +++++++++++++++
7 files changed, 115 insertions(+), 5 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 239cbb9d8..66823dff8 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -268,6 +268,12 @@ const docTemplate = `{
"$ref": "#/definitions/util.UnauthorizedError"
}
},
+ "423": {
+ "description": "Rate limit exceeded",
+ "schema": {
+ "$ref": "#/definitions/util.RateLimitError"
+ }
+ },
"500": {
"description": "Internal server error",
"schema": {
@@ -440,6 +446,12 @@ const docTemplate = `{
"$ref": "#/definitions/util.UnauthorizedError"
}
},
+ "423": {
+ "description": "Rate limit exceeded",
+ "schema": {
+ "$ref": "#/definitions/util.RateLimitError"
+ }
+ },
"500": {
"description": "Internal server error",
"schema": {
@@ -556,6 +568,12 @@ const docTemplate = `{
"$ref": "#/definitions/util.NotFoundError"
}
},
+ "423": {
+ "description": "Rate limit exceeded",
+ "schema": {
+ "$ref": "#/definitions/util.RateLimitError"
+ }
+ },
"500": {
"description": "Internal server error",
"schema": {
@@ -1725,6 +1743,20 @@ const docTemplate = `{
}
}
},
+ "util.RateLimitError": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "Rate limit exceeded"
+ }
+ }
+ }
+ }
+ },
"util.ServerError": {
"type": "object",
"properties": {
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 72c7919b2..13034aae6 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -262,6 +262,12 @@
"$ref": "#/definitions/util.UnauthorizedError"
}
},
+ "423": {
+ "description": "Rate limit exceeded",
+ "schema": {
+ "$ref": "#/definitions/util.RateLimitError"
+ }
+ },
"500": {
"description": "Internal server error",
"schema": {
@@ -434,6 +440,12 @@
"$ref": "#/definitions/util.UnauthorizedError"
}
},
+ "423": {
+ "description": "Rate limit exceeded",
+ "schema": {
+ "$ref": "#/definitions/util.RateLimitError"
+ }
+ },
"500": {
"description": "Internal server error",
"schema": {
@@ -550,6 +562,12 @@
"$ref": "#/definitions/util.NotFoundError"
}
},
+ "423": {
+ "description": "Rate limit exceeded",
+ "schema": {
+ "$ref": "#/definitions/util.RateLimitError"
+ }
+ },
"500": {
"description": "Internal server error",
"schema": {
@@ -1719,6 +1737,20 @@
}
}
},
+ "util.RateLimitError": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "Rate limit exceeded"
+ }
+ }
+ }
+ }
+ },
"util.ServerError": {
"type": "object",
"properties": {
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index fbbc53a88..29f3e2d8f 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -568,6 +568,15 @@ definitions:
type: string
type: object
type: object
+ util.RateLimitError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Rate limit exceeded
+ type: string
+ type: object
+ type: object
util.ServerError:
properties:
error:
@@ -775,6 +784,10 @@ paths:
description: Unauthorized
schema:
$ref: '#/definitions/util.UnauthorizedError'
+ "423":
+ description: Rate limit exceeded
+ schema:
+ $ref: '#/definitions/util.RateLimitError'
"500":
description: Internal server error
schema:
@@ -892,6 +905,10 @@ paths:
description: Unauthorized
schema:
$ref: '#/definitions/util.UnauthorizedError'
+ "423":
+ description: Rate limit exceeded
+ schema:
+ $ref: '#/definitions/util.RateLimitError'
"500":
description: Internal server error
schema:
@@ -933,6 +950,10 @@ paths:
description: Resource not found
schema:
$ref: '#/definitions/util.NotFoundError'
+ "423":
+ description: Rate limit exceeded
+ schema:
+ $ref: '#/definitions/util.RateLimitError'
"500":
description: Internal server error
schema:
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index 671f25583..57c1e2e87 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -91,6 +91,7 @@ func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 403 {object} util.ForbiddenError "Forbidden"
// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Router /spaces/{space_id}/objects/{object_id} [delete]
func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
@@ -126,6 +127,7 @@ func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} ObjectResponse "The created object"
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Router /spaces/{space_id}/objects [post]
func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 2a6ca043d..962423a3e 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -52,6 +52,7 @@ func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
// @Success 200 {object} CreateSpaceResponse "Space created successfully"
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Router /spaces [post]
func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go
index da05740b8..d2a2d23c9 100644
--- a/core/api/server/middleware.go
+++ b/core/api/server/middleware.go
@@ -11,6 +11,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/anyproto/anytype-heart/core/anytype/account"
+ "github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
)
@@ -26,7 +27,8 @@ func (s *Server) rateLimit(max float64) gin.HandlerFunc {
return func(c *gin.Context) {
httpError := tollbooth.LimitByRequest(lmt, c.Writer, c.Request)
if httpError != nil {
- c.AbortWithStatusJSON(httpError.StatusCode, gin.H{"error": httpError.Message})
+ apiErr := util.CodeToAPIError(httpError.StatusCode, httpError.Message)
+ c.AbortWithStatusJSON(httpError.StatusCode, apiErr)
return
}
c.Next()
@@ -38,12 +40,14 @@ func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.Handle
return func(c *gin.Context) {
authHeader := c.GetHeader("Authorization")
if authHeader == "" {
- c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Missing Authorization header"})
+ apiErr := util.CodeToAPIError(http.StatusUnauthorized, "Missing Authorization header")
+ c.AbortWithStatusJSON(http.StatusUnauthorized, apiErr)
return
}
if !strings.HasPrefix(authHeader, "Bearer ") {
- c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid Authorization header format"})
+ apiErr := util.CodeToAPIError(http.StatusUnauthorized, "Invalid Authorization header format")
+ c.AbortWithStatusJSON(http.StatusUnauthorized, apiErr)
return
}
key := strings.TrimPrefix(authHeader, "Bearer ")
@@ -57,7 +61,8 @@ func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.Handle
if !exists {
response := mw.WalletCreateSession(context.Background(), &pb.RpcWalletCreateSessionRequest{Auth: &pb.RpcWalletCreateSessionRequestAuthOfAppKey{AppKey: key}})
if response.Error.Code != pb.RpcWalletCreateSessionResponseError_NULL {
- c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid token"})
+ apiErr := util.CodeToAPIError(http.StatusUnauthorized, "Invalid token")
+ c.AbortWithStatusJSON(http.StatusUnauthorized, apiErr)
return
}
token = response.Token
@@ -78,7 +83,8 @@ func (s *Server) ensureAccountInfo(accountService account.Service) gin.HandlerFu
return func(c *gin.Context) {
accInfo, err := accountService.GetInfo(context.Background())
if err != nil {
- c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("failed to get account info: %v", err)})
+ apiErr := util.CodeToAPIError(http.StatusInternalServerError, fmt.Sprintf("failed to get account info: %v", err))
+ c.AbortWithStatusJSON(http.StatusInternalServerError, apiErr)
return
}
diff --git a/core/api/util/error.go b/core/api/util/error.go
index acec46041..77aeff751 100644
--- a/core/api/util/error.go
+++ b/core/api/util/error.go
@@ -33,6 +33,13 @@ type NotFoundError struct {
} `json:"error"`
}
+// RateLimitError is a struct for 423 errors
+type RateLimitError struct {
+ Error struct {
+ Message string `json:"message" example:"Rate limit exceeded"`
+ } `json:"error"`
+}
+
// ServerError is a struct for 500 errors
type ServerError struct {
Error struct {
@@ -109,6 +116,15 @@ func CodeToAPIError(code int, message string) any {
},
}
+ case http.StatusTooManyRequests:
+ return RateLimitError{
+ Error: struct {
+ Message string `json:"message" example:"Rate limit exceeded"`
+ }{
+ Message: message,
+ },
+ }
+
default:
return ServerError{
Error: struct {
From 86975463fdc2f5909f458b1c6f33a76c989b68d6 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 3 Feb 2025 16:24:56 +0100
Subject: [PATCH 004/132] GO-4459: Add last_modified sort criterion as fallback
for last_opened sort
---
core/api/internal/search/service.go | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index 58c783ef3..ecd240871 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -48,7 +48,7 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
baseFilters := s.prepareBaseFilters()
queryFilters := s.prepareQueryFilter(request.Query)
sorts := s.prepareSorts(request.Sort)
- dateToSortAfter := sorts.RelationKey
+ dateToSortAfter := sorts[0].RelationKey
allResponses := make([]*pb.RpcObjectSearchResponse, 0, len(spaces))
for _, space := range spaces {
@@ -59,7 +59,7 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
objResp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: space.Id,
Filters: filters,
- Sorts: []*model.BlockContentDataviewSort{sorts},
+ Sorts: sorts,
Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeySpaceId.String(), dateToSortAfter},
Limit: int32(offset + limit), // nolint: gosec
})
@@ -91,7 +91,7 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
}
// sort after posix last_modified_date to achieve descending sort order across all spaces
- sort.Slice(combinedRecords, func(i, j int) bool {
+ sort.SliceStable(combinedRecords, func(i, j int) bool {
return combinedRecords[i].DateToSortAfter > combinedRecords[j].DateToSortAfter
})
@@ -118,12 +118,12 @@ func (s *SearchService) Search(ctx context.Context, spaceId string, request Sear
filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, queryFilters, typeFilters)
sorts := s.prepareSorts(request.Sort)
- dateToSortAfter := sorts.RelationKey
+ dateToSortAfter := sorts[0].RelationKey
resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: filters,
- Sorts: []*model.BlockContentDataviewSort{sorts},
+ Sorts: sorts,
Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeySpaceId.String(), dateToSortAfter},
})
@@ -262,14 +262,28 @@ func (s *SearchService) prepareObjectTypeFilters(spaceId string, objectTypes []s
}
// prepareSorts returns a sort filter based on the given sort parameters
-func (s *SearchService) prepareSorts(sort SortOptions) *model.BlockContentDataviewSort {
- return &model.BlockContentDataviewSort{
+func (s *SearchService) prepareSorts(sort SortOptions) []*model.BlockContentDataviewSort {
+ primarySort := &model.BlockContentDataviewSort{
RelationKey: s.getSortRelationKey(sort.Timestamp),
Type: s.getSortDirection(sort.Direction),
Format: model.RelationFormat_date,
IncludeTime: true,
EmptyPlacement: model.BlockContentDataviewSort_NotSpecified,
}
+
+ // last_opened_date possibly is empty, wherefore we sort by last_modified_date as secondary criterion
+ if primarySort.RelationKey == bundle.RelationKeyLastOpenedDate.String() {
+ secondarySort := &model.BlockContentDataviewSort{
+ RelationKey: bundle.RelationKeyLastModifiedDate.String(),
+ Type: s.getSortDirection(sort.Direction),
+ Format: model.RelationFormat_date,
+ IncludeTime: true,
+ EmptyPlacement: model.BlockContentDataviewSort_NotSpecified,
+ }
+ return []*model.BlockContentDataviewSort{primarySort, secondarySort}
+ }
+
+ return []*model.BlockContentDataviewSort{primarySort}
}
// getSortRelationKey returns the relation key for the given sort timestamp
From 6f238c480fb3b8556022275a44044d831d2904e0 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 3 Feb 2025 16:25:17 +0100
Subject: [PATCH 005/132] GO-4459: Add ANYTYPE_API_DEBUG to run config
---
.run/Run.run.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.run/Run.run.xml b/.run/Run.run.xml
index 47b924fe5..78502fd86 100644
--- a/.run/Run.run.xml
+++ b/.run/Run.run.xml
@@ -9,6 +9,7 @@
+
From e4fa847daee41b06d9101d5fcbbeeeef9102ef51 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 9 Feb 2025 18:32:21 +0100
Subject: [PATCH 006/132] GO-4459: Add endpoint for single space
---
core/api/docs/docs.go | 77 ++++++++++++++++++++++++------
core/api/docs/swagger.json | 77 ++++++++++++++++++++++++------
core/api/docs/swagger.yaml | 48 +++++++++++++++----
core/api/internal/space/handler.go | 36 +++++++++++++-
core/api/internal/space/model.go | 8 ++--
core/api/internal/space/service.go | 52 +++++++++++++++++---
core/api/server/router.go | 1 +
7 files changed, 250 insertions(+), 49 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 66823dff8..75a4a45c8 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -253,7 +253,7 @@ const docTemplate = `{
"200": {
"description": "Space created successfully",
"schema": {
- "$ref": "#/definitions/space.CreateSpaceResponse"
+ "$ref": "#/definitions/space.SpaceResponse"
}
},
"400": {
@@ -283,6 +283,55 @@ const docTemplate = `{
}
}
},
+ "/spaces/{space_id}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "spaces"
+ ],
+ "summary": "Get space",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Space",
+ "schema": {
+ "$ref": "#/definitions/space.SpaceResponse"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Space not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ }
+ },
"/spaces/{space_id}/members": {
"get": {
"consumes": [
@@ -1556,19 +1605,6 @@ const docTemplate = `{
}
}
},
- "space.CreateSpaceResponse": {
- "type": "object",
- "properties": {
- "space": {
- "description": "The created space",
- "allOf": [
- {
- "$ref": "#/definitions/space.Space"
- }
- ]
- }
- }
- },
"space.Member": {
"type": "object",
"properties": {
@@ -1715,6 +1751,19 @@ const docTemplate = `{
}
}
},
+ "space.SpaceResponse": {
+ "type": "object",
+ "properties": {
+ "space": {
+ "description": "The space",
+ "allOf": [
+ {
+ "$ref": "#/definitions/space.Space"
+ }
+ ]
+ }
+ }
+ },
"util.ForbiddenError": {
"type": "object",
"properties": {
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 13034aae6..edc96b8e6 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -247,7 +247,7 @@
"200": {
"description": "Space created successfully",
"schema": {
- "$ref": "#/definitions/space.CreateSpaceResponse"
+ "$ref": "#/definitions/space.SpaceResponse"
}
},
"400": {
@@ -277,6 +277,55 @@
}
}
},
+ "/spaces/{space_id}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "spaces"
+ ],
+ "summary": "Get space",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Space",
+ "schema": {
+ "$ref": "#/definitions/space.SpaceResponse"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Space not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ }
+ },
"/spaces/{space_id}/members": {
"get": {
"consumes": [
@@ -1550,19 +1599,6 @@
}
}
},
- "space.CreateSpaceResponse": {
- "type": "object",
- "properties": {
- "space": {
- "description": "The created space",
- "allOf": [
- {
- "$ref": "#/definitions/space.Space"
- }
- ]
- }
- }
- },
"space.Member": {
"type": "object",
"properties": {
@@ -1709,6 +1745,19 @@
}
}
},
+ "space.SpaceResponse": {
+ "type": "object",
+ "properties": {
+ "space": {
+ "description": "The space",
+ "allOf": [
+ {
+ "$ref": "#/definitions/space.Space"
+ }
+ ]
+ }
+ }
+ },
"util.ForbiddenError": {
"type": "object",
"properties": {
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 29f3e2d8f..5e5dd22fb 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -427,13 +427,6 @@ definitions:
example: New Space
type: string
type: object
- space.CreateSpaceResponse:
- properties:
- space:
- allOf:
- - $ref: '#/definitions/space.Space'
- description: The created space
- type: object
space.Member:
properties:
global_name:
@@ -550,6 +543,13 @@ definitions:
example: bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y
type: string
type: object
+ space.SpaceResponse:
+ properties:
+ space:
+ allOf:
+ - $ref: '#/definitions/space.Space'
+ description: The space
+ type: object
util.ForbiddenError:
properties:
error:
@@ -775,7 +775,7 @@ paths:
"200":
description: Space created successfully
schema:
- $ref: '#/definitions/space.CreateSpaceResponse'
+ $ref: '#/definitions/space.SpaceResponse'
"400":
description: Bad request
schema:
@@ -795,6 +795,38 @@ paths:
summary: Create space
tags:
- spaces
+ /spaces/{space_id}:
+ get:
+ consumes:
+ - application/json
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: Space
+ schema:
+ $ref: '#/definitions/space.SpaceResponse'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/util.UnauthorizedError'
+ "404":
+ description: Space not found
+ schema:
+ $ref: '#/definitions/util.NotFoundError'
+ "500":
+ description: Internal server error
+ schema:
+ $ref: '#/definitions/util.ServerError'
+ summary: Get space
+ tags:
+ - spaces
/spaces/{space_id}/members:
get:
consumes:
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 962423a3e..9aa63043c 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -42,6 +42,38 @@ func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
}
}
+// GetSpaceHandler retrieves a space
+//
+// @Summary Get space
+// @Tags spaces
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Success 200 {object} SpaceResponse "Space"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Space not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /spaces/{space_id} [get]
+func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceId := c.Param("space_id")
+
+ space, err := s.GetSpace(c.Request.Context(), spaceId)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrWorkspaceNotFound, http.StatusNotFound),
+ util.ErrToCode(ErrFailedOpenWorkspace, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ c.JSON(http.StatusOK, SpaceResponse{Space: space})
+ }
+}
+
// CreateSpaceHandler creates a new space
//
// @Summary Create space
@@ -49,7 +81,7 @@ func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
// @Accept json
// @Produce json
// @Param name body CreateSpaceRequest true "Space to create"
-// @Success 200 {object} CreateSpaceResponse "Space created successfully"
+// @Success 200 {object} SpaceResponse "Space created successfully"
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
@@ -75,7 +107,7 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
return
}
- c.JSON(http.StatusOK, CreateSpaceResponse{Space: space})
+ c.JSON(http.StatusOK, SpaceResponse{Space: space})
}
}
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index 73cbe732b..877978edc 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -1,13 +1,13 @@
package space
+type SpaceResponse struct {
+ Space Space `json:"space"` // The space
+}
+
type CreateSpaceRequest struct {
Name string `json:"name" example:"New Space"` // The name of the space
}
-type CreateSpaceResponse struct {
- Space Space `json:"space"` // The created space
-}
-
type Space struct {
Type string `json:"type" example:"space"` // The type of the object
Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index 9a617b847..a997e43cc 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -20,6 +20,7 @@ import (
var (
ErrFailedListSpaces = errors.New("failed to retrieve list of spaces")
ErrFailedOpenWorkspace = errors.New("failed to open workspace")
+ ErrWorkspaceNotFound = errors.New("workspace not found")
ErrFailedGenerateRandomIcon = errors.New("failed to generate random icon")
ErrFailedCreateSpace = errors.New("failed to create space")
ErrFailedListMembers = errors.New("failed to retrieve list of members")
@@ -27,6 +28,7 @@ var (
type Service interface {
ListSpaces(ctx context.Context, offset int, limit int) ([]Space, int, bool, error)
+ GetSpace(ctx context.Context, spaceId string) (Space, error)
CreateSpace(ctx context.Context, name string) (Space, error)
ListMembers(ctx context.Context, spaceId string, offset int, limit int) ([]Member, int, bool, error)
}
@@ -78,21 +80,55 @@ func (s *SpaceService) ListSpaces(ctx context.Context, offset int, limit int) (s
spaces = make([]Space, 0, len(paginatedRecords))
for _, record := range paginatedRecords {
- workspace, err := s.getWorkspaceInfo(record.Fields[bundle.RelationKeyTargetSpaceId.String()].GetStringValue())
+ name := record.Fields[bundle.RelationKeyName.String()].GetStringValue()
+ icon := util.GetIconFromEmojiOrImage(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
+
+ workspace, err := s.getWorkspaceInfo(record.Fields[bundle.RelationKeyTargetSpaceId.String()].GetStringValue(), name, icon)
if err != nil {
return nil, 0, false, err
}
- // TODO: name and icon are only returned here; fix that
- workspace.Name = record.Fields[bundle.RelationKeyName.String()].GetStringValue()
- workspace.Icon = util.GetIconFromEmojiOrImage(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
-
spaces = append(spaces, workspace)
}
return spaces, total, hasMore, nil
}
+// GetSpace returns the space info for the space with the given ID.
+func (s *SpaceService) GetSpace(ctx context.Context, spaceId string) (Space, error) {
+ // Check if the workspace exists and is active
+ resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
+ SpaceId: s.AccountInfo.TechSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyTargetSpaceId.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String(spaceId),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeySpaceLocalStatus.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
+ },
+ },
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
+ })
+
+ if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
+ return Space{}, ErrFailedOpenWorkspace
+ }
+
+ if len(resp.Records) == 0 {
+ return Space{}, ErrWorkspaceNotFound
+ }
+
+ name := resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue()
+ icon := util.GetIconFromEmojiOrImage(s.AccountInfo, resp.Records[0].Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
+ return s.getWorkspaceInfo(spaceId, name, icon)
+}
+
// CreateSpace creates a new space with the given name and returns the space info.
func (s *SpaceService) CreateSpace(ctx context.Context, name string) (Space, error) {
iconOption, err := rand.Int(rand.Reader, big.NewInt(13))
@@ -117,7 +153,7 @@ func (s *SpaceService) CreateSpace(ctx context.Context, name string) (Space, err
return Space{}, ErrFailedCreateSpace
}
- return s.getWorkspaceInfo(resp.SpaceId)
+ return s.getWorkspaceInfo(resp.SpaceId, name, "")
}
// ListMembers returns a paginated list of members in the space with the given ID.
@@ -210,7 +246,7 @@ func (s *SpaceService) GetParticipantDetails(mw service.ClientCommandsServer, sp
}
// getWorkspaceInfo returns the workspace info for the space with the given ID.
-func (s *SpaceService) getWorkspaceInfo(spaceId string) (space Space, err error) {
+func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon string) (space Space, err error) {
workspaceResponse := s.mw.WorkspaceOpen(context.Background(), &pb.RpcWorkspaceOpenRequest{
SpaceId: spaceId,
WithChat: true,
@@ -223,6 +259,8 @@ func (s *SpaceService) getWorkspaceInfo(spaceId string) (space Space, err error)
return Space{
Type: "space",
Id: spaceId,
+ Name: name,
+ Icon: icon,
HomeObjectId: workspaceResponse.Info.HomeObjectId,
ArchiveObjectId: workspaceResponse.Info.ArchiveObjectId,
ProfileObjectId: workspaceResponse.Info.ProfileObjectId,
diff --git a/core/api/server/router.go b/core/api/server/router.go
index e33206a32..d0467e936 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -78,6 +78,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
// Space
v1.GET("/spaces", space.GetSpacesHandler(s.spaceService))
+ v1.GET("/spaces/:space_id", space.GetSpaceHandler(s.spaceService))
v1.GET("/spaces/:space_id/members", space.GetMembersHandler(s.spaceService))
v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond), space.CreateSpaceHandler(s.spaceService))
From da5299019d9ced4e406d4341e43fe1ffec812736 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 9 Feb 2025 19:02:18 +0100
Subject: [PATCH 007/132] GO-4459: Add missing relation keys in GetSpace
---
core/api/internal/space/service.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index a997e43cc..b9c27bb57 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -113,7 +113,7 @@ func (s *SpaceService) GetSpace(ctx context.Context, spaceId string) (Space, err
Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
},
},
- Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
From 2010b1a2a37c3708b3782ce59e5ebc7ccc75e9a1 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 9 Feb 2025 19:31:07 +0100
Subject: [PATCH 008/132] GO-4459: Add endpoint for single member
---
core/api/docs/docs.go | 69 +++++++++++++++++++++++++++++
core/api/docs/swagger.json | 69 +++++++++++++++++++++++++++++
core/api/docs/swagger.yaml | 44 ++++++++++++++++++
core/api/internal/object/service.go | 14 +++++-
core/api/internal/space/handler.go | 34 ++++++++++++++
core/api/internal/space/model.go | 4 ++
core/api/internal/space/service.go | 16 ++++---
core/api/server/router.go | 1 +
8 files changed, 243 insertions(+), 8 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 75a4a45c8..79214ab94 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -390,6 +390,62 @@ const docTemplate = `{
}
}
},
+ "/spaces/{space_id}/members/{member_id}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "spaces"
+ ],
+ "summary": "Get member",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Member ID",
+ "name": "member_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Member",
+ "schema": {
+ "$ref": "#/definitions/space.MemberResponse"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Member not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ }
+ },
"/spaces/{space_id}/objects": {
"get": {
"consumes": [
@@ -1651,6 +1707,19 @@ const docTemplate = `{
}
}
},
+ "space.MemberResponse": {
+ "type": "object",
+ "properties": {
+ "member": {
+ "description": "The member",
+ "allOf": [
+ {
+ "$ref": "#/definitions/space.Member"
+ }
+ ]
+ }
+ }
+ },
"space.Space": {
"type": "object",
"properties": {
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index edc96b8e6..7978d53c0 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -384,6 +384,62 @@
}
}
},
+ "/spaces/{space_id}/members/{member_id}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "spaces"
+ ],
+ "summary": "Get member",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Member ID",
+ "name": "member_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Member",
+ "schema": {
+ "$ref": "#/definitions/space.MemberResponse"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Member not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ }
+ },
"/spaces/{space_id}/objects": {
"get": {
"consumes": [
@@ -1645,6 +1701,19 @@
}
}
},
+ "space.MemberResponse": {
+ "type": "object",
+ "properties": {
+ "member": {
+ "description": "The member",
+ "allOf": [
+ {
+ "$ref": "#/definitions/space.Member"
+ }
+ ]
+ }
+ }
+ },
"space.Space": {
"type": "object",
"properties": {
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 5e5dd22fb..1f1b9a769 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -463,6 +463,13 @@ definitions:
example: member
type: string
type: object
+ space.MemberResponse:
+ properties:
+ member:
+ allOf:
+ - $ref: '#/definitions/space.Member'
+ description: The member
+ type: object
space.Space:
properties:
account_space_id:
@@ -867,6 +874,43 @@ paths:
summary: List members
tags:
- spaces
+ /spaces/{space_id}/members/{member_id}:
+ get:
+ consumes:
+ - application/json
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ type: string
+ - description: Member ID
+ in: path
+ name: member_id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: Member
+ schema:
+ $ref: '#/definitions/space.MemberResponse'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/util.UnauthorizedError'
+ "404":
+ description: Member not found
+ schema:
+ $ref: '#/definitions/util.NotFoundError'
+ "500":
+ description: Internal server error
+ schema:
+ $ref: '#/definitions/util.ServerError'
+ summary: Get member
+ tags:
+ - spaces
/spaces/{space_id}/objects:
get:
consumes:
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 91efda7b2..284a588ad 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -447,6 +447,16 @@ func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
}
}
+ memberLastModifiedBy, err := s.spaceService.GetMember(context.Background(), resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), lastModifiedById)
+ if err != nil {
+ memberLastModifiedBy = space.Member{}
+ }
+
+ memberCreator, err := s.spaceService.GetMember(context.Background(), resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), creatorId)
+ if err != nil {
+ memberCreator = space.Member{}
+ }
+
return []Detail{
{
Id: "last_modified_date",
@@ -457,7 +467,7 @@ func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
{
Id: "last_modified_by",
Details: map[string]interface{}{
- "details": s.spaceService.GetParticipantDetails(s.mw, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), lastModifiedById),
+ "details": memberLastModifiedBy,
},
},
{
@@ -469,7 +479,7 @@ func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
{
Id: "created_by",
Details: map[string]interface{}{
- "details": s.spaceService.GetParticipantDetails(s.mw, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), creatorId),
+ "details": memberCreator,
},
},
{
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 9aa63043c..5dbbd2cd8 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -144,3 +144,37 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
pagination.RespondWithPagination(c, http.StatusOK, members, total, offset, limit, hasMore)
}
}
+
+// GetMemberHandler retrieves a member in a space
+//
+// @Summary Get member
+// @Tags spaces
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param member_id path string true "Member ID"
+// @Success 200 {object} MemberResponse "Member"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Member not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /spaces/{space_id}/members/{member_id} [get]
+func GetMemberHandler(s *SpaceService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceId := c.Param("space_id")
+ memberId := c.Param("member_id")
+
+ member, err := s.GetMember(c.Request.Context(), spaceId, memberId)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrMemberNotFound, http.StatusNotFound),
+ util.ErrToCode(ErrFailedGetMember, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ c.JSON(http.StatusOK, MemberResponse{Member: member})
+ }
+}
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index 877978edc..6805de3cc 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -30,6 +30,10 @@ type Space struct {
NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
}
+type MemberResponse struct {
+ Member Member `json:"member"` // The member
+}
+
type Member struct {
Type string `json:"type" example:"member"` // The type of the object
Id string `json:"id" example:"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"` // The profile object id of the member
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index b9c27bb57..eb83f636c 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -24,6 +24,8 @@ var (
ErrFailedGenerateRandomIcon = errors.New("failed to generate random icon")
ErrFailedCreateSpace = errors.New("failed to create space")
ErrFailedListMembers = errors.New("failed to retrieve list of members")
+ ErrFailedGetMember = errors.New("failed to retrieve member")
+ ErrMemberNotFound = errors.New("member not found")
)
type Service interface {
@@ -31,6 +33,7 @@ type Service interface {
GetSpace(ctx context.Context, spaceId string) (Space, error)
CreateSpace(ctx context.Context, name string) (Space, error)
ListMembers(ctx context.Context, spaceId string, offset int, limit int) ([]Member, int, bool, error)
+ GetMember(ctx context.Context, spaceId string, memberId string) (Member, error)
}
type SpaceService struct {
@@ -210,26 +213,27 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
return members, total, hasMore, nil
}
-func (s *SpaceService) GetParticipantDetails(mw service.ClientCommandsServer, spaceId string, participantId string) Member {
- resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
+// GetMember returns the member with the given ID in the space with the given ID.
+func (s *SpaceService) GetMember(ctx context.Context, spaceId string, memberId string) (Member, error) {
+ resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyId.String(),
Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(participantId),
+ Value: pbtypes.String(memberId),
},
},
Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String(), bundle.RelationKeyIdentity.String(), bundle.RelationKeyGlobalName.String(), bundle.RelationKeyParticipantPermissions.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
- return Member{}
+ return Member{}, ErrFailedGetMember
}
if len(resp.Records) == 0 {
- return Member{}
+ return Member{}, ErrMemberNotFound
}
icon := util.GetIconFromEmojiOrImage(s.AccountInfo, "", resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
@@ -242,7 +246,7 @@ func (s *SpaceService) GetParticipantDetails(mw service.ClientCommandsServer, sp
Identity: resp.Records[0].Fields[bundle.RelationKeyIdentity.String()].GetStringValue(),
GlobalName: resp.Records[0].Fields[bundle.RelationKeyGlobalName.String()].GetStringValue(),
Role: model.ParticipantPermissions_name[int32(resp.Records[0].Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())],
- }
+ }, nil
}
// getWorkspaceInfo returns the workspace info for the space with the given ID.
diff --git a/core/api/server/router.go b/core/api/server/router.go
index d0467e936..ed1b00a99 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -80,6 +80,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
v1.GET("/spaces", space.GetSpacesHandler(s.spaceService))
v1.GET("/spaces/:space_id", space.GetSpaceHandler(s.spaceService))
v1.GET("/spaces/:space_id/members", space.GetMembersHandler(s.spaceService))
+ v1.GET("/spaces/:space_id/members/:member_id", space.GetMemberHandler(s.spaceService))
v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond), space.CreateSpaceHandler(s.spaceService))
// Type
From 544d9488c7f8b4b7f42558348fb299e0bf1bc054 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 12 Feb 2025 12:17:47 +0100
Subject: [PATCH 009/132] GO-4459: Add handlers and routes for list endpoints
---
core/api/docs/docs.go | 285 ++++++++++++++++++++++++++++
core/api/docs/swagger.json | 285 ++++++++++++++++++++++++++++
core/api/docs/swagger.yaml | 191 +++++++++++++++++++
core/api/internal/export/service.go | 3 +-
core/api/internal/list/handler.go | 173 +++++++++++++++++
core/api/internal/list/service.go | 51 +++++
core/api/server/middleware.go | 1 -
core/api/server/router.go | 7 +
core/api/server/server.go | 3 +
9 files changed, 996 insertions(+), 3 deletions(-)
create mode 100644 core/api/internal/list/handler.go
create mode 100644 core/api/internal/list/service.go
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 79214ab94..8283877be 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -1063,6 +1063,291 @@ const docTemplate = `{
}
}
}
+ },
+ "/v1/spaces/{space_id}/lists/{list_id}/objects": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Get objects in list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "default": 0,
+ "description": "The number of items to skip before starting to collect the result set",
+ "name": "offset",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "The number of items to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "List of objects",
+ "schema": {
+ "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Add objects to list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "List of object IDs",
+ "name": "objects",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Objects added successfully",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "schema": {
+ "$ref": "#/definitions/util.ValidationError"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Remove objects from list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "List of object IDs",
+ "name": "objects",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Objects removed successfully",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "schema": {
+ "$ref": "#/definitions/util.ValidationError"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Update object order in list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "List of object IDs",
+ "name": "objects",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Objects updated successfully",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "schema": {
+ "$ref": "#/definitions/util.ValidationError"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ }
}
},
"definitions": {
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 7978d53c0..2de24feaf 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1057,6 +1057,291 @@
}
}
}
+ },
+ "/v1/spaces/{space_id}/lists/{list_id}/objects": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Get objects in list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "default": 0,
+ "description": "The number of items to skip before starting to collect the result set",
+ "name": "offset",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "The number of items to return",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "List of objects",
+ "schema": {
+ "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Add objects to list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "List of object IDs",
+ "name": "objects",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Objects added successfully",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "schema": {
+ "$ref": "#/definitions/util.ValidationError"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Remove objects from list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "List of object IDs",
+ "name": "objects",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Objects removed successfully",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "schema": {
+ "$ref": "#/definitions/util.ValidationError"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "list"
+ ],
+ "summary": "Update object order in list",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Space ID",
+ "name": "space_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "List ID",
+ "name": "list_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "List of object IDs",
+ "name": "objects",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Objects updated successfully",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "400": {
+ "description": "Bad request",
+ "schema": {
+ "$ref": "#/definitions/util.ValidationError"
+ }
+ },
+ "401": {
+ "description": "Unauthorized",
+ "schema": {
+ "$ref": "#/definitions/util.UnauthorizedError"
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "schema": {
+ "$ref": "#/definitions/util.NotFoundError"
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "schema": {
+ "$ref": "#/definitions/util.ServerError"
+ }
+ }
+ }
+ }
}
},
"definitions": {
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 1f1b9a769..61b43ac73 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1328,6 +1328,197 @@ paths:
summary: Get template
tags:
- types
+ /v1/spaces/{space_id}/lists/{list_id}/objects:
+ delete:
+ consumes:
+ - application/json
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ type: string
+ - description: List of object IDs
+ in: body
+ name: objects
+ required: true
+ schema:
+ items:
+ type: string
+ type: array
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: Objects removed successfully
+ schema:
+ type: string
+ "400":
+ description: Bad request
+ schema:
+ $ref: '#/definitions/util.ValidationError'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/util.UnauthorizedError'
+ "404":
+ description: Not found
+ schema:
+ $ref: '#/definitions/util.NotFoundError'
+ "500":
+ description: Internal server error
+ schema:
+ $ref: '#/definitions/util.ServerError'
+ summary: Remove objects from list
+ tags:
+ - list
+ get:
+ consumes:
+ - application/json
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ type: string
+ - default: 0
+ description: The number of items to skip before starting to collect the result
+ set
+ in: query
+ name: offset
+ type: integer
+ - description: The number of items to return
+ in: query
+ name: limit
+ type: integer
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: List of objects
+ schema:
+ $ref: '#/definitions/pagination.PaginatedResponse-object_Object'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/util.UnauthorizedError'
+ "404":
+ description: Not found
+ schema:
+ $ref: '#/definitions/util.NotFoundError'
+ "500":
+ description: Internal server error
+ schema:
+ $ref: '#/definitions/util.ServerError'
+ summary: Get objects in list
+ tags:
+ - list
+ patch:
+ consumes:
+ - application/json
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ type: string
+ - description: List of object IDs
+ in: body
+ name: objects
+ required: true
+ schema:
+ items:
+ type: string
+ type: array
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: Objects updated successfully
+ schema:
+ type: string
+ "400":
+ description: Bad request
+ schema:
+ $ref: '#/definitions/util.ValidationError'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/util.UnauthorizedError'
+ "404":
+ description: Not found
+ schema:
+ $ref: '#/definitions/util.NotFoundError'
+ "500":
+ description: Internal server error
+ schema:
+ $ref: '#/definitions/util.ServerError'
+ summary: Update object order in list
+ tags:
+ - list
+ post:
+ consumes:
+ - application/json
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ type: string
+ - description: List of object IDs
+ in: body
+ name: objects
+ required: true
+ schema:
+ items:
+ type: string
+ type: array
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: Objects added successfully
+ schema:
+ type: string
+ "400":
+ description: Bad request
+ schema:
+ $ref: '#/definitions/util.ValidationError'
+ "401":
+ description: Unauthorized
+ schema:
+ $ref: '#/definitions/util.UnauthorizedError'
+ "404":
+ description: Not found
+ schema:
+ $ref: '#/definitions/util.NotFoundError'
+ "500":
+ description: Internal server error
+ schema:
+ $ref: '#/definitions/util.ServerError'
+ summary: Add objects to list
+ tags:
+ - list
securityDefinitions:
BasicAuth:
type: basic
diff --git a/core/api/internal/export/service.go b/core/api/internal/export/service.go
index b20361351..bcb4e4e33 100644
--- a/core/api/internal/export/service.go
+++ b/core/api/internal/export/service.go
@@ -19,8 +19,7 @@ type Service interface {
}
type ExportService struct {
- mw service.ClientCommandsServer
- AccountInfo *model.AccountInfo
+ mw service.ClientCommandsServer
}
func NewService(mw service.ClientCommandsServer) *ExportService {
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
new file mode 100644
index 000000000..f7e6ad959
--- /dev/null
+++ b/core/api/internal/list/handler.go
@@ -0,0 +1,173 @@
+package list
+
+import (
+ "net/http"
+
+ "github.com/gin-gonic/gin"
+
+ "github.com/anyproto/anytype-heart/core/api/pagination"
+ "github.com/anyproto/anytype-heart/core/api/util"
+)
+
+// GetObjectsInListHandler
+//
+// @Summary Get objects in list
+// @Tags list
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return"
+// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [get]
+func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceID := c.Param("space_id")
+ listID := c.Param("list_id")
+ offset := c.GetInt("offset")
+ limit := c.GetInt("limit")
+
+ objects, total, hasMore, err := s.GetObjectsInList(c, spaceID, listID, offset, limit)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrFailedGetObjectsInList, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ pagination.RespondWithPagination(c, http.StatusOK, objects, total, offset, limit, hasMore)
+ }
+}
+
+// AddObjectsToListHandler
+//
+// @Summary Add objects to list
+// @Tags list
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param objects body []string true "List of object IDs"
+// @Success 200 {object} string "Objects added successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post]
+func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceID := c.Param("space_id")
+ listID := c.Param("list_id")
+
+ objects := []string{}
+ if err := c.ShouldBindJSON(&objects); err != nil {
+ apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
+ c.JSON(http.StatusBadRequest, apiErr)
+ return
+ }
+
+ err := s.AddObjectsToList(c, spaceID, listID, objects)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrFailedAddObjectsToList, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ c.JSON(http.StatusOK, "Objects added successfully")
+ }
+}
+
+// RemoveObjectsFromListHandler
+//
+// @Summary Remove objects from list
+// @Tags list
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param objects body []string true "List of object IDs"
+// @Success 200 {object} string "Objects removed successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [delete]
+func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceID := c.Param("space_id")
+ listID := c.Param("list_id")
+
+ objects := []string{}
+ if err := c.ShouldBindJSON(&objects); err != nil {
+ apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
+ c.JSON(http.StatusBadRequest, apiErr)
+ return
+ }
+
+ err := s.RemoveObjectsFromList(c, spaceID, listID, objects)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrFailedRemoveObjectsFromList, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ c.JSON(http.StatusOK, "Objects removed successfully")
+ }
+}
+
+// UpdateObjectsInListHandler
+//
+// @Summary Update object order in list
+// @Tags list
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param objects body []string true "List of object IDs"
+// @Success 200 {object} string "Objects updated successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [patch]
+func UpdateObjectsInListHandler(s *ListService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceID := c.Param("space_id")
+ listID := c.Param("list_id")
+
+ objects := []string{}
+ if err := c.ShouldBindJSON(&objects); err != nil {
+ apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
+ c.JSON(http.StatusBadRequest, apiErr)
+ return
+ }
+
+ err := s.UpdateObjectsInList(c, spaceID, listID, objects)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrFailedUpdateObjectsInList, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ c.JSON(http.StatusOK, "Objects updated successfully")
+ }
+}
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
new file mode 100644
index 000000000..b55868718
--- /dev/null
+++ b/core/api/internal/list/service.go
@@ -0,0 +1,51 @@
+package list
+
+import (
+ "context"
+ "errors"
+
+ "github.com/anyproto/anytype-heart/pb/service"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+)
+
+var (
+ ErrFailedGetObjectsInList = errors.New("failed to get objects in list")
+ ErrFailedAddObjectsToList = errors.New("failed to add objects to list")
+ ErrFailedRemoveObjectsFromList = errors.New("failed to remove objects from list")
+ ErrFailedUpdateObjectsInList = errors.New("failed to update objects in list")
+)
+
+type Service interface {
+ GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]*model.Object, int, bool, error)
+ AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIDs []string) error
+ RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIDs []string) error
+ UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIDs []string) error
+}
+
+type ListService struct {
+ mw service.ClientCommandsServer
+}
+
+func NewService(mw service.ClientCommandsServer) *ListService {
+ return &ListService{mw: mw}
+}
+
+// GetObjectsInList retrieves objects in a list
+func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]*model.Object, int, bool, error) {
+ return nil, 0, false, nil
+}
+
+// AddObjectsToList adds objects to a list
+func (s *ListService) AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIDs []string) error {
+ return nil
+}
+
+// RemoveObjectsFromList removes objects from a list
+func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIDs []string) error {
+ return nil
+}
+
+// UpdateObjectsInList updates an object in a list
+func (s *ListService) UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIDs []string) error {
+ return nil
+}
diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go
index d2a2d23c9..1313127f8 100644
--- a/core/api/server/middleware.go
+++ b/core/api/server/middleware.go
@@ -88,7 +88,6 @@ func (s *Server) ensureAccountInfo(accountService account.Service) gin.HandlerFu
return
}
- s.exportService.AccountInfo = accInfo
s.objectService.AccountInfo = accInfo
s.spaceService.AccountInfo = accInfo
s.searchService.AccountInfo = accInfo
diff --git a/core/api/server/router.go b/core/api/server/router.go
index ed1b00a99..f7aad0482 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -12,6 +12,7 @@ import (
"github.com/anyproto/anytype-heart/core/anytype/account"
"github.com/anyproto/anytype-heart/core/api/internal/auth"
"github.com/anyproto/anytype-heart/core/api/internal/export"
+ "github.com/anyproto/anytype-heart/core/api/internal/list"
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/internal/search"
"github.com/anyproto/anytype-heart/core/api/internal/space"
@@ -66,6 +67,12 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
// Export
v1.POST("/spaces/:space_id/objects/:object_id/export/:format", export.GetObjectExportHandler(s.exportService))
+ // List
+ v1.GET("/v1/spaces/:space_id/lists/:list_id/objects", list.GetObjectsInListHandler(s.listService))
+ v1.POST("/v1/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
+ v1.DELETE("/v1/spaces/:space_id/lists/:list_id/objects", list.RemoveObjectsFromListHandler(s.listService))
+ v1.PATCH("/v1/spaces/:space_id/lists/:list_id/objects", list.UpdateObjectsInListHandler(s.listService))
+
// Object
v1.GET("/spaces/:space_id/objects", object.GetObjectsHandler(s.objectService))
v1.GET("/spaces/:space_id/objects/:object_id", object.GetObjectHandler(s.objectService))
diff --git a/core/api/server/server.go b/core/api/server/server.go
index 78fb46793..56b312d69 100644
--- a/core/api/server/server.go
+++ b/core/api/server/server.go
@@ -8,6 +8,7 @@ import (
"github.com/anyproto/anytype-heart/core/anytype/account"
"github.com/anyproto/anytype-heart/core/api/internal/auth"
"github.com/anyproto/anytype-heart/core/api/internal/export"
+ "github.com/anyproto/anytype-heart/core/api/internal/list"
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/internal/search"
"github.com/anyproto/anytype-heart/core/api/internal/space"
@@ -20,6 +21,7 @@ type Server struct {
authService *auth.AuthService
exportService *export.ExportService
+ listService *list.ListService
objectService *object.ObjectService
spaceService *space.SpaceService
searchService *search.SearchService
@@ -33,6 +35,7 @@ func NewServer(accountService account.Service, mw service.ClientCommandsServer)
s := &Server{
authService: auth.NewService(mw),
exportService: export.NewService(mw),
+ listService: list.NewService(mw),
spaceService: space.NewService(mw),
}
From 526de3ccd31f407213316ab61867c3f0e39e186f Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 12 Feb 2025 15:47:05 +0100
Subject: [PATCH 010/132] GO-4459: Add initial list service implementation
---
core/api/docs/docs.go | 8 +--
core/api/docs/swagger.json | 8 +--
core/api/docs/swagger.yaml | 8 +--
core/api/internal/list/handler.go | 32 ++++++------
core/api/internal/list/service.go | 85 +++++++++++++++++++++++++++----
core/api/server/server.go | 2 +-
6 files changed, 103 insertions(+), 40 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 8283877be..f158831eb 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -1073,7 +1073,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Get objects in list",
"parameters": [
@@ -1140,7 +1140,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Add objects to list",
"parameters": [
@@ -1212,7 +1212,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Remove objects from list",
"parameters": [
@@ -1284,7 +1284,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Update object order in list",
"parameters": [
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 2de24feaf..0d063df11 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1067,7 +1067,7 @@
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Get objects in list",
"parameters": [
@@ -1134,7 +1134,7 @@
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Add objects to list",
"parameters": [
@@ -1206,7 +1206,7 @@
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Remove objects from list",
"parameters": [
@@ -1278,7 +1278,7 @@
"application/json"
],
"tags": [
- "list"
+ "lists"
],
"summary": "Update object order in list",
"parameters": [
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 61b43ac73..5f31973fa 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1376,7 +1376,7 @@ paths:
$ref: '#/definitions/util.ServerError'
summary: Remove objects from list
tags:
- - list
+ - lists
get:
consumes:
- application/json
@@ -1422,7 +1422,7 @@ paths:
$ref: '#/definitions/util.ServerError'
summary: Get objects in list
tags:
- - list
+ - lists
patch:
consumes:
- application/json
@@ -1470,7 +1470,7 @@ paths:
$ref: '#/definitions/util.ServerError'
summary: Update object order in list
tags:
- - list
+ - lists
post:
consumes:
- application/json
@@ -1518,7 +1518,7 @@ paths:
$ref: '#/definitions/util.ServerError'
summary: Add objects to list
tags:
- - list
+ - lists
securityDefinitions:
BasicAuth:
type: basic
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index f7e6ad959..e1e7fbd75 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -12,7 +12,7 @@ import (
// GetObjectsInListHandler
//
// @Summary Get objects in list
-// @Tags list
+// @Tags lists
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
@@ -26,12 +26,12 @@ import (
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [get]
func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
- spaceID := c.Param("space_id")
- listID := c.Param("list_id")
+ spaceId := c.Param("space_id")
+ listId := c.Param("list_id")
offset := c.GetInt("offset")
limit := c.GetInt("limit")
- objects, total, hasMore, err := s.GetObjectsInList(c, spaceID, listID, offset, limit)
+ objects, total, hasMore, err := s.GetObjectsInList(c, spaceId, listId, offset, limit)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedGetObjectsInList, http.StatusInternalServerError),
)
@@ -49,7 +49,7 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
// AddObjectsToListHandler
//
// @Summary Add objects to list
-// @Tags list
+// @Tags lists
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
@@ -63,8 +63,8 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post]
func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
- spaceID := c.Param("space_id")
- listID := c.Param("list_id")
+ spaceId := c.Param("space_id")
+ listId := c.Param("list_id")
objects := []string{}
if err := c.ShouldBindJSON(&objects); err != nil {
@@ -73,7 +73,7 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
return
}
- err := s.AddObjectsToList(c, spaceID, listID, objects)
+ err := s.AddObjectsToList(c, spaceId, listId, objects)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedAddObjectsToList, http.StatusInternalServerError),
)
@@ -91,7 +91,7 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
// RemoveObjectsFromListHandler
//
// @Summary Remove objects from list
-// @Tags list
+// @Tags lists
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
@@ -105,8 +105,8 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [delete]
func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
- spaceID := c.Param("space_id")
- listID := c.Param("list_id")
+ spaceId := c.Param("space_id")
+ listId := c.Param("list_id")
objects := []string{}
if err := c.ShouldBindJSON(&objects); err != nil {
@@ -115,7 +115,7 @@ func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
return
}
- err := s.RemoveObjectsFromList(c, spaceID, listID, objects)
+ err := s.RemoveObjectsFromList(c, spaceId, listId, objects)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedRemoveObjectsFromList, http.StatusInternalServerError),
)
@@ -133,7 +133,7 @@ func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
// UpdateObjectsInListHandler
//
// @Summary Update object order in list
-// @Tags list
+// @Tags lists
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
@@ -147,8 +147,8 @@ func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [patch]
func UpdateObjectsInListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
- spaceID := c.Param("space_id")
- listID := c.Param("list_id")
+ spaceId := c.Param("space_id")
+ listId := c.Param("list_id")
objects := []string{}
if err := c.ShouldBindJSON(&objects); err != nil {
@@ -157,7 +157,7 @@ func UpdateObjectsInListHandler(s *ListService) gin.HandlerFunc {
return
}
- err := s.UpdateObjectsInList(c, spaceID, listID, objects)
+ err := s.UpdateObjectsInList(c, spaceId, listId, objects)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedUpdateObjectsInList, http.StatusInternalServerError),
)
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index b55868718..943035c44 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -4,7 +4,11 @@ import (
"context"
"errors"
+ "github.com/anyproto/anytype-heart/core/api/internal/object"
+ "github.com/anyproto/anytype-heart/core/api/pagination"
+ "github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
+ "github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
@@ -17,35 +21,94 @@ var (
type Service interface {
GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]*model.Object, int, bool, error)
- AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIDs []string) error
- RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIDs []string) error
- UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIDs []string) error
+ AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error
+ RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
+ UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIds []string) error
}
type ListService struct {
- mw service.ClientCommandsServer
+ mw service.ClientCommandsServer
+ objectService *object.ObjectService
}
-func NewService(mw service.ClientCommandsServer) *ListService {
- return &ListService{mw: mw}
+func NewService(mw service.ClientCommandsServer, objectService *object.ObjectService) *ListService {
+ return &ListService{mw: mw, objectService: objectService}
}
// GetObjectsInList retrieves objects in a list
-func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]*model.Object, int, bool, error) {
- return nil, 0, false, nil
+func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]object.Object, int, bool, error) {
+ resp := s.mw.ObjectSearchSubscribe(ctx, &pb.RpcObjectSearchSubscribeRequest{
+ SpaceId: spaceId,
+ Limit: int64(limit), // nolint: gosec
+ Offset: int64(offset), // nolint: gosec
+ Keys: []string{bundle.RelationKeyId.String()},
+ CollectionId: listId,
+ })
+
+ if resp.Error.Code != pb.RpcObjectSearchSubscribeResponseError_NULL {
+ return nil, 0, false, ErrFailedGetObjectsInList
+ }
+
+ total := int(resp.Counters.Total)
+ paginatedRecords, hasMore := pagination.Paginate(resp.Records, offset, limit)
+
+ objects := make([]object.Object, 0, len(paginatedRecords))
+ for _, record := range paginatedRecords {
+ object, err := s.objectService.GetObject(ctx, spaceId, record.Fields[bundle.RelationKeyId.String()].GetStringValue())
+ if err != nil {
+ return nil, 0, false, err
+ }
+ objects = append(objects, object)
+ }
+
+ return objects, total, hasMore, nil
}
// AddObjectsToList adds objects to a list
-func (s *ListService) AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIDs []string) error {
+func (s *ListService) AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error {
+ resp := s.mw.ObjectCollectionAdd(ctx, &pb.RpcObjectCollectionAddRequest{
+ ContextId: listId,
+ ObjectIds: objectIds,
+ })
+
+ if resp.Error.Code != pb.RpcObjectCollectionAddResponseError_NULL {
+ return ErrFailedAddObjectsToList
+ }
+
return nil
}
// RemoveObjectsFromList removes objects from a list
-func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIDs []string) error {
+func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error {
+ resp := s.mw.ObjectCollectionRemove(ctx, &pb.RpcObjectCollectionRemoveRequest{
+ ContextId: spaceId,
+ ObjectIds: objectIds,
+ })
+
+ if resp.Error.Code != pb.RpcObjectCollectionRemoveResponseError_NULL {
+ return ErrFailedRemoveObjectsFromList
+ }
+
return nil
}
// UpdateObjectsInList updates an object in a list
-func (s *ListService) UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIDs []string) error {
+func (s *ListService) UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIds []string) error {
+ resp := s.mw.BlockDataviewObjectOrderUpdate(ctx, &pb.RpcBlockDataviewObjectOrderUpdateRequest{
+ ContextId: listId,
+ BlockId: "dataview",
+ ObjectOrders: []*model.BlockContentDataviewObjectOrder{
+ {
+ ViewId: "", // TODO: handle viewId
+ GroupId: "",
+ ObjectIds: objectIds,
+ },
+ },
+ })
+
+ if resp.Error.Code != pb.RpcBlockDataviewObjectOrderUpdateResponseError_NULL {
+ return ErrFailedUpdateObjectsInList
+ }
+
return nil
}
diff --git a/core/api/server/server.go b/core/api/server/server.go
index 56b312d69..f38dc6c7e 100644
--- a/core/api/server/server.go
+++ b/core/api/server/server.go
@@ -35,11 +35,11 @@ func NewServer(accountService account.Service, mw service.ClientCommandsServer)
s := &Server{
authService: auth.NewService(mw),
exportService: export.NewService(mw),
- listService: list.NewService(mw),
spaceService: space.NewService(mw),
}
s.objectService = object.NewService(mw, s.spaceService)
+ s.listService = list.NewService(mw, s.objectService)
s.searchService = search.NewService(mw, s.spaceService, s.objectService)
s.engine = s.NewRouter(accountService, mw)
s.KeyToToken = make(map[string]string)
From 44b1bcc1da15e4b40f87cc92f32534cb24ab9717 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 12 Feb 2025 15:47:16 +0100
Subject: [PATCH 011/132] GO-4459: Fix v1 route path for lists
---
core/api/server/router.go | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/core/api/server/router.go b/core/api/server/router.go
index f7aad0482..23d094bbb 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -68,10 +68,10 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
v1.POST("/spaces/:space_id/objects/:object_id/export/:format", export.GetObjectExportHandler(s.exportService))
// List
- v1.GET("/v1/spaces/:space_id/lists/:list_id/objects", list.GetObjectsInListHandler(s.listService))
- v1.POST("/v1/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
- v1.DELETE("/v1/spaces/:space_id/lists/:list_id/objects", list.RemoveObjectsFromListHandler(s.listService))
- v1.PATCH("/v1/spaces/:space_id/lists/:list_id/objects", list.UpdateObjectsInListHandler(s.listService))
+ v1.GET("/spaces/:space_id/lists/:list_id/objects", list.GetObjectsInListHandler(s.listService))
+ v1.POST("/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
+ v1.DELETE("/spaces/:space_id/lists/:list_id/objects", list.RemoveObjectsFromListHandler(s.listService))
+ v1.PATCH("/spaces/:space_id/lists/:list_id/objects", list.UpdateObjectsInListHandler(s.listService))
// Object
v1.GET("/spaces/:space_id/objects", object.GetObjectsHandler(s.objectService))
From fd62a2571e39fb5b1c984868cecafb2f83648bf5 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 14 Feb 2025 16:04:56 +0100
Subject: [PATCH 012/132] GO-4459: Fix ObjectSearchSubscribe panic
---
core/api/internal/list/service.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 943035c44..42be2f2f3 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -45,7 +45,8 @@ func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, list
CollectionId: listId,
})
- if resp.Error.Code != pb.RpcObjectSearchSubscribeResponseError_NULL {
+ // TODO: returned error from ObjectSearchSubscribe is inconsistent with other RPCs: Error is nil instead of Code being NULL
+ if resp.Error != nil && resp.Error.Code != pb.RpcObjectSearchSubscribeResponseError_NULL {
return nil, 0, false, ErrFailedGetObjectsInList
}
From dcb8a992f1e58bc20b29bfd4fc7a8fecc369c1b7 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 14 Feb 2025 16:10:48 +0100
Subject: [PATCH 013/132] GO-4459: Remove UpdateObjectsInList handler and route
---
core/api/docs/docs.go | 72 -------------------------------
core/api/docs/swagger.json | 72 -------------------------------
core/api/docs/swagger.yaml | 48 ---------------------
core/api/internal/list/handler.go | 42 ------------------
core/api/internal/list/service.go | 26 +----------
core/api/server/router.go | 1 -
6 files changed, 1 insertion(+), 260 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index f158831eb..bc7016d05 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -1275,78 +1275,6 @@ const docTemplate = `{
}
}
}
- },
- "patch": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Update object order in list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "description": "List of object IDs",
- "name": "objects",
- "in": "body",
- "required": true,
- "schema": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Objects updated successfully",
- "schema": {
- "type": "string"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
}
}
},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 0d063df11..d8ba3d146 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1269,78 +1269,6 @@
}
}
}
- },
- "patch": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Update object order in list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "description": "List of object IDs",
- "name": "objects",
- "in": "body",
- "required": true,
- "schema": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Objects updated successfully",
- "schema": {
- "type": "string"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
}
}
},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 5f31973fa..46c1110f7 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1423,54 +1423,6 @@ paths:
summary: Get objects in list
tags:
- lists
- patch:
- consumes:
- - application/json
- parameters:
- - description: Space ID
- in: path
- name: space_id
- required: true
- type: string
- - description: List ID
- in: path
- name: list_id
- required: true
- type: string
- - description: List of object IDs
- in: body
- name: objects
- required: true
- schema:
- items:
- type: string
- type: array
- produces:
- - application/json
- responses:
- "200":
- description: Objects updated successfully
- schema:
- type: string
- "400":
- description: Bad request
- schema:
- $ref: '#/definitions/util.ValidationError'
- "401":
- description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
- "404":
- description: Not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
- "500":
- description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
- summary: Update object order in list
- tags:
- - lists
post:
consumes:
- application/json
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index e1e7fbd75..0830390f5 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -129,45 +129,3 @@ func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
c.JSON(http.StatusOK, "Objects removed successfully")
}
}
-
-// UpdateObjectsInListHandler
-//
-// @Summary Update object order in list
-// @Tags lists
-// @Accept json
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param list_id path string true "List ID"
-// @Param objects body []string true "List of object IDs"
-// @Success 200 {object} string "Objects updated successfully"
-// @Failure 400 {object} util.ValidationError "Bad request"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [patch]
-func UpdateObjectsInListHandler(s *ListService) gin.HandlerFunc {
- return func(c *gin.Context) {
- spaceId := c.Param("space_id")
- listId := c.Param("list_id")
-
- objects := []string{}
- if err := c.ShouldBindJSON(&objects); err != nil {
- apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
- c.JSON(http.StatusBadRequest, apiErr)
- return
- }
-
- err := s.UpdateObjectsInList(c, spaceId, listId, objects)
- code := util.MapErrorCode(err,
- util.ErrToCode(ErrFailedUpdateObjectsInList, http.StatusInternalServerError),
- )
-
- if code != http.StatusOK {
- apiErr := util.CodeToAPIError(code, err.Error())
- c.JSON(code, apiErr)
- return
- }
-
- c.JSON(http.StatusOK, "Objects updated successfully")
- }
-}
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 42be2f2f3..625e56050 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -9,21 +9,18 @@ import (
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
- "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
var (
ErrFailedGetObjectsInList = errors.New("failed to get objects in list")
ErrFailedAddObjectsToList = errors.New("failed to add objects to list")
ErrFailedRemoveObjectsFromList = errors.New("failed to remove objects from list")
- ErrFailedUpdateObjectsInList = errors.New("failed to update objects in list")
)
type Service interface {
- GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]*model.Object, int, bool, error)
+ GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]object.Object, int, bool, error)
AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error
RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
- UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIds []string) error
}
type ListService struct {
@@ -92,24 +89,3 @@ func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string,
return nil
}
-
-// UpdateObjectsInList updates an object in a list
-func (s *ListService) UpdateObjectsInList(ctx context.Context, spaceId string, listId string, objectIds []string) error {
- resp := s.mw.BlockDataviewObjectOrderUpdate(ctx, &pb.RpcBlockDataviewObjectOrderUpdateRequest{
- ContextId: listId,
- BlockId: "dataview",
- ObjectOrders: []*model.BlockContentDataviewObjectOrder{
- {
- ViewId: "", // TODO: handle viewId
- GroupId: "",
- ObjectIds: objectIds,
- },
- },
- })
-
- if resp.Error.Code != pb.RpcBlockDataviewObjectOrderUpdateResponseError_NULL {
- return ErrFailedUpdateObjectsInList
- }
-
- return nil
-}
diff --git a/core/api/server/router.go b/core/api/server/router.go
index 23d094bbb..6bc017411 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -71,7 +71,6 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
v1.GET("/spaces/:space_id/lists/:list_id/objects", list.GetObjectsInListHandler(s.listService))
v1.POST("/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
v1.DELETE("/spaces/:space_id/lists/:list_id/objects", list.RemoveObjectsFromListHandler(s.listService))
- v1.PATCH("/spaces/:space_id/lists/:list_id/objects", list.UpdateObjectsInListHandler(s.listService))
// Object
v1.GET("/spaces/:space_id/objects", object.GetObjectsHandler(s.objectService))
From cd836a670f17f8979fb7c5af586c6e1a86ae38b2 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 14 Feb 2025 16:29:28 +0100
Subject: [PATCH 014/132] GO-4459: Return 404 for deleted object
---
core/api/internal/object/service.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 284a588ad..3a51a343f 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -117,7 +117,7 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
ObjectId: objectId,
})
- if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND {
+ if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND || resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue() {
return Object{}, ErrObjectNotFound
}
From 40349517bc7a23b3134dd9b7deac48378d707dbe Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 14 Feb 2025 17:21:47 +0100
Subject: [PATCH 015/132] GO-4459: Refactor data models to include 'object'
property and return entire type for object
---
core/api/docs/docs.go | 46 ++++----
core/api/docs/swagger.json | 46 ++++----
core/api/docs/swagger.yaml | 36 ++++---
core/api/internal/object/model.go | 13 +--
core/api/internal/object/service.go | 25 ++---
core/api/internal/object/service_test.go | 129 +++++++++++++----------
core/api/internal/search/service_test.go | 72 ++++++-------
core/api/internal/space/model.go | 4 +-
core/api/internal/space/service.go | 6 +-
core/api/util/util.go | 34 ------
10 files changed, 203 insertions(+), 208 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index bc7016d05..0c3db26ba 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -1517,6 +1517,11 @@ const docTemplate = `{
"type": "string",
"example": "My object"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "object"
+ },
"root_id": {
"description": "The id of the object's root",
"type": "string",
@@ -1534,8 +1539,11 @@ const docTemplate = `{
},
"type": {
"description": "The type of the object",
- "type": "string",
- "example": "Page"
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Type"
+ }
+ ]
}
}
},
@@ -1570,8 +1578,8 @@ const docTemplate = `{
"type": "string",
"example": "My template"
},
- "type": {
- "description": "The type of the object",
+ "object": {
+ "description": "The data model of the object",
"type": "string",
"example": "template"
}
@@ -1654,16 +1662,16 @@ const docTemplate = `{
"type": "string",
"example": "Page"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "type"
+ },
"recommended_layout": {
"description": "The recommended layout of the type",
"type": "string",
"example": "todo"
},
- "type": {
- "description": "The type of the object",
- "type": "string",
- "example": "type"
- },
"unique_key": {
"description": "The unique key of the type",
"type": "string",
@@ -1902,6 +1910,11 @@ const docTemplate = `{
"type": "string",
"example": "John Doe"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "member"
+ },
"role": {
"description": "The role of the member",
"type": "string",
@@ -1912,11 +1925,6 @@ const docTemplate = `{
"NoPermission"
],
"example": "Owner"
- },
- "type": {
- "description": "The type of the object",
- "type": "string",
- "example": "member"
}
}
},
@@ -1996,6 +2004,11 @@ const docTemplate = `{
"type": "string",
"example": "N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "space"
+ },
"profile_object_id": {
"description": "The id of the profile object",
"type": "string",
@@ -2016,11 +2029,6 @@ const docTemplate = `{
"type": "string",
"example": ""
},
- "type": {
- "description": "The type of the object",
- "type": "string",
- "example": "space"
- },
"widgets_id": {
"description": "The id of the widgets",
"type": "string",
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index d8ba3d146..223b83383 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1511,6 +1511,11 @@
"type": "string",
"example": "My object"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "object"
+ },
"root_id": {
"description": "The id of the object's root",
"type": "string",
@@ -1528,8 +1533,11 @@
},
"type": {
"description": "The type of the object",
- "type": "string",
- "example": "Page"
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Type"
+ }
+ ]
}
}
},
@@ -1564,8 +1572,8 @@
"type": "string",
"example": "My template"
},
- "type": {
- "description": "The type of the object",
+ "object": {
+ "description": "The data model of the object",
"type": "string",
"example": "template"
}
@@ -1648,16 +1656,16 @@
"type": "string",
"example": "Page"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "type"
+ },
"recommended_layout": {
"description": "The recommended layout of the type",
"type": "string",
"example": "todo"
},
- "type": {
- "description": "The type of the object",
- "type": "string",
- "example": "type"
- },
"unique_key": {
"description": "The unique key of the type",
"type": "string",
@@ -1896,6 +1904,11 @@
"type": "string",
"example": "John Doe"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "member"
+ },
"role": {
"description": "The role of the member",
"type": "string",
@@ -1906,11 +1919,6 @@
"NoPermission"
],
"example": "Owner"
- },
- "type": {
- "description": "The type of the object",
- "type": "string",
- "example": "member"
}
}
},
@@ -1990,6 +1998,11 @@
"type": "string",
"example": "N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"
},
+ "object": {
+ "description": "The data model of the object",
+ "type": "string",
+ "example": "space"
+ },
"profile_object_id": {
"description": "The id of the profile object",
"type": "string",
@@ -2010,11 +2023,6 @@
"type": "string",
"example": ""
},
- "type": {
- "description": "The type of the object",
- "type": "string",
- "example": "space"
- },
"widgets_id": {
"description": "The id of the widgets",
"type": "string",
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 46c1110f7..0dd2b302a 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -176,6 +176,10 @@ definitions:
description: The name of the object
example: My object
type: string
+ object:
+ description: The data model of the object
+ example: object
+ type: string
root_id:
description: The id of the object's root
example: bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u
@@ -190,9 +194,9 @@ definitions:
example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
type: string
type:
+ allOf:
+ - $ref: '#/definitions/object.Type'
description: The type of the object
- example: Page
- type: string
type: object
object.ObjectResponse:
properties:
@@ -215,8 +219,8 @@ definitions:
description: The name of the template
example: My template
type: string
- type:
- description: The type of the object
+ object:
+ description: The data model of the object
example: template
type: string
type: object
@@ -279,14 +283,14 @@ definitions:
description: The name of the type
example: Page
type: string
+ object:
+ description: The data model of the object
+ example: type
+ type: string
recommended_layout:
description: The recommended layout of the type
example: todo
type: string
- type:
- description: The type of the object
- example: type
- type: string
unique_key:
description: The unique key of the type
example: ot-page
@@ -449,6 +453,10 @@ definitions:
description: The name of the member
example: John Doe
type: string
+ object:
+ description: The data model of the object
+ example: member
+ type: string
role:
description: The role of the member
enum:
@@ -458,10 +466,6 @@ definitions:
- NoPermission
example: Owner
type: string
- type:
- description: The type of the object
- example: member
- type: string
type: object
space.MemberResponse:
properties:
@@ -520,6 +524,10 @@ definitions:
description: The network id of the space
example: N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU
type: string
+ object:
+ description: The data model of the object
+ example: space
+ type: string
profile_object_id:
description: The id of the profile object
example: bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4
@@ -537,10 +545,6 @@ definitions:
description: The timezone of the account
example: ""
type: string
- type:
- description: The type of the object
- example: space
- type: string
widgets_id:
description: The id of the widgets
example: bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index d59121491..5846100ae 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -15,10 +15,11 @@ type ObjectResponse struct {
}
type Object struct {
- Type string `json:"type" example:"Page"` // The type of the object
+ Object string `json:"object" example:"object"` // The data model of the object
Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"` // The id of the object
Name string `json:"name" example:"My object"` // The name of the object
Icon string `json:"icon" example:"📄"` // The icon of the object
+ Type Type `json:"type"` // The type of the object
Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
Layout string `json:"layout" example:"basic"` // The layout of the object
SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
@@ -73,7 +74,7 @@ type TypeResponse struct {
}
type Type struct {
- Type string `json:"type" example:"type"` // The type of the object
+ Object string `json:"object" example:"type"` // The data model of the object
Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type
UniqueKey string `json:"unique_key" example:"ot-page"` // The unique key of the type
Name string `json:"name" example:"Page"` // The name of the type
@@ -86,8 +87,8 @@ type TemplateResponse struct {
}
type Template struct {
- Type string `json:"type" example:"template"` // The type of the object
- Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template
- Name string `json:"name" example:"My template"` // The name of the template
- Icon string `json:"icon" example:"📄"` // The icon of the template
+ Object string `json:"object" example:"template"` // The data model of the object
+ Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template
+ Name string `json:"name" example:"My template"` // The name of the template
+ Icon string `json:"icon" example:"📄"` // The icon of the template
}
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 3a51a343f..d979245d1 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -126,16 +126,17 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
}
icon := util.GetIconFromEmojiOrImage(s.AccountInfo, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
- objectTypeName, err := util.ResolveTypeToName(s.mw, spaceId, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyType.String()].GetStringValue())
+ objectType, err := s.GetType(ctx, spaceId, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyType.String()].GetStringValue())
if err != nil {
return Object{}, err
}
object := Object{
- Type: objectTypeName,
+ Object: "object",
Id: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyId.String()].GetStringValue(),
Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: icon,
+ Type: objectType,
Snippet: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySnippet.String()].GetStringValue(),
Layout: model.ObjectTypeLayout_name[int32(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLayout.String()].GetNumberValue())],
SpaceId: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(),
@@ -299,7 +300,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
for _, record := range paginatedTypes {
types = append(types, Type{
- Type: "type",
+ Object: "type",
Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(),
UniqueKey: record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(),
@@ -326,7 +327,7 @@ func (s *ObjectService) GetType(ctx context.Context, spaceId string, typeId stri
}
return Type{
- Type: "type",
+ Object: "type",
Id: typeId,
UniqueKey: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
@@ -399,10 +400,10 @@ func (s *ObjectService) ListTemplates(ctx context.Context, spaceId string, typeI
}
templates = append(templates, Template{
- Type: "template",
- Id: templateId,
- Name: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
+ Object: "template",
+ Id: templateId,
+ Name: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ Icon: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
})
}
@@ -425,10 +426,10 @@ func (s *ObjectService) GetTemplate(ctx context.Context, spaceId string, typeId
}
return Template{
- Type: "template",
- Id: templateId,
- Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
+ Object: "template",
+ Id: templateId,
+ Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ Icon: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
}, nil
}
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 5ae1f6ba2..f865b96ea 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -23,7 +23,6 @@ const (
gatewayUrl = "http://localhost:31006"
mockedSpaceId = "mocked-space-id"
mockedObjectId = "mocked-object-id"
- mockedObjectType = "mocked-object-type"
mockedNewObjectId = "mocked-new-object-id"
mockedObjectName = "mocked-object-name"
mockedObjectSnippet = "mocked-object-snippet"
@@ -99,7 +98,7 @@ func TestObjectService_ListObjects(t *testing.T) {
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
bundle.RelationKeySnippet.String(): pbtypes.String(mockedObjectSnippet),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
- bundle.RelationKeyType.String(): pbtypes.String(mockedObjectTypeUniqueKey),
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyLayout.String(): pbtypes.Float64(float64(model.ObjectType_basic)),
},
},
@@ -122,7 +121,7 @@ func TestObjectService_ListObjects(t *testing.T) {
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
bundle.RelationKeySnippet.String(): pbtypes.String(mockedObjectSnippet),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
- bundle.RelationKeyType.String(): pbtypes.String(mockedObjectTypeUniqueKey),
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyCreatedDate.String(): pbtypes.Float64(888888),
bundle.RelationKeyLastModifiedDate.String(): pbtypes.Float64(999999),
bundle.RelationKeyLastOpenedDate.String(): pbtypes.Float64(0),
@@ -136,25 +135,26 @@ func TestObjectService_ListObjects(t *testing.T) {
}).Once()
// Mock type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(mockedObjectTypeUniqueKey),
- },
- },
- Keys: []string{bundle.RelationKeyName.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String(mockedObjectType),
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedTypeId,
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ RootId: mockedTypeId,
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
+ },
+ },
},
},
},
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
// Mock participant details
@@ -190,7 +190,10 @@ func TestObjectService_ListObjects(t *testing.T) {
// then
require.NoError(t, err)
require.Len(t, objects, 1)
- require.Equal(t, mockedObjectType, objects[0].Type)
+ require.Equal(t, mockedTypeId, objects[0].Type.Id)
+ require.Equal(t, mockedTypeName, objects[0].Type.Name)
+ require.Equal(t, mockedTypeUniqueKey, objects[0].Type.UniqueKey)
+ require.Equal(t, mockedTypeIcon, objects[0].Type.Icon)
require.Equal(t, mockedObjectId, objects[0].Id)
require.Equal(t, mockedObjectName, objects[0].Name)
require.Equal(t, mockedObjectSnippet, objects[0].Snippet)
@@ -263,7 +266,7 @@ func TestObjectService_GetObject(t *testing.T) {
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
bundle.RelationKeySnippet.String(): pbtypes.String(mockedObjectSnippet),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectName),
- bundle.RelationKeyType.String(): pbtypes.String(mockedObjectTypeUniqueKey),
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyLastModifiedDate.String(): pbtypes.Float64(999999),
bundle.RelationKeyCreatedDate.String(): pbtypes.Float64(888888),
bundle.RelationKeyLastOpenedDate.String(): pbtypes.Float64(0),
@@ -276,26 +279,27 @@ func TestObjectService_GetObject(t *testing.T) {
}, nil).Once()
// Mock type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(mockedObjectTypeUniqueKey),
- },
- },
- Keys: []string{bundle.RelationKeyName.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String(mockedObjectType),
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedTypeId,
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ RootId: mockedTypeId,
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
+ },
+ },
},
},
},
- }, nil).Once()
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ }).Once()
// Mock participant details
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
@@ -329,7 +333,11 @@ func TestObjectService_GetObject(t *testing.T) {
// then
require.NoError(t, err)
- require.Equal(t, mockedObjectType, object.Type)
+ require.Equal(t, "object", object.Object)
+ require.Equal(t, mockedTypeId, object.Type.Id)
+ require.Equal(t, mockedTypeName, object.Type.Name)
+ require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
+ require.Equal(t, mockedTypeIcon, object.Type.Icon)
require.Equal(t, mockedObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
require.Equal(t, mockedObjectSnippet, object.Snippet)
@@ -421,7 +429,7 @@ func TestObjectService_CreateObject(t *testing.T) {
bundle.RelationKeyId.String(): pbtypes.String(mockedNewObjectId),
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
bundle.RelationKeyLayout.String(): pbtypes.Float64(float64(model.ObjectType_basic)),
- bundle.RelationKeyType.String(): pbtypes.String(mockedObjectTypeUniqueKey),
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
bundle.RelationKeySpaceId.String(): pbtypes.String(mockedSpaceId),
},
@@ -433,25 +441,26 @@ func TestObjectService_CreateObject(t *testing.T) {
}).Once()
// Mock type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(mockedObjectTypeUniqueKey),
- },
- },
- Keys: []string{bundle.RelationKeyName.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String(mockedObjectType),
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedTypeId,
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ RootId: mockedTypeId,
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
+ },
+ },
},
},
},
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
// Mock participant details
@@ -491,7 +500,11 @@ func TestObjectService_CreateObject(t *testing.T) {
// then
require.NoError(t, err)
- require.Equal(t, mockedObjectType, object.Type)
+ require.Equal(t, "object", object.Object)
+ require.Equal(t, mockedTypeId, object.Type.Id)
+ require.Equal(t, mockedTypeName, object.Type.Name)
+ require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
+ require.Equal(t, mockedTypeIcon, object.Type.Icon)
require.Equal(t, mockedNewObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
require.Equal(t, mockedObjectIcon, object.Icon)
@@ -749,7 +762,7 @@ func TestObjectService_GetTemplate(t *testing.T) {
}).Once()
// when
- template, err := fx.GetTemplate(ctx, mockedSpaceId, mockedObjectType, mockedTemplateId)
+ template, err := fx.GetTemplate(ctx, mockedSpaceId, mockedTypeId, mockedTemplateId)
// then
require.NoError(t, err)
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 1f248690f..49e4567ab 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -35,7 +35,6 @@ const (
mockedTagId2 = "mocked-tag-id-2"
mockedTagValue2 = "mocked-tag-value-2"
mockedTagColor2 = "mocked-tag-color-2"
- mockedObjectTypeName = "mocked-object-type-name"
mockedParticipantName = "mocked-participant-name"
mockedParticipantIcon = "mocked-participant-icon"
mockedParticipantImage = "mocked-participant-image"
@@ -282,26 +281,23 @@ func TestSearchService_GlobalSearch(t *testing.T) {
}, nil).Once()
// Mock type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(mockedType),
- },
- },
- Keys: []string{bundle.RelationKeyName.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String(mockedObjectTypeName),
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedType,
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ RootId: mockedType,
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedType),
+ },
+ },
},
},
},
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
// Mock participant details
@@ -346,10 +342,10 @@ func TestSearchService_GlobalSearch(t *testing.T) {
// then
require.NoError(t, err)
require.Len(t, objects, 1)
- require.Equal(t, mockedObjectTypeName, objects[0].Type)
- require.Equal(t, mockedSpaceId, objects[0].SpaceId)
- require.Equal(t, mockedObjectName, objects[0].Name)
require.Equal(t, mockedObjectId, objects[0].Id)
+ require.Equal(t, mockedObjectName, objects[0].Name)
+ require.Equal(t, mockedType, objects[0].Type.Id)
+ require.Equal(t, mockedSpaceId, objects[0].SpaceId)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objects[0].Layout)
require.Equal(t, "🌐", objects[0].Icon)
require.Equal(t, "This is a sample text block", objects[0].Blocks[2].Text.Text)
@@ -494,26 +490,23 @@ func TestSearchService_Search(t *testing.T) {
}).Once()
// Mock type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(mockedType),
- },
- },
- Keys: []string{bundle.RelationKeyName.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String(mockedObjectTypeName),
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedType,
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ RootId: mockedType,
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedType),
+ },
+ },
},
},
},
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
// Mock participant details
@@ -546,8 +539,9 @@ func TestSearchService_Search(t *testing.T) {
// then
require.NoError(t, err)
require.Len(t, objects, 1)
- require.Equal(t, mockedObjectName, objects[0].Name)
require.Equal(t, mockedObjectId, objects[0].Id)
+ require.Equal(t, mockedObjectName, objects[0].Name)
+ require.Equal(t, mockedType, objects[0].Type.Id)
require.Equal(t, mockedSpaceId, objects[0].SpaceId)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objects[0].Layout)
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index 6805de3cc..16ebe1fb5 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -9,7 +9,7 @@ type CreateSpaceRequest struct {
}
type Space struct {
- Type string `json:"type" example:"space"` // The type of the object
+ Object string `json:"object" example:"space"` // The data model of the object
Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
Name string `json:"name" example:"My Space"` // The name of the space
Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The icon of the space
@@ -35,7 +35,7 @@ type MemberResponse struct {
}
type Member struct {
- Type string `json:"type" example:"member"` // The type of the object
+ Object string `json:"object" example:"member"` // The data model of the object
Id string `json:"id" example:"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"` // The profile object id of the member
Name string `json:"name" example:"John Doe"` // The name of the member
Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"` // The icon of the member
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index eb83f636c..1b36244e0 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -198,7 +198,7 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
icon := util.GetIconFromEmojiOrImage(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
member := Member{
- Type: "member",
+ Object: "member",
Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(),
Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: icon,
@@ -239,7 +239,7 @@ func (s *SpaceService) GetMember(ctx context.Context, spaceId string, memberId s
icon := util.GetIconFromEmojiOrImage(s.AccountInfo, "", resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
return Member{
- Type: "member",
+ Object: "member",
Id: resp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue(),
Name: resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: icon,
@@ -261,7 +261,7 @@ func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon string
}
return Space{
- Type: "space",
+ Object: "space",
Id: spaceId,
Name: name,
Icon: icon,
diff --git a/core/api/util/util.go b/core/api/util/util.go
index 6c5a74eb9..c8ce71dec 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -4,7 +4,6 @@ import (
"context"
"errors"
"fmt"
- "strings"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
@@ -31,39 +30,6 @@ func GetIconFromEmojiOrImage(accountInfo *model.AccountInfo, iconEmoji string, i
return ""
}
-// ResolveTypeToName resolves the type ID to the name of the type, e.g. "ot-page" to "Page" or "bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu" to "Custom Type"
-func ResolveTypeToName(mw service.ClientCommandsServer, spaceId string, typeId string) (typeName string, err error) {
- // Can't look up preinstalled types based on relation key, therefore need to use unique key
- relKey := bundle.RelationKeyId.String()
- if strings.HasPrefix(typeId, "ot-") {
- relKey = bundle.RelationKeyUniqueKey.String()
- }
-
- // Call ObjectSearch for object of specified type and return the name
- resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
- SpaceId: spaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: relKey,
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(typeId),
- },
- },
- Keys: []string{bundle.RelationKeyName.String()},
- })
-
- if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
- return "", ErrFailedSearchType
- }
-
- if len(resp.Records) == 0 {
- return "", ErrorTypeNotFound
- }
-
- return resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue(), nil
-}
-
func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, uniqueKey string) (typeId string, err error) {
// Call ObjectSearch for type with unique key and return the type's ID
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
From 81cdd2ee884709e0c856cc1d70da1a2488b29d5d Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 14 Feb 2025 18:44:25 +0100
Subject: [PATCH 016/132] GO-4459: Add relation format to detail entries
---
core/api/internal/object/service.go | 29 ++++++++++++++++++++----
core/api/internal/object/service_test.go | 12 +++++-----
core/api/internal/search/service_test.go | 6 ++---
3 files changed, 34 insertions(+), 13 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index d979245d1..ab077f479 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -435,6 +435,7 @@ func (s *ObjectService) GetTemplate(ctx context.Context, spaceId string, typeId
// GetDetails returns the list of details from the ObjectShowResponse.
func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
+ relationFormatMap := s.getRelationFormatMap(resp.ObjectView.RelationLinks)
creator := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyCreator.String()].GetStringValue()
lastModifiedBy := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastModifiedBy.String()].GetStringValue()
@@ -462,42 +463,62 @@ func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
{
Id: "last_modified_date",
Details: map[string]interface{}{
- "last_modified_date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastModifiedDate.String()].GetNumberValue()),
+ "type": relationFormatMap[bundle.RelationKeyLastModifiedDate.String()],
+ "date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastModifiedDate.String()].GetNumberValue()),
},
},
{
Id: "last_modified_by",
Details: map[string]interface{}{
+ "type": relationFormatMap[bundle.RelationKeyLastModifiedBy.String()],
"details": memberLastModifiedBy,
},
},
{
Id: "created_date",
Details: map[string]interface{}{
- "created_date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyCreatedDate.String()].GetNumberValue()),
+ "type": relationFormatMap[bundle.RelationKeyCreatedDate.String()],
+ "date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyCreatedDate.String()].GetNumberValue()),
},
},
{
Id: "created_by",
Details: map[string]interface{}{
+ "type": relationFormatMap[bundle.RelationKeyCreator.String()],
"details": memberCreator,
},
},
{
Id: "last_opened_date",
Details: map[string]interface{}{
- "last_opened_date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastOpenedDate.String()].GetNumberValue()),
+ "type": relationFormatMap[bundle.RelationKeyLastOpenedDate.String()],
+ "date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastOpenedDate.String()].GetNumberValue()),
},
},
{
Id: "tags",
Details: map[string]interface{}{
- "tags": s.getTags(resp),
+ "type": relationFormatMap[bundle.RelationKeyTag.String()],
+ "multi_select": s.getTags(resp),
},
},
}
}
+// getRelationFormatMapFromResponse returns the map of relation key to relation format from the ObjectShowResponse.
+func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink) map[string]string {
+ var relationFormatToName = model.RelationFormat_name
+ relationFormatToName[int32(model.RelationFormat_tag)] = "multi_select"
+ relationFormatToName[int32(model.RelationFormat_status)] = "select"
+
+ relationFormatMap := map[string]string{}
+ for _, detail := range relationLinks {
+ relationFormatMap[detail.Key] = relationFormatToName[int32(detail.Format)]
+ }
+
+ return relationFormatMap
+}
+
// getTags returns the list of tags from the ObjectShowResponse
func (s *ObjectService) getTags(resp *pb.RpcObjectShowResponse) []Tag {
tags := []Tag{}
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index f865b96ea..976b2f1ef 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -202,15 +202,15 @@ func TestObjectService_ListObjects(t *testing.T) {
for _, detail := range objects[0].Details {
if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["created_date"])
+ require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
} else if detail.Id == "created_by" {
require.Empty(t, detail.Details["created_by"])
} else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["last_modified_date"])
+ require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
} else if detail.Id == "last_modified_by" {
require.Empty(t, detail.Details["last_modified_by"])
} else if detail.Id == "last_opened_date" {
- require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["last_opened_date"])
+ require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["date"])
} else if detail.Id == "tags" {
require.Empty(t, detail.Details["tags"])
} else {
@@ -346,15 +346,15 @@ func TestObjectService_GetObject(t *testing.T) {
for _, detail := range object.Details {
if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["created_date"])
+ require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
} else if detail.Id == "created_by" {
require.Empty(t, detail.Details["created_by"])
} else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["last_modified_date"])
+ require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
} else if detail.Id == "last_modified_by" {
require.Empty(t, detail.Details["last_modified_by"])
} else if detail.Id == "last_opened_date" {
- require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["last_opened_date"])
+ require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["date"])
} else if detail.Id == "tags" {
require.Empty(t, detail.Details["tags"])
} else {
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 49e4567ab..8a55a0b9b 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -353,9 +353,9 @@ func TestSearchService_GlobalSearch(t *testing.T) {
// check details
for _, detail := range objects[0].Details {
if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["created_date"])
+ require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
} else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["last_modified_date"])
+ require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
} else if detail.Id == "created_by" {
require.Equal(t, mockedParticipantId, detail.Details["details"].(space.Member).Id)
require.Equal(t, mockedParticipantName, detail.Details["details"].(space.Member).Name)
@@ -370,7 +370,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
// check tags
tags := []object.Tag{}
for _, detail := range objects[0].Details {
- if tagList, ok := detail.Details["tags"].([]object.Tag); ok {
+ if tagList, ok := detail.Details["multi_select"].([]object.Tag); ok {
for _, tag := range tagList {
tags = append(tags, tag)
}
From 039739fce727f24df17056f8bd747db61eb390d6 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 14 Feb 2025 19:32:19 +0100
Subject: [PATCH 017/132] GO-4459: Get type directly from details in GetObject
and fix detail key for object relation value
---
core/api/internal/object/service.go | 55 +++++++++++++++------
core/api/internal/object/service_test.go | 63 ++++++------------------
core/api/internal/search/service_test.go | 43 ++++------------
3 files changed, 65 insertions(+), 96 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index ab077f479..10b074bd5 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -3,6 +3,7 @@ package object
import (
"context"
"errors"
+ "sync"
"time"
"github.com/gogo/protobuf/types"
@@ -126,23 +127,19 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
}
icon := util.GetIconFromEmojiOrImage(s.AccountInfo, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
- objectType, err := s.GetType(ctx, spaceId, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyType.String()].GetStringValue())
- if err != nil {
- return Object{}, err
- }
object := Object{
Object: "object",
Id: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyId.String()].GetStringValue(),
Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: icon,
- Type: objectType,
+ Type: s.getTypeFromDetails(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
Snippet: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySnippet.String()].GetStringValue(),
Layout: model.ObjectTypeLayout_name[int32(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLayout.String()].GetNumberValue())],
SpaceId: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(),
RootId: resp.ObjectView.RootId,
- Blocks: s.GetBlocks(resp),
- Details: s.GetDetails(resp),
+ Blocks: s.getBlocks(resp),
+ Details: s.getDetails(resp),
}
return object, nil
@@ -433,8 +430,32 @@ func (s *ObjectService) GetTemplate(ctx context.Context, spaceId string, typeId
}, nil
}
-// GetDetails returns the list of details from the ObjectShowResponse.
-func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
+// getTypeFromDetails returns the type from the details of the ObjectShowResponse.
+func (s *ObjectService) getTypeFromDetails(typeId string, details []*model.ObjectViewDetailsSet) Type {
+ var objectTypeDetail *types.Struct
+ for _, detail := range details {
+ if detail.Id == typeId {
+ objectTypeDetail = detail.GetDetails()
+ break
+ }
+ }
+
+ if objectTypeDetail == nil {
+ return Type{}
+ }
+
+ return Type{
+ Object: "type",
+ Id: typeId,
+ UniqueKey: objectTypeDetail.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ Name: objectTypeDetail.Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ Icon: objectTypeDetail.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
+ RecommendedLayout: model.ObjectTypeLayout_name[int32(objectTypeDetail.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
+ }
+}
+
+// getDetails returns the list of details from the ObjectShowResponse.
+func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
relationFormatMap := s.getRelationFormatMap(resp.ObjectView.RelationLinks)
creator := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyCreator.String()].GetStringValue()
lastModifiedBy := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastModifiedBy.String()].GetStringValue()
@@ -470,8 +491,8 @@ func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
{
Id: "last_modified_by",
Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyLastModifiedBy.String()],
- "details": memberLastModifiedBy,
+ "type": relationFormatMap[bundle.RelationKeyLastModifiedBy.String()],
+ "object": memberLastModifiedBy,
},
},
{
@@ -484,8 +505,8 @@ func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
{
Id: "created_by",
Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyCreator.String()],
- "details": memberCreator,
+ "type": relationFormatMap[bundle.RelationKeyCreator.String()],
+ "object": memberCreator,
},
},
{
@@ -508,6 +529,9 @@ func (s *ObjectService) GetDetails(resp *pb.RpcObjectShowResponse) []Detail {
// getRelationFormatMapFromResponse returns the map of relation key to relation format from the ObjectShowResponse.
func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink) map[string]string {
var relationFormatToName = model.RelationFormat_name
+ var mu sync.Mutex
+
+ mu.Lock()
relationFormatToName[int32(model.RelationFormat_tag)] = "multi_select"
relationFormatToName[int32(model.RelationFormat_status)] = "select"
@@ -515,6 +539,7 @@ func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink
for _, detail := range relationLinks {
relationFormatMap[detail.Key] = relationFormatToName[int32(detail.Format)]
}
+ mu.Unlock()
return relationFormatMap
}
@@ -544,8 +569,8 @@ func (s *ObjectService) getTags(resp *pb.RpcObjectShowResponse) []Tag {
return tags
}
-// GetBlocks returns the list of blocks from the ObjectShowResponse.
-func (s *ObjectService) GetBlocks(resp *pb.RpcObjectShowResponse) []Block {
+// getBlocks returns the list of blocks from the ObjectShowResponse.
+func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
blocks := []Block{}
for _, block := range resp.ObjectView.Blocks {
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 976b2f1ef..ed40c5b5e 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -115,6 +115,7 @@ func TestObjectService_ListObjects(t *testing.T) {
RootId: mockedObjectId,
Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedObjectId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
@@ -129,20 +130,8 @@ func TestObjectService_ListObjects(t *testing.T) {
},
},
},
- },
- },
- Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
- }).Once()
-
- // Mock type resolution
- fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
- SpaceId: mockedSpaceId,
- ObjectId: mockedTypeId,
- }).Return(&pb.RpcObjectShowResponse{
- ObjectView: &model.ObjectView{
- RootId: mockedTypeId,
- Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedTypeId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
@@ -260,6 +249,7 @@ func TestObjectService_GetObject(t *testing.T) {
RootId: mockedObjectId,
Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedObjectId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
@@ -274,32 +264,20 @@ func TestObjectService_GetObject(t *testing.T) {
},
},
},
- },
- },
- }, nil).Once()
-
- // Mock type resolution
- fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
- SpaceId: mockedSpaceId,
- ObjectId: mockedTypeId,
- }).Return(&pb.RpcObjectShowResponse{
- ObjectView: &model.ObjectView{
- RootId: mockedTypeId,
- Details: []*model.ObjectViewDetailsSet{
- {
- Details: &types.Struct{
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
- bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
- bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
+ {
+ Id: mockedTypeId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
+ },
},
},
},
},
- },
- Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
- }).Once()
+ }, nil).Once()
// Mock participant details
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
@@ -424,6 +402,7 @@ func TestObjectService_CreateObject(t *testing.T) {
RootId: mockedNewObjectId,
Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedNewObjectId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedNewObjectId),
@@ -435,20 +414,8 @@ func TestObjectService_CreateObject(t *testing.T) {
},
},
},
- },
- },
- Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
- }).Once()
-
- // Mock type resolution
- fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
- SpaceId: mockedSpaceId,
- ObjectId: mockedTypeId,
- }).Return(&pb.RpcObjectShowResponse{
- ObjectView: &model.ObjectView{
- RootId: mockedTypeId,
- Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedTypeId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 8a55a0b9b..233b6ee4f 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -275,20 +275,8 @@ func TestSearchService_GlobalSearch(t *testing.T) {
},
},
},
- },
- },
- Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
- }, nil).Once()
-
- // Mock type resolution
- fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
- SpaceId: mockedSpaceId,
- ObjectId: mockedType,
- }).Return(&pb.RpcObjectShowResponse{
- ObjectView: &model.ObjectView{
- RootId: mockedType,
- Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedType,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedType),
@@ -298,7 +286,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
},
},
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
- }).Once()
+ }, nil).Once()
// Mock participant details
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
@@ -357,13 +345,13 @@ func TestSearchService_GlobalSearch(t *testing.T) {
} else if detail.Id == "last_modified_date" {
require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
} else if detail.Id == "created_by" {
- require.Equal(t, mockedParticipantId, detail.Details["details"].(space.Member).Id)
- require.Equal(t, mockedParticipantName, detail.Details["details"].(space.Member).Name)
- require.Equal(t, gatewayUrl+"/image/"+mockedParticipantImage, detail.Details["details"].(space.Member).Icon)
- require.Equal(t, mockedParticipantIdentity, detail.Details["details"].(space.Member).Identity)
- require.Equal(t, mockedParticipantGlobalName, detail.Details["details"].(space.Member).GlobalName)
+ require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
+ require.Equal(t, mockedParticipantName, detail.Details["object"].(space.Member).Name)
+ require.Equal(t, gatewayUrl+"/image/"+mockedParticipantImage, detail.Details["object"].(space.Member).Icon)
+ require.Equal(t, mockedParticipantIdentity, detail.Details["object"].(space.Member).Identity)
+ require.Equal(t, mockedParticipantGlobalName, detail.Details["object"].(space.Member).GlobalName)
} else if detail.Id == "last_modified_by" {
- require.Equal(t, mockedParticipantId, detail.Details["details"].(space.Member).Id)
+ require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
}
}
@@ -473,6 +461,7 @@ func TestSearchService_Search(t *testing.T) {
RootId: mockedRootId,
Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedRootId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
@@ -484,20 +473,8 @@ func TestSearchService_Search(t *testing.T) {
},
},
},
- },
- },
- Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
- }).Once()
-
- // Mock type resolution
- fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
- SpaceId: mockedSpaceId,
- ObjectId: mockedType,
- }).Return(&pb.RpcObjectShowResponse{
- ObjectView: &model.ObjectView{
- RootId: mockedType,
- Details: []*model.ObjectViewDetailsSet{
{
+ Id: mockedType,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedType),
From 280d63ccd00c1306ef910571f74f0654ab05f163 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sat, 15 Feb 2025 13:29:43 +0100
Subject: [PATCH 018/132] GO-4459: Return custom relations in details of object
response
---
core/api/internal/object/model.go | 20 +--
core/api/internal/object/service.go | 149 ++++++++++++++---------
core/api/internal/object/service_test.go | 135 ++++++++++----------
core/api/internal/search/service_test.go | 47 ++++---
core/api/util/util.go | 26 ++++
5 files changed, 225 insertions(+), 152 deletions(-)
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 5846100ae..b83284b3c 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -29,13 +29,14 @@ type Object struct {
}
type Block struct {
- Id string `json:"id" example:"64394517de52ad5acb89c66c"` // The id of the block
- ChildrenIds []string `json:"children_ids" example:"['6797ce8ecda913cde14b02dc']"` // The ids of the block's children
- BackgroundColor string `json:"background_color" example:"red"` // The background color of the block
- Align string `json:"align" enums:"AlignLeft,AlignCenter,AlignRight,AlignJustify" example:"AlignLeft"` // The alignment of the block
- VerticalAlign string `json:"vertical_align" enums:"VerticalAlignTop,VerticalAlignMiddle,VerticalAlignBottom" example:"VerticalAlignTop"` // The vertical alignment of the block
- Text *Text `json:"text,omitempty"` // The text of the block, if applicable
- File *File `json:"file,omitempty"` // The file of the block, if applicable
+ Id string `json:"id" example:"64394517de52ad5acb89c66c"` // The id of the block
+ ChildrenIds []string `json:"children_ids" example:"['6797ce8ecda913cde14b02dc']"` // The ids of the block's children
+ BackgroundColor string `json:"background_color" example:"red"` // The background color of the block
+ Align string `json:"align" enums:"AlignLeft,AlignCenter,AlignRight,AlignJustify" example:"AlignLeft"` // The alignment of the block
+ VerticalAlign string `json:"vertical_align" enums:"VerticalAlignTop,VerticalAlignMiddle,VerticalAlignBottom" example:"VerticalAlignTop"` // The vertical alignment of the block
+ Text *Text `json:"text,omitempty"` // The text of the block, if applicable
+ File *File `json:"file,omitempty"` // The file of the block, if applicable
+ Relation *Relation `json:"relation,omitempty"` // The relation of the block, if applicable
}
type Text struct {
@@ -58,6 +59,11 @@ type File struct {
Style string `json:"style"` // The style of the file
}
+// TODO: fill in the relation struct
+type Relation struct {
+ Id string
+}
+
type Detail struct {
Id string `json:"id" enums:"last_modified_date,last_modified_by,created_date,created_by,last_opened_date,tags" example:"last_modified_date"` // The id of the detail
Details map[string]interface{} `json:"details"` // The details
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 10b074bd5..2ec4ba64b 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -7,10 +7,12 @@ import (
"time"
"github.com/gogo/protobuf/types"
+ "github.com/iancoleman/strcase"
"github.com/anyproto/anytype-heart/core/api/internal/space"
"github.com/anyproto/anytype-heart/core/api/pagination"
"github.com/anyproto/anytype-heart/core/api/util"
+ "github.com/anyproto/anytype-heart/core/domain"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
@@ -454,75 +456,94 @@ func (s *ObjectService) getTypeFromDetails(typeId string, details []*model.Objec
}
}
-// getDetails returns the list of details from the ObjectShowResponse.
+// getDetails returns a list of details by iterating over all relations found in the RelationLinks and mapping their format and value.
func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
relationFormatMap := s.getRelationFormatMap(resp.ObjectView.RelationLinks)
- creator := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyCreator.String()].GetStringValue()
- lastModifiedBy := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastModifiedBy.String()].GetStringValue()
+ linkedRelations := resp.ObjectView.RelationLinks
+ primaryDetailFields := resp.ObjectView.Details[0].Details.Fields
- var creatorId, lastModifiedById string
- for _, detail := range resp.ObjectView.Details {
- if detail.Id == creator {
- creatorId = detail.Id
+ var details []Detail
+ for _, r := range linkedRelations {
+ if val, ok := primaryDetailFields[r.Key]; ok {
+ relName := s.getRelationName(r.Key, resp)
+ format := relationFormatMap[r.Key]
+ details = append(details, Detail{
+ Id: strcase.ToSnake(relName),
+ Details: map[string]interface{}{
+ "name": relName,
+ "type": format,
+ format: s.convertValue(val, format, r.Key, resp.ObjectView.Details),
+ },
+ })
}
- if detail.Id == lastModifiedBy {
- lastModifiedById = detail.Id
+ }
+ return details
+}
+
+// getRelationName returns the relation name from the RelationKey or the resolved relation name.
+func (s *ObjectService) getRelationName(key string, resp *pb.RpcObjectShowResponse) string {
+ relation, err := bundle.GetRelation(domain.RelationKey(key))
+ if err != nil {
+ relation, err = util.ResolveRelationKeyToRelationName(s.mw, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), key)
+ if err != nil {
+ return key
}
}
- memberLastModifiedBy, err := s.spaceService.GetMember(context.Background(), resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), lastModifiedById)
- if err != nil {
- memberLastModifiedBy = space.Member{}
+ // custom relation names
+ if key == bundle.RelationKeyCreator.String() {
+ return "Created By"
+ } else if key == bundle.RelationKeyCreatedDate.String() {
+ return "Created Date"
}
- memberCreator, err := s.spaceService.GetMember(context.Background(), resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), creatorId)
- if err != nil {
- memberCreator = space.Member{}
- }
+ return relation.Name
+}
- return []Detail{
- {
- Id: "last_modified_date",
- Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyLastModifiedDate.String()],
- "date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastModifiedDate.String()].GetNumberValue()),
- },
- },
- {
- Id: "last_modified_by",
- Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyLastModifiedBy.String()],
- "object": memberLastModifiedBy,
- },
- },
- {
- Id: "created_date",
- Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyCreatedDate.String()],
- "date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyCreatedDate.String()].GetNumberValue()),
- },
- },
- {
- Id: "created_by",
- Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyCreator.String()],
- "object": memberCreator,
- },
- },
- {
- Id: "last_opened_date",
- Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyLastOpenedDate.String()],
- "date": PosixToISO8601(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLastOpenedDate.String()].GetNumberValue()),
- },
- },
- {
- Id: "tags",
- Details: map[string]interface{}{
- "type": relationFormatMap[bundle.RelationKeyTag.String()],
- "multi_select": s.getTags(resp),
- },
- },
+// convertValue converts a protobuf types.Value into a native Go value.
+func (s *ObjectService) convertValue(value *types.Value, format string, key string, details []*model.ObjectViewDetailsSet) interface{} {
+ switch kind := value.Kind.(type) {
+ case *types.Value_NullValue:
+ return nil
+ case *types.Value_NumberValue:
+ if format == "date" {
+ return PosixToISO8601(kind.NumberValue)
+ }
+ return kind.NumberValue
+ case *types.Value_StringValue:
+ if key == bundle.RelationKeyCreator.String() || key == bundle.RelationKeyLastModifiedBy.String() {
+ member, err := s.spaceService.GetMember(context.Background(), details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), kind.StringValue)
+ if err != nil {
+ return nil
+ }
+ return member
+ }
+ return kind.StringValue
+ case *types.Value_BoolValue:
+ return kind.BoolValue
+ case *types.Value_StructValue:
+ m := make(map[string]interface{})
+ for k, v := range kind.StructValue.Fields {
+ m[k] = s.convertValue(v, format, key, details)
+ }
+ return m
+ case *types.Value_ListValue:
+ var list []interface{}
+ for _, v := range kind.ListValue.Values {
+ list = append(list, s.convertValue(v, format, key, details))
+ }
+
+ if format == "select" || format == "multi_select" {
+ return s.getTags(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ Details: details,
+ },
+ })
+ }
+
+ return list
+ default:
+ return nil
}
}
@@ -532,6 +553,8 @@ func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink
var mu sync.Mutex
mu.Lock()
+ relationFormatToName[int32(model.RelationFormat_longtext)] = "text"
+ relationFormatToName[int32(model.RelationFormat_shorttext)] = "text"
relationFormatToName[int32(model.RelationFormat_tag)] = "multi_select"
relationFormatToName[int32(model.RelationFormat_status)] = "select"
@@ -576,6 +599,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
for _, block := range resp.ObjectView.Blocks {
var text *Text
var file *File
+ var relation *Relation
switch content := block.Content.(type) {
case *model.BlockContentOfText:
@@ -598,8 +622,12 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
State: model.BlockContentFileState_name[int32(content.File.State)],
Style: model.BlockContentFileStyle_name[int32(content.File.Style)],
}
- // TODO: other content types?
+ case *model.BlockContentOfRelation:
+ relation = &Relation{
+ Id: content.Relation.Key,
+ }
}
+ // TODO: other content types?
blocks = append(blocks, Block{
Id: block.Id,
@@ -609,6 +637,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
VerticalAlign: model.BlockVerticalAlign_name[int32(block.VerticalAlign)],
Text: text,
File: file,
+ Relation: relation,
})
}
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index ed40c5b5e..447f2f691 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -27,6 +27,7 @@ const (
mockedObjectName = "mocked-object-name"
mockedObjectSnippet = "mocked-object-snippet"
mockedObjectIcon = "🔍"
+ mockedParticipantId = "mocked-participant-id"
mockedObjectTypeUniqueKey = "ot-page"
mockedTypeId = "mocked-type-id"
mockedTypeName = "mocked-type-name"
@@ -122,11 +123,21 @@ func TestObjectService_ListObjects(t *testing.T) {
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
bundle.RelationKeySnippet.String(): pbtypes.String(mockedObjectSnippet),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
- bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyCreatedDate.String(): pbtypes.Float64(888888),
+ bundle.RelationKeyLastModifiedBy.String(): pbtypes.String(mockedParticipantId),
bundle.RelationKeyLastModifiedDate.String(): pbtypes.Float64(999999),
+ bundle.RelationKeyCreator.String(): pbtypes.String(mockedParticipantId),
bundle.RelationKeyLastOpenedDate.String(): pbtypes.Float64(0),
bundle.RelationKeySpaceId.String(): pbtypes.String(mockedSpaceId),
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
+ },
+ },
+ },
+ {
+ Id: mockedParticipantId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedParticipantId),
},
},
},
@@ -142,6 +153,32 @@ func TestObjectService_ListObjects(t *testing.T) {
},
},
},
+ RelationLinks: []*model.RelationLink{
+ {
+ Key: bundle.RelationKeyLastModifiedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyLastModifiedBy.String(),
+ Format: model.RelationFormat_object,
+ },
+ {
+ Key: bundle.RelationKeyCreatedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyCreator.String(),
+ Format: model.RelationFormat_object,
+ },
+ {
+ Key: bundle.RelationKeyLastOpenedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyTag.String(),
+ Format: model.RelationFormat_tag,
+ },
+ },
},
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
@@ -154,7 +191,7 @@ func TestObjectService_ListObjects(t *testing.T) {
Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyId.String(),
Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(""),
+ Value: pbtypes.String(mockedParticipantId),
},
},
Keys: []string{
@@ -169,7 +206,11 @@ func TestObjectService_ListObjects(t *testing.T) {
}).Return(&pb.RpcObjectSearchResponse{
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
Records: []*types.Struct{
- {},
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedParticipantId),
+ },
+ },
},
}).Twice()
@@ -187,17 +228,17 @@ func TestObjectService_ListObjects(t *testing.T) {
require.Equal(t, mockedObjectName, objects[0].Name)
require.Equal(t, mockedObjectSnippet, objects[0].Snippet)
require.Equal(t, mockedObjectIcon, objects[0].Icon)
- require.Equal(t, 6, len(objects[0].Details))
+ require.Equal(t, 5, len(objects[0].Details))
for _, detail := range objects[0].Details {
if detail.Id == "created_date" {
require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
} else if detail.Id == "created_by" {
- require.Empty(t, detail.Details["created_by"])
+ require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
} else if detail.Id == "last_modified_date" {
require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
} else if detail.Id == "last_modified_by" {
- require.Empty(t, detail.Details["last_modified_by"])
+ require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
} else if detail.Id == "last_opened_date" {
require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["date"])
} else if detail.Id == "tags" {
@@ -276,36 +317,35 @@ func TestObjectService_GetObject(t *testing.T) {
},
},
},
+ RelationLinks: []*model.RelationLink{
+ {
+ Key: bundle.RelationKeyLastModifiedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyLastModifiedBy.String(),
+ Format: model.RelationFormat_object,
+ },
+ {
+ Key: bundle.RelationKeyCreatedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyCreator.String(),
+ Format: model.RelationFormat_object,
+ },
+ {
+ Key: bundle.RelationKeyLastOpenedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyTag.String(),
+ Format: model.RelationFormat_tag,
+ },
+ },
},
}, nil).Once()
- // Mock participant details
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(""),
- },
- },
- Keys: []string{
- bundle.RelationKeyId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
- bundle.RelationKeyIdentity.String(),
- bundle.RelationKeyGlobalName.String(),
- bundle.RelationKeyParticipantPermissions.String(),
- },
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {},
- },
- }).Twice()
-
// when
object, err := fx.GetObject(ctx, mockedSpaceId, mockedObjectId)
@@ -320,7 +360,7 @@ func TestObjectService_GetObject(t *testing.T) {
require.Equal(t, mockedObjectName, object.Name)
require.Equal(t, mockedObjectSnippet, object.Snippet)
require.Equal(t, mockedObjectName, object.Icon)
- require.Equal(t, 6, len(object.Details))
+ require.Equal(t, 3, len(object.Details))
for _, detail := range object.Details {
if detail.Id == "created_date" {
@@ -430,33 +470,6 @@ func TestObjectService_CreateObject(t *testing.T) {
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
- // Mock participant details
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(""),
- },
- },
- Keys: []string{
- bundle.RelationKeyId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
- bundle.RelationKeyIdentity.String(),
- bundle.RelationKeyGlobalName.String(),
- bundle.RelationKeyParticipantPermissions.String(),
- },
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {},
- },
- }).Twice()
-
// when
object, err := fx.CreateObject(ctx, mockedSpaceId, CreateObjectRequest{
Name: mockedObjectName,
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 233b6ee4f..c6d1e023a 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -284,7 +284,30 @@ func TestSearchService_GlobalSearch(t *testing.T) {
},
},
},
+ RelationLinks: []*model.RelationLink{
+ {
+ Key: bundle.RelationKeyLastModifiedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyLastModifiedBy.String(),
+ Format: model.RelationFormat_object,
+ },
+ {
+ Key: bundle.RelationKeyCreatedDate.String(),
+ Format: model.RelationFormat_date,
+ },
+ {
+ Key: bundle.RelationKeyCreator.String(),
+ Format: model.RelationFormat_object,
+ },
+ {
+ Key: bundle.RelationKeyTag.String(),
+ Format: model.RelationFormat_tag,
+ },
+ },
},
+
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}, nil).Once()
@@ -486,30 +509,6 @@ func TestSearchService_Search(t *testing.T) {
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
- // Mock participant details
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(""),
- },
- },
- Keys: []string{bundle.RelationKeyId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
- bundle.RelationKeyIdentity.String(),
- bundle.RelationKeyGlobalName.String(),
- bundle.RelationKeyParticipantPermissions.String(),
- },
- }).Return(&pb.RpcObjectSearchResponse{
- Records: []*types.Struct{},
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- }).Twice()
-
// when
objects, total, hasMore, err := fx.Search(ctx, mockedSpaceId, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Direction: "desc", Timestamp: "last_modified_date"}}, offset, limit)
diff --git a/core/api/util/util.go b/core/api/util/util.go
index c8ce71dec..db6e3e427 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -54,3 +54,29 @@ func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, u
return resp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue(), nil
}
+
+func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId string, relationKey string) (relation *model.Relation, err error) {
+ resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
+ SpaceId: spaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyRelationKey.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String(relationKey),
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String()},
+ })
+
+ if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
+ return &model.Relation{}, ErrFailedSearchType
+ }
+
+ if len(resp.Records) == 0 {
+ return &model.Relation{}, ErrorTypeNotFound
+ }
+
+ return &model.Relation{
+ Name: resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ }, nil
+}
From 820a894bf135b5fb815c8903623109c93236b888 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sat, 15 Feb 2025 20:07:13 +0100
Subject: [PATCH 019/132] GO-4459: Add exclusion of system relations in object
details
---
core/api/internal/object/service.go | 94 +++++++++++++++++++----------
core/api/util/util.go | 8 ++-
2 files changed, 70 insertions(+), 32 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 2ec4ba64b..0079b9095 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -3,8 +3,6 @@ package object
import (
"context"
"errors"
- "sync"
- "time"
"github.com/gogo/protobuf/types"
"github.com/iancoleman/strcase"
@@ -462,15 +460,58 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
linkedRelations := resp.ObjectView.RelationLinks
primaryDetailFields := resp.ObjectView.Details[0].Details.Fields
+ // system relations to be excluded
+ excludeRelations := map[string]bool{
+ bundle.RelationKeyId.String(): true,
+ bundle.RelationKeySpaceId.String(): true,
+ bundle.RelationKeyName.String(): true,
+ bundle.RelationKeyIconEmoji.String(): true,
+ bundle.RelationKeyIconImage.String(): true,
+ bundle.RelationKeyType.String(): true,
+ bundle.RelationKeyLayout.String(): true,
+ bundle.RelationKeyIsFavorite.String(): true,
+ bundle.RelationKeyIsArchived.String(): true,
+ bundle.RelationKeyIsDeleted.String(): true,
+ bundle.RelationKeyIsHidden.String(): true,
+ bundle.RelationKeyWorkspaceId.String(): true,
+ bundle.RelationKeyInternalFlags.String(): true,
+ bundle.RelationKeyRestrictions.String(): true,
+ bundle.RelationKeyOrigin.String(): true,
+ bundle.RelationKeySnippet.String(): true,
+ bundle.RelationKeySyncStatus.String(): true,
+ bundle.RelationKeySyncError.String(): true,
+ bundle.RelationKeySyncDate.String(): true,
+ bundle.RelationKeyCoverId.String(): true,
+ bundle.RelationKeyCoverType.String(): true,
+ bundle.RelationKeyCoverScale.String(): true,
+ bundle.RelationKeyCoverX.String(): true,
+ bundle.RelationKeyCoverY.String(): true,
+ bundle.RelationKeyMentions.String(): true,
+ bundle.RelationKeyOldAnytypeID.String(): true,
+ bundle.RelationKeySource.String(): true,
+ bundle.RelationKeySourceFilePath.String(): true,
+ bundle.RelationKeyImportType.String(): true,
+ bundle.RelationKeyTargetObjectType.String(): true,
+ bundle.RelationKeyFeaturedRelations.String(): true,
+ bundle.RelationKeySetOf.String(): true,
+ bundle.RelationKeyLinks.String(): true,
+ bundle.RelationKeyBacklinks.String(): true,
+ bundle.RelationKeySourceObject.String(): true,
+ }
+
var details []Detail
for _, r := range linkedRelations {
+ if _, isExcluded := excludeRelations[r.Key]; isExcluded {
+ continue
+ }
+
if val, ok := primaryDetailFields[r.Key]; ok {
- relName := s.getRelationName(r.Key, resp)
+ id, name := s.getRelation(r.Key, resp)
format := relationFormatMap[r.Key]
details = append(details, Detail{
- Id: strcase.ToSnake(relName),
+ Id: id,
Details: map[string]interface{}{
- "name": relName,
+ "name": name,
"type": format,
format: s.convertValue(val, format, r.Key, resp.ObjectView.Details),
},
@@ -480,24 +521,25 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
return details
}
-// getRelationName returns the relation name from the RelationKey or the resolved relation name.
-func (s *ObjectService) getRelationName(key string, resp *pb.RpcObjectShowResponse) string {
+// getRelationName returns the relation id and relation name from the ObjectShowResponse.
+func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse) (id string, name string) {
relation, err := bundle.GetRelation(domain.RelationKey(key))
if err != nil {
relation, err = util.ResolveRelationKeyToRelationName(s.mw, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), key)
if err != nil {
- return key
+ return strcase.ToSnake(key), key
}
+ return key, relation.Name
}
- // custom relation names
+ // special cases of relation keys and names
if key == bundle.RelationKeyCreator.String() {
- return "Created By"
+ return "created_by", "Created By"
} else if key == bundle.RelationKeyCreatedDate.String() {
- return "Created Date"
+ return "created_date", "Created Date"
}
- return relation.Name
+ return strcase.ToSnake(key), relation.Name
}
// convertValue converts a protobuf types.Value into a native Go value.
@@ -507,7 +549,7 @@ func (s *ObjectService) convertValue(value *types.Value, format string, key stri
return nil
case *types.Value_NumberValue:
if format == "date" {
- return PosixToISO8601(kind.NumberValue)
+ return util.PosixToISO8601(kind.NumberValue)
}
return kind.NumberValue
case *types.Value_StringValue:
@@ -534,11 +576,7 @@ func (s *ObjectService) convertValue(value *types.Value, format string, key stri
}
if format == "select" || format == "multi_select" {
- return s.getTags(&pb.RpcObjectShowResponse{
- ObjectView: &model.ObjectView{
- Details: details,
- },
- })
+ return s.getTags(key, details)
}
return list
@@ -549,10 +587,10 @@ func (s *ObjectService) convertValue(value *types.Value, format string, key stri
// getRelationFormatMapFromResponse returns the map of relation key to relation format from the ObjectShowResponse.
func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink) map[string]string {
- var relationFormatToName = model.RelationFormat_name
- var mu sync.Mutex
-
- mu.Lock()
+ relationFormatToName := make(map[int32]string, len(model.RelationFormat_name))
+ for k, v := range model.RelationFormat_name {
+ relationFormatToName[k] = v
+ }
relationFormatToName[int32(model.RelationFormat_longtext)] = "text"
relationFormatToName[int32(model.RelationFormat_shorttext)] = "text"
relationFormatToName[int32(model.RelationFormat_tag)] = "multi_select"
@@ -562,23 +600,22 @@ func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink
for _, detail := range relationLinks {
relationFormatMap[detail.Key] = relationFormatToName[int32(detail.Format)]
}
- mu.Unlock()
return relationFormatMap
}
// getTags returns the list of tags from the ObjectShowResponse
-func (s *ObjectService) getTags(resp *pb.RpcObjectShowResponse) []Tag {
+func (s *ObjectService) getTags(key string, details []*model.ObjectViewDetailsSet) []Tag {
tags := []Tag{}
- tagField, ok := resp.ObjectView.Details[0].Details.Fields["tag"]
+ tagField, ok := details[0].Details.Fields[key]
if !ok || tagField.GetListValue() == nil {
return tags
}
for _, tagId := range tagField.GetListValue().Values {
id := tagId.GetStringValue()
- for _, detail := range resp.ObjectView.Details {
+ for _, detail := range details {
if detail.Id == id {
tags = append(tags, Tag{
Id: id,
@@ -643,8 +680,3 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
return blocks
}
-
-func PosixToISO8601(posix float64) string {
- t := time.Unix(int64(posix), 0).UTC()
- return t.Format(time.RFC3339)
-}
diff --git a/core/api/util/util.go b/core/api/util/util.go
index db6e3e427..25eacf1d2 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
+ "time"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
@@ -17,6 +18,11 @@ var (
ErrorTypeNotFound = errors.New("type not found")
)
+func PosixToISO8601(posix float64) string {
+ t := time.Unix(int64(posix), 0).UTC()
+ return t.Format(time.RFC3339)
+}
+
// GetIconFromEmojiOrImage returns the icon to use for the object, which can be either an emoji or an image url
func GetIconFromEmojiOrImage(accountInfo *model.AccountInfo, iconEmoji string, iconImage string) string {
if iconEmoji != "" {
@@ -65,7 +71,7 @@ func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId s
Value: pbtypes.String(relationKey),
},
},
- Keys: []string{bundle.RelationKeyId.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
From ce783a72e31b470cc306ba3d5d43cf422855af62 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Feb 2025 12:00:47 +0100
Subject: [PATCH 020/132] GO-4459: Fix security definition to ApiKey auth
---
core/api/docs/docs.go | 26 ++++++++++++++++++++------
core/api/docs/swagger.json | 26 ++++++++++++++++++++------
core/api/docs/swagger.yaml | 18 +++++++++++++-----
core/api/service.go | 4 +++-
4 files changed, 56 insertions(+), 18 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 0c3db26ba..019faf5d9 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -1356,6 +1356,14 @@ const docTemplate = `{
"type": "string",
"example": "64394517de52ad5acb89c66c"
},
+ "relation": {
+ "description": "The relation of the block, if applicable",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Relation"
+ }
+ ]
+ },
"text": {
"description": "The text of the block, if applicable",
"allOf": [
@@ -1560,6 +1568,14 @@ const docTemplate = `{
}
}
},
+ "object.Relation": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ }
+ }
+ },
"object.Template": {
"type": "object",
"properties": {
@@ -2140,13 +2156,11 @@ const docTemplate = `{
}
},
"securityDefinitions": {
- "BasicAuth": {
- "type": "basic"
+ "ApiKeyAuth": {
+ "type": "apiKey",
+ "name": "Authorization",
+ "in": "header"
}
- },
- "externalDocs": {
- "description": "OpenAPI",
- "url": "https://swagger.io/resources/open-api/"
}
}`
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 223b83383..f0af08881 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1350,6 +1350,14 @@
"type": "string",
"example": "64394517de52ad5acb89c66c"
},
+ "relation": {
+ "description": "The relation of the block, if applicable",
+ "allOf": [
+ {
+ "$ref": "#/definitions/object.Relation"
+ }
+ ]
+ },
"text": {
"description": "The text of the block, if applicable",
"allOf": [
@@ -1554,6 +1562,14 @@
}
}
},
+ "object.Relation": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ }
+ }
+ },
"object.Template": {
"type": "object",
"properties": {
@@ -2134,12 +2150,10 @@
}
},
"securityDefinitions": {
- "BasicAuth": {
- "type": "basic"
+ "ApiKeyAuth": {
+ "type": "apiKey",
+ "name": "Authorization",
+ "in": "header"
}
- },
- "externalDocs": {
- "description": "OpenAPI",
- "url": "https://swagger.io/resources/open-api/"
}
}
\ No newline at end of file
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 0dd2b302a..c4dfe63d1 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -56,6 +56,10 @@ definitions:
description: The id of the block
example: 64394517de52ad5acb89c66c
type: string
+ relation:
+ allOf:
+ - $ref: '#/definitions/object.Relation'
+ description: The relation of the block, if applicable
text:
allOf:
- $ref: '#/definitions/object.Text'
@@ -205,6 +209,11 @@ definitions:
- $ref: '#/definitions/object.Object'
description: The object
type: object
+ object.Relation:
+ properties:
+ id:
+ type: string
+ type: object
object.Template:
properties:
icon:
@@ -615,9 +624,6 @@ definitions:
type: string
type: object
type: object
-externalDocs:
- description: OpenAPI
- url: https://swagger.io/resources/open-api/
host: localhost:31009
info:
contact:
@@ -1476,6 +1482,8 @@ paths:
tags:
- lists
securityDefinitions:
- BasicAuth:
- type: basic
+ ApiKeyAuth:
+ in: header
+ name: Authorization
+ type: apiKey
swagger: "2.0"
diff --git a/core/api/service.go b/core/api/service.go
index 6027337b6..d6cb17d47 100644
--- a/core/api/service.go
+++ b/core/api/service.go
@@ -60,7 +60,9 @@ func (s *apiService) Name() (name string) {
// @license.url https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
// @host localhost:31009
// @BasePath /v1
-// @securityDefinitions.basic BasicAuth
+// @securityDefinitions.apikey ApiKeyAuth
+// @in header
+// @name Authorization
// @externalDocs.description OpenAPI
// @externalDocs.url https://swagger.io/resources/open-api/
func (s *apiService) Init(a *app.App) (err error) {
From 0a0ef5317dcd2dd0b706509cba51a5a0d60ea51c Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Feb 2025 12:59:37 +0100
Subject: [PATCH 021/132] GO-4459: Upgrade to OpenAPI specification v3.1 and
swaggo/swag v2
---
core/api/docs/docs.go | 2173 +-------------------------
core/api/docs/swagger.json | 2165 +-------------------------
core/api/docs/swagger.yaml | 2226 +++++++++++++++------------
core/api/internal/export/handler.go | 1 +
core/api/internal/list/handler.go | 25 +-
core/api/internal/list/service.go | 8 +-
core/api/internal/object/handler.go | 15 +-
core/api/internal/search/handler.go | 2 +
core/api/internal/space/handler.go | 9 +-
core/api/server/router.go | 2 +-
core/api/service.go | 30 +-
go.mod | 12 +-
go.sum | 16 +
13 files changed, 1287 insertions(+), 5397 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 019faf5d9..2faeb5526 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -1,2175 +1,24 @@
-// Package docs Code generated by swaggo/swag. DO NOT EDIT
+// Code generated by swaggo/swag. DO NOT EDIT.
+
package docs
-import "github.com/swaggo/swag"
+import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "swagger": "2.0",
- "info": {
- "description": "{{escape .Description}}",
- "title": "{{.Title}}",
- "termsOfService": "https://anytype.io/terms_of_use",
- "contact": {
- "name": "Anytype Support",
- "url": "https://anytype.io/contact",
- "email": "support@anytype.io"
- },
- "license": {
- "name": "Any Source Available License 1.0",
- "url": "https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"
- },
- "version": "{{.Version}}"
- },
- "host": "{{.Host}}",
- "basePath": "{{.BasePath}}",
- "paths": {
- "/auth/display_code": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "auth"
- ],
- "summary": "Start new challenge",
- "parameters": [
- {
- "type": "string",
- "description": "App name requesting the challenge",
- "name": "app_name",
- "in": "query",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Challenge ID",
- "schema": {
- "$ref": "#/definitions/auth.DisplayCodeResponse"
- }
- },
- "400": {
- "description": "Invalid input",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/auth/token": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "auth"
- ],
- "summary": "Retrieve token",
- "parameters": [
- {
- "type": "string",
- "description": "Challenge ID",
- "name": "challenge_id",
- "in": "query",
- "required": true
- },
- {
- "type": "string",
- "description": "4-digit code retrieved from Anytype Desktop app",
- "name": "code",
- "in": "query",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Authentication token",
- "schema": {
- "$ref": "#/definitions/auth.TokenResponse"
- }
- },
- "400": {
- "description": "Invalid input",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/search": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "search"
- ],
- "summary": "Search objects across all spaces",
- "parameters": [
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- },
- {
- "description": "Search parameters",
- "name": "request",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/search.SearchRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "List spaces",
- "parameters": [
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of spaces",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-space_Space"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "Create space",
- "parameters": [
- {
- "description": "Space to create",
- "name": "name",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/space.CreateSpaceRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Space created successfully",
- "schema": {
- "$ref": "#/definitions/space.SpaceResponse"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "423": {
- "description": "Rate limit exceeded",
- "schema": {
- "$ref": "#/definitions/util.RateLimitError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "Get space",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Space",
- "schema": {
- "$ref": "#/definitions/space.SpaceResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Space not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/members": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "List members",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of members",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-space_Member"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/members/{member_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "Get member",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Member ID",
- "name": "member_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Member",
- "schema": {
- "$ref": "#/definitions/space.MemberResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Member not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/objects": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "List objects",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "Create object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "description": "Object to create",
- "name": "object",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/object.CreateObjectRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "The created object",
- "schema": {
- "$ref": "#/definitions/object.ObjectResponse"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "423": {
- "description": "Rate limit exceeded",
- "schema": {
- "$ref": "#/definitions/util.RateLimitError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/objects/{object_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "Get object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Object ID",
- "name": "object_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The requested object",
- "schema": {
- "$ref": "#/definitions/object.ObjectResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "delete": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "Delete object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Object ID",
- "name": "object_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The deleted object",
- "schema": {
- "$ref": "#/definitions/object.ObjectResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "403": {
- "description": "Forbidden",
- "schema": {
- "$ref": "#/definitions/util.ForbiddenError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "423": {
- "description": "Rate limit exceeded",
- "schema": {
- "$ref": "#/definitions/util.RateLimitError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/objects/{object_id}/export/{format}": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "export"
- ],
- "summary": "Export object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Object ID",
- "name": "object_id",
- "in": "path",
- "required": true
- },
- {
- "enum": [
- "markdown",
- "protobuf"
- ],
- "type": "string",
- "description": "Export format",
- "name": "format",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Object exported successfully",
- "schema": {
- "$ref": "#/definitions/export.ObjectExportResponse"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/search": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "search"
- ],
- "summary": "Search objects within a space",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- },
- {
- "description": "Search parameters",
- "name": "request",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/search.SearchRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "List types",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of types",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Type"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types/{type_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "Get type",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Type ID",
- "name": "type_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The requested type",
- "schema": {
- "$ref": "#/definitions/object.TypeResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types/{type_id}/templates": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "List templates",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Type ID",
- "name": "type_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of templates",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Template"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types/{type_id}/templates/{template_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "Get template",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Type ID",
- "name": "type_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Template ID",
- "name": "template_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The requested template",
- "schema": {
- "$ref": "#/definitions/object.TemplateResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/v1/spaces/{space_id}/lists/{list_id}/objects": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Get objects in list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "type": "integer",
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Add objects to list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "description": "List of object IDs",
- "name": "objects",
- "in": "body",
- "required": true,
- "schema": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Objects added successfully",
- "schema": {
- "type": "string"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "delete": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Remove objects from list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "description": "List of object IDs",
- "name": "objects",
- "in": "body",
- "required": true,
- "schema": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Objects removed successfully",
- "schema": {
- "type": "string"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- }
- },
- "definitions": {
- "auth.DisplayCodeResponse": {
- "type": "object",
- "properties": {
- "challenge_id": {
- "description": "The challenge id associated with the displayed code and needed to solve the challenge for token",
- "type": "string",
- "example": "67647f5ecda913e9a2e11b26"
- }
- }
- },
- "auth.TokenResponse": {
- "type": "object",
- "properties": {
- "app_key": {
- "description": "The permanent app key",
- "type": "string",
- "example": "zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="
- },
- "session_token": {
- "description": "The ephemeral session token",
- "type": "string",
- "example": "eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII"
- }
- }
- },
- "export.ObjectExportResponse": {
- "type": "object",
- "properties": {
- "path": {
- "description": "The path the object was exported to",
- "type": "string",
- "example": "/path/to/export"
- }
- }
- },
- "object.Block": {
- "type": "object",
- "properties": {
- "align": {
- "description": "The alignment of the block",
- "type": "string",
- "enum": [
- "AlignLeft",
- "AlignCenter",
- "AlignRight",
- "AlignJustify"
- ],
- "example": "AlignLeft"
- },
- "background_color": {
- "description": "The background color of the block",
- "type": "string",
- "example": "red"
- },
- "children_ids": {
- "description": "The ids of the block's children",
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": [
- "['6797ce8ecda913cde14b02dc']"
- ]
- },
- "file": {
- "description": "The file of the block, if applicable",
- "allOf": [
- {
- "$ref": "#/definitions/object.File"
- }
- ]
- },
- "id": {
- "description": "The id of the block",
- "type": "string",
- "example": "64394517de52ad5acb89c66c"
- },
- "relation": {
- "description": "The relation of the block, if applicable",
- "allOf": [
- {
- "$ref": "#/definitions/object.Relation"
- }
- ]
- },
- "text": {
- "description": "The text of the block, if applicable",
- "allOf": [
- {
- "$ref": "#/definitions/object.Text"
- }
- ]
- },
- "vertical_align": {
- "description": "The vertical alignment of the block",
- "type": "string",
- "enum": [
- "VerticalAlignTop",
- "VerticalAlignMiddle",
- "VerticalAlignBottom"
- ],
- "example": "VerticalAlignTop"
- }
- }
- },
- "object.CreateObjectRequest": {
- "type": "object",
- "properties": {
- "body": {
- "description": "The body of the object",
- "type": "string",
- "example": "This is the body of the object. Markdown syntax is supported here."
- },
- "description": {
- "description": "The description of the object",
- "type": "string",
- "example": "This is a description of the object."
- },
- "icon": {
- "description": "The icon of the object",
- "type": "string",
- "example": "📄"
- },
- "name": {
- "description": "The name of the object",
- "type": "string",
- "example": "My object"
- },
- "object_type_unique_key": {
- "description": "The unique key of the object type",
- "type": "string",
- "example": "ot-page"
- },
- "source": {
- "description": "The source url, only applicable for bookmarks",
- "type": "string",
- "example": "https://bookmark-source.com"
- },
- "template_id": {
- "description": "The id of the template to use",
- "type": "string",
- "example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
- }
- }
- },
- "object.Detail": {
- "type": "object",
- "properties": {
- "details": {
- "description": "The details",
- "type": "object",
- "additionalProperties": true
- },
- "id": {
- "description": "The id of the detail",
- "type": "string",
- "enum": [
- "last_modified_date",
- "last_modified_by",
- "created_date",
- "created_by",
- "last_opened_date",
- "tags"
- ],
- "example": "last_modified_date"
- }
- }
- },
- "object.File": {
- "type": "object",
- "properties": {
- "added_at": {
- "description": "The added at of the file",
- "type": "integer"
- },
- "hash": {
- "description": "The hash of the file",
- "type": "string"
- },
- "mime": {
- "description": "The mime of the file",
- "type": "string"
- },
- "name": {
- "description": "The name of the file",
- "type": "string"
- },
- "size": {
- "description": "The size of the file",
- "type": "integer"
- },
- "state": {
- "description": "The state of the file",
- "type": "string"
- },
- "style": {
- "description": "The style of the file",
- "type": "string"
- },
- "target_object_id": {
- "description": "The target object id of the file",
- "type": "string"
- },
- "type": {
- "description": "The type of the file",
- "type": "string"
- }
- }
- },
- "object.Object": {
- "type": "object",
- "properties": {
- "blocks": {
- "description": "The blocks of the object",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Block"
- }
- },
- "details": {
- "description": "The details of the object",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Detail"
- }
- },
- "icon": {
- "description": "The icon of the object",
- "type": "string",
- "example": "📄"
- },
- "id": {
- "description": "The id of the object",
- "type": "string",
- "example": "bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"
- },
- "layout": {
- "description": "The layout of the object",
- "type": "string",
- "example": "basic"
- },
- "name": {
- "description": "The name of the object",
- "type": "string",
- "example": "My object"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "object"
- },
- "root_id": {
- "description": "The id of the object's root",
- "type": "string",
- "example": "bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"
- },
- "snippet": {
- "description": "The snippet of the object, especially important for notes as they don't have a name",
- "type": "string",
- "example": "The beginning of the object body..."
- },
- "space_id": {
- "description": "The id of the space the object is in",
- "type": "string",
- "example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
- },
- "type": {
- "description": "The type of the object",
- "allOf": [
- {
- "$ref": "#/definitions/object.Type"
- }
- ]
- }
- }
- },
- "object.ObjectResponse": {
- "type": "object",
- "properties": {
- "object": {
- "description": "The object",
- "allOf": [
- {
- "$ref": "#/definitions/object.Object"
- }
- ]
- }
- }
- },
- "object.Relation": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- }
- }
- },
- "object.Template": {
- "type": "object",
- "properties": {
- "icon": {
- "description": "The icon of the template",
- "type": "string",
- "example": "📄"
- },
- "id": {
- "description": "The id of the template",
- "type": "string",
- "example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
- },
- "name": {
- "description": "The name of the template",
- "type": "string",
- "example": "My template"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "template"
- }
- }
- },
- "object.TemplateResponse": {
- "type": "object",
- "properties": {
- "template": {
- "description": "The template",
- "allOf": [
- {
- "$ref": "#/definitions/object.Template"
- }
- ]
- }
- }
- },
- "object.Text": {
- "type": "object",
- "properties": {
- "checked": {
- "description": "Whether the text is checked",
- "type": "boolean",
- "example": true
- },
- "color": {
- "description": "The color of the text",
- "type": "string",
- "example": "red"
- },
- "icon": {
- "description": "The icon of the text",
- "type": "string",
- "example": "📄"
- },
- "style": {
- "description": "The style of the text",
- "type": "string",
- "enum": [
- "Paragraph",
- "Header1",
- "Header2",
- "Header3",
- "Header4",
- "Quote",
- "Code",
- "Title",
- "Checkbox",
- "Marked",
- "Numbered",
- "Toggle",
- "Description",
- "Callout"
- ],
- "example": "Paragraph"
- },
- "text": {
- "description": "The text",
- "type": "string",
- "example": "Some text..."
- }
- }
- },
- "object.Type": {
- "type": "object",
- "properties": {
- "icon": {
- "description": "The icon of the type",
- "type": "string",
- "example": "📄"
- },
- "id": {
- "description": "The id of the type",
- "type": "string",
- "example": "bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"
- },
- "name": {
- "description": "The name of the type",
- "type": "string",
- "example": "Page"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "type"
- },
- "recommended_layout": {
- "description": "The recommended layout of the type",
- "type": "string",
- "example": "todo"
- },
- "unique_key": {
- "description": "The unique key of the type",
- "type": "string",
- "example": "ot-page"
- }
- }
- },
- "object.TypeResponse": {
- "type": "object",
- "properties": {
- "type": {
- "description": "The type",
- "allOf": [
- {
- "$ref": "#/definitions/object.Type"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-object_Object": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Object"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-object_Template": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Template"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-object_Type": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Type"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-space_Member": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/space.Member"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-space_Space": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/space.Space"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginationMeta": {
- "type": "object",
- "properties": {
- "has_more": {
- "description": "Indicates if there are more items available beyond the current result set",
- "type": "boolean",
- "example": true
- },
- "limit": {
- "description": "The maximum number of items returned in the result set",
- "type": "integer",
- "example": 100
- },
- "offset": {
- "description": "The number of items skipped before starting to collect the result set",
- "type": "integer",
- "example": 0
- },
- "total": {
- "description": "The total number of items available for the endpoint",
- "type": "integer",
- "example": 1024
- }
- }
- },
- "search.SearchRequest": {
- "type": "object",
- "properties": {
- "query": {
- "description": "The search term to look for in object names and snippets",
- "type": "string",
- "example": "test"
- },
- "sort": {
- "description": "The sorting criteria and direction for the search results",
- "allOf": [
- {
- "$ref": "#/definitions/search.SortOptions"
- }
- ]
- },
- "types": {
- "description": "The types of objects to search for, specified by unique key or ID",
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": [
- "ot-note",
- "ot-page",
- "ot-678043f0cda9133be777049f",
- "bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"
- ]
- }
- }
- },
- "search.SortOptions": {
- "type": "object",
- "properties": {
- "direction": {
- "description": "The direction to sort the search results",
- "type": "string",
- "default": "desc",
- "enum": [
- "asc",
- "desc"
- ]
- },
- "timestamp": {
- "description": "The timestamp to sort the search results by",
- "type": "string",
- "default": "last_modified_date",
- "enum": [
- "created_date",
- "last_modified_date",
- "last_opened_date"
- ]
- }
- }
- },
- "space.CreateSpaceRequest": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the space",
- "type": "string",
- "example": "New Space"
- }
- }
- },
- "space.Member": {
- "type": "object",
- "properties": {
- "global_name": {
- "description": "The global name of the member in the network",
- "type": "string",
- "example": "john.any"
- },
- "icon": {
- "description": "The icon of the member",
- "type": "string",
- "example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"
- },
- "id": {
- "description": "The profile object id of the member",
- "type": "string",
- "example": "_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"
- },
- "identity": {
- "description": "The identity of the member in the network",
- "type": "string",
- "example": "AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"
- },
- "name": {
- "description": "The name of the member",
- "type": "string",
- "example": "John Doe"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "member"
- },
- "role": {
- "description": "The role of the member",
- "type": "string",
- "enum": [
- "Reader",
- "Writer",
- "Owner",
- "NoPermission"
- ],
- "example": "Owner"
- }
- }
- },
- "space.MemberResponse": {
- "type": "object",
- "properties": {
- "member": {
- "description": "The member",
- "allOf": [
- {
- "$ref": "#/definitions/space.Member"
- }
- ]
- }
- }
- },
- "space.Space": {
- "type": "object",
- "properties": {
- "account_space_id": {
- "description": "The id of the account space",
- "type": "string",
- "example": "bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"
- },
- "analytics_id": {
- "description": "The analytics id of the account",
- "type": "string",
- "example": "624aecdd-4797-4611-9d61-a2ae5f53cf1c"
- },
- "archive_object_id": {
- "description": "The id of the archive object",
- "type": "string",
- "example": "bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"
- },
- "device_id": {
- "description": "The id of the device",
- "type": "string",
- "example": "12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"
- },
- "gateway_url": {
- "description": "The gateway url to serve files and media",
- "type": "string",
- "example": "http://127.0.0.1:31006"
- },
- "home_object_id": {
- "description": "The id of the home object",
- "type": "string",
- "example": "bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"
- },
- "icon": {
- "description": "The icon of the space",
- "type": "string",
- "example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"
- },
- "id": {
- "description": "The id of the space",
- "type": "string",
- "example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
- },
- "local_storage_path": {
- "description": "The local storage path of the account",
- "type": "string",
- "example": "/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"
- },
- "marketplace_workspace_id": {
- "description": "The id of the marketplace workspace",
- "type": "string",
- "example": "_anytype_marketplace"
- },
- "name": {
- "description": "The name of the space",
- "type": "string",
- "example": "My Space"
- },
- "network_id": {
- "description": "The network id of the space",
- "type": "string",
- "example": "N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "space"
- },
- "profile_object_id": {
- "description": "The id of the profile object",
- "type": "string",
- "example": "bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"
- },
- "space_view_id": {
- "description": "The id of the space view",
- "type": "string",
- "example": "bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"
- },
- "tech_space_id": {
- "description": "The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself",
- "type": "string",
- "example": "bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"
- },
- "timezone": {
- "description": "The timezone of the account",
- "type": "string",
- "example": ""
- },
- "widgets_id": {
- "description": "The id of the widgets",
- "type": "string",
- "example": "bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"
- },
- "workspace_object_id": {
- "description": "The id of the workspace object",
- "type": "string",
- "example": "bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"
- }
- }
- },
- "space.SpaceResponse": {
- "type": "object",
- "properties": {
- "space": {
- "description": "The space",
- "allOf": [
- {
- "$ref": "#/definitions/space.Space"
- }
- ]
- }
- }
- },
- "util.ForbiddenError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Forbidden"
- }
- }
- }
- }
- },
- "util.NotFoundError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Resource not found"
- }
- }
- }
- }
- },
- "util.RateLimitError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Rate limit exceeded"
- }
- }
- }
- }
- },
- "util.ServerError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Internal server error"
- }
- }
- }
- }
- },
- "util.UnauthorizedError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Unauthorized"
- }
- }
- }
- }
- },
- "util.ValidationError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Bad request"
- }
- }
- }
- }
- }
- },
- "securityDefinitions": {
- "ApiKeyAuth": {
- "type": "apiKey",
- "name": "Authorization",
- "in": "header"
- }
- }
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"description":"The icon of the template","example":"📄","type":"string"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"description":"The icon of the type","example":"📄","type":"string"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"description":"The icon of the member","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100","type":"string"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"description":"The icon of the space","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
+ "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
+ "paths": {"/auth/display_code":{"post":{"parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "openapi": "3.1.0",
+ "servers": [
+ {"url":"localhost:31009/v1"}
+ ]
}`
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
Version: "1.0",
- Host: "localhost:31009",
- BasePath: "/v1",
- Schemes: []string{},
Title: "Anytype API",
Description: "This API allows interaction with Anytype resources such as spaces, objects and types.",
InfoInstanceName: "swagger",
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index f0af08881..c79693d6b 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,2159 +1,10 @@
{
- "swagger": "2.0",
- "info": {
- "description": "This API allows interaction with Anytype resources such as spaces, objects and types.",
- "title": "Anytype API",
- "termsOfService": "https://anytype.io/terms_of_use",
- "contact": {
- "name": "Anytype Support",
- "url": "https://anytype.io/contact",
- "email": "support@anytype.io"
- },
- "license": {
- "name": "Any Source Available License 1.0",
- "url": "https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"
- },
- "version": "1.0"
- },
- "host": "localhost:31009",
- "basePath": "/v1",
- "paths": {
- "/auth/display_code": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "auth"
- ],
- "summary": "Start new challenge",
- "parameters": [
- {
- "type": "string",
- "description": "App name requesting the challenge",
- "name": "app_name",
- "in": "query",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Challenge ID",
- "schema": {
- "$ref": "#/definitions/auth.DisplayCodeResponse"
- }
- },
- "400": {
- "description": "Invalid input",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/auth/token": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "auth"
- ],
- "summary": "Retrieve token",
- "parameters": [
- {
- "type": "string",
- "description": "Challenge ID",
- "name": "challenge_id",
- "in": "query",
- "required": true
- },
- {
- "type": "string",
- "description": "4-digit code retrieved from Anytype Desktop app",
- "name": "code",
- "in": "query",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Authentication token",
- "schema": {
- "$ref": "#/definitions/auth.TokenResponse"
- }
- },
- "400": {
- "description": "Invalid input",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/search": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "search"
- ],
- "summary": "Search objects across all spaces",
- "parameters": [
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- },
- {
- "description": "Search parameters",
- "name": "request",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/search.SearchRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "List spaces",
- "parameters": [
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of spaces",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-space_Space"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "Create space",
- "parameters": [
- {
- "description": "Space to create",
- "name": "name",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/space.CreateSpaceRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Space created successfully",
- "schema": {
- "$ref": "#/definitions/space.SpaceResponse"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "423": {
- "description": "Rate limit exceeded",
- "schema": {
- "$ref": "#/definitions/util.RateLimitError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "Get space",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Space",
- "schema": {
- "$ref": "#/definitions/space.SpaceResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Space not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/members": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "List members",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of members",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-space_Member"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/members/{member_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "spaces"
- ],
- "summary": "Get member",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Member ID",
- "name": "member_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Member",
- "schema": {
- "$ref": "#/definitions/space.MemberResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Member not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/objects": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "List objects",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "Create object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "description": "Object to create",
- "name": "object",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/object.CreateObjectRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "The created object",
- "schema": {
- "$ref": "#/definitions/object.ObjectResponse"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "423": {
- "description": "Rate limit exceeded",
- "schema": {
- "$ref": "#/definitions/util.RateLimitError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/objects/{object_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "Get object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Object ID",
- "name": "object_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The requested object",
- "schema": {
- "$ref": "#/definitions/object.ObjectResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "delete": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "objects"
- ],
- "summary": "Delete object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Object ID",
- "name": "object_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The deleted object",
- "schema": {
- "$ref": "#/definitions/object.ObjectResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "403": {
- "description": "Forbidden",
- "schema": {
- "$ref": "#/definitions/util.ForbiddenError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "423": {
- "description": "Rate limit exceeded",
- "schema": {
- "$ref": "#/definitions/util.RateLimitError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/objects/{object_id}/export/{format}": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "export"
- ],
- "summary": "Export object",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Object ID",
- "name": "object_id",
- "in": "path",
- "required": true
- },
- {
- "enum": [
- "markdown",
- "protobuf"
- ],
- "type": "string",
- "description": "Export format",
- "name": "format",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "Object exported successfully",
- "schema": {
- "$ref": "#/definitions/export.ObjectExportResponse"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/search": {
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "search"
- ],
- "summary": "Search objects within a space",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- },
- {
- "description": "Search parameters",
- "name": "request",
- "in": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/search.SearchRequest"
- }
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "List types",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of types",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Type"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types/{type_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "Get type",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Type ID",
- "name": "type_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The requested type",
- "schema": {
- "$ref": "#/definitions/object.TypeResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types/{type_id}/templates": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "List templates",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Type ID",
- "name": "type_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "maximum": 1000,
- "type": "integer",
- "default": 100,
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of templates",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Template"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/spaces/{space_id}/types/{type_id}/templates/{template_id}": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "types"
- ],
- "summary": "Get template",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Type ID",
- "name": "type_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "Template ID",
- "name": "template_id",
- "in": "path",
- "required": true
- }
- ],
- "responses": {
- "200": {
- "description": "The requested template",
- "schema": {
- "$ref": "#/definitions/object.TemplateResponse"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Resource not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- },
- "/v1/spaces/{space_id}/lists/{list_id}/objects": {
- "get": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Get objects in list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "type": "integer",
- "default": 0,
- "description": "The number of items to skip before starting to collect the result set",
- "name": "offset",
- "in": "query"
- },
- {
- "type": "integer",
- "description": "The number of items to return",
- "name": "limit",
- "in": "query"
- }
- ],
- "responses": {
- "200": {
- "description": "List of objects",
- "schema": {
- "$ref": "#/definitions/pagination.PaginatedResponse-object_Object"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "post": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Add objects to list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "description": "List of object IDs",
- "name": "objects",
- "in": "body",
- "required": true,
- "schema": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Objects added successfully",
- "schema": {
- "type": "string"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- },
- "delete": {
- "consumes": [
- "application/json"
- ],
- "produces": [
- "application/json"
- ],
- "tags": [
- "lists"
- ],
- "summary": "Remove objects from list",
- "parameters": [
- {
- "type": "string",
- "description": "Space ID",
- "name": "space_id",
- "in": "path",
- "required": true
- },
- {
- "type": "string",
- "description": "List ID",
- "name": "list_id",
- "in": "path",
- "required": true
- },
- {
- "description": "List of object IDs",
- "name": "objects",
- "in": "body",
- "required": true,
- "schema": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- }
- ],
- "responses": {
- "200": {
- "description": "Objects removed successfully",
- "schema": {
- "type": "string"
- }
- },
- "400": {
- "description": "Bad request",
- "schema": {
- "$ref": "#/definitions/util.ValidationError"
- }
- },
- "401": {
- "description": "Unauthorized",
- "schema": {
- "$ref": "#/definitions/util.UnauthorizedError"
- }
- },
- "404": {
- "description": "Not found",
- "schema": {
- "$ref": "#/definitions/util.NotFoundError"
- }
- },
- "500": {
- "description": "Internal server error",
- "schema": {
- "$ref": "#/definitions/util.ServerError"
- }
- }
- }
- }
- }
- },
- "definitions": {
- "auth.DisplayCodeResponse": {
- "type": "object",
- "properties": {
- "challenge_id": {
- "description": "The challenge id associated with the displayed code and needed to solve the challenge for token",
- "type": "string",
- "example": "67647f5ecda913e9a2e11b26"
- }
- }
- },
- "auth.TokenResponse": {
- "type": "object",
- "properties": {
- "app_key": {
- "description": "The permanent app key",
- "type": "string",
- "example": "zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6="
- },
- "session_token": {
- "description": "The ephemeral session token",
- "type": "string",
- "example": "eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII"
- }
- }
- },
- "export.ObjectExportResponse": {
- "type": "object",
- "properties": {
- "path": {
- "description": "The path the object was exported to",
- "type": "string",
- "example": "/path/to/export"
- }
- }
- },
- "object.Block": {
- "type": "object",
- "properties": {
- "align": {
- "description": "The alignment of the block",
- "type": "string",
- "enum": [
- "AlignLeft",
- "AlignCenter",
- "AlignRight",
- "AlignJustify"
- ],
- "example": "AlignLeft"
- },
- "background_color": {
- "description": "The background color of the block",
- "type": "string",
- "example": "red"
- },
- "children_ids": {
- "description": "The ids of the block's children",
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": [
- "['6797ce8ecda913cde14b02dc']"
- ]
- },
- "file": {
- "description": "The file of the block, if applicable",
- "allOf": [
- {
- "$ref": "#/definitions/object.File"
- }
- ]
- },
- "id": {
- "description": "The id of the block",
- "type": "string",
- "example": "64394517de52ad5acb89c66c"
- },
- "relation": {
- "description": "The relation of the block, if applicable",
- "allOf": [
- {
- "$ref": "#/definitions/object.Relation"
- }
- ]
- },
- "text": {
- "description": "The text of the block, if applicable",
- "allOf": [
- {
- "$ref": "#/definitions/object.Text"
- }
- ]
- },
- "vertical_align": {
- "description": "The vertical alignment of the block",
- "type": "string",
- "enum": [
- "VerticalAlignTop",
- "VerticalAlignMiddle",
- "VerticalAlignBottom"
- ],
- "example": "VerticalAlignTop"
- }
- }
- },
- "object.CreateObjectRequest": {
- "type": "object",
- "properties": {
- "body": {
- "description": "The body of the object",
- "type": "string",
- "example": "This is the body of the object. Markdown syntax is supported here."
- },
- "description": {
- "description": "The description of the object",
- "type": "string",
- "example": "This is a description of the object."
- },
- "icon": {
- "description": "The icon of the object",
- "type": "string",
- "example": "📄"
- },
- "name": {
- "description": "The name of the object",
- "type": "string",
- "example": "My object"
- },
- "object_type_unique_key": {
- "description": "The unique key of the object type",
- "type": "string",
- "example": "ot-page"
- },
- "source": {
- "description": "The source url, only applicable for bookmarks",
- "type": "string",
- "example": "https://bookmark-source.com"
- },
- "template_id": {
- "description": "The id of the template to use",
- "type": "string",
- "example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
- }
- }
- },
- "object.Detail": {
- "type": "object",
- "properties": {
- "details": {
- "description": "The details",
- "type": "object",
- "additionalProperties": true
- },
- "id": {
- "description": "The id of the detail",
- "type": "string",
- "enum": [
- "last_modified_date",
- "last_modified_by",
- "created_date",
- "created_by",
- "last_opened_date",
- "tags"
- ],
- "example": "last_modified_date"
- }
- }
- },
- "object.File": {
- "type": "object",
- "properties": {
- "added_at": {
- "description": "The added at of the file",
- "type": "integer"
- },
- "hash": {
- "description": "The hash of the file",
- "type": "string"
- },
- "mime": {
- "description": "The mime of the file",
- "type": "string"
- },
- "name": {
- "description": "The name of the file",
- "type": "string"
- },
- "size": {
- "description": "The size of the file",
- "type": "integer"
- },
- "state": {
- "description": "The state of the file",
- "type": "string"
- },
- "style": {
- "description": "The style of the file",
- "type": "string"
- },
- "target_object_id": {
- "description": "The target object id of the file",
- "type": "string"
- },
- "type": {
- "description": "The type of the file",
- "type": "string"
- }
- }
- },
- "object.Object": {
- "type": "object",
- "properties": {
- "blocks": {
- "description": "The blocks of the object",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Block"
- }
- },
- "details": {
- "description": "The details of the object",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Detail"
- }
- },
- "icon": {
- "description": "The icon of the object",
- "type": "string",
- "example": "📄"
- },
- "id": {
- "description": "The id of the object",
- "type": "string",
- "example": "bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"
- },
- "layout": {
- "description": "The layout of the object",
- "type": "string",
- "example": "basic"
- },
- "name": {
- "description": "The name of the object",
- "type": "string",
- "example": "My object"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "object"
- },
- "root_id": {
- "description": "The id of the object's root",
- "type": "string",
- "example": "bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"
- },
- "snippet": {
- "description": "The snippet of the object, especially important for notes as they don't have a name",
- "type": "string",
- "example": "The beginning of the object body..."
- },
- "space_id": {
- "description": "The id of the space the object is in",
- "type": "string",
- "example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
- },
- "type": {
- "description": "The type of the object",
- "allOf": [
- {
- "$ref": "#/definitions/object.Type"
- }
- ]
- }
- }
- },
- "object.ObjectResponse": {
- "type": "object",
- "properties": {
- "object": {
- "description": "The object",
- "allOf": [
- {
- "$ref": "#/definitions/object.Object"
- }
- ]
- }
- }
- },
- "object.Relation": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- }
- }
- },
- "object.Template": {
- "type": "object",
- "properties": {
- "icon": {
- "description": "The icon of the template",
- "type": "string",
- "example": "📄"
- },
- "id": {
- "description": "The id of the template",
- "type": "string",
- "example": "bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"
- },
- "name": {
- "description": "The name of the template",
- "type": "string",
- "example": "My template"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "template"
- }
- }
- },
- "object.TemplateResponse": {
- "type": "object",
- "properties": {
- "template": {
- "description": "The template",
- "allOf": [
- {
- "$ref": "#/definitions/object.Template"
- }
- ]
- }
- }
- },
- "object.Text": {
- "type": "object",
- "properties": {
- "checked": {
- "description": "Whether the text is checked",
- "type": "boolean",
- "example": true
- },
- "color": {
- "description": "The color of the text",
- "type": "string",
- "example": "red"
- },
- "icon": {
- "description": "The icon of the text",
- "type": "string",
- "example": "📄"
- },
- "style": {
- "description": "The style of the text",
- "type": "string",
- "enum": [
- "Paragraph",
- "Header1",
- "Header2",
- "Header3",
- "Header4",
- "Quote",
- "Code",
- "Title",
- "Checkbox",
- "Marked",
- "Numbered",
- "Toggle",
- "Description",
- "Callout"
- ],
- "example": "Paragraph"
- },
- "text": {
- "description": "The text",
- "type": "string",
- "example": "Some text..."
- }
- }
- },
- "object.Type": {
- "type": "object",
- "properties": {
- "icon": {
- "description": "The icon of the type",
- "type": "string",
- "example": "📄"
- },
- "id": {
- "description": "The id of the type",
- "type": "string",
- "example": "bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"
- },
- "name": {
- "description": "The name of the type",
- "type": "string",
- "example": "Page"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "type"
- },
- "recommended_layout": {
- "description": "The recommended layout of the type",
- "type": "string",
- "example": "todo"
- },
- "unique_key": {
- "description": "The unique key of the type",
- "type": "string",
- "example": "ot-page"
- }
- }
- },
- "object.TypeResponse": {
- "type": "object",
- "properties": {
- "type": {
- "description": "The type",
- "allOf": [
- {
- "$ref": "#/definitions/object.Type"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-object_Object": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Object"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-object_Template": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Template"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-object_Type": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/object.Type"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-space_Member": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/space.Member"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginatedResponse-space_Space": {
- "type": "object",
- "properties": {
- "data": {
- "description": "The list of items in the current result set",
- "type": "array",
- "items": {
- "$ref": "#/definitions/space.Space"
- }
- },
- "pagination": {
- "description": "The pagination metadata for the response",
- "allOf": [
- {
- "$ref": "#/definitions/pagination.PaginationMeta"
- }
- ]
- }
- }
- },
- "pagination.PaginationMeta": {
- "type": "object",
- "properties": {
- "has_more": {
- "description": "Indicates if there are more items available beyond the current result set",
- "type": "boolean",
- "example": true
- },
- "limit": {
- "description": "The maximum number of items returned in the result set",
- "type": "integer",
- "example": 100
- },
- "offset": {
- "description": "The number of items skipped before starting to collect the result set",
- "type": "integer",
- "example": 0
- },
- "total": {
- "description": "The total number of items available for the endpoint",
- "type": "integer",
- "example": 1024
- }
- }
- },
- "search.SearchRequest": {
- "type": "object",
- "properties": {
- "query": {
- "description": "The search term to look for in object names and snippets",
- "type": "string",
- "example": "test"
- },
- "sort": {
- "description": "The sorting criteria and direction for the search results",
- "allOf": [
- {
- "$ref": "#/definitions/search.SortOptions"
- }
- ]
- },
- "types": {
- "description": "The types of objects to search for, specified by unique key or ID",
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": [
- "ot-note",
- "ot-page",
- "ot-678043f0cda9133be777049f",
- "bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"
- ]
- }
- }
- },
- "search.SortOptions": {
- "type": "object",
- "properties": {
- "direction": {
- "description": "The direction to sort the search results",
- "type": "string",
- "default": "desc",
- "enum": [
- "asc",
- "desc"
- ]
- },
- "timestamp": {
- "description": "The timestamp to sort the search results by",
- "type": "string",
- "default": "last_modified_date",
- "enum": [
- "created_date",
- "last_modified_date",
- "last_opened_date"
- ]
- }
- }
- },
- "space.CreateSpaceRequest": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the space",
- "type": "string",
- "example": "New Space"
- }
- }
- },
- "space.Member": {
- "type": "object",
- "properties": {
- "global_name": {
- "description": "The global name of the member in the network",
- "type": "string",
- "example": "john.any"
- },
- "icon": {
- "description": "The icon of the member",
- "type": "string",
- "example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"
- },
- "id": {
- "description": "The profile object id of the member",
- "type": "string",
- "example": "_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"
- },
- "identity": {
- "description": "The identity of the member in the network",
- "type": "string",
- "example": "AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"
- },
- "name": {
- "description": "The name of the member",
- "type": "string",
- "example": "John Doe"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "member"
- },
- "role": {
- "description": "The role of the member",
- "type": "string",
- "enum": [
- "Reader",
- "Writer",
- "Owner",
- "NoPermission"
- ],
- "example": "Owner"
- }
- }
- },
- "space.MemberResponse": {
- "type": "object",
- "properties": {
- "member": {
- "description": "The member",
- "allOf": [
- {
- "$ref": "#/definitions/space.Member"
- }
- ]
- }
- }
- },
- "space.Space": {
- "type": "object",
- "properties": {
- "account_space_id": {
- "description": "The id of the account space",
- "type": "string",
- "example": "bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"
- },
- "analytics_id": {
- "description": "The analytics id of the account",
- "type": "string",
- "example": "624aecdd-4797-4611-9d61-a2ae5f53cf1c"
- },
- "archive_object_id": {
- "description": "The id of the archive object",
- "type": "string",
- "example": "bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"
- },
- "device_id": {
- "description": "The id of the device",
- "type": "string",
- "example": "12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"
- },
- "gateway_url": {
- "description": "The gateway url to serve files and media",
- "type": "string",
- "example": "http://127.0.0.1:31006"
- },
- "home_object_id": {
- "description": "The id of the home object",
- "type": "string",
- "example": "bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"
- },
- "icon": {
- "description": "The icon of the space",
- "type": "string",
- "example": "http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"
- },
- "id": {
- "description": "The id of the space",
- "type": "string",
- "example": "bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"
- },
- "local_storage_path": {
- "description": "The local storage path of the account",
- "type": "string",
- "example": "/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"
- },
- "marketplace_workspace_id": {
- "description": "The id of the marketplace workspace",
- "type": "string",
- "example": "_anytype_marketplace"
- },
- "name": {
- "description": "The name of the space",
- "type": "string",
- "example": "My Space"
- },
- "network_id": {
- "description": "The network id of the space",
- "type": "string",
- "example": "N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"
- },
- "object": {
- "description": "The data model of the object",
- "type": "string",
- "example": "space"
- },
- "profile_object_id": {
- "description": "The id of the profile object",
- "type": "string",
- "example": "bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"
- },
- "space_view_id": {
- "description": "The id of the space view",
- "type": "string",
- "example": "bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"
- },
- "tech_space_id": {
- "description": "The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself",
- "type": "string",
- "example": "bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"
- },
- "timezone": {
- "description": "The timezone of the account",
- "type": "string",
- "example": ""
- },
- "widgets_id": {
- "description": "The id of the widgets",
- "type": "string",
- "example": "bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"
- },
- "workspace_object_id": {
- "description": "The id of the workspace object",
- "type": "string",
- "example": "bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"
- }
- }
- },
- "space.SpaceResponse": {
- "type": "object",
- "properties": {
- "space": {
- "description": "The space",
- "allOf": [
- {
- "$ref": "#/definitions/space.Space"
- }
- ]
- }
- }
- },
- "util.ForbiddenError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Forbidden"
- }
- }
- }
- }
- },
- "util.NotFoundError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Resource not found"
- }
- }
- }
- }
- },
- "util.RateLimitError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Rate limit exceeded"
- }
- }
- }
- }
- },
- "util.ServerError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Internal server error"
- }
- }
- }
- }
- },
- "util.UnauthorizedError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Unauthorized"
- }
- }
- }
- }
- },
- "util.ValidationError": {
- "type": "object",
- "properties": {
- "error": {
- "type": "object",
- "properties": {
- "message": {
- "type": "string",
- "example": "Bad request"
- }
- }
- }
- }
- }
- },
- "securityDefinitions": {
- "ApiKeyAuth": {
- "type": "apiKey",
- "name": "Authorization",
- "in": "header"
- }
- }
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"description":"The icon of the template","example":"📄","type":"string"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"description":"The icon of the type","example":"📄","type":"string"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"description":"The icon of the member","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100","type":"string"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"description":"The icon of the space","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
+ "externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
+ "paths": {"/auth/display_code":{"post":{"parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "openapi": "3.1.0",
+ "servers": [
+ {"url":"localhost:31009/v1"}
+ ]
}
\ No newline at end of file
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index c4dfe63d1..deb31aec2 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1,630 +1,626 @@
-basePath: /v1
-definitions:
- auth.DisplayCodeResponse:
- properties:
- challenge_id:
- description: The challenge id associated with the displayed code and needed
- to solve the challenge for token
- example: 67647f5ecda913e9a2e11b26
- type: string
- type: object
- auth.TokenResponse:
- properties:
- app_key:
- description: The permanent app key
- example: zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=
- type: string
- session_token:
- description: The ephemeral session token
- example: eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII
- type: string
- type: object
- export.ObjectExportResponse:
- properties:
- path:
- description: The path the object was exported to
- example: /path/to/export
- type: string
- type: object
- object.Block:
- properties:
- align:
- description: The alignment of the block
- enum:
- - AlignLeft
- - AlignCenter
- - AlignRight
- - AlignJustify
- example: AlignLeft
- type: string
- background_color:
- description: The background color of the block
- example: red
- type: string
- children_ids:
- description: The ids of the block's children
- example:
- - '[''6797ce8ecda913cde14b02dc'']'
- items:
+components:
+ schemas:
+ auth.DisplayCodeResponse:
+ properties:
+ challenge_id:
+ description: The challenge id associated with the displayed code and needed
+ to solve the challenge for token
+ example: 67647f5ecda913e9a2e11b26
type: string
- type: array
- file:
- allOf:
- - $ref: '#/definitions/object.File'
- description: The file of the block, if applicable
- id:
- description: The id of the block
- example: 64394517de52ad5acb89c66c
- type: string
- relation:
- allOf:
- - $ref: '#/definitions/object.Relation'
- description: The relation of the block, if applicable
- text:
- allOf:
- - $ref: '#/definitions/object.Text'
- description: The text of the block, if applicable
- vertical_align:
- description: The vertical alignment of the block
- enum:
- - VerticalAlignTop
- - VerticalAlignMiddle
- - VerticalAlignBottom
- example: VerticalAlignTop
- type: string
- type: object
- object.CreateObjectRequest:
- properties:
- body:
- description: The body of the object
- example: This is the body of the object. Markdown syntax is supported here.
- type: string
- description:
- description: The description of the object
- example: This is a description of the object.
- type: string
- icon:
- description: The icon of the object
- example: "\U0001F4C4"
- type: string
- name:
- description: The name of the object
- example: My object
- type: string
- object_type_unique_key:
- description: The unique key of the object type
- example: ot-page
- type: string
- source:
- description: The source url, only applicable for bookmarks
- example: https://bookmark-source.com
- type: string
- template_id:
- description: The id of the template to use
- example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
- type: string
- type: object
- object.Detail:
- properties:
- details:
- additionalProperties: true
- description: The details
- type: object
- id:
- description: The id of the detail
- enum:
- - last_modified_date
- - last_modified_by
- - created_date
- - created_by
- - last_opened_date
- - tags
- example: last_modified_date
- type: string
- type: object
- object.File:
- properties:
- added_at:
- description: The added at of the file
- type: integer
- hash:
- description: The hash of the file
- type: string
- mime:
- description: The mime of the file
- type: string
- name:
- description: The name of the file
- type: string
- size:
- description: The size of the file
- type: integer
- state:
- description: The state of the file
- type: string
- style:
- description: The style of the file
- type: string
- target_object_id:
- description: The target object id of the file
- type: string
- type:
- description: The type of the file
- type: string
- type: object
- object.Object:
- properties:
- blocks:
- description: The blocks of the object
- items:
- $ref: '#/definitions/object.Block'
- type: array
- details:
- description: The details of the object
- items:
- $ref: '#/definitions/object.Detail'
- type: array
- icon:
- description: The icon of the object
- example: "\U0001F4C4"
- type: string
- id:
- description: The id of the object
- example: bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ
- type: string
- layout:
- description: The layout of the object
- example: basic
- type: string
- name:
- description: The name of the object
- example: My object
- type: string
- object:
- description: The data model of the object
- example: object
- type: string
- root_id:
- description: The id of the object's root
- example: bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u
- type: string
- snippet:
- description: The snippet of the object, especially important for notes as
- they don't have a name
- example: The beginning of the object body...
- type: string
- space_id:
- description: The id of the space the object is in
- example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
- type: string
- type:
- allOf:
- - $ref: '#/definitions/object.Type'
- description: The type of the object
- type: object
- object.ObjectResponse:
- properties:
- object:
- allOf:
- - $ref: '#/definitions/object.Object'
- description: The object
- type: object
- object.Relation:
- properties:
- id:
- type: string
- type: object
- object.Template:
- properties:
- icon:
- description: The icon of the template
- example: "\U0001F4C4"
- type: string
- id:
- description: The id of the template
- example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
- type: string
- name:
- description: The name of the template
- example: My template
- type: string
- object:
- description: The data model of the object
- example: template
- type: string
- type: object
- object.TemplateResponse:
- properties:
- template:
- allOf:
- - $ref: '#/definitions/object.Template'
- description: The template
- type: object
- object.Text:
- properties:
- checked:
- description: Whether the text is checked
- example: true
- type: boolean
- color:
- description: The color of the text
- example: red
- type: string
- icon:
- description: The icon of the text
- example: "\U0001F4C4"
- type: string
- style:
- description: The style of the text
- enum:
- - Paragraph
- - Header1
- - Header2
- - Header3
- - Header4
- - Quote
- - Code
- - Title
- - Checkbox
- - Marked
- - Numbered
- - Toggle
- - Description
- - Callout
- example: Paragraph
- type: string
- text:
- description: The text
- example: Some text...
- type: string
- type: object
- object.Type:
- properties:
- icon:
- description: The icon of the type
- example: "\U0001F4C4"
- type: string
- id:
- description: The id of the type
- example: bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu
- type: string
- name:
- description: The name of the type
- example: Page
- type: string
- object:
- description: The data model of the object
- example: type
- type: string
- recommended_layout:
- description: The recommended layout of the type
- example: todo
- type: string
- unique_key:
- description: The unique key of the type
- example: ot-page
- type: string
- type: object
- object.TypeResponse:
- properties:
- type:
- allOf:
- - $ref: '#/definitions/object.Type'
- description: The type
- type: object
- pagination.PaginatedResponse-object_Object:
- properties:
- data:
- description: The list of items in the current result set
- items:
- $ref: '#/definitions/object.Object'
- type: array
- pagination:
- allOf:
- - $ref: '#/definitions/pagination.PaginationMeta'
- description: The pagination metadata for the response
- type: object
- pagination.PaginatedResponse-object_Template:
- properties:
- data:
- description: The list of items in the current result set
- items:
- $ref: '#/definitions/object.Template'
- type: array
- pagination:
- allOf:
- - $ref: '#/definitions/pagination.PaginationMeta'
- description: The pagination metadata for the response
- type: object
- pagination.PaginatedResponse-object_Type:
- properties:
- data:
- description: The list of items in the current result set
- items:
- $ref: '#/definitions/object.Type'
- type: array
- pagination:
- allOf:
- - $ref: '#/definitions/pagination.PaginationMeta'
- description: The pagination metadata for the response
- type: object
- pagination.PaginatedResponse-space_Member:
- properties:
- data:
- description: The list of items in the current result set
- items:
- $ref: '#/definitions/space.Member'
- type: array
- pagination:
- allOf:
- - $ref: '#/definitions/pagination.PaginationMeta'
- description: The pagination metadata for the response
- type: object
- pagination.PaginatedResponse-space_Space:
- properties:
- data:
- description: The list of items in the current result set
- items:
- $ref: '#/definitions/space.Space'
- type: array
- pagination:
- allOf:
- - $ref: '#/definitions/pagination.PaginationMeta'
- description: The pagination metadata for the response
- type: object
- pagination.PaginationMeta:
- properties:
- has_more:
- description: Indicates if there are more items available beyond the current
- result set
- example: true
- type: boolean
- limit:
- description: The maximum number of items returned in the result set
- example: 100
- type: integer
- offset:
- description: The number of items skipped before starting to collect the result
- set
- example: 0
- type: integer
- total:
- description: The total number of items available for the endpoint
- example: 1024
- type: integer
- type: object
- search.SearchRequest:
- properties:
- query:
- description: The search term to look for in object names and snippets
- example: test
- type: string
- sort:
- allOf:
- - $ref: '#/definitions/search.SortOptions'
- description: The sorting criteria and direction for the search results
- types:
- description: The types of objects to search for, specified by unique key or
- ID
- example:
- - ot-note
- - ot-page
- - ot-678043f0cda9133be777049f
- - bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q
- items:
+ type: object
+ auth.TokenResponse:
+ properties:
+ app_key:
+ description: The permanent app key
+ example: zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=
type: string
- type: array
- type: object
- search.SortOptions:
- properties:
- direction:
- default: desc
- description: The direction to sort the search results
- enum:
- - asc
- - desc
- type: string
- timestamp:
- default: last_modified_date
- description: The timestamp to sort the search results by
- enum:
- - created_date
- - last_modified_date
- - last_opened_date
- type: string
- type: object
- space.CreateSpaceRequest:
- properties:
- name:
- description: The name of the space
- example: New Space
- type: string
- type: object
- space.Member:
- properties:
- global_name:
- description: The global name of the member in the network
- example: john.any
- type: string
- icon:
- description: The icon of the member
- example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100
- type: string
- id:
- description: The profile object id of the member
- example: _participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ
- type: string
- identity:
- description: The identity of the member in the network
- example: AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ
- type: string
- name:
- description: The name of the member
- example: John Doe
- type: string
- object:
- description: The data model of the object
- example: member
- type: string
- role:
- description: The role of the member
- enum:
- - Reader
- - Writer
- - Owner
- - NoPermission
- example: Owner
- type: string
- type: object
- space.MemberResponse:
- properties:
- member:
- allOf:
- - $ref: '#/definitions/space.Member'
- description: The member
- type: object
- space.Space:
- properties:
- account_space_id:
- description: The id of the account space
- example: bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1
- type: string
- analytics_id:
- description: The analytics id of the account
- example: 624aecdd-4797-4611-9d61-a2ae5f53cf1c
- type: string
- archive_object_id:
- description: The id of the archive object
- example: bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri
- type: string
- device_id:
- description: The id of the device
- example: 12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF
- type: string
- gateway_url:
- description: The gateway url to serve files and media
- example: http://127.0.0.1:31006
- type: string
- home_object_id:
- description: The id of the home object
- example: bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya
- type: string
- icon:
- description: The icon of the space
- example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
- type: string
- id:
- description: The id of the space
- example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
- type: string
- local_storage_path:
- description: The local storage path of the account
- example: /Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha
- type: string
- marketplace_workspace_id:
- description: The id of the marketplace workspace
- example: _anytype_marketplace
- type: string
- name:
- description: The name of the space
- example: My Space
- type: string
- network_id:
- description: The network id of the space
- example: N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU
- type: string
- object:
- description: The data model of the object
- example: space
- type: string
- profile_object_id:
- description: The id of the profile object
- example: bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4
- type: string
- space_view_id:
- description: The id of the space view
- example: bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy
- type: string
- tech_space_id:
- description: The id of tech space, where objects outside of user's actual
- spaces are stored, e.g. spaces itself
- example: bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1
- type: string
- timezone:
- description: The timezone of the account
- example: ""
- type: string
- widgets_id:
- description: The id of the widgets
- example: bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva
- type: string
- workspace_object_id:
- description: The id of the workspace object
- example: bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y
- type: string
- type: object
- space.SpaceResponse:
- properties:
- space:
- allOf:
- - $ref: '#/definitions/space.Space'
- description: The space
- type: object
- util.ForbiddenError:
- properties:
- error:
- properties:
- message:
- example: Forbidden
+ session_token:
+ description: The ephemeral session token
+ example: eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII
+ type: string
+ type: object
+ export.ObjectExportResponse:
+ properties:
+ path:
+ description: The path the object was exported to
+ example: /path/to/export
+ type: string
+ type: object
+ object.Block:
+ properties:
+ align:
+ description: The alignment of the block
+ enum:
+ - AlignLeft
+ - AlignCenter
+ - AlignRight
+ - AlignJustify
+ example: AlignLeft
+ type: string
+ background_color:
+ description: The background color of the block
+ example: red
+ type: string
+ children_ids:
+ description: The ids of the block's children
+ example:
+ - '[''6797ce8ecda913cde14b02dc'']'
+ items:
type: string
- type: object
- type: object
- util.NotFoundError:
- properties:
- error:
- properties:
- message:
- example: Resource not found
+ type: array
+ uniqueItems: false
+ file:
+ $ref: '#/components/schemas/object.File'
+ id:
+ description: The id of the block
+ example: 64394517de52ad5acb89c66c
+ type: string
+ relation:
+ $ref: '#/components/schemas/object.Relation'
+ text:
+ $ref: '#/components/schemas/object.Text'
+ vertical_align:
+ description: The vertical alignment of the block
+ enum:
+ - VerticalAlignTop
+ - VerticalAlignMiddle
+ - VerticalAlignBottom
+ example: VerticalAlignTop
+ type: string
+ type: object
+ object.CreateObjectRequest:
+ properties:
+ body:
+ description: The body of the object
+ example: This is the body of the object. Markdown syntax is supported here.
+ type: string
+ description:
+ description: The description of the object
+ example: This is a description of the object.
+ type: string
+ icon:
+ description: The icon of the object
+ example: "\U0001F4C4"
+ type: string
+ name:
+ description: The name of the object
+ example: My object
+ type: string
+ object_type_unique_key:
+ description: The unique key of the object type
+ example: ot-page
+ type: string
+ source:
+ description: The source url, only applicable for bookmarks
+ example: https://bookmark-source.com
+ type: string
+ template_id:
+ description: The id of the template to use
+ example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
+ type: string
+ type: object
+ object.Detail:
+ properties:
+ details:
+ additionalProperties: {}
+ description: The details
+ type: object
+ id:
+ description: The id of the detail
+ enum:
+ - last_modified_date
+ - last_modified_by
+ - created_date
+ - created_by
+ - last_opened_date
+ - tags
+ example: last_modified_date
+ type: string
+ type: object
+ object.File:
+ description: The file of the block, if applicable
+ properties:
+ added_at:
+ description: The added at of the file
+ type: integer
+ hash:
+ description: The hash of the file
+ type: string
+ mime:
+ description: The mime of the file
+ type: string
+ name:
+ description: The name of the file
+ type: string
+ size:
+ description: The size of the file
+ type: integer
+ state:
+ description: The state of the file
+ type: string
+ style:
+ description: The style of the file
+ type: string
+ target_object_id:
+ description: The target object id of the file
+ type: string
+ type:
+ description: The type of the file
+ type: string
+ type: object
+ object.Object:
+ description: The object
+ properties:
+ blocks:
+ description: The blocks of the object
+ items:
+ $ref: '#/components/schemas/object.Block'
+ type: array
+ uniqueItems: false
+ details:
+ description: The details of the object
+ items:
+ $ref: '#/components/schemas/object.Detail'
+ type: array
+ uniqueItems: false
+ icon:
+ description: The icon of the object
+ example: "\U0001F4C4"
+ type: string
+ id:
+ description: The id of the object
+ example: bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ
+ type: string
+ layout:
+ description: The layout of the object
+ example: basic
+ type: string
+ name:
+ description: The name of the object
+ example: My object
+ type: string
+ object:
+ description: The data model of the object
+ example: object
+ type: string
+ root_id:
+ description: The id of the object's root
+ example: bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u
+ type: string
+ snippet:
+ description: The snippet of the object, especially important for notes as
+ they don't have a name
+ example: The beginning of the object body...
+ type: string
+ space_id:
+ description: The id of the space the object is in
+ example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
+ type: string
+ type:
+ $ref: '#/components/schemas/object.Type'
+ type: object
+ object.ObjectResponse:
+ properties:
+ object:
+ $ref: '#/components/schemas/object.Object'
+ type: object
+ object.Relation:
+ description: The relation of the block, if applicable
+ properties:
+ id:
+ type: string
+ type: object
+ object.Template:
+ description: The template
+ properties:
+ icon:
+ description: The icon of the template
+ example: "\U0001F4C4"
+ type: string
+ id:
+ description: The id of the template
+ example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
+ type: string
+ name:
+ description: The name of the template
+ example: My template
+ type: string
+ object:
+ description: The data model of the object
+ example: template
+ type: string
+ type: object
+ object.TemplateResponse:
+ properties:
+ template:
+ $ref: '#/components/schemas/object.Template'
+ type: object
+ object.Text:
+ description: The text of the block, if applicable
+ properties:
+ checked:
+ description: Whether the text is checked
+ example: true
+ type: boolean
+ color:
+ description: The color of the text
+ example: red
+ type: string
+ icon:
+ description: The icon of the text
+ example: "\U0001F4C4"
+ type: string
+ style:
+ description: The style of the text
+ enum:
+ - Paragraph
+ - Header1
+ - Header2
+ - Header3
+ - Header4
+ - Quote
+ - Code
+ - Title
+ - Checkbox
+ - Marked
+ - Numbered
+ - Toggle
+ - Description
+ - Callout
+ example: Paragraph
+ type: string
+ text:
+ description: The text
+ example: Some text...
+ type: string
+ type: object
+ object.Type:
+ description: The type of the object
+ properties:
+ icon:
+ description: The icon of the type
+ example: "\U0001F4C4"
+ type: string
+ id:
+ description: The id of the type
+ example: bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu
+ type: string
+ name:
+ description: The name of the type
+ example: Page
+ type: string
+ object:
+ description: The data model of the object
+ example: type
+ type: string
+ recommended_layout:
+ description: The recommended layout of the type
+ example: todo
+ type: string
+ unique_key:
+ description: The unique key of the type
+ example: ot-page
+ type: string
+ type: object
+ object.TypeResponse:
+ properties:
+ type:
+ $ref: '#/components/schemas/object.Type'
+ type: object
+ pagination.PaginatedResponse-object_Object:
+ properties:
+ data:
+ description: The list of items in the current result set
+ items:
+ $ref: '#/components/schemas/object.Object'
+ type: array
+ uniqueItems: false
+ pagination:
+ $ref: '#/components/schemas/pagination.PaginationMeta'
+ type: object
+ pagination.PaginatedResponse-object_Template:
+ properties:
+ data:
+ description: The list of items in the current result set
+ items:
+ $ref: '#/components/schemas/object.Template'
+ type: array
+ uniqueItems: false
+ pagination:
+ $ref: '#/components/schemas/pagination.PaginationMeta'
+ type: object
+ pagination.PaginatedResponse-object_Type:
+ properties:
+ data:
+ description: The list of items in the current result set
+ items:
+ $ref: '#/components/schemas/object.Type'
+ type: array
+ uniqueItems: false
+ pagination:
+ $ref: '#/components/schemas/pagination.PaginationMeta'
+ type: object
+ pagination.PaginatedResponse-space_Member:
+ properties:
+ data:
+ description: The list of items in the current result set
+ items:
+ $ref: '#/components/schemas/space.Member'
+ type: array
+ uniqueItems: false
+ pagination:
+ $ref: '#/components/schemas/pagination.PaginationMeta'
+ type: object
+ pagination.PaginatedResponse-space_Space:
+ properties:
+ data:
+ description: The list of items in the current result set
+ items:
+ $ref: '#/components/schemas/space.Space'
+ type: array
+ uniqueItems: false
+ pagination:
+ $ref: '#/components/schemas/pagination.PaginationMeta'
+ type: object
+ pagination.PaginationMeta:
+ description: The pagination metadata for the response
+ properties:
+ has_more:
+ description: Indicates if there are more items available beyond the current
+ result set
+ example: true
+ type: boolean
+ limit:
+ description: The maximum number of items returned in the result set
+ example: 100
+ type: integer
+ offset:
+ description: The number of items skipped before starting to collect the
+ result set
+ example: 0
+ type: integer
+ total:
+ description: The total number of items available for the endpoint
+ example: 1024
+ type: integer
+ type: object
+ search.SearchRequest:
+ properties:
+ query:
+ description: The search term to look for in object names and snippets
+ example: test
+ type: string
+ sort:
+ $ref: '#/components/schemas/search.SortOptions'
+ types:
+ description: The types of objects to search for, specified by unique key
+ or ID
+ example:
+ - ot-note
+ - ot-page
+ - ot-678043f0cda9133be777049f
+ - bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q
+ items:
type: string
- type: object
- type: object
- util.RateLimitError:
- properties:
- error:
- properties:
- message:
- example: Rate limit exceeded
- type: string
- type: object
- type: object
- util.ServerError:
- properties:
- error:
- properties:
- message:
- example: Internal server error
- type: string
- type: object
- type: object
- util.UnauthorizedError:
- properties:
- error:
- properties:
- message:
- example: Unauthorized
- type: string
- type: object
- type: object
- util.ValidationError:
- properties:
- error:
- properties:
- message:
- example: Bad request
- type: string
- type: object
- type: object
-host: localhost:31009
+ type: array
+ uniqueItems: false
+ type: object
+ search.SortOptions:
+ description: The sorting criteria and direction for the search results
+ properties:
+ direction:
+ default: desc
+ description: The direction to sort the search results
+ enum:
+ - asc
+ - desc
+ type: string
+ timestamp:
+ default: last_modified_date
+ description: The timestamp to sort the search results by
+ enum:
+ - created_date
+ - last_modified_date
+ - last_opened_date
+ type: string
+ type: object
+ space.CreateSpaceRequest:
+ properties:
+ name:
+ description: The name of the space
+ example: New Space
+ type: string
+ type: object
+ space.Member:
+ description: The member
+ properties:
+ global_name:
+ description: The global name of the member in the network
+ example: john.any
+ type: string
+ icon:
+ description: The icon of the member
+ example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100
+ type: string
+ id:
+ description: The profile object id of the member
+ example: _participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ
+ type: string
+ identity:
+ description: The identity of the member in the network
+ example: AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ
+ type: string
+ name:
+ description: The name of the member
+ example: John Doe
+ type: string
+ object:
+ description: The data model of the object
+ example: member
+ type: string
+ role:
+ description: The role of the member
+ enum:
+ - Reader
+ - Writer
+ - Owner
+ - NoPermission
+ example: Owner
+ type: string
+ type: object
+ space.MemberResponse:
+ properties:
+ member:
+ $ref: '#/components/schemas/space.Member'
+ type: object
+ space.Space:
+ description: The space
+ properties:
+ account_space_id:
+ description: The id of the account space
+ example: bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1
+ type: string
+ analytics_id:
+ description: The analytics id of the account
+ example: 624aecdd-4797-4611-9d61-a2ae5f53cf1c
+ type: string
+ archive_object_id:
+ description: The id of the archive object
+ example: bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri
+ type: string
+ device_id:
+ description: The id of the device
+ example: 12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF
+ type: string
+ gateway_url:
+ description: The gateway url to serve files and media
+ example: http://127.0.0.1:31006
+ type: string
+ home_object_id:
+ description: The id of the home object
+ example: bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya
+ type: string
+ icon:
+ description: The icon of the space
+ example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
+ type: string
+ id:
+ description: The id of the space
+ example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
+ type: string
+ local_storage_path:
+ description: The local storage path of the account
+ example: /Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha
+ type: string
+ marketplace_workspace_id:
+ description: The id of the marketplace workspace
+ example: _anytype_marketplace
+ type: string
+ name:
+ description: The name of the space
+ example: My Space
+ type: string
+ network_id:
+ description: The network id of the space
+ example: N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU
+ type: string
+ object:
+ description: The data model of the object
+ example: space
+ type: string
+ profile_object_id:
+ description: The id of the profile object
+ example: bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4
+ type: string
+ space_view_id:
+ description: The id of the space view
+ example: bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy
+ type: string
+ tech_space_id:
+ description: The id of tech space, where objects outside of user's actual
+ spaces are stored, e.g. spaces itself
+ example: bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1
+ type: string
+ timezone:
+ description: The timezone of the account
+ example: ""
+ type: string
+ widgets_id:
+ description: The id of the widgets
+ example: bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva
+ type: string
+ workspace_object_id:
+ description: The id of the workspace object
+ example: bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y
+ type: string
+ type: object
+ space.SpaceResponse:
+ properties:
+ space:
+ $ref: '#/components/schemas/space.Space'
+ type: object
+ util.ForbiddenError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Forbidden
+ type: string
+ type: object
+ type: object
+ util.NotFoundError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Resource not found
+ type: string
+ type: object
+ type: object
+ util.RateLimitError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Rate limit exceeded
+ type: string
+ type: object
+ type: object
+ util.ServerError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Internal server error
+ type: string
+ type: object
+ type: object
+ util.UnauthorizedError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Unauthorized
+ type: string
+ type: object
+ type: object
+ util.ValidationError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Bad request
+ type: string
+ type: object
+ type: object
+ securitySchemes:
+ bearerauth:
+ bearerFormat: JWT
+ scheme: bearer
+ type: http
+externalDocs:
+ description: OpenAPI
+ url: https://swagger.io/resources/open-api/
info:
contact:
email: support@anytype.io
@@ -638,852 +634,1030 @@ info:
termsOfService: https://anytype.io/terms_of_use
title: Anytype API
version: "1.0"
+openapi: 3.1.0
paths:
/auth/display_code:
post:
- consumes:
- - application/json
parameters:
- description: App name requesting the challenge
in: query
name: app_name
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/auth.DisplayCodeResponse'
description: Challenge ID
- schema:
- $ref: '#/definitions/auth.DisplayCodeResponse'
"400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
description: Invalid input
- schema:
- $ref: '#/definitions/util.ValidationError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
summary: Start new challenge
tags:
- auth
/auth/token:
post:
- consumes:
- - application/json
parameters:
- description: Challenge ID
in: query
name: challenge_id
required: true
- type: string
+ schema:
+ type: string
- description: 4-digit code retrieved from Anytype Desktop app
in: query
name: code
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/auth.TokenResponse'
description: Authentication token
- schema:
- $ref: '#/definitions/auth.TokenResponse'
"400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
description: Invalid input
- schema:
- $ref: '#/definitions/util.ValidationError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
summary: Retrieve token
tags:
- auth
/search:
post:
- consumes:
- - application/json
parameters:
- - default: 0
- description: The number of items to skip before starting to collect the result
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
- - default: 100
- description: The number of items to return
- in: query
- maximum: 1000
- name: limit
- type: integer
- - description: Search parameters
- in: body
- name: request
- required: true
schema:
- $ref: '#/definitions/search.SearchRequest'
- produces:
- - application/json
+ default: 0
+ type: integer
+ - description: The number of items to return
+ in: query
+ name: limit
+ schema:
+ default: 100
+ maximum: 1000
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/search.SearchRequest'
+ description: Search parameters
+ required: true
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-object_Object'
description: List of objects
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-object_Object'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Search objects across all spaces
tags:
- search
/spaces:
get:
- consumes:
- - application/json
parameters:
- - default: 0
- description: The number of items to skip before starting to collect the result
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
- - default: 100
- description: The number of items to return
+ schema:
+ default: 0
+ type: integer
+ - description: The number of items to return
in: query
- maximum: 1000
name: limit
- type: integer
- produces:
- - application/json
+ schema:
+ default: 100
+ maximum: 1000
+ type: integer
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-space_Space'
description: List of spaces
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-space_Space'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: List spaces
tags:
- spaces
post:
- consumes:
- - application/json
- parameters:
- - description: Space to create
- in: body
- name: name
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/space.CreateSpaceRequest'
+ description: Space to create
required: true
- schema:
- $ref: '#/definitions/space.CreateSpaceRequest'
- produces:
- - application/json
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/space.SpaceResponse'
description: Space created successfully
- schema:
- $ref: '#/definitions/space.SpaceResponse'
"400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
description: Bad request
- schema:
- $ref: '#/definitions/util.ValidationError'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"423":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.RateLimitError'
description: Rate limit exceeded
- schema:
- $ref: '#/definitions/util.RateLimitError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Create space
tags:
- spaces
/spaces/{space_id}:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/space.SpaceResponse'
description: Space
- schema:
- $ref: '#/definitions/space.SpaceResponse'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Space not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Get space
tags:
- spaces
/spaces/{space_id}/members:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
- - default: 0
- description: The number of items to skip before starting to collect the result
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
- - default: 100
- description: The number of items to return
+ schema:
+ default: 0
+ type: integer
+ - description: The number of items to return
in: query
- maximum: 1000
name: limit
- type: integer
- produces:
- - application/json
+ schema:
+ default: 100
+ maximum: 1000
+ type: integer
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-space_Member'
description: List of members
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-space_Member'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: List members
tags:
- spaces
/spaces/{space_id}/members/{member_id}:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: Member ID
in: path
name: member_id
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/space.MemberResponse'
description: Member
- schema:
- $ref: '#/definitions/space.MemberResponse'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Member not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Get member
tags:
- spaces
/spaces/{space_id}/objects:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
- - default: 0
- description: The number of items to skip before starting to collect the result
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
- - default: 100
- description: The number of items to return
+ schema:
+ default: 0
+ type: integer
+ - description: The number of items to return
in: query
- maximum: 1000
name: limit
- type: integer
- produces:
- - application/json
+ schema:
+ default: 100
+ maximum: 1000
+ type: integer
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-object_Object'
description: List of objects
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-object_Object'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: List objects
tags:
- objects
post:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
- - description: Object to create
- in: body
- name: object
- required: true
schema:
- $ref: '#/definitions/object.CreateObjectRequest'
- produces:
- - application/json
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/object.CreateObjectRequest'
+ description: Object to create
+ required: true
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/object.ObjectResponse'
description: The created object
- schema:
- $ref: '#/definitions/object.ObjectResponse'
"400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
description: Bad request
- schema:
- $ref: '#/definitions/util.ValidationError'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"423":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.RateLimitError'
description: Rate limit exceeded
- schema:
- $ref: '#/definitions/util.RateLimitError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Create object
tags:
- objects
/spaces/{space_id}/objects/{object_id}:
delete:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: Object ID
in: path
name: object_id
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/object.ObjectResponse'
description: The deleted object
- schema:
- $ref: '#/definitions/object.ObjectResponse'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"403":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ForbiddenError'
description: Forbidden
- schema:
- $ref: '#/definitions/util.ForbiddenError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Resource not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"423":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.RateLimitError'
description: Rate limit exceeded
- schema:
- $ref: '#/definitions/util.RateLimitError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Delete object
tags:
- objects
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: Object ID
in: path
name: object_id
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/object.ObjectResponse'
description: The requested object
- schema:
- $ref: '#/definitions/object.ObjectResponse'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Resource not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Get object
tags:
- objects
/spaces/{space_id}/objects/{object_id}/export/{format}:
post:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: Object ID
in: path
name: object_id
required: true
- type: string
+ schema:
+ type: string
- description: Export format
- enum:
- - markdown
- - protobuf
in: path
name: format
required: true
- type: string
- produces:
- - application/json
+ schema:
+ enum:
+ - markdown
+ - protobuf
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/export.ObjectExportResponse'
description: Object exported successfully
- schema:
- $ref: '#/definitions/export.ObjectExportResponse'
"400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
description: Bad request
- schema:
- $ref: '#/definitions/util.ValidationError'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Export object
tags:
- export
/spaces/{space_id}/search:
post:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
- - default: 0
- description: The number of items to skip before starting to collect the result
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
- - default: 100
- description: The number of items to return
- in: query
- maximum: 1000
- name: limit
- type: integer
- - description: Search parameters
- in: body
- name: request
- required: true
schema:
- $ref: '#/definitions/search.SearchRequest'
- produces:
- - application/json
+ default: 0
+ type: integer
+ - description: The number of items to return
+ in: query
+ name: limit
+ schema:
+ default: 100
+ maximum: 1000
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/search.SearchRequest'
+ description: Search parameters
+ required: true
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-object_Object'
description: List of objects
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-object_Object'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Search objects within a space
tags:
- search
/spaces/{space_id}/types:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
- - default: 0
- description: The number of items to skip before starting to collect the result
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
- - default: 100
- description: The number of items to return
+ schema:
+ default: 0
+ type: integer
+ - description: The number of items to return
in: query
- maximum: 1000
name: limit
- type: integer
- produces:
- - application/json
+ schema:
+ default: 100
+ maximum: 1000
+ type: integer
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-object_Type'
description: List of types
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-object_Type'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: List types
tags:
- types
/spaces/{space_id}/types/{type_id}:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: Type ID
in: path
name: type_id
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/object.TypeResponse'
description: The requested type
- schema:
- $ref: '#/definitions/object.TypeResponse'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Resource not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Get type
tags:
- types
/spaces/{space_id}/types/{type_id}/templates:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: Type ID
in: path
name: type_id
required: true
- type: string
- - default: 0
- description: The number of items to skip before starting to collect the result
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
- - default: 100
- description: The number of items to return
+ schema:
+ default: 0
+ type: integer
+ - description: The number of items to return
in: query
- maximum: 1000
name: limit
- type: integer
- produces:
- - application/json
+ schema:
+ default: 100
+ maximum: 1000
+ type: integer
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-object_Template'
description: List of templates
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-object_Template'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: List templates
tags:
- types
/spaces/{space_id}/types/{type_id}/templates/{template_id}:
get:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: Type ID
in: path
name: type_id
required: true
- type: string
+ schema:
+ type: string
- description: Template ID
in: path
name: template_id
required: true
- type: string
- produces:
- - application/json
+ schema:
+ type: string
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/object.TemplateResponse'
description: The requested template
- schema:
- $ref: '#/definitions/object.TemplateResponse'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Resource not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Get template
tags:
- types
/v1/spaces/{space_id}/lists/{list_id}/objects:
- delete:
- consumes:
- - application/json
+ get:
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
- - description: List ID
- in: path
- name: list_id
- required: true
- type: string
- - description: List of object IDs
- in: body
- name: objects
- required: true
schema:
- items:
- type: string
- type: array
- produces:
- - application/json
- responses:
- "200":
- description: Objects removed successfully
- schema:
- type: string
- "400":
- description: Bad request
- schema:
- $ref: '#/definitions/util.ValidationError'
- "401":
- description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
- "404":
- description: Not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
- "500":
- description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
- summary: Remove objects from list
- tags:
- - lists
- get:
- consumes:
- - application/json
- parameters:
- - description: Space ID
- in: path
- name: space_id
- required: true
- type: string
+ type: string
- description: List ID
in: path
name: list_id
required: true
- type: string
- - default: 0
- description: The number of items to skip before starting to collect the result
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
set
in: query
name: offset
- type: integer
+ schema:
+ default: 0
+ type: integer
- description: The number of items to return
in: query
name: limit
- type: integer
- produces:
- - application/json
+ schema:
+ type: integer
responses:
"200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-object_Object'
description: List of objects
- schema:
- $ref: '#/definitions/pagination.PaginatedResponse-object_Object'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Get objects in list
tags:
- lists
post:
- consumes:
- - application/json
parameters:
- description: Space ID
in: path
name: space_id
required: true
- type: string
+ schema:
+ type: string
- description: List ID
in: path
name: list_id
required: true
- type: string
- - description: List of object IDs
- in: body
- name: objects
- required: true
schema:
- items:
- type: string
- type: array
- produces:
- - application/json
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ items:
+ type: string
+ type: array
+ description: List of object IDs
+ required: true
responses:
"200":
+ content:
+ application/json:
+ schema:
+ type: string
description: Objects added successfully
- schema:
- type: string
"400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
description: Bad request
- schema:
- $ref: '#/definitions/util.ValidationError'
"401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
description: Unauthorized
- schema:
- $ref: '#/definitions/util.UnauthorizedError'
"404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
description: Not found
- schema:
- $ref: '#/definitions/util.NotFoundError'
"500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
description: Internal server error
- schema:
- $ref: '#/definitions/util.ServerError'
+ security:
+ - bearerauth: []
summary: Add objects to list
tags:
- lists
-securityDefinitions:
- ApiKeyAuth:
- in: header
- name: Authorization
- type: apiKey
-swagger: "2.0"
+ /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}:
+ delete:
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ schema:
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ schema:
+ type: string
+ - description: Object ID
+ in: path
+ name: object_id
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: string
+ description: Objects removed successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
+ description: Bad request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
+ description: Not found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
+ description: Internal server error
+ security:
+ - bearerauth: []
+ summary: Remove object from list
+ tags:
+ - lists
+servers:
+- url: localhost:31009/v1
diff --git a/core/api/internal/export/handler.go b/core/api/internal/export/handler.go
index c2ae3a2f8..b0a2813a4 100644
--- a/core/api/internal/export/handler.go
+++ b/core/api/internal/export/handler.go
@@ -21,6 +21,7 @@ import (
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/objects/{object_id}/export/{format} [post]
func GetObjectExportHandler(s *ExportService) gin.HandlerFunc {
return func(c *gin.Context) {
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index 0830390f5..c5c6871ae 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -13,7 +13,6 @@ import (
//
// @Summary Get objects in list
// @Tags lists
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param list_id path string true "List ID"
@@ -23,6 +22,7 @@ import (
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [get]
func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -60,6 +60,7 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post]
func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -88,34 +89,28 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
}
}
-// RemoveObjectsFromListHandler
+// RemoveObjectFromListHandler
//
-// @Summary Remove objects from list
+// @Summary Remove object from list
// @Tags lists
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param list_id path string true "List ID"
-// @Param objects body []string true "List of object IDs"
+// @Param object_id path string true "Object ID"
// @Success 200 {object} string "Objects removed successfully"
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [delete]
-func RemoveObjectsFromListHandler(s *ListService) gin.HandlerFunc {
+// @Security bearerauth
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete]
+func RemoveObjectFromListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
listId := c.Param("list_id")
+ objectId := c.Param("object_id")
- objects := []string{}
- if err := c.ShouldBindJSON(&objects); err != nil {
- apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
- c.JSON(http.StatusBadRequest, apiErr)
- return
- }
-
- err := s.RemoveObjectsFromList(c, spaceId, listId, objects)
+ err := s.RemoveObjectFromList(c, spaceId, listId, objectId)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedRemoveObjectsFromList, http.StatusInternalServerError),
)
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 625e56050..75e6f8407 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -20,7 +20,7 @@ var (
type Service interface {
GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]object.Object, int, bool, error)
AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error
- RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
+ RemoveObjectFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
}
type ListService struct {
@@ -76,11 +76,11 @@ func (s *ListService) AddObjectsToList(ctx context.Context, spaceId string, list
return nil
}
-// RemoveObjectsFromList removes objects from a list
-func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error {
+// RemoveObjectFromList removes objects from a list
+func (s *ListService) RemoveObjectFromList(ctx context.Context, spaceId string, listId string, objectId string) error {
resp := s.mw.ObjectCollectionRemove(ctx, &pb.RpcObjectCollectionRemoveRequest{
ContextId: spaceId,
- ObjectIds: objectIds,
+ ObjectIds: []string{objectId},
})
if resp.Error.Code != pb.RpcObjectCollectionRemoveResponseError_NULL {
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index 57c1e2e87..a8a0aa25d 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -13,7 +13,6 @@ import (
//
// @Summary List objects
// @Tags objects
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
@@ -21,6 +20,7 @@ import (
// @Success 200 {object} pagination.PaginatedResponse[Object] "List of objects"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/objects [get]
func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -49,7 +49,6 @@ func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Get object
// @Tags objects
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param object_id path string true "Object ID"
@@ -57,6 +56,7 @@ func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/objects/{object_id} [get]
func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -83,7 +83,6 @@ func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Delete object
// @Tags objects
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param object_id path string true "Object ID"
@@ -93,6 +92,7 @@ func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/objects/{object_id} [delete]
func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -129,6 +129,7 @@ func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/objects [post]
func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -165,7 +166,6 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary List types
// @Tags types
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
@@ -173,6 +173,7 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[Type] "List of types"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/types [get]
func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -199,7 +200,6 @@ func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Get type
// @Tags types
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
@@ -207,6 +207,7 @@ func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id} [get]
func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -233,7 +234,6 @@ func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary List templates
// @Tags types
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
@@ -242,6 +242,7 @@ func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[Template] "List of templates"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id}/templates [get]
func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -272,7 +273,6 @@ func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Get template
// @Tags types
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
@@ -281,6 +281,7 @@ func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id}/templates/{template_id} [get]
func GetTemplateHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
diff --git a/core/api/internal/search/handler.go b/core/api/internal/search/handler.go
index e3ffe62ed..57bbe3318 100644
--- a/core/api/internal/search/handler.go
+++ b/core/api/internal/search/handler.go
@@ -21,6 +21,7 @@ import (
// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /search [post]
func GlobalSearchHandler(s *SearchService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -62,6 +63,7 @@ func GlobalSearchHandler(s *SearchService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/search [post]
func SearchHandler(s *SearchService) gin.HandlerFunc {
return func(c *gin.Context) {
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 5dbbd2cd8..8c67c671b 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -13,13 +13,13 @@ import (
//
// @Summary List spaces
// @Tags spaces
-// @Accept json
// @Produce json
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
// @Param limit query int false "The number of items to return" default(100) maximum(1000)
// @Success 200 {object} pagination.PaginatedResponse[Space] "List of spaces"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces [get]
func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -46,13 +46,13 @@ func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary Get space
// @Tags spaces
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Success 200 {object} SpaceResponse "Space"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Space not found"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id} [get]
func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -86,6 +86,7 @@ func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces [post]
func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -115,7 +116,6 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary List members
// @Tags spaces
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
@@ -123,6 +123,7 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
// @Success 200 {object} pagination.PaginatedResponse[Member] "List of members"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/members [get]
func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
@@ -149,7 +150,6 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary Get member
// @Tags spaces
-// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param member_id path string true "Member ID"
@@ -157,6 +157,7 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Member not found"
// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
// @Router /spaces/{space_id}/members/{member_id} [get]
func GetMemberHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
diff --git a/core/api/server/router.go b/core/api/server/router.go
index 6bc017411..f3397da1c 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -70,7 +70,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
// List
v1.GET("/spaces/:space_id/lists/:list_id/objects", list.GetObjectsInListHandler(s.listService))
v1.POST("/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
- v1.DELETE("/spaces/:space_id/lists/:list_id/objects", list.RemoveObjectsFromListHandler(s.listService))
+ v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), list.RemoveObjectFromListHandler(s.listService))
// Object
v1.GET("/spaces/:space_id/objects", object.GetObjectsHandler(s.objectService))
diff --git a/core/api/service.go b/core/api/service.go
index d6cb17d47..4917f51d8 100644
--- a/core/api/service.go
+++ b/core/api/service.go
@@ -49,22 +49,20 @@ func (s *apiService) Name() (name string) {
// Init initializes the API service.
//
-// @title Anytype API
-// @version 1.0
-// @description This API allows interaction with Anytype resources such as spaces, objects and types.
-// @termsOfService https://anytype.io/terms_of_use
-// @contact.name Anytype Support
-// @contact.url https://anytype.io/contact
-// @contact.email support@anytype.io
-// @license.name Any Source Available License 1.0
-// @license.url https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
-// @host localhost:31009
-// @BasePath /v1
-// @securityDefinitions.apikey ApiKeyAuth
-// @in header
-// @name Authorization
-// @externalDocs.description OpenAPI
-// @externalDocs.url https://swagger.io/resources/open-api/
+// @title Anytype API
+// @version 1.0
+// @description This API allows interaction with Anytype resources such as spaces, objects and types.
+// @termsOfService https://anytype.io/terms_of_use
+// @contact.name Anytype Support
+// @contact.url https://anytype.io/contact
+// @contact.email support@anytype.io
+// @license.name Any Source Available License 1.0
+// @license.url https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
+// @host localhost:31009
+// @BasePath /v1
+// @securitydefinitions.bearerauth BearerAuth
+// @externalDocs.description OpenAPI
+// @externalDocs.url https://swagger.io/resources/open-api/
func (s *apiService) Init(a *app.App) (err error) {
s.listenAddr = a.MustComponent(config.CName).(*config.Config).JsonApiListenAddr
s.accountService = a.MustComponent(account.CName).(account.Service)
diff --git a/go.mod b/go.mod
index 829142b21..bfba1e94a 100644
--- a/go.mod
+++ b/go.mod
@@ -169,10 +169,10 @@ require (
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
- github.com/go-openapi/jsonpointer v0.19.5 // indirect
- github.com/go-openapi/jsonreference v0.19.6 // indirect
- github.com/go-openapi/spec v0.20.4 // indirect
- github.com/go-openapi/swag v0.19.15 // indirect
+ github.com/go-openapi/jsonpointer v0.19.6 // indirect
+ github.com/go-openapi/jsonreference v0.20.2 // indirect
+ github.com/go-openapi/spec v0.20.9 // indirect
+ github.com/go-openapi/swag v0.22.3 // indirect
github.com/go-pkgz/expirable-cache/v3 v3.0.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
@@ -220,7 +220,7 @@ require (
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/libp2p/go-libp2p v0.38.2 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
- github.com/mailru/easyjson v0.7.6 // indirect
+ github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/miekg/dns v1.1.62 // indirect
@@ -265,6 +265,8 @@ require (
github.com/spf13/viper v1.15.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
+ github.com/sv-tools/openapi v0.2.1 // indirect
+ github.com/swaggo/swag/v2 v2.0.0-rc4 // indirect
github.com/tetratelabs/wazero v1.8.1 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
diff --git a/go.sum b/go.sum
index 99d0be11d..dbfd5264e 100644
--- a/go.sum
+++ b/go.sum
@@ -353,13 +353,22 @@ github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
+github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs=
github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns=
+github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
+github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
+github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
+github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8=
+github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
+github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=
+github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-pkgz/expirable-cache/v3 v3.0.0 h1:u3/gcu3sabLYiTCevoRKv+WzjIn5oo7P8XtiXBeRDLw=
github.com/go-pkgz/expirable-cache/v3 v3.0.0/go.mod h1:2OQiDyEGQalYecLWmXprm3maPXeVb5/6/X7yRPYTzec=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
@@ -684,6 +693,7 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -728,6 +738,8 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/matishsiao/goInfo v0.0.0-20240924010139-10388a85396f h1:XDrsC/9hdgiU9ecceSmYsS2E3fBtFiYc34dAMFgegnM=
github.com/matishsiao/goInfo v0.0.0-20240924010139-10388a85396f/go.mod h1:aEt7p9Rvh67BYApmZwNDPpgircTO2kgdmDUoF/1QmwA=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
@@ -1056,12 +1068,16 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
+github.com/sv-tools/openapi v0.2.1 h1:ES1tMQMJFGibWndMagvdoo34T1Vllxr1Nlm5wz6b1aA=
+github.com/sv-tools/openapi v0.2.1/go.mod h1:k5VuZamTw1HuiS9p2Wl5YIDWzYnHG6/FgPOSFXLAhGg=
github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=
github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=
github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=
github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=
github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A=
github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg=
+github.com/swaggo/swag/v2 v2.0.0-rc4 h1:SZ8cK68gcV6cslwrJMIOqPkJELRwq4gmjvk77MrvHvY=
+github.com/swaggo/swag/v2 v2.0.0-rc4/go.mod h1:Ow7Y8gF16BTCDn8YxZbyKn8FkMLRUHekv1kROJZpbvE=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
github.com/tetratelabs/wazero v1.8.1 h1:NrcgVbWfkWvVc4UtT4LRLDf91PsOzDzefMdwhLfA550=
github.com/tetratelabs/wazero v1.8.1/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs=
From 1c87b864a51baa828c0f993320d30f334efec40b Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Feb 2025 13:56:17 +0100
Subject: [PATCH 022/132] GO-4459: Add http prefix to host
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 2 +-
core/api/service.go | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 2faeb5526..01dd8e76e 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -12,7 +12,7 @@ const docTemplate = `{
"paths": {"/auth/display_code":{"post":{"parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
- {"url":"localhost:31009/v1"}
+ {"url":"http://localhost:31009/v1"}
]
}`
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index c79693d6b..3247b1acf 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -5,6 +5,6 @@
"paths": {"/auth/display_code":{"post":{"parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
- {"url":"localhost:31009/v1"}
+ {"url":"http://localhost:31009/v1"}
]
}
\ No newline at end of file
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index deb31aec2..2c3ff7a8e 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1660,4 +1660,4 @@ paths:
tags:
- lists
servers:
-- url: localhost:31009/v1
+- url: http://localhost:31009/v1
diff --git a/core/api/service.go b/core/api/service.go
index 4917f51d8..4d98e334d 100644
--- a/core/api/service.go
+++ b/core/api/service.go
@@ -58,7 +58,7 @@ func (s *apiService) Name() (name string) {
// @contact.email support@anytype.io
// @license.name Any Source Available License 1.0
// @license.url https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
-// @host localhost:31009
+// @host http://localhost:31009
// @BasePath /v1
// @securitydefinitions.bearerauth BearerAuth
// @externalDocs.description OpenAPI
From 5b5da7d7071f152e2844cf03b82b11304aceb0a6 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Feb 2025 18:21:41 +0100
Subject: [PATCH 023/132] GO-4459: Add `swagger` Make target to generate and
format swagger docs
---
Makefile | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Makefile b/Makefile
index cffe39487..2927a6e10 100644
--- a/Makefile
+++ b/Makefile
@@ -338,6 +338,12 @@ else
@golangci-lint run -v ./... --new-from-rev=origin/main --timeout 15m --fix
endif
+swagger:
+ @echo 'Generating swagger docs...'
+ @swag init --v3.1 -q -d core/api -g service.go -o core/api/docs
+ @echo 'Formatting swagger docs...'
+ @swag fmt -d core/api
+
### Tantivy Section
REPO := anyproto/tantivy-go
From fd66a264f83c5c56194897b542fd927d57d752aa Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Feb 2025 19:14:18 +0100
Subject: [PATCH 024/132] GO-4459: Add resolveTag method to handle tag/status
option as string instead of list bug
---
core/api/internal/object/service.go | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 0079b9095..ad86898c7 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -560,6 +560,12 @@ func (s *ObjectService) convertValue(value *types.Value, format string, key stri
}
return member
}
+
+ // TODO: investigate how this is possible? select option not list and not returned in further details
+ if format == "select" || format == "multi_select" {
+ return s.resolveTag(details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), kind.StringValue)
+ }
+
return kind.StringValue
case *types.Value_BoolValue:
return kind.BoolValue
@@ -604,6 +610,28 @@ func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink
return relationFormatMap
}
+// TODO: remove once bug of select option not being returned in details is fixed
+func (s *ObjectService) resolveTag(spaceId, tagId string) Tag {
+ if tagId == "" {
+ return Tag{}
+ }
+
+ resp := s.mw.ObjectShow(context.Background(), &pb.RpcObjectShowRequest{
+ SpaceId: spaceId,
+ ObjectId: tagId,
+ })
+
+ if resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return Tag{}
+ }
+
+ return Tag{
+ Id: tagId,
+ Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ Color: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyRelationOptionColor.String()].GetStringValue(),
+ }
+}
+
// getTags returns the list of tags from the ObjectShowResponse
func (s *ObjectService) getTags(key string, details []*model.ObjectViewDetailsSet) []Tag {
tags := []Tag{}
From cdf1787bf1e341bb8941db4f6e54e4c8554e266c Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 17 Feb 2025 13:54:41 +0100
Subject: [PATCH 025/132] GO-4459: Add layout align to excluded relations
---
core/api/internal/object/service.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index ad86898c7..420e2824d 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -497,6 +497,7 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
bundle.RelationKeyLinks.String(): true,
bundle.RelationKeyBacklinks.String(): true,
bundle.RelationKeySourceObject.String(): true,
+ bundle.RelationKeyLayoutAlign.String(): true,
}
var details []Detail
From ff88402e626dee7aed230b9673794d0e04b29fe8 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 17 Feb 2025 15:50:38 +0100
Subject: [PATCH 026/132] GO-4459: Add missing filter condition for relation
name resolution
---
core/api/internal/object/service.go | 6 +++---
core/api/util/util.go | 17 ++++++++++-------
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 420e2824d..3565976a7 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -526,11 +526,11 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse) (id string, name string) {
relation, err := bundle.GetRelation(domain.RelationKey(key))
if err != nil {
- relation, err = util.ResolveRelationKeyToRelationName(s.mw, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), key)
+ name, err = util.ResolveRelationKeyToRelationName(s.mw, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), key)
if err != nil {
- return strcase.ToSnake(key), key
+ return key, key
}
- return key, relation.Name
+ return key, name
}
// special cases of relation keys and names
diff --git a/core/api/util/util.go b/core/api/util/util.go
index 25eacf1d2..568a5c3bc 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -61,7 +61,7 @@ func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, u
return resp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue(), nil
}
-func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId string, relationKey string) (relation *model.Relation, err error) {
+func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId string, relationKey string) (relation string, err error) {
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
@@ -70,19 +70,22 @@ func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId s
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.String(relationKey),
},
+ {
+ RelationKey: bundle.RelationKeyLayout.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.ObjectType_relation)),
+ },
},
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyLayout.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
- return &model.Relation{}, ErrFailedSearchType
+ return "", ErrFailedSearchType
}
if len(resp.Records) == 0 {
- return &model.Relation{}, ErrorTypeNotFound
+ return "", ErrorTypeNotFound
}
- return &model.Relation{
- Name: resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue(),
- }, nil
+ return resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue(), nil
}
From 394922dae773ae221137d7283a2c0dd288372d7e Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 17 Feb 2025 17:05:45 +0100
Subject: [PATCH 027/132] GO-4459: Fix tests for space and object
---
core/api/internal/object/service_test.go | 107 +++++++++++++++++++++--
core/api/internal/search/service_test.go | 100 +++++++++++++++++++++
2 files changed, 201 insertions(+), 6 deletions(-)
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 447f2f691..1c7838632 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -65,6 +65,29 @@ func TestObjectService_ListObjects(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
+ // Mock template type resolution
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: mockedSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyUniqueKey.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("ot-template"),
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String()},
+ }).Return(&pb.RpcObjectSearchResponse{
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
+ },
+ },
+ },
+ }).Once()
+
+ // Mock object search
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
Filters: []*model.BlockContentDataviewFilter{
@@ -82,6 +105,18 @@ func TestObjectService_ListObjects(t *testing.T) {
int(model.ObjectType_participant),
}...),
},
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyType.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.String(mockedTypeId),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIsHidden.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.Bool(true),
+ },
},
Sorts: []*model.BlockContentDataviewSort{{
RelationKey: bundle.RelationKeyLastModifiedDate.String(),
@@ -257,14 +292,74 @@ func TestObjectService_ListObjects(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
- fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).
- Return(&pb.RpcObjectSearchResponse{
- Records: []*types.Struct{},
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- }).Once()
+ // Mock template type resolution
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: mockedSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyUniqueKey.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("ot-template"),
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String()},
+ }).Return(&pb.RpcObjectSearchResponse{
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
+ },
+ },
+ },
+ }).Once()
+
+ // Mock object search
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: mockedSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyLayout.String(),
+ Condition: model.BlockContentDataviewFilter_In,
+ Value: pbtypes.IntList([]int{
+ int(model.ObjectType_basic),
+ int(model.ObjectType_profile),
+ int(model.ObjectType_todo),
+ int(model.ObjectType_note),
+ int(model.ObjectType_bookmark),
+ int(model.ObjectType_set),
+ int(model.ObjectType_collection),
+ int(model.ObjectType_participant),
+ }...),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyType.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.String(mockedTypeId),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIsHidden.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.Bool(true),
+ },
+ },
+ Sorts: []*model.BlockContentDataviewSort{{
+ RelationKey: bundle.RelationKeyLastModifiedDate.String(),
+ Type: model.BlockContentDataviewSort_Desc,
+ Format: model.RelationFormat_longtext,
+ IncludeTime: true,
+ EmptyPlacement: model.BlockContentDataviewSort_NotSpecified,
+ }},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String()},
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{},
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
// when
- objects, total, hasMore, err := fx.ListObjects(ctx, "empty-space", offset, limit)
+ objects, total, hasMore, err := fx.ListObjects(ctx, mockedSpaceId, offset, limit)
// then
require.NoError(t, err)
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index c6d1e023a..f7e3eb288 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -120,6 +120,28 @@ func TestSearchService_GlobalSearch(t *testing.T) {
Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
}).Once()
+ // Mock template type resolution
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: mockedSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyUniqueKey.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("ot-template"),
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String()},
+ }).Return(&pb.RpcObjectSearchResponse{
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedType),
+ },
+ },
+ },
+ }).Once()
+
// Mock objects in space
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
@@ -148,6 +170,12 @@ func TestSearchService_GlobalSearch(t *testing.T) {
Condition: model.BlockContentDataviewFilter_NotEqual,
Value: pbtypes.Bool(true),
},
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyType.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.String(mockedType),
+ },
{
Operator: model.BlockContentDataviewFilter_Or,
NestedFilters: []*model.BlockContentDataviewFilter{
@@ -406,6 +434,28 @@ func TestSearchService_Search(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
+ // Mock template type resolution
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: mockedSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyUniqueKey.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("ot-template"),
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String()},
+ }).Return(&pb.RpcObjectSearchResponse{
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedType),
+ },
+ },
+ },
+ }).Once()
+
// Mock objects in space
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
@@ -434,6 +484,12 @@ func TestSearchService_Search(t *testing.T) {
Condition: model.BlockContentDataviewFilter_NotEqual,
Value: pbtypes.Bool(true),
},
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyType.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.String(mockedType),
+ },
{
Operator: model.BlockContentDataviewFilter_Or,
NestedFilters: []*model.BlockContentDataviewFilter{
@@ -530,6 +586,28 @@ func TestSearchService_Search(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
+ // Mock template type resolution
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: mockedSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyUniqueKey.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("ot-template"),
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String()},
+ }).Return(&pb.RpcObjectSearchResponse{
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedType),
+ },
+ },
+ },
+ }).Once()
+
fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{},
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
@@ -550,6 +628,28 @@ func TestSearchService_Search(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
+ // Mock template type resolution
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: mockedSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: bundle.RelationKeyUniqueKey.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("ot-template"),
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String()},
+ }).Return(&pb.RpcObjectSearchResponse{
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(mockedType),
+ },
+ },
+ },
+ }).Once()
+
fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_UNKNOWN_ERROR},
}).Once()
From 79e72a51fe1bfb9c98b2a86a888a6f8cbd66bc87 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 17 Feb 2025 17:06:50 +0100
Subject: [PATCH 028/132] GO-4459: Remove templates from search and object list
results
---
core/api/internal/object/service.go | 19 +++++++++++++++++++
core/api/internal/search/service.go | 27 +++++++++++++++++++++++----
2 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 3565976a7..acc74b2a5 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -64,10 +64,13 @@ func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceServic
// ListObjects retrieves a paginated list of objects in a specific space.
func (s *ObjectService) ListObjects(ctx context.Context, spaceId string, offset int, limit int) (objects []Object, total int, hasMore bool, err error) {
+ typeId, err := util.ResolveUniqueKeyToTypeId(s.mw, spaceId, "ot-template")
+
resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
{
+ Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyLayout.String(),
Condition: model.BlockContentDataviewFilter_In,
Value: pbtypes.IntList([]int{
@@ -81,6 +84,18 @@ func (s *ObjectService) ListObjects(ctx context.Context, spaceId string, offset
int(model.ObjectType_participant),
}...),
},
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyType.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.String(typeId),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIsHidden.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.Bool(true),
+ },
},
Sorts: []*model.BlockContentDataviewSort{{
RelationKey: bundle.RelationKeyLastModifiedDate.String(),
@@ -268,11 +283,13 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
{
+ Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyLayout.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.Int64(int64(model.ObjectType_objectType)),
},
{
+ Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyIsHidden.String(),
Condition: model.BlockContentDataviewFilter_NotEqual,
Value: pbtypes.Bool(true),
@@ -340,6 +357,7 @@ func (s *ObjectService) ListTemplates(ctx context.Context, spaceId string, typeI
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
{
+ Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyUniqueKey.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.String("ot-template"),
@@ -362,6 +380,7 @@ func (s *ObjectService) ListTemplates(ctx context.Context, spaceId string, typeI
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
{
+ Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyType.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.String(templateTypeId),
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index ecd240871..c325560e3 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -52,9 +52,10 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
allResponses := make([]*pb.RpcObjectSearchResponse, 0, len(spaces))
for _, space := range spaces {
- // Resolve object type IDs per space, as they are unique per space
+ // Resolve template type and object type IDs per space, as they are unique per space
+ templateFilter := s.prepareTemplateFilter(space.Id)
typeFilters := s.prepareObjectTypeFilters(space.Id, request.Types)
- filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, queryFilters, typeFilters)
+ filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, templateFilter, queryFilters, typeFilters)
objResp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: space.Id,
@@ -113,9 +114,10 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
// Search retrieves a paginated list of objects from a specific space that match the search parameters.
func (s *SearchService) Search(ctx context.Context, spaceId string, request SearchRequest, offset int, limit int) (objects []object.Object, total int, hasMore bool, err error) {
baseFilters := s.prepareBaseFilters()
+ templateFilter := s.prepareTemplateFilter(spaceId)
queryFilters := s.prepareQueryFilter(request.Query)
typeFilters := s.prepareObjectTypeFilters(spaceId, request.Types)
- filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, queryFilters, typeFilters)
+ filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, templateFilter, queryFilters, typeFilters)
sorts := s.prepareSorts(request.Sort)
dateToSortAfter := sorts[0].RelationKey
@@ -194,6 +196,23 @@ func (s *SearchService) prepareBaseFilters() []*model.BlockContentDataviewFilter
}
}
+// prepareTemplateFilter returns a filter that excludes templates from the search results.
+func (s *SearchService) prepareTemplateFilter(spaceId string) []*model.BlockContentDataviewFilter {
+ typeId, err := util.ResolveUniqueKeyToTypeId(s.mw, spaceId, "ot-template")
+ if err != nil {
+ return nil
+ }
+
+ return []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyType.String(),
+ Condition: model.BlockContentDataviewFilter_NotEqual,
+ Value: pbtypes.String(typeId),
+ },
+ }
+}
+
// prepareQueryFilter combines object name and snippet filters with an OR condition.
func (s *SearchService) prepareQueryFilter(searchQuery string) []*model.BlockContentDataviewFilter {
if searchQuery == "" {
@@ -243,7 +262,7 @@ func (s *SearchService) prepareObjectTypeFilters(spaceId string, objectTypes []s
nestedFilters = append(nestedFilters, &model.BlockContentDataviewFilter{
Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyType.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
+ Condition: model.BlockContentDataviewFilter_NotEqual,
Value: pbtypes.String(typeId),
})
}
From fefb3b8b7d17d6d05c2007f2639802670f9cd744 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 17 Feb 2025 17:24:51 +0100
Subject: [PATCH 029/132] GO-4459: Fix tags in search test
---
core/api/internal/object/service.go | 17 +++++-----
core/api/internal/search/service_test.go | 40 ++++++++++++++++++++++++
2 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index acc74b2a5..9fdc62440 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -521,19 +521,20 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
var details []Detail
for _, r := range linkedRelations {
- if _, isExcluded := excludeRelations[r.Key]; isExcluded {
+ key := r.Key
+ if _, isExcluded := excludeRelations[key]; isExcluded {
continue
}
- if val, ok := primaryDetailFields[r.Key]; ok {
- id, name := s.getRelation(r.Key, resp)
- format := relationFormatMap[r.Key]
+ if val, ok := primaryDetailFields[key]; ok {
+ id, name := s.getRelation(key, resp)
+ format := relationFormatMap[key]
details = append(details, Detail{
Id: id,
Details: map[string]interface{}{
"name": name,
"type": format,
- format: s.convertValue(val, format, r.Key, resp.ObjectView.Details),
+ format: s.convertValue(key, val, format, resp.ObjectView.Details),
},
})
}
@@ -563,7 +564,7 @@ func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse)
}
// convertValue converts a protobuf types.Value into a native Go value.
-func (s *ObjectService) convertValue(value *types.Value, format string, key string, details []*model.ObjectViewDetailsSet) interface{} {
+func (s *ObjectService) convertValue(key string, value *types.Value, format string, details []*model.ObjectViewDetailsSet) interface{} {
switch kind := value.Kind.(type) {
case *types.Value_NullValue:
return nil
@@ -592,13 +593,13 @@ func (s *ObjectService) convertValue(value *types.Value, format string, key stri
case *types.Value_StructValue:
m := make(map[string]interface{})
for k, v := range kind.StructValue.Fields {
- m[k] = s.convertValue(v, format, key, details)
+ m[k] = s.convertValue(key, v, format, details)
}
return m
case *types.Value_ListValue:
var list []interface{}
for _, v := range kind.ListValue.Values {
- list = append(list, s.convertValue(v, format, key, details))
+ list = append(list, s.convertValue(key, v, format, details))
}
if format == "select" || format == "multi_select" {
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index f7e3eb288..2e0eac3ee 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -375,6 +375,46 @@ func TestSearchService_GlobalSearch(t *testing.T) {
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
}).Twice()
+ // Mock tag-1 open
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedTagId1,
+ }).Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String(mockedTagValue1),
+ bundle.RelationKeyRelationOptionColor.String(): pbtypes.String(mockedTagColor1),
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
+ // Mock tag-2 open
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedTagId2,
+ }).Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String(mockedTagValue2),
+ bundle.RelationKeyRelationOptionColor.String(): pbtypes.String(mockedTagColor2),
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
// when
objects, total, hasMore, err := fx.GlobalSearch(ctx, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Direction: "desc", Timestamp: "last_modified_date"}}, offset, limit)
From 4df66f60ce3095ceab99dc3931b3855053e61521 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Thu, 20 Feb 2025 17:41:27 +0100
Subject: [PATCH 030/132] GO-4459: Add endpoint descriptions
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 115 ++++++++++++++++
core/api/internal/auth/handler.go | 40 +++---
core/api/internal/export/handler.go | 27 ++--
core/api/internal/list/handler.go | 83 ++++++------
core/api/internal/object/handler.go | 196 +++++++++++++++-------------
core/api/internal/search/handler.go | 52 ++++----
core/api/internal/space/handler.go | 113 ++++++++--------
9 files changed, 383 insertions(+), 247 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 01dd8e76e..5698574b8 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -9,7 +9,7 @@ const docTemplate = `{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"description":"The icon of the template","example":"📄","type":"string"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"description":"The icon of the type","example":"📄","type":"string"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"description":"The icon of the member","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100","type":"string"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"description":"The icon of the space","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 3247b1acf..903f69158 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -2,7 +2,7 @@
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"description":"The icon of the template","example":"📄","type":"string"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"description":"The icon of the type","example":"📄","type":"string"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"description":"The icon of the member","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100","type":"string"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"description":"The icon of the space","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 2c3ff7a8e..13e0363eb 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -638,6 +638,13 @@ openapi: 3.1.0
paths:
/auth/display_code:
post:
+ description: This endpoint initiates a secure authentication flow by generating
+ a new challenge. Clients must supply the name of the application (via a query
+ parameter) that is requesting authentication. On success, the service returns
+ a unique challenge ID. This challenge ID must then be used with the token
+ endpoint (see below) to solve the challenge and retrieve an authentication
+ token. In essence, this endpoint “boots up” the login process and is the first
+ step in a multi-phase authentication sequence.
parameters:
- description: App name requesting the challenge
in: query
@@ -674,6 +681,13 @@ paths:
- auth
/auth/token:
post:
+ description: After receiving a challenge ID from the display_code endpoint,
+ the client calls this endpoint to provide the corresponding 4-digit code (also
+ via a query parameter) along with the challenge ID. The endpoint verifies
+ that the challenge solution is correct and, if it is, returns an ephemeral
+ session token together with a permanent app key. These tokens are then used
+ in subsequent API requests to authorize access. This endpoint is central to
+ ensuring that only properly authenticated sessions can access further resources.
parameters:
- description: Challenge ID
in: query
@@ -716,6 +730,14 @@ paths:
- auth
/search:
post:
+ description: This endpoint executes a global search over every space the user
+ has access to. It accepts pagination parameters (offset and limit) and a JSON
+ body containing search criteria. The criteria include a search query string,
+ an optional list of object types, and sort options (e.g. ascending/descending
+ by creation, modification, or last opened dates). Internally, the endpoint
+ aggregates results from each space, merges and sorts them (after last modified
+ date by default), and returns a unified, paginated list of objects that match
+ the search parameters.
parameters:
- description: The number of items to skip before starting to collect the result
set
@@ -764,6 +786,10 @@ paths:
- search
/spaces:
get:
+ description: Retrieves a paginated list of all spaces that are accessible by
+ the authenticated user. Each space record contains detailed information such
+ as the space ID, name, icon (derived either from an emoji or image URL), and
+ additional metadata. This endpoint is key to displaying a user’s workspaces.
parameters:
- description: The number of items to skip before starting to collect the result
set
@@ -804,6 +830,12 @@ paths:
tags:
- spaces
post:
+ description: Creates a new workspace (or space) based on a supplied name in
+ the JSON request body. The endpoint is subject to rate limiting and automatically
+ applies default configurations such as generating a random icon and initializing
+ the workspace with default settings (for example, a default dashboard or home
+ page). On success, the new space’s full metadata is returned, enabling the
+ client to immediately switch context to the new space.
requestBody:
content:
application/json:
@@ -849,6 +881,10 @@ paths:
- spaces
/spaces/{space_id}:
get:
+ description: Fetches full details about a single space identified by its space
+ ID. The response includes metadata such as the space name, icon, and various
+ workspace IDs (home, archive, profile, etc.). This detailed view supports
+ use cases such as displaying space-specific settings.
parameters:
- description: Space ID
in: path
@@ -888,6 +924,11 @@ paths:
- spaces
/spaces/{space_id}/members:
get:
+ description: Returns a paginated list of members belonging to the specified
+ space. Each member record includes the member’s profile ID, name, icon (which
+ may be derived from an emoji or image), network identity, global name, and
+ role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features
+ by allowing clients to show who is in a space and manage access rights.
parameters:
- description: Space ID
in: path
@@ -935,6 +976,10 @@ paths:
- spaces
/spaces/{space_id}/members/{member_id}:
get:
+ description: Fetches detailed information about a single member within a space.
+ The endpoint returns the member’s identifier, name, icon, identity, global
+ name, and role. This is useful for user profile pages, permission management,
+ and displaying member-specific information in collaborative environments.
parameters:
- description: Space ID
in: path
@@ -980,6 +1025,12 @@ paths:
- spaces
/spaces/{space_id}/objects:
get:
+ description: Retrieves a paginated list of objects in the given space. The endpoint
+ takes query parameters for pagination (offset and limit) and returns detailed
+ data about each object including its ID, name, icon, type information, a snippet
+ of the content (if applicable), layout, space ID, blocks and details. It is
+ intended for building views where users can see all objects in a space at
+ a glance.
parameters:
- description: Space ID
in: path
@@ -1026,6 +1077,14 @@ paths:
tags:
- objects
post:
+ description: Creates a new object in the specified space using a JSON payload.
+ The creation process is subject to rate limiting. The payload must include
+ key details such as the object name, icon, description, body content (which
+ may support Markdown), source URL (required for bookmark objects), template
+ identifier, and the unique key for the object type. Post-creation, additional
+ operations (like setting featured relations or fetching bookmark metadata)
+ may occur. The endpoint then returns the full object data, ready for further
+ interactions.
parameters:
- description: Space ID
in: path
@@ -1078,6 +1137,11 @@ paths:
- objects
/spaces/{space_id}/objects/{object_id}:
delete:
+ description: This endpoint “deletes” an object by marking it as archived. The
+ deletion process is performed safely and is subject to rate limiting. It returns
+ the object’s details after it has been archived. Proper error handling is
+ in place for situations such as when the object isn’t found or the deletion
+ cannot be performed because of permission issues.
parameters:
- description: Space ID
in: path
@@ -1134,6 +1198,12 @@ paths:
tags:
- objects
get:
+ description: Fetches the full details of a single object identified by the object
+ ID within the specified space. The response includes not only basic metadata
+ (ID, name, icon, type) but also the complete set of blocks (which may include
+ text, files, and relations) and extra details (such as timestamps and linked
+ member information). This endpoint is essential when a client needs to render
+ or edit the full object view.
parameters:
- description: Space ID
in: path
@@ -1179,6 +1249,13 @@ paths:
- objects
/spaces/{space_id}/objects/{object_id}/export/{format}:
post:
+ description: This endpoint exports a single object from the specified space
+ into a desired format. The export format is provided as a path parameter (currently
+ supporting “markdown” and “protobuf”), and clients can optionally specify
+ an export path in the request body. The endpoint calls an export service which
+ converts the object’s content into the requested format and returns the file
+ path where the exported data is stored. It is useful for data backup, sharing,
+ or further processing.
parameters:
- description: Space ID
in: path
@@ -1238,6 +1315,12 @@ paths:
- export
/spaces/{space_id}/search:
post:
+ description: This endpoint performs a focused search within a single space (specified
+ by the space_id path parameter). Like the global search, it accepts pagination
+ parameters and a JSON payload containing the search query, object types, and
+ sorting preferences. The search is limited to the provided space and returns
+ a list of objects that match the query. This allows clients to implement space‑specific
+ filtering without having to process extraneous results.
parameters:
- description: Space ID
in: path
@@ -1292,6 +1375,11 @@ paths:
- search
/spaces/{space_id}/types:
get:
+ description: This endpoint retrieves a paginated list of object types (e.g.
+ 'Page', 'Note', 'Task') available within the specified space. Each type’s
+ record includes its unique identifier, unique key, display name, icon, and
+ a recommended layout. Clients use this information when offering choices for
+ object creation or for filtering objects by type.
parameters:
- description: Space ID
in: path
@@ -1339,6 +1427,11 @@ paths:
- types
/spaces/{space_id}/types/{type_id}:
get:
+ description: Fetches detailed information about one specific object type by
+ its ID. This includes the type’s unique key, name, icon, and recommended layout.
+ This detailed view assists clients in understanding the expected structure
+ and style for objects of that type and in guiding the user interface (such
+ as displaying appropriate icons or layout hints).
parameters:
- description: Space ID
in: path
@@ -1384,6 +1477,11 @@ paths:
- types
/spaces/{space_id}/types/{type_id}/templates:
get:
+ description: This endpoint returns a paginated list of templates that are associated
+ with a specific object type within a space. Templates provide pre‑configured
+ structures for creating new objects. Each template record contains its identifier,
+ name, and icon, so that clients can offer users a selection of templates when
+ creating objects.
parameters:
- description: Space ID
in: path
@@ -1437,6 +1535,10 @@ paths:
- types
/spaces/{space_id}/types/{type_id}/templates/{template_id}:
get:
+ description: Fetches full details for one template associated with a particular
+ object type in a space. The response provides the template’s identifier, name,
+ icon, and any other relevant metadata. This endpoint is useful when a client
+ needs to preview or apply a template to prefill object creation fields.
parameters:
- description: Space ID
in: path
@@ -1488,6 +1590,10 @@ paths:
- types
/v1/spaces/{space_id}/lists/{list_id}/objects:
get:
+ description: Returns a paginated list of objects that are associated with a
+ specific list (or collection) within a space. This endpoint helps clients
+ to manage grouped objects (for example, tasks within a list) by returning
+ detailed object information for each item of the list.
parameters:
- description: Space ID
in: path
@@ -1544,6 +1650,10 @@ paths:
tags:
- lists
post:
+ description: Enables clients to add one or more objects to a specific list by
+ submitting a JSON array of object IDs. Upon success, the endpoint returns
+ a confirmation message. This endpoint is vital for building user interfaces
+ that allow drag‑and‑drop or multi‑select additions to collections.
parameters:
- description: Space ID
in: path
@@ -1604,6 +1714,11 @@ paths:
- lists
/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}:
delete:
+ description: Removes a given object from the specified list in a space. The
+ endpoint takes the space, list, and object identifiers as path parameters.
+ It's subject to rate limiting and returns a success message on completion.
+ It is used for dynamically managing collections without affecting the underlying
+ object data.
parameters:
- description: Space ID
in: path
diff --git a/core/api/internal/auth/handler.go b/core/api/internal/auth/handler.go
index 21900c994..46cdbb188 100644
--- a/core/api/internal/auth/handler.go
+++ b/core/api/internal/auth/handler.go
@@ -10,15 +10,16 @@ import (
// DisplayCodeHandler starts a new challenge and returns the challenge ID
//
-// @Summary Start new challenge
-// @Tags auth
-// @Accept json
-// @Produce json
-// @Param app_name query string true "App name requesting the challenge"
-// @Success 200 {object} DisplayCodeResponse "Challenge ID"
-// @Failure 400 {object} util.ValidationError "Invalid input"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Router /auth/display_code [post]
+// @Summary Start new challenge
+// @Description This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.
+// @Tags auth
+// @Accept json
+// @Produce json
+// @Param app_name query string true "App name requesting the challenge"
+// @Success 200 {object} DisplayCodeResponse "Challenge ID"
+// @Failure 400 {object} util.ValidationError "Invalid input"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /auth/display_code [post]
func DisplayCodeHandler(s *AuthService) gin.HandlerFunc {
return func(c *gin.Context) {
appName := c.Query("app_name")
@@ -40,16 +41,17 @@ func DisplayCodeHandler(s *AuthService) gin.HandlerFunc {
// TokenHandler retrieves an authentication token using a code and challenge ID
//
-// @Summary Retrieve token
-// @Tags auth
-// @Accept json
-// @Produce json
-// @Param challenge_id query string true "Challenge ID"
-// @Param code query string true "4-digit code retrieved from Anytype Desktop app"
-// @Success 200 {object} TokenResponse "Authentication token"
-// @Failure 400 {object} util.ValidationError "Invalid input"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Router /auth/token [post]
+// @Summary Retrieve token
+// @Description After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.
+// @Tags auth
+// @Accept json
+// @Produce json
+// @Param challenge_id query string true "Challenge ID"
+// @Param code query string true "4-digit code retrieved from Anytype Desktop app"
+// @Success 200 {object} TokenResponse "Authentication token"
+// @Failure 400 {object} util.ValidationError "Invalid input"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Router /auth/token [post]
func TokenHandler(s *AuthService) gin.HandlerFunc {
return func(c *gin.Context) {
challengeId := c.Query("challenge_id")
diff --git a/core/api/internal/export/handler.go b/core/api/internal/export/handler.go
index b0a2813a4..cc4c05813 100644
--- a/core/api/internal/export/handler.go
+++ b/core/api/internal/export/handler.go
@@ -10,19 +10,20 @@ import (
// GetObjectExportHandler exports an object in specified format
//
-// @Summary Export object
-// @Tags export
-// @Accept json
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param object_id path string true "Object ID"
-// @Param format path string true "Export format" Enums(markdown,protobuf)
-// @Success 200 {object} ObjectExportResponse "Object exported successfully"
-// @Failure 400 {object} util.ValidationError "Bad request"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/objects/{object_id}/export/{format} [post]
+// @Summary Export object
+// @Description This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.
+// @Tags export
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param object_id path string true "Object ID"
+// @Param format path string true "Export format" Enums(markdown,protobuf)
+// @Success 200 {object} ObjectExportResponse "Object exported successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/objects/{object_id}/export/{format} [post]
func GetObjectExportHandler(s *ExportService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index c5c6871ae..761795a11 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -11,19 +11,20 @@ import (
// GetObjectsInListHandler
//
-// @Summary Get objects in list
-// @Tags lists
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param list_id path string true "List ID"
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return"
-// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [get]
+// @Summary Get objects in list
+// @Description Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.
+// @Tags lists
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return"
+// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [get]
func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -48,20 +49,21 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
// AddObjectsToListHandler
//
-// @Summary Add objects to list
-// @Tags lists
-// @Accept json
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param list_id path string true "List ID"
-// @Param objects body []string true "List of object IDs"
-// @Success 200 {object} string "Objects added successfully"
-// @Failure 400 {object} util.ValidationError "Bad request"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post]
+// @Summary Add objects to list
+// @Description Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.
+// @Tags lists
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param objects body []string true "List of object IDs"
+// @Success 200 {object} string "Objects added successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post]
func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -91,19 +93,20 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
// RemoveObjectFromListHandler
//
-// @Summary Remove object from list
-// @Tags lists
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param list_id path string true "List ID"
-// @Param object_id path string true "Object ID"
-// @Success 200 {object} string "Objects removed successfully"
-// @Failure 400 {object} util.ValidationError "Bad request"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete]
+// @Summary Remove object from list
+// @Description Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.
+// @Tags lists
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param object_id path string true "Object ID"
+// @Success 200 {object} string "Objects removed successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete]
func RemoveObjectFromListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index a8a0aa25d..c62f18768 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -11,17 +11,18 @@ import (
// GetObjectsHandler retrieves a list of objects in a space
//
-// @Summary List objects
-// @Tags objects
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return" default(100) maximum(1000)
-// @Success 200 {object} pagination.PaginatedResponse[Object] "List of objects"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/objects [get]
+// @Summary List objects
+// @Description Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.
+// @Tags objects
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return" default(100) maximum(1000)
+// @Success 200 {object} pagination.PaginatedResponse[Object] "List of objects"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/objects [get]
func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -47,17 +48,18 @@ func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
// GetObjectHandler retrieves an object in a space
//
-// @Summary Get object
-// @Tags objects
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param object_id path string true "Object ID"
-// @Success 200 {object} ObjectResponse "The requested object"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Resource not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/objects/{object_id} [get]
+// @Summary Get object
+// @Description Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.
+// @Tags objects
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param object_id path string true "Object ID"
+// @Success 200 {object} ObjectResponse "The requested object"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/objects/{object_id} [get]
func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -81,19 +83,20 @@ func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
// DeleteObjectHandler deletes an object in a space
//
-// @Summary Delete object
-// @Tags objects
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param object_id path string true "Object ID"
-// @Success 200 {object} ObjectResponse "The deleted object"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 403 {object} util.ForbiddenError "Forbidden"
-// @Failure 404 {object} util.NotFoundError "Resource not found"
-// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/objects/{object_id} [delete]
+// @Summary Delete object
+// @Description This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.
+// @Tags objects
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param object_id path string true "Object ID"
+// @Success 200 {object} ObjectResponse "The deleted object"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 403 {object} util.ForbiddenError "Forbidden"
+// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/objects/{object_id} [delete]
func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -118,19 +121,20 @@ func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
// CreateObjectHandler creates a new object in a space
//
-// @Summary Create object
-// @Tags objects
-// @Accept json
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param object body CreateObjectRequest true "Object to create"
-// @Success 200 {object} ObjectResponse "The created object"
-// @Failure 400 {object} util.ValidationError "Bad request"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/objects [post]
+// @Summary Create object
+// @Description Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.
+// @Tags objects
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param object body CreateObjectRequest true "Object to create"
+// @Success 200 {object} ObjectResponse "The created object"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/objects [post]
func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -164,17 +168,18 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
// GetTypesHandler retrieves a list of types in a space
//
-// @Summary List types
-// @Tags types
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return" default(100) maximum(1000)
-// @Success 200 {object} pagination.PaginatedResponse[Type] "List of types"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/types [get]
+// @Summary List types
+// @Description This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.
+// @Tags types
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return" default(100) maximum(1000)
+// @Success 200 {object} pagination.PaginatedResponse[Type] "List of types"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/types [get]
func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -198,17 +203,18 @@ func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
// GetTypeHandler retrieves a type in a space
//
-// @Summary Get type
-// @Tags types
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param type_id path string true "Type ID"
-// @Success 200 {object} TypeResponse "The requested type"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Resource not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/types/{type_id} [get]
+// @Summary Get type
+// @Description Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).
+// @Tags types
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param type_id path string true "Type ID"
+// @Success 200 {object} TypeResponse "The requested type"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/types/{type_id} [get]
func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -232,18 +238,19 @@ func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
// GetTemplatesHandler retrieves a list of templates for a type in a space
//
-// @Summary List templates
-// @Tags types
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param type_id path string true "Type ID"
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return" default(100) maximum(1000)
-// @Success 200 {object} pagination.PaginatedResponse[Template] "List of templates"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/types/{type_id}/templates [get]
+// @Summary List templates
+// @Description This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.
+// @Tags types
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param type_id path string true "Type ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return" default(100) maximum(1000)
+// @Success 200 {object} pagination.PaginatedResponse[Template] "List of templates"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/types/{type_id}/templates [get]
func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -271,18 +278,19 @@ func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
// GetTemplateHandler retrieves a template for a type in a space
//
-// @Summary Get template
-// @Tags types
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param type_id path string true "Type ID"
-// @Param template_id path string true "Template ID"
-// @Success 200 {object} TemplateResponse "The requested template"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Resource not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/types/{type_id}/templates/{template_id} [get]
+// @Summary Get template
+// @Description Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.
+// @Tags types
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param type_id path string true "Type ID"
+// @Param template_id path string true "Template ID"
+// @Success 200 {object} TemplateResponse "The requested template"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/types/{type_id}/templates/{template_id} [get]
func GetTemplateHandler(s *ObjectService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
diff --git a/core/api/internal/search/handler.go b/core/api/internal/search/handler.go
index 57bbe3318..9113b30e2 100644
--- a/core/api/internal/search/handler.go
+++ b/core/api/internal/search/handler.go
@@ -11,18 +11,19 @@ import (
// GlobalSearchHandler searches and retrieves objects across all spaces
//
-// @Summary Search objects across all spaces
-// @Tags search
-// @Accept json
-// @Produce json
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return" default(100) maximum(1000)
-// @Param request body SearchRequest true "Search parameters"
-// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /search [post]
+// @Summary Search objects across all spaces
+// @Description This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.
+// @Tags search
+// @Accept json
+// @Produce json
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return" default(100) maximum(1000)
+// @Param request body SearchRequest true "Search parameters"
+// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /search [post]
func GlobalSearchHandler(s *SearchService) gin.HandlerFunc {
return func(c *gin.Context) {
offset := c.GetInt("offset")
@@ -52,19 +53,20 @@ func GlobalSearchHandler(s *SearchService) gin.HandlerFunc {
// SearchHandler searches and retrieves objects within a space
//
-// @Summary Search objects within a space
-// @Tags search
-// @Accept json
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return" default(100) maximum(1000)
-// @Param request body SearchRequest true "Search parameters"
-// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/search [post]
+// @Summary Search objects within a space
+// @Description This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.
+// @Tags search
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return" default(100) maximum(1000)
+// @Param request body SearchRequest true "Search parameters"
+// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/search [post]
func SearchHandler(s *SearchService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceID := c.Param("space_id")
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 8c67c671b..e52dcb2f6 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -11,16 +11,17 @@ import (
// GetSpacesHandler retrieves a list of spaces
//
-// @Summary List spaces
-// @Tags spaces
-// @Produce json
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return" default(100) maximum(1000)
-// @Success 200 {object} pagination.PaginatedResponse[Space] "List of spaces"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces [get]
+// @Summary List spaces
+// @Description Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.
+// @Tags spaces
+// @Produce json
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return" default(100) maximum(1000)
+// @Success 200 {object} pagination.PaginatedResponse[Space] "List of spaces"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces [get]
func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
offset := c.GetInt("offset")
@@ -44,16 +45,17 @@ func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
// GetSpaceHandler retrieves a space
//
-// @Summary Get space
-// @Tags spaces
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Success 200 {object} SpaceResponse "Space"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Space not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id} [get]
+// @Summary Get space
+// @Description Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.
+// @Tags spaces
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Success 200 {object} SpaceResponse "Space"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Space not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id} [get]
func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -76,18 +78,19 @@ func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
// CreateSpaceHandler creates a new space
//
-// @Summary Create space
-// @Tags spaces
-// @Accept json
-// @Produce json
-// @Param name body CreateSpaceRequest true "Space to create"
-// @Success 200 {object} SpaceResponse "Space created successfully"
-// @Failure 400 {object} util.ValidationError "Bad request"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces [post]
+// @Summary Create space
+// @Description Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.
+// @Tags spaces
+// @Accept json
+// @Produce json
+// @Param name body CreateSpaceRequest true "Space to create"
+// @Success 200 {object} SpaceResponse "Space created successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 423 {object} util.RateLimitError "Rate limit exceeded"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces [post]
func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
nameRequest := CreateSpaceRequest{}
@@ -114,17 +117,18 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
// GetMembersHandler retrieves a list of members in a space
//
-// @Summary List members
-// @Tags spaces
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
-// @Param limit query int false "The number of items to return" default(100) maximum(1000)
-// @Success 200 {object} pagination.PaginatedResponse[Member] "List of members"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/members [get]
+// @Summary List members
+// @Description Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.
+// @Tags spaces
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return" default(100) maximum(1000)
+// @Success 200 {object} pagination.PaginatedResponse[Member] "List of members"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/members [get]
func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -148,17 +152,18 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
// GetMemberHandler retrieves a member in a space
//
-// @Summary Get member
-// @Tags spaces
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param member_id path string true "Member ID"
-// @Success 200 {object} MemberResponse "Member"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Member not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/members/{member_id} [get]
+// @Summary Get member
+// @Description Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.
+// @Tags spaces
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param member_id path string true "Member ID"
+// @Success 200 {object} MemberResponse "Member"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Member not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/members/{member_id} [get]
func GetMemberHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
From 8935a5bb112724806115a94ca811e9adfaaa9e79 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 21 Feb 2025 13:34:06 +0100
Subject: [PATCH 031/132] GO-4459: Set metadata header with API version
---
core/api/server/middleware.go | 8 ++++++++
core/api/server/router.go | 1 +
2 files changed, 9 insertions(+)
diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go
index 1313127f8..2317c935f 100644
--- a/core/api/server/middleware.go
+++ b/core/api/server/middleware.go
@@ -95,3 +95,11 @@ func (s *Server) ensureAccountInfo(accountService account.Service) gin.HandlerFu
c.Next()
}
}
+
+// ensureMetadataHeader is a middleware that ensures the metadata header is set.
+func (s *Server) ensureMetadataHeader() gin.HandlerFunc {
+ return func(c *gin.Context) {
+ c.Writer.Header().Set("X-API-Version", "0.0.2")
+ c.Next()
+ }
+}
diff --git a/core/api/server/router.go b/core/api/server/router.go
index f3397da1c..67237092c 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -37,6 +37,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
router := gin.New()
router.Use(gin.Recovery())
+ router.Use(s.ensureMetadataHeader())
if debug {
router.Use(gin.Logger())
From 6879cc671b16b123b2b14b0218ea240c1c36869d Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 24 Feb 2025 19:40:41 +0100
Subject: [PATCH 032/132] GO-4459 Add swagger to makefile
---
makefiles/tools.mk | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/makefiles/tools.mk b/makefiles/tools.mk
index e0c4c3439..81ec1c41a 100644
--- a/makefiles/tools.mk
+++ b/makefiles/tools.mk
@@ -9,3 +9,9 @@ lint:
@npx prettier --check "./**" 2> /dev/null || true
@echo 'Linting with golint...'
@golint `go list ./... | grep -v /vendor/`
+
+swagger:
+ @echo 'Generating swagger docs...'
+ @swag init --v3.1 -q -d core/api -g service.go -o core/api/docs
+ @echo 'Formatting swagger docs...'
+ @swag fmt -d core/api
From 9655704e021720900f7d9e20c40e20ecbcb04b45 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 24 Feb 2025 19:42:45 +0100
Subject: [PATCH 033/132] GO-4459: Fix condition in object type filter for
search
---
core/api/internal/search/service.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index c325560e3..8536097dc 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -262,7 +262,7 @@ func (s *SearchService) prepareObjectTypeFilters(spaceId string, objectTypes []s
nestedFilters = append(nestedFilters, &model.BlockContentDataviewFilter{
Operator: model.BlockContentDataviewFilter_No,
RelationKey: bundle.RelationKeyType.String(),
- Condition: model.BlockContentDataviewFilter_NotEqual,
+ Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.String(typeId),
})
}
From 84ee21b717845c3255a625da0a463384ce479451 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 24 Feb 2025 20:07:50 +0100
Subject: [PATCH 034/132] GO-4459: Update relation key from Layout to
ResolvedLayout in filters
---
core/api/internal/object/service.go | 8 +++----
core/api/internal/object/service_test.go | 28 ++++++++++++------------
core/api/internal/search/service.go | 2 +-
core/api/internal/search/service_test.go | 10 ++++-----
core/api/internal/space/service.go | 4 ++--
core/api/internal/space/service_test.go | 2 +-
core/api/util/util.go | 4 ++--
7 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 9fdc62440..55944b0c2 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -71,7 +71,7 @@ func (s *ObjectService) ListObjects(ctx context.Context, spaceId string, offset
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_In,
Value: pbtypes.IntList([]int{
int(model.ObjectType_basic),
@@ -150,7 +150,7 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
Icon: icon,
Type: s.getTypeFromDetails(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
Snippet: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySnippet.String()].GetStringValue(),
- Layout: model.ObjectTypeLayout_name[int32(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyLayout.String()].GetNumberValue())],
+ Layout: model.ObjectTypeLayout_name[int32(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
SpaceId: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(),
RootId: resp.ObjectView.RootId,
Blocks: s.getBlocks(resp),
@@ -284,7 +284,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.Int64(int64(model.ObjectType_objectType)),
},
@@ -487,7 +487,7 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
bundle.RelationKeyIconEmoji.String(): true,
bundle.RelationKeyIconImage.String(): true,
bundle.RelationKeyType.String(): true,
- bundle.RelationKeyLayout.String(): true,
+ bundle.RelationKeyResolvedLayout.String(): true,
bundle.RelationKeyIsFavorite.String(): true,
bundle.RelationKeyIsArchived.String(): true,
bundle.RelationKeyIsDeleted.String(): true,
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 1c7838632..3df35acb7 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -92,7 +92,7 @@ func TestObjectService_ListObjects(t *testing.T) {
SpaceId: mockedSpaceId,
Filters: []*model.BlockContentDataviewFilter{
{
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_In,
Value: pbtypes.IntList([]int{
int(model.ObjectType_basic),
@@ -130,12 +130,12 @@ func TestObjectService_ListObjects(t *testing.T) {
Records: []*types.Struct{
{
Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
- bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
- bundle.RelationKeySnippet.String(): pbtypes.String(mockedObjectSnippet),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
- bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
- bundle.RelationKeyLayout.String(): pbtypes.Float64(float64(model.ObjectType_basic)),
+ bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
+ bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
+ bundle.RelationKeySnippet.String(): pbtypes.String(mockedObjectSnippet),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeyResolvedLayout.String(): pbtypes.Float64(float64(model.ObjectType_basic)),
},
},
},
@@ -319,7 +319,7 @@ func TestObjectService_ListObjects(t *testing.T) {
SpaceId: mockedSpaceId,
Filters: []*model.BlockContentDataviewFilter{
{
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_In,
Value: pbtypes.IntList([]int{
int(model.ObjectType_basic),
@@ -540,12 +540,12 @@ func TestObjectService_CreateObject(t *testing.T) {
Id: mockedNewObjectId,
Details: &types.Struct{
Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedNewObjectId),
- bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
- bundle.RelationKeyLayout.String(): pbtypes.Float64(float64(model.ObjectType_basic)),
- bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
- bundle.RelationKeySpaceId.String(): pbtypes.String(mockedSpaceId),
+ bundle.RelationKeyId.String(): pbtypes.String(mockedNewObjectId),
+ bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
+ bundle.RelationKeyResolvedLayout.String(): pbtypes.Float64(float64(model.ObjectType_basic)),
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
+ bundle.RelationKeySpaceId.String(): pbtypes.String(mockedSpaceId),
},
},
},
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index 8536097dc..b0af8641a 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -174,7 +174,7 @@ func (s *SearchService) prepareBaseFilters() []*model.BlockContentDataviewFilter
return []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_In,
Value: pbtypes.IntList([]int{
int(model.ObjectType_basic),
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 2e0eac3ee..3b9d62aef 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -78,7 +78,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.Int64(int64(model.ObjectType_spaceView)),
},
@@ -151,7 +151,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
NestedFilters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_In,
Value: pbtypes.IntList([]int{
int(model.ObjectType_basic),
@@ -265,7 +265,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
- bundle.RelationKeyLayout.String(): pbtypes.Int64(int64(model.ObjectType_basic)),
+ bundle.RelationKeyResolvedLayout.String(): pbtypes.Int64(int64(model.ObjectType_basic)),
bundle.RelationKeyIconEmoji.String(): pbtypes.String("🌐"),
bundle.RelationKeyLastModifiedDate.String(): pbtypes.Float64(999999),
bundle.RelationKeyLastModifiedBy.String(): pbtypes.String(mockedParticipantId),
@@ -505,7 +505,7 @@ func TestSearchService_Search(t *testing.T) {
NestedFilters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_In,
Value: pbtypes.IntList([]int{
int(model.ObjectType_basic),
@@ -585,7 +585,7 @@ func TestSearchService_Search(t *testing.T) {
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
- bundle.RelationKeyLayout.String(): pbtypes.Int64(int64(model.ObjectType_basic)),
+ bundle.RelationKeyResolvedLayout.String(): pbtypes.Int64(int64(model.ObjectType_basic)),
bundle.RelationKeyLastModifiedDate.String(): pbtypes.Float64(999999),
bundle.RelationKeySpaceId.String(): pbtypes.String(mockedSpaceId),
bundle.RelationKeyType.String(): pbtypes.String(mockedType),
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index 1b36244e0..c604c863a 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -52,7 +52,7 @@ func (s *SpaceService) ListSpaces(ctx context.Context, offset int, limit int) (s
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.Int64(int64(model.ObjectType_spaceView)),
},
@@ -166,7 +166,7 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.Int64(int64(model.ObjectType_participant)),
},
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index d68a3cdce..6fc47af5c 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -53,7 +53,7 @@ func TestSpaceService_ListSpaces(t *testing.T) {
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.Int64(int64(model.ObjectType_spaceView)),
},
diff --git a/core/api/util/util.go b/core/api/util/util.go
index 568a5c3bc..fdb9de1a2 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -71,12 +71,12 @@ func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId s
Value: pbtypes.String(relationKey),
},
{
- RelationKey: bundle.RelationKeyLayout.String(),
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.Int64(int64(model.ObjectType_relation)),
},
},
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyLayout.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyResolvedLayout.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
From bf9131a949be4ad06d0c72da098c930b2f969674 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 24 Feb 2025 20:08:15 +0100
Subject: [PATCH 035/132] GO-4459: Handle error in ListObjects when resolving
unique key to type ID
---
core/api/internal/object/service.go | 3 +++
1 file changed, 3 insertions(+)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 55944b0c2..b3fd83b8b 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -65,6 +65,9 @@ func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceServic
// ListObjects retrieves a paginated list of objects in a specific space.
func (s *ObjectService) ListObjects(ctx context.Context, spaceId string, offset int, limit int) (objects []Object, total int, hasMore bool, err error) {
typeId, err := util.ResolveUniqueKeyToTypeId(s.mw, spaceId, "ot-template")
+ if err != nil {
+ return nil, 0, false, err
+ }
resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
From 8ca15e3b686dd9fb5cd610d6989b1032ce0e98f3 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Feb 2025 15:26:05 +0100
Subject: [PATCH 036/132] GO-4459: Refactor list object removal and improve
sorting error handling
---
core/api/internal/list/handler.go | 2 +-
core/api/internal/list/service.go | 10 +++++-----
core/api/internal/search/service.go | 6 ++++++
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index 761795a11..923787df3 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -113,7 +113,7 @@ func RemoveObjectFromListHandler(s *ListService) gin.HandlerFunc {
listId := c.Param("list_id")
objectId := c.Param("object_id")
- err := s.RemoveObjectFromList(c, spaceId, listId, objectId)
+ err := s.RemoveObjectsFromList(c, spaceId, listId, []string{objectId})
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedRemoveObjectsFromList, http.StatusInternalServerError),
)
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 75e6f8407..9a5e2c15c 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -20,7 +20,7 @@ var (
type Service interface {
GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]object.Object, int, bool, error)
AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error
- RemoveObjectFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
+ RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
}
type ListService struct {
@@ -76,11 +76,11 @@ func (s *ListService) AddObjectsToList(ctx context.Context, spaceId string, list
return nil
}
-// RemoveObjectFromList removes objects from a list
-func (s *ListService) RemoveObjectFromList(ctx context.Context, spaceId string, listId string, objectId string) error {
+// RemoveObjectsFromList removes objects from a list
+func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error {
resp := s.mw.ObjectCollectionRemove(ctx, &pb.RpcObjectCollectionRemoveRequest{
- ContextId: spaceId,
- ObjectIds: []string{objectId},
+ ContextId: listId,
+ ObjectIds: objectIds,
})
if resp.Error.Code != pb.RpcObjectCollectionRemoveResponseError_NULL {
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index b0af8641a..dcc14c89a 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -48,6 +48,9 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
baseFilters := s.prepareBaseFilters()
queryFilters := s.prepareQueryFilter(request.Query)
sorts := s.prepareSorts(request.Sort)
+ if len(sorts) == 0 {
+ return nil, 0, false, errors.New("no sort criteria provided")
+ }
dateToSortAfter := sorts[0].RelationKey
allResponses := make([]*pb.RpcObjectSearchResponse, 0, len(spaces))
@@ -120,6 +123,9 @@ func (s *SearchService) Search(ctx context.Context, spaceId string, request Sear
filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, templateFilter, queryFilters, typeFilters)
sorts := s.prepareSorts(request.Sort)
+ if len(sorts) == 0 {
+ return nil, 0, false, errors.New("no sort criteria provided")
+ }
dateToSortAfter := sorts[0].RelationKey
resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
From ddb528d37ad64931c3a04ab9fcf1f5d292fe57e3 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Feb 2025 18:44:27 +0100
Subject: [PATCH 037/132] GO-4459: Add block creation error in object service
---
core/api/internal/object/service.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index b3fd83b8b..30844316b 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -28,6 +28,7 @@ var (
ErrInputMissingSource = errors.New("source is missing for bookmark")
ErrFailedSetRelationFeatured = errors.New("failed to set relation featured")
ErrFailedFetchBookmark = errors.New("failed to fetch bookmark")
+ ErrFailedCreateBlock = errors.New("failed to create block")
ErrFailedPasteBody = errors.New("failed to paste body")
// types
@@ -262,7 +263,7 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques
if blockCreateResp.Error.Code != pb.RpcBlockCreateResponseError_NULL {
object, _ := s.GetObject(ctx, spaceId, resp.ObjectId) // nolint:errcheck
- return object, ErrFailedCreateObject
+ return object, ErrFailedCreateBlock
}
blockPasteResp := s.mw.BlockPaste(ctx, &pb.RpcBlockPasteRequest{
From 45d4c1062c9bf4eba871f6c7b85092098918d60e Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 9 Mar 2025 13:52:59 +0100
Subject: [PATCH 038/132] GO-4459: Return only object id in details
---
core/api/internal/object/service.go | 8 --------
1 file changed, 8 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 30844316b..59507f41d 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -578,14 +578,6 @@ func (s *ObjectService) convertValue(key string, value *types.Value, format stri
}
return kind.NumberValue
case *types.Value_StringValue:
- if key == bundle.RelationKeyCreator.String() || key == bundle.RelationKeyLastModifiedBy.String() {
- member, err := s.spaceService.GetMember(context.Background(), details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), kind.StringValue)
- if err != nil {
- return nil
- }
- return member
- }
-
// TODO: investigate how this is possible? select option not list and not returned in further details
if format == "select" || format == "multi_select" {
return s.resolveTag(details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), kind.StringValue)
From 1568ce3e41cded3327d64f809d01a8176b451bd8 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 9 Mar 2025 13:53:34 +0100
Subject: [PATCH 039/132] GO-4459: Fix error handling in system object
retrieval
---
core/api/internal/object/service.go | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 59507f41d..656697268 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -137,11 +137,11 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
ObjectId: objectId,
})
- if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND || resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue() {
+ if resp.Error != nil && resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND || resp.ObjectView != nil && resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue() {
return Object{}, ErrObjectNotFound
}
- if resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ if resp.Error != nil && resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
return Object{}, ErrFailedRetrieveObject
}
@@ -521,6 +521,8 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
bundle.RelationKeyBacklinks.String(): true,
bundle.RelationKeySourceObject.String(): true,
bundle.RelationKeyLayoutAlign.String(): true,
+ bundle.RelationKeyIsHiddenDiscovery.String(): true,
+ bundle.RelationKeyLayout.String(): true,
}
var details []Detail
From 9a58c7947bbc718c36b3d5bbc4debbedec587227 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 10 Mar 2025 19:53:08 +0100
Subject: [PATCH 040/132] GO-4459: Structure icon in space, member, object,
type, template
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 44 +++++++-----
core/api/internal/object/model.go | 54 ++++++++-------
core/api/internal/object/service.go | 39 ++++++-----
core/api/internal/object/service_test.go | 58 ++++------------
core/api/internal/search/service_test.go | 86 ++++++------------------
core/api/internal/space/model.go | 56 ++++++++-------
core/api/internal/space/service.go | 12 ++--
core/api/internal/space/service_test.go | 5 +-
core/api/util/util.go | 46 ++++++++++---
11 files changed, 191 insertions(+), 213 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 5698574b8..aeda32eb3 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"description":"The icon of the template","example":"📄","type":"string"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"description":"The icon of the type","example":"📄","type":"string"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"description":"The icon of the member","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100","type":"string"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"description":"The icon of the space","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.FileReference":{"description":"The file of the icon","properties":{"url":{"example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"$ref":"#/components/schemas/util.FileReference"},"type":{"description":"The type of the icon","enum":["emoji","file"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 903f69158..209a9fb85 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"description":"The icon of the template","example":"📄","type":"string"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"description":"The icon of the type","example":"📄","type":"string"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"description":"The icon of the member","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100","type":"string"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"description":"The icon of the space","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.FileReference":{"description":"The file of the icon","properties":{"url":{"example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"$ref":"#/components/schemas/util.FileReference"},"type":{"description":"The type of the icon","enum":["emoji","file"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 13e0363eb..6f963b184 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -164,9 +164,7 @@ components:
type: array
uniqueItems: false
icon:
- description: The icon of the object
- example: "\U0001F4C4"
- type: string
+ $ref: '#/components/schemas/util.Icon'
id:
description: The id of the object
example: bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ
@@ -214,9 +212,7 @@ components:
description: The template
properties:
icon:
- description: The icon of the template
- example: "\U0001F4C4"
- type: string
+ $ref: '#/components/schemas/util.Icon'
id:
description: The id of the template
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
@@ -278,9 +274,7 @@ components:
description: The type of the object
properties:
icon:
- description: The icon of the type
- example: "\U0001F4C4"
- type: string
+ $ref: '#/components/schemas/util.Icon'
id:
description: The id of the type
example: bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu
@@ -439,9 +433,7 @@ components:
example: john.any
type: string
icon:
- description: The icon of the member
- example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100
- type: string
+ $ref: '#/components/schemas/util.Icon'
id:
description: The profile object id of the member
example: _participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ
@@ -501,9 +493,7 @@ components:
example: bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya
type: string
icon:
- description: The icon of the space
- example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
- type: string
+ $ref: '#/components/schemas/util.Icon'
id:
description: The id of the space
example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
@@ -559,6 +549,13 @@ components:
space:
$ref: '#/components/schemas/space.Space'
type: object
+ util.FileReference:
+ description: The file of the icon
+ properties:
+ url:
+ example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
+ type: string
+ type: object
util.ForbiddenError:
properties:
error:
@@ -568,6 +565,23 @@ components:
type: string
type: object
type: object
+ util.Icon:
+ description: The icon of the object
+ properties:
+ emoji:
+ description: The emoji of the icon
+ example: "\U0001F4C4"
+ type: string
+ file:
+ $ref: '#/components/schemas/util.FileReference'
+ type:
+ description: The type of the icon
+ enum:
+ - emoji
+ - file
+ example: emoji
+ type: string
+ type: object
util.NotFoundError:
properties:
error:
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index b83284b3c..39a1411ba 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -1,5 +1,7 @@
package object
+import "github.com/anyproto/anytype-heart/core/api/util"
+
type CreateObjectRequest struct {
Name string `json:"name" example:"My object"` // The name of the object
Icon string `json:"icon" example:"📄"` // The icon of the object
@@ -15,17 +17,17 @@ type ObjectResponse struct {
}
type Object struct {
- Object string `json:"object" example:"object"` // The data model of the object
- Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"` // The id of the object
- Name string `json:"name" example:"My object"` // The name of the object
- Icon string `json:"icon" example:"📄"` // The icon of the object
- Type Type `json:"type"` // The type of the object
- Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
- Layout string `json:"layout" example:"basic"` // The layout of the object
- SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
- RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"` // The id of the object's root
- Blocks []Block `json:"blocks"` // The blocks of the object
- Details []Detail `json:"details"` // The details of the object
+ Object string `json:"object" example:"object"` // The data model of the object
+ Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"` // The id of the object
+ Name string `json:"name" example:"My object"` // The name of the object
+ Icon util.Icon `json:"icon"` // The icon of the object
+ Type Type `json:"type"` // The type of the object
+ Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
+ Layout string `json:"layout" example:"basic"` // The layout of the object
+ SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
+ RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"` // The id of the object's root
+ Blocks []Block `json:"blocks"` // The blocks of the object
+ Details []Detail `json:"details"` // The details of the object
}
type Block struct {
@@ -40,11 +42,11 @@ type Block struct {
}
type Text struct {
- Text string `json:"text" example:"Some text..."` // The text
- Style string `json:"style" enums:"Paragraph,Header1,Header2,Header3,Header4,Quote,Code,Title,Checkbox,Marked,Numbered,Toggle,Description,Callout" example:"Paragraph"` // The style of the text
- Checked bool `json:"checked" example:"true"` // Whether the text is checked
- Color string `json:"color" example:"red"` // The color of the text
- Icon string `json:"icon" example:"📄"` // The icon of the text
+ Text string `json:"text" example:"Some text..."` // The text
+ Style string `json:"style" enums:"Paragraph,Header1,Header2,Header3,Header4,Quote,Code,Title,Checkbox,Marked,Numbered,Toggle,Description,Callout" example:"Paragraph"` // The style of the text
+ Checked bool `json:"checked" example:"true"` // Whether the text is checked
+ Color string `json:"color" example:"red"` // The color of the text
+ Icon util.Icon `json:"icon"` // The icon of the text
}
type File struct {
@@ -80,12 +82,12 @@ type TypeResponse struct {
}
type Type struct {
- Object string `json:"object" example:"type"` // The data model of the object
- Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type
- UniqueKey string `json:"unique_key" example:"ot-page"` // The unique key of the type
- Name string `json:"name" example:"Page"` // The name of the type
- Icon string `json:"icon" example:"📄"` // The icon of the type
- RecommendedLayout string `json:"recommended_layout" example:"todo"` // The recommended layout of the type
+ Object string `json:"object" example:"type"` // The data model of the object
+ Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type
+ UniqueKey string `json:"unique_key" example:"ot-page"` // The unique key of the type
+ Name string `json:"name" example:"Page"` // The name of the type
+ Icon util.Icon `json:"icon"` // The icon of the type
+ RecommendedLayout string `json:"recommended_layout" example:"todo"` // The recommended layout of the type
}
type TemplateResponse struct {
@@ -93,8 +95,8 @@ type TemplateResponse struct {
}
type Template struct {
- Object string `json:"object" example:"template"` // The data model of the object
- Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template
- Name string `json:"name" example:"My template"` // The name of the template
- Icon string `json:"icon" example:"📄"` // The icon of the template
+ Object string `json:"object" example:"template"` // The data model of the object
+ Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template
+ Name string `json:"name" example:"My template"` // The name of the template
+ Icon util.Icon `json:"icon"` // The icon of the template
}
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 656697268..cecfe461f 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -3,6 +3,7 @@ package object
import (
"context"
"errors"
+ "time"
"github.com/gogo/protobuf/types"
"github.com/iancoleman/strcase"
@@ -145,17 +146,18 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
return Object{}, ErrFailedRetrieveObject
}
- icon := util.GetIconFromEmojiOrImage(s.AccountInfo, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
+ details := resp.ObjectView.Details[0].Details.Fields
+ icon := util.GetIcon(s.AccountInfo, details[bundle.RelationKeyIconEmoji.String()].GetStringValue(), details[bundle.RelationKeyIconImage.String()].GetStringValue(), details[bundle.RelationKeyIconName.String()].GetStringValue(), details[bundle.RelationKeyIconOption.String()].GetNumberValue())
object := Object{
Object: "object",
- Id: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyId.String()].GetStringValue(),
- Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ Id: details[bundle.RelationKeyId.String()].GetStringValue(),
+ Name: details[bundle.RelationKeyName.String()].GetStringValue(),
Icon: icon,
- Type: s.getTypeFromDetails(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
- Snippet: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySnippet.String()].GetStringValue(),
- Layout: model.ObjectTypeLayout_name[int32(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
- SpaceId: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(),
+ Type: s.getTypeFromDetails(details[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
+ Snippet: details[bundle.RelationKeySnippet.String()].GetStringValue(),
+ Layout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
+ SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
RootId: resp.ObjectView.RootId,
Blocks: s.getBlocks(resp),
Details: s.getDetails(resp),
@@ -305,7 +307,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
Type: model.BlockContentDataviewSort_Asc,
},
},
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyRecommendedLayout.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconName.String(), bundle.RelationKeyIconOption.String(), bundle.RelationKeyRecommendedLayout.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
@@ -322,7 +324,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(),
UniqueKey: record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
+ Icon: util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", record.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(record.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
})
}
@@ -344,13 +346,14 @@ func (s *ObjectService) GetType(ctx context.Context, spaceId string, typeId stri
return Type{}, ErrFailedRetrieveType
}
+ details := resp.ObjectView.Details[0].Details.Fields
return Type{
Object: "type",
Id: typeId,
- UniqueKey: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
- Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
- RecommendedLayout: model.ObjectTypeLayout_name[int32(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
+ UniqueKey: details[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ Name: details[bundle.RelationKeyName.String()].GetStringValue(),
+ Icon: util.GetIcon(s.AccountInfo, details[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details[bundle.RelationKeyIconName.String()].GetStringValue(), details[bundle.RelationKeyIconOption.String()].GetNumberValue()),
+ RecommendedLayout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
}, nil
}
@@ -423,7 +426,7 @@ func (s *ObjectService) ListTemplates(ctx context.Context, spaceId string, typeI
Object: "template",
Id: templateId,
Name: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
+ Icon: util.GetIcon(s.AccountInfo, templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", "", 0),
})
}
@@ -449,7 +452,7 @@ func (s *ObjectService) GetTemplate(ctx context.Context, spaceId string, typeId
Object: "template",
Id: templateId,
Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
+ Icon: util.GetIcon(s.AccountInfo, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", "", 0),
}, nil
}
@@ -472,7 +475,7 @@ func (s *ObjectService) getTypeFromDetails(typeId string, details []*model.Objec
Id: typeId,
UniqueKey: objectTypeDetail.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: objectTypeDetail.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: objectTypeDetail.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(),
+ Icon: util.GetIcon(s.AccountInfo, objectTypeDetail.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", objectTypeDetail.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), objectTypeDetail.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(objectTypeDetail.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
}
}
@@ -576,7 +579,7 @@ func (s *ObjectService) convertValue(key string, value *types.Value, format stri
return nil
case *types.Value_NumberValue:
if format == "date" {
- return util.PosixToISO8601(kind.NumberValue)
+ return time.Unix(int64(kind.NumberValue), 0).UTC().Format(time.RFC3339)
}
return kind.NumberValue
case *types.Value_StringValue:
@@ -692,7 +695,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
Style: model.BlockContentTextStyle_name[int32(content.Text.Style)],
Checked: content.Text.Checked,
Color: content.Text.Color,
- Icon: util.GetIconFromEmojiOrImage(s.AccountInfo, content.Text.IconEmoji, content.Text.IconImage),
+ Icon: util.GetIcon(s.AccountInfo, content.Text.IconEmoji, content.Text.IconImage, "", 0),
}
case *model.BlockContentOfFile:
file = &File{
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 3df35acb7..5fc706dc7 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -9,6 +9,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/anyproto/anytype-heart/core/api/internal/space"
+ "github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
@@ -218,37 +219,6 @@ func TestObjectService_ListObjects(t *testing.T) {
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}).Once()
- // Mock participant details
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(mockedParticipantId),
- },
- },
- Keys: []string{
- bundle.RelationKeyId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
- bundle.RelationKeyIdentity.String(),
- bundle.RelationKeyGlobalName.String(),
- bundle.RelationKeyParticipantPermissions.String(),
- },
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedParticipantId),
- },
- },
- },
- }).Twice()
-
// when
objects, total, hasMore, err := fx.ListObjects(ctx, mockedSpaceId, offset, limit)
@@ -258,22 +228,22 @@ func TestObjectService_ListObjects(t *testing.T) {
require.Equal(t, mockedTypeId, objects[0].Type.Id)
require.Equal(t, mockedTypeName, objects[0].Type.Name)
require.Equal(t, mockedTypeUniqueKey, objects[0].Type.UniqueKey)
- require.Equal(t, mockedTypeIcon, objects[0].Type.Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, objects[0].Type.Icon)
require.Equal(t, mockedObjectId, objects[0].Id)
require.Equal(t, mockedObjectName, objects[0].Name)
require.Equal(t, mockedObjectSnippet, objects[0].Snippet)
- require.Equal(t, mockedObjectIcon, objects[0].Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedObjectIcon}, objects[0].Icon)
require.Equal(t, 5, len(objects[0].Details))
for _, detail := range objects[0].Details {
if detail.Id == "created_date" {
require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
} else if detail.Id == "created_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
+ require.Equal(t, mockedParticipantId, detail.Details["object"])
} else if detail.Id == "last_modified_date" {
require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
} else if detail.Id == "last_modified_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
+ require.Equal(t, mockedParticipantId, detail.Details["object"])
} else if detail.Id == "last_opened_date" {
require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["date"])
} else if detail.Id == "tags" {
@@ -391,7 +361,7 @@ func TestObjectService_GetObject(t *testing.T) {
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
bundle.RelationKeySnippet.String(): pbtypes.String(mockedObjectSnippet),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectName),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyLastModifiedDate.String(): pbtypes.Float64(999999),
bundle.RelationKeyCreatedDate.String(): pbtypes.Float64(888888),
@@ -450,11 +420,11 @@ func TestObjectService_GetObject(t *testing.T) {
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
- require.Equal(t, mockedTypeIcon, object.Type.Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, object.Type.Icon)
require.Equal(t, mockedObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
require.Equal(t, mockedObjectSnippet, object.Snippet)
- require.Equal(t, mockedObjectName, object.Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedObjectIcon}, object.Icon)
require.Equal(t, 3, len(object.Details))
for _, detail := range object.Details {
@@ -579,10 +549,10 @@ func TestObjectService_CreateObject(t *testing.T) {
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
- require.Equal(t, mockedTypeIcon, object.Type.Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, object.Type.Icon)
require.Equal(t, mockedNewObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
- require.Equal(t, mockedObjectIcon, object.Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedObjectIcon}, object.Icon)
require.Equal(t, mockedSpaceId, object.SpaceId)
})
@@ -638,7 +608,7 @@ func TestObjectService_ListTypes(t *testing.T) {
require.Equal(t, "type-1", types[0].Id)
require.Equal(t, "Type One", types[0].Name)
require.Equal(t, "type-one-key", types[0].UniqueKey)
- require.Equal(t, "🗂️", types[0].Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: "🗂️"}, types[0].Icon)
require.Equal(t, 1, total)
require.False(t, hasMore)
})
@@ -701,7 +671,7 @@ func TestObjectService_GetType(t *testing.T) {
require.Equal(t, mockedTypeId, objType.Id)
require.Equal(t, mockedTypeName, objType.Name)
require.Equal(t, mockedTypeUniqueKey, objType.UniqueKey)
- require.Equal(t, mockedTypeIcon, objType.Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, objType.Icon)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objType.RecommendedLayout)
})
@@ -783,7 +753,7 @@ func TestObjectService_ListTemplates(t *testing.T) {
require.Len(t, templates, 1)
require.Equal(t, "template-1", templates[0].Id)
require.Equal(t, "Template Name", templates[0].Name)
- require.Equal(t, "📝", templates[0].Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: "📝"}, templates[0].Icon)
require.Equal(t, 1, total)
require.False(t, hasMore)
})
@@ -843,7 +813,7 @@ func TestObjectService_GetTemplate(t *testing.T) {
require.NoError(t, err)
require.Equal(t, mockedTemplateId, template.Id)
require.Equal(t, mockedTemplateName, template.Name)
- require.Equal(t, mockedTemplateIcon, template.Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTemplateIcon}, template.Icon)
})
t.Run("template not found", func(t *testing.T) {
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 3b9d62aef..c5bcbe10f 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -10,6 +10,7 @@ import (
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/internal/space"
+ "github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
@@ -18,28 +19,23 @@ import (
)
const (
- offset = 0
- limit = 100
- techSpaceId = "tech-space-id"
- gatewayUrl = "http://localhost:31006"
- mockedSpaceId = "mocked-space-id"
- mockedSearchTerm = "mocked-search-term"
- mockedObjectId = "mocked-object-id"
- mockedObjectName = "mocked-object-name"
- mockedRootId = "mocked-root-id"
- mockedParticipantId = "mocked-participant-id"
- mockedType = "mocked-type"
- mockedTagId1 = "mocked-tag-id-1"
- mockedTagValue1 = "mocked-tag-value-1"
- mockedTagColor1 = "mocked-tag-color-1"
- mockedTagId2 = "mocked-tag-id-2"
- mockedTagValue2 = "mocked-tag-value-2"
- mockedTagColor2 = "mocked-tag-color-2"
- mockedParticipantName = "mocked-participant-name"
- mockedParticipantIcon = "mocked-participant-icon"
- mockedParticipantImage = "mocked-participant-image"
- mockedParticipantIdentity = "mocked-participant-identity"
- mockedParticipantGlobalName = "mocked-participant-global-name"
+ offset = 0
+ limit = 100
+ techSpaceId = "tech-space-id"
+ gatewayUrl = "http://localhost:31006"
+ mockedSpaceId = "mocked-space-id"
+ mockedSearchTerm = "mocked-search-term"
+ mockedObjectId = "mocked-object-id"
+ mockedObjectName = "mocked-object-name"
+ mockedRootId = "mocked-root-id"
+ mockedParticipantId = "mocked-participant-id"
+ mockedType = "mocked-type"
+ mockedTagId1 = "mocked-tag-id-1"
+ mockedTagValue1 = "mocked-tag-value-1"
+ mockedTagColor1 = "mocked-tag-color-1"
+ mockedTagId2 = "mocked-tag-id-2"
+ mockedTagValue2 = "mocked-tag-value-2"
+ mockedTagColor2 = "mocked-tag-color-2"
)
type fixture struct {
@@ -339,42 +335,6 @@ func TestSearchService_GlobalSearch(t *testing.T) {
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
}, nil).Once()
- // Mock participant details
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String(mockedParticipantId),
- },
- },
- Keys: []string{bundle.RelationKeyId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
- bundle.RelationKeyIdentity.String(),
- bundle.RelationKeyGlobalName.String(),
- bundle.RelationKeyParticipantPermissions.String(),
- },
- }).Return(&pb.RpcObjectSearchResponse{
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedParticipantId),
- bundle.RelationKeyName.String(): pbtypes.String(mockedParticipantName),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedParticipantIcon),
- bundle.RelationKeyIconImage.String(): pbtypes.String(mockedParticipantImage),
- bundle.RelationKeyIdentity.String(): pbtypes.String(mockedParticipantIdentity),
- bundle.RelationKeyGlobalName.String(): pbtypes.String(mockedParticipantGlobalName),
- bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
- },
- },
- },
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- }).Twice()
-
// Mock tag-1 open
fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
SpaceId: mockedSpaceId,
@@ -426,7 +386,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
require.Equal(t, mockedType, objects[0].Type.Id)
require.Equal(t, mockedSpaceId, objects[0].SpaceId)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objects[0].Layout)
- require.Equal(t, "🌐", objects[0].Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: "🌐"}, objects[0].Icon)
require.Equal(t, "This is a sample text block", objects[0].Blocks[2].Text.Text)
// check details
@@ -436,13 +396,9 @@ func TestSearchService_GlobalSearch(t *testing.T) {
} else if detail.Id == "last_modified_date" {
require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
} else if detail.Id == "created_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
- require.Equal(t, mockedParticipantName, detail.Details["object"].(space.Member).Name)
- require.Equal(t, gatewayUrl+"/image/"+mockedParticipantImage, detail.Details["object"].(space.Member).Icon)
- require.Equal(t, mockedParticipantIdentity, detail.Details["object"].(space.Member).Identity)
- require.Equal(t, mockedParticipantGlobalName, detail.Details["object"].(space.Member).GlobalName)
+ require.Equal(t, mockedParticipantId, detail.Details["object"])
} else if detail.Id == "last_modified_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"].(space.Member).Id)
+ require.Equal(t, mockedParticipantId, detail.Details["object"])
}
}
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index 16ebe1fb5..2edf130db 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -1,5 +1,9 @@
package space
+import (
+ "github.com/anyproto/anytype-heart/core/api/util"
+)
+
type SpaceResponse struct {
Space Space `json:"space"` // The space
}
@@ -9,25 +13,25 @@ type CreateSpaceRequest struct {
}
type Space struct {
- Object string `json:"object" example:"space"` // The data model of the object
- Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
- Name string `json:"name" example:"My Space"` // The name of the space
- Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The icon of the space
- HomeObjectId string `json:"home_object_id" example:"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"` // The id of the home object
- ArchiveObjectId string `json:"archive_object_id" example:"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"` // The id of the archive object
- ProfileObjectId string `json:"profile_object_id" example:"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"` // The id of the profile object
- MarketplaceWorkspaceId string `json:"marketplace_workspace_id" example:"_anytype_marketplace"` // The id of the marketplace workspace
- WorkspaceObjectId string `json:"workspace_object_id" example:"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"` // The id of the workspace object
- DeviceId string `json:"device_id" example:"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"` // The id of the device
- AccountSpaceId string `json:"account_space_id" example:"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"` // The id of the account space
- WidgetsId string `json:"widgets_id" example:"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"` // The id of the widgets
- SpaceViewId string `json:"space_view_id" example:"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"` // The id of the space view
- TechSpaceId string `json:"tech_space_id" example:"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"` // The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself
- GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"` // The gateway url to serve files and media
- LocalStoragePath string `json:"local_storage_path" example:"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"` // The local storage path of the account
- Timezone string `json:"timezone" example:""` // The timezone of the account
- AnalyticsId string `json:"analytics_id" example:"624aecdd-4797-4611-9d61-a2ae5f53cf1c"` // The analytics id of the account
- NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
+ Object string `json:"object" example:"space"` // The data model of the object
+ Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
+ Name string `json:"name" example:"My Space"` // The name of the space
+ Icon util.Icon `json:"icon"` // The icon of the space
+ HomeObjectId string `json:"home_object_id" example:"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"` // The id of the home object
+ ArchiveObjectId string `json:"archive_object_id" example:"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"` // The id of the archive object
+ ProfileObjectId string `json:"profile_object_id" example:"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"` // The id of the profile object
+ MarketplaceWorkspaceId string `json:"marketplace_workspace_id" example:"_anytype_marketplace"` // The id of the marketplace workspace
+ WorkspaceObjectId string `json:"workspace_object_id" example:"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"` // The id of the workspace object
+ DeviceId string `json:"device_id" example:"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"` // The id of the device
+ AccountSpaceId string `json:"account_space_id" example:"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"` // The id of the account space
+ WidgetsId string `json:"widgets_id" example:"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"` // The id of the widgets
+ SpaceViewId string `json:"space_view_id" example:"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"` // The id of the space view
+ TechSpaceId string `json:"tech_space_id" example:"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"` // The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself
+ GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"` // The gateway url to serve files and media
+ LocalStoragePath string `json:"local_storage_path" example:"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"` // The local storage path of the account
+ Timezone string `json:"timezone" example:""` // The timezone of the account
+ AnalyticsId string `json:"analytics_id" example:"624aecdd-4797-4611-9d61-a2ae5f53cf1c"` // The analytics id of the account
+ NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
}
type MemberResponse struct {
@@ -35,11 +39,11 @@ type MemberResponse struct {
}
type Member struct {
- Object string `json:"object" example:"member"` // The data model of the object
- Id string `json:"id" example:"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"` // The profile object id of the member
- Name string `json:"name" example:"John Doe"` // The name of the member
- Icon string `json:"icon" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay?width=100"` // The icon of the member
- Identity string `json:"identity" example:"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"` // The identity of the member in the network
- GlobalName string `json:"global_name" example:"john.any"` // The global name of the member in the network
- Role string `json:"role" enums:"Reader,Writer,Owner,NoPermission" example:"Owner"` // The role of the member
+ Object string `json:"object" example:"member"` // The data model of the object
+ Id string `json:"id" example:"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"` // The profile object id of the member
+ Name string `json:"name" example:"John Doe"` // The name of the member
+ Icon util.Icon `json:"icon"` // The icon of the member
+ Identity string `json:"identity" example:"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"` // The identity of the member in the network
+ GlobalName string `json:"global_name" example:"john.any"` // The global name of the member in the network
+ Role string `json:"role" enums:"Reader,Writer,Owner,NoPermission" example:"Owner"` // The role of the member
}
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index c604c863a..dfd9f4457 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -84,7 +84,7 @@ func (s *SpaceService) ListSpaces(ctx context.Context, offset int, limit int) (s
for _, record := range paginatedRecords {
name := record.Fields[bundle.RelationKeyName.String()].GetStringValue()
- icon := util.GetIconFromEmojiOrImage(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
+ icon := util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0)
workspace, err := s.getWorkspaceInfo(record.Fields[bundle.RelationKeyTargetSpaceId.String()].GetStringValue(), name, icon)
if err != nil {
@@ -128,7 +128,7 @@ func (s *SpaceService) GetSpace(ctx context.Context, spaceId string) (Space, err
}
name := resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue()
- icon := util.GetIconFromEmojiOrImage(s.AccountInfo, resp.Records[0].Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
+ icon := util.GetIcon(s.AccountInfo, resp.Records[0].Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0)
return s.getWorkspaceInfo(spaceId, name, icon)
}
@@ -156,7 +156,7 @@ func (s *SpaceService) CreateSpace(ctx context.Context, name string) (Space, err
return Space{}, ErrFailedCreateSpace
}
- return s.getWorkspaceInfo(resp.SpaceId, name, "")
+ return s.getWorkspaceInfo(resp.SpaceId, name, util.Icon{})
}
// ListMembers returns a paginated list of members in the space with the given ID.
@@ -195,7 +195,7 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
members = make([]Member, 0, len(paginatedMembers))
for _, record := range paginatedMembers {
- icon := util.GetIconFromEmojiOrImage(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
+ icon := util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0)
member := Member{
Object: "member",
@@ -236,7 +236,7 @@ func (s *SpaceService) GetMember(ctx context.Context, spaceId string, memberId s
return Member{}, ErrMemberNotFound
}
- icon := util.GetIconFromEmojiOrImage(s.AccountInfo, "", resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue())
+ icon := util.GetIcon(s.AccountInfo, "", resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0)
return Member{
Object: "member",
@@ -250,7 +250,7 @@ func (s *SpaceService) GetMember(ctx context.Context, spaceId string, memberId s
}
// getWorkspaceInfo returns the workspace info for the space with the given ID.
-func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon string) (space Space, err error) {
+func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon util.Icon) (space Space, err error) {
workspaceResponse := s.mw.WorkspaceOpen(context.Background(), &pb.RpcWorkspaceOpenRequest{
SpaceId: spaceId,
WithChat: true,
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index 6fc47af5c..267c3a3b2 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -9,6 +9,7 @@ import (
"github.com/gogo/protobuf/types"
+ "github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
@@ -127,7 +128,7 @@ func TestSpaceService_ListSpaces(t *testing.T) {
require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), spaces[0].Icon, "Icon URL does not match")
require.Equal(t, "My Workspace", spaces[1].Name)
require.Equal(t, "my-space-id", spaces[1].Id)
- require.Equal(t, "🚀", spaces[1].Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: "🚀"}, spaces[1].Icon)
require.Equal(t, 2, total)
require.False(t, hasMore)
})
@@ -281,7 +282,7 @@ func TestSpaceService_ListMembers(t *testing.T) {
require.Len(t, members, 2)
require.Equal(t, "member-1", members[0].Id)
require.Equal(t, "John Doe", members[0].Name)
- require.Equal(t, "👤", members[0].Icon)
+ require.Equal(t, util.Icon{Type: "emoji", Emoji: "👤"}, members[0].Icon)
require.Equal(t, "john.any", members[0].GlobalName)
require.Equal(t, "member-2", members[1].Id)
require.Equal(t, "Jane Doe", members[1].Name)
diff --git a/core/api/util/util.go b/core/api/util/util.go
index fdb9de1a2..cf2f8181c 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -4,7 +4,6 @@ import (
"context"
"errors"
"fmt"
- "time"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
@@ -16,24 +15,53 @@ import (
var (
ErrFailedSearchType = errors.New("failed to search for type")
ErrorTypeNotFound = errors.New("type not found")
+ iconOptionToColor = map[float64]string{
+ 1: "grey",
+ 2: "yellow",
+ 3: "orange",
+ 4: "red",
+ 5: "pink",
+ 6: "purple",
+ 7: "blue",
+ 8: "ice",
+ 9: "teal",
+ 10: "lime",
+ }
)
-func PosixToISO8601(posix float64) string {
- t := time.Unix(int64(posix), 0).UTC()
- return t.Format(time.RFC3339)
+type Icon struct {
+ Type string `json:"type" enums:"emoji,file,icon" example:"emoji"` // The type of the icon
+ Emoji string `json:"emoji,omitempty" example:"📄"` // The emoji of the icon
+ File string `json:"file,omitempty" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The file of the icon
+ Name string `json:"name,omitempty" example:"document"` // The name of the icon
+ Color string `json:"color,omitempty" example:"red"` // The color of the icon
}
-// GetIconFromEmojiOrImage returns the icon to use for the object, which can be either an emoji or an image url
-func GetIconFromEmojiOrImage(accountInfo *model.AccountInfo, iconEmoji string, iconImage string) string {
+// GetIcon returns the icon to use for the object, which can be builtin icon, emoji or file
+func GetIcon(accountInfo *model.AccountInfo, iconEmoji string, iconImage string, iconName string, iconOption float64) Icon {
+ if iconName != "" {
+ return Icon{
+ Type: "icon",
+ Name: iconName,
+ Color: iconOptionToColor[iconOption],
+ }
+ }
+
if iconEmoji != "" {
- return iconEmoji
+ return Icon{
+ Type: "emoji",
+ Emoji: iconEmoji,
+ }
}
if iconImage != "" {
- return fmt.Sprintf("%s/image/%s", accountInfo.GatewayUrl, iconImage)
+ return Icon{
+ Type: "file",
+ File: fmt.Sprintf("%s/image/%s", accountInfo.GatewayUrl, iconImage),
+ }
}
- return ""
+ return Icon{}
}
func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, uniqueKey string) (typeId string, err error) {
From 440b35e846fdc5e65d7ac45d51445bb72ce36f7e Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 13:57:35 +0100
Subject: [PATCH 041/132] GO-4459: Refactor details structure to use
DetailEntry for typed representation
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 117 +++++++++++++++++++++-----
core/api/internal/object/model.go | 20 ++++-
core/api/internal/object/service.go | 123 ++++++++++++++++++++++------
core/api/internal/search/model.go | 6 +-
6 files changed, 217 insertions(+), 53 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index aeda32eb3..2b8f6250e 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.FileReference":{"description":"The file of the icon","properties":{"url":{"example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"$ref":"#/components/schemas/util.FileReference"},"type":{"description":"The type of the icon","enum":["emoji","file"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"checkbox":{"description":"For checkbox details","example":true,"type":"boolean"},"date":{"description":"For date details","example":"2024-02-14T12:34:56Z","type":"string"},"email":{"description":"For email details","example":"example@example.com","type":"string"},"file":{"description":"For file details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"multi_select":{"description":"For multi-select details","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"number":{"description":"For number details","example":42,"type":"number"},"object":{"description":"For object details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"For phone details","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"For text details","example":"Some text","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","example":"date","type":"string"},"url":{"description":"For URL details","example":"https://example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"description":"For select details","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 209a9fb85..bdb6f7a01 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"additionalProperties":{},"description":"The details","type":"object"},"id":{"description":"The id of the detail","enum":["last_modified_date","last_modified_by","created_date","created_by","last_opened_date","tags"],"example":"last_modified_date","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"description":"The icon of the text","example":"📄","type":"string"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-note","ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.FileReference":{"description":"The file of the icon","properties":{"url":{"example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"$ref":"#/components/schemas/util.FileReference"},"type":{"description":"The type of the icon","enum":["emoji","file"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"checkbox":{"description":"For checkbox details","example":true,"type":"boolean"},"date":{"description":"For date details","example":"2024-02-14T12:34:56Z","type":"string"},"email":{"description":"For email details","example":"example@example.com","type":"string"},"file":{"description":"For file details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"multi_select":{"description":"For multi-select details","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"number":{"description":"For number details","example":42,"type":"number"},"object":{"description":"For object details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"For phone details","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"For text details","example":"Some text","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","example":"date","type":"string"},"url":{"description":"For URL details","example":"https://example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"description":"For select details","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 6f963b184..b3a7b9b8d 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -102,21 +102,77 @@ components:
object.Detail:
properties:
details:
- additionalProperties: {}
- description: The details
- type: object
+ $ref: '#/components/schemas/object.DetailEntry'
id:
description: The id of the detail
- enum:
- - last_modified_date
- - last_modified_by
- - created_date
- - created_by
- - last_opened_date
- - tags
example: last_modified_date
type: string
type: object
+ object.DetailEntry:
+ description: The details
+ properties:
+ checkbox:
+ description: For checkbox details
+ example: true
+ type: boolean
+ date:
+ description: For date details
+ example: "2024-02-14T12:34:56Z"
+ type: string
+ email:
+ description: For email details
+ example: example@example.com
+ type: string
+ file:
+ description: For file details
+ example:
+ - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
+ items:
+ type: string
+ type: array
+ uniqueItems: false
+ multi_select:
+ description: For multi-select details
+ items:
+ $ref: '#/components/schemas/object.Tag'
+ type: array
+ uniqueItems: false
+ name:
+ description: The name of the detail
+ example: Last modified date
+ type: string
+ number:
+ description: For number details
+ example: 42
+ type: number
+ object:
+ description: For object details
+ example:
+ - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
+ items:
+ type: string
+ type: array
+ uniqueItems: false
+ phone:
+ description: For phone details
+ example: "+1234567890"
+ type: string
+ select:
+ $ref: '#/components/schemas/object.Tag'
+ text:
+ description: For text details
+ example: Some text
+ type: string
+ type:
+ description: The type of the detail, which should correspond to the field
+ that is set
+ example: date
+ type: string
+ url:
+ description: For URL details
+ example: https://example.com
+ type: string
+ type: object
object.File:
description: The file of the block, if applicable
properties:
@@ -208,6 +264,22 @@ components:
id:
type: string
type: object
+ object.Tag:
+ description: For select details
+ properties:
+ color:
+ description: The color of the tag
+ example: yellow
+ type: string
+ id:
+ description: The id of the tag
+ example: bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq
+ type: string
+ name:
+ description: The name of the tag
+ example: in-progress
+ type: string
+ type: object
object.Template:
description: The template
properties:
@@ -243,9 +315,7 @@ components:
example: red
type: string
icon:
- description: The icon of the text
- example: "\U0001F4C4"
- type: string
+ $ref: '#/components/schemas/util.Icon'
style:
description: The style of the text
enum:
@@ -390,7 +460,6 @@ components:
description: The types of objects to search for, specified by unique key
or ID
example:
- - ot-note
- ot-page
- ot-678043f0cda9133be777049f
- bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q
@@ -549,13 +618,6 @@ components:
space:
$ref: '#/components/schemas/space.Space'
type: object
- util.FileReference:
- description: The file of the icon
- properties:
- url:
- example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
- type: string
- type: object
util.ForbiddenError:
properties:
error:
@@ -568,17 +630,28 @@ components:
util.Icon:
description: The icon of the object
properties:
+ color:
+ description: The color of the icon
+ example: red
+ type: string
emoji:
description: The emoji of the icon
example: "\U0001F4C4"
type: string
file:
- $ref: '#/components/schemas/util.FileReference'
+ description: The file of the icon
+ example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
+ type: string
+ name:
+ description: The name of the icon
+ example: document
+ type: string
type:
description: The type of the icon
enum:
- emoji
- file
+ - icon
example: emoji
type: string
type: object
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 39a1411ba..396803532 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -67,8 +67,24 @@ type Relation struct {
}
type Detail struct {
- Id string `json:"id" enums:"last_modified_date,last_modified_by,created_date,created_by,last_opened_date,tags" example:"last_modified_date"` // The id of the detail
- Details map[string]interface{} `json:"details"` // The details
+ Id string `json:"id" example:"last_modified_date"` // The id of the detail
+ Details DetailEntry `json:"details"` // The details
+}
+
+type DetailEntry struct {
+ Name string `json:"name" example:"Last modified date"` // The name of the detail
+ Type string `json:"type" example:"date"` // The type of the detail, which should correspond to the field that is set
+ Text string `json:"text,omitempty" example:"Some text"` // For text details
+ Number float64 `json:"number,omitempty" example:"42"` // For number details
+ Select *Tag `json:"select,omitempty"` // For select details
+ MultiSelect []Tag `json:"multi_select,omitempty"` // For multi-select details
+ Date string `json:"date,omitempty" example:"2024-02-14T12:34:56Z"` // For date details
+ File []string `json:"file,omitempty" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"` // For file details
+ Checkbox bool `json:"checkbox,omitempty" example:"true"` // For checkbox details
+ Url string `json:"url,omitempty" example:"https://example.com"` // For URL details
+ Email string `json:"email,omitempty" example:"example@example.com"` // For email details
+ Phone string `json:"phone,omitempty" example:"+1234567890"` // For phone details
+ Object []string `json:"object,omitempty" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"` // For object details
}
type Tag struct {
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index cecfe461f..6cbed6f16 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -538,13 +538,80 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
if val, ok := primaryDetailFields[key]; ok {
id, name := s.getRelation(key, resp)
format := relationFormatMap[key]
+ convertedVal := s.convertValue(key, val, format, resp.ObjectView.Details)
+
+ var entry DetailEntry
+ entry.Name = name
+ entry.Type = format
+
+ switch format {
+ case "text":
+ if str, ok := convertedVal.(string); ok {
+ entry.Text = str
+ }
+ case "number":
+ if num, ok := convertedVal.(float64); ok {
+ entry.Number = num
+ }
+ case "select":
+ if sel, ok := convertedVal.(Tag); ok {
+ entry.Select = &sel
+ }
+ case "multi_select":
+ if ms, ok := convertedVal.([]Tag); ok {
+ entry.MultiSelect = ms
+ }
+ case "date":
+ if dateStr, ok := convertedVal.(string); ok {
+ entry.Date = dateStr
+ }
+ case "file":
+ if file, ok := convertedVal.([]interface{}); ok {
+ var files []string
+ for _, v := range file {
+ if str, ok := v.(string); ok {
+ files = append(files, str)
+ }
+ }
+ entry.File = files
+ }
+ case "checkbox":
+ if cb, ok := convertedVal.(bool); ok {
+ entry.Checkbox = cb
+ }
+ case "url":
+ if url, ok := convertedVal.(string); ok {
+ entry.Url = url
+ }
+ case "email":
+ if email, ok := convertedVal.(string); ok {
+ entry.Email = email
+ }
+ case "phone":
+ if phone, ok := convertedVal.(string); ok {
+ entry.Phone = phone
+ }
+ case "object":
+ if obj, ok := convertedVal.(string); ok {
+ entry.Object = []string{obj}
+ } else if objSlice, ok := convertedVal.([]interface{}); ok {
+ var objects []string
+ for _, v := range objSlice {
+ if str, ok := v.(string); ok {
+ objects = append(objects, str)
+ }
+ }
+ entry.Object = objects
+ }
+ default:
+ if str, ok := convertedVal.(string); ok {
+ entry.Text = str
+ }
+ }
+
details = append(details, Detail{
- Id: id,
- Details: map[string]interface{}{
- "name": name,
- "type": format,
- format: s.convertValue(key, val, format, resp.ObjectView.Details),
- },
+ Id: id,
+ Details: entry,
})
}
}
@@ -553,23 +620,24 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
// getRelationName returns the relation id and relation name from the ObjectShowResponse.
func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse) (id string, name string) {
- relation, err := bundle.GetRelation(domain.RelationKey(key))
- if err != nil {
- name, err = util.ResolveRelationKeyToRelationName(s.mw, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), key)
- if err != nil {
- return key, key
- }
- return key, name
- }
-
- // special cases of relation keys and names
- if key == bundle.RelationKeyCreator.String() {
+ // Handle special cases first
+ switch key {
+ case bundle.RelationKeyCreator.String():
return "created_by", "Created By"
- } else if key == bundle.RelationKeyCreatedDate.String() {
+ case bundle.RelationKeyCreatedDate.String():
return "created_date", "Created Date"
}
- return strcase.ToSnake(key), relation.Name
+ if relation, err := bundle.GetRelation(domain.RelationKey(key)); err == nil {
+ return strcase.ToSnake(key), relation.Name
+ }
+
+ // Fallback to resolving the relation name
+ spaceId := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()
+ if name, err := util.ResolveRelationKeyToRelationName(s.mw, spaceId, key); err == nil {
+ return key, name
+ }
+ return key, key
}
// convertValue converts a protobuf types.Value into a native Go value.
@@ -584,10 +652,12 @@ func (s *ObjectService) convertValue(key string, value *types.Value, format stri
return kind.NumberValue
case *types.Value_StringValue:
// TODO: investigate how this is possible? select option not list and not returned in further details
- if format == "select" || format == "multi_select" {
+ if format == "select" {
return s.resolveTag(details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), kind.StringValue)
}
-
+ if format == "multi_select" {
+ return []Tag{s.resolveTag(details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(), kind.StringValue)}
+ }
return kind.StringValue
case *types.Value_BoolValue:
return kind.BoolValue
@@ -602,11 +672,16 @@ func (s *ObjectService) convertValue(key string, value *types.Value, format stri
for _, v := range kind.ListValue.Values {
list = append(list, s.convertValue(key, v, format, details))
}
-
- if format == "select" || format == "multi_select" {
+ if format == "select" {
+ tags := s.getTags(key, details)
+ if len(tags) > 0 {
+ return tags[0]
+ }
+ return nil
+ }
+ if format == "multi_select" {
return s.getTags(key, details)
}
-
return list
default:
return nil
diff --git a/core/api/internal/search/model.go b/core/api/internal/search/model.go
index 170933841..5cf874790 100644
--- a/core/api/internal/search/model.go
+++ b/core/api/internal/search/model.go
@@ -1,9 +1,9 @@
package search
type SearchRequest struct {
- Query string `json:"query" example:"test"` // The search term to look for in object names and snippets
- Types []string `json:"types" example:"ot-note,ot-page,ot-678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by unique key or ID
- Sort SortOptions `json:"sort"` // The sorting criteria and direction for the search results
+ Query string `json:"query" example:"test"` // The search term to look for in object names and snippets
+ Types []string `json:"types" example:"ot-page,ot-678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by unique key or ID
+ Sort SortOptions `json:"sort"` // The sorting criteria and direction for the search results
}
type SortOptions struct {
From 1a46c5b213c6bada9a424ee95b7f12fdf6ae5698 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 14:13:38 +0100
Subject: [PATCH 042/132] GO-4459: Refactor DetailEntry struct to use a oneOf
Value field for detail types
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 152 ++++++++++++++++++----------
core/api/internal/object/model.go | 60 ++++++++---
core/api/internal/object/service.go | 26 ++---
5 files changed, 162 insertions(+), 80 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 2b8f6250e..77143d82c 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"checkbox":{"description":"For checkbox details","example":true,"type":"boolean"},"date":{"description":"For date details","example":"2024-02-14T12:34:56Z","type":"string"},"email":{"description":"For email details","example":"example@example.com","type":"string"},"file":{"description":"For file details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"multi_select":{"description":"For multi-select details","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"number":{"description":"For number details","example":42,"type":"number"},"object":{"description":"For object details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"For phone details","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"For text details","example":"Some text","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","example":"date","type":"string"},"url":{"description":"For URL details","example":"https://example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"description":"For select details","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetail":{"properties":{"checkbox":{"example":true,"type":"boolean"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetail":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"value":{"description":"The value of the detail","oneOf":[{"$ref":"#/components/schemas/object.TextDetail"},{"$ref":"#/components/schemas/object.NumberDetail"},{"$ref":"#/components/schemas/object.SelectDetail"},{"$ref":"#/components/schemas/object.MultiSelectDetail"},{"$ref":"#/components/schemas/object.DateDetail"},{"$ref":"#/components/schemas/object.FileDetail"},{"$ref":"#/components/schemas/object.CheckboxDetail"},{"$ref":"#/components/schemas/object.UrlDetail"},{"$ref":"#/components/schemas/object.EmailDetail"},{"$ref":"#/components/schemas/object.PhoneDetail"},{"$ref":"#/components/schemas/object.ObjectDetail"}]}},"type":"object"},"object.EmailDetail":{"properties":{"email":{"example":"example@example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetail":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.MultiSelectDetail":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false}},"type":"object"},"object.NumberDetail":{"properties":{"number":{"example":42,"type":"number"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetail":{"properties":{"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetail":{"properties":{"phone":{"example":"+1234567890","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetail":{"properties":{"select":{"$ref":"#/components/schemas/object.Tag"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetail":{"properties":{"text":{"example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetail":{"properties":{"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index bdb6f7a01..c4920f5e9 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"checkbox":{"description":"For checkbox details","example":true,"type":"boolean"},"date":{"description":"For date details","example":"2024-02-14T12:34:56Z","type":"string"},"email":{"description":"For email details","example":"example@example.com","type":"string"},"file":{"description":"For file details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"multi_select":{"description":"For multi-select details","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"number":{"description":"For number details","example":42,"type":"number"},"object":{"description":"For object details","example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"For phone details","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"For text details","example":"Some text","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","example":"date","type":"string"},"url":{"description":"For URL details","example":"https://example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"description":"For select details","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetail":{"properties":{"checkbox":{"example":true,"type":"boolean"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetail":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"value":{"description":"The value of the detail","oneOf":[{"$ref":"#/components/schemas/object.TextDetail"},{"$ref":"#/components/schemas/object.NumberDetail"},{"$ref":"#/components/schemas/object.SelectDetail"},{"$ref":"#/components/schemas/object.MultiSelectDetail"},{"$ref":"#/components/schemas/object.DateDetail"},{"$ref":"#/components/schemas/object.FileDetail"},{"$ref":"#/components/schemas/object.CheckboxDetail"},{"$ref":"#/components/schemas/object.UrlDetail"},{"$ref":"#/components/schemas/object.EmailDetail"},{"$ref":"#/components/schemas/object.PhoneDetail"},{"$ref":"#/components/schemas/object.ObjectDetail"}]}},"type":"object"},"object.EmailDetail":{"properties":{"email":{"example":"example@example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetail":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.MultiSelectDetail":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false}},"type":"object"},"object.NumberDetail":{"properties":{"number":{"example":42,"type":"number"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetail":{"properties":{"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetail":{"properties":{"phone":{"example":"+1234567890","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetail":{"properties":{"select":{"$ref":"#/components/schemas/object.Tag"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetail":{"properties":{"text":{"example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetail":{"properties":{"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index b3a7b9b8d..94a52113b 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -68,6 +68,12 @@ components:
example: VerticalAlignTop
type: string
type: object
+ object.CheckboxDetail:
+ properties:
+ checkbox:
+ example: true
+ type: boolean
+ type: object
object.CreateObjectRequest:
properties:
body:
@@ -99,6 +105,12 @@ components:
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
type: string
type: object
+ object.DateDetail:
+ properties:
+ date:
+ example: "2024-02-14T12:34:56Z"
+ type: string
+ type: object
object.Detail:
properties:
details:
@@ -111,66 +123,46 @@ components:
object.DetailEntry:
description: The details
properties:
- checkbox:
- description: For checkbox details
- example: true
- type: boolean
- date:
- description: For date details
- example: "2024-02-14T12:34:56Z"
- type: string
- email:
- description: For email details
- example: example@example.com
- type: string
- file:
- description: For file details
- example:
- - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
- items:
- type: string
- type: array
- uniqueItems: false
- multi_select:
- description: For multi-select details
- items:
- $ref: '#/components/schemas/object.Tag'
- type: array
- uniqueItems: false
name:
description: The name of the detail
example: Last modified date
type: string
- number:
- description: For number details
- example: 42
- type: number
- object:
- description: For object details
- example:
- - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
- items:
- type: string
- type: array
- uniqueItems: false
- phone:
- description: For phone details
- example: "+1234567890"
- type: string
- select:
- $ref: '#/components/schemas/object.Tag'
- text:
- description: For text details
- example: Some text
- type: string
type:
description: The type of the detail, which should correspond to the field
that is set
+ enum:
+ - text
+ - number
+ - select
+ - multi_select
+ - date
+ - file
+ - checkbox
+ - url
+ - email
+ - phone
+ - object
example: date
type: string
- url:
- description: For URL details
- example: https://example.com
+ value:
+ description: The value of the detail
+ oneOf:
+ - $ref: '#/components/schemas/object.TextDetail'
+ - $ref: '#/components/schemas/object.NumberDetail'
+ - $ref: '#/components/schemas/object.SelectDetail'
+ - $ref: '#/components/schemas/object.MultiSelectDetail'
+ - $ref: '#/components/schemas/object.DateDetail'
+ - $ref: '#/components/schemas/object.FileDetail'
+ - $ref: '#/components/schemas/object.CheckboxDetail'
+ - $ref: '#/components/schemas/object.UrlDetail'
+ - $ref: '#/components/schemas/object.EmailDetail'
+ - $ref: '#/components/schemas/object.PhoneDetail'
+ - $ref: '#/components/schemas/object.ObjectDetail'
+ type: object
+ object.EmailDetail:
+ properties:
+ email:
+ example: example@example.com
type: string
type: object
object.File:
@@ -204,6 +196,30 @@ components:
description: The type of the file
type: string
type: object
+ object.FileDetail:
+ properties:
+ file:
+ example:
+ - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
+ items:
+ type: string
+ type: array
+ uniqueItems: false
+ type: object
+ object.MultiSelectDetail:
+ properties:
+ multi_select:
+ items:
+ $ref: '#/components/schemas/object.Tag'
+ type: array
+ uniqueItems: false
+ type: object
+ object.NumberDetail:
+ properties:
+ number:
+ example: 42
+ type: number
+ type: object
object.Object:
description: The object
properties:
@@ -253,19 +269,39 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
+ object.ObjectDetail:
+ properties:
+ object:
+ example:
+ - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
+ items:
+ type: string
+ type: array
+ uniqueItems: false
+ type: object
object.ObjectResponse:
properties:
object:
$ref: '#/components/schemas/object.Object'
type: object
+ object.PhoneDetail:
+ properties:
+ phone:
+ example: "+1234567890"
+ type: string
+ type: object
object.Relation:
description: The relation of the block, if applicable
properties:
id:
type: string
type: object
+ object.SelectDetail:
+ properties:
+ select:
+ $ref: '#/components/schemas/object.Tag'
+ type: object
object.Tag:
- description: For select details
properties:
color:
description: The color of the tag
@@ -340,6 +376,12 @@ components:
example: Some text...
type: string
type: object
+ object.TextDetail:
+ properties:
+ text:
+ example: Some text...
+ type: string
+ type: object
object.Type:
description: The type of the object
properties:
@@ -371,6 +413,12 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
+ object.UrlDetail:
+ properties:
+ url:
+ example: https://example.com
+ type: string
+ type: object
pagination.PaginatedResponse-object_Object:
properties:
data:
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 396803532..7fd24a19f 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -72,19 +72,53 @@ type Detail struct {
}
type DetailEntry struct {
- Name string `json:"name" example:"Last modified date"` // The name of the detail
- Type string `json:"type" example:"date"` // The type of the detail, which should correspond to the field that is set
- Text string `json:"text,omitempty" example:"Some text"` // For text details
- Number float64 `json:"number,omitempty" example:"42"` // For number details
- Select *Tag `json:"select,omitempty"` // For select details
- MultiSelect []Tag `json:"multi_select,omitempty"` // For multi-select details
- Date string `json:"date,omitempty" example:"2024-02-14T12:34:56Z"` // For date details
- File []string `json:"file,omitempty" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"` // For file details
- Checkbox bool `json:"checkbox,omitempty" example:"true"` // For checkbox details
- Url string `json:"url,omitempty" example:"https://example.com"` // For URL details
- Email string `json:"email,omitempty" example:"example@example.com"` // For email details
- Phone string `json:"phone,omitempty" example:"+1234567890"` // For phone details
- Object []string `json:"object,omitempty" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"` // For object details
+ Name string `json:"name" example:"Last modified date"` // The name of the detail
+ Type string `json:"type" enums:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object" example:"date"` // The type of the detail, which should correspond to the field that is set
+ Value any `json:"value" oneOf:"TextDetail,NumberDetail,SelectDetail,MultiSelectDetail,DateDetail,FileDetail,CheckboxDetail,UrlDetail,EmailDetail,PhoneDetail,ObjectDetail"` // The value of the detail
+}
+
+type TextDetail struct {
+ Text string `json:"text" example:"Some text..."`
+}
+
+type NumberDetail struct {
+ Number float64 `json:"number" example:"42"`
+}
+
+type SelectDetail struct {
+ Select *Tag `json:"select"`
+}
+
+type MultiSelectDetail struct {
+ MultiSelect []Tag `json:"multi_select"`
+}
+
+type DateDetail struct {
+ Date string `json:"date" example:"2024-02-14T12:34:56Z"`
+}
+
+type FileDetail struct {
+ File []string `json:"file" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"`
+}
+
+type CheckboxDetail struct {
+ Checkbox bool `json:"checkbox" example:"true"`
+}
+
+type UrlDetail struct {
+ Url string `json:"url" example:"https://example.com"`
+}
+
+type EmailDetail struct {
+ Email string `json:"email" example:"example@example.com"`
+}
+
+type PhoneDetail struct {
+ Phone string `json:"phone" example:"+1234567890"`
+}
+
+type ObjectDetail struct {
+ Object []string `json:"object" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"`
}
type Tag struct {
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 6cbed6f16..58a5e535b 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -547,23 +547,23 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
switch format {
case "text":
if str, ok := convertedVal.(string); ok {
- entry.Text = str
+ entry.Value = TextDetail{Text: str}
}
case "number":
if num, ok := convertedVal.(float64); ok {
- entry.Number = num
+ entry.Value = NumberDetail{Number: num}
}
case "select":
if sel, ok := convertedVal.(Tag); ok {
- entry.Select = &sel
+ entry.Value = SelectDetail{Select: &sel}
}
case "multi_select":
if ms, ok := convertedVal.([]Tag); ok {
- entry.MultiSelect = ms
+ entry.Value = MultiSelectDetail{MultiSelect: ms}
}
case "date":
if dateStr, ok := convertedVal.(string); ok {
- entry.Date = dateStr
+ entry.Value = DateDetail{Date: dateStr}
}
case "file":
if file, ok := convertedVal.([]interface{}); ok {
@@ -573,27 +573,27 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
files = append(files, str)
}
}
- entry.File = files
+ entry.Value = FileDetail{File: files}
}
case "checkbox":
if cb, ok := convertedVal.(bool); ok {
- entry.Checkbox = cb
+ entry.Value = CheckboxDetail{Checkbox: cb}
}
case "url":
if url, ok := convertedVal.(string); ok {
- entry.Url = url
+ entry.Value = UrlDetail{Url: url}
}
case "email":
if email, ok := convertedVal.(string); ok {
- entry.Email = email
+ entry.Value = EmailDetail{Email: email}
}
case "phone":
if phone, ok := convertedVal.(string); ok {
- entry.Phone = phone
+ entry.Value = PhoneDetail{Phone: phone}
}
case "object":
if obj, ok := convertedVal.(string); ok {
- entry.Object = []string{obj}
+ entry.Value = ObjectDetail{Object: []string{obj}}
} else if objSlice, ok := convertedVal.([]interface{}); ok {
var objects []string
for _, v := range objSlice {
@@ -601,11 +601,11 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
objects = append(objects, str)
}
}
- entry.Object = objects
+ entry.Value = ObjectDetail{Object: objects}
}
default:
if str, ok := convertedVal.(string); ok {
- entry.Text = str
+ entry.Value = TextDetail{Text: str}
}
}
From 93d0bf96b1056864e3258bc0c280e9db68fc8079 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 14:56:16 +0100
Subject: [PATCH 043/132] GO-4459: Flatten detail values in DetailEntry
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 163 +++++++++++++++++++---------
core/api/internal/object/model.go | 84 ++++++++++----
core/api/internal/object/service.go | 91 ++++++++++++----
5 files changed, 248 insertions(+), 94 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 77143d82c..a119d6eba 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetail":{"properties":{"checkbox":{"example":true,"type":"boolean"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetail":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"value":{"description":"The value of the detail","oneOf":[{"$ref":"#/components/schemas/object.TextDetail"},{"$ref":"#/components/schemas/object.NumberDetail"},{"$ref":"#/components/schemas/object.SelectDetail"},{"$ref":"#/components/schemas/object.MultiSelectDetail"},{"$ref":"#/components/schemas/object.DateDetail"},{"$ref":"#/components/schemas/object.FileDetail"},{"$ref":"#/components/schemas/object.CheckboxDetail"},{"$ref":"#/components/schemas/object.UrlDetail"},{"$ref":"#/components/schemas/object.EmailDetail"},{"$ref":"#/components/schemas/object.PhoneDetail"},{"$ref":"#/components/schemas/object.ObjectDetail"}]}},"type":"object"},"object.EmailDetail":{"properties":{"email":{"example":"example@example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetail":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.MultiSelectDetail":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false}},"type":"object"},"object.NumberDetail":{"properties":{"number":{"example":42,"type":"number"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetail":{"properties":{"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetail":{"properties":{"phone":{"example":"+1234567890","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetail":{"properties":{"select":{"$ref":"#/components/schemas/object.Tag"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetail":{"properties":{"text":{"example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetail":{"properties":{"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetailEntry":{"properties":{"checkbox":{"example":true,"type":"boolean"},"name":{"example":"Done","type":"string"},"type":{"enum":["checkbox"],"example":"checkbox","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetailEntry":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"},"name":{"example":"Last modified date","type":"string"},"type":{"enum":["date"],"example":"date","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"oneOf":[{"$ref":"#/components/schemas/object.TextDetailEntry"},{"$ref":"#/components/schemas/object.NumberDetailEntry"},{"$ref":"#/components/schemas/object.SelectDetailEntry"},{"$ref":"#/components/schemas/object.MultiSelectDetailEntry"},{"$ref":"#/components/schemas/object.DateDetailEntry"},{"$ref":"#/components/schemas/object.FileDetailEntry"},{"$ref":"#/components/schemas/object.CheckboxDetailEntry"},{"$ref":"#/components/schemas/object.UrlDetailEntry"},{"$ref":"#/components/schemas/object.EmailDetailEntry"},{"$ref":"#/components/schemas/object.PhoneDetailEntry"},{"$ref":"#/components/schemas/object.ObjectDetailEntry"}]},"id":{"example":"last_modified_date","type":"string"}},"type":"object"},"object.EmailDetailEntry":{"properties":{"email":{"example":"example@example.com","type":"string"},"name":{"example":"Email","type":"string"},"type":{"enum":["email"],"example":"email","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetailEntry":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"name":{"example":"File","type":"string"},"type":{"enum":["file"],"example":"file","type":"string"}},"type":"object"},"object.MultiSelectDetailEntry":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Tag","type":"string"},"type":{"enum":["multi_select"],"example":"multi_select","type":"string"}},"type":"object"},"object.NumberDetailEntry":{"properties":{"name":{"example":"Size","type":"string"},"number":{"example":42,"type":"number"},"type":{"enum":["number"],"example":"number","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetailEntry":{"properties":{"name":{"example":"Assignee","type":"string"},"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["object"],"example":"object","type":"string"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetailEntry":{"properties":{"name":{"example":"Phone","type":"string"},"phone":{"example":"+1234567890","type":"string"},"type":{"enum":["phone"],"example":"phone","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetailEntry":{"properties":{"name":{"example":"Status","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"type":{"enum":["select"],"example":"select","type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetailEntry":{"properties":{"name":{"example":"Description","type":"string"},"text":{"example":"Some text...","type":"string"},"type":{"enum":["text"],"example":"text","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetailEntry":{"properties":{"name":{"example":"URL","type":"string"},"type":{"enum":["url"],"example":"url","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index c4920f5e9..b73a1048d 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetail":{"properties":{"checkbox":{"example":true,"type":"boolean"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetail":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"$ref":"#/components/schemas/object.DetailEntry"},"id":{"description":"The id of the detail","example":"last_modified_date","type":"string"}},"type":"object"},"object.DetailEntry":{"description":"The details","properties":{"name":{"description":"The name of the detail","example":"Last modified date","type":"string"},"type":{"description":"The type of the detail, which should correspond to the field that is set","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"value":{"description":"The value of the detail","oneOf":[{"$ref":"#/components/schemas/object.TextDetail"},{"$ref":"#/components/schemas/object.NumberDetail"},{"$ref":"#/components/schemas/object.SelectDetail"},{"$ref":"#/components/schemas/object.MultiSelectDetail"},{"$ref":"#/components/schemas/object.DateDetail"},{"$ref":"#/components/schemas/object.FileDetail"},{"$ref":"#/components/schemas/object.CheckboxDetail"},{"$ref":"#/components/schemas/object.UrlDetail"},{"$ref":"#/components/schemas/object.EmailDetail"},{"$ref":"#/components/schemas/object.PhoneDetail"},{"$ref":"#/components/schemas/object.ObjectDetail"}]}},"type":"object"},"object.EmailDetail":{"properties":{"email":{"example":"example@example.com","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetail":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.MultiSelectDetail":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false}},"type":"object"},"object.NumberDetail":{"properties":{"number":{"example":42,"type":"number"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetail":{"properties":{"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetail":{"properties":{"phone":{"example":"+1234567890","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetail":{"properties":{"select":{"$ref":"#/components/schemas/object.Tag"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetail":{"properties":{"text":{"example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetail":{"properties":{"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetailEntry":{"properties":{"checkbox":{"example":true,"type":"boolean"},"name":{"example":"Done","type":"string"},"type":{"enum":["checkbox"],"example":"checkbox","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetailEntry":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"},"name":{"example":"Last modified date","type":"string"},"type":{"enum":["date"],"example":"date","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"oneOf":[{"$ref":"#/components/schemas/object.TextDetailEntry"},{"$ref":"#/components/schemas/object.NumberDetailEntry"},{"$ref":"#/components/schemas/object.SelectDetailEntry"},{"$ref":"#/components/schemas/object.MultiSelectDetailEntry"},{"$ref":"#/components/schemas/object.DateDetailEntry"},{"$ref":"#/components/schemas/object.FileDetailEntry"},{"$ref":"#/components/schemas/object.CheckboxDetailEntry"},{"$ref":"#/components/schemas/object.UrlDetailEntry"},{"$ref":"#/components/schemas/object.EmailDetailEntry"},{"$ref":"#/components/schemas/object.PhoneDetailEntry"},{"$ref":"#/components/schemas/object.ObjectDetailEntry"}]},"id":{"example":"last_modified_date","type":"string"}},"type":"object"},"object.EmailDetailEntry":{"properties":{"email":{"example":"example@example.com","type":"string"},"name":{"example":"Email","type":"string"},"type":{"enum":["email"],"example":"email","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetailEntry":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"name":{"example":"File","type":"string"},"type":{"enum":["file"],"example":"file","type":"string"}},"type":"object"},"object.MultiSelectDetailEntry":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Tag","type":"string"},"type":{"enum":["multi_select"],"example":"multi_select","type":"string"}},"type":"object"},"object.NumberDetailEntry":{"properties":{"name":{"example":"Size","type":"string"},"number":{"example":42,"type":"number"},"type":{"enum":["number"],"example":"number","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetailEntry":{"properties":{"name":{"example":"Assignee","type":"string"},"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["object"],"example":"object","type":"string"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetailEntry":{"properties":{"name":{"example":"Phone","type":"string"},"phone":{"example":"+1234567890","type":"string"},"type":{"enum":["phone"],"example":"phone","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetailEntry":{"properties":{"name":{"example":"Status","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"type":{"enum":["select"],"example":"select","type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetailEntry":{"properties":{"name":{"example":"Description","type":"string"},"text":{"example":"Some text...","type":"string"},"type":{"enum":["text"],"example":"text","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetailEntry":{"properties":{"name":{"example":"URL","type":"string"},"type":{"enum":["url"],"example":"url","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 94a52113b..46c5ce3aa 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -68,11 +68,19 @@ components:
example: VerticalAlignTop
type: string
type: object
- object.CheckboxDetail:
+ object.CheckboxDetailEntry:
properties:
checkbox:
example: true
type: boolean
+ name:
+ example: Done
+ type: string
+ type:
+ enum:
+ - checkbox
+ example: checkbox
+ type: string
type: object
object.CreateObjectRequest:
properties:
@@ -105,65 +113,52 @@ components:
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
type: string
type: object
- object.DateDetail:
+ object.DateDetailEntry:
properties:
date:
example: "2024-02-14T12:34:56Z"
type: string
+ name:
+ example: Last modified date
+ type: string
+ type:
+ enum:
+ - date
+ example: date
+ type: string
type: object
object.Detail:
properties:
details:
- $ref: '#/components/schemas/object.DetailEntry'
+ oneOf:
+ - $ref: '#/components/schemas/object.TextDetailEntry'
+ - $ref: '#/components/schemas/object.NumberDetailEntry'
+ - $ref: '#/components/schemas/object.SelectDetailEntry'
+ - $ref: '#/components/schemas/object.MultiSelectDetailEntry'
+ - $ref: '#/components/schemas/object.DateDetailEntry'
+ - $ref: '#/components/schemas/object.FileDetailEntry'
+ - $ref: '#/components/schemas/object.CheckboxDetailEntry'
+ - $ref: '#/components/schemas/object.UrlDetailEntry'
+ - $ref: '#/components/schemas/object.EmailDetailEntry'
+ - $ref: '#/components/schemas/object.PhoneDetailEntry'
+ - $ref: '#/components/schemas/object.ObjectDetailEntry'
id:
- description: The id of the detail
example: last_modified_date
type: string
type: object
- object.DetailEntry:
- description: The details
- properties:
- name:
- description: The name of the detail
- example: Last modified date
- type: string
- type:
- description: The type of the detail, which should correspond to the field
- that is set
- enum:
- - text
- - number
- - select
- - multi_select
- - date
- - file
- - checkbox
- - url
- - email
- - phone
- - object
- example: date
- type: string
- value:
- description: The value of the detail
- oneOf:
- - $ref: '#/components/schemas/object.TextDetail'
- - $ref: '#/components/schemas/object.NumberDetail'
- - $ref: '#/components/schemas/object.SelectDetail'
- - $ref: '#/components/schemas/object.MultiSelectDetail'
- - $ref: '#/components/schemas/object.DateDetail'
- - $ref: '#/components/schemas/object.FileDetail'
- - $ref: '#/components/schemas/object.CheckboxDetail'
- - $ref: '#/components/schemas/object.UrlDetail'
- - $ref: '#/components/schemas/object.EmailDetail'
- - $ref: '#/components/schemas/object.PhoneDetail'
- - $ref: '#/components/schemas/object.ObjectDetail'
- type: object
- object.EmailDetail:
+ object.EmailDetailEntry:
properties:
email:
example: example@example.com
type: string
+ name:
+ example: Email
+ type: string
+ type:
+ enum:
+ - email
+ example: email
+ type: string
type: object
object.File:
description: The file of the block, if applicable
@@ -196,7 +191,7 @@ components:
description: The type of the file
type: string
type: object
- object.FileDetail:
+ object.FileDetailEntry:
properties:
file:
example:
@@ -205,20 +200,44 @@ components:
type: string
type: array
uniqueItems: false
+ name:
+ example: File
+ type: string
+ type:
+ enum:
+ - file
+ example: file
+ type: string
type: object
- object.MultiSelectDetail:
+ object.MultiSelectDetailEntry:
properties:
multi_select:
items:
$ref: '#/components/schemas/object.Tag'
type: array
uniqueItems: false
+ name:
+ example: Tag
+ type: string
+ type:
+ enum:
+ - multi_select
+ example: multi_select
+ type: string
type: object
- object.NumberDetail:
+ object.NumberDetailEntry:
properties:
+ name:
+ example: Size
+ type: string
number:
example: 42
type: number
+ type:
+ enum:
+ - number
+ example: number
+ type: string
type: object
object.Object:
description: The object
@@ -269,8 +288,11 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
- object.ObjectDetail:
+ object.ObjectDetailEntry:
properties:
+ name:
+ example: Assignee
+ type: string
object:
example:
- '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
@@ -278,17 +300,30 @@ components:
type: string
type: array
uniqueItems: false
+ type:
+ enum:
+ - object
+ example: object
+ type: string
type: object
object.ObjectResponse:
properties:
object:
$ref: '#/components/schemas/object.Object'
type: object
- object.PhoneDetail:
+ object.PhoneDetailEntry:
properties:
+ name:
+ example: Phone
+ type: string
phone:
example: "+1234567890"
type: string
+ type:
+ enum:
+ - phone
+ example: phone
+ type: string
type: object
object.Relation:
description: The relation of the block, if applicable
@@ -296,10 +331,18 @@ components:
id:
type: string
type: object
- object.SelectDetail:
+ object.SelectDetailEntry:
properties:
+ name:
+ example: Status
+ type: string
select:
$ref: '#/components/schemas/object.Tag'
+ type:
+ enum:
+ - select
+ example: select
+ type: string
type: object
object.Tag:
properties:
@@ -376,11 +419,19 @@ components:
example: Some text...
type: string
type: object
- object.TextDetail:
+ object.TextDetailEntry:
properties:
+ name:
+ example: Description
+ type: string
text:
example: Some text...
type: string
+ type:
+ enum:
+ - text
+ example: text
+ type: string
type: object
object.Type:
description: The type of the object
@@ -413,8 +464,16 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
- object.UrlDetail:
+ object.UrlDetailEntry:
properties:
+ name:
+ example: URL
+ type: string
+ type:
+ enum:
+ - url
+ example: url
+ type: string
url:
example: https://example.com
type: string
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 7fd24a19f..19ddf66a2 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -67,60 +67,102 @@ type Relation struct {
}
type Detail struct {
- Id string `json:"id" example:"last_modified_date"` // The id of the detail
- Details DetailEntry `json:"details"` // The details
+ Id string `json:"id" example:"last_modified_date"`
+ Details DetailEntry `json:"details" oneOf:"TextDetailEntry,NumberDetailEntry,SelectDetailEntry,MultiSelectDetailEntry,DateDetailEntry,FileDetailEntry,CheckboxDetailEntry,UrlDetailEntry,EmailDetailEntry,PhoneDetailEntry,ObjectDetailEntry"`
}
-type DetailEntry struct {
- Name string `json:"name" example:"Last modified date"` // The name of the detail
- Type string `json:"type" enums:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object" example:"date"` // The type of the detail, which should correspond to the field that is set
- Value any `json:"value" oneOf:"TextDetail,NumberDetail,SelectDetail,MultiSelectDetail,DateDetail,FileDetail,CheckboxDetail,UrlDetail,EmailDetail,PhoneDetail,ObjectDetail"` // The value of the detail
+type DetailEntry interface {
+ GetType() string
}
-type TextDetail struct {
+type TextDetailEntry struct {
+ Name string `json:"name" example:"Description"`
+ Type string `json:"type" example:"text" enums:"text"`
Text string `json:"text" example:"Some text..."`
}
-type NumberDetail struct {
+func (t TextDetailEntry) GetType() string { return t.Type }
+
+type NumberDetailEntry struct {
+ Name string `json:"name" example:"Size"`
+ Type string `json:"type" example:"number" enums:"number"`
Number float64 `json:"number" example:"42"`
}
-type SelectDetail struct {
- Select *Tag `json:"select"`
+func (n NumberDetailEntry) GetType() string { return n.Type }
+
+type SelectDetailEntry struct {
+ Name string `json:"name" example:"Status"`
+ Type string `json:"type" example:"select" enums:"select"`
+ Select *Tag `json:"select"`
}
-type MultiSelectDetail struct {
- MultiSelect []Tag `json:"multi_select"`
+func (s SelectDetailEntry) GetType() string { return s.Type }
+
+type MultiSelectDetailEntry struct {
+ Name string `json:"name" example:"Tag"`
+ Type string `json:"type" example:"multi_select" enums:"multi_select"`
+ MultiSelect []Tag `json:"multi_select"`
}
-type DateDetail struct {
+func (m MultiSelectDetailEntry) GetType() string { return m.Type }
+
+type DateDetailEntry struct {
+ Name string `json:"name" example:"Last modified date"`
+ Type string `json:"type" example:"date" enums:"date"`
Date string `json:"date" example:"2024-02-14T12:34:56Z"`
}
-type FileDetail struct {
+func (d DateDetailEntry) GetType() string { return d.Type }
+
+type FileDetailEntry struct {
+ Name string `json:"name" example:"File"`
+ Type string `json:"type" example:"file" enums:"file"`
File []string `json:"file" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"`
}
-type CheckboxDetail struct {
- Checkbox bool `json:"checkbox" example:"true"`
+func (f FileDetailEntry) GetType() string { return f.Type }
+
+type CheckboxDetailEntry struct {
+ Name string `json:"name" example:"Done"`
+ Type string `json:"type" example:"checkbox" enums:"checkbox"`
+ Checkbox bool `json:"checkbox" example:"true"`
}
-type UrlDetail struct {
- Url string `json:"url" example:"https://example.com"`
+func (c CheckboxDetailEntry) GetType() string { return c.Type }
+
+type UrlDetailEntry struct {
+ Name string `json:"name" example:"URL"`
+ Type string `json:"type" example:"url" enums:"url"`
+ Url string `json:"url" example:"https://example.com"`
}
-type EmailDetail struct {
+func (u UrlDetailEntry) GetType() string { return u.Type }
+
+type EmailDetailEntry struct {
+ Name string `json:"name" example:"Email"`
+ Type string `json:"type" example:"email" enums:"email"`
Email string `json:"email" example:"example@example.com"`
}
-type PhoneDetail struct {
+func (e EmailDetailEntry) GetType() string { return e.Type }
+
+type PhoneDetailEntry struct {
+ Name string `json:"name" example:"Phone"`
+ Type string `json:"type" example:"phone" enums:"phone"`
Phone string `json:"phone" example:"+1234567890"`
}
-type ObjectDetail struct {
+func (p PhoneDetailEntry) GetType() string { return p.Type }
+
+type ObjectDetailEntry struct {
+ Name string `json:"name" example:"Assignee"`
+ Type string `json:"type" example:"object" enums:"object"`
Object []string `json:"object" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"`
}
+func (o ObjectDetailEntry) GetType() string { return o.Type }
+
type Tag struct {
Id string `json:"id" example:"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq"` // The id of the tag
Name string `json:"name" example:"in-progress"` // The name of the tag
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 58a5e535b..a4b3bd8ad 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -541,29 +541,47 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
convertedVal := s.convertValue(key, val, format, resp.ObjectView.Details)
var entry DetailEntry
- entry.Name = name
- entry.Type = format
switch format {
case "text":
if str, ok := convertedVal.(string); ok {
- entry.Value = TextDetail{Text: str}
+ entry = TextDetailEntry{
+ Name: name,
+ Type: "text",
+ Text: str,
+ }
}
case "number":
if num, ok := convertedVal.(float64); ok {
- entry.Value = NumberDetail{Number: num}
+ entry = NumberDetailEntry{
+ Name: name,
+ Type: "number",
+ Number: num,
+ }
}
case "select":
if sel, ok := convertedVal.(Tag); ok {
- entry.Value = SelectDetail{Select: &sel}
+ entry = SelectDetailEntry{
+ Name: name,
+ Type: "select",
+ Select: &sel,
+ }
}
case "multi_select":
if ms, ok := convertedVal.([]Tag); ok {
- entry.Value = MultiSelectDetail{MultiSelect: ms}
+ entry = MultiSelectDetailEntry{
+ Name: name,
+ Type: "multi_select",
+ MultiSelect: ms,
+ }
}
case "date":
if dateStr, ok := convertedVal.(string); ok {
- entry.Value = DateDetail{Date: dateStr}
+ entry = DateDetailEntry{
+ Name: name,
+ Type: "date",
+ Date: dateStr,
+ }
}
case "file":
if file, ok := convertedVal.([]interface{}); ok {
@@ -573,27 +591,51 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
files = append(files, str)
}
}
- entry.Value = FileDetail{File: files}
+ entry = FileDetailEntry{
+ Name: name,
+ Type: "file",
+ File: files,
+ }
}
case "checkbox":
if cb, ok := convertedVal.(bool); ok {
- entry.Value = CheckboxDetail{Checkbox: cb}
+ entry = CheckboxDetailEntry{
+ Name: name,
+ Type: "checkbox",
+ Checkbox: cb,
+ }
}
case "url":
if url, ok := convertedVal.(string); ok {
- entry.Value = UrlDetail{Url: url}
+ entry = UrlDetailEntry{
+ Name: name,
+ Type: "url",
+ Url: url,
+ }
}
case "email":
if email, ok := convertedVal.(string); ok {
- entry.Value = EmailDetail{Email: email}
+ entry = EmailDetailEntry{
+ Name: name,
+ Type: "email",
+ Email: email,
+ }
}
case "phone":
if phone, ok := convertedVal.(string); ok {
- entry.Value = PhoneDetail{Phone: phone}
+ entry = PhoneDetailEntry{
+ Name: name,
+ Type: "phone",
+ Phone: phone,
+ }
}
case "object":
if obj, ok := convertedVal.(string); ok {
- entry.Value = ObjectDetail{Object: []string{obj}}
+ entry = ObjectDetailEntry{
+ Name: name,
+ Type: "object",
+ Object: []string{obj},
+ }
} else if objSlice, ok := convertedVal.([]interface{}); ok {
var objects []string
for _, v := range objSlice {
@@ -601,18 +643,29 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
objects = append(objects, str)
}
}
- entry.Value = ObjectDetail{Object: objects}
+ entry = ObjectDetailEntry{
+ Name: name,
+ Type: "object",
+ Object: objects,
+ }
}
default:
if str, ok := convertedVal.(string); ok {
- entry.Value = TextDetail{Text: str}
+ entry = TextDetailEntry{
+ Name: name,
+ Type: "text",
+ Text: str,
+ }
}
}
- details = append(details, Detail{
- Id: id,
- Details: entry,
- })
+ // Only append if an entry was created.
+ if entry != nil {
+ details = append(details, Detail{
+ Id: id,
+ Details: entry,
+ })
+ }
}
}
return details
From 2629f1944af61a3d3de04d563aa51d4e230db469 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 15:40:50 +0100
Subject: [PATCH 044/132] GO-4459: Fix relation lookup error messages
---
core/api/util/util.go | 35 +++++++++++++++++++----------------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/core/api/util/util.go b/core/api/util/util.go
index cf2f8181c..fe62e5409 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -13,22 +13,25 @@ import (
)
var (
- ErrFailedSearchType = errors.New("failed to search for type")
- ErrorTypeNotFound = errors.New("type not found")
- iconOptionToColor = map[float64]string{
- 1: "grey",
- 2: "yellow",
- 3: "orange",
- 4: "red",
- 5: "pink",
- 6: "purple",
- 7: "blue",
- 8: "ice",
- 9: "teal",
- 10: "lime",
- }
+ ErrFailedSearchType = errors.New("failed to search for type")
+ ErrorTypeNotFound = errors.New("type not found")
+ ErrFailedSearchRelation = errors.New("failed to search for relation")
+ ErrorRelationNotFound = errors.New("relation not found")
)
+var iconOptionToColor = map[float64]string{
+ 1: "grey",
+ 2: "yellow",
+ 3: "orange",
+ 4: "red",
+ 5: "pink",
+ 6: "purple",
+ 7: "blue",
+ 8: "ice",
+ 9: "teal",
+ 10: "lime",
+}
+
type Icon struct {
Type string `json:"type" enums:"emoji,file,icon" example:"emoji"` // The type of the icon
Emoji string `json:"emoji,omitempty" example:"📄"` // The emoji of the icon
@@ -108,11 +111,11 @@ func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId s
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
- return "", ErrFailedSearchType
+ return "", ErrFailedSearchRelation
}
if len(resp.Records) == 0 {
- return "", ErrorTypeNotFound
+ return "", ErrorRelationNotFound
}
return resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue(), nil
From 944afa7652f89b48b2184693489a53614af0045e Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 15:41:10 +0100
Subject: [PATCH 045/132] GO-4459: Skip _missing_object details in relation
conversion
---
core/api/internal/object/service.go | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index a4b3bd8ad..1450b13ad 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -540,6 +540,16 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
format := relationFormatMap[key]
convertedVal := s.convertValue(key, val, format, resp.ObjectView.Details)
+ // Skip any detail where the value indicates a missing object.
+ if str, ok := convertedVal.(string); ok && str == "_missing_object" {
+ continue
+ }
+ if list, ok := convertedVal.([]interface{}); ok && len(list) == 1 {
+ if str, ok := list[0].(string); ok && str == "_missing_object" {
+ continue
+ }
+ }
+
var entry DetailEntry
switch format {
@@ -561,6 +571,9 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
}
case "select":
if sel, ok := convertedVal.(Tag); ok {
+ if sel.Id == "_missing_object" {
+ continue
+ }
entry = SelectDetailEntry{
Name: name,
Type: "select",
@@ -569,6 +582,9 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
}
case "multi_select":
if ms, ok := convertedVal.([]Tag); ok {
+ if len(ms) == 1 && ms[0].Id == "_missing_object" {
+ continue
+ }
entry = MultiSelectDetailEntry{
Name: name,
Type: "multi_select",
@@ -672,7 +688,7 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
}
// getRelationName returns the relation id and relation name from the ObjectShowResponse.
-func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse) (id string, name string) {
+func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse) (string, string) {
// Handle special cases first
switch key {
case bundle.RelationKeyCreator.String():
@@ -687,7 +703,7 @@ func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse)
// Fallback to resolving the relation name
spaceId := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()
- if name, err := util.ResolveRelationKeyToRelationName(s.mw, spaceId, key); err == nil {
+ if name, err2 := util.ResolveRelationKeyToRelationName(s.mw, spaceId, key); err2 == nil {
return key, name
}
return key, key
From 7bb134ee0aea07f9220886a6988f45f05ba43ea2 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 16:01:35 +0100
Subject: [PATCH 046/132] GO-4459: Fix lint by decomposing getDetails function
and improving missing object handling
---
core/api/internal/object/service.go | 336 ++++++++++++----------------
1 file changed, 148 insertions(+), 188 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 1450b13ad..c5a04027b 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -43,6 +43,47 @@ var (
ErrTemplateNotFound = errors.New("template not found")
)
+var excludedSystemRelations = map[string]bool{
+ bundle.RelationKeyId.String(): true,
+ bundle.RelationKeySpaceId.String(): true,
+ bundle.RelationKeyName.String(): true,
+ bundle.RelationKeyIconEmoji.String(): true,
+ bundle.RelationKeyIconImage.String(): true,
+ bundle.RelationKeyType.String(): true,
+ bundle.RelationKeyResolvedLayout.String(): true,
+ bundle.RelationKeyIsFavorite.String(): true,
+ bundle.RelationKeyIsArchived.String(): true,
+ bundle.RelationKeyIsDeleted.String(): true,
+ bundle.RelationKeyIsHidden.String(): true,
+ bundle.RelationKeyWorkspaceId.String(): true,
+ bundle.RelationKeyInternalFlags.String(): true,
+ bundle.RelationKeyRestrictions.String(): true,
+ bundle.RelationKeyOrigin.String(): true,
+ bundle.RelationKeySnippet.String(): true,
+ bundle.RelationKeySyncStatus.String(): true,
+ bundle.RelationKeySyncError.String(): true,
+ bundle.RelationKeySyncDate.String(): true,
+ bundle.RelationKeyCoverId.String(): true,
+ bundle.RelationKeyCoverType.String(): true,
+ bundle.RelationKeyCoverScale.String(): true,
+ bundle.RelationKeyCoverX.String(): true,
+ bundle.RelationKeyCoverY.String(): true,
+ bundle.RelationKeyMentions.String(): true,
+ bundle.RelationKeyOldAnytypeID.String(): true,
+ bundle.RelationKeySource.String(): true,
+ bundle.RelationKeySourceFilePath.String(): true,
+ bundle.RelationKeyImportType.String(): true,
+ bundle.RelationKeyTargetObjectType.String(): true,
+ bundle.RelationKeyFeaturedRelations.String(): true,
+ bundle.RelationKeySetOf.String(): true,
+ bundle.RelationKeyLinks.String(): true,
+ bundle.RelationKeyBacklinks.String(): true,
+ bundle.RelationKeySourceObject.String(): true,
+ bundle.RelationKeyLayoutAlign.String(): true,
+ bundle.RelationKeyIsHiddenDiscovery.String(): true,
+ bundle.RelationKeyLayout.String(): true,
+}
+
type Service interface {
ListObjects(ctx context.Context, spaceId string, offset int, limit int) ([]Object, int, bool, error)
GetObject(ctx context.Context, spaceId string, objectId string) (Object, error)
@@ -486,207 +527,126 @@ func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
linkedRelations := resp.ObjectView.RelationLinks
primaryDetailFields := resp.ObjectView.Details[0].Details.Fields
- // system relations to be excluded
- excludeRelations := map[string]bool{
- bundle.RelationKeyId.String(): true,
- bundle.RelationKeySpaceId.String(): true,
- bundle.RelationKeyName.String(): true,
- bundle.RelationKeyIconEmoji.String(): true,
- bundle.RelationKeyIconImage.String(): true,
- bundle.RelationKeyType.String(): true,
- bundle.RelationKeyResolvedLayout.String(): true,
- bundle.RelationKeyIsFavorite.String(): true,
- bundle.RelationKeyIsArchived.String(): true,
- bundle.RelationKeyIsDeleted.String(): true,
- bundle.RelationKeyIsHidden.String(): true,
- bundle.RelationKeyWorkspaceId.String(): true,
- bundle.RelationKeyInternalFlags.String(): true,
- bundle.RelationKeyRestrictions.String(): true,
- bundle.RelationKeyOrigin.String(): true,
- bundle.RelationKeySnippet.String(): true,
- bundle.RelationKeySyncStatus.String(): true,
- bundle.RelationKeySyncError.String(): true,
- bundle.RelationKeySyncDate.String(): true,
- bundle.RelationKeyCoverId.String(): true,
- bundle.RelationKeyCoverType.String(): true,
- bundle.RelationKeyCoverScale.String(): true,
- bundle.RelationKeyCoverX.String(): true,
- bundle.RelationKeyCoverY.String(): true,
- bundle.RelationKeyMentions.String(): true,
- bundle.RelationKeyOldAnytypeID.String(): true,
- bundle.RelationKeySource.String(): true,
- bundle.RelationKeySourceFilePath.String(): true,
- bundle.RelationKeyImportType.String(): true,
- bundle.RelationKeyTargetObjectType.String(): true,
- bundle.RelationKeyFeaturedRelations.String(): true,
- bundle.RelationKeySetOf.String(): true,
- bundle.RelationKeyLinks.String(): true,
- bundle.RelationKeyBacklinks.String(): true,
- bundle.RelationKeySourceObject.String(): true,
- bundle.RelationKeyLayoutAlign.String(): true,
- bundle.RelationKeyIsHiddenDiscovery.String(): true,
- bundle.RelationKeyLayout.String(): true,
- }
-
var details []Detail
for _, r := range linkedRelations {
key := r.Key
- if _, isExcluded := excludeRelations[key]; isExcluded {
+ if _, isExcluded := excludedSystemRelations[key]; isExcluded {
+ continue
+ }
+ if _, ok := primaryDetailFields[key]; !ok {
continue
}
- if val, ok := primaryDetailFields[key]; ok {
- id, name := s.getRelation(key, resp)
- format := relationFormatMap[key]
- convertedVal := s.convertValue(key, val, format, resp.ObjectView.Details)
+ id, name := s.getRelation(key, resp)
+ format := relationFormatMap[key]
+ convertedVal := s.convertValue(key, primaryDetailFields[key], format, resp.ObjectView.Details)
- // Skip any detail where the value indicates a missing object.
- if str, ok := convertedVal.(string); ok && str == "_missing_object" {
- continue
- }
- if list, ok := convertedVal.([]interface{}); ok && len(list) == 1 {
- if str, ok := list[0].(string); ok && str == "_missing_object" {
- continue
- }
- }
+ if s.isMissingObject(convertedVal) {
+ continue
+ }
- var entry DetailEntry
-
- switch format {
- case "text":
- if str, ok := convertedVal.(string); ok {
- entry = TextDetailEntry{
- Name: name,
- Type: "text",
- Text: str,
- }
- }
- case "number":
- if num, ok := convertedVal.(float64); ok {
- entry = NumberDetailEntry{
- Name: name,
- Type: "number",
- Number: num,
- }
- }
- case "select":
- if sel, ok := convertedVal.(Tag); ok {
- if sel.Id == "_missing_object" {
- continue
- }
- entry = SelectDetailEntry{
- Name: name,
- Type: "select",
- Select: &sel,
- }
- }
- case "multi_select":
- if ms, ok := convertedVal.([]Tag); ok {
- if len(ms) == 1 && ms[0].Id == "_missing_object" {
- continue
- }
- entry = MultiSelectDetailEntry{
- Name: name,
- Type: "multi_select",
- MultiSelect: ms,
- }
- }
- case "date":
- if dateStr, ok := convertedVal.(string); ok {
- entry = DateDetailEntry{
- Name: name,
- Type: "date",
- Date: dateStr,
- }
- }
- case "file":
- if file, ok := convertedVal.([]interface{}); ok {
- var files []string
- for _, v := range file {
- if str, ok := v.(string); ok {
- files = append(files, str)
- }
- }
- entry = FileDetailEntry{
- Name: name,
- Type: "file",
- File: files,
- }
- }
- case "checkbox":
- if cb, ok := convertedVal.(bool); ok {
- entry = CheckboxDetailEntry{
- Name: name,
- Type: "checkbox",
- Checkbox: cb,
- }
- }
- case "url":
- if url, ok := convertedVal.(string); ok {
- entry = UrlDetailEntry{
- Name: name,
- Type: "url",
- Url: url,
- }
- }
- case "email":
- if email, ok := convertedVal.(string); ok {
- entry = EmailDetailEntry{
- Name: name,
- Type: "email",
- Email: email,
- }
- }
- case "phone":
- if phone, ok := convertedVal.(string); ok {
- entry = PhoneDetailEntry{
- Name: name,
- Type: "phone",
- Phone: phone,
- }
- }
- case "object":
- if obj, ok := convertedVal.(string); ok {
- entry = ObjectDetailEntry{
- Name: name,
- Type: "object",
- Object: []string{obj},
- }
- } else if objSlice, ok := convertedVal.([]interface{}); ok {
- var objects []string
- for _, v := range objSlice {
- if str, ok := v.(string); ok {
- objects = append(objects, str)
- }
- }
- entry = ObjectDetailEntry{
- Name: name,
- Type: "object",
- Object: objects,
- }
- }
- default:
- if str, ok := convertedVal.(string); ok {
- entry = TextDetailEntry{
- Name: name,
- Type: "text",
- Text: str,
- }
- }
- }
-
- // Only append if an entry was created.
- if entry != nil {
- details = append(details, Detail{
- Id: id,
- Details: entry,
- })
- }
+ entry := s.createDetailEntry(name, format, convertedVal)
+ if entry != nil {
+ details = append(details, Detail{
+ Id: id,
+ Details: entry,
+ })
}
}
+
return details
}
+// isMissingObject returns true if val indicates a "_missing_object" placeholder.
+func (s *ObjectService) isMissingObject(val interface{}) bool {
+ switch v := val.(type) {
+ case string:
+ return v == "_missing_object"
+ case []interface{}:
+ if len(v) == 1 {
+ if str, ok := v[0].(string); ok {
+ return str == "_missing_object"
+ }
+ }
+ case Tag:
+ return v.Id == "_missing_object"
+ case []Tag:
+ if len(v) == 1 && v[0].Id == "_missing_object" {
+ return true
+ }
+ }
+ return false
+}
+
+// createDetailEntry creates a DetailEntry based on the format and converted value.
+func (s *ObjectService) createDetailEntry(name, format string, val interface{}) DetailEntry {
+ switch format {
+ case "text":
+ if str, ok := val.(string); ok {
+ return TextDetailEntry{Name: name, Type: "text", Text: str}
+ }
+ case "number":
+ if num, ok := val.(float64); ok {
+ return NumberDetailEntry{Name: name, Type: "number", Number: num}
+ }
+ case "select":
+ if sel, ok := val.(Tag); ok {
+ return SelectDetailEntry{Name: name, Type: "select", Select: &sel}
+ }
+ case "multi_select":
+ if ms, ok := val.([]Tag); ok {
+ return MultiSelectDetailEntry{Name: name, Type: "multi_select", MultiSelect: ms}
+ }
+ case "date":
+ if dateStr, ok := val.(string); ok {
+ return DateDetailEntry{Name: name, Type: "date", Date: dateStr}
+ }
+ case "file":
+ if file, ok := val.([]interface{}); ok {
+ var files []string
+ for _, v := range file {
+ if str, ok := v.(string); ok {
+ files = append(files, str)
+ }
+ }
+ return FileDetailEntry{Name: name, Type: "file", File: files}
+ }
+ case "checkbox":
+ if cb, ok := val.(bool); ok {
+ return CheckboxDetailEntry{Name: name, Type: "checkbox", Checkbox: cb}
+ }
+ case "url":
+ if url, ok := val.(string); ok {
+ return UrlDetailEntry{Name: name, Type: "url", Url: url}
+ }
+ case "email":
+ if email, ok := val.(string); ok {
+ return EmailDetailEntry{Name: name, Type: "email", Email: email}
+ }
+ case "phone":
+ if phone, ok := val.(string); ok {
+ return PhoneDetailEntry{Name: name, Type: "phone", Phone: phone}
+ }
+ case "object":
+ if obj, ok := val.(string); ok {
+ return ObjectDetailEntry{Name: name, Type: "object", Object: []string{obj}}
+ } else if objSlice, ok := val.([]interface{}); ok {
+ var objects []string
+ for _, v := range objSlice {
+ if str, ok := v.(string); ok {
+ objects = append(objects, str)
+ }
+ }
+ return ObjectDetailEntry{Name: name, Type: "object", Object: objects}
+ }
+ default:
+ if str, ok := val.(string); ok {
+ return TextDetailEntry{Name: name, Type: "text", Text: str}
+ }
+ }
+ return nil
+}
+
// getRelationName returns the relation id and relation name from the ObjectShowResponse.
func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse) (string, string) {
// Handle special cases first
From 1fc01769b15322931bacfbe53d5799e2a4849f37 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 16:28:43 +0100
Subject: [PATCH 047/132] GO-4459: Fix tests for new DetailEntry interface
---
core/api/internal/object/service_test.go | 24 ++++++++++++------------
core/api/internal/search/service_test.go | 12 ++++++------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 5fc706dc7..c10f0137b 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -237,17 +237,17 @@ func TestObjectService_ListObjects(t *testing.T) {
for _, detail := range objects[0].Details {
if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
+ require.Equal(t, "1970-01-11T06:54:48Z", detail.Details.(DateDetailEntry).Date)
} else if detail.Id == "created_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"])
+ require.Equal(t, []string{mockedParticipantId}, detail.Details.(ObjectDetailEntry).Object)
} else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
+ require.Equal(t, "1970-01-12T13:46:39Z", detail.Details.(DateDetailEntry).Date)
} else if detail.Id == "last_modified_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"])
+ require.Equal(t, []string{mockedParticipantId}, detail.Details.(ObjectDetailEntry).Object)
} else if detail.Id == "last_opened_date" {
- require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["date"])
+ require.Equal(t, "1970-01-01T00:00:00Z", detail.Details.(DateDetailEntry).Date)
} else if detail.Id == "tags" {
- require.Empty(t, detail.Details["tags"])
+ require.Empty(t, detail.Details.(SelectDetailEntry).Select)
} else {
t.Errorf("unexpected detail id: %s", detail.Id)
}
@@ -429,17 +429,17 @@ func TestObjectService_GetObject(t *testing.T) {
for _, detail := range object.Details {
if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
+ require.Equal(t, "1970-01-11T06:54:48Z", detail.Details.(DateDetailEntry).Date)
} else if detail.Id == "created_by" {
- require.Empty(t, detail.Details["created_by"])
+ require.Empty(t, detail.Details.(ObjectDetailEntry).Object)
} else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
+ require.Equal(t, "1970-01-12T13:46:39Z", detail.Details.(DateDetailEntry).Date)
} else if detail.Id == "last_modified_by" {
- require.Empty(t, detail.Details["last_modified_by"])
+ require.Empty(t, detail.Details.(ObjectDetailEntry).Object)
} else if detail.Id == "last_opened_date" {
- require.Equal(t, "1970-01-01T00:00:00Z", detail.Details["date"])
+ require.Equal(t, "1970-01-01T00:00:00Z", detail.Details.(DateDetailEntry).Date)
} else if detail.Id == "tags" {
- require.Empty(t, detail.Details["tags"])
+ require.Empty(t, detail.Details.(SelectDetailEntry).Select)
} else {
t.Errorf("unexpected detail id: %s", detail.Id)
}
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index c5bcbe10f..c54e69f82 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -392,21 +392,21 @@ func TestSearchService_GlobalSearch(t *testing.T) {
// check details
for _, detail := range objects[0].Details {
if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details["date"])
+ require.Equal(t, "1970-01-11T06:54:48Z", detail.Details.(object.DateDetailEntry).Date)
} else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details["date"])
+ require.Equal(t, "1970-01-12T13:46:39Z", detail.Details.(object.DateDetailEntry).Date)
} else if detail.Id == "created_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"])
+ require.Equal(t, []string{mockedParticipantId}, detail.Details.(object.ObjectDetailEntry).Object)
} else if detail.Id == "last_modified_by" {
- require.Equal(t, mockedParticipantId, detail.Details["object"])
+ require.Equal(t, []string{mockedParticipantId}, detail.Details.(object.ObjectDetailEntry).Object)
}
}
// check tags
tags := []object.Tag{}
for _, detail := range objects[0].Details {
- if tagList, ok := detail.Details["multi_select"].([]object.Tag); ok {
- for _, tag := range tagList {
+ if tagList, ok := detail.Details.(object.MultiSelectDetailEntry); ok {
+ for _, tag := range tagList.MultiSelect {
tags = append(tags, tag)
}
}
From 5571e05fc79eef3bdc20528d014772d152dda65b Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 11 Mar 2025 21:21:38 +0100
Subject: [PATCH 048/132] GO-4459: Add separate swagger tags for 'members' and
'templates'
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 8 ++++----
core/api/internal/object/handler.go | 4 ++--
core/api/internal/space/handler.go | 4 ++--
5 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index a119d6eba..38624de87 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -9,7 +9,7 @@ const docTemplate = `{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetailEntry":{"properties":{"checkbox":{"example":true,"type":"boolean"},"name":{"example":"Done","type":"string"},"type":{"enum":["checkbox"],"example":"checkbox","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetailEntry":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"},"name":{"example":"Last modified date","type":"string"},"type":{"enum":["date"],"example":"date","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"oneOf":[{"$ref":"#/components/schemas/object.TextDetailEntry"},{"$ref":"#/components/schemas/object.NumberDetailEntry"},{"$ref":"#/components/schemas/object.SelectDetailEntry"},{"$ref":"#/components/schemas/object.MultiSelectDetailEntry"},{"$ref":"#/components/schemas/object.DateDetailEntry"},{"$ref":"#/components/schemas/object.FileDetailEntry"},{"$ref":"#/components/schemas/object.CheckboxDetailEntry"},{"$ref":"#/components/schemas/object.UrlDetailEntry"},{"$ref":"#/components/schemas/object.EmailDetailEntry"},{"$ref":"#/components/schemas/object.PhoneDetailEntry"},{"$ref":"#/components/schemas/object.ObjectDetailEntry"}]},"id":{"example":"last_modified_date","type":"string"}},"type":"object"},"object.EmailDetailEntry":{"properties":{"email":{"example":"example@example.com","type":"string"},"name":{"example":"Email","type":"string"},"type":{"enum":["email"],"example":"email","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetailEntry":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"name":{"example":"File","type":"string"},"type":{"enum":["file"],"example":"file","type":"string"}},"type":"object"},"object.MultiSelectDetailEntry":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Tag","type":"string"},"type":{"enum":["multi_select"],"example":"multi_select","type":"string"}},"type":"object"},"object.NumberDetailEntry":{"properties":{"name":{"example":"Size","type":"string"},"number":{"example":42,"type":"number"},"type":{"enum":["number"],"example":"number","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetailEntry":{"properties":{"name":{"example":"Assignee","type":"string"},"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["object"],"example":"object","type":"string"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetailEntry":{"properties":{"name":{"example":"Phone","type":"string"},"phone":{"example":"+1234567890","type":"string"},"type":{"enum":["phone"],"example":"phone","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetailEntry":{"properties":{"name":{"example":"Status","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"type":{"enum":["select"],"example":"select","type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetailEntry":{"properties":{"name":{"example":"Description","type":"string"},"text":{"example":"Some text...","type":"string"},"type":{"enum":["text"],"example":"text","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetailEntry":{"properties":{"name":{"example":"URL","type":"string"},"type":{"enum":["url"],"example":"url","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index b73a1048d..61fbac290 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -2,7 +2,7 @@
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetailEntry":{"properties":{"checkbox":{"example":true,"type":"boolean"},"name":{"example":"Done","type":"string"},"type":{"enum":["checkbox"],"example":"checkbox","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetailEntry":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"},"name":{"example":"Last modified date","type":"string"},"type":{"enum":["date"],"example":"date","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"oneOf":[{"$ref":"#/components/schemas/object.TextDetailEntry"},{"$ref":"#/components/schemas/object.NumberDetailEntry"},{"$ref":"#/components/schemas/object.SelectDetailEntry"},{"$ref":"#/components/schemas/object.MultiSelectDetailEntry"},{"$ref":"#/components/schemas/object.DateDetailEntry"},{"$ref":"#/components/schemas/object.FileDetailEntry"},{"$ref":"#/components/schemas/object.CheckboxDetailEntry"},{"$ref":"#/components/schemas/object.UrlDetailEntry"},{"$ref":"#/components/schemas/object.EmailDetailEntry"},{"$ref":"#/components/schemas/object.PhoneDetailEntry"},{"$ref":"#/components/schemas/object.ObjectDetailEntry"}]},"id":{"example":"last_modified_date","type":"string"}},"type":"object"},"object.EmailDetailEntry":{"properties":{"email":{"example":"example@example.com","type":"string"},"name":{"example":"Email","type":"string"},"type":{"enum":["email"],"example":"email","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetailEntry":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"name":{"example":"File","type":"string"},"type":{"enum":["file"],"example":"file","type":"string"}},"type":"object"},"object.MultiSelectDetailEntry":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Tag","type":"string"},"type":{"enum":["multi_select"],"example":"multi_select","type":"string"}},"type":"object"},"object.NumberDetailEntry":{"properties":{"name":{"example":"Size","type":"string"},"number":{"example":42,"type":"number"},"type":{"enum":["number"],"example":"number","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetailEntry":{"properties":{"name":{"example":"Assignee","type":"string"},"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["object"],"example":"object","type":"string"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetailEntry":{"properties":{"name":{"example":"Phone","type":"string"},"phone":{"example":"+1234567890","type":"string"},"type":{"enum":["phone"],"example":"phone","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetailEntry":{"properties":{"name":{"example":"Status","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"type":{"enum":["select"],"example":"select","type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetailEntry":{"properties":{"name":{"example":"Description","type":"string"},"text":{"example":"Some text...","type":"string"},"type":{"enum":["text"],"example":"text","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetailEntry":{"properties":{"name":{"example":"URL","type":"string"},"type":{"enum":["url"],"example":"url","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["spaces"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["spaces"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["types"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 46c5ce3aa..4c9f70447 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1167,7 +1167,7 @@ paths:
- bearerauth: []
summary: List members
tags:
- - spaces
+ - members
/spaces/{space_id}/members/{member_id}:
get:
description: Fetches detailed information about a single member within a space.
@@ -1216,7 +1216,7 @@ paths:
- bearerauth: []
summary: Get member
tags:
- - spaces
+ - members
/spaces/{space_id}/objects:
get:
description: Retrieves a paginated list of objects in the given space. The endpoint
@@ -1726,7 +1726,7 @@ paths:
- bearerauth: []
summary: List templates
tags:
- - types
+ - templates
/spaces/{space_id}/types/{type_id}/templates/{template_id}:
get:
description: Fetches full details for one template associated with a particular
@@ -1781,7 +1781,7 @@ paths:
- bearerauth: []
summary: Get template
tags:
- - types
+ - templates
/v1/spaces/{space_id}/lists/{list_id}/objects:
get:
description: Returns a paginated list of objects that are associated with a
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index c62f18768..e5fc3a76a 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -240,7 +240,7 @@ func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary List templates
// @Description This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.
-// @Tags types
+// @Tags templates
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
@@ -280,7 +280,7 @@ func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
//
// @Summary Get template
// @Description Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.
-// @Tags types
+// @Tags templates
// @Produce json
// @Param space_id path string true "Space ID"
// @Param type_id path string true "Type ID"
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index e52dcb2f6..4ed1b0fb9 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -119,7 +119,7 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary List members
// @Description Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.
-// @Tags spaces
+// @Tags members
// @Produce json
// @Param space_id path string true "Space ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
@@ -154,7 +154,7 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
//
// @Summary Get member
// @Description Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.
-// @Tags spaces
+// @Tags members
// @Produce json
// @Param space_id path string true "Space ID"
// @Param member_id path string true "Member ID"
From 9c5f2e4b30e62f3b29e1696502ffebfeeb85dde3 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 12 Mar 2025 13:06:03 +0100
Subject: [PATCH 049/132] GO-4459: Simplify filter to exclude templates from
search results through type.uniqueKey
---
core/api/internal/search/service.go | 15 ++--
core/api/internal/search/service_test.go | 97 +-----------------------
core/api/util/util.go | 3 +-
3 files changed, 11 insertions(+), 104 deletions(-)
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index dcc14c89a..0f62699b7 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -56,7 +56,7 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
allResponses := make([]*pb.RpcObjectSearchResponse, 0, len(spaces))
for _, space := range spaces {
// Resolve template type and object type IDs per space, as they are unique per space
- templateFilter := s.prepareTemplateFilter(space.Id)
+ templateFilter := s.prepareTemplateFilter()
typeFilters := s.prepareObjectTypeFilters(space.Id, request.Types)
filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, templateFilter, queryFilters, typeFilters)
@@ -117,7 +117,7 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
// Search retrieves a paginated list of objects from a specific space that match the search parameters.
func (s *SearchService) Search(ctx context.Context, spaceId string, request SearchRequest, offset int, limit int) (objects []object.Object, total int, hasMore bool, err error) {
baseFilters := s.prepareBaseFilters()
- templateFilter := s.prepareTemplateFilter(spaceId)
+ templateFilter := s.prepareTemplateFilter()
queryFilters := s.prepareQueryFilter(request.Query)
typeFilters := s.prepareObjectTypeFilters(spaceId, request.Types)
filters := s.combineFilters(model.BlockContentDataviewFilter_And, baseFilters, templateFilter, queryFilters, typeFilters)
@@ -203,18 +203,13 @@ func (s *SearchService) prepareBaseFilters() []*model.BlockContentDataviewFilter
}
// prepareTemplateFilter returns a filter that excludes templates from the search results.
-func (s *SearchService) prepareTemplateFilter(spaceId string) []*model.BlockContentDataviewFilter {
- typeId, err := util.ResolveUniqueKeyToTypeId(s.mw, spaceId, "ot-template")
- if err != nil {
- return nil
- }
-
+func (s *SearchService) prepareTemplateFilter() []*model.BlockContentDataviewFilter {
return []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyType.String(),
+ RelationKey: "type.uniqueKey",
Condition: model.BlockContentDataviewFilter_NotEqual,
- Value: pbtypes.String(typeId),
+ Value: pbtypes.String("ot-template"),
},
}
}
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index c54e69f82..65cb21fc7 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -116,28 +116,6 @@ func TestSearchService_GlobalSearch(t *testing.T) {
Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
}).Once()
- // Mock template type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String("ot-template"),
- },
- },
- Keys: []string{bundle.RelationKeyId.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedType),
- },
- },
- },
- }).Once()
-
// Mock objects in space
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
@@ -168,9 +146,9 @@ func TestSearchService_GlobalSearch(t *testing.T) {
},
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyType.String(),
+ RelationKey: "type.uniqueKey",
Condition: model.BlockContentDataviewFilter_NotEqual,
- Value: pbtypes.String(mockedType),
+ Value: pbtypes.String("ot-template"),
},
{
Operator: model.BlockContentDataviewFilter_Or,
@@ -430,28 +408,6 @@ func TestSearchService_Search(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
- // Mock template type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String("ot-template"),
- },
- },
- Keys: []string{bundle.RelationKeyId.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedType),
- },
- },
- },
- }).Once()
-
// Mock objects in space
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
@@ -482,9 +438,9 @@ func TestSearchService_Search(t *testing.T) {
},
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyType.String(),
+ RelationKey: "type.uniqueKey",
Condition: model.BlockContentDataviewFilter_NotEqual,
- Value: pbtypes.String(mockedType),
+ Value: pbtypes.String("ot-template"),
},
{
Operator: model.BlockContentDataviewFilter_Or,
@@ -581,29 +537,6 @@ func TestSearchService_Search(t *testing.T) {
// given
ctx := context.Background()
fx := newFixture(t)
-
- // Mock template type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String("ot-template"),
- },
- },
- Keys: []string{bundle.RelationKeyId.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedType),
- },
- },
- },
- }).Once()
-
fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{},
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
@@ -624,28 +557,6 @@ func TestSearchService_Search(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
- // Mock template type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String("ot-template"),
- },
- },
- Keys: []string{bundle.RelationKeyId.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedType),
- },
- },
- },
- }).Once()
-
fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_UNKNOWN_ERROR},
}).Once()
diff --git a/core/api/util/util.go b/core/api/util/util.go
index fe62e5409..5447c2d3e 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -67,8 +67,8 @@ func GetIcon(accountInfo *model.AccountInfo, iconEmoji string, iconImage string,
return Icon{}
}
+// ResolveUniqueKeyToTypeId resolves the unique key to the type's ID
func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, uniqueKey string) (typeId string, err error) {
- // Call ObjectSearch for type with unique key and return the type's ID
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
@@ -92,6 +92,7 @@ func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, u
return resp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue(), nil
}
+// ResolveRelationKeyToRelationName resolves the relation key to the relation's name
func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId string, relationKey string) (relation string, err error) {
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
From 6a1d667e44018b923428b453fd505f8c4ccb07e3 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 12 Mar 2025 18:58:41 +0100
Subject: [PATCH 050/132] GO-4459: Refactor object details to properties and
update icon
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 256 +++++++----------------
core/api/internal/object/handler.go | 2 +-
core/api/internal/object/model.go | 132 +++---------
core/api/internal/object/service.go | 135 ++++++------
core/api/internal/object/service_test.go | 68 +++---
core/api/internal/search/service_test.go | 31 ++-
core/api/internal/space/service_test.go | 8 +-
core/api/util/util.go | 29 +--
10 files changed, 237 insertions(+), 428 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 38624de87..15da18204 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetailEntry":{"properties":{"checkbox":{"example":true,"type":"boolean"},"name":{"example":"Done","type":"string"},"type":{"enum":["checkbox"],"example":"checkbox","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetailEntry":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"},"name":{"example":"Last modified date","type":"string"},"type":{"enum":["date"],"example":"date","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"oneOf":[{"$ref":"#/components/schemas/object.TextDetailEntry"},{"$ref":"#/components/schemas/object.NumberDetailEntry"},{"$ref":"#/components/schemas/object.SelectDetailEntry"},{"$ref":"#/components/schemas/object.MultiSelectDetailEntry"},{"$ref":"#/components/schemas/object.DateDetailEntry"},{"$ref":"#/components/schemas/object.FileDetailEntry"},{"$ref":"#/components/schemas/object.CheckboxDetailEntry"},{"$ref":"#/components/schemas/object.UrlDetailEntry"},{"$ref":"#/components/schemas/object.EmailDetailEntry"},{"$ref":"#/components/schemas/object.PhoneDetailEntry"},{"$ref":"#/components/schemas/object.ObjectDetailEntry"}]},"id":{"example":"last_modified_date","type":"string"}},"type":"object"},"object.EmailDetailEntry":{"properties":{"email":{"example":"example@example.com","type":"string"},"name":{"example":"Email","type":"string"},"type":{"enum":["email"],"example":"email","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetailEntry":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"name":{"example":"File","type":"string"},"type":{"enum":["file"],"example":"file","type":"string"}},"type":"object"},"object.MultiSelectDetailEntry":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Tag","type":"string"},"type":{"enum":["multi_select"],"example":"multi_select","type":"string"}},"type":"object"},"object.NumberDetailEntry":{"properties":{"name":{"example":"Size","type":"string"},"number":{"example":42,"type":"number"},"type":{"enum":["number"],"example":"number","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetailEntry":{"properties":{"name":{"example":"Assignee","type":"string"},"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["object"],"example":"object","type":"string"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetailEntry":{"properties":{"name":{"example":"Phone","type":"string"},"phone":{"example":"+1234567890","type":"string"},"type":{"enum":["phone"],"example":"phone","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetailEntry":{"properties":{"name":{"example":"Status","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"type":{"enum":["select"],"example":"select","type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetailEntry":{"properties":{"name":{"example":"Description","type":"string"},"text":{"example":"Some text...","type":"string"},"type":{"enum":["text"],"example":"text","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetailEntry":{"properties":{"name":{"example":"URL","type":"string"},"type":{"enum":["url"],"example":"url","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"example":true,"type":"boolean"},"date":{"example":"2025-02-14T12:34:56Z","type":"string"},"email":{"example":"example@example.com","type":"string"},"file":{"example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"example":"last_modified_date","type":"string"},"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Last modified date","type":"string"},"number":{"example":42,"type":"number"},"object":{"example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"example":"Some text...","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 61fbac290..18182dae9 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CheckboxDetailEntry":{"properties":{"checkbox":{"example":true,"type":"boolean"},"name":{"example":"Done","type":"string"},"type":{"enum":["checkbox"],"example":"checkbox","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.DateDetailEntry":{"properties":{"date":{"example":"2024-02-14T12:34:56Z","type":"string"},"name":{"example":"Last modified date","type":"string"},"type":{"enum":["date"],"example":"date","type":"string"}},"type":"object"},"object.Detail":{"properties":{"details":{"oneOf":[{"$ref":"#/components/schemas/object.TextDetailEntry"},{"$ref":"#/components/schemas/object.NumberDetailEntry"},{"$ref":"#/components/schemas/object.SelectDetailEntry"},{"$ref":"#/components/schemas/object.MultiSelectDetailEntry"},{"$ref":"#/components/schemas/object.DateDetailEntry"},{"$ref":"#/components/schemas/object.FileDetailEntry"},{"$ref":"#/components/schemas/object.CheckboxDetailEntry"},{"$ref":"#/components/schemas/object.UrlDetailEntry"},{"$ref":"#/components/schemas/object.EmailDetailEntry"},{"$ref":"#/components/schemas/object.PhoneDetailEntry"},{"$ref":"#/components/schemas/object.ObjectDetailEntry"}]},"id":{"example":"last_modified_date","type":"string"}},"type":"object"},"object.EmailDetailEntry":{"properties":{"email":{"example":"example@example.com","type":"string"},"name":{"example":"Email","type":"string"},"type":{"enum":["email"],"example":"email","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.FileDetailEntry":{"properties":{"file":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"name":{"example":"File","type":"string"},"type":{"enum":["file"],"example":"file","type":"string"}},"type":"object"},"object.MultiSelectDetailEntry":{"properties":{"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Tag","type":"string"},"type":{"enum":["multi_select"],"example":"multi_select","type":"string"}},"type":"object"},"object.NumberDetailEntry":{"properties":{"name":{"example":"Size","type":"string"},"number":{"example":42,"type":"number"},"type":{"enum":["number"],"example":"number","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"details":{"description":"The details of the object","items":{"$ref":"#/components/schemas/object.Detail"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectDetailEntry":{"properties":{"name":{"example":"Assignee","type":"string"},"object":{"example":["['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["object"],"example":"object","type":"string"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.PhoneDetailEntry":{"properties":{"name":{"example":"Phone","type":"string"},"phone":{"example":"+1234567890","type":"string"},"type":{"enum":["phone"],"example":"phone","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.SelectDetailEntry":{"properties":{"name":{"example":"Status","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"type":{"enum":["select"],"example":"select","type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.TextDetailEntry":{"properties":{"name":{"example":"Description","type":"string"},"text":{"example":"Some text...","type":"string"},"type":{"enum":["text"],"example":"text","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.UrlDetailEntry":{"properties":{"name":{"example":"URL","type":"string"},"type":{"enum":["url"],"example":"url","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"},"type":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"example":true,"type":"boolean"},"date":{"example":"2025-02-14T12:34:56Z","type":"string"},"email":{"example":"example@example.com","type":"string"},"file":{"example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"example":"last_modified_date","type":"string"},"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Last modified date","type":"string"},"number":{"example":42,"type":"number"},"object":{"example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"example":"Some text...","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 4c9f70447..98f3cdeeb 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -68,20 +68,6 @@ components:
example: VerticalAlignTop
type: string
type: object
- object.CheckboxDetailEntry:
- properties:
- checkbox:
- example: true
- type: boolean
- name:
- example: Done
- type: string
- type:
- enum:
- - checkbox
- example: checkbox
- type: string
- type: object
object.CreateObjectRequest:
properties:
body:
@@ -113,53 +99,6 @@ components:
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
type: string
type: object
- object.DateDetailEntry:
- properties:
- date:
- example: "2024-02-14T12:34:56Z"
- type: string
- name:
- example: Last modified date
- type: string
- type:
- enum:
- - date
- example: date
- type: string
- type: object
- object.Detail:
- properties:
- details:
- oneOf:
- - $ref: '#/components/schemas/object.TextDetailEntry'
- - $ref: '#/components/schemas/object.NumberDetailEntry'
- - $ref: '#/components/schemas/object.SelectDetailEntry'
- - $ref: '#/components/schemas/object.MultiSelectDetailEntry'
- - $ref: '#/components/schemas/object.DateDetailEntry'
- - $ref: '#/components/schemas/object.FileDetailEntry'
- - $ref: '#/components/schemas/object.CheckboxDetailEntry'
- - $ref: '#/components/schemas/object.UrlDetailEntry'
- - $ref: '#/components/schemas/object.EmailDetailEntry'
- - $ref: '#/components/schemas/object.PhoneDetailEntry'
- - $ref: '#/components/schemas/object.ObjectDetailEntry'
- id:
- example: last_modified_date
- type: string
- type: object
- object.EmailDetailEntry:
- properties:
- email:
- example: example@example.com
- type: string
- name:
- example: Email
- type: string
- type:
- enum:
- - email
- example: email
- type: string
- type: object
object.File:
description: The file of the block, if applicable
properties:
@@ -191,54 +130,6 @@ components:
description: The type of the file
type: string
type: object
- object.FileDetailEntry:
- properties:
- file:
- example:
- - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
- items:
- type: string
- type: array
- uniqueItems: false
- name:
- example: File
- type: string
- type:
- enum:
- - file
- example: file
- type: string
- type: object
- object.MultiSelectDetailEntry:
- properties:
- multi_select:
- items:
- $ref: '#/components/schemas/object.Tag'
- type: array
- uniqueItems: false
- name:
- example: Tag
- type: string
- type:
- enum:
- - multi_select
- example: multi_select
- type: string
- type: object
- object.NumberDetailEntry:
- properties:
- name:
- example: Size
- type: string
- number:
- example: 42
- type: number
- type:
- enum:
- - number
- example: number
- type: string
- type: object
object.Object:
description: The object
properties:
@@ -248,12 +139,6 @@ components:
$ref: '#/components/schemas/object.Block'
type: array
uniqueItems: false
- details:
- description: The details of the object
- items:
- $ref: '#/components/schemas/object.Detail'
- type: array
- uniqueItems: false
icon:
$ref: '#/components/schemas/util.Icon'
id:
@@ -272,6 +157,12 @@ components:
description: The data model of the object
example: object
type: string
+ properties:
+ description: The properties of the object
+ items:
+ $ref: '#/components/schemas/object.Property'
+ type: array
+ uniqueItems: false
root_id:
description: The id of the object's root
example: bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u
@@ -288,41 +179,75 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
- object.ObjectDetailEntry:
- properties:
- name:
- example: Assignee
- type: string
- object:
- example:
- - '[''bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge'']'
- items:
- type: string
- type: array
- uniqueItems: false
- type:
- enum:
- - object
- example: object
- type: string
- type: object
object.ObjectResponse:
properties:
object:
$ref: '#/components/schemas/object.Object'
type: object
- object.PhoneDetailEntry:
+ object.Property:
properties:
- name:
- example: Phone
+ checkbox:
+ example: true
+ type: boolean
+ date:
+ example: "2025-02-14T12:34:56Z"
type: string
+ email:
+ example: example@example.com
+ type: string
+ file:
+ example:
+ - '[''fileId'']'
+ items:
+ type: string
+ type: array
+ uniqueItems: false
+ format:
+ enum:
+ - text
+ - number
+ - select
+ - multi_select
+ - date
+ - file
+ - checkbox
+ - url
+ - email
+ - phone
+ - object
+ example: date
+ type: string
+ id:
+ example: last_modified_date
+ type: string
+ multi_select:
+ items:
+ $ref: '#/components/schemas/object.Tag'
+ type: array
+ uniqueItems: false
+ name:
+ example: Last modified date
+ type: string
+ number:
+ example: 42
+ type: number
+ object:
+ example:
+ - '[''objectId'']'
+ items:
+ type: string
+ type: array
+ uniqueItems: false
phone:
example: "+1234567890"
type: string
- type:
- enum:
- - phone
- example: phone
+ select:
+ $ref: '#/components/schemas/object.Tag'
+ text:
+ example: Some text...
+ type: string
+ url:
+ example: https://example.com
type: string
type: object
object.Relation:
@@ -331,19 +256,6 @@ components:
id:
type: string
type: object
- object.SelectDetailEntry:
- properties:
- name:
- example: Status
- type: string
- select:
- $ref: '#/components/schemas/object.Tag'
- type:
- enum:
- - select
- example: select
- type: string
- type: object
object.Tag:
properties:
color:
@@ -419,20 +331,6 @@ components:
example: Some text...
type: string
type: object
- object.TextDetailEntry:
- properties:
- name:
- example: Description
- type: string
- text:
- example: Some text...
- type: string
- type:
- enum:
- - text
- example: text
- type: string
- type: object
object.Type:
description: The type of the object
properties:
@@ -464,20 +362,6 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
- object.UrlDetailEntry:
- properties:
- name:
- example: URL
- type: string
- type:
- enum:
- - url
- example: url
- type: string
- url:
- example: https://example.com
- type: string
- type: object
pagination.PaginatedResponse-object_Object:
properties:
data:
@@ -749,11 +633,7 @@ components:
description: The file of the icon
example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
type: string
- name:
- description: The name of the icon
- example: document
- type: string
- type:
+ format:
description: The type of the icon
enum:
- emoji
@@ -761,6 +641,10 @@ components:
- icon
example: emoji
type: string
+ name:
+ description: The name of the icon
+ example: document
+ type: string
type: object
util.NotFoundError:
properties:
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index e5fc3a76a..433a63b4f 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -150,7 +150,7 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
code := util.MapErrorCode(err,
util.ErrToCode(ErrInputMissingSource, http.StatusBadRequest),
util.ErrToCode(ErrFailedCreateObject, http.StatusInternalServerError),
- util.ErrToCode(ErrFailedSetRelationFeatured, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedSetPropertyFeatured, http.StatusInternalServerError),
util.ErrToCode(ErrFailedFetchBookmark, http.StatusInternalServerError),
util.ErrToCode(ErrObjectNotFound, http.StatusInternalServerError),
util.ErrToCode(ErrFailedRetrieveObject, http.StatusInternalServerError),
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 19ddf66a2..42a6ae897 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -17,17 +17,17 @@ type ObjectResponse struct {
}
type Object struct {
- Object string `json:"object" example:"object"` // The data model of the object
- Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"` // The id of the object
- Name string `json:"name" example:"My object"` // The name of the object
- Icon util.Icon `json:"icon"` // The icon of the object
- Type Type `json:"type"` // The type of the object
- Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
- Layout string `json:"layout" example:"basic"` // The layout of the object
- SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
- RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"` // The id of the object's root
- Blocks []Block `json:"blocks"` // The blocks of the object
- Details []Detail `json:"details"` // The details of the object
+ Object string `json:"object" example:"object"` // The data model of the object
+ Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"` // The id of the object
+ Name string `json:"name" example:"My object"` // The name of the object
+ Icon util.Icon `json:"icon"` // The icon of the object
+ Type Type `json:"type"` // The type of the object
+ Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
+ Layout string `json:"layout" example:"basic"` // The layout of the object
+ SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
+ RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"` // The id of the object's root
+ Blocks []Block `json:"blocks"` // The blocks of the object
+ Properties []Property `json:"properties"` // The properties of the object
}
type Block struct {
@@ -66,103 +66,23 @@ type Relation struct {
Id string
}
-type Detail struct {
- Id string `json:"id" example:"last_modified_date"`
- Details DetailEntry `json:"details" oneOf:"TextDetailEntry,NumberDetailEntry,SelectDetailEntry,MultiSelectDetailEntry,DateDetailEntry,FileDetailEntry,CheckboxDetailEntry,UrlDetailEntry,EmailDetailEntry,PhoneDetailEntry,ObjectDetailEntry"`
+type Property struct {
+ Id string `json:"id" example:"last_modified_date"`
+ Name string `json:"name" example:"Last modified date"`
+ Format string `json:"format" example:"date" enums:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"`
+ Text *string `json:"text,omitempty" example:"Some text..."`
+ Number *float64 `json:"number,omitempty" example:"42"`
+ Select *Tag `json:"select,omitempty"`
+ MultiSelect []Tag `json:"multi_select,omitempty"`
+ Date *string `json:"date,omitempty" example:"2025-02-14T12:34:56Z"`
+ File []string `json:"file,omitempty" example:"['fileId']"`
+ Checkbox *bool `json:"checkbox,omitempty" example:"true"`
+ Url *string `json:"url,omitempty" example:"https://example.com"`
+ Email *string `json:"email,omitempty" example:"example@example.com"`
+ Phone *string `json:"phone,omitempty" example:"+1234567890"`
+ Object []string `json:"object,omitempty" example:"['objectId']"`
}
-type DetailEntry interface {
- GetType() string
-}
-
-type TextDetailEntry struct {
- Name string `json:"name" example:"Description"`
- Type string `json:"type" example:"text" enums:"text"`
- Text string `json:"text" example:"Some text..."`
-}
-
-func (t TextDetailEntry) GetType() string { return t.Type }
-
-type NumberDetailEntry struct {
- Name string `json:"name" example:"Size"`
- Type string `json:"type" example:"number" enums:"number"`
- Number float64 `json:"number" example:"42"`
-}
-
-func (n NumberDetailEntry) GetType() string { return n.Type }
-
-type SelectDetailEntry struct {
- Name string `json:"name" example:"Status"`
- Type string `json:"type" example:"select" enums:"select"`
- Select *Tag `json:"select"`
-}
-
-func (s SelectDetailEntry) GetType() string { return s.Type }
-
-type MultiSelectDetailEntry struct {
- Name string `json:"name" example:"Tag"`
- Type string `json:"type" example:"multi_select" enums:"multi_select"`
- MultiSelect []Tag `json:"multi_select"`
-}
-
-func (m MultiSelectDetailEntry) GetType() string { return m.Type }
-
-type DateDetailEntry struct {
- Name string `json:"name" example:"Last modified date"`
- Type string `json:"type" example:"date" enums:"date"`
- Date string `json:"date" example:"2024-02-14T12:34:56Z"`
-}
-
-func (d DateDetailEntry) GetType() string { return d.Type }
-
-type FileDetailEntry struct {
- Name string `json:"name" example:"File"`
- Type string `json:"type" example:"file" enums:"file"`
- File []string `json:"file" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"`
-}
-
-func (f FileDetailEntry) GetType() string { return f.Type }
-
-type CheckboxDetailEntry struct {
- Name string `json:"name" example:"Done"`
- Type string `json:"type" example:"checkbox" enums:"checkbox"`
- Checkbox bool `json:"checkbox" example:"true"`
-}
-
-func (c CheckboxDetailEntry) GetType() string { return c.Type }
-
-type UrlDetailEntry struct {
- Name string `json:"name" example:"URL"`
- Type string `json:"type" example:"url" enums:"url"`
- Url string `json:"url" example:"https://example.com"`
-}
-
-func (u UrlDetailEntry) GetType() string { return u.Type }
-
-type EmailDetailEntry struct {
- Name string `json:"name" example:"Email"`
- Type string `json:"type" example:"email" enums:"email"`
- Email string `json:"email" example:"example@example.com"`
-}
-
-func (e EmailDetailEntry) GetType() string { return e.Type }
-
-type PhoneDetailEntry struct {
- Name string `json:"name" example:"Phone"`
- Type string `json:"type" example:"phone" enums:"phone"`
- Phone string `json:"phone" example:"+1234567890"`
-}
-
-func (p PhoneDetailEntry) GetType() string { return p.Type }
-
-type ObjectDetailEntry struct {
- Name string `json:"name" example:"Assignee"`
- Type string `json:"type" example:"object" enums:"object"`
- Object []string `json:"object" example:"['bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5iutge']"`
-}
-
-func (o ObjectDetailEntry) GetType() string { return o.Type }
-
type Tag struct {
Id string `json:"id" example:"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq"` // The id of the tag
Name string `json:"name" example:"in-progress"` // The name of the tag
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index c5a04027b..39e648320 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -27,7 +27,7 @@ var (
ErrFailedDeleteObject = errors.New("failed to delete object")
ErrFailedCreateObject = errors.New("failed to create object")
ErrInputMissingSource = errors.New("source is missing for bookmark")
- ErrFailedSetRelationFeatured = errors.New("failed to set relation featured")
+ ErrFailedSetPropertyFeatured = errors.New("failed to set property featured")
ErrFailedFetchBookmark = errors.New("failed to fetch bookmark")
ErrFailedCreateBlock = errors.New("failed to create block")
ErrFailedPasteBody = errors.New("failed to paste body")
@@ -43,7 +43,7 @@ var (
ErrTemplateNotFound = errors.New("template not found")
)
-var excludedSystemRelations = map[string]bool{
+var excludedSystemProperties = map[string]bool{
bundle.RelationKeyId.String(): true,
bundle.RelationKeySpaceId.String(): true,
bundle.RelationKeyName.String(): true,
@@ -191,17 +191,17 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
icon := util.GetIcon(s.AccountInfo, details[bundle.RelationKeyIconEmoji.String()].GetStringValue(), details[bundle.RelationKeyIconImage.String()].GetStringValue(), details[bundle.RelationKeyIconName.String()].GetStringValue(), details[bundle.RelationKeyIconOption.String()].GetNumberValue())
object := Object{
- Object: "object",
- Id: details[bundle.RelationKeyId.String()].GetStringValue(),
- Name: details[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: icon,
- Type: s.getTypeFromDetails(details[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
- Snippet: details[bundle.RelationKeySnippet.String()].GetStringValue(),
- Layout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
- SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
- RootId: resp.ObjectView.RootId,
- Blocks: s.getBlocks(resp),
- Details: s.getDetails(resp),
+ Object: "object",
+ Id: details[bundle.RelationKeyId.String()].GetStringValue(),
+ Name: details[bundle.RelationKeyName.String()].GetStringValue(),
+ Icon: icon,
+ Type: s.getTypeFromDetails(details[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
+ Snippet: details[bundle.RelationKeySnippet.String()].GetStringValue(),
+ Layout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
+ SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
+ RootId: resp.ObjectView.RootId,
+ Blocks: s.getBlocks(resp),
+ Properties: s.getProperties(resp),
}
return object, nil
@@ -263,7 +263,7 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques
if relAddFeatResp.Error.Code != pb.RpcObjectRelationAddFeaturedResponseError_NULL {
object, _ := s.GetObject(ctx, spaceId, resp.ObjectId) // nolint:errcheck
- return object, ErrFailedSetRelationFeatured
+ return object, ErrFailedSetPropertyFeatured
}
}
@@ -521,40 +521,34 @@ func (s *ObjectService) getTypeFromDetails(typeId string, details []*model.Objec
}
}
-// getDetails returns a list of details by iterating over all relations found in the RelationLinks and mapping their format and value.
-func (s *ObjectService) getDetails(resp *pb.RpcObjectShowResponse) []Detail {
- relationFormatMap := s.getRelationFormatMap(resp.ObjectView.RelationLinks)
- linkedRelations := resp.ObjectView.RelationLinks
+// getProperties returns a list of properties by iterating over all properties found in the RelationLinks and mapping their format and value.
+func (s *ObjectService) getProperties(resp *pb.RpcObjectShowResponse) []Property {
+ propertyFormatMap := s.getPropertyFormatMap(resp.ObjectView.RelationLinks)
+ linkedProperties := resp.ObjectView.RelationLinks
primaryDetailFields := resp.ObjectView.Details[0].Details.Fields
- var details []Detail
- for _, r := range linkedRelations {
+ var properties []Property
+ for _, r := range linkedProperties {
key := r.Key
- if _, isExcluded := excludedSystemRelations[key]; isExcluded {
+ if _, isExcluded := excludedSystemProperties[key]; isExcluded {
continue
}
if _, ok := primaryDetailFields[key]; !ok {
continue
}
- id, name := s.getRelation(key, resp)
- format := relationFormatMap[key]
+ id, name := s.getProperty(key, resp)
+ format := propertyFormatMap[key]
convertedVal := s.convertValue(key, primaryDetailFields[key], format, resp.ObjectView.Details)
if s.isMissingObject(convertedVal) {
continue
}
- entry := s.createDetailEntry(name, format, convertedVal)
- if entry != nil {
- details = append(details, Detail{
- Id: id,
- Details: entry,
- })
- }
+ properties = append(properties, s.buildProperty(id, name, format, convertedVal))
}
- return details
+ return properties
}
// isMissingObject returns true if val indicates a "_missing_object" placeholder.
@@ -578,58 +572,64 @@ func (s *ObjectService) isMissingObject(val interface{}) bool {
return false
}
-// createDetailEntry creates a DetailEntry based on the format and converted value.
-func (s *ObjectService) createDetailEntry(name, format string, val interface{}) DetailEntry {
+// buildProperty creates a Property based on the format and converted value.
+func (s *ObjectService) buildProperty(id string, name string, format string, val interface{}) Property {
+ prop := &Property{
+ Id: id,
+ Name: name,
+ Format: format,
+ }
+
switch format {
case "text":
if str, ok := val.(string); ok {
- return TextDetailEntry{Name: name, Type: "text", Text: str}
+ prop.Text = &str
}
case "number":
if num, ok := val.(float64); ok {
- return NumberDetailEntry{Name: name, Type: "number", Number: num}
+ prop.Number = &num
}
case "select":
if sel, ok := val.(Tag); ok {
- return SelectDetailEntry{Name: name, Type: "select", Select: &sel}
+ prop.Select = &sel
}
case "multi_select":
if ms, ok := val.([]Tag); ok {
- return MultiSelectDetailEntry{Name: name, Type: "multi_select", MultiSelect: ms}
+ prop.MultiSelect = ms
}
case "date":
if dateStr, ok := val.(string); ok {
- return DateDetailEntry{Name: name, Type: "date", Date: dateStr}
+ prop.Date = &dateStr
}
case "file":
- if file, ok := val.([]interface{}); ok {
+ if fileList, ok := val.([]interface{}); ok {
var files []string
- for _, v := range file {
+ for _, v := range fileList {
if str, ok := v.(string); ok {
files = append(files, str)
}
}
- return FileDetailEntry{Name: name, Type: "file", File: files}
+ prop.File = files
}
case "checkbox":
if cb, ok := val.(bool); ok {
- return CheckboxDetailEntry{Name: name, Type: "checkbox", Checkbox: cb}
+ prop.Checkbox = &cb
}
case "url":
- if url, ok := val.(string); ok {
- return UrlDetailEntry{Name: name, Type: "url", Url: url}
+ if urlStr, ok := val.(string); ok {
+ prop.Url = &urlStr
}
case "email":
if email, ok := val.(string); ok {
- return EmailDetailEntry{Name: name, Type: "email", Email: email}
+ prop.Email = &email
}
case "phone":
if phone, ok := val.(string); ok {
- return PhoneDetailEntry{Name: name, Type: "phone", Phone: phone}
+ prop.Phone = &phone
}
case "object":
if obj, ok := val.(string); ok {
- return ObjectDetailEntry{Name: name, Type: "object", Object: []string{obj}}
+ prop.Object = []string{obj}
} else if objSlice, ok := val.([]interface{}); ok {
var objects []string
for _, v := range objSlice {
@@ -637,18 +637,19 @@ func (s *ObjectService) createDetailEntry(name, format string, val interface{})
objects = append(objects, str)
}
}
- return ObjectDetailEntry{Name: name, Type: "object", Object: objects}
+ prop.Object = objects
}
default:
if str, ok := val.(string); ok {
- return TextDetailEntry{Name: name, Type: "text", Text: str}
+ prop.Text = &str
}
}
- return nil
+
+ return *prop
}
-// getRelationName returns the relation id and relation name from the ObjectShowResponse.
-func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse) (string, string) {
+// getProperty returns the property id and name from the ObjectShowResponse.
+func (s *ObjectService) getProperty(key string, resp *pb.RpcObjectShowResponse) (string, string) {
// Handle special cases first
switch key {
case bundle.RelationKeyCreator.String():
@@ -657,11 +658,11 @@ func (s *ObjectService) getRelation(key string, resp *pb.RpcObjectShowResponse)
return "created_date", "Created Date"
}
- if relation, err := bundle.GetRelation(domain.RelationKey(key)); err == nil {
- return strcase.ToSnake(key), relation.Name
+ if property, err := bundle.GetRelation(domain.RelationKey(key)); err == nil {
+ return strcase.ToSnake(key), property.Name
}
- // Fallback to resolving the relation name
+ // Fallback to resolving the property name
spaceId := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()
if name, err2 := util.ResolveRelationKeyToRelationName(s.mw, spaceId, key); err2 == nil {
return key, name
@@ -717,23 +718,23 @@ func (s *ObjectService) convertValue(key string, value *types.Value, format stri
}
}
-// getRelationFormatMapFromResponse returns the map of relation key to relation format from the ObjectShowResponse.
-func (s *ObjectService) getRelationFormatMap(relationLinks []*model.RelationLink) map[string]string {
- relationFormatToName := make(map[int32]string, len(model.RelationFormat_name))
+// getPropertyFormatMap returns the map of property key to property format from the ObjectShowResponse.
+func (s *ObjectService) getPropertyFormatMap(propertyLinks []*model.RelationLink) map[string]string {
+ propertyFormatToName := make(map[int32]string, len(model.RelationFormat_name))
for k, v := range model.RelationFormat_name {
- relationFormatToName[k] = v
+ propertyFormatToName[k] = v
}
- relationFormatToName[int32(model.RelationFormat_longtext)] = "text"
- relationFormatToName[int32(model.RelationFormat_shorttext)] = "text"
- relationFormatToName[int32(model.RelationFormat_tag)] = "multi_select"
- relationFormatToName[int32(model.RelationFormat_status)] = "select"
+ propertyFormatToName[int32(model.RelationFormat_longtext)] = "text"
+ propertyFormatToName[int32(model.RelationFormat_shorttext)] = "text"
+ propertyFormatToName[int32(model.RelationFormat_tag)] = "multi_select"
+ propertyFormatToName[int32(model.RelationFormat_status)] = "select"
- relationFormatMap := map[string]string{}
- for _, detail := range relationLinks {
- relationFormatMap[detail.Key] = relationFormatToName[int32(detail.Format)]
+ propertyFormatMap := map[string]string{}
+ for _, detail := range propertyLinks {
+ propertyFormatMap[detail.Key] = propertyFormatToName[int32(detail.Format)]
}
- return relationFormatMap
+ return propertyFormatMap
}
// TODO: remove once bug of select option not being returned in details is fixed
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index c10f0137b..c964f2a4d 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -228,26 +228,26 @@ func TestObjectService_ListObjects(t *testing.T) {
require.Equal(t, mockedTypeId, objects[0].Type.Id)
require.Equal(t, mockedTypeName, objects[0].Type.Name)
require.Equal(t, mockedTypeUniqueKey, objects[0].Type.UniqueKey)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, objects[0].Type.Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, objects[0].Type.Icon)
require.Equal(t, mockedObjectId, objects[0].Id)
require.Equal(t, mockedObjectName, objects[0].Name)
require.Equal(t, mockedObjectSnippet, objects[0].Snippet)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedObjectIcon}, objects[0].Icon)
- require.Equal(t, 5, len(objects[0].Details))
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedObjectIcon)}, objects[0].Icon)
+ require.Equal(t, 5, len(objects[0].Properties))
- for _, detail := range objects[0].Details {
+ for _, detail := range objects[0].Properties {
if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details.(DateDetailEntry).Date)
+ require.Equal(t, "1970-01-11T06:54:48Z", *detail.Date)
} else if detail.Id == "created_by" {
- require.Equal(t, []string{mockedParticipantId}, detail.Details.(ObjectDetailEntry).Object)
+ require.Equal(t, []string{mockedParticipantId}, detail.Object)
} else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details.(DateDetailEntry).Date)
+ require.Equal(t, "1970-01-12T13:46:39Z", *detail.Date)
} else if detail.Id == "last_modified_by" {
- require.Equal(t, []string{mockedParticipantId}, detail.Details.(ObjectDetailEntry).Object)
+ require.Equal(t, []string{mockedParticipantId}, detail.Object)
} else if detail.Id == "last_opened_date" {
- require.Equal(t, "1970-01-01T00:00:00Z", detail.Details.(DateDetailEntry).Date)
- } else if detail.Id == "tags" {
- require.Empty(t, detail.Details.(SelectDetailEntry).Select)
+ require.Equal(t, "1970-01-01T00:00:00Z", *detail.Date)
+ } else if detail.Id == "tag" {
+ require.Empty(t, detail.MultiSelect)
} else {
t.Errorf("unexpected detail id: %s", detail.Id)
}
@@ -420,28 +420,28 @@ func TestObjectService_GetObject(t *testing.T) {
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, object.Type.Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, object.Type.Icon)
require.Equal(t, mockedObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
require.Equal(t, mockedObjectSnippet, object.Snippet)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedObjectIcon}, object.Icon)
- require.Equal(t, 3, len(object.Details))
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedObjectIcon)}, object.Icon)
+ require.Equal(t, 3, len(object.Properties))
- for _, detail := range object.Details {
- if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details.(DateDetailEntry).Date)
- } else if detail.Id == "created_by" {
- require.Empty(t, detail.Details.(ObjectDetailEntry).Object)
- } else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details.(DateDetailEntry).Date)
- } else if detail.Id == "last_modified_by" {
- require.Empty(t, detail.Details.(ObjectDetailEntry).Object)
- } else if detail.Id == "last_opened_date" {
- require.Equal(t, "1970-01-01T00:00:00Z", detail.Details.(DateDetailEntry).Date)
- } else if detail.Id == "tags" {
- require.Empty(t, detail.Details.(SelectDetailEntry).Select)
+ for _, property := range object.Properties {
+ if property.Id == "created_date" {
+ require.Equal(t, "1970-01-11T06:54:48Z", *property.Date)
+ } else if property.Id == "created_by" {
+ require.Empty(t, property.Object)
+ } else if property.Id == "last_modified_date" {
+ require.Equal(t, "1970-01-12T13:46:39Z", *property.Date)
+ } else if property.Id == "last_modified_by" {
+ require.Empty(t, property.Object)
+ } else if property.Id == "last_opened_date" {
+ require.Equal(t, "1970-01-01T00:00:00Z", *property.Date)
+ } else if property.Id == "tag" {
+ require.Empty(t, property.MultiSelect)
} else {
- t.Errorf("unexpected detail id: %s", detail.Id)
+ t.Errorf("unexpected property id: %s", property.Id)
}
}
})
@@ -549,10 +549,10 @@ func TestObjectService_CreateObject(t *testing.T) {
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, object.Type.Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, object.Type.Icon)
require.Equal(t, mockedNewObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedObjectIcon}, object.Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedObjectIcon)}, object.Icon)
require.Equal(t, mockedSpaceId, object.SpaceId)
})
@@ -608,7 +608,7 @@ func TestObjectService_ListTypes(t *testing.T) {
require.Equal(t, "type-1", types[0].Id)
require.Equal(t, "Type One", types[0].Name)
require.Equal(t, "type-one-key", types[0].UniqueKey)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: "🗂️"}, types[0].Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("🗂️")}, types[0].Icon)
require.Equal(t, 1, total)
require.False(t, hasMore)
})
@@ -671,7 +671,7 @@ func TestObjectService_GetType(t *testing.T) {
require.Equal(t, mockedTypeId, objType.Id)
require.Equal(t, mockedTypeName, objType.Name)
require.Equal(t, mockedTypeUniqueKey, objType.UniqueKey)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTypeIcon}, objType.Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, objType.Icon)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objType.RecommendedLayout)
})
@@ -753,7 +753,7 @@ func TestObjectService_ListTemplates(t *testing.T) {
require.Len(t, templates, 1)
require.Equal(t, "template-1", templates[0].Id)
require.Equal(t, "Template Name", templates[0].Name)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: "📝"}, templates[0].Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("📝")}, templates[0].Icon)
require.Equal(t, 1, total)
require.False(t, hasMore)
})
@@ -813,7 +813,7 @@ func TestObjectService_GetTemplate(t *testing.T) {
require.NoError(t, err)
require.Equal(t, mockedTemplateId, template.Id)
require.Equal(t, mockedTemplateName, template.Name)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: mockedTemplateIcon}, template.Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTemplateIcon)}, template.Icon)
})
t.Run("template not found", func(t *testing.T) {
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 65cb21fc7..0430a0a32 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -27,6 +27,7 @@ const (
mockedSearchTerm = "mocked-search-term"
mockedObjectId = "mocked-object-id"
mockedObjectName = "mocked-object-name"
+ mockedObjectIcon = "🌐"
mockedRootId = "mocked-root-id"
mockedParticipantId = "mocked-participant-id"
mockedType = "mocked-type"
@@ -240,7 +241,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
bundle.RelationKeyName.String(): pbtypes.String(mockedObjectName),
bundle.RelationKeyResolvedLayout.String(): pbtypes.Int64(int64(model.ObjectType_basic)),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String("🌐"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedObjectIcon),
bundle.RelationKeyLastModifiedDate.String(): pbtypes.Float64(999999),
bundle.RelationKeyLastModifiedBy.String(): pbtypes.String(mockedParticipantId),
bundle.RelationKeyCreatedDate.String(): pbtypes.Float64(888888),
@@ -364,29 +365,27 @@ func TestSearchService_GlobalSearch(t *testing.T) {
require.Equal(t, mockedType, objects[0].Type.Id)
require.Equal(t, mockedSpaceId, objects[0].SpaceId)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objects[0].Layout)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: "🌐"}, objects[0].Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedObjectIcon)}, objects[0].Icon)
require.Equal(t, "This is a sample text block", objects[0].Blocks[2].Text.Text)
// check details
- for _, detail := range objects[0].Details {
- if detail.Id == "created_date" {
- require.Equal(t, "1970-01-11T06:54:48Z", detail.Details.(object.DateDetailEntry).Date)
- } else if detail.Id == "last_modified_date" {
- require.Equal(t, "1970-01-12T13:46:39Z", detail.Details.(object.DateDetailEntry).Date)
- } else if detail.Id == "created_by" {
- require.Equal(t, []string{mockedParticipantId}, detail.Details.(object.ObjectDetailEntry).Object)
- } else if detail.Id == "last_modified_by" {
- require.Equal(t, []string{mockedParticipantId}, detail.Details.(object.ObjectDetailEntry).Object)
+ for _, property := range objects[0].Properties {
+ if property.Id == "created_date" {
+ require.Equal(t, "1970-01-11T06:54:48Z", *property.Date)
+ } else if property.Id == "last_modified_date" {
+ require.Equal(t, "1970-01-12T13:46:39Z", *property.Date)
+ } else if property.Id == "created_by" {
+ require.Equal(t, []string{mockedParticipantId}, property.Object)
+ } else if property.Id == "last_modified_by" {
+ require.Equal(t, []string{mockedParticipantId}, property.Object)
}
}
// check tags
tags := []object.Tag{}
- for _, detail := range objects[0].Details {
- if tagList, ok := detail.Details.(object.MultiSelectDetailEntry); ok {
- for _, tag := range tagList.MultiSelect {
- tags = append(tags, tag)
- }
+ for _, detail := range objects[0].Properties {
+ for _, tag := range detail.MultiSelect {
+ tags = append(tags, tag)
}
}
require.Len(t, tags, 2)
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index 267c3a3b2..02026aad9 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -125,10 +125,10 @@ func TestSpaceService_ListSpaces(t *testing.T) {
require.Len(t, spaces, 2)
require.Equal(t, "Another Workspace", spaces[0].Name)
require.Equal(t, "another-space-id", spaces[0].Id)
- require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), spaces[0].Icon, "Icon URL does not match")
+ require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), *spaces[0].Icon.File, "Icon URL does not match")
require.Equal(t, "My Workspace", spaces[1].Name)
require.Equal(t, "my-space-id", spaces[1].Id)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: "🚀"}, spaces[1].Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("🚀")}, spaces[1].Icon)
require.Equal(t, 2, total)
require.False(t, hasMore)
})
@@ -282,11 +282,11 @@ func TestSpaceService_ListMembers(t *testing.T) {
require.Len(t, members, 2)
require.Equal(t, "member-1", members[0].Id)
require.Equal(t, "John Doe", members[0].Name)
- require.Equal(t, util.Icon{Type: "emoji", Emoji: "👤"}, members[0].Icon)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("👤")}, members[0].Icon)
require.Equal(t, "john.any", members[0].GlobalName)
require.Equal(t, "member-2", members[1].Id)
require.Equal(t, "Jane Doe", members[1].Name)
- require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), members[1].Icon, "Icon URL does not match")
+ require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), *members[1].Icon.File, "Icon URL does not match")
require.Equal(t, "jane.any", members[1].GlobalName)
require.Equal(t, 2, total)
require.False(t, hasMore)
diff --git a/core/api/util/util.go b/core/api/util/util.go
index 5447c2d3e..824da2f4b 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -33,34 +33,39 @@ var iconOptionToColor = map[float64]string{
}
type Icon struct {
- Type string `json:"type" enums:"emoji,file,icon" example:"emoji"` // The type of the icon
- Emoji string `json:"emoji,omitempty" example:"📄"` // The emoji of the icon
- File string `json:"file,omitempty" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The file of the icon
- Name string `json:"name,omitempty" example:"document"` // The name of the icon
- Color string `json:"color,omitempty" example:"red"` // The color of the icon
+ Format string `json:"format" enums:"emoji,file,icon" example:"emoji"` // The type of the icon
+ Emoji *string `json:"emoji,omitempty" example:"📄"` // The emoji of the icon
+ File *string `json:"file,omitempty" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The file of the icon
+ Name *string `json:"name,omitempty" example:"document"` // The name of the icon
+ Color *string `json:"color,omitempty" example:"red"` // The color of the icon
+}
+
+// StringPtr returns a pointer to the string
+func StringPtr(s string) *string {
+ return &s
}
// GetIcon returns the icon to use for the object, which can be builtin icon, emoji or file
func GetIcon(accountInfo *model.AccountInfo, iconEmoji string, iconImage string, iconName string, iconOption float64) Icon {
if iconName != "" {
return Icon{
- Type: "icon",
- Name: iconName,
- Color: iconOptionToColor[iconOption],
+ Format: "icon",
+ Name: &iconName,
+ Color: StringPtr(iconOptionToColor[iconOption]),
}
}
if iconEmoji != "" {
return Icon{
- Type: "emoji",
- Emoji: iconEmoji,
+ Format: "emoji",
+ Emoji: &iconEmoji,
}
}
if iconImage != "" {
return Icon{
- Type: "file",
- File: fmt.Sprintf("%s/image/%s", accountInfo.GatewayUrl, iconImage),
+ Format: "file",
+ File: StringPtr(fmt.Sprintf("%s/image/%s", accountInfo.GatewayUrl, iconImage)),
}
}
From 181fff8efcdb0144a699f7df1b038dc8cd4f46a8 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 12 Mar 2025 20:41:01 +0100
Subject: [PATCH 051/132] GO-4459: Fix lint
---
core/api/internal/object/service.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 39e648320..27f13d713 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -527,7 +527,7 @@ func (s *ObjectService) getProperties(resp *pb.RpcObjectShowResponse) []Property
linkedProperties := resp.ObjectView.RelationLinks
primaryDetailFields := resp.ObjectView.Details[0].Details.Fields
- var properties []Property
+ properties := make([]Property, 0, len(linkedProperties))
for _, r := range linkedProperties {
key := r.Key
if _, isExcluded := excludedSystemProperties[key]; isExcluded {
From ace1300de48ceedf3794816376bf0e2149e1711d Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 14 Mar 2025 11:38:50 +0100
Subject: [PATCH 052/132] GO-4459: Support views including sorts and filters
for lists and return dataview in blocks
---
core/api/docs/docs.go | 4 +-
core/api/docs/swagger.json | 4 +-
core/api/docs/swagger.yaml | 109 +++++++++++++++++++++++++++-
core/api/internal/list/handler.go | 6 +-
core/api/internal/list/service.go | 68 +++++++++++++++--
core/api/internal/object/model.go | 58 +++++++++++----
core/api/internal/object/service.go | 71 ++++++++++++++++--
core/api/server/router.go | 2 +-
8 files changed, 286 insertions(+), 36 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 15da18204..7cabfcb35 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"example":true,"type":"boolean"},"date":{"example":"2025-02-14T12:34:56Z","type":"string"},"email":{"example":"example@example.com","type":"string"},"file":{"example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"example":"last_modified_date","type":"string"},"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Last modified date","type":"string"},"number":{"example":42,"type":"number"},"object":{"example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"example":"Some text...","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 18182dae9..f35a1a23f 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"example":true,"type":"boolean"},"date":{"example":"2025-02-14T12:34:56Z","type":"string"},"email":{"example":"example@example.com","type":"string"},"file":{"example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"example":"last_modified_date","type":"string"},"multi_select":{"items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"example":"Last modified date","type":"string"},"number":{"example":42,"type":"number"},"object":{"example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"example":"Some text...","type":"string"},"url":{"example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation of the block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Tag":{"properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]},"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 98f3cdeeb..b717abf0c 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -49,6 +49,8 @@ components:
type: string
type: array
uniqueItems: false
+ dataview:
+ $ref: '#/components/schemas/object.Dataview'
file:
$ref: '#/components/schemas/object.File'
id:
@@ -99,6 +101,16 @@ components:
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
type: string
type: object
+ object.Dataview:
+ description: The dataview, applicable for list objects
+ properties:
+ views:
+ description: The list of views
+ items:
+ $ref: '#/components/schemas/object.View'
+ type: array
+ uniqueItems: false
+ type: object
object.File:
description: The file of the block, if applicable
properties:
@@ -130,6 +142,29 @@ components:
description: The type of the file
type: string
type: object
+ object.Filter:
+ properties:
+ condition:
+ description: The filter condition
+ example: contains
+ type: string
+ format:
+ description: The format of the relation used for filtering
+ example: text
+ type: string
+ id:
+ description: The id of the filter
+ example: 67bf3f21cda9134102e2422c
+ type: string
+ relation_key:
+ description: The relation key used for filtering
+ example: name
+ type: string
+ value:
+ description: The value used for filtering
+ example: Some value...
+ type: string
+ type: object
object.Object:
description: The object
properties:
@@ -187,15 +222,19 @@ components:
object.Property:
properties:
checkbox:
+ description: The checkbox value, if applicable
example: true
type: boolean
date:
+ description: The date value, if applicable
example: "2025-02-14T12:34:56Z"
type: string
email:
+ description: The email value, if applicable
example: example@example.com
type: string
file:
+ description: The file references, if applicable
example:
- '[''fileId'']'
items:
@@ -203,6 +242,7 @@ components:
type: array
uniqueItems: false
format:
+ description: The format of the property
enum:
- text
- number
@@ -218,20 +258,25 @@ components:
example: date
type: string
id:
+ description: The id of the property
example: last_modified_date
type: string
multi_select:
+ description: The multi-select values, if applicable
items:
$ref: '#/components/schemas/object.Tag'
type: array
uniqueItems: false
name:
+ description: The name of the property
example: Last modified date
type: string
number:
+ description: The number value, if applicable
example: 42
type: number
object:
+ description: The object references, if applicable
example:
- '[''objectId'']'
items:
@@ -239,24 +284,47 @@ components:
type: array
uniqueItems: false
phone:
+ description: The phone number value, if applicable
example: "+1234567890"
type: string
select:
$ref: '#/components/schemas/object.Tag'
text:
+ description: The text value, if applicable
example: Some text...
type: string
url:
+ description: The url value, if applicable
example: https://example.com
type: string
type: object
object.Relation:
- description: The relation of the block, if applicable
+ description: The relation block, if applicable
properties:
id:
type: string
type: object
+ object.Sort:
+ properties:
+ format:
+ description: The format of the relation used for sorting
+ example: text
+ type: string
+ id:
+ description: The id of the sort
+ example: 67bf3f21cda9134102e2422c
+ type: string
+ relation_key:
+ description: The relation key used for sorting
+ example: name
+ type: string
+ sort_type:
+ description: The sort direction
+ example: asc
+ type: string
+ type: object
object.Tag:
+ description: The select value, if applicable
properties:
color:
description: The color of the tag
@@ -362,6 +430,36 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
+ object.View:
+ properties:
+ filters:
+ description: The list of filters
+ items:
+ $ref: '#/components/schemas/object.Filter'
+ type: array
+ uniqueItems: false
+ id:
+ description: The id of the view
+ example: 67bf3f21cda9134102e2422c
+ type: string
+ layout:
+ description: The layout of the view
+ enum:
+ - grid
+ - table
+ example: grid
+ type: string
+ name:
+ description: The name of the view
+ example: All
+ type: string
+ sorts:
+ description: The list of sorts
+ items:
+ $ref: '#/components/schemas/object.Sort'
+ type: array
+ uniqueItems: false
+ type: object
pagination.PaginatedResponse-object_Object:
properties:
data:
@@ -1666,7 +1764,7 @@ paths:
summary: Get template
tags:
- templates
- /v1/spaces/{space_id}/lists/{list_id}/objects:
+ /v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects:
get:
description: Returns a paginated list of objects that are associated with a
specific list (or collection) within a space. This endpoint helps clients
@@ -1685,6 +1783,12 @@ paths:
required: true
schema:
type: string
+ - description: View ID
+ in: path
+ name: view_id
+ required: true
+ schema:
+ type: string
- description: The number of items to skip before starting to collect the result
set
in: query
@@ -1727,6 +1831,7 @@ paths:
summary: Get objects in list
tags:
- lists
+ /v1/spaces/{space_id}/lists/{list_id}/objects:
post:
description: Enables clients to add one or more objects to a specific list by
submitting a JSON array of object IDs. Upon success, the endpoint returns
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index 923787df3..63f9e86f7 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -17,6 +17,7 @@ import (
// @Produce json
// @Param space_id path string true "Space ID"
// @Param list_id path string true "List ID"
+// @Param view_id path string true "View ID"
// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
// @Param limit query int false "The number of items to return"
// @Success 200 {object} pagination.PaginatedResponse[object.Object] "List of objects"
@@ -24,15 +25,16 @@ import (
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [get]
+// @Router /v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects [get]
func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
listId := c.Param("list_id")
+ viewId := c.Param("view_id")
offset := c.GetInt("offset")
limit := c.GetInt("limit")
- objects, total, hasMore, err := s.GetObjectsInList(c, spaceId, listId, offset, limit)
+ objects, total, hasMore, err := s.GetObjectsInList(c, spaceId, listId, viewId, offset, limit)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedGetObjectsInList, http.StatusInternalServerError),
)
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 9a5e2c15c..dea3f8571 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -9,16 +9,20 @@ import (
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
var (
+ ErrFailedGetList = errors.New("failed to get list")
+ ErrFailedGetListDataview = errors.New("failed to get list dataview")
+ ErrFailedGetListDataviewView = errors.New("failed to get list dataview view")
ErrFailedGetObjectsInList = errors.New("failed to get objects in list")
ErrFailedAddObjectsToList = errors.New("failed to add objects to list")
ErrFailedRemoveObjectsFromList = errors.New("failed to remove objects from list")
)
type Service interface {
- GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]object.Object, int, bool, error)
+ GetObjectsInList(ctx context.Context, spaceId string, listId string, viewId string, offset, limit int) ([]object.Object, int, bool, error)
AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error
RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
}
@@ -33,22 +37,74 @@ func NewService(mw service.ClientCommandsServer, objectService *object.ObjectSer
}
// GetObjectsInList retrieves objects in a list
-func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, listId string, offset, limit int) ([]object.Object, int, bool, error) {
- resp := s.mw.ObjectSearchSubscribe(ctx, &pb.RpcObjectSearchSubscribeRequest{
+func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, listId string, viewId string, offset, limit int) ([]object.Object, int, bool, error) {
+ resp := s.mw.ObjectShow(ctx, &pb.RpcObjectShowRequest{
+ SpaceId: spaceId,
+ ObjectId: listId,
+ })
+
+ if resp.Error != nil && resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return nil, 0, false, ErrFailedGetList
+ }
+
+ var dataviewBlock *model.Block
+ for _, block := range resp.ObjectView.Blocks {
+ if block.Id == "dataview" {
+ dataviewBlock = block
+ break
+ }
+ }
+
+ if dataviewBlock == nil {
+ return nil, 0, false, ErrFailedGetListDataview
+ }
+
+ var sorts []*model.BlockContentDataviewSort
+ var filters []*model.BlockContentDataviewFilter
+
+ switch content := dataviewBlock.Content.(type) {
+ case *model.BlockContentOfDataview:
+ var targetView *model.BlockContentDataviewView
+ if viewId == "" && len(content.Dataview.Views) > 0 {
+ // fallback to first view when view id is empty
+ targetView = content.Dataview.Views[0]
+ } else if viewId != "" {
+ for _, view := range content.Dataview.Views {
+ if view.Id == viewId {
+ targetView = view
+ break
+ }
+ }
+ }
+
+ if targetView == nil {
+ return nil, 0, false, ErrFailedGetListDataviewView
+ }
+
+ // use the sorts and filters from the selected view
+ sorts = targetView.Sorts
+ filters = targetView.Filters
+ default:
+ return nil, 0, false, ErrFailedGetListDataview
+ }
+
+ searchResp := s.mw.ObjectSearchSubscribe(ctx, &pb.RpcObjectSearchSubscribeRequest{
SpaceId: spaceId,
Limit: int64(limit), // nolint: gosec
Offset: int64(offset), // nolint: gosec
Keys: []string{bundle.RelationKeyId.String()},
CollectionId: listId,
+ Sorts: sorts,
+ Filters: filters,
})
// TODO: returned error from ObjectSearchSubscribe is inconsistent with other RPCs: Error is nil instead of Code being NULL
- if resp.Error != nil && resp.Error.Code != pb.RpcObjectSearchSubscribeResponseError_NULL {
+ if searchResp.Error != nil && searchResp.Error.Code != pb.RpcObjectSearchSubscribeResponseError_NULL {
return nil, 0, false, ErrFailedGetObjectsInList
}
- total := int(resp.Counters.Total)
- paginatedRecords, hasMore := pagination.Paginate(resp.Records, offset, limit)
+ total := int(searchResp.Counters.Total)
+ paginatedRecords, hasMore := pagination.Paginate(searchResp.Records, offset, limit)
objects := make([]object.Object, 0, len(paginatedRecords))
for _, record := range paginatedRecords {
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 42a6ae897..6952e2c5a 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -38,7 +38,8 @@ type Block struct {
VerticalAlign string `json:"vertical_align" enums:"VerticalAlignTop,VerticalAlignMiddle,VerticalAlignBottom" example:"VerticalAlignTop"` // The vertical alignment of the block
Text *Text `json:"text,omitempty"` // The text of the block, if applicable
File *File `json:"file,omitempty"` // The file of the block, if applicable
- Relation *Relation `json:"relation,omitempty"` // The relation of the block, if applicable
+ Relation *Relation `json:"relation,omitempty"` // The relation block, if applicable
+ Dataview *Dataview `json:"dataview,omitempty"` // The dataview, applicable for list objects
}
type Text struct {
@@ -66,21 +67,48 @@ type Relation struct {
Id string
}
+type Dataview struct {
+ Views []View `json:"views"` // The list of views
+}
+
+type View struct {
+ Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the view
+ Name string `json:"name" example:"All"` // The name of the view
+ Layout string `json:"layout" example:"grid" enums:"grid,table"` // The layout of the view
+ Filters []Filter `json:"filters"` // The list of filters
+ Sorts []Sort `json:"sorts"` // The list of sorts
+}
+
+type Filter struct {
+ Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the filter
+ RelationKey string `json:"relation_key" example:"name"` // The relation key used for filtering
+ Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the relation used for filtering
+ Condition string `json:"condition" example:"contains" enum:"equal,not_equal,greater,less,greater_or_equal,less_or_equal,like,not_like,in,not_in,empty,not_empty,all_in,not_all_in,exact_in,not_exact_in,exists"` // The filter condition
+ Value string `json:"value" example:"Some value..."` // The value used for filtering
+}
+
+type Sort struct {
+ Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the sort
+ RelationKey string `json:"relation_key" example:"name"` // The relation key used for sorting
+ Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the relation used for sorting
+ SortType string `json:"sort_type" example:"asc" enum:"asc,desc,custom"` // The sort direction
+}
+
type Property struct {
- Id string `json:"id" example:"last_modified_date"`
- Name string `json:"name" example:"Last modified date"`
- Format string `json:"format" example:"date" enums:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"`
- Text *string `json:"text,omitempty" example:"Some text..."`
- Number *float64 `json:"number,omitempty" example:"42"`
- Select *Tag `json:"select,omitempty"`
- MultiSelect []Tag `json:"multi_select,omitempty"`
- Date *string `json:"date,omitempty" example:"2025-02-14T12:34:56Z"`
- File []string `json:"file,omitempty" example:"['fileId']"`
- Checkbox *bool `json:"checkbox,omitempty" example:"true"`
- Url *string `json:"url,omitempty" example:"https://example.com"`
- Email *string `json:"email,omitempty" example:"example@example.com"`
- Phone *string `json:"phone,omitempty" example:"+1234567890"`
- Object []string `json:"object,omitempty" example:"['objectId']"`
+ Id string `json:"id" example:"last_modified_date"` // The id of the property
+ Name string `json:"name" example:"Last modified date"` // The name of the property
+ Format string `json:"format" example:"date" enums:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the property
+ Text *string `json:"text,omitempty" example:"Some text..."` // The text value, if applicable
+ Number *float64 `json:"number,omitempty" example:"42"` // The number value, if applicable
+ Select *Tag `json:"select,omitempty"` // The select value, if applicable
+ MultiSelect []Tag `json:"multi_select,omitempty"` // The multi-select values, if applicable
+ Date *string `json:"date,omitempty" example:"2025-02-14T12:34:56Z"` // The date value, if applicable
+ File []string `json:"file,omitempty" example:"['fileId']"` // The file references, if applicable
+ Checkbox *bool `json:"checkbox,omitempty" example:"true" enum:"true,false"` // The checkbox value, if applicable
+ Url *string `json:"url,omitempty" example:"https://example.com"` // The url value, if applicable
+ Email *string `json:"email,omitempty" example:"example@example.com"` // The email value, if applicable
+ Phone *string `json:"phone,omitempty" example:"+1234567890"` // The phone number value, if applicable
+ Object []string `json:"object,omitempty" example:"['objectId']"` // The object references, if applicable
}
type Tag struct {
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 27f13d713..84619c425 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -82,6 +82,7 @@ var excludedSystemProperties = map[string]bool{
bundle.RelationKeyLayoutAlign.String(): true,
bundle.RelationKeyIsHiddenDiscovery.String(): true,
bundle.RelationKeyLayout.String(): true,
+ bundle.RelationKeyIsReadonly.String(): true,
}
type Service interface {
@@ -721,13 +722,9 @@ func (s *ObjectService) convertValue(key string, value *types.Value, format stri
// getPropertyFormatMap returns the map of property key to property format from the ObjectShowResponse.
func (s *ObjectService) getPropertyFormatMap(propertyLinks []*model.RelationLink) map[string]string {
propertyFormatToName := make(map[int32]string, len(model.RelationFormat_name))
- for k, v := range model.RelationFormat_name {
- propertyFormatToName[k] = v
+ for k := range model.RelationFormat_name {
+ propertyFormatToName[k] = s.mapRelationFormat(model.RelationFormat(k))
}
- propertyFormatToName[int32(model.RelationFormat_longtext)] = "text"
- propertyFormatToName[int32(model.RelationFormat_shorttext)] = "text"
- propertyFormatToName[int32(model.RelationFormat_tag)] = "multi_select"
- propertyFormatToName[int32(model.RelationFormat_status)] = "select"
propertyFormatMap := map[string]string{}
for _, detail := range propertyLinks {
@@ -792,6 +789,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
var text *Text
var file *File
var relation *Relation
+ var dataviewMapping *Dataview
switch content := block.Content.(type) {
case *model.BlockContentOfText:
@@ -818,6 +816,40 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
relation = &Relation{
Id: content.Relation.Key,
}
+ case *model.BlockContentOfDataview:
+ var viewList []View
+ for _, v := range content.Dataview.Views {
+ var filters []Filter
+ for _, f := range v.Filters {
+ filters = append(filters, Filter{
+ Id: f.Id,
+ RelationKey: f.RelationKey,
+ Format: s.mapRelationFormat(f.Format),
+ Condition: strcase.ToSnake(model.BlockContentDataviewFilterCondition_name[int32(f.Condition)]),
+ Value: f.Value.GetStringValue(),
+ })
+ }
+ var sorts []Sort
+ for _, srt := range v.Sorts {
+ sorts = append(sorts, Sort{
+ Id: srt.Id,
+ RelationKey: srt.RelationKey,
+ Format: s.mapRelationFormat(srt.Format),
+ SortType: strcase.ToSnake(model.BlockContentDataviewSortType_name[int32(srt.Type)]),
+ })
+ }
+ viewList = append(viewList, View{
+ Id: v.Id,
+ Name: v.Name,
+ Layout: s.mapDataviewTypeName(v.Type),
+ Filters: filters,
+ Sorts: sorts,
+ })
+ }
+ dataviewMapping = &Dataview{
+ Views: viewList,
+ }
+
}
// TODO: other content types?
@@ -830,8 +862,35 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
Text: text,
File: file,
Relation: relation,
+ Dataview: dataviewMapping,
})
}
return blocks
}
+
+// mapRelationFormat maps the relation format to a string.
+func (s *ObjectService) mapRelationFormat(format model.RelationFormat) string {
+ switch format {
+ case model.RelationFormat_longtext:
+ return "text"
+ case model.RelationFormat_shorttext:
+ return "text"
+ case model.RelationFormat_tag:
+ return "multi_select"
+ case model.RelationFormat_status:
+ return "select"
+ default:
+ return strcase.ToSnake(model.RelationFormat_name[int32(format)])
+ }
+}
+
+// mapDataviewTypeName maps the dataview type to a string.
+func (s *ObjectService) mapDataviewTypeName(dataviewType model.BlockContentDataviewViewType) string {
+ switch dataviewType {
+ case model.BlockContentDataviewView_Table:
+ return "grid"
+ default:
+ return strcase.ToSnake(model.BlockContentDataviewViewType_name[int32(dataviewType)])
+ }
+}
diff --git a/core/api/server/router.go b/core/api/server/router.go
index 67237092c..bb2644229 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -69,7 +69,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
v1.POST("/spaces/:space_id/objects/:object_id/export/:format", export.GetObjectExportHandler(s.exportService))
// List
- v1.GET("/spaces/:space_id/lists/:list_id/objects", list.GetObjectsInListHandler(s.listService))
+ v1.GET("/spaces/:space_id/lists/:list_id/:view_id/objects", list.GetObjectsInListHandler(s.listService))
v1.POST("/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), list.RemoveObjectFromListHandler(s.listService))
From 2ce93ae436a7fecbe4070af698544682358b94cf Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Mar 2025 14:18:00 +0100
Subject: [PATCH 053/132] GO-4459: Add UpdateMemberHandler to modify member
status and role in a space
---
core/api/docs/docs.go | 4 +-
core/api/docs/swagger.json | 4 +-
core/api/docs/swagger.yaml | 98 +++++++++++++-
core/api/internal/space/handler.go | 54 +++++++-
core/api/internal/space/model.go | 8 +-
core/api/internal/space/service.go | 165 +++++++++++++++++++++---
core/api/internal/space/service_test.go | 35 +++--
core/api/server/router.go | 1 +
8 files changed, 323 insertions(+), 46 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 7cabfcb35..ecf0e0b1d 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index f35a1a23f..388b43ff8 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["Reader","Writer","Owner","NoPermission"],"example":"Owner","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index b717abf0c..6383c46ec 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -611,11 +611,18 @@ components:
role:
description: The role of the member
enum:
- - Reader
- - Writer
- - Owner
- - NoPermission
- example: Owner
+ - reader
+ - writer
+ - owner
+ - no_permission
+ example: owner
+ type: string
+ status:
+ description: The status of the member
+ enum:
+ - joining
+ - active
+ example: active
type: string
type: object
space.MemberResponse:
@@ -707,6 +714,24 @@ components:
space:
$ref: '#/components/schemas/space.Space'
type: object
+ space.UpdateMemberRequest:
+ properties:
+ role:
+ description: Role to assign if approving a joining member
+ enum:
+ - reader
+ - writer
+ example: reader
+ type: string
+ status:
+ description: Status of the member
+ enum:
+ - active
+ - removed
+ - declined
+ example: active
+ type: string
+ type: object
util.ForbiddenError:
properties:
error:
@@ -1199,6 +1224,69 @@ paths:
summary: Get member
tags:
- members
+ patch:
+ description: Modifies a member's status and role in a space. Use this endpoint
+ to approve a joining member by setting the status to `active` and specifying
+ a role (`reader` or `writer`), reject a joining member by setting the status
+ to `declined`, remove a member by setting the status to `removed`, or update
+ an active member's role. This endpoint enables fine-grained control over member
+ access and permissions.
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ schema:
+ type: string
+ - description: Member ID
+ in: path
+ name: member_id
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/space.UpdateMemberRequest'
+ description: Member to update
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/space.MemberResponse'
+ description: Member updated successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
+ description: Bad request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
+ description: Member not found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
+ description: Internal server error
+ security:
+ - bearerauth: []
+ summary: Update member
+ tags:
+ - members
/spaces/{space_id}/objects:
get:
description: Retrieves a paginated list of objects in the given space. The endpoint
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 4ed1b0fb9..9c48334f0 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -93,14 +93,14 @@ func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
// @Router /spaces [post]
func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
return func(c *gin.Context) {
- nameRequest := CreateSpaceRequest{}
- if err := c.BindJSON(&nameRequest); err != nil {
+ var req CreateSpaceRequest
+ if err := c.BindJSON(&req); err != nil {
apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
c.JSON(http.StatusBadRequest, apiErr)
return
}
- space, err := s.CreateSpace(c.Request.Context(), nameRequest.Name)
+ space, err := s.CreateSpace(c.Request.Context(), req)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedCreateSpace, http.StatusInternalServerError),
)
@@ -157,7 +157,7 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
// @Tags members
// @Produce json
// @Param space_id path string true "Space ID"
-// @Param member_id path string true "Member ID"
+// @Param member_id path string true "Member ID or Identity"
// @Success 200 {object} MemberResponse "Member"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Member not found"
@@ -184,3 +184,49 @@ func GetMemberHandler(s *SpaceService) gin.HandlerFunc {
c.JSON(http.StatusOK, MemberResponse{Member: member})
}
}
+
+// UpdateMemberHandler updates a member in a space
+//
+// @Summary Update member
+// @Description Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.
+// @Tags members
+// @Accept json
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param member_id path string true "Member ID"
+// @Param body body UpdateMemberRequest true "Member to update"
+// @Success 200 {object} MemberResponse "Member updated successfully"
+// @Failure 400 {object} util.ValidationError "Bad request"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Member not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/members/{member_id} [patch]
+func UpdateMemberHandler(s *SpaceService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceId := c.Param("space_id")
+ memberId := c.Param("member_id")
+
+ var req UpdateMemberRequest
+ if err := c.BindJSON(&req); err != nil {
+ apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
+ c.AbortWithStatusJSON(http.StatusBadRequest, apiErr)
+ }
+
+ member, err := s.UpdateMember(c.Request.Context(), spaceId, memberId, req)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrInvalidApproveMemberStatus, http.StatusBadRequest),
+ util.ErrToCode(ErrInvalidApproveMemberRole, http.StatusBadRequest),
+ util.ErrToCode(ErrMemberNotFound, http.StatusNotFound),
+ util.ErrToCode(ErrFailedUpdateMember, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ c.JSON(http.StatusOK, MemberResponse{Member: member})
+ }
+}
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index 2edf130db..aea8a6f12 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -38,6 +38,11 @@ type MemberResponse struct {
Member Member `json:"member"` // The member
}
+type UpdateMemberRequest struct {
+ Status string `json:"status" enums:"active,removed,declined" example:"active"` // Status of the member
+ Role string `json:"role,omitempty" enums:"reader,writer" example:"reader"` // Role to assign if approving a joining member
+}
+
type Member struct {
Object string `json:"object" example:"member"` // The data model of the object
Id string `json:"id" example:"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ"` // The profile object id of the member
@@ -45,5 +50,6 @@ type Member struct {
Icon util.Icon `json:"icon"` // The icon of the member
Identity string `json:"identity" example:"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"` // The identity of the member in the network
GlobalName string `json:"global_name" example:"john.any"` // The global name of the member in the network
- Role string `json:"role" enums:"Reader,Writer,Owner,NoPermission" example:"Owner"` // The role of the member
+ Status string `json:"status" enums:"joining,active" example:"active"` // The status of the member
+ Role string `json:"role" enums:"reader,writer,owner,no_permission" example:"owner"` // The role of the member
}
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index dfd9f4457..0312b0c0e 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -5,8 +5,10 @@ import (
"crypto/rand"
"errors"
"math/big"
+ "strings"
"github.com/gogo/protobuf/types"
+ "github.com/iancoleman/strcase"
"github.com/anyproto/anytype-heart/core/api/pagination"
"github.com/anyproto/anytype-heart/core/api/util"
@@ -18,22 +20,26 @@ import (
)
var (
- ErrFailedListSpaces = errors.New("failed to retrieve list of spaces")
- ErrFailedOpenWorkspace = errors.New("failed to open workspace")
- ErrWorkspaceNotFound = errors.New("workspace not found")
- ErrFailedGenerateRandomIcon = errors.New("failed to generate random icon")
- ErrFailedCreateSpace = errors.New("failed to create space")
- ErrFailedListMembers = errors.New("failed to retrieve list of members")
- ErrFailedGetMember = errors.New("failed to retrieve member")
- ErrMemberNotFound = errors.New("member not found")
+ ErrFailedListSpaces = errors.New("failed to retrieve list of spaces")
+ ErrFailedOpenWorkspace = errors.New("failed to open workspace")
+ ErrWorkspaceNotFound = errors.New("workspace not found")
+ ErrFailedGenerateRandomIcon = errors.New("failed to generate random icon")
+ ErrFailedCreateSpace = errors.New("failed to create space")
+ ErrFailedListMembers = errors.New("failed to retrieve list of members")
+ ErrFailedGetMember = errors.New("failed to retrieve member")
+ ErrMemberNotFound = errors.New("member not found")
+ ErrInvalidApproveMemberStatus = errors.New("status must be 'active', 'declined', or 'removed'")
+ ErrInvalidApproveMemberRole = errors.New("role must be 'reader' or 'writer'")
+ ErrFailedUpdateMember = errors.New("failed to update member")
)
type Service interface {
ListSpaces(ctx context.Context, offset int, limit int) ([]Space, int, bool, error)
GetSpace(ctx context.Context, spaceId string) (Space, error)
- CreateSpace(ctx context.Context, name string) (Space, error)
+ CreateSpace(ctx context.Context, request CreateSpaceRequest) (Space, error)
ListMembers(ctx context.Context, spaceId string, offset int, limit int) ([]Member, int, bool, error)
GetMember(ctx context.Context, spaceId string, memberId string) (Member, error)
+ UpdateMember(ctx context.Context, spaceId string, memberId string, request UpdateMemberRequest) (Member, error)
}
type SpaceService struct {
@@ -133,7 +139,8 @@ func (s *SpaceService) GetSpace(ctx context.Context, spaceId string) (Space, err
}
// CreateSpace creates a new space with the given name and returns the space info.
-func (s *SpaceService) CreateSpace(ctx context.Context, name string) (Space, error) {
+func (s *SpaceService) CreateSpace(ctx context.Context, request CreateSpaceRequest) (Space, error) {
+ name := request.Name
iconOption, err := rand.Int(rand.Reader, big.NewInt(13))
if err != nil {
return Space{}, ErrFailedGenerateRandomIcon
@@ -143,8 +150,8 @@ func (s *SpaceService) CreateSpace(ctx context.Context, name string) (Space, err
resp := s.mw.WorkspaceCreate(ctx, &pb.RpcWorkspaceCreateRequest{
Details: &types.Struct{
Fields: map[string]*types.Value{
- bundle.RelationKeyIconOption.String(): pbtypes.Float64(float64(iconOption.Int64())),
bundle.RelationKeyName.String(): pbtypes.String(name),
+ bundle.RelationKeyIconOption.String(): pbtypes.Float64(float64(iconOption.Int64())),
bundle.RelationKeySpaceDashboardId.String(): pbtypes.String("lastOpened"),
},
},
@@ -161,7 +168,7 @@ func (s *SpaceService) CreateSpace(ctx context.Context, name string) (Space, err
// ListMembers returns a paginated list of members in the space with the given ID.
func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset int, limit int) (members []Member, total int, hasMore bool, err error) {
- resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
+ activeResp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
{
@@ -183,15 +190,46 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
Type: model.BlockContentDataviewSort_Asc,
},
},
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String(), bundle.RelationKeyIdentity.String(), bundle.RelationKeyGlobalName.String(), bundle.RelationKeyParticipantPermissions.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String(), bundle.RelationKeyIdentity.String(), bundle.RelationKeyGlobalName.String(), bundle.RelationKeyParticipantPermissions.String(), bundle.RelationKeyParticipantStatus.String()},
})
- if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
+ if activeResp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
return nil, 0, false, ErrFailedListMembers
}
- total = len(resp.Records)
- paginatedMembers, hasMore := pagination.Paginate(resp.Records, offset, limit)
+ joiningResp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
+ SpaceId: spaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.ObjectType_participant)),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyParticipantStatus.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.ParticipantStatus_Joining)),
+ },
+ },
+ Sorts: []*model.BlockContentDataviewSort{
+ {
+ RelationKey: bundle.RelationKeyName.String(),
+ Type: model.BlockContentDataviewSort_Asc,
+ },
+ },
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String(), bundle.RelationKeyIdentity.String(), bundle.RelationKeyGlobalName.String(), bundle.RelationKeyParticipantPermissions.String(), bundle.RelationKeyParticipantStatus.String()},
+ })
+
+ if joiningResp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
+ return nil, 0, false, ErrFailedListMembers
+ }
+
+ combinedRecords := append(joiningResp.Records, activeResp.Records...)
+
+ total = len(combinedRecords)
+ paginatedMembers, hasMore := pagination.Paginate(combinedRecords, offset, limit)
members = make([]Member, 0, len(paginatedMembers))
for _, record := range paginatedMembers {
@@ -204,7 +242,8 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
Icon: icon,
Identity: record.Fields[bundle.RelationKeyIdentity.String()].GetStringValue(),
GlobalName: record.Fields[bundle.RelationKeyGlobalName.String()].GetStringValue(),
- Role: model.ParticipantPermissions_name[int32(record.Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())],
+ Status: strcase.ToSnake(model.ParticipantStatus_name[int32(record.Fields[bundle.RelationKeyParticipantStatus.String()].GetNumberValue())]),
+ Role: strcase.ToSnake(model.ParticipantPermissions_name[int32(record.Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())]),
}
members = append(members, member)
@@ -215,17 +254,23 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
// GetMember returns the member with the given ID in the space with the given ID.
func (s *SpaceService) GetMember(ctx context.Context, spaceId string, memberId string) (Member, error) {
+ // Member ID can be either a participant ID or an identity.
+ relationKey := bundle.RelationKeyId
+ if !strings.HasPrefix(memberId, "_participant") {
+ relationKey = bundle.RelationKeyIdentity
+ }
+
resp := s.mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyId.String(),
+ RelationKey: relationKey.String(),
Condition: model.BlockContentDataviewFilter_Equal,
Value: pbtypes.String(memberId),
},
},
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String(), bundle.RelationKeyIdentity.String(), bundle.RelationKeyGlobalName.String(), bundle.RelationKeyParticipantPermissions.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String(), bundle.RelationKeyIdentity.String(), bundle.RelationKeyGlobalName.String(), bundle.RelationKeyParticipantPermissions.String(), bundle.RelationKeyParticipantStatus.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
@@ -245,10 +290,78 @@ func (s *SpaceService) GetMember(ctx context.Context, spaceId string, memberId s
Icon: icon,
Identity: resp.Records[0].Fields[bundle.RelationKeyIdentity.String()].GetStringValue(),
GlobalName: resp.Records[0].Fields[bundle.RelationKeyGlobalName.String()].GetStringValue(),
- Role: model.ParticipantPermissions_name[int32(resp.Records[0].Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())],
+ Status: strcase.ToSnake(model.ParticipantStatus_name[int32(resp.Records[0].Fields[bundle.RelationKeyParticipantStatus.String()].GetNumberValue())]),
+ Role: strcase.ToSnake(model.ParticipantPermissions_name[int32(resp.Records[0].Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())]),
}, nil
}
+// UpdateMember approves member with defined role or removes them
+func (s *SpaceService) UpdateMember(ctx context.Context, spaceId string, memberId string, request UpdateMemberRequest) (Member, error) {
+ member, err := s.GetMember(ctx, spaceId, memberId)
+ if err != nil {
+ return Member{}, err
+ }
+
+ if request.Status != "active" && request.Status != "removed" && request.Status != "declined" {
+ return Member{}, ErrInvalidApproveMemberStatus
+ }
+
+ switch request.Status {
+ case "active":
+ if request.Role != "reader" && request.Role != "writer" {
+ return Member{}, ErrInvalidApproveMemberRole
+ }
+
+ if member.Status == "joining" {
+ // Approve the member's join request.
+ approveResp := s.mw.SpaceRequestApprove(ctx, &pb.RpcSpaceRequestApproveRequest{
+ SpaceId: spaceId,
+ Identity: memberId,
+ Permissions: s.mapMemberRole(request.Role),
+ })
+ if approveResp.Error.Code != pb.RpcSpaceRequestApproveResponseError_NULL {
+ return Member{}, ErrFailedUpdateMember
+ }
+ } else {
+ // Update the member's role.
+ resp := s.mw.SpaceParticipantPermissionsChange(ctx, &pb.RpcSpaceParticipantPermissionsChangeRequest{
+ SpaceId: spaceId,
+ Changes: []*model.ParticipantPermissionChange{{Identity: memberId, Perms: s.mapMemberRole(request.Role)}},
+ })
+ if resp.Error.Code != pb.RpcSpaceParticipantPermissionsChangeResponseError_NULL {
+ return Member{}, ErrFailedUpdateMember
+ }
+ }
+ case "declined":
+ // Reject the member's join request.
+ rejectResp := s.mw.SpaceRequestDecline(ctx, &pb.RpcSpaceRequestDeclineRequest{
+ SpaceId: spaceId,
+ Identity: memberId,
+ })
+ if rejectResp.Error.Code != pb.RpcSpaceRequestDeclineResponseError_NULL {
+ return Member{}, ErrFailedUpdateMember
+ }
+ case "removed":
+ // Remove the member from the space.
+ removeResp := s.mw.SpaceParticipantRemove(ctx, &pb.RpcSpaceParticipantRemoveRequest{
+ SpaceId: spaceId,
+ Identities: []string{memberId},
+ })
+ if removeResp.Error.Code != pb.RpcSpaceParticipantRemoveResponseError_NULL {
+ return Member{}, ErrFailedUpdateMember
+ }
+ default:
+ return Member{}, ErrInvalidApproveMemberStatus
+ }
+
+ member, err = s.GetMember(ctx, spaceId, memberId)
+ if err != nil {
+ return Member{}, err
+ }
+
+ return member, nil
+}
+
// getWorkspaceInfo returns the workspace info for the space with the given ID.
func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon util.Icon) (space Space, err error) {
workspaceResponse := s.mw.WorkspaceOpen(context.Background(), &pb.RpcWorkspaceOpenRequest{
@@ -282,3 +395,15 @@ func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon util.I
NetworkId: workspaceResponse.Info.NetworkId,
}, nil
}
+
+// mapMemberPermissions maps a role to participant permissions
+func (s *SpaceService) mapMemberRole(permission string) model.ParticipantPermissions {
+ switch permission {
+ case "reader":
+ return model.ParticipantPermissions_Reader
+ case "writer":
+ return model.ParticipantPermissions_Writer
+ default:
+ return model.ParticipantPermissions_Reader
+ }
+}
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index 02026aad9..d6da5a5fa 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -220,7 +220,7 @@ func TestSpaceService_CreateSpace(t *testing.T) {
}, nil).Once()
// when
- space, err := fx.CreateSpace(nil, "New Space")
+ space, err := fx.CreateSpace(nil, CreateSpaceRequest{Name: "New Space"})
// then
require.NoError(t, err)
@@ -236,7 +236,7 @@ func TestSpaceService_CreateSpace(t *testing.T) {
}).Once()
// when
- space, err := fx.CreateSpace(nil, "New Space")
+ space, err := fx.CreateSpace(nil, CreateSpaceRequest{Name: "New Space"})
// then
require.ErrorIs(t, err, ErrFailedCreateSpace)
@@ -254,20 +254,24 @@ func TestSpaceService_ListMembers(t *testing.T) {
Records: []*types.Struct{
{
Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String("member-1"),
- bundle.RelationKeyName.String(): pbtypes.String("John Doe"),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
- bundle.RelationKeyIdentity.String(): pbtypes.String("AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"),
- bundle.RelationKeyGlobalName.String(): pbtypes.String("john.any"),
+ bundle.RelationKeyId.String(): pbtypes.String("member-1"),
+ bundle.RelationKeyName.String(): pbtypes.String("John Doe"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("john.any"),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Owner)),
},
},
{
Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String("member-2"),
- bundle.RelationKeyName.String(): pbtypes.String("Jane Doe"),
- bundle.RelationKeyIconImage.String(): pbtypes.String(iconImage),
- bundle.RelationKeyIdentity.String(): pbtypes.String("AAjLbEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMD4"),
- bundle.RelationKeyGlobalName.String(): pbtypes.String("jane.any"),
+ bundle.RelationKeyId.String(): pbtypes.String("member-2"),
+ bundle.RelationKeyName.String(): pbtypes.String("Jane Doe"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(iconImage),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("AAjLbEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMD4"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("jane.any"),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Joining)),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_NoPermissions)),
},
},
},
@@ -280,14 +284,21 @@ func TestSpaceService_ListMembers(t *testing.T) {
// then
require.NoError(t, err)
require.Len(t, members, 2)
+
require.Equal(t, "member-1", members[0].Id)
require.Equal(t, "John Doe", members[0].Name)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("👤")}, members[0].Icon)
require.Equal(t, "john.any", members[0].GlobalName)
+ require.Equal(t, "active", members[0].Status)
+ require.Equal(t, "owner", members[0].Role)
+
require.Equal(t, "member-2", members[1].Id)
require.Equal(t, "Jane Doe", members[1].Name)
require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), *members[1].Icon.File, "Icon URL does not match")
require.Equal(t, "jane.any", members[1].GlobalName)
+ require.Equal(t, "joining", members[1].Status)
+ require.Equal(t, "no_permissions", members[1].Role)
+
require.Equal(t, 2, total)
require.False(t, hasMore)
})
diff --git a/core/api/server/router.go b/core/api/server/router.go
index bb2644229..7dc888a84 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -88,6 +88,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
v1.GET("/spaces/:space_id", space.GetSpaceHandler(s.spaceService))
v1.GET("/spaces/:space_id/members", space.GetMembersHandler(s.spaceService))
v1.GET("/spaces/:space_id/members/:member_id", space.GetMemberHandler(s.spaceService))
+ v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond), space.UpdateMemberHandler(s.spaceService))
v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond), space.CreateSpaceHandler(s.spaceService))
// Type
From 018990d66ac078c190d9aea04e7da5b9e12d93bd Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Mar 2025 14:24:15 +0100
Subject: [PATCH 054/132] GO-4459: Fix member tests
---
core/api/internal/space/service_test.go | 127 +++++++++++++++++++-----
1 file changed, 104 insertions(+), 23 deletions(-)
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index d6da5a5fa..519c8ec35 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -245,27 +245,84 @@ func TestSpaceService_CreateSpace(t *testing.T) {
}
func TestSpaceService_ListMembers(t *testing.T) {
+ joiningReq := &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.ObjectType_participant)),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyParticipantStatus.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.ParticipantStatus_Joining)),
+ },
+ },
+ Sorts: []*model.BlockContentDataviewSort{
+ {
+ RelationKey: bundle.RelationKeyName.String(),
+ Type: model.BlockContentDataviewSort_Asc,
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }
+
+ activeReq := &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyResolvedLayout.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.ObjectType_participant)),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyParticipantStatus.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ Sorts: []*model.BlockContentDataviewSort{
+ {
+ RelationKey: bundle.RelationKeyName.String(),
+ Type: model.BlockContentDataviewSort_Asc,
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }
+
t.Run("successfully get members", func(t *testing.T) {
// given
fx := newFixture(t)
- fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).
+ fx.mwMock.On("ObjectSearch", mock.Anything, joiningReq).
Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{
{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String("member-1"),
- bundle.RelationKeyName.String(): pbtypes.String("John Doe"),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
- bundle.RelationKeyIdentity.String(): pbtypes.String("AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"),
- bundle.RelationKeyGlobalName.String(): pbtypes.String("john.any"),
- bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
- bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Owner)),
- },
- },
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String("member-2"),
bundle.RelationKeyName.String(): pbtypes.String("Jane Doe"),
bundle.RelationKeyIconImage.String(): pbtypes.String(iconImage),
bundle.RelationKeyIdentity.String(): pbtypes.String("AAjLbEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMD4"),
@@ -278,6 +335,24 @@ func TestSpaceService_ListMembers(t *testing.T) {
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
}).Once()
+ fx.mwMock.On("ObjectSearch", mock.Anything, activeReq).
+ Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-2"),
+ bundle.RelationKeyName.String(): pbtypes.String("John Doe"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("john.any"),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Owner)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
// when
members, total, hasMore, err := fx.ListMembers(nil, "space-id", offset, limit)
@@ -286,18 +361,18 @@ func TestSpaceService_ListMembers(t *testing.T) {
require.Len(t, members, 2)
require.Equal(t, "member-1", members[0].Id)
- require.Equal(t, "John Doe", members[0].Name)
- require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("👤")}, members[0].Icon)
- require.Equal(t, "john.any", members[0].GlobalName)
- require.Equal(t, "active", members[0].Status)
- require.Equal(t, "owner", members[0].Role)
+ require.Equal(t, "Jane Doe", members[0].Name)
+ require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), *members[0].Icon.File, "Icon URL does not match")
+ require.Equal(t, "jane.any", members[0].GlobalName)
+ require.Equal(t, "joining", members[0].Status)
+ require.Equal(t, "no_permissions", members[0].Role)
require.Equal(t, "member-2", members[1].Id)
- require.Equal(t, "Jane Doe", members[1].Name)
- require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), *members[1].Icon.File, "Icon URL does not match")
- require.Equal(t, "jane.any", members[1].GlobalName)
- require.Equal(t, "joining", members[1].Status)
- require.Equal(t, "no_permissions", members[1].Role)
+ require.Equal(t, "John Doe", members[1].Name)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("👤")}, members[1].Icon)
+ require.Equal(t, "john.any", members[1].GlobalName)
+ require.Equal(t, "active", members[1].Status)
+ require.Equal(t, "owner", members[1].Role)
require.Equal(t, 2, total)
require.False(t, hasMore)
@@ -307,7 +382,13 @@ func TestSpaceService_ListMembers(t *testing.T) {
// given
fx := newFixture(t)
- fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).
+ fx.mwMock.On("ObjectSearch", mock.Anything, activeReq).
+ Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{},
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, joiningReq).
Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{},
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
From 54d70de7883e2c64d7e3282ff3c07d94e092e130 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Mar 2025 14:24:26 +0100
Subject: [PATCH 055/132] GO-4459: Update swagger
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index ecf0e0b1d..24e52deab 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -9,7 +9,7 @@ const docTemplate = `{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 388b43ff8..28b241cbd 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -2,7 +2,7 @@
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 6383c46ec..7a687560f 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1188,7 +1188,7 @@ paths:
required: true
schema:
type: string
- - description: Member ID
+ - description: Member ID or Identity
in: path
name: member_id
required: true
From 28f279fa0252ea50deb2d2a88df1ab7469bdfc2f Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Mar 2025 14:24:32 +0100
Subject: [PATCH 056/132] GO-4459: Fix lint
---
core/api/internal/space/service.go | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index 0312b0c0e..2e9ea6c6f 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -226,7 +226,9 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
return nil, 0, false, ErrFailedListMembers
}
- combinedRecords := append(joiningResp.Records, activeResp.Records...)
+ combinedRecords := make([]*types.Struct, 0, len(joiningResp.Records)+len(activeResp.Records))
+ combinedRecords = append(combinedRecords, joiningResp.Records...)
+ combinedRecords = append(combinedRecords, activeResp.Records...)
total = len(combinedRecords)
paginatedMembers, hasMore := pagination.Paginate(combinedRecords, offset, limit)
From 8fffbc2ab72b8a4e22e380358b19bd1282d5c6c3 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Sun, 16 Mar 2025 21:27:08 +0100
Subject: [PATCH 057/132] GO-4459: Update metadata header to use date
Anytype-Version
---
core/api/server/middleware.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go
index 2317c935f..f83e26e04 100644
--- a/core/api/server/middleware.go
+++ b/core/api/server/middleware.go
@@ -99,7 +99,7 @@ func (s *Server) ensureAccountInfo(accountService account.Service) gin.HandlerFu
// ensureMetadataHeader is a middleware that ensures the metadata header is set.
func (s *Server) ensureMetadataHeader() gin.HandlerFunc {
return func(c *gin.Context) {
- c.Writer.Header().Set("X-API-Version", "0.0.2")
+ c.Writer.Header().Set("Anytype-Version", "2025-03-17")
c.Next()
}
}
From 41d9946947fbbfa916746c551d8a9dde5a8afa84 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 17 Mar 2025 11:57:47 +0100
Subject: [PATCH 058/132] GO-4459: Rename relation references to property
everywhere
---
core/api/docs/docs.go | 4 ++--
core/api/docs/swagger.json | 4 ++--
core/api/docs/swagger.yaml | 31 ++++++++++++-----------------
core/api/internal/object/handler.go | 4 ++--
core/api/internal/object/model.go | 15 +++++---------
core/api/internal/object/service.go | 13 ++++++------
core/api/util/util.go | 12 +++++------
7 files changed, 37 insertions(+), 46 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 24e52deab..611b81149 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 28b241cbd..c35839505 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"relation":{"$ref":"#/components/schemas/object.Relation"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the relation used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Relation":{"description":"The relation block, if applicable","properties":{"id":{"type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the relation used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"relation_key":{"description":"The relation key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 7a687560f..72e29852f 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -57,8 +57,8 @@ components:
description: The id of the block
example: 64394517de52ad5acb89c66c
type: string
- relation:
- $ref: '#/components/schemas/object.Relation'
+ property:
+ $ref: '#/components/schemas/object.Property'
text:
$ref: '#/components/schemas/object.Text'
vertical_align:
@@ -149,15 +149,15 @@ components:
example: contains
type: string
format:
- description: The format of the relation used for filtering
+ description: The format of the property used for filtering
example: text
type: string
id:
description: The id of the filter
example: 67bf3f21cda9134102e2422c
type: string
- relation_key:
- description: The relation key used for filtering
+ property_key:
+ description: The property key used for filtering
example: name
type: string
value:
@@ -220,6 +220,7 @@ components:
$ref: '#/components/schemas/object.Object'
type: object
object.Property:
+ description: The property block, if applicable
properties:
checkbox:
description: The checkbox value, if applicable
@@ -298,24 +299,18 @@ components:
example: https://example.com
type: string
type: object
- object.Relation:
- description: The relation block, if applicable
- properties:
- id:
- type: string
- type: object
object.Sort:
properties:
format:
- description: The format of the relation used for sorting
+ description: The format of the property used for sorting
example: text
type: string
id:
description: The id of the sort
example: 67bf3f21cda9134102e2422c
type: string
- relation_key:
- description: The relation key used for sorting
+ property_key:
+ description: The property key used for sorting
example: name
type: string
sort_type:
@@ -1346,7 +1341,7 @@ paths:
key details such as the object name, icon, description, body content (which
may support Markdown), source URL (required for bookmark objects), template
identifier, and the unique key for the object type. Post-creation, additional
- operations (like setting featured relations or fetching bookmark metadata)
+ operations (like setting featured properties or fetching bookmark metadata)
may occur. The endpoint then returns the full object data, ready for further
interactions.
parameters:
@@ -1465,9 +1460,9 @@ paths:
description: Fetches the full details of a single object identified by the object
ID within the specified space. The response includes not only basic metadata
(ID, name, icon, type) but also the complete set of blocks (which may include
- text, files, and relations) and extra details (such as timestamps and linked
- member information). This endpoint is essential when a client needs to render
- or edit the full object view.
+ text, files, properties and dataviews) and extra details (such as timestamps
+ and linked member information). This endpoint is essential when a client needs
+ to render or edit the full object view.
parameters:
- description: Space ID
in: path
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index 433a63b4f..a171c6e1c 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -49,7 +49,7 @@ func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
// GetObjectHandler retrieves an object in a space
//
// @Summary Get object
-// @Description Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, and relations) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.
+// @Description Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.
// @Tags objects
// @Produce json
// @Param space_id path string true "Space ID"
@@ -122,7 +122,7 @@ func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
// CreateObjectHandler creates a new object in a space
//
// @Summary Create object
-// @Description Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured relations or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.
+// @Description Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.
// @Tags objects
// @Accept json
// @Produce json
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 6952e2c5a..c0b715332 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -38,7 +38,7 @@ type Block struct {
VerticalAlign string `json:"vertical_align" enums:"VerticalAlignTop,VerticalAlignMiddle,VerticalAlignBottom" example:"VerticalAlignTop"` // The vertical alignment of the block
Text *Text `json:"text,omitempty"` // The text of the block, if applicable
File *File `json:"file,omitempty"` // The file of the block, if applicable
- Relation *Relation `json:"relation,omitempty"` // The relation block, if applicable
+ Property *Property `json:"property,omitempty"` // The property block, if applicable
Dataview *Dataview `json:"dataview,omitempty"` // The dataview, applicable for list objects
}
@@ -62,11 +62,6 @@ type File struct {
Style string `json:"style"` // The style of the file
}
-// TODO: fill in the relation struct
-type Relation struct {
- Id string
-}
-
type Dataview struct {
Views []View `json:"views"` // The list of views
}
@@ -81,16 +76,16 @@ type View struct {
type Filter struct {
Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the filter
- RelationKey string `json:"relation_key" example:"name"` // The relation key used for filtering
- Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the relation used for filtering
+ PropertyKey string `json:"property_key" example:"name"` // The property key used for filtering
+ Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the property used for filtering
Condition string `json:"condition" example:"contains" enum:"equal,not_equal,greater,less,greater_or_equal,less_or_equal,like,not_like,in,not_in,empty,not_empty,all_in,not_all_in,exact_in,not_exact_in,exists"` // The filter condition
Value string `json:"value" example:"Some value..."` // The value used for filtering
}
type Sort struct {
Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the sort
- RelationKey string `json:"relation_key" example:"name"` // The relation key used for sorting
- Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the relation used for sorting
+ PropertyKey string `json:"property_key" example:"name"` // The property key used for sorting
+ Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the property used for sorting
SortType string `json:"sort_type" example:"asc" enum:"asc,desc,custom"` // The sort direction
}
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 84619c425..f66b3d749 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -665,7 +665,7 @@ func (s *ObjectService) getProperty(key string, resp *pb.RpcObjectShowResponse)
// Fallback to resolving the property name
spaceId := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySpaceId.String()].GetStringValue()
- if name, err2 := util.ResolveRelationKeyToRelationName(s.mw, spaceId, key); err2 == nil {
+ if name, err2 := util.ResolveRelationKeyToPropertyName(s.mw, spaceId, key); err2 == nil {
return key, name
}
return key, key
@@ -788,7 +788,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
for _, block := range resp.ObjectView.Blocks {
var text *Text
var file *File
- var relation *Relation
+ var property *Property
var dataviewMapping *Dataview
switch content := block.Content.(type) {
@@ -813,7 +813,8 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
Style: model.BlockContentFileStyle_name[int32(content.File.Style)],
}
case *model.BlockContentOfRelation:
- relation = &Relation{
+ property = &Property{
+ // TODO: is it sufficient to return the id only?
Id: content.Relation.Key,
}
case *model.BlockContentOfDataview:
@@ -823,7 +824,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
for _, f := range v.Filters {
filters = append(filters, Filter{
Id: f.Id,
- RelationKey: f.RelationKey,
+ PropertyKey: f.RelationKey,
Format: s.mapRelationFormat(f.Format),
Condition: strcase.ToSnake(model.BlockContentDataviewFilterCondition_name[int32(f.Condition)]),
Value: f.Value.GetStringValue(),
@@ -833,7 +834,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
for _, srt := range v.Sorts {
sorts = append(sorts, Sort{
Id: srt.Id,
- RelationKey: srt.RelationKey,
+ PropertyKey: srt.RelationKey,
Format: s.mapRelationFormat(srt.Format),
SortType: strcase.ToSnake(model.BlockContentDataviewSortType_name[int32(srt.Type)]),
})
@@ -861,7 +862,7 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
VerticalAlign: model.BlockVerticalAlign_name[int32(block.VerticalAlign)],
Text: text,
File: file,
- Relation: relation,
+ Property: property,
Dataview: dataviewMapping,
})
}
diff --git a/core/api/util/util.go b/core/api/util/util.go
index 824da2f4b..de58ca31d 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -15,8 +15,8 @@ import (
var (
ErrFailedSearchType = errors.New("failed to search for type")
ErrorTypeNotFound = errors.New("type not found")
- ErrFailedSearchRelation = errors.New("failed to search for relation")
- ErrorRelationNotFound = errors.New("relation not found")
+ ErrFailedSearchProperty = errors.New("failed to search for property")
+ ErrorPropertyNotFound = errors.New("property not found")
)
var iconOptionToColor = map[float64]string{
@@ -97,8 +97,8 @@ func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, u
return resp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue(), nil
}
-// ResolveRelationKeyToRelationName resolves the relation key to the relation's name
-func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId string, relationKey string) (relation string, err error) {
+// ResolveRelationKeyToPropertyName resolves the property key to the property's name
+func ResolveRelationKeyToPropertyName(mw service.ClientCommandsServer, spaceId string, relationKey string) (property string, err error) {
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
@@ -117,11 +117,11 @@ func ResolveRelationKeyToRelationName(mw service.ClientCommandsServer, spaceId s
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
- return "", ErrFailedSearchRelation
+ return "", ErrFailedSearchProperty
}
if len(resp.Records) == 0 {
- return "", ErrorRelationNotFound
+ return "", ErrorPropertyNotFound
}
return resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue(), nil
From 52575ec2c36c88fa611198e82e56f4b8c834129e Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 17 Mar 2025 15:07:32 +0100
Subject: [PATCH 059/132] GO-4459: Add participant status and permissions to
excluded system properties
---
core/api/internal/object/service.go | 80 +++++++++++++++--------------
1 file changed, 41 insertions(+), 39 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index f66b3d749..0575112c1 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -44,45 +44,47 @@ var (
)
var excludedSystemProperties = map[string]bool{
- bundle.RelationKeyId.String(): true,
- bundle.RelationKeySpaceId.String(): true,
- bundle.RelationKeyName.String(): true,
- bundle.RelationKeyIconEmoji.String(): true,
- bundle.RelationKeyIconImage.String(): true,
- bundle.RelationKeyType.String(): true,
- bundle.RelationKeyResolvedLayout.String(): true,
- bundle.RelationKeyIsFavorite.String(): true,
- bundle.RelationKeyIsArchived.String(): true,
- bundle.RelationKeyIsDeleted.String(): true,
- bundle.RelationKeyIsHidden.String(): true,
- bundle.RelationKeyWorkspaceId.String(): true,
- bundle.RelationKeyInternalFlags.String(): true,
- bundle.RelationKeyRestrictions.String(): true,
- bundle.RelationKeyOrigin.String(): true,
- bundle.RelationKeySnippet.String(): true,
- bundle.RelationKeySyncStatus.String(): true,
- bundle.RelationKeySyncError.String(): true,
- bundle.RelationKeySyncDate.String(): true,
- bundle.RelationKeyCoverId.String(): true,
- bundle.RelationKeyCoverType.String(): true,
- bundle.RelationKeyCoverScale.String(): true,
- bundle.RelationKeyCoverX.String(): true,
- bundle.RelationKeyCoverY.String(): true,
- bundle.RelationKeyMentions.String(): true,
- bundle.RelationKeyOldAnytypeID.String(): true,
- bundle.RelationKeySource.String(): true,
- bundle.RelationKeySourceFilePath.String(): true,
- bundle.RelationKeyImportType.String(): true,
- bundle.RelationKeyTargetObjectType.String(): true,
- bundle.RelationKeyFeaturedRelations.String(): true,
- bundle.RelationKeySetOf.String(): true,
- bundle.RelationKeyLinks.String(): true,
- bundle.RelationKeyBacklinks.String(): true,
- bundle.RelationKeySourceObject.String(): true,
- bundle.RelationKeyLayoutAlign.String(): true,
- bundle.RelationKeyIsHiddenDiscovery.String(): true,
- bundle.RelationKeyLayout.String(): true,
- bundle.RelationKeyIsReadonly.String(): true,
+ bundle.RelationKeyId.String(): true,
+ bundle.RelationKeySpaceId.String(): true,
+ bundle.RelationKeyName.String(): true,
+ bundle.RelationKeyIconEmoji.String(): true,
+ bundle.RelationKeyIconImage.String(): true,
+ bundle.RelationKeyType.String(): true,
+ bundle.RelationKeyResolvedLayout.String(): true,
+ bundle.RelationKeyIsFavorite.String(): true,
+ bundle.RelationKeyIsArchived.String(): true,
+ bundle.RelationKeyIsDeleted.String(): true,
+ bundle.RelationKeyIsHidden.String(): true,
+ bundle.RelationKeyWorkspaceId.String(): true,
+ bundle.RelationKeyInternalFlags.String(): true,
+ bundle.RelationKeyRestrictions.String(): true,
+ bundle.RelationKeyOrigin.String(): true,
+ bundle.RelationKeySnippet.String(): true,
+ bundle.RelationKeySyncStatus.String(): true,
+ bundle.RelationKeySyncError.String(): true,
+ bundle.RelationKeySyncDate.String(): true,
+ bundle.RelationKeyCoverId.String(): true,
+ bundle.RelationKeyCoverType.String(): true,
+ bundle.RelationKeyCoverScale.String(): true,
+ bundle.RelationKeyCoverX.String(): true,
+ bundle.RelationKeyCoverY.String(): true,
+ bundle.RelationKeyMentions.String(): true,
+ bundle.RelationKeyOldAnytypeID.String(): true,
+ bundle.RelationKeySource.String(): true,
+ bundle.RelationKeySourceFilePath.String(): true,
+ bundle.RelationKeyImportType.String(): true,
+ bundle.RelationKeyTargetObjectType.String(): true,
+ bundle.RelationKeyFeaturedRelations.String(): true,
+ bundle.RelationKeySetOf.String(): true,
+ bundle.RelationKeyLinks.String(): true,
+ bundle.RelationKeyBacklinks.String(): true,
+ bundle.RelationKeySourceObject.String(): true,
+ bundle.RelationKeyLayoutAlign.String(): true,
+ bundle.RelationKeyIsHiddenDiscovery.String(): true,
+ bundle.RelationKeyLayout.String(): true,
+ bundle.RelationKeyIsReadonly.String(): true,
+ bundle.RelationKeyParticipantStatus.String(): true,
+ bundle.RelationKeyParticipantPermissions.String(): true,
}
type Service interface {
From c53874ffc938a88ee57e9c0d070a8c8a180a2e35 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 18 Mar 2025 11:30:44 +0100
Subject: [PATCH 060/132] GO-4459: Update member status and roles in docs and
models
---
core/api/docs/docs.go | 4 ++--
core/api/docs/swagger.json | 4 ++--
core/api/docs/swagger.yaml | 21 +++++++++++++--------
core/api/internal/space/handler.go | 4 ++--
core/api/internal/space/model.go | 6 +++---
core/api/internal/space/service.go | 26 +++++++++++++++++++-------
6 files changed, 41 insertions(+), 24 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 611b81149..83185dccf 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index c35839505..4ddc25af2 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["reader","writer","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["reader","writer"],"example":"reader","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 72e29852f..828904d96 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -606,8 +606,8 @@ components:
role:
description: The role of the member
enum:
- - reader
- - writer
+ - viewer
+ - editor
- owner
- no_permission
example: owner
@@ -617,6 +617,10 @@ components:
enum:
- joining
- active
+ - removed
+ - declined
+ - removing
+ - canceled
example: active
type: string
type: object
@@ -714,9 +718,9 @@ components:
role:
description: Role to assign if approving a joining member
enum:
- - reader
- - writer
- example: reader
+ - viewer
+ - editor
+ example: viewer
type: string
status:
description: Status of the member
@@ -1122,9 +1126,10 @@ paths:
get:
description: Returns a paginated list of members belonging to the specified
space. Each member record includes the member’s profile ID, name, icon (which
- may be derived from an emoji or image), network identity, global name, and
- role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features
- by allowing clients to show who is in a space and manage access rights.
+ may be derived from an emoji or image), network identity, global name, status
+ (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint
+ supports collaborative features by allowing clients to show who is in a space
+ and manage access rights.
parameters:
- description: Space ID
in: path
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 9c48334f0..7f6aab9ad 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -118,7 +118,7 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
// GetMembersHandler retrieves a list of members in a space
//
// @Summary List members
-// @Description Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, and role (e.g. Reader, Writer, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.
+// @Description Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.
// @Tags members
// @Produce json
// @Param space_id path string true "Space ID"
@@ -153,7 +153,7 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
// GetMemberHandler retrieves a member in a space
//
// @Summary Get member
-// @Description Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.
+// @Description Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.
// @Tags members
// @Produce json
// @Param space_id path string true "Space ID"
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index aea8a6f12..c9c3a58cd 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -40,7 +40,7 @@ type MemberResponse struct {
type UpdateMemberRequest struct {
Status string `json:"status" enums:"active,removed,declined" example:"active"` // Status of the member
- Role string `json:"role,omitempty" enums:"reader,writer" example:"reader"` // Role to assign if approving a joining member
+ Role string `json:"role,omitempty" enums:"viewer,editor" example:"viewer"` // Role to assign if approving a joining member
}
type Member struct {
@@ -50,6 +50,6 @@ type Member struct {
Icon util.Icon `json:"icon"` // The icon of the member
Identity string `json:"identity" example:"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ"` // The identity of the member in the network
GlobalName string `json:"global_name" example:"john.any"` // The global name of the member in the network
- Status string `json:"status" enums:"joining,active" example:"active"` // The status of the member
- Role string `json:"role" enums:"reader,writer,owner,no_permission" example:"owner"` // The role of the member
+ Status string `json:"status" enums:"joining,active,removed,declined,removing,canceled" example:"active"` // The status of the member
+ Role string `json:"role" enums:"viewer,editor,owner,no_permission" example:"owner"` // The role of the member
}
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index 2e9ea6c6f..401152cae 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -245,7 +245,7 @@ func (s *SpaceService) ListMembers(ctx context.Context, spaceId string, offset i
Identity: record.Fields[bundle.RelationKeyIdentity.String()].GetStringValue(),
GlobalName: record.Fields[bundle.RelationKeyGlobalName.String()].GetStringValue(),
Status: strcase.ToSnake(model.ParticipantStatus_name[int32(record.Fields[bundle.RelationKeyParticipantStatus.String()].GetNumberValue())]),
- Role: strcase.ToSnake(model.ParticipantPermissions_name[int32(record.Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())]),
+ Role: s.mapMemberPermissions(model.ParticipantPermissions(record.Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())),
}
members = append(members, member)
@@ -293,7 +293,7 @@ func (s *SpaceService) GetMember(ctx context.Context, spaceId string, memberId s
Identity: resp.Records[0].Fields[bundle.RelationKeyIdentity.String()].GetStringValue(),
GlobalName: resp.Records[0].Fields[bundle.RelationKeyGlobalName.String()].GetStringValue(),
Status: strcase.ToSnake(model.ParticipantStatus_name[int32(resp.Records[0].Fields[bundle.RelationKeyParticipantStatus.String()].GetNumberValue())]),
- Role: strcase.ToSnake(model.ParticipantPermissions_name[int32(resp.Records[0].Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())]),
+ Role: s.mapMemberPermissions(model.ParticipantPermissions(resp.Records[0].Fields[bundle.RelationKeyParticipantPermissions.String()].GetNumberValue())),
}, nil
}
@@ -310,7 +310,7 @@ func (s *SpaceService) UpdateMember(ctx context.Context, spaceId string, memberI
switch request.Status {
case "active":
- if request.Role != "reader" && request.Role != "writer" {
+ if request.Role != "viewer" && request.Role != "editor" {
return Member{}, ErrInvalidApproveMemberRole
}
@@ -398,12 +398,24 @@ func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon util.I
}, nil
}
+// mapMemberPermissions maps participant permissions to a role
+func (s *SpaceService) mapMemberPermissions(permissions model.ParticipantPermissions) string {
+ switch permissions {
+ case model.ParticipantPermissions_Reader:
+ return "viewer"
+ case model.ParticipantPermissions_Writer:
+ return "editor"
+ default:
+ return strcase.ToSnake(model.ParticipantPermissions_name[int32(permissions)])
+ }
+}
+
// mapMemberPermissions maps a role to participant permissions
-func (s *SpaceService) mapMemberRole(permission string) model.ParticipantPermissions {
- switch permission {
- case "reader":
+func (s *SpaceService) mapMemberRole(role string) model.ParticipantPermissions {
+ switch role {
+ case "viewer":
return model.ParticipantPermissions_Reader
- case "writer":
+ case "editor":
return model.ParticipantPermissions_Writer
default:
return model.ParticipantPermissions_Reader
From 4df8ec2380cc1eb0f8bea064fa4cbdba358272c8 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 18 Mar 2025 17:00:55 +0100
Subject: [PATCH 061/132] GO-4459: Add unit tests for list service
---
core/api/internal/list/service_test.go | 499 +++++++++++++++++++++++++
1 file changed, 499 insertions(+)
create mode 100644 core/api/internal/list/service_test.go
diff --git a/core/api/internal/list/service_test.go b/core/api/internal/list/service_test.go
new file mode 100644
index 000000000..d7c0cedbc
--- /dev/null
+++ b/core/api/internal/list/service_test.go
@@ -0,0 +1,499 @@
+package list
+
+import (
+ "context"
+ "testing"
+
+ "github.com/gogo/protobuf/types"
+ "github.com/stretchr/testify/mock"
+ "github.com/stretchr/testify/require"
+
+ "github.com/anyproto/anytype-heart/core/api/internal/object"
+ "github.com/anyproto/anytype-heart/core/api/internal/space"
+ "github.com/anyproto/anytype-heart/pb"
+ "github.com/anyproto/anytype-heart/pb/service/mock_service"
+ "github.com/anyproto/anytype-heart/pkg/lib/bundle"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+ "github.com/anyproto/anytype-heart/util/pbtypes"
+)
+
+const (
+ mockedSpaceId = "mocked-space-id"
+ mockedListId = "mocked-list-id"
+ mockedViewId = "view-1"
+ offset = 0
+ limit = 100
+)
+
+type fixture struct {
+ *ListService
+ mwMock *mock_service.MockClientCommandsServer
+ objectService *object.ObjectService
+}
+
+func newFixture(t *testing.T) *fixture {
+ mw := mock_service.NewMockClientCommandsServer(t)
+ spaceService := space.NewService(mw)
+ objSvc := object.NewService(mw, spaceService)
+ objSvc.AccountInfo = &model.AccountInfo{
+ TechSpaceId: "mocked-tech-space-id",
+ GatewayUrl: "http://localhost:31006",
+ }
+ listSvc := NewService(mw, objSvc)
+ return &fixture{
+ ListService: listSvc,
+ mwMock: mw,
+ objectService: objSvc,
+ }
+}
+
+func TestListService_GetObjectsInList(t *testing.T) {
+
+ t.Run("successful", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // Prepare a dataview view with dummy sorts and filters.
+ sorts := []*model.BlockContentDataviewSort{
+ {
+ RelationKey: "dummy-sort",
+ Type: model.BlockContentDataviewSort_Asc,
+ },
+ }
+ filters := []*model.BlockContentDataviewFilter{
+ {
+ RelationKey: "dummy-filter",
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("dummy-value"),
+ },
+ }
+ view := &model.BlockContentDataviewView{
+ Id: mockedViewId,
+ Sorts: sorts,
+ Filters: filters,
+ }
+
+ // Expect the ObjectShow call for the list to return a block with a dataview.
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{view},
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
+ // Expect the ObjectSearchSubscribe call to return one record.
+ fx.mwMock.
+ On("ObjectSearchSubscribe", mock.Anything, &pb.RpcObjectSearchSubscribeRequest{
+ SpaceId: mockedSpaceId,
+ Limit: int64(limit),
+ Offset: int64(offset),
+ Keys: []string{bundle.RelationKeyId.String()},
+ CollectionId: mockedListId,
+ Sorts: sorts,
+ Filters: filters,
+ }).
+ Return(&pb.RpcObjectSearchSubscribeResponse{
+ Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_NULL},
+ Counters: &pb.EventObjectSubscriptionCounters{Total: 1},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("object-1"),
+ },
+ },
+ },
+ }, nil).Once()
+
+ // Expect the object service to be called to get details for "object-1".
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: "object-1",
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Id: "object-1",
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("object-1"),
+ bundle.RelationKeyName.String(): pbtypes.String("Object One"),
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
+ // when
+ objects, total, hasMore, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+
+ // then
+ require.NoError(t, err)
+ require.Len(t, objects, 1)
+ require.Equal(t, 1, total)
+ require.False(t, hasMore)
+ require.Equal(t, "object-1", objects[0].Id)
+ require.Equal(t, "Object One", objects[0].Name)
+ })
+
+ t.Run("object show error", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // Simulate an error response (non-NULL error code) from ObjectShow for the list.
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_UNKNOWN_ERROR},
+ }, nil).Once()
+
+ // when
+ _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+
+ // then
+ require.ErrorIs(t, err, ErrFailedGetList)
+ })
+
+ t.Run("no dataview block", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // Return an ObjectView that does not contain a block with ID "dataview".
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {Id: "non-dataview"},
+ },
+ },
+ }, nil).Once()
+
+ // when
+ _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+
+ // then
+ require.ErrorIs(t, err, ErrFailedGetListDataview)
+ })
+
+ t.Run("invalid dataview content", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // Return a "dataview" block that does not have the expected content type.
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: nil,
+ },
+ },
+ },
+ }, nil).Once()
+
+ // when
+ _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+
+ // then
+ require.ErrorIs(t, err, ErrFailedGetListDataview)
+ })
+
+ t.Run("view not found", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // Prepare a dataview that only contains a view with an ID different from the one requested.
+ view := &model.BlockContentDataviewView{
+ Id: "some-other-view",
+ Sorts: []*model.BlockContentDataviewSort{},
+ Filters: []*model.BlockContentDataviewFilter{},
+ }
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{view},
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
+ // when
+ _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "non-existent-view", offset, limit)
+
+ // then
+ require.ErrorIs(t, err, ErrFailedGetListDataviewView)
+ })
+
+ t.Run("search subscribe error", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // Prepare an empty dataview view (no sorts/filters).
+ sorts := []*model.BlockContentDataviewSort{}
+ filters := []*model.BlockContentDataviewFilter{}
+ view := &model.BlockContentDataviewView{
+ Id: mockedViewId,
+ Sorts: sorts,
+ Filters: filters,
+ }
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{view},
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
+ // Simulate an error from ObjectSearchSubscribe.
+ fx.mwMock.
+ On("ObjectSearchSubscribe", mock.Anything, &pb.RpcObjectSearchSubscribeRequest{
+ SpaceId: mockedSpaceId,
+ Limit: int64(limit),
+ Offset: int64(offset),
+ Keys: []string{bundle.RelationKeyId.String()},
+ CollectionId: mockedListId,
+ Sorts: sorts,
+ Filters: filters,
+ }).
+ Return(&pb.RpcObjectSearchSubscribeResponse{
+ Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_UNKNOWN_ERROR},
+ }, nil).Once()
+
+ // when
+ _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+
+ // then
+ require.ErrorIs(t, err, ErrFailedGetObjectsInList)
+ })
+
+ t.Run("get object error", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ var sorts []*model.BlockContentDataviewSort
+ var filters []*model.BlockContentDataviewFilter
+ view := &model.BlockContentDataviewView{
+ Id: mockedViewId,
+ Sorts: sorts,
+ Filters: filters,
+ }
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{view},
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
+ fx.mwMock.
+ On("ObjectSearchSubscribe", mock.Anything, &pb.RpcObjectSearchSubscribeRequest{
+ SpaceId: mockedSpaceId,
+ Limit: int64(limit),
+ Offset: int64(offset),
+ Keys: []string{bundle.RelationKeyId.String()},
+ CollectionId: mockedListId,
+ Sorts: sorts,
+ Filters: filters,
+ }).
+ Return(&pb.RpcObjectSearchSubscribeResponse{
+ Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_NULL},
+ Counters: &pb.EventObjectSubscriptionCounters{Total: 1},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("object-err"),
+ },
+ },
+ },
+ }, nil).Once()
+
+ // Simulate an error when trying to retrieve the object details.
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: "object-err",
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NOT_FOUND},
+ }, nil).Once()
+
+ // when
+ _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+
+ // then
+ require.ErrorIs(t, err, object.ErrObjectNotFound)
+ })
+}
+
+func TestListService_AddObjectsToList(t *testing.T) {
+
+ t.Run("success", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+ objectIds := []string{"obj-1", "obj-2"}
+
+ fx.mwMock.
+ On("ObjectCollectionAdd", mock.Anything, &pb.RpcObjectCollectionAddRequest{
+ ContextId: mockedListId,
+ ObjectIds: objectIds,
+ }).
+ Return(&pb.RpcObjectCollectionAddResponse{
+ Error: &pb.RpcObjectCollectionAddResponseError{Code: pb.RpcObjectCollectionAddResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ err := fx.AddObjectsToList(ctx, mockedSpaceId, mockedListId, objectIds)
+
+ // then
+ require.NoError(t, err)
+ })
+
+ t.Run("failure", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+ objectIds := []string{"obj-1"}
+
+ fx.mwMock.
+ On("ObjectCollectionAdd", mock.Anything, &pb.RpcObjectCollectionAddRequest{
+ ContextId: mockedListId,
+ ObjectIds: objectIds,
+ }).
+ Return(&pb.RpcObjectCollectionAddResponse{
+ Error: &pb.RpcObjectCollectionAddResponseError{Code: pb.RpcObjectCollectionAddResponseError_UNKNOWN_ERROR},
+ }, nil).Once()
+
+ // when
+ err := fx.AddObjectsToList(ctx, mockedSpaceId, mockedListId, objectIds)
+
+ // then
+ require.ErrorIs(t, err, ErrFailedAddObjectsToList)
+ })
+}
+
+func TestListService_RemoveObjectsFromList(t *testing.T) {
+
+ t.Run("success", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+ objectIds := []string{"obj-1", "obj-2"}
+
+ fx.mwMock.
+ On("ObjectCollectionRemove", mock.Anything, &pb.RpcObjectCollectionRemoveRequest{
+ ContextId: mockedListId,
+ ObjectIds: objectIds,
+ }).
+ Return(&pb.RpcObjectCollectionRemoveResponse{
+ Error: &pb.RpcObjectCollectionRemoveResponseError{Code: pb.RpcObjectCollectionRemoveResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ err := fx.RemoveObjectsFromList(ctx, mockedSpaceId, mockedListId, objectIds)
+
+ // then
+ require.NoError(t, err)
+ })
+
+ t.Run("failure", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+ objectIds := []string{"obj-1"}
+
+ fx.mwMock.
+ On("ObjectCollectionRemove", mock.Anything, &pb.RpcObjectCollectionRemoveRequest{
+ ContextId: mockedListId,
+ ObjectIds: objectIds,
+ }).
+ Return(&pb.RpcObjectCollectionRemoveResponse{
+ Error: &pb.RpcObjectCollectionRemoveResponseError{Code: pb.RpcObjectCollectionRemoveResponseError_UNKNOWN_ERROR},
+ }, nil).Once()
+
+ // when
+ err := fx.RemoveObjectsFromList(ctx, mockedSpaceId, mockedListId, objectIds)
+
+ // then
+ require.ErrorIs(t, err, ErrFailedRemoveObjectsFromList)
+ })
+}
From 410e0dca70c23c11c9aa09d8cc749d27dd877e53 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 19 Mar 2025 10:00:52 +0100
Subject: [PATCH 062/132] GO-4459: Refactor sorting options to use typed
constants for direction and property and allow sorting after name
---
core/api/docs/docs.go | 4 +-
core/api/docs/swagger.json | 4 +-
core/api/docs/swagger.yaml | 43 +++++++----
core/api/internal/search/model.go | 20 ++++-
core/api/internal/search/service.go | 97 ++++++++++++++++--------
core/api/internal/search/service_test.go | 8 +-
6 files changed, 120 insertions(+), 56 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 83185dccf..d714d00ee 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 4ddc25af2..e3140ad98 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string"},"timestamp":{"default":"last_modified_date","description":"The timestamp to sort the search results by","enum":["created_date","last_modified_date","last_opened_date"],"type":"string"}},"type":"object"},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 828904d96..5d0289ee2 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -552,25 +552,38 @@ components:
type: array
uniqueItems: false
type: object
+ search.SortDirection:
+ default: desc
+ description: The direction to sort the search results
+ enum:
+ - asc
+ - desc
+ type: string
+ x-enum-varnames:
+ - Asc
+ - Desc
search.SortOptions:
description: The sorting criteria and direction for the search results
properties:
direction:
- default: desc
- description: The direction to sort the search results
- enum:
- - asc
- - desc
- type: string
- timestamp:
- default: last_modified_date
- description: The timestamp to sort the search results by
- enum:
- - created_date
- - last_modified_date
- - last_opened_date
- type: string
+ $ref: '#/components/schemas/search.SortDirection'
+ property:
+ $ref: '#/components/schemas/search.SortProperty'
type: object
+ search.SortProperty:
+ default: last_modified_date
+ description: The property to sort the search results by
+ enum:
+ - created_date
+ - last_modified_date
+ - last_opened_date
+ - name
+ type: string
+ x-enum-varnames:
+ - CreatedDate
+ - LastModifiedDate
+ - LastOpenedDate
+ - Name
space.CreateSpaceRequest:
properties:
name:
@@ -1179,7 +1192,7 @@ paths:
get:
description: Fetches detailed information about a single member within a space.
The endpoint returns the member’s identifier, name, icon, identity, global
- name, and role. This is useful for user profile pages, permission management,
+ name, status and role. This is useful for user profile pages, permission management,
and displaying member-specific information in collaborative environments.
parameters:
- description: Space ID
diff --git a/core/api/internal/search/model.go b/core/api/internal/search/model.go
index 5cf874790..eab85f5ba 100644
--- a/core/api/internal/search/model.go
+++ b/core/api/internal/search/model.go
@@ -1,5 +1,21 @@
package search
+type SortDirection string
+
+const (
+ Asc SortDirection = "asc"
+ Desc SortDirection = "desc"
+)
+
+type SortProperty string
+
+const (
+ CreatedDate SortProperty = "created_date"
+ LastModifiedDate SortProperty = "last_modified_date"
+ LastOpenedDate SortProperty = "last_opened_date"
+ Name SortProperty = "name"
+)
+
type SearchRequest struct {
Query string `json:"query" example:"test"` // The search term to look for in object names and snippets
Types []string `json:"types" example:"ot-page,ot-678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by unique key or ID
@@ -7,6 +23,6 @@ type SearchRequest struct {
}
type SortOptions struct {
- Direction string `json:"direction" enums:"asc,desc" default:"desc"` // The direction to sort the search results
- Timestamp string `json:"timestamp" enums:"created_date,last_modified_date,last_opened_date" default:"last_modified_date"` // The timestamp to sort the search results by
+ Property SortProperty `json:"property" enums:"created_date,last_modified_date,last_opened_date,name" default:"last_modified_date"` // The property to sort the search results by
+ Direction SortDirection `json:"direction" enums:"asc,desc" default:"desc"` // The direction to sort the search results
}
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index 0f62699b7..55d6e94d3 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -51,7 +51,15 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
if len(sorts) == 0 {
return nil, 0, false, errors.New("no sort criteria provided")
}
- dateToSortAfter := sorts[0].RelationKey
+ criterionToSortAfter := sorts[0].RelationKey
+
+ type sortRecord struct {
+ Id string
+ SpaceId string
+ numericSort float64
+ stringSort string
+ }
+ combinedRecords := make([]sortRecord, 0)
allResponses := make([]*pb.RpcObjectSearchResponse, 0, len(spaces))
for _, space := range spaces {
@@ -64,7 +72,7 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
SpaceId: space.Id,
Filters: filters,
Sorts: sorts,
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeySpaceId.String(), dateToSortAfter},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeySpaceId.String(), criterionToSortAfter},
Limit: int32(offset + limit), // nolint: gosec
})
@@ -75,29 +83,42 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
allResponses = append(allResponses, objResp)
}
- combinedRecords := make([]struct {
- Id string
- SpaceId string
- DateToSortAfter float64
- }, 0)
for _, objResp := range allResponses {
for _, record := range objResp.Records {
- combinedRecords = append(combinedRecords, struct {
- Id string
- SpaceId string
- DateToSortAfter float64
- }{
- Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(),
- SpaceId: record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(),
- DateToSortAfter: record.Fields[dateToSortAfter].GetNumberValue(),
- })
+ sr := sortRecord{
+ Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(),
+ SpaceId: record.Fields[bundle.RelationKeySpaceId.String()].GetStringValue(),
+ }
+ if criterionToSortAfter == bundle.RelationKeyName.String() {
+ sr.stringSort = record.Fields[criterionToSortAfter].GetStringValue()
+ } else {
+ sr.numericSort = record.Fields[criterionToSortAfter].GetNumberValue()
+ }
+ combinedRecords = append(combinedRecords, sr)
}
}
- // sort after posix last_modified_date to achieve descending sort order across all spaces
- sort.SliceStable(combinedRecords, func(i, j int) bool {
- return combinedRecords[i].DateToSortAfter > combinedRecords[j].DateToSortAfter
- })
+ if criterionToSortAfter == bundle.RelationKeyName.String() {
+ if sorts[0].Type == model.BlockContentDataviewSort_Asc {
+ sort.SliceStable(combinedRecords, func(i, j int) bool {
+ return combinedRecords[i].stringSort < combinedRecords[j].stringSort
+ })
+ } else {
+ sort.SliceStable(combinedRecords, func(i, j int) bool {
+ return combinedRecords[i].stringSort > combinedRecords[j].stringSort
+ })
+ }
+ } else {
+ if sorts[0].Type == model.BlockContentDataviewSort_Asc {
+ sort.SliceStable(combinedRecords, func(i, j int) bool {
+ return combinedRecords[i].numericSort < combinedRecords[j].numericSort
+ })
+ } else {
+ sort.SliceStable(combinedRecords, func(i, j int) bool {
+ return combinedRecords[i].numericSort > combinedRecords[j].numericSort
+ })
+ }
+ }
total = len(combinedRecords)
paginatedRecords, hasMore := pagination.Paginate(combinedRecords, offset, limit)
@@ -126,13 +147,13 @@ func (s *SearchService) Search(ctx context.Context, spaceId string, request Sear
if len(sorts) == 0 {
return nil, 0, false, errors.New("no sort criteria provided")
}
- dateToSortAfter := sorts[0].RelationKey
+ criterionToSortAfter := sorts[0].RelationKey
resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: filters,
Sorts: sorts,
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeySpaceId.String(), dateToSortAfter},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeySpaceId.String(), criterionToSortAfter},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
@@ -284,9 +305,9 @@ func (s *SearchService) prepareObjectTypeFilters(spaceId string, objectTypes []s
// prepareSorts returns a sort filter based on the given sort parameters
func (s *SearchService) prepareSorts(sort SortOptions) []*model.BlockContentDataviewSort {
primarySort := &model.BlockContentDataviewSort{
- RelationKey: s.getSortRelationKey(sort.Timestamp),
+ RelationKey: s.getSortRelationKey(sort.Property),
Type: s.getSortDirection(sort.Direction),
- Format: model.RelationFormat_date,
+ Format: s.getSortFormat(sort.Property),
IncludeTime: true,
EmptyPlacement: model.BlockContentDataviewSort_NotSpecified,
}
@@ -307,27 +328,41 @@ func (s *SearchService) prepareSorts(sort SortOptions) []*model.BlockContentData
}
// getSortRelationKey returns the relation key for the given sort timestamp
-func (s *SearchService) getSortRelationKey(timestamp string) string {
+func (s *SearchService) getSortRelationKey(timestamp SortProperty) string {
switch timestamp {
- case "created_date":
+ case CreatedDate:
return bundle.RelationKeyCreatedDate.String()
- case "last_modified_date":
+ case LastModifiedDate:
return bundle.RelationKeyLastModifiedDate.String()
- case "last_opened_date":
+ case LastOpenedDate:
return bundle.RelationKeyLastOpenedDate.String()
+ case Name:
+ return bundle.RelationKeyName.String()
default:
return bundle.RelationKeyLastModifiedDate.String()
}
}
// getSortDirection returns the sort direction for the given string
-func (s *SearchService) getSortDirection(direction string) model.BlockContentDataviewSortType {
+func (s *SearchService) getSortDirection(direction SortDirection) model.BlockContentDataviewSortType {
switch direction {
- case "asc":
+ case Asc:
return model.BlockContentDataviewSort_Asc
- case "desc":
+ case Desc:
return model.BlockContentDataviewSort_Desc
default:
return model.BlockContentDataviewSort_Desc
}
}
+
+// getSortFormat returns the sort format for the given timestamp
+func (s *SearchService) getSortFormat(timestamp SortProperty) model.RelationFormat {
+ switch timestamp {
+ case CreatedDate, LastModifiedDate, LastOpenedDate:
+ return model.RelationFormat_date
+ case Name:
+ return model.RelationFormat_longtext
+ default:
+ return model.RelationFormat_date
+ }
+}
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 0430a0a32..47cb157ae 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -355,7 +355,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
}, nil).Once()
// when
- objects, total, hasMore, err := fx.GlobalSearch(ctx, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Direction: "desc", Timestamp: "last_modified_date"}}, offset, limit)
+ objects, total, hasMore, err := fx.GlobalSearch(ctx, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Property: LastModifiedDate, Direction: Desc}}, offset, limit)
// then
require.NoError(t, err)
@@ -517,7 +517,7 @@ func TestSearchService_Search(t *testing.T) {
}).Once()
// when
- objects, total, hasMore, err := fx.Search(ctx, mockedSpaceId, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Direction: "desc", Timestamp: "last_modified_date"}}, offset, limit)
+ objects, total, hasMore, err := fx.Search(ctx, mockedSpaceId, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Property: LastModifiedDate, Direction: Desc}}, offset, limit)
// then
require.NoError(t, err)
@@ -542,7 +542,7 @@ func TestSearchService_Search(t *testing.T) {
}).Once()
// when
- objects, total, hasMore, err := fx.Search(ctx, mockedSpaceId, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Direction: "desc", Timestamp: "last_modified_date"}}, offset, limit)
+ objects, total, hasMore, err := fx.Search(ctx, mockedSpaceId, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Property: LastModifiedDate, Direction: Desc}}, offset, limit)
// then
require.NoError(t, err)
@@ -561,7 +561,7 @@ func TestSearchService_Search(t *testing.T) {
}).Once()
// when
- objects, total, hasMore, err := fx.Search(ctx, mockedSpaceId, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Direction: "desc", Timestamp: "last_modified_date"}}, offset, limit)
+ objects, total, hasMore, err := fx.Search(ctx, mockedSpaceId, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Property: LastModifiedDate, Direction: Desc}}, offset, limit)
// then
require.Error(t, err)
From baa455eb02805813cbfe1a5bf14ca99d4481fb7c Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 19 Mar 2025 10:13:37 +0100
Subject: [PATCH 063/132] GO-4459: Simplify sorting logic into single sort
function
---
core/api/internal/search/service.go | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index 55d6e94d3..329af7e80 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -98,27 +98,20 @@ func (s *SearchService) GlobalSearch(ctx context.Context, request SearchRequest,
}
}
- if criterionToSortAfter == bundle.RelationKeyName.String() {
- if sorts[0].Type == model.BlockContentDataviewSort_Asc {
- sort.SliceStable(combinedRecords, func(i, j int) bool {
+ sortFunc := func(i, j int) bool {
+ if criterionToSortAfter == bundle.RelationKeyName.String() {
+ if sorts[0].Type == model.BlockContentDataviewSort_Asc {
return combinedRecords[i].stringSort < combinedRecords[j].stringSort
- })
+ }
+ return combinedRecords[i].stringSort > combinedRecords[j].stringSort
} else {
- sort.SliceStable(combinedRecords, func(i, j int) bool {
- return combinedRecords[i].stringSort > combinedRecords[j].stringSort
- })
- }
- } else {
- if sorts[0].Type == model.BlockContentDataviewSort_Asc {
- sort.SliceStable(combinedRecords, func(i, j int) bool {
+ if sorts[0].Type == model.BlockContentDataviewSort_Asc {
return combinedRecords[i].numericSort < combinedRecords[j].numericSort
- })
- } else {
- sort.SliceStable(combinedRecords, func(i, j int) bool {
- return combinedRecords[i].numericSort > combinedRecords[j].numericSort
- })
+ }
+ return combinedRecords[i].numericSort > combinedRecords[j].numericSort
}
}
+ sort.SliceStable(combinedRecords, sortFunc)
total = len(combinedRecords)
paginatedRecords, hasMore := pagination.Paginate(combinedRecords, offset, limit)
From 2a7976eb1d02f46ded57cf437318fa50b9b0697a Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 19 Mar 2025 14:47:01 +0100
Subject: [PATCH 064/132] GO-4459: Fix v1 in swaggo router definition
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 386 +++++++++++++++---------------
core/api/internal/list/handler.go | 6 +-
4 files changed, 198 insertions(+), 198 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index d714d00ee..94ad69788 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -9,7 +9,7 @@ const docTemplate = `{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index e3140ad98..349a72860 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -2,7 +2,7 @@
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 5d0289ee2..15280ebda 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1135,6 +1135,199 @@ paths:
summary: Get space
tags:
- spaces
+ /spaces/{space_id}/lists/{list_id}/{view_id}/objects:
+ get:
+ description: Returns a paginated list of objects that are associated with a
+ specific list (or collection) within a space. This endpoint helps clients
+ to manage grouped objects (for example, tasks within a list) by returning
+ detailed object information for each item of the list.
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ schema:
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ schema:
+ type: string
+ - description: View ID
+ in: path
+ name: view_id
+ required: true
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
+ set
+ in: query
+ name: offset
+ schema:
+ default: 0
+ type: integer
+ - description: The number of items to return
+ in: query
+ name: limit
+ schema:
+ type: integer
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-object_Object'
+ description: List of objects
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
+ description: Not found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
+ description: Internal server error
+ security:
+ - bearerauth: []
+ summary: Get objects in list
+ tags:
+ - lists
+ /spaces/{space_id}/lists/{list_id}/objects:
+ post:
+ description: Enables clients to add one or more objects to a specific list by
+ submitting a JSON array of object IDs. Upon success, the endpoint returns
+ a confirmation message. This endpoint is vital for building user interfaces
+ that allow drag‑and‑drop or multi‑select additions to collections.
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ schema:
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ items:
+ type: string
+ type: array
+ description: List of object IDs
+ required: true
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: string
+ description: Objects added successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
+ description: Bad request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
+ description: Not found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
+ description: Internal server error
+ security:
+ - bearerauth: []
+ summary: Add objects to list
+ tags:
+ - lists
+ /spaces/{space_id}/lists/{list_id}/objects/{object_id}:
+ delete:
+ description: Removes a given object from the specified list in a space. The
+ endpoint takes the space, list, and object identifiers as path parameters.
+ It's subject to rate limiting and returns a success message on completion.
+ It is used for dynamically managing collections without affecting the underlying
+ object data.
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ schema:
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ schema:
+ type: string
+ - description: Object ID
+ in: path
+ name: object_id
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: string
+ description: Objects removed successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ValidationError'
+ description: Bad request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
+ description: Not found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
+ description: Internal server error
+ security:
+ - bearerauth: []
+ summary: Remove object from list
+ tags:
+ - lists
/spaces/{space_id}/members:
get:
description: Returns a paginated list of members belonging to the specified
@@ -1865,198 +2058,5 @@ paths:
summary: Get template
tags:
- templates
- /v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects:
- get:
- description: Returns a paginated list of objects that are associated with a
- specific list (or collection) within a space. This endpoint helps clients
- to manage grouped objects (for example, tasks within a list) by returning
- detailed object information for each item of the list.
- parameters:
- - description: Space ID
- in: path
- name: space_id
- required: true
- schema:
- type: string
- - description: List ID
- in: path
- name: list_id
- required: true
- schema:
- type: string
- - description: View ID
- in: path
- name: view_id
- required: true
- schema:
- type: string
- - description: The number of items to skip before starting to collect the result
- set
- in: query
- name: offset
- schema:
- default: 0
- type: integer
- - description: The number of items to return
- in: query
- name: limit
- schema:
- type: integer
- responses:
- "200":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/pagination.PaginatedResponse-object_Object'
- description: List of objects
- "401":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.UnauthorizedError'
- description: Unauthorized
- "404":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.NotFoundError'
- description: Not found
- "500":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.ServerError'
- description: Internal server error
- security:
- - bearerauth: []
- summary: Get objects in list
- tags:
- - lists
- /v1/spaces/{space_id}/lists/{list_id}/objects:
- post:
- description: Enables clients to add one or more objects to a specific list by
- submitting a JSON array of object IDs. Upon success, the endpoint returns
- a confirmation message. This endpoint is vital for building user interfaces
- that allow drag‑and‑drop or multi‑select additions to collections.
- parameters:
- - description: Space ID
- in: path
- name: space_id
- required: true
- schema:
- type: string
- - description: List ID
- in: path
- name: list_id
- required: true
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- items:
- type: string
- type: array
- description: List of object IDs
- required: true
- responses:
- "200":
- content:
- application/json:
- schema:
- type: string
- description: Objects added successfully
- "400":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.ValidationError'
- description: Bad request
- "401":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.UnauthorizedError'
- description: Unauthorized
- "404":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.NotFoundError'
- description: Not found
- "500":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.ServerError'
- description: Internal server error
- security:
- - bearerauth: []
- summary: Add objects to list
- tags:
- - lists
- /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id}:
- delete:
- description: Removes a given object from the specified list in a space. The
- endpoint takes the space, list, and object identifiers as path parameters.
- It's subject to rate limiting and returns a success message on completion.
- It is used for dynamically managing collections without affecting the underlying
- object data.
- parameters:
- - description: Space ID
- in: path
- name: space_id
- required: true
- schema:
- type: string
- - description: List ID
- in: path
- name: list_id
- required: true
- schema:
- type: string
- - description: Object ID
- in: path
- name: object_id
- required: true
- schema:
- type: string
- responses:
- "200":
- content:
- application/json:
- schema:
- type: string
- description: Objects removed successfully
- "400":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.ValidationError'
- description: Bad request
- "401":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.UnauthorizedError'
- description: Unauthorized
- "404":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.NotFoundError'
- description: Not found
- "500":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.ServerError'
- description: Internal server error
- security:
- - bearerauth: []
- summary: Remove object from list
- tags:
- - lists
servers:
- url: http://localhost:31009/v1
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index 63f9e86f7..4fece4d47 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -25,7 +25,7 @@ import (
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
-// @Router /v1/spaces/{space_id}/lists/{list_id}/{view_id}/objects [get]
+// @Router /spaces/{space_id}/lists/{list_id}/{view_id}/objects [get]
func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -65,7 +65,7 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects [post]
+// @Router /spaces/{space_id}/lists/{list_id}/objects [post]
func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
@@ -108,7 +108,7 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
// @Failure 404 {object} util.NotFoundError "Not found"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
-// @Router /v1/spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete]
+// @Router /spaces/{space_id}/lists/{list_id}/objects/{object_id} [delete]
func RemoveObjectFromListHandler(s *ListService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
From 558047275a1a88361bf07409efc987b7808a97b0 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 19 Mar 2025 15:27:08 +0100
Subject: [PATCH 065/132] GO-4459: Update object type references and
descriptions to use 'type_key' instead of 'unique_key'
---
core/api/docs/docs.go | 4 +--
core/api/docs/swagger.json | 4 +--
core/api/docs/swagger.yaml | 31 +++++++++++++-----------
core/api/internal/object/handler.go | 4 +--
core/api/internal/object/model.go | 18 +++++++-------
core/api/internal/object/service.go | 12 ++++-----
core/api/internal/object/service_test.go | 10 ++++----
7 files changed, 43 insertions(+), 40 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 94ad69788..1f837b15b 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 349a72860..888d0e090 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object_type_unique_key":{"description":"The unique key of the object type","example":"ot-page","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"unique_key":{"description":"The unique key of the type","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 15280ebda..3f18f7feb 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -88,10 +88,6 @@ components:
description: The name of the object
example: My object
type: string
- object_type_unique_key:
- description: The unique key of the object type
- example: ot-page
- type: string
source:
description: The source url, only applicable for bookmarks
example: https://bookmark-source.com
@@ -100,6 +96,10 @@ components:
description: The id of the template to use
example: bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge
type: string
+ type_key:
+ description: The key of the type of object to create
+ example: ot-page
+ type: string
type: object
object.Dataview:
description: The dataview, applicable for list objects
@@ -400,7 +400,7 @@ components:
icon:
$ref: '#/components/schemas/util.Icon'
id:
- description: The id of the type
+ description: The id of the type (which is unique across spaces)
example: bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu
type: string
name:
@@ -415,8 +415,9 @@ components:
description: The recommended layout of the type
example: todo
type: string
- unique_key:
- description: The unique key of the type
+ type_key:
+ description: The key of the type (can be the same across spaces for known
+ types)
example: ot-page
type: string
type: object
@@ -1551,10 +1552,10 @@ paths:
The creation process is subject to rate limiting. The payload must include
key details such as the object name, icon, description, body content (which
may support Markdown), source URL (required for bookmark objects), template
- identifier, and the unique key for the object type. Post-creation, additional
- operations (like setting featured properties or fetching bookmark metadata)
- may occur. The endpoint then returns the full object data, ready for further
- interactions.
+ identifier, and the type_key (which is the non-unique identifier of the type
+ of object to create). Post-creation, additional operations (like setting featured
+ properties or fetching bookmark metadata) may occur. The endpoint then returns
+ the full object data, ready for further interactions.
parameters:
- description: Space ID
in: path
@@ -1847,9 +1848,11 @@ paths:
get:
description: This endpoint retrieves a paginated list of object types (e.g.
'Page', 'Note', 'Task') available within the specified space. Each type’s
- record includes its unique identifier, unique key, display name, icon, and
- a recommended layout. Clients use this information when offering choices for
- object creation or for filtering objects by type.
+ record includes its unique identifier, type key, display name, icon, and a
+ recommended layout. While a type's id is truly unique, a type's key can be
+ the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients
+ use this information when offering choices for object creation or for filtering
+ objects by type through search.
parameters:
- description: Space ID
in: path
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index a171c6e1c..188714618 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -122,7 +122,7 @@ func DeleteObjectHandler(s *ObjectService) gin.HandlerFunc {
// CreateObjectHandler creates a new object in a space
//
// @Summary Create object
-// @Description Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the unique key for the object type. Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.
+// @Description Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.
// @Tags objects
// @Accept json
// @Produce json
@@ -169,7 +169,7 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
// GetTypesHandler retrieves a list of types in a space
//
// @Summary List types
-// @Description This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, unique key, display name, icon, and a recommended layout. Clients use this information when offering choices for object creation or for filtering objects by type.
+// @Description This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.
// @Tags types
// @Produce json
// @Param space_id path string true "Space ID"
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index c0b715332..3f59bdd96 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -3,13 +3,13 @@ package object
import "github.com/anyproto/anytype-heart/core/api/util"
type CreateObjectRequest struct {
- Name string `json:"name" example:"My object"` // The name of the object
- Icon string `json:"icon" example:"📄"` // The icon of the object
- Description string `json:"description" example:"This is a description of the object."` // The description of the object
- Body string `json:"body" example:"This is the body of the object. Markdown syntax is supported here."` // The body of the object
- Source string `json:"source" example:"https://bookmark-source.com"` // The source url, only applicable for bookmarks
- TemplateId string `json:"template_id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template to use
- ObjectTypeUniqueKey string `json:"object_type_unique_key" example:"ot-page"` // The unique key of the object type
+ Name string `json:"name" example:"My object"` // The name of the object
+ Icon string `json:"icon" example:"📄"` // The icon of the object
+ Description string `json:"description" example:"This is a description of the object."` // The description of the object
+ Body string `json:"body" example:"This is the body of the object. Markdown syntax is supported here."` // The body of the object
+ Source string `json:"source" example:"https://bookmark-source.com"` // The source url, only applicable for bookmarks
+ TemplateId string `json:"template_id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template to use
+ TypeKey string `json:"type_key" example:"ot-page"` // The key of the type of object to create
}
type ObjectResponse struct {
@@ -118,8 +118,8 @@ type TypeResponse struct {
type Type struct {
Object string `json:"object" example:"type"` // The data model of the object
- Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type
- UniqueKey string `json:"unique_key" example:"ot-page"` // The unique key of the type
+ Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type (which is unique across spaces)
+ TypeKey string `json:"type_key" example:"ot-page"` // The key of the type (can be the same across spaces for known types)
Name string `json:"name" example:"Page"` // The name of the type
Icon util.Icon `json:"icon"` // The icon of the type
RecommendedLayout string `json:"recommended_layout" example:"todo"` // The recommended layout of the type
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 0575112c1..b00f2fbd4 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -231,7 +231,7 @@ func (s *ObjectService) DeleteObject(ctx context.Context, spaceId string, object
// CreateObject creates a new object in a specific space.
func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, request CreateObjectRequest) (Object, error) {
- if request.ObjectTypeUniqueKey == "ot-bookmark" && request.Source == "" {
+ if request.TypeKey == "ot-bookmark" && request.Source == "" {
return Object{}, ErrInputMissingSource
}
@@ -249,7 +249,7 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques
Details: details,
TemplateId: request.TemplateId,
SpaceId: spaceId,
- ObjectTypeUniqueKey: request.ObjectTypeUniqueKey,
+ ObjectTypeUniqueKey: request.TypeKey,
WithChat: false,
})
@@ -271,7 +271,7 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques
}
// ObjectBookmarkFetch after creating a bookmark object
- if request.ObjectTypeUniqueKey == "ot-bookmark" {
+ if request.TypeKey == "ot-bookmark" {
bookmarkResp := s.mw.ObjectBookmarkFetch(ctx, &pb.RpcObjectBookmarkFetchRequest{
ContextId: resp.ObjectId,
Url: request.Source,
@@ -366,7 +366,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
types = append(types, Type{
Object: "type",
Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(),
- UniqueKey: record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ TypeKey: record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", record.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(record.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
@@ -394,7 +394,7 @@ func (s *ObjectService) GetType(ctx context.Context, spaceId string, typeId stri
return Type{
Object: "type",
Id: typeId,
- UniqueKey: details[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ TypeKey: details[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: details[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, details[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details[bundle.RelationKeyIconName.String()].GetStringValue(), details[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
@@ -517,7 +517,7 @@ func (s *ObjectService) getTypeFromDetails(typeId string, details []*model.Objec
return Type{
Object: "type",
Id: typeId,
- UniqueKey: objectTypeDetail.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ TypeKey: objectTypeDetail.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: objectTypeDetail.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, objectTypeDetail.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", objectTypeDetail.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), objectTypeDetail.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(objectTypeDetail.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index c964f2a4d..3e90e3bc3 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -227,7 +227,7 @@ func TestObjectService_ListObjects(t *testing.T) {
require.Len(t, objects, 1)
require.Equal(t, mockedTypeId, objects[0].Type.Id)
require.Equal(t, mockedTypeName, objects[0].Type.Name)
- require.Equal(t, mockedTypeUniqueKey, objects[0].Type.UniqueKey)
+ require.Equal(t, mockedTypeUniqueKey, objects[0].Type.TypeKey)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, objects[0].Type.Icon)
require.Equal(t, mockedObjectId, objects[0].Id)
require.Equal(t, mockedObjectName, objects[0].Name)
@@ -419,7 +419,7 @@ func TestObjectService_GetObject(t *testing.T) {
require.Equal(t, "object", object.Object)
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
- require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
+ require.Equal(t, mockedTypeUniqueKey, object.Type.TypeKey)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, object.Type.Icon)
require.Equal(t, mockedObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
@@ -548,7 +548,7 @@ func TestObjectService_CreateObject(t *testing.T) {
require.Equal(t, "object", object.Object)
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
- require.Equal(t, mockedTypeUniqueKey, object.Type.UniqueKey)
+ require.Equal(t, mockedTypeUniqueKey, object.Type.TypeKey)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, object.Type.Icon)
require.Equal(t, mockedNewObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
@@ -607,7 +607,7 @@ func TestObjectService_ListTypes(t *testing.T) {
require.Len(t, types, 1)
require.Equal(t, "type-1", types[0].Id)
require.Equal(t, "Type One", types[0].Name)
- require.Equal(t, "type-one-key", types[0].UniqueKey)
+ require.Equal(t, "type-one-key", types[0].TypeKey)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("🗂️")}, types[0].Icon)
require.Equal(t, 1, total)
require.False(t, hasMore)
@@ -670,7 +670,7 @@ func TestObjectService_GetType(t *testing.T) {
require.NoError(t, err)
require.Equal(t, mockedTypeId, objType.Id)
require.Equal(t, mockedTypeName, objType.Name)
- require.Equal(t, mockedTypeUniqueKey, objType.UniqueKey)
+ require.Equal(t, mockedTypeUniqueKey, objType.TypeKey)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, objType.Icon)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objType.RecommendedLayout)
})
From d1cc49bfadf64589308f2177a94e690fc6d07b04 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 19 Mar 2025 15:50:53 +0100
Subject: [PATCH 066/132] GO-4459: Refactor CreateObject to use util.Icon and
add validation for icons
---
core/api/internal/object/model.go | 14 ++++++-------
core/api/internal/object/service.go | 31 ++++++++++++++++++++---------
2 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 3f59bdd96..82e52001d 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -3,13 +3,13 @@ package object
import "github.com/anyproto/anytype-heart/core/api/util"
type CreateObjectRequest struct {
- Name string `json:"name" example:"My object"` // The name of the object
- Icon string `json:"icon" example:"📄"` // The icon of the object
- Description string `json:"description" example:"This is a description of the object."` // The description of the object
- Body string `json:"body" example:"This is the body of the object. Markdown syntax is supported here."` // The body of the object
- Source string `json:"source" example:"https://bookmark-source.com"` // The source url, only applicable for bookmarks
- TemplateId string `json:"template_id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template to use
- TypeKey string `json:"type_key" example:"ot-page"` // The key of the type of object to create
+ Name string `json:"name" example:"My object"` // The name of the object
+ Icon util.Icon `json:"icon"` // The icon of the object
+ Description string `json:"description" example:"This is a description of the object."` // The description of the object
+ Body string `json:"body" example:"This is the body of the object. Markdown syntax is supported here."` // The body of the object
+ Source string `json:"source" example:"https://bookmark-source.com"` // The source url, only applicable for bookmarks
+ TemplateId string `json:"template_id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template to use
+ TypeKey string `json:"type_key" example:"ot-page"` // The key of the type of object to create
}
type ObjectResponse struct {
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index b00f2fbd4..6231df7a0 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -27,6 +27,7 @@ var (
ErrFailedDeleteObject = errors.New("failed to delete object")
ErrFailedCreateObject = errors.New("failed to create object")
ErrInputMissingSource = errors.New("source is missing for bookmark")
+ ErrIconNameColorNotSupported = errors.New("icon name and color are not supported for object")
ErrFailedSetPropertyFeatured = errors.New("failed to set property featured")
ErrFailedFetchBookmark = errors.New("failed to fetch bookmark")
ErrFailedCreateBlock = errors.New("failed to create block")
@@ -235,18 +236,30 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques
return Object{}, ErrInputMissingSource
}
- details := &types.Struct{
- Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String(request.Name),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String(request.Icon),
- bundle.RelationKeyDescription.String(): pbtypes.String(request.Description),
- bundle.RelationKeySource.String(): pbtypes.String(request.Source),
- bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)),
- },
+ // Validate icon: only allow either emoji or file, and disallow name and color fields.
+ if request.Icon.Name != nil || request.Icon.Color != nil {
+ return Object{}, ErrIconNameColorNotSupported
+ }
+
+ iconFields := map[string]*types.Value{}
+ if request.Icon.Emoji != nil {
+ iconFields[bundle.RelationKeyIconEmoji.String()] = pbtypes.String(*request.Icon.Emoji)
+ } else if request.Icon.File != nil {
+ iconFields[bundle.RelationKeyIconImage.String()] = pbtypes.String(*request.Icon.File)
+ }
+
+ fields := map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String(request.Name),
+ bundle.RelationKeyDescription.String(): pbtypes.String(request.Description),
+ bundle.RelationKeySource.String(): pbtypes.String(request.Source),
+ bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)),
+ }
+ for k, v := range iconFields {
+ fields[k] = v
}
resp := s.mw.ObjectCreate(ctx, &pb.RpcObjectCreateRequest{
- Details: details,
+ Details: &types.Struct{Fields: fields},
TemplateId: request.TemplateId,
SpaceId: spaceId,
ObjectTypeUniqueKey: request.TypeKey,
From 7a252a1b23672f1005eda9a1ea44476f86816455 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 19 Mar 2025 15:54:57 +0100
Subject: [PATCH 067/132] GO-4459: Fix tests and icon type
---
core/api/internal/object/service_test.go | 50 ++++++++++++------------
core/api/util/util.go | 18 ++++++---
2 files changed, 38 insertions(+), 30 deletions(-)
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 3e90e3bc3..6fd190e2f 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -18,25 +18,25 @@ import (
)
const (
- offset = 0
- limit = 100
- mockedTechSpaceId = "mocked-tech-space-id"
- gatewayUrl = "http://localhost:31006"
- mockedSpaceId = "mocked-space-id"
- mockedObjectId = "mocked-object-id"
- mockedNewObjectId = "mocked-new-object-id"
- mockedObjectName = "mocked-object-name"
- mockedObjectSnippet = "mocked-object-snippet"
- mockedObjectIcon = "🔍"
- mockedParticipantId = "mocked-participant-id"
- mockedObjectTypeUniqueKey = "ot-page"
- mockedTypeId = "mocked-type-id"
- mockedTypeName = "mocked-type-name"
- mockedTypeUniqueKey = "mocked-type-unique-key"
- mockedTypeIcon = "📝"
- mockedTemplateId = "mocked-template-id"
- mockedTemplateName = "mocked-template-name"
- mockedTemplateIcon = "📃"
+ offset = 0
+ limit = 100
+ mockedTechSpaceId = "mocked-tech-space-id"
+ gatewayUrl = "http://localhost:31006"
+ mockedSpaceId = "mocked-space-id"
+ mockedObjectId = "mocked-object-id"
+ mockedNewObjectId = "mocked-new-object-id"
+ mockedObjectName = "mocked-object-name"
+ mockedObjectSnippet = "mocked-object-snippet"
+ mockedObjectIcon = "🔍"
+ mockedParticipantId = "mocked-participant-id"
+ mockedTypeKey = "ot-page"
+ mockedTypeId = "mocked-type-id"
+ mockedTypeName = "mocked-type-name"
+ mockedTypeUniqueKey = "mocked-type-unique-key"
+ mockedTypeIcon = "📝"
+ mockedTemplateId = "mocked-template-id"
+ mockedTemplateName = "mocked-template-name"
+ mockedTemplateIcon = "📃"
)
type fixture struct {
@@ -483,7 +483,7 @@ func TestObjectService_CreateObject(t *testing.T) {
},
TemplateId: mockedTemplateId,
SpaceId: mockedSpaceId,
- ObjectTypeUniqueKey: mockedObjectTypeUniqueKey,
+ ObjectTypeUniqueKey: mockedTypeKey,
WithChat: false,
}).Return(&pb.RpcObjectCreateResponse{
ObjectId: mockedNewObjectId,
@@ -537,10 +537,10 @@ func TestObjectService_CreateObject(t *testing.T) {
// when
object, err := fx.CreateObject(ctx, mockedSpaceId, CreateObjectRequest{
- Name: mockedObjectName,
- Icon: mockedObjectIcon,
- TemplateId: mockedTemplateId,
- ObjectTypeUniqueKey: mockedObjectTypeUniqueKey,
+ Name: mockedObjectName,
+ Icon: util.Icon{Format: util.IconFormatEmoji, Emoji: util.StringPtr(mockedObjectIcon)},
+ TemplateId: mockedTemplateId,
+ TypeKey: mockedTypeKey,
})
// then
@@ -569,7 +569,7 @@ func TestObjectService_CreateObject(t *testing.T) {
// when
object, err := fx.CreateObject(ctx, mockedSpaceId, CreateObjectRequest{
Name: "Fail Object",
- Icon: "",
+ Icon: util.Icon{},
})
// then
diff --git a/core/api/util/util.go b/core/api/util/util.go
index de58ca31d..c3c9f37bc 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -32,12 +32,20 @@ var iconOptionToColor = map[float64]string{
10: "lime",
}
+type IconFormat string
+
+const (
+ IconFormatEmoji IconFormat = "emoji"
+ IconFormatFile IconFormat = "file"
+ IconFormatIcon IconFormat = "icon"
+)
+
type Icon struct {
- Format string `json:"format" enums:"emoji,file,icon" example:"emoji"` // The type of the icon
- Emoji *string `json:"emoji,omitempty" example:"📄"` // The emoji of the icon
- File *string `json:"file,omitempty" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The file of the icon
- Name *string `json:"name,omitempty" example:"document"` // The name of the icon
- Color *string `json:"color,omitempty" example:"red"` // The color of the icon
+ Format IconFormat `json:"format" enums:"emoji,file,icon" example:"emoji"` // The type of the icon
+ Emoji *string `json:"emoji,omitempty" example:"📄"` // The emoji of the icon
+ File *string `json:"file,omitempty" example:"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay"` // The file of the icon
+ Name *string `json:"name,omitempty" example:"document"` // The name of the icon
+ Color *string `json:"color,omitempty" example:"red"` // The color of the icon
}
// StringPtr returns a pointer to the string
From 4e6f6f6bcc4e9ef059f73b53313a43ea71e6a3ba Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 19 Mar 2025 20:04:54 +0100
Subject: [PATCH 068/132] GO-4459: Clean up space model
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 77 ++++++------------------------
core/api/internal/space/model.go | 25 +++-------
core/api/internal/space/service.go | 25 +++-------
5 files changed, 28 insertions(+), 103 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 1f837b15b..4c4f81781 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 888d0e090..c7c6fd517 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"description":"The icon of the object","example":"📄","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"account_space_id":{"description":"The id of the account space","example":"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1","type":"string"},"analytics_id":{"description":"The analytics id of the account","example":"624aecdd-4797-4611-9d61-a2ae5f53cf1c","type":"string"},"archive_object_id":{"description":"The id of the archive object","example":"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri","type":"string"},"device_id":{"description":"The id of the device","example":"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"home_object_id":{"description":"The id of the home object","example":"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"local_storage_path":{"description":"The local storage path of the account","example":"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha","type":"string"},"marketplace_workspace_id":{"description":"The id of the marketplace workspace","example":"_anytype_marketplace","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"},"profile_object_id":{"description":"The id of the profile object","example":"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4","type":"string"},"space_view_id":{"description":"The id of the space view","example":"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy","type":"string"},"tech_space_id":{"description":"The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself","example":"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1","type":"string"},"timezone":{"description":"The timezone of the account","example":"","type":"string"},"widgets_id":{"description":"The id of the widgets","example":"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva","type":"string"},"workspace_object_id":{"description":"The id of the workspace object","example":"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 3f18f7feb..05ad5c24e 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -81,9 +81,7 @@ components:
example: This is a description of the object.
type: string
icon:
- description: The icon of the object
- example: "\U0001F4C4"
- type: string
+ $ref: '#/components/schemas/util.Icon'
name:
description: The name of the object
example: My object
@@ -646,44 +644,16 @@ components:
space.Space:
description: The space
properties:
- account_space_id:
- description: The id of the account space
- example: bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1
- type: string
- analytics_id:
- description: The analytics id of the account
- example: 624aecdd-4797-4611-9d61-a2ae5f53cf1c
- type: string
- archive_object_id:
- description: The id of the archive object
- example: bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri
- type: string
- device_id:
- description: The id of the device
- example: 12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF
- type: string
gateway_url:
description: The gateway url to serve files and media
example: http://127.0.0.1:31006
type: string
- home_object_id:
- description: The id of the home object
- example: bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya
- type: string
icon:
$ref: '#/components/schemas/util.Icon'
id:
description: The id of the space
example: bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1
type: string
- local_storage_path:
- description: The local storage path of the account
- example: /Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha
- type: string
- marketplace_workspace_id:
- description: The id of the marketplace workspace
- example: _anytype_marketplace
- type: string
name:
description: The name of the space
example: My Space
@@ -696,31 +666,6 @@ components:
description: The data model of the object
example: space
type: string
- profile_object_id:
- description: The id of the profile object
- example: bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4
- type: string
- space_view_id:
- description: The id of the space view
- example: bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy
- type: string
- tech_space_id:
- description: The id of tech space, where objects outside of user's actual
- spaces are stored, e.g. spaces itself
- example: bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1
- type: string
- timezone:
- description: The timezone of the account
- example: ""
- type: string
- widgets_id:
- description: The id of the widgets
- example: bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva
- type: string
- workspace_object_id:
- description: The id of the workspace object
- example: bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y
- type: string
type: object
space.SpaceResponse:
properties:
@@ -770,18 +715,24 @@ components:
example: http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay
type: string
format:
- description: The type of the icon
- enum:
- - emoji
- - file
- - icon
- example: emoji
- type: string
+ $ref: '#/components/schemas/util.IconFormat'
name:
description: The name of the icon
example: document
type: string
type: object
+ util.IconFormat:
+ description: The type of the icon
+ enum:
+ - emoji
+ - file
+ - icon
+ example: emoji
+ type: string
+ x-enum-varnames:
+ - IconFormatEmoji
+ - IconFormatFile
+ - IconFormatIcon
util.NotFoundError:
properties:
error:
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index c9c3a58cd..146e65ffb 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -13,25 +13,12 @@ type CreateSpaceRequest struct {
}
type Space struct {
- Object string `json:"object" example:"space"` // The data model of the object
- Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
- Name string `json:"name" example:"My Space"` // The name of the space
- Icon util.Icon `json:"icon"` // The icon of the space
- HomeObjectId string `json:"home_object_id" example:"bafyreie4qcl3wczb4cw5hrfyycikhjyh6oljdis3ewqrk5boaav3sbwqya"` // The id of the home object
- ArchiveObjectId string `json:"archive_object_id" example:"bafyreialsgoyflf3etjm3parzurivyaukzivwortf32b4twnlwpwocsrri"` // The id of the archive object
- ProfileObjectId string `json:"profile_object_id" example:"bafyreiaxhwreshjqwndpwtdsu4mtihaqhhmlygqnyqpfyfwlqfq3rm3gw4"` // The id of the profile object
- MarketplaceWorkspaceId string `json:"marketplace_workspace_id" example:"_anytype_marketplace"` // The id of the marketplace workspace
- WorkspaceObjectId string `json:"workspace_object_id" example:"bafyreiapey2g6e6za4zfxvlgwdy4hbbfu676gmwrhnqvjbxvrchr7elr3y"` // The id of the workspace object
- DeviceId string `json:"device_id" example:"12D3KooWGZMJ4kQVyQVXaj7gJPZr3RZ2nvd9M2Eq2pprEoPih9WF"` // The id of the device
- AccountSpaceId string `json:"account_space_id" example:"bafyreihpd2knon5wbljhtfeg3fcqtg3i2pomhhnigui6lrjmzcjzep7gcy.23me69r569oi1"` // The id of the account space
- WidgetsId string `json:"widgets_id" example:"bafyreialj7pceh53mifm5dixlho47ke4qjmsn2uh4wsjf7xq2pnlo5xfva"` // The id of the widgets
- SpaceViewId string `json:"space_view_id" example:"bafyreigzv3vq7qwlrsin6njoduq727ssnhwd6bgyfj6nm4hv3pxoc2rxhy"` // The id of the space view
- TechSpaceId string `json:"tech_space_id" example:"bafyreif4xuwncrjl6jajt4zrrfnylpki476nv2w64yf42ovt7gia7oypii.23me69r569oi1"` // The id of tech space, where objects outside of user's actual spaces are stored, e.g. spaces itself
- GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"` // The gateway url to serve files and media
- LocalStoragePath string `json:"local_storage_path" example:"/Users/johndoe/Library/Application Support/Anytype/data/AAHTtt1wuQEnaYBNZ2Cyfcvs6DqPqxgn8VXDVk4avsUkMuha"` // The local storage path of the account
- Timezone string `json:"timezone" example:""` // The timezone of the account
- AnalyticsId string `json:"analytics_id" example:"624aecdd-4797-4611-9d61-a2ae5f53cf1c"` // The analytics id of the account
- NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
+ Object string `json:"object" example:"space"` // The data model of the object
+ Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
+ Name string `json:"name" example:"My Space"` // The name of the space
+ Icon util.Icon `json:"icon"` // The icon of the space
+ GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"` // The gateway url to serve files and media
+ NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
}
type MemberResponse struct {
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index 401152cae..683d63187 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -376,25 +376,12 @@ func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon util.I
}
return Space{
- Object: "space",
- Id: spaceId,
- Name: name,
- Icon: icon,
- HomeObjectId: workspaceResponse.Info.HomeObjectId,
- ArchiveObjectId: workspaceResponse.Info.ArchiveObjectId,
- ProfileObjectId: workspaceResponse.Info.ProfileObjectId,
- MarketplaceWorkspaceId: workspaceResponse.Info.MarketplaceWorkspaceId,
- WorkspaceObjectId: workspaceResponse.Info.WorkspaceObjectId,
- DeviceId: workspaceResponse.Info.DeviceId,
- AccountSpaceId: workspaceResponse.Info.AccountSpaceId,
- WidgetsId: workspaceResponse.Info.WidgetsId,
- SpaceViewId: workspaceResponse.Info.SpaceViewId,
- TechSpaceId: workspaceResponse.Info.TechSpaceId,
- GatewayUrl: workspaceResponse.Info.GatewayUrl,
- LocalStoragePath: workspaceResponse.Info.LocalStoragePath,
- Timezone: workspaceResponse.Info.TimeZone,
- AnalyticsId: workspaceResponse.Info.AnalyticsId,
- NetworkId: workspaceResponse.Info.NetworkId,
+ Object: "space",
+ Id: spaceId,
+ Name: name,
+ Icon: icon,
+ GatewayUrl: workspaceResponse.Info.GatewayUrl,
+ NetworkId: workspaceResponse.Info.NetworkId,
}, nil
}
From 420277322b8d025c8565fa1be52ecfba99e378e2 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Thu, 20 Mar 2025 08:50:47 +0100
Subject: [PATCH 069/132] GO-4459: Refactor CreateObject errors, bookmark and
details
---
core/api/internal/object/handler.go | 5 +-
core/api/internal/object/service.go | 118 +++++++++++++++-------------
2 files changed, 69 insertions(+), 54 deletions(-)
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index 188714618..2bea31908 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -149,9 +149,12 @@ func CreateObjectHandler(s *ObjectService) gin.HandlerFunc {
object, err := s.CreateObject(c.Request.Context(), spaceId, request)
code := util.MapErrorCode(err,
util.ErrToCode(ErrInputMissingSource, http.StatusBadRequest),
+ util.ErrToCode(ErrIconNameColorNotSupported, http.StatusBadRequest),
+ util.ErrToCode(ErrFailedCreateBookmark, http.StatusInternalServerError),
util.ErrToCode(ErrFailedCreateObject, http.StatusInternalServerError),
util.ErrToCode(ErrFailedSetPropertyFeatured, http.StatusInternalServerError),
- util.ErrToCode(ErrFailedFetchBookmark, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedCreateBlock, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedPasteBody, http.StatusInternalServerError),
util.ErrToCode(ErrObjectNotFound, http.StatusInternalServerError),
util.ErrToCode(ErrFailedRetrieveObject, http.StatusInternalServerError),
)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 6231df7a0..36b0ee284 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -29,7 +29,7 @@ var (
ErrInputMissingSource = errors.New("source is missing for bookmark")
ErrIconNameColorNotSupported = errors.New("icon name and color are not supported for object")
ErrFailedSetPropertyFeatured = errors.New("failed to set property featured")
- ErrFailedFetchBookmark = errors.New("failed to fetch bookmark")
+ ErrFailedCreateBookmark = errors.New("failed to fetch bookmark")
ErrFailedCreateBlock = errors.New("failed to create block")
ErrFailedPasteBody = errors.New("failed to paste body")
@@ -232,74 +232,54 @@ func (s *ObjectService) DeleteObject(ctx context.Context, spaceId string, object
// CreateObject creates a new object in a specific space.
func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, request CreateObjectRequest) (Object, error) {
- if request.TypeKey == "ot-bookmark" && request.Source == "" {
- return Object{}, ErrInputMissingSource
+ details, err := s.buildObjectDetails(request)
+ if err != nil {
+ return Object{}, err
}
- // Validate icon: only allow either emoji or file, and disallow name and color fields.
- if request.Icon.Name != nil || request.Icon.Color != nil {
- return Object{}, ErrIconNameColorNotSupported
- }
+ var objectId string
+ if request.TypeKey == "ot-bookmark" {
+ resp := s.mw.ObjectCreateBookmark(ctx, &pb.RpcObjectCreateBookmarkRequest{
+ Details: details,
+ SpaceId: spaceId,
+ TemplateId: request.TemplateId,
+ })
- iconFields := map[string]*types.Value{}
- if request.Icon.Emoji != nil {
- iconFields[bundle.RelationKeyIconEmoji.String()] = pbtypes.String(*request.Icon.Emoji)
- } else if request.Icon.File != nil {
- iconFields[bundle.RelationKeyIconImage.String()] = pbtypes.String(*request.Icon.File)
- }
+ if resp.Error.Code != pb.RpcObjectCreateBookmarkResponseError_NULL {
+ return Object{}, ErrFailedCreateBookmark
+ }
+ objectId = resp.ObjectId
+ } else {
+ resp := s.mw.ObjectCreate(ctx, &pb.RpcObjectCreateRequest{
+ Details: details,
+ TemplateId: request.TemplateId,
+ SpaceId: spaceId,
+ ObjectTypeUniqueKey: request.TypeKey,
+ })
- fields := map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String(request.Name),
- bundle.RelationKeyDescription.String(): pbtypes.String(request.Description),
- bundle.RelationKeySource.String(): pbtypes.String(request.Source),
- bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)),
- }
- for k, v := range iconFields {
- fields[k] = v
- }
-
- resp := s.mw.ObjectCreate(ctx, &pb.RpcObjectCreateRequest{
- Details: &types.Struct{Fields: fields},
- TemplateId: request.TemplateId,
- SpaceId: spaceId,
- ObjectTypeUniqueKey: request.TypeKey,
- WithChat: false,
- })
-
- if resp.Error.Code != pb.RpcObjectCreateResponseError_NULL {
- return Object{}, ErrFailedCreateObject
+ if resp.Error.Code != pb.RpcObjectCreateResponseError_NULL {
+ return Object{}, ErrFailedCreateObject
+ }
+ objectId = resp.ObjectId
}
// ObjectRelationAddFeatured if description was set
if request.Description != "" {
relAddFeatResp := s.mw.ObjectRelationAddFeatured(ctx, &pb.RpcObjectRelationAddFeaturedRequest{
- ContextId: resp.ObjectId,
+ ContextId: objectId,
Relations: []string{bundle.RelationKeyDescription.String()},
})
if relAddFeatResp.Error.Code != pb.RpcObjectRelationAddFeaturedResponseError_NULL {
- object, _ := s.GetObject(ctx, spaceId, resp.ObjectId) // nolint:errcheck
+ object, _ := s.GetObject(ctx, spaceId, objectId) // nolint:errcheck
return object, ErrFailedSetPropertyFeatured
}
}
- // ObjectBookmarkFetch after creating a bookmark object
- if request.TypeKey == "ot-bookmark" {
- bookmarkResp := s.mw.ObjectBookmarkFetch(ctx, &pb.RpcObjectBookmarkFetchRequest{
- ContextId: resp.ObjectId,
- Url: request.Source,
- })
-
- if bookmarkResp.Error.Code != pb.RpcObjectBookmarkFetchResponseError_NULL {
- object, _ := s.GetObject(ctx, spaceId, resp.ObjectId) // nolint:errcheck
- return object, ErrFailedFetchBookmark
- }
- }
-
// First call BlockCreate at top, then BlockPaste to paste the body
if request.Body != "" {
blockCreateResp := s.mw.BlockCreate(ctx, &pb.RpcBlockCreateRequest{
- ContextId: resp.ObjectId,
+ ContextId: objectId,
TargetId: "",
Block: &model.Block{
Id: "",
@@ -321,23 +301,55 @@ func (s *ObjectService) CreateObject(ctx context.Context, spaceId string, reques
})
if blockCreateResp.Error.Code != pb.RpcBlockCreateResponseError_NULL {
- object, _ := s.GetObject(ctx, spaceId, resp.ObjectId) // nolint:errcheck
+ object, _ := s.GetObject(ctx, spaceId, objectId) // nolint:errcheck
return object, ErrFailedCreateBlock
}
blockPasteResp := s.mw.BlockPaste(ctx, &pb.RpcBlockPasteRequest{
- ContextId: resp.ObjectId,
+ ContextId: objectId,
FocusedBlockId: blockCreateResp.BlockId,
TextSlot: request.Body,
})
if blockPasteResp.Error.Code != pb.RpcBlockPasteResponseError_NULL {
- object, _ := s.GetObject(ctx, spaceId, resp.ObjectId) // nolint:errcheck
+ object, _ := s.GetObject(ctx, spaceId, objectId) // nolint:errcheck
return object, ErrFailedPasteBody
}
}
- return s.GetObject(ctx, spaceId, resp.ObjectId)
+ return s.GetObject(ctx, spaceId, objectId)
+}
+
+// buildObjectDetails extracts the details structure from the CreateObjectRequest.
+func (s *ObjectService) buildObjectDetails(request CreateObjectRequest) (*types.Struct, error) {
+ // Validate bookmark source
+ if request.TypeKey == "ot-bookmark" && request.Source == "" {
+ return nil, ErrInputMissingSource
+ }
+
+ // Validate icon: only allow either emoji or file, and disallow name and color fields.
+ if request.Icon.Name != nil || request.Icon.Color != nil {
+ return nil, ErrIconNameColorNotSupported
+ }
+
+ iconFields := map[string]*types.Value{}
+ if request.Icon.Emoji != nil {
+ iconFields[bundle.RelationKeyIconEmoji.String()] = pbtypes.String(*request.Icon.Emoji)
+ } else if request.Icon.File != nil {
+ iconFields[bundle.RelationKeyIconImage.String()] = pbtypes.String(*request.Icon.File)
+ }
+
+ fields := map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String(request.Name),
+ bundle.RelationKeyDescription.String(): pbtypes.String(request.Description),
+ bundle.RelationKeySource.String(): pbtypes.String(request.Source),
+ bundle.RelationKeyOrigin.String(): pbtypes.Int64(int64(model.ObjectOrigin_api)),
+ }
+ for k, v := range iconFields {
+ fields[k] = v
+ }
+
+ return &types.Struct{Fields: fields}, nil
}
// ListTypes returns a paginated list of types in a specific space.
From c74306844ddc25d1f3bf6ced1e6551bae40817f2 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Thu, 20 Mar 2025 13:06:44 +0100
Subject: [PATCH 070/132] GO-4459: Add GoneError struct and update error
handling for deleted object and type
---
core/api/docs/docs.go | 4 +--
core/api/docs/swagger.json | 4 +--
core/api/docs/swagger.yaml | 29 +++++++++++++++++++++
core/api/internal/object/handler.go | 4 +++
core/api/internal/object/model.go | 2 ++
core/api/internal/object/service.go | 39 +++++++++++++++++++++--------
core/api/util/error.go | 7 ++++++
7 files changed, 74 insertions(+), 15 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 4c4f81781..6fb9a1dea 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index c7c6fd517..548de4a93 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 05ad5c24e..c56929a6e 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -166,6 +166,10 @@ components:
object.Object:
description: The object
properties:
+ archived:
+ description: Whether the object is archived
+ example: false
+ type: boolean
blocks:
description: The blocks of the object
items:
@@ -395,6 +399,10 @@ components:
object.Type:
description: The type of the object
properties:
+ archived:
+ description: Whether the type is archived
+ example: false
+ type: boolean
icon:
$ref: '#/components/schemas/util.Icon'
id:
@@ -699,6 +707,15 @@ components:
type: string
type: object
type: object
+ util.GoneError:
+ properties:
+ error:
+ properties:
+ message:
+ example: Resource is gone
+ type: string
+ type: object
+ type: object
util.Icon:
description: The icon of the object
properties:
@@ -1658,6 +1675,12 @@ paths:
schema:
$ref: '#/components/schemas/util.NotFoundError'
description: Resource not found
+ "410":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.GoneError'
+ description: Resource deleted
"500":
content:
application/json:
@@ -1888,6 +1911,12 @@ paths:
schema:
$ref: '#/components/schemas/util.NotFoundError'
description: Resource not found
+ "410":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.GoneError'
+ description: Resource deleted
"500":
content:
application/json:
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index 2bea31908..7d7bd42a8 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -57,6 +57,7 @@ func GetObjectsHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} ObjectResponse "The requested object"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 410 {object} util.GoneError "Resource deleted"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/objects/{object_id} [get]
@@ -68,6 +69,7 @@ func GetObjectHandler(s *ObjectService) gin.HandlerFunc {
object, err := s.GetObject(c.Request.Context(), spaceId, objectId)
code := util.MapErrorCode(err,
util.ErrToCode(ErrObjectNotFound, http.StatusNotFound),
+ util.ErrToCode(ErrObjectDeleted, http.StatusGone),
util.ErrToCode(ErrFailedRetrieveObject, http.StatusInternalServerError),
)
@@ -215,6 +217,7 @@ func GetTypesHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} TypeResponse "The requested type"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 410 {object} util.GoneError "Resource deleted"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id} [get]
@@ -226,6 +229,7 @@ func GetTypeHandler(s *ObjectService) gin.HandlerFunc {
object, err := s.GetType(c.Request.Context(), spaceId, typeId)
code := util.MapErrorCode(err,
util.ErrToCode(ErrTypeNotFound, http.StatusNotFound),
+ util.ErrToCode(ErrTypeDeleted, http.StatusGone),
util.ErrToCode(ErrFailedRetrieveType, http.StatusInternalServerError),
)
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 82e52001d..db25f4538 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -26,6 +26,7 @@ type Object struct {
Layout string `json:"layout" example:"basic"` // The layout of the object
SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"` // The id of the object's root
+ Archived bool `json:"archived" example:"false"` // Whether the object is archived
Blocks []Block `json:"blocks"` // The blocks of the object
Properties []Property `json:"properties"` // The properties of the object
}
@@ -123,6 +124,7 @@ type Type struct {
Name string `json:"name" example:"Page"` // The name of the type
Icon util.Icon `json:"icon"` // The icon of the type
RecommendedLayout string `json:"recommended_layout" example:"todo"` // The recommended layout of the type
+ Archived bool `json:"archived" example:"false"` // Whether the type is archived
}
type TemplateResponse struct {
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 36b0ee284..927d05eb7 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -22,6 +22,7 @@ import (
var (
// objects
ErrObjectNotFound = errors.New("object not found")
+ ErrObjectDeleted = errors.New("object deleted")
ErrFailedRetrieveObject = errors.New("failed to retrieve object")
ErrFailedRetrieveObjects = errors.New("failed to retrieve list of objects")
ErrFailedDeleteObject = errors.New("failed to delete object")
@@ -36,6 +37,7 @@ var (
// types
ErrFailedRetrieveTypes = errors.New("failed to retrieve types")
ErrTypeNotFound = errors.New("type not found")
+ ErrTypeDeleted = errors.New("type deleted")
ErrFailedRetrieveType = errors.New("failed to retrieve type")
ErrFailedRetrieveTemplateType = errors.New("failed to retrieve template type")
ErrTemplateTypeNotFound = errors.New("template type not found")
@@ -183,12 +185,18 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
ObjectId: objectId,
})
- if resp.Error != nil && resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND || resp.ObjectView != nil && resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue() {
- return Object{}, ErrObjectNotFound
- }
+ if resp.Error != nil {
+ if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND {
+ return Object{}, ErrObjectNotFound
+ }
- if resp.Error != nil && resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
- return Object{}, ErrFailedRetrieveObject
+ if resp.Error.Code == pb.RpcObjectShowResponseError_OBJECT_DELETED {
+ return Object{}, ErrObjectDeleted
+ }
+
+ if resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return Object{}, ErrFailedRetrieveObject
+ }
}
details := resp.ObjectView.Details[0].Details.Fields
@@ -204,6 +212,7 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
Layout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
RootId: resp.ObjectView.RootId,
+ Archived: details[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
Blocks: s.getBlocks(resp),
Properties: s.getProperties(resp),
}
@@ -376,7 +385,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
Type: model.BlockContentDataviewSort_Asc,
},
},
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconName.String(), bundle.RelationKeyIconOption.String(), bundle.RelationKeyRecommendedLayout.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyUniqueKey.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconName.String(), bundle.RelationKeyIconOption.String(), bundle.RelationKeyRecommendedLayout.String(), bundle.RelationKeyIsArchived.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
@@ -395,6 +404,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", record.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(record.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
+ Archived: record.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
})
}
return types, total, hasMore, nil
@@ -407,12 +417,18 @@ func (s *ObjectService) GetType(ctx context.Context, spaceId string, typeId stri
ObjectId: typeId,
})
- if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND {
- return Type{}, ErrTypeNotFound
- }
+ if resp.Error != nil {
+ if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND {
+ return Type{}, ErrTypeNotFound
+ }
- if resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
- return Type{}, ErrFailedRetrieveType
+ if resp.Error.Code == pb.RpcObjectShowResponseError_OBJECT_DELETED {
+ return Type{}, ErrTypeDeleted
+ }
+
+ if resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return Type{}, ErrFailedRetrieveType
+ }
}
details := resp.ObjectView.Details[0].Details.Fields
@@ -423,6 +439,7 @@ func (s *ObjectService) GetType(ctx context.Context, spaceId string, typeId stri
Name: details[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, details[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details[bundle.RelationKeyIconName.String()].GetStringValue(), details[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
+ Archived: details[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
}, nil
}
diff --git a/core/api/util/error.go b/core/api/util/error.go
index 77aeff751..764359a57 100644
--- a/core/api/util/error.go
+++ b/core/api/util/error.go
@@ -33,6 +33,13 @@ type NotFoundError struct {
} `json:"error"`
}
+// GoneError is a struct for 410 errors
+type GoneError struct {
+ Error struct {
+ Message string `json:"message" example:"Resource is gone"`
+ } `json:"error"`
+}
+
// RateLimitError is a struct for 423 errors
type RateLimitError struct {
Error struct {
From 25dcfa45d6d1e6185d6a56a2c0a345d87e5ff8c6 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Thu, 20 Mar 2025 13:09:39 +0100
Subject: [PATCH 071/132] GO-4459: Remove RootId field from object model and
tests
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 4 ----
core/api/internal/object/model.go | 1 -
core/api/internal/object/service.go | 1 -
core/api/internal/search/service_test.go | 11 +++++------
6 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 6fb9a1dea..5b9b2ef04 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 548de4a93..358d61aa0 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"root_id":{"description":"The id of the object's root","example":"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u","type":"string"},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index c56929a6e..a64aec811 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -200,10 +200,6 @@ components:
$ref: '#/components/schemas/object.Property'
type: array
uniqueItems: false
- root_id:
- description: The id of the object's root
- example: bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u
- type: string
snippet:
description: The snippet of the object, especially important for notes as
they don't have a name
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index db25f4538..56d550576 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -25,7 +25,6 @@ type Object struct {
Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
Layout string `json:"layout" example:"basic"` // The layout of the object
SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
- RootId string `json:"root_id" example:"bafyreicypzj6uvu54664ucv3hmbsd5cmdy2dv4fwua26sciq74khzpyn4u"` // The id of the object's root
Archived bool `json:"archived" example:"false"` // Whether the object is archived
Blocks []Block `json:"blocks"` // The blocks of the object
Properties []Property `json:"properties"` // The properties of the object
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 927d05eb7..db846f1c0 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -211,7 +211,6 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
Snippet: details[bundle.RelationKeySnippet.String()].GetStringValue(),
Layout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
- RootId: resp.ObjectView.RootId,
Archived: details[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
Blocks: s.getBlocks(resp),
Properties: s.getProperties(resp),
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 47cb157ae..2cedc370a 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -28,7 +28,6 @@ const (
mockedObjectId = "mocked-object-id"
mockedObjectName = "mocked-object-name"
mockedObjectIcon = "🌐"
- mockedRootId = "mocked-root-id"
mockedParticipantId = "mocked-participant-id"
mockedType = "mocked-type"
mockedTagId1 = "mocked-tag-id-1"
@@ -199,10 +198,10 @@ func TestSearchService_GlobalSearch(t *testing.T) {
ObjectId: mockedObjectId,
}).Return(&pb.RpcObjectShowResponse{
ObjectView: &model.ObjectView{
- RootId: mockedRootId,
+ RootId: mockedObjectId,
Blocks: []*model.Block{
{
- Id: mockedRootId,
+ Id: mockedObjectId,
Restrictions: &model.BlockRestrictions{
Read: false,
Edit: false,
@@ -235,7 +234,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
},
Details: []*model.ObjectViewDetailsSet{
{
- Id: mockedRootId,
+ Id: mockedObjectId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
@@ -488,10 +487,10 @@ func TestSearchService_Search(t *testing.T) {
ObjectId: mockedObjectId,
}).Return(&pb.RpcObjectShowResponse{
ObjectView: &model.ObjectView{
- RootId: mockedRootId,
+ RootId: mockedObjectId,
Details: []*model.ObjectViewDetailsSet{
{
- Id: mockedRootId,
+ Id: mockedObjectId,
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedObjectId),
From de7ded441d910e9df79881fc25eaba9c74e5b36e Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Thu, 20 Mar 2025 13:38:46 +0100
Subject: [PATCH 072/132] GO-4459: Add archived and 410 for templates
---
core/api/docs/docs.go | 4 +--
core/api/docs/swagger.json | 4 +--
core/api/docs/swagger.yaml | 10 ++++++
core/api/internal/object/handler.go | 2 ++
core/api/internal/object/model.go | 17 ++++++-----
core/api/internal/object/service.go | 47 +++++++++++++++++------------
6 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 5b9b2ef04..4957bb441 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 358d61aa0..d93223be9 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index a64aec811..a60f9afd1 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -335,6 +335,10 @@ components:
object.Template:
description: The template
properties:
+ archived:
+ description: Whether the template is archived
+ example: false
+ type: boolean
icon:
$ref: '#/components/schemas/util.Icon'
id:
@@ -2026,6 +2030,12 @@ paths:
schema:
$ref: '#/components/schemas/util.NotFoundError'
description: Resource not found
+ "410":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.GoneError'
+ description: Resource deleted
"500":
content:
application/json:
diff --git a/core/api/internal/object/handler.go b/core/api/internal/object/handler.go
index 7d7bd42a8..e1378e3f9 100644
--- a/core/api/internal/object/handler.go
+++ b/core/api/internal/object/handler.go
@@ -295,6 +295,7 @@ func GetTemplatesHandler(s *ObjectService) gin.HandlerFunc {
// @Success 200 {object} TemplateResponse "The requested template"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 404 {object} util.NotFoundError "Resource not found"
+// @Failure 410 {object} util.GoneError "Resource deleted"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
// @Router /spaces/{space_id}/types/{type_id}/templates/{template_id} [get]
@@ -307,6 +308,7 @@ func GetTemplateHandler(s *ObjectService) gin.HandlerFunc {
object, err := s.GetTemplate(c.Request.Context(), spaceId, typeId, templateId)
code := util.MapErrorCode(err,
util.ErrToCode(ErrTemplateNotFound, http.StatusNotFound),
+ util.ErrToCode(ErrTemplateDeleted, http.StatusGone),
util.ErrToCode(ErrFailedRetrieveTemplate, http.StatusInternalServerError),
)
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 56d550576..a864d48ac 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -21,11 +21,11 @@ type Object struct {
Id string `json:"id" example:"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ"` // The id of the object
Name string `json:"name" example:"My object"` // The name of the object
Icon util.Icon `json:"icon"` // The icon of the object
- Type Type `json:"type"` // The type of the object
+ Archived bool `json:"archived" example:"false"` // Whether the object is archived
+ SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
Layout string `json:"layout" example:"basic"` // The layout of the object
- SpaceId string `json:"space_id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space the object is in
- Archived bool `json:"archived" example:"false"` // Whether the object is archived
+ Type Type `json:"type"` // The type of the object
Blocks []Block `json:"blocks"` // The blocks of the object
Properties []Property `json:"properties"` // The properties of the object
}
@@ -122,8 +122,8 @@ type Type struct {
TypeKey string `json:"type_key" example:"ot-page"` // The key of the type (can be the same across spaces for known types)
Name string `json:"name" example:"Page"` // The name of the type
Icon util.Icon `json:"icon"` // The icon of the type
- RecommendedLayout string `json:"recommended_layout" example:"todo"` // The recommended layout of the type
Archived bool `json:"archived" example:"false"` // Whether the type is archived
+ RecommendedLayout string `json:"recommended_layout" example:"todo"` // The recommended layout of the type
}
type TemplateResponse struct {
@@ -131,8 +131,9 @@ type TemplateResponse struct {
}
type Template struct {
- Object string `json:"object" example:"template"` // The data model of the object
- Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template
- Name string `json:"name" example:"My template"` // The name of the template
- Icon util.Icon `json:"icon"` // The icon of the template
+ Object string `json:"object" example:"template"` // The data model of the object
+ Id string `json:"id" example:"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge"` // The id of the template
+ Name string `json:"name" example:"My template"` // The name of the template
+ Icon util.Icon `json:"icon"` // The icon of the template
+ Archived bool `json:"archived" example:"false"` // Whether the template is archived
}
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index db846f1c0..36b5dcf99 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -44,6 +44,7 @@ var (
ErrFailedRetrieveTemplate = errors.New("failed to retrieve template")
ErrFailedRetrieveTemplates = errors.New("failed to retrieve templates")
ErrTemplateNotFound = errors.New("template not found")
+ ErrTemplateDeleted = errors.New("template deleted")
)
var excludedSystemProperties = map[string]bool{
@@ -207,11 +208,11 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
Id: details[bundle.RelationKeyId.String()].GetStringValue(),
Name: details[bundle.RelationKeyName.String()].GetStringValue(),
Icon: icon,
- Type: s.getTypeFromDetails(details[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
+ Archived: details[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
+ SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
Snippet: details[bundle.RelationKeySnippet.String()].GetStringValue(),
Layout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
- SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
- Archived: details[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
+ Type: s.getTypeFromDetails(details[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
Blocks: s.getBlocks(resp),
Properties: s.getProperties(resp),
}
@@ -402,8 +403,8 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
TypeKey: record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", record.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
- RecommendedLayout: model.ObjectTypeLayout_name[int32(record.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
Archived: record.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
+ RecommendedLayout: model.ObjectTypeLayout_name[int32(record.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
})
}
return types, total, hasMore, nil
@@ -437,8 +438,8 @@ func (s *ObjectService) GetType(ctx context.Context, spaceId string, typeId stri
TypeKey: details[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: details[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, details[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details[bundle.RelationKeyIconName.String()].GetStringValue(), details[bundle.RelationKeyIconOption.String()].GetNumberValue()),
- RecommendedLayout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
Archived: details[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
+ RecommendedLayout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
}, nil
}
@@ -478,7 +479,7 @@ func (s *ObjectService) ListTemplates(ctx context.Context, spaceId string, typeI
Value: pbtypes.String(templateTypeId),
},
},
- Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyTargetObjectType.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String()},
+ Keys: []string{bundle.RelationKeyId.String(), bundle.RelationKeyTargetObjectType.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIsArchived.String()},
})
if templateObjectsResp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
@@ -508,10 +509,11 @@ func (s *ObjectService) ListTemplates(ctx context.Context, spaceId string, typeI
}
templates = append(templates, Template{
- Object: "template",
- Id: templateId,
- Name: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: util.GetIcon(s.AccountInfo, templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", "", 0),
+ Object: "template",
+ Id: templateId,
+ Name: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ Icon: util.GetIcon(s.AccountInfo, templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", "", 0),
+ Archived: templateResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
})
}
@@ -525,19 +527,26 @@ func (s *ObjectService) GetTemplate(ctx context.Context, spaceId string, typeId
ObjectId: templateId,
})
- if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND {
- return Template{}, ErrTemplateNotFound
- }
+ if resp.Error != nil {
+ if resp.Error.Code == pb.RpcObjectShowResponseError_NOT_FOUND {
+ return Template{}, ErrTemplateNotFound
+ }
- if resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
- return Template{}, ErrFailedRetrieveTemplate
+ if resp.Error.Code == pb.RpcObjectShowResponseError_OBJECT_DELETED {
+ return Template{}, ErrTemplateDeleted
+ }
+
+ if resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return Template{}, ErrFailedRetrieveTemplate
+ }
}
return Template{
- Object: "template",
- Id: templateId,
- Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
- Icon: util.GetIcon(s.AccountInfo, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", "", 0),
+ Object: "template",
+ Id: templateId,
+ Name: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue(),
+ Icon: util.GetIcon(s.AccountInfo, resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", "", 0),
+ Archived: resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
}, nil
}
From ffa566e4d024a57d5b0ed542cbb59fdff1d4aa62 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Fri, 21 Mar 2025 10:37:11 +0100
Subject: [PATCH 073/132] GO-5303 type widget created notification
---
core/block/service.go | 3 +
core/block/widget.go | 29 +-
docs/proto.md | 20 +
pkg/lib/pb/model/models.pb.go | 1556 ++++++++++++++++----------
pkg/lib/pb/model/protos/models.proto | 8 +
5 files changed, 1036 insertions(+), 580 deletions(-)
diff --git a/core/block/service.go b/core/block/service.go
index 64934e594..9e801e050 100644
--- a/core/block/service.go
+++ b/core/block/service.go
@@ -35,6 +35,7 @@ import (
"github.com/anyproto/anytype-heart/core/files"
"github.com/anyproto/anytype-heart/core/files/fileobject"
"github.com/anyproto/anytype-heart/core/files/fileuploader"
+ "github.com/anyproto/anytype-heart/core/notifications"
"github.com/anyproto/anytype-heart/core/session"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
@@ -100,6 +101,7 @@ type Service struct {
builtinObjectService builtinObjects
fileObjectService fileobject.Service
detailsService detailservice.Service
+ notificationService notifications.Notifications
fileService files.Service
fileUploaderService fileuploader.Service
@@ -127,6 +129,7 @@ func (s *Service) Init(a *app.App) (err error) {
s.objectStore = a.MustComponent(objectstore.CName).(objectstore.ObjectStore)
s.restriction = a.MustComponent(restriction.CName).(restriction.Service)
s.bookmark = a.MustComponent("bookmark-importer").(bookmarksvc.Service)
+ s.notificationService = app.MustComponent[notifications.Notifications](a)
s.objectCreator = app.MustComponent[objectcreator.Service](a)
s.templateService = app.MustComponent[template.Service](a)
s.spaceService = a.MustComponent(space.CName).(space.Service)
diff --git a/core/block/widget.go b/core/block/widget.go
index fc22342f7..92988d345 100644
--- a/core/block/widget.go
+++ b/core/block/widget.go
@@ -4,6 +4,8 @@ import (
"context"
"fmt"
+ "github.com/google/uuid"
+
"github.com/anyproto/anytype-heart/core/block/cache"
"github.com/anyproto/anytype-heart/core/block/editor"
"github.com/anyproto/anytype-heart/core/block/editor/basic"
@@ -92,7 +94,7 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
}
widgetBlockId := key.String()
- return cache.DoState(s, widgetObjectId, func(st *state.State, w widget.Widget) (err error) {
+ err = cache.DoState(s, widgetObjectId, func(st *state.State, w widget.Widget) (err error) {
targets := st.Details().Get(bundle.RelationKeyAutoWidgetTargets).StringList()
targets = append(targets, typeId)
st.SetDetail(bundle.RelationKeyAutoWidgetTargets, domain.StringList(targets))
@@ -131,6 +133,29 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
}},
},
})
- return err
+ if err != nil {
+ return err
+ }
+ objectType, err := s.objectStore.SpaceIndex(spaceId).GetObjectType(typeId)
+ if err != nil {
+ log.Errorf("failed to get object type to send the notification %s: %s", typeId, err)
+ } else {
+ err = s.notificationService.CreateAndSend(&model.Notification{
+ Id: uuid.New().String(),
+ IsLocal: true,
+ IsToast: true,
+ Payload: &model.NotificationPayloadOfAutoTypeWidgetAdded{AutoTypeWidgetAdded: &model.NotificationAutoTypeWidgetAdded{
+ SpaceId: spaceId,
+ TypePluralName: objectType.PluralName,
+ WidgetBlockId: widgetBlockId,
+ }},
+ })
+ if err != nil {
+ log.Errorf("failed to send the notification %s: %s", typeId, err)
+ }
+ }
+
+ return nil
})
+ return err
}
diff --git a/docs/proto.md b/docs/proto.md
index c120066e1..503826066 100644
--- a/docs/proto.md
+++ b/docs/proto.md
@@ -1930,6 +1930,7 @@
- [Metadata.Payload](#anytype-model-Metadata-Payload)
- [Metadata.Payload.IdentityPayload](#anytype-model-Metadata-Payload-IdentityPayload)
- [Notification](#anytype-model-Notification)
+ - [Notification.AutoTypeWidgetAdded](#anytype-model-Notification-AutoTypeWidgetAdded)
- [Notification.Export](#anytype-model-Notification-Export)
- [Notification.GalleryImport](#anytype-model-Notification-GalleryImport)
- [Notification.Import](#anytype-model-Notification-Import)
@@ -30512,6 +30513,7 @@ Used to decode block meta only, without the content itself
| createTime | [int64](#int64) | | |
| status | [Notification.Status](#anytype-model-Notification-Status) | | |
| isLocal | [bool](#bool) | | |
+| isToast | [bool](#bool) | | means it should automatically hide after some time if client window is active |
| import | [Notification.Import](#anytype-model-Notification-Import) | | |
| export | [Notification.Export](#anytype-model-Notification-Export) | | |
| galleryImport | [Notification.GalleryImport](#anytype-model-Notification-GalleryImport) | | |
@@ -30522,6 +30524,7 @@ Used to decode block meta only, without the content itself
| participantRemove | [Notification.ParticipantRemove](#anytype-model-Notification-ParticipantRemove) | | |
| participantRequestDecline | [Notification.ParticipantRequestDecline](#anytype-model-Notification-ParticipantRequestDecline) | | |
| participantPermissionsChange | [Notification.ParticipantPermissionsChange](#anytype-model-Notification-ParticipantPermissionsChange) | | |
+| autoTypeWidgetAdded | [Notification.AutoTypeWidgetAdded](#anytype-model-Notification-AutoTypeWidgetAdded) | | |
| space | [string](#string) | | |
| aclHeadId | [string](#string) | | |
@@ -30530,6 +30533,23 @@ Used to decode block meta only, without the content itself
+
+
+### Notification.AutoTypeWidgetAdded
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| spaceId | [string](#string) | | |
+| typePluralName | [string](#string) | | fallback to singular if missing |
+| widgetBlockId | [string](#string) | | |
+
+
+
+
+
+
### Notification.Export
diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go
index aafcc2e38..329c3b35c 100644
--- a/pkg/lib/pb/model/models.pb.go
+++ b/pkg/lib/pb/model/models.pb.go
@@ -7343,6 +7343,7 @@ type Notification struct {
CreateTime int64 `protobuf:"varint,2,opt,name=createTime,proto3" json:"createTime,omitempty"`
Status NotificationStatus `protobuf:"varint,4,opt,name=status,proto3,enum=anytype.model.NotificationStatus" json:"status,omitempty"`
IsLocal bool `protobuf:"varint,5,opt,name=isLocal,proto3" json:"isLocal,omitempty"`
+ IsToast bool `protobuf:"varint,3,opt,name=isToast,proto3" json:"isToast,omitempty"`
// Types that are valid to be assigned to Payload:
//
// *NotificationPayloadOfImport
@@ -7355,6 +7356,7 @@ type Notification struct {
// *NotificationPayloadOfParticipantRemove
// *NotificationPayloadOfParticipantRequestDecline
// *NotificationPayloadOfParticipantPermissionsChange
+ // *NotificationPayloadOfAutoTypeWidgetAdded
Payload IsNotificationPayload `protobuf_oneof:"payload"`
Space string `protobuf:"bytes,7,opt,name=space,proto3" json:"space,omitempty"`
AclHeadId string `protobuf:"bytes,14,opt,name=aclHeadId,proto3" json:"aclHeadId,omitempty"`
@@ -7429,6 +7431,9 @@ type NotificationPayloadOfParticipantRequestDecline struct {
type NotificationPayloadOfParticipantPermissionsChange struct {
ParticipantPermissionsChange *NotificationParticipantPermissionsChange `protobuf:"bytes,18,opt,name=participantPermissionsChange,proto3,oneof" json:"participantPermissionsChange,omitempty"`
}
+type NotificationPayloadOfAutoTypeWidgetAdded struct {
+ AutoTypeWidgetAdded *NotificationAutoTypeWidgetAdded `protobuf:"bytes,19,opt,name=autoTypeWidgetAdded,proto3,oneof" json:"autoTypeWidgetAdded,omitempty"`
+}
func (*NotificationPayloadOfImport) IsNotificationPayload() {}
func (*NotificationPayloadOfExport) IsNotificationPayload() {}
@@ -7440,6 +7445,7 @@ func (*NotificationPayloadOfRequestToLeave) IsNotificationPayload()
func (*NotificationPayloadOfParticipantRemove) IsNotificationPayload() {}
func (*NotificationPayloadOfParticipantRequestDecline) IsNotificationPayload() {}
func (*NotificationPayloadOfParticipantPermissionsChange) IsNotificationPayload() {}
+func (*NotificationPayloadOfAutoTypeWidgetAdded) IsNotificationPayload() {}
func (m *Notification) GetPayload() IsNotificationPayload {
if m != nil {
@@ -7476,6 +7482,13 @@ func (m *Notification) GetIsLocal() bool {
return false
}
+func (m *Notification) GetIsToast() bool {
+ if m != nil {
+ return m.IsToast
+ }
+ return false
+}
+
func (m *Notification) GetImport() *NotificationImport {
if x, ok := m.GetPayload().(*NotificationPayloadOfImport); ok {
return x.Import
@@ -7546,6 +7559,13 @@ func (m *Notification) GetParticipantPermissionsChange() *NotificationParticipan
return nil
}
+func (m *Notification) GetAutoTypeWidgetAdded() *NotificationAutoTypeWidgetAdded {
+ if x, ok := m.GetPayload().(*NotificationPayloadOfAutoTypeWidgetAdded); ok {
+ return x.AutoTypeWidgetAdded
+ }
+ return nil
+}
+
func (m *Notification) GetSpace() string {
if m != nil {
return m.Space
@@ -7573,6 +7593,7 @@ func (*Notification) XXX_OneofWrappers() []interface{} {
(*NotificationPayloadOfParticipantRemove)(nil),
(*NotificationPayloadOfParticipantRequestDecline)(nil),
(*NotificationPayloadOfParticipantPermissionsChange)(nil),
+ (*NotificationPayloadOfAutoTypeWidgetAdded)(nil),
}
}
@@ -8228,6 +8249,66 @@ func (m *NotificationParticipantPermissionsChange) GetSpaceName() string {
return ""
}
+type NotificationAutoTypeWidgetAdded struct {
+ SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ TypePluralName string `protobuf:"bytes,2,opt,name=typePluralName,proto3" json:"typePluralName,omitempty"`
+ WidgetBlockId string `protobuf:"bytes,3,opt,name=widgetBlockId,proto3" json:"widgetBlockId,omitempty"`
+}
+
+func (m *NotificationAutoTypeWidgetAdded) Reset() { *m = NotificationAutoTypeWidgetAdded{} }
+func (m *NotificationAutoTypeWidgetAdded) String() string { return proto.CompactTextString(m) }
+func (*NotificationAutoTypeWidgetAdded) ProtoMessage() {}
+func (*NotificationAutoTypeWidgetAdded) Descriptor() ([]byte, []int) {
+ return fileDescriptor_98a910b73321e591, []int{21, 10}
+}
+func (m *NotificationAutoTypeWidgetAdded) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *NotificationAutoTypeWidgetAdded) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_NotificationAutoTypeWidgetAdded.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *NotificationAutoTypeWidgetAdded) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_NotificationAutoTypeWidgetAdded.Merge(m, src)
+}
+func (m *NotificationAutoTypeWidgetAdded) XXX_Size() int {
+ return m.Size()
+}
+func (m *NotificationAutoTypeWidgetAdded) XXX_DiscardUnknown() {
+ xxx_messageInfo_NotificationAutoTypeWidgetAdded.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NotificationAutoTypeWidgetAdded proto.InternalMessageInfo
+
+func (m *NotificationAutoTypeWidgetAdded) GetSpaceId() string {
+ if m != nil {
+ return m.SpaceId
+ }
+ return ""
+}
+
+func (m *NotificationAutoTypeWidgetAdded) GetTypePluralName() string {
+ if m != nil {
+ return m.TypePluralName
+ }
+ return ""
+}
+
+func (m *NotificationAutoTypeWidgetAdded) GetWidgetBlockId() string {
+ if m != nil {
+ return m.WidgetBlockId
+ }
+ return ""
+}
+
type Export struct {
}
@@ -9794,6 +9875,7 @@ func init() {
proto.RegisterType((*NotificationParticipantRemove)(nil), "anytype.model.Notification.ParticipantRemove")
proto.RegisterType((*NotificationParticipantRequestDecline)(nil), "anytype.model.Notification.ParticipantRequestDecline")
proto.RegisterType((*NotificationParticipantPermissionsChange)(nil), "anytype.model.Notification.ParticipantPermissionsChange")
+ proto.RegisterType((*NotificationAutoTypeWidgetAdded)(nil), "anytype.model.Notification.AutoTypeWidgetAdded")
proto.RegisterType((*Export)(nil), "anytype.model.Export")
proto.RegisterType((*Import)(nil), "anytype.model.Import")
proto.RegisterType((*Invite)(nil), "anytype.model.Invite")
@@ -9821,584 +9903,588 @@ func init() {
}
var fileDescriptor_98a910b73321e591 = []byte{
- // 9218 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0xbd, 0x5d, 0x6c, 0x23, 0xd9,
- 0x95, 0x18, 0x2c, 0xfe, 0x93, 0x87, 0xa2, 0x74, 0x75, 0xfb, 0x8f, 0xa6, 0xdb, 0xfd, 0xb5, 0xe9,
- 0xf1, 0x4c, 0xbb, 0x3d, 0x56, 0xcf, 0xf4, 0xcc, 0x78, 0xc6, 0x63, 0xcf, 0xd8, 0x94, 0x44, 0xb5,
- 0x38, 0xad, 0x3f, 0x17, 0xd9, 0xdd, 0x9e, 0xc1, 0xee, 0xa7, 0x94, 0x58, 0x57, 0x64, 0x59, 0xc5,
- 0x2a, 0xba, 0xea, 0x52, 0x2d, 0x19, 0x49, 0xe0, 0xfc, 0xed, 0x66, 0xdf, 0x9c, 0x20, 0x9b, 0x64,
- 0x11, 0x04, 0x6b, 0x3f, 0x04, 0x08, 0xb2, 0x1b, 0xe4, 0xc9, 0x48, 0x36, 0xc9, 0x02, 0xd9, 0x05,
- 0x02, 0x04, 0xc8, 0x8b, 0x93, 0xa7, 0x3c, 0x04, 0x48, 0x30, 0x06, 0xf2, 0x12, 0x24, 0x8b, 0x0d,
- 0x10, 0xc0, 0x08, 0xf2, 0x10, 0x9c, 0x73, 0x6f, 0xfd, 0x91, 0x94, 0x9a, 0x3d, 0xbb, 0x1b, 0xe4,
- 0x49, 0xbc, 0xa7, 0xce, 0x39, 0x75, 0x7f, 0xce, 0x3d, 0xf7, 0xfc, 0xdd, 0x12, 0xbc, 0x32, 0x3e,
- 0x1d, 0x3c, 0x70, 0xec, 0xe3, 0x07, 0xe3, 0xe3, 0x07, 0x23, 0xcf, 0x12, 0xce, 0x83, 0xb1, 0xef,
- 0x49, 0x2f, 0x50, 0x8d, 0x60, 0x9d, 0x5a, 0xbc, 0x66, 0xba, 0x17, 0xf2, 0x62, 0x2c, 0xd6, 0x09,
- 0xda, 0xb8, 0x3d, 0xf0, 0xbc, 0x81, 0x23, 0x14, 0xea, 0xf1, 0xe4, 0xe4, 0x41, 0x20, 0xfd, 0x49,
- 0x5f, 0x2a, 0xe4, 0xe6, 0xcf, 0xf3, 0x70, 0xb3, 0x3b, 0x32, 0x7d, 0xb9, 0xe1, 0x78, 0xfd, 0xd3,
- 0xae, 0x6b, 0x8e, 0x83, 0xa1, 0x27, 0x37, 0xcc, 0x40, 0xf0, 0xd7, 0xa1, 0x78, 0x8c, 0xc0, 0xa0,
- 0x9e, 0xb9, 0x9b, 0xbb, 0x57, 0x7d, 0x78, 0x7d, 0x3d, 0xc5, 0x78, 0x9d, 0x28, 0x0c, 0x8d, 0xc3,
- 0xdf, 0x84, 0x92, 0x25, 0xa4, 0x69, 0x3b, 0x41, 0x3d, 0x7b, 0x37, 0x73, 0xaf, 0xfa, 0xf0, 0xd6,
- 0xba, 0x7a, 0xf1, 0x7a, 0xf8, 0xe2, 0xf5, 0x2e, 0xbd, 0xd8, 0x08, 0xf1, 0xf8, 0xbb, 0x50, 0x3e,
- 0xb1, 0x1d, 0xf1, 0x58, 0x5c, 0x04, 0xf5, 0xdc, 0x95, 0x34, 0x1b, 0xd9, 0x7a, 0xc6, 0x88, 0x90,
- 0xf9, 0x26, 0xac, 0x88, 0x73, 0xe9, 0x9b, 0x86, 0x70, 0x4c, 0x69, 0x7b, 0x6e, 0x50, 0xcf, 0x53,
- 0x0f, 0x6f, 0x4d, 0xf5, 0x30, 0x7c, 0x4e, 0xe4, 0x53, 0x24, 0xfc, 0x2e, 0x54, 0xbd, 0xe3, 0xef,
- 0x8b, 0xbe, 0xec, 0x5d, 0x8c, 0x45, 0x50, 0x2f, 0xdc, 0xcd, 0xdd, 0xab, 0x18, 0x49, 0x10, 0xff,
- 0x06, 0x54, 0xfb, 0x9e, 0xe3, 0x88, 0xbe, 0x7a, 0x47, 0xf1, 0xea, 0x61, 0x25, 0x71, 0xf9, 0xdb,
- 0x70, 0xc3, 0x17, 0x23, 0xef, 0x4c, 0x58, 0x9b, 0x11, 0x94, 0xc6, 0x59, 0xa6, 0xd7, 0xcc, 0x7f,
- 0xc8, 0x5b, 0x50, 0xf3, 0x75, 0xff, 0x76, 0x6d, 0xf7, 0x34, 0xa8, 0x97, 0x68, 0x58, 0x9f, 0xbf,
- 0x64, 0x58, 0x88, 0x63, 0xa4, 0x29, 0x38, 0x83, 0xdc, 0xa9, 0xb8, 0xa8, 0x57, 0xee, 0x66, 0xee,
- 0x55, 0x0c, 0xfc, 0xc9, 0xdf, 0x87, 0xba, 0xe7, 0xdb, 0x03, 0xdb, 0x35, 0x9d, 0x4d, 0x5f, 0x98,
- 0x52, 0x58, 0x3d, 0x7b, 0x24, 0x02, 0x69, 0x8e, 0xc6, 0x75, 0xb8, 0x9b, 0xb9, 0x97, 0x33, 0x2e,
- 0x7d, 0xce, 0xdf, 0x52, 0x2b, 0xd4, 0x71, 0x4f, 0xbc, 0x7a, 0x55, 0x0f, 0x3f, 0xdd, 0x97, 0x6d,
- 0xfd, 0xd8, 0x88, 0x10, 0x9b, 0xbf, 0xcc, 0x42, 0xb1, 0x2b, 0x4c, 0xbf, 0x3f, 0x6c, 0xfc, 0x7a,
- 0x06, 0x8a, 0x86, 0x08, 0x26, 0x8e, 0xe4, 0x0d, 0x28, 0xab, 0xb9, 0xed, 0x58, 0xf5, 0x0c, 0xf5,
- 0x2e, 0x6a, 0x7f, 0x16, 0xd9, 0x59, 0x87, 0xfc, 0x48, 0x48, 0xb3, 0x9e, 0xa3, 0x19, 0x6a, 0x4c,
- 0xf5, 0x4a, 0xbd, 0x7e, 0x7d, 0x4f, 0x48, 0xd3, 0x20, 0xbc, 0xc6, 0x2f, 0x32, 0x90, 0xc7, 0x26,
- 0xbf, 0x0d, 0x95, 0xa1, 0x3d, 0x18, 0x3a, 0xf6, 0x60, 0x28, 0x75, 0x47, 0x62, 0x00, 0xff, 0x10,
- 0x56, 0xa3, 0x86, 0x61, 0xba, 0x03, 0x81, 0x3d, 0x9a, 0x27, 0xfc, 0xf4, 0xd0, 0x98, 0x46, 0xe6,
- 0x75, 0x28, 0xd1, 0x7e, 0xe8, 0x58, 0x24, 0xd1, 0x15, 0x23, 0x6c, 0xa2, 0xb8, 0x85, 0x2b, 0xf5,
- 0x58, 0x5c, 0xd4, 0xf3, 0xf4, 0x34, 0x09, 0xe2, 0x2d, 0x58, 0x0d, 0x9b, 0x5b, 0x7a, 0x36, 0x0a,
- 0x57, 0xcf, 0xc6, 0x34, 0x7e, 0xf3, 0xd3, 0x5d, 0x28, 0xd0, 0xb6, 0xe4, 0x2b, 0x90, 0xb5, 0xc3,
- 0x89, 0xce, 0xda, 0x16, 0x7f, 0x00, 0xc5, 0x13, 0x5b, 0x38, 0xd6, 0x0b, 0x67, 0x58, 0xa3, 0xf1,
- 0x36, 0x2c, 0xfb, 0x22, 0x90, 0xbe, 0xad, 0xa5, 0x5f, 0x6d, 0xd0, 0x2f, 0xce, 0xd3, 0x01, 0xeb,
- 0x46, 0x02, 0xd1, 0x48, 0x91, 0xe1, 0xb0, 0xfb, 0x43, 0xdb, 0xb1, 0x7c, 0xe1, 0x76, 0x2c, 0xb5,
- 0x4f, 0x2b, 0x46, 0x12, 0xc4, 0xef, 0xc1, 0xea, 0xb1, 0xd9, 0x3f, 0x1d, 0xf8, 0xde, 0xc4, 0xc5,
- 0x0d, 0xe1, 0xf9, 0x34, 0xec, 0x8a, 0x31, 0x0d, 0xe6, 0x6f, 0x40, 0xc1, 0x74, 0xec, 0x81, 0x4b,
- 0x3b, 0x71, 0x65, 0x66, 0xd1, 0x55, 0x5f, 0x5a, 0x88, 0x61, 0x28, 0x44, 0xbe, 0x03, 0xb5, 0x33,
- 0xe1, 0x4b, 0xbb, 0x6f, 0x3a, 0x04, 0xaf, 0x97, 0x88, 0xb2, 0x39, 0x97, 0xf2, 0x69, 0x12, 0xd3,
- 0x48, 0x13, 0xf2, 0x0e, 0x40, 0x80, 0x6a, 0x92, 0x96, 0x53, 0xef, 0x85, 0xd7, 0xe6, 0xb2, 0xd9,
- 0xf4, 0x5c, 0x29, 0x5c, 0xb9, 0xde, 0x8d, 0xd0, 0x77, 0x96, 0x8c, 0x04, 0x31, 0x7f, 0x17, 0xf2,
- 0x52, 0x9c, 0xcb, 0xfa, 0xca, 0x15, 0x33, 0x1a, 0x32, 0xe9, 0x89, 0x73, 0xb9, 0xb3, 0x64, 0x10,
- 0x01, 0x12, 0xe2, 0x26, 0xab, 0xaf, 0x2e, 0x40, 0x88, 0xfb, 0x12, 0x09, 0x91, 0x80, 0x7f, 0x00,
- 0x45, 0xc7, 0xbc, 0xf0, 0x26, 0xb2, 0xce, 0x88, 0xf4, 0x4b, 0x57, 0x92, 0xee, 0x12, 0xea, 0xce,
- 0x92, 0xa1, 0x89, 0xf8, 0xdb, 0x90, 0xb3, 0xec, 0xb3, 0xfa, 0x1a, 0xd1, 0xde, 0xbd, 0x92, 0x76,
- 0xcb, 0x3e, 0xdb, 0x59, 0x32, 0x10, 0x9d, 0x6f, 0x42, 0xf9, 0xd8, 0xf3, 0x4e, 0x47, 0xa6, 0x7f,
- 0x5a, 0xe7, 0x44, 0xfa, 0xe5, 0x2b, 0x49, 0x37, 0x34, 0xf2, 0xce, 0x92, 0x11, 0x11, 0xe2, 0x90,
- 0xed, 0xbe, 0xe7, 0xd6, 0xaf, 0x2d, 0x30, 0xe4, 0x4e, 0xdf, 0x73, 0x71, 0xc8, 0x48, 0x80, 0x84,
- 0x8e, 0xed, 0x9e, 0xd6, 0xaf, 0x2f, 0x40, 0x88, 0x9a, 0x13, 0x09, 0x91, 0x00, 0xbb, 0x6d, 0x99,
- 0xd2, 0x3c, 0xb3, 0xc5, 0xf3, 0xfa, 0x8d, 0x05, 0xba, 0xbd, 0xa5, 0x91, 0xb1, 0xdb, 0x21, 0x21,
- 0x32, 0x09, 0xb7, 0x66, 0xfd, 0xe6, 0x02, 0x4c, 0x42, 0x8d, 0x8e, 0x4c, 0x42, 0x42, 0xfe, 0xff,
- 0xc3, 0xda, 0x89, 0x30, 0xe5, 0xc4, 0x17, 0x56, 0x7c, 0xd0, 0xdd, 0x22, 0x6e, 0xeb, 0x57, 0xaf,
- 0xfd, 0x34, 0xd5, 0xce, 0x92, 0x31, 0xcb, 0x8a, 0xbf, 0x0f, 0x05, 0xc7, 0x94, 0xe2, 0xbc, 0x5e,
- 0x27, 0x9e, 0xcd, 0x17, 0x08, 0x85, 0x14, 0xe7, 0x3b, 0x4b, 0x86, 0x22, 0xe1, 0xdf, 0x83, 0x55,
- 0x69, 0x1e, 0x3b, 0xe2, 0xe0, 0x44, 0x23, 0x04, 0xf5, 0xcf, 0x11, 0x97, 0xd7, 0xaf, 0x16, 0xe7,
- 0x34, 0xcd, 0xce, 0x92, 0x31, 0xcd, 0x06, 0x7b, 0x45, 0xa0, 0x7a, 0x63, 0x81, 0x5e, 0x11, 0x3f,
- 0xec, 0x15, 0x91, 0xf0, 0x5d, 0xa8, 0xd2, 0x8f, 0x4d, 0xcf, 0x99, 0x8c, 0xdc, 0xfa, 0xe7, 0x89,
- 0xc3, 0xbd, 0x17, 0x73, 0x50, 0xf8, 0x3b, 0x4b, 0x46, 0x92, 0x1c, 0x17, 0x91, 0x9a, 0x86, 0xf7,
- 0xbc, 0x7e, 0x7b, 0x81, 0x45, 0xec, 0x69, 0x64, 0x5c, 0xc4, 0x90, 0x10, 0xb7, 0xde, 0x73, 0xdb,
- 0x1a, 0x08, 0x59, 0xff, 0xc2, 0x02, 0x5b, 0xef, 0x19, 0xa1, 0xe2, 0xd6, 0x53, 0x44, 0x28, 0xc6,
- 0xfd, 0xa1, 0x29, 0xeb, 0x77, 0x16, 0x10, 0xe3, 0xcd, 0xa1, 0x49, 0xba, 0x02, 0x09, 0x1a, 0x3f,
- 0x84, 0xe5, 0xa4, 0x56, 0xe6, 0x1c, 0xf2, 0xbe, 0x30, 0xd5, 0x89, 0x50, 0x36, 0xe8, 0x37, 0xc2,
- 0x84, 0x65, 0x4b, 0x3a, 0x11, 0xca, 0x06, 0xfd, 0xe6, 0x37, 0xa1, 0xa8, 0x6c, 0x13, 0x52, 0xf8,
- 0x65, 0x43, 0xb7, 0x10, 0xd7, 0xf2, 0xcd, 0x01, 0x9d, 0x5b, 0x65, 0x83, 0x7e, 0x23, 0xae, 0xe5,
- 0x7b, 0xe3, 0x03, 0x97, 0x14, 0x76, 0xd9, 0xd0, 0xad, 0xc6, 0xbf, 0xfe, 0x00, 0x4a, 0xba, 0x53,
- 0x8d, 0xbf, 0x9f, 0x81, 0xa2, 0x52, 0x28, 0xfc, 0xdb, 0x50, 0x08, 0xe4, 0x85, 0x23, 0xa8, 0x0f,
- 0x2b, 0x0f, 0xbf, 0xb2, 0x80, 0x12, 0x5a, 0xef, 0x22, 0x81, 0xa1, 0xe8, 0x9a, 0x06, 0x14, 0xa8,
- 0xcd, 0x4b, 0x90, 0x33, 0xbc, 0xe7, 0x6c, 0x89, 0x03, 0x14, 0xd5, 0x62, 0xb1, 0x0c, 0x02, 0xb7,
- 0xec, 0x33, 0x96, 0x45, 0xe0, 0x8e, 0x30, 0x2d, 0xe1, 0xb3, 0x1c, 0xaf, 0x41, 0x25, 0x5c, 0x96,
- 0x80, 0xe5, 0x39, 0x83, 0xe5, 0xc4, 0x82, 0x07, 0xac, 0xd0, 0xf8, 0x1f, 0x79, 0xc8, 0xe3, 0xfe,
- 0xe7, 0xaf, 0x40, 0x4d, 0x9a, 0xfe, 0x40, 0x28, 0x43, 0x38, 0x32, 0x52, 0xd2, 0x40, 0xfe, 0x41,
- 0x38, 0x86, 0x2c, 0x8d, 0xe1, 0xb5, 0x17, 0xea, 0x95, 0xd4, 0x08, 0x12, 0xa7, 0x70, 0x6e, 0xb1,
- 0x53, 0x78, 0x1b, 0xca, 0xa8, 0xce, 0xba, 0xf6, 0x0f, 0x05, 0x4d, 0xfd, 0xca, 0xc3, 0xfb, 0x2f,
- 0x7e, 0x65, 0x47, 0x53, 0x18, 0x11, 0x2d, 0xef, 0x40, 0xa5, 0x6f, 0xfa, 0x16, 0x75, 0x86, 0x56,
- 0x6b, 0xe5, 0xe1, 0x57, 0x5f, 0xcc, 0x68, 0x33, 0x24, 0x31, 0x62, 0x6a, 0x7e, 0x00, 0x55, 0x4b,
- 0x04, 0x7d, 0xdf, 0x1e, 0x93, 0x7a, 0x53, 0x67, 0xf1, 0xd7, 0x5e, 0xcc, 0x6c, 0x2b, 0x26, 0x32,
- 0x92, 0x1c, 0xd0, 0x22, 0xf3, 0x23, 0xfd, 0x56, 0x22, 0x03, 0x21, 0x06, 0x34, 0xdf, 0x85, 0x72,
- 0x38, 0x1e, 0xbe, 0x0c, 0x65, 0xfc, 0xbb, 0xef, 0xb9, 0x82, 0x2d, 0xe1, 0xda, 0x62, 0xab, 0x3b,
- 0x32, 0x1d, 0x87, 0x65, 0xf8, 0x0a, 0x00, 0x36, 0xf7, 0x84, 0x65, 0x4f, 0x46, 0x2c, 0xdb, 0xfc,
- 0x66, 0x28, 0x2d, 0x65, 0xc8, 0x1f, 0x9a, 0x03, 0xa4, 0x58, 0x86, 0x72, 0xa8, 0xae, 0x59, 0x06,
- 0xe9, 0xb7, 0xcc, 0x60, 0x78, 0xec, 0x99, 0xbe, 0xc5, 0xb2, 0xbc, 0x0a, 0xa5, 0x96, 0xdf, 0x1f,
- 0xda, 0x67, 0x82, 0xe5, 0x9a, 0x0f, 0xa0, 0x9a, 0xe8, 0x2f, 0xb2, 0xd0, 0x2f, 0xad, 0x40, 0xa1,
- 0x65, 0x59, 0xc2, 0x62, 0x19, 0x24, 0xd0, 0x03, 0x64, 0xd9, 0xe6, 0x57, 0xa1, 0x12, 0xcd, 0x16,
- 0xa2, 0xe3, 0xc1, 0xcd, 0x96, 0xf0, 0x17, 0x82, 0x59, 0x06, 0xa5, 0xb2, 0xe3, 0x3a, 0xb6, 0x2b,
- 0x58, 0xb6, 0xf1, 0xe7, 0x48, 0x54, 0xf9, 0xb7, 0xd2, 0x1b, 0xe2, 0xd5, 0x17, 0x9d, 0xac, 0xe9,
- 0xdd, 0xf0, 0xf9, 0xc4, 0xf8, 0x76, 0x6d, 0xea, 0x5c, 0x19, 0xf2, 0x5b, 0x9e, 0x0c, 0x58, 0xa6,
- 0xf1, 0x5f, 0xb3, 0x50, 0x0e, 0x0f, 0x54, 0xf4, 0x09, 0x26, 0xbe, 0xa3, 0x05, 0x1a, 0x7f, 0xf2,
- 0xeb, 0x50, 0x90, 0xb6, 0xd4, 0x62, 0x5c, 0x31, 0x54, 0x03, 0x6d, 0xb5, 0xe4, 0xca, 0x2a, 0x03,
- 0x76, 0x7a, 0xa9, 0xec, 0x91, 0x39, 0x10, 0x3b, 0x66, 0x30, 0xd4, 0x26, 0x6c, 0x0c, 0x40, 0xfa,
- 0x13, 0xf3, 0x0c, 0x65, 0x8e, 0x9e, 0x2b, 0x2b, 0x2e, 0x09, 0xe2, 0x6f, 0x41, 0x1e, 0x07, 0xa8,
- 0x85, 0xe6, 0xff, 0x9b, 0x1a, 0x30, 0x8a, 0xc9, 0xa1, 0x2f, 0x70, 0x79, 0xd6, 0xd1, 0x03, 0x33,
- 0x08, 0x99, 0xbf, 0x0a, 0x2b, 0x6a, 0x13, 0x1e, 0x84, 0xfe, 0x43, 0x89, 0x38, 0x4f, 0x41, 0x79,
- 0x0b, 0xa7, 0xd3, 0x94, 0xa2, 0x5e, 0x5e, 0x40, 0xbe, 0xc3, 0xc9, 0x59, 0xef, 0x22, 0x89, 0xa1,
- 0x28, 0x9b, 0xef, 0xe0, 0x9c, 0x9a, 0x52, 0xe0, 0x32, 0xb7, 0x47, 0x63, 0x79, 0xa1, 0x84, 0x66,
- 0x5b, 0xc8, 0xfe, 0xd0, 0x76, 0x07, 0x2c, 0xa3, 0xa6, 0x18, 0x17, 0x91, 0x50, 0x7c, 0xdf, 0xf3,
- 0x59, 0xae, 0xd1, 0x80, 0x3c, 0xca, 0x28, 0x2a, 0x49, 0xd7, 0x1c, 0x09, 0x3d, 0xd3, 0xf4, 0xbb,
- 0x71, 0x0d, 0xd6, 0x66, 0xce, 0xe3, 0xc6, 0xef, 0x15, 0x95, 0x84, 0x20, 0x05, 0xd9, 0x82, 0x9a,
- 0x82, 0xcc, 0xbc, 0x97, 0xd2, 0x31, 0xc8, 0x25, 0xad, 0x63, 0x3e, 0x80, 0x02, 0x0e, 0x2c, 0x54,
- 0x31, 0x0b, 0x90, 0xef, 0x21, 0xba, 0xa1, 0xa8, 0xd0, 0x83, 0xe9, 0x0f, 0x45, 0xff, 0x54, 0x58,
- 0x5a, 0xd7, 0x87, 0x4d, 0x14, 0x9a, 0x7e, 0xc2, 0x3c, 0x57, 0x0d, 0x12, 0x89, 0xbe, 0xe7, 0xb6,
- 0x47, 0xde, 0xf7, 0x6d, 0x5a, 0x57, 0x14, 0x89, 0x10, 0x10, 0x3e, 0xed, 0xa0, 0x8c, 0xe8, 0x65,
- 0x8b, 0x01, 0x8d, 0x36, 0x14, 0xe8, 0xdd, 0xb8, 0x13, 0x54, 0x9f, 0x55, 0xa4, 0xe1, 0xd5, 0xc5,
- 0xfa, 0xac, 0xbb, 0xdc, 0xf8, 0xdd, 0x2c, 0xe4, 0xb1, 0xcd, 0xef, 0x43, 0xc1, 0x47, 0x3f, 0x8c,
- 0xa6, 0xf3, 0x32, 0x9f, 0x4d, 0xa1, 0xf0, 0x6f, 0x6b, 0x51, 0xcc, 0x2e, 0x20, 0x2c, 0xd1, 0x1b,
- 0x93, 0x62, 0x79, 0x1d, 0x0a, 0x63, 0xd3, 0x37, 0x47, 0x7a, 0x9f, 0xa8, 0x46, 0xf3, 0x27, 0x19,
- 0xc8, 0x23, 0x12, 0x5f, 0x83, 0x5a, 0x57, 0xfa, 0xf6, 0xa9, 0x90, 0x43, 0xdf, 0x9b, 0x0c, 0x86,
- 0x4a, 0x92, 0x1e, 0x8b, 0x0b, 0xa5, 0x6f, 0x94, 0x42, 0x90, 0xa6, 0x63, 0xf7, 0x59, 0x16, 0xa5,
- 0x6a, 0xc3, 0x73, 0x2c, 0x96, 0xe3, 0xab, 0x50, 0x7d, 0xe2, 0x5a, 0xc2, 0x0f, 0xfa, 0x9e, 0x2f,
- 0x2c, 0x96, 0xd7, 0xbb, 0xfb, 0x94, 0x15, 0xe8, 0x2c, 0x13, 0xe7, 0x92, 0x7c, 0x21, 0x56, 0xe4,
- 0xd7, 0x60, 0x75, 0x23, 0xed, 0x20, 0xb1, 0x12, 0xea, 0xa4, 0x3d, 0xe1, 0xa2, 0x90, 0xb1, 0xb2,
- 0x12, 0x62, 0xef, 0xfb, 0x36, 0xab, 0xe0, 0xcb, 0xd4, 0x3e, 0x61, 0xd0, 0xfc, 0x97, 0x99, 0x50,
- 0x73, 0xd4, 0xa0, 0x72, 0x68, 0xfa, 0xe6, 0xc0, 0x37, 0xc7, 0xd8, 0xbf, 0x2a, 0x94, 0xd4, 0xc1,
- 0xf9, 0xa6, 0xd2, 0x6e, 0xaa, 0xf1, 0x50, 0xe9, 0x46, 0xd5, 0x78, 0x8b, 0xe5, 0xe2, 0xc6, 0xdb,
- 0x2c, 0x8f, 0xef, 0xf8, 0xee, 0xc4, 0x93, 0x82, 0x15, 0x48, 0xd7, 0x79, 0x96, 0x60, 0x45, 0x04,
- 0xf6, 0x50, 0xa3, 0xb0, 0x12, 0x8e, 0x79, 0x13, 0xe5, 0xe7, 0xd8, 0x3b, 0x67, 0x65, 0xec, 0x06,
- 0x4e, 0xa3, 0xb0, 0x58, 0x05, 0x9f, 0xec, 0x4f, 0x46, 0xc7, 0x02, 0x87, 0x09, 0xf8, 0xa4, 0xe7,
- 0x0d, 0x06, 0x8e, 0x60, 0x55, 0x9c, 0x83, 0x84, 0xf2, 0x65, 0xcb, 0xa4, 0x69, 0x4d, 0xc7, 0xf1,
- 0x26, 0x92, 0xd5, 0x1a, 0xbf, 0xcc, 0x41, 0x1e, 0xbd, 0x1b, 0xdc, 0x3b, 0x43, 0xd4, 0x33, 0x7a,
- 0xef, 0xe0, 0xef, 0x68, 0x07, 0x66, 0xe3, 0x1d, 0xc8, 0xdf, 0xd7, 0x2b, 0x9d, 0x5b, 0x40, 0xcb,
- 0x22, 0xe3, 0xe4, 0x22, 0x73, 0xc8, 0x8f, 0xec, 0x91, 0xd0, 0xba, 0x8e, 0x7e, 0x23, 0x2c, 0xc0,
- 0xf3, 0xb8, 0x40, 0xc1, 0x13, 0xfa, 0x8d, 0xbb, 0xc6, 0xc4, 0x63, 0xa1, 0x25, 0x69, 0x0f, 0xe4,
- 0x8c, 0xb0, 0x39, 0x47, 0x7b, 0x55, 0xe6, 0x6a, 0xaf, 0x0f, 0x42, 0xed, 0x55, 0x5a, 0x60, 0xd7,
- 0x53, 0x37, 0x93, 0x9a, 0x2b, 0x56, 0x1a, 0xe5, 0xc5, 0xc9, 0x13, 0x87, 0xc9, 0x96, 0x96, 0xda,
- 0xf8, 0xa0, 0x2b, 0xab, 0x59, 0x66, 0x19, 0x5c, 0x4d, 0xda, 0xae, 0x4a, 0xe7, 0x3d, 0xb5, 0x2d,
- 0xe1, 0xb1, 0x1c, 0x1d, 0x84, 0x13, 0xcb, 0xf6, 0x58, 0x1e, 0x2d, 0xaf, 0xc3, 0xad, 0x6d, 0x56,
- 0x68, 0xbe, 0x9a, 0x38, 0x92, 0x5a, 0x13, 0xe9, 0x29, 0x36, 0x24, 0xbe, 0x19, 0x25, 0x8d, 0xc7,
- 0xc2, 0x62, 0xd9, 0xe6, 0xd7, 0xe7, 0xa8, 0xd9, 0x1a, 0x54, 0x9e, 0x8c, 0x1d, 0xcf, 0xb4, 0xae,
- 0xd0, 0xb3, 0xcb, 0x00, 0xb1, 0x57, 0xdd, 0xf8, 0x65, 0x33, 0x3e, 0xce, 0xd1, 0x16, 0x0d, 0xbc,
- 0x89, 0xdf, 0x17, 0xa4, 0x42, 0x2a, 0x86, 0x6e, 0xf1, 0xef, 0x40, 0x01, 0x9f, 0x87, 0x61, 0x9c,
- 0xfb, 0x0b, 0xf9, 0x72, 0xeb, 0x4f, 0x6d, 0xf1, 0xdc, 0x50, 0x84, 0xfc, 0x0e, 0x80, 0xd9, 0x97,
- 0xf6, 0x99, 0x40, 0xa0, 0xde, 0xec, 0x09, 0x08, 0x7f, 0x27, 0x69, 0xbe, 0x5c, 0x1d, 0x87, 0x4c,
- 0xd8, 0x35, 0xdc, 0x80, 0x2a, 0x6e, 0xdd, 0xf1, 0x81, 0x8f, 0xbb, 0xbd, 0xbe, 0x4c, 0x84, 0x6f,
- 0x2c, 0xd6, 0xbd, 0x47, 0x11, 0xa1, 0x91, 0x64, 0xc2, 0x9f, 0xc0, 0xb2, 0x8a, 0xa9, 0x69, 0xa6,
- 0x35, 0x62, 0xfa, 0xe6, 0x62, 0x4c, 0x0f, 0x62, 0x4a, 0x23, 0xc5, 0x66, 0x36, 0x2c, 0x59, 0x78,
- 0xe9, 0xb0, 0xe4, 0xab, 0xb0, 0xd2, 0x4b, 0xef, 0x02, 0x75, 0x54, 0x4c, 0x41, 0x79, 0x13, 0x96,
- 0xed, 0x20, 0x8e, 0x8a, 0x52, 0x8c, 0xa4, 0x6c, 0xa4, 0x60, 0x8d, 0x7f, 0x57, 0x84, 0x3c, 0xcd,
- 0xfc, 0x74, 0x8c, 0x6b, 0x33, 0xa5, 0xd2, 0x1f, 0x2c, 0xbe, 0xd4, 0x53, 0x3b, 0x9e, 0x34, 0x48,
- 0x2e, 0xa1, 0x41, 0xbe, 0x03, 0x85, 0xc0, 0xf3, 0x65, 0xb8, 0xbc, 0x0b, 0x0a, 0x51, 0xd7, 0xf3,
- 0xa5, 0xa1, 0x08, 0xf9, 0x36, 0x94, 0x4e, 0x6c, 0x47, 0xe2, 0xa2, 0xa8, 0xc9, 0x7b, 0x7d, 0x31,
- 0x1e, 0xdb, 0x44, 0x64, 0x84, 0xc4, 0x7c, 0x37, 0x29, 0x6c, 0x45, 0xe2, 0xb4, 0xbe, 0x18, 0xa7,
- 0x79, 0x32, 0x78, 0x1f, 0x58, 0xdf, 0x3b, 0x13, 0xbe, 0x91, 0x08, 0x4c, 0xaa, 0x43, 0x7a, 0x06,
- 0xce, 0x1b, 0x50, 0x1e, 0xda, 0x96, 0x40, 0x3b, 0x87, 0x74, 0x4c, 0xd9, 0x88, 0xda, 0xfc, 0x31,
- 0x94, 0xc9, 0x3f, 0x40, 0xad, 0x58, 0x79, 0xe9, 0xc9, 0x57, 0xae, 0x4a, 0xc8, 0x00, 0x5f, 0x44,
- 0x2f, 0xdf, 0xb6, 0x25, 0xc5, 0xa7, 0xcb, 0x46, 0xd4, 0xc6, 0x0e, 0x93, 0xbc, 0x27, 0x3b, 0x5c,
- 0x55, 0x1d, 0x9e, 0x86, 0xf3, 0xb7, 0xe1, 0x06, 0xc1, 0xa6, 0x0e, 0x49, 0xdc, 0x6a, 0xc8, 0x74,
- 0xfe, 0x43, 0x34, 0x58, 0xc6, 0xe6, 0x40, 0xec, 0xda, 0x23, 0x5b, 0xd6, 0x6b, 0x77, 0x33, 0xf7,
- 0x0a, 0x46, 0x0c, 0xe0, 0xaf, 0xc3, 0x9a, 0x25, 0x4e, 0xcc, 0x89, 0x23, 0x7b, 0x62, 0x34, 0x76,
- 0x4c, 0x29, 0x3a, 0x16, 0xc9, 0x68, 0xc5, 0x98, 0x7d, 0xc0, 0xdf, 0x80, 0x6b, 0x1a, 0x78, 0x10,
- 0x65, 0x15, 0x3a, 0x16, 0x85, 0xef, 0x2a, 0xc6, 0xbc, 0x47, 0xcd, 0x3d, 0xad, 0x86, 0xf1, 0x00,
- 0x45, 0x3f, 0x35, 0x54, 0xa0, 0x81, 0x54, 0x27, 0xf2, 0x23, 0xd3, 0x71, 0x84, 0x7f, 0xa1, 0x9c,
- 0xdc, 0xc7, 0xa6, 0x7b, 0x6c, 0xba, 0x2c, 0x47, 0x67, 0xac, 0xe9, 0x08, 0xd7, 0x32, 0x7d, 0x75,
- 0x22, 0x3f, 0xa2, 0x03, 0xbd, 0xd0, 0xbc, 0x07, 0x79, 0x9a, 0xd2, 0x0a, 0x14, 0x94, 0x97, 0x44,
- 0x1e, 0xb3, 0xf6, 0x90, 0x48, 0x23, 0xef, 0xe2, 0xf6, 0x63, 0xd9, 0xc6, 0x3f, 0x28, 0x42, 0x39,
- 0x9c, 0xbc, 0x30, 0x87, 0x90, 0x89, 0x73, 0x08, 0x68, 0xc6, 0x05, 0x4f, 0xed, 0xc0, 0x3e, 0xd6,
- 0x66, 0x69, 0xd9, 0x88, 0x01, 0x68, 0x09, 0x3d, 0xb7, 0x2d, 0x39, 0xa4, 0x3d, 0x53, 0x30, 0x54,
- 0x83, 0xdf, 0x83, 0x55, 0x0b, 0xe7, 0xc1, 0xed, 0x3b, 0x13, 0x4b, 0xf4, 0xf0, 0x14, 0x55, 0x61,
- 0x82, 0x69, 0x30, 0xff, 0x18, 0x40, 0xda, 0x23, 0xb1, 0xed, 0xf9, 0x23, 0x53, 0x6a, 0xdf, 0xe0,
- 0x1b, 0x2f, 0x27, 0xd5, 0xeb, 0xbd, 0x88, 0x81, 0x91, 0x60, 0x86, 0xac, 0xf1, 0x6d, 0x9a, 0x75,
- 0xe9, 0x33, 0xb1, 0xde, 0x8a, 0x18, 0x18, 0x09, 0x66, 0xbc, 0x07, 0xa5, 0x13, 0xcf, 0x1f, 0x4d,
- 0x1c, 0x53, 0x9f, 0xb9, 0xef, 0xbf, 0x24, 0xdf, 0x6d, 0x45, 0x4d, 0xba, 0x27, 0x64, 0x15, 0xc7,
- 0xb8, 0x2b, 0x0b, 0xc6, 0xb8, 0x9b, 0xbf, 0x02, 0x10, 0xf7, 0x90, 0xdf, 0x04, 0xbe, 0xe7, 0xb9,
- 0x72, 0xd8, 0x3a, 0x3e, 0xf6, 0x37, 0xc4, 0x89, 0xe7, 0x8b, 0x2d, 0x13, 0x8f, 0xd7, 0x1b, 0xb0,
- 0x16, 0xc1, 0x5b, 0x27, 0x52, 0xf8, 0x08, 0x26, 0x11, 0xe8, 0x0e, 0x3d, 0x5f, 0x2a, 0x1b, 0x8f,
- 0x7e, 0x3e, 0xe9, 0xb2, 0x1c, 0x1e, 0xe9, 0x9d, 0xee, 0x01, 0xcb, 0x37, 0xef, 0x01, 0xc4, 0x53,
- 0x4b, 0xbe, 0x10, 0xfd, 0x7a, 0xf3, 0xa1, 0xf6, 0x8c, 0xa8, 0xf5, 0xf0, 0x6d, 0x96, 0x69, 0x7e,
- 0x9a, 0x81, 0x6a, 0x62, 0x48, 0x69, 0x9f, 0x79, 0xd3, 0x9b, 0xb8, 0x52, 0x39, 0xe9, 0xf4, 0xf3,
- 0xa9, 0xe9, 0x4c, 0xf0, 0x70, 0x5f, 0x83, 0x1a, 0xb5, 0xb7, 0xec, 0x40, 0xda, 0x6e, 0x5f, 0xb2,
- 0x5c, 0x84, 0xa2, 0x0c, 0x83, 0x7c, 0x84, 0xb2, 0xef, 0x69, 0x50, 0x81, 0x33, 0x58, 0x3e, 0x14,
- 0x7e, 0x5f, 0x84, 0x48, 0x64, 0x0c, 0x6b, 0x48, 0x84, 0xa6, 0x8c, 0x61, 0x53, 0x0e, 0xbb, 0x93,
- 0x11, 0x2b, 0xa3, 0x51, 0x89, 0x8d, 0xd6, 0x99, 0xf0, 0xd1, 0x96, 0xa9, 0xe0, 0x7b, 0x10, 0x80,
- 0xbb, 0xc1, 0x74, 0x19, 0x84, 0xd8, 0x7b, 0xb6, 0xcb, 0xaa, 0x51, 0xc3, 0x3c, 0x67, 0xcb, 0xd8,
- 0x7f, 0x72, 0x1d, 0x58, 0xad, 0xf1, 0x5f, 0x72, 0x90, 0x47, 0xbd, 0x8e, 0xbe, 0x6e, 0x52, 0x09,
- 0xa9, 0xbd, 0x92, 0x04, 0x7d, 0xb6, 0xd3, 0x08, 0x79, 0x27, 0x4f, 0xa3, 0xf7, 0xa0, 0xda, 0x9f,
- 0x04, 0xd2, 0x1b, 0xd1, 0x51, 0xac, 0xb3, 0x5d, 0x37, 0x67, 0xa2, 0x46, 0x34, 0x9d, 0x46, 0x12,
- 0x95, 0xbf, 0x03, 0xc5, 0x13, 0x25, 0xf5, 0x2a, 0x6e, 0xf4, 0x85, 0x4b, 0x4e, 0x6b, 0x2d, 0xd9,
- 0x1a, 0x19, 0xc7, 0x65, 0xcf, 0xec, 0xd8, 0x24, 0x48, 0x9f, 0xba, 0xc5, 0xe8, 0xd4, 0xfd, 0x15,
- 0x58, 0x11, 0x38, 0xe1, 0x87, 0x8e, 0xd9, 0x17, 0x23, 0xe1, 0x86, 0xdb, 0xec, 0xed, 0x97, 0x18,
- 0x31, 0xad, 0x18, 0x0d, 0x7b, 0x8a, 0x17, 0x6a, 0x1e, 0xd7, 0xc3, 0xc3, 0x3f, 0x74, 0xec, 0xcb,
- 0x46, 0x0c, 0x68, 0x7e, 0x59, 0xeb, 0xcb, 0x12, 0xe4, 0x5a, 0x41, 0x5f, 0x47, 0x40, 0x44, 0xd0,
- 0x57, 0xee, 0xd5, 0x26, 0x4d, 0x07, 0xcb, 0x36, 0xdf, 0x84, 0x4a, 0xf4, 0x06, 0x14, 0x9e, 0x7d,
- 0x4f, 0x76, 0xc7, 0xa2, 0x6f, 0x9f, 0xd8, 0xc2, 0x52, 0xf2, 0xd9, 0x95, 0xa6, 0x2f, 0x55, 0x10,
- 0xb1, 0xed, 0x5a, 0x2c, 0xdb, 0xf8, 0x9d, 0x32, 0x14, 0xd5, 0xe1, 0xab, 0x07, 0x5c, 0x89, 0x06,
- 0xfc, 0x5d, 0x28, 0x7b, 0x63, 0xe1, 0x9b, 0xd2, 0xf3, 0x75, 0xe4, 0xe6, 0x9d, 0x97, 0x39, 0xcc,
- 0xd7, 0x0f, 0x34, 0xb1, 0x11, 0xb1, 0x99, 0x96, 0xa6, 0xec, 0xac, 0x34, 0xdd, 0x07, 0x16, 0x9e,
- 0xdb, 0x87, 0x3e, 0xd2, 0xc9, 0x0b, 0xed, 0x87, 0xcf, 0xc0, 0x79, 0x0f, 0x2a, 0x7d, 0xcf, 0xb5,
- 0xec, 0x28, 0x8a, 0xb3, 0xf2, 0xf0, 0xeb, 0x2f, 0xd5, 0xc3, 0xcd, 0x90, 0xda, 0x88, 0x19, 0xf1,
- 0xd7, 0xa1, 0x70, 0x86, 0x62, 0x46, 0xf2, 0x74, 0xb9, 0x10, 0x2a, 0x24, 0xfe, 0x09, 0x54, 0x7f,
- 0x30, 0xb1, 0xfb, 0xa7, 0x07, 0xc9, 0x28, 0xe1, 0x7b, 0x2f, 0xd5, 0x8b, 0xef, 0xc6, 0xf4, 0x46,
- 0x92, 0x59, 0x42, 0xb4, 0x4b, 0x7f, 0x02, 0xd1, 0x2e, 0xcf, 0x8a, 0xb6, 0x01, 0x35, 0x57, 0x04,
- 0x52, 0x58, 0xdb, 0xda, 0x56, 0x83, 0xcf, 0x60, 0xab, 0xa5, 0x59, 0x34, 0xbf, 0x04, 0xe5, 0x70,
- 0xc1, 0x79, 0x11, 0xb2, 0xfb, 0xe8, 0x14, 0x15, 0x21, 0x7b, 0xe0, 0x2b, 0x69, 0x6b, 0xa1, 0xb4,
- 0x35, 0xff, 0x28, 0x03, 0x95, 0x68, 0xd2, 0xd3, 0x9a, 0xb3, 0xfd, 0x83, 0x89, 0xe9, 0xb0, 0x0c,
- 0xb9, 0xcb, 0x9e, 0x54, 0x2d, 0x52, 0xd6, 0x8f, 0x28, 0x59, 0xef, 0xb3, 0x1c, 0x99, 0x08, 0x22,
- 0x08, 0x58, 0x9e, 0x73, 0x58, 0xd1, 0xe0, 0x03, 0x5f, 0xa1, 0x16, 0x50, 0xf1, 0xe1, 0xd3, 0x10,
- 0x50, 0x54, 0x16, 0xc5, 0xa9, 0x50, 0x0a, 0x72, 0xdf, 0x93, 0xd4, 0x28, 0x63, 0xa7, 0x3a, 0x2e,
- 0xab, 0xe0, 0x3b, 0xf7, 0x3d, 0xd9, 0x41, 0x95, 0x18, 0xb9, 0x67, 0xd5, 0xf0, 0xf5, 0xd4, 0x22,
- 0x8d, 0xd8, 0x72, 0x9c, 0x8e, 0xcb, 0x6a, 0xfa, 0x81, 0x6a, 0xad, 0x20, 0xc7, 0xf6, 0xb9, 0xd9,
- 0x47, 0xf2, 0x55, 0xd4, 0xb0, 0x48, 0xa3, 0xdb, 0x0c, 0xb7, 0x64, 0xfb, 0xdc, 0x0e, 0x64, 0xc0,
- 0xd6, 0x9a, 0xff, 0x36, 0x03, 0xd5, 0xc4, 0x02, 0xa3, 0xfb, 0x47, 0x88, 0x78, 0x94, 0x29, 0x6f,
- 0xf0, 0x63, 0x9c, 0x46, 0xdf, 0x0a, 0x8f, 0xa9, 0x9e, 0x87, 0x3f, 0xb3, 0xf8, 0xbe, 0x9e, 0x37,
- 0xf2, 0x7c, 0xdf, 0x7b, 0xae, 0x4c, 0x9f, 0x5d, 0x33, 0x90, 0xcf, 0x84, 0x38, 0x65, 0x79, 0x1c,
- 0xea, 0xe6, 0xc4, 0xf7, 0x85, 0xab, 0x00, 0x05, 0xea, 0x9c, 0x38, 0x57, 0xad, 0x22, 0x32, 0x45,
- 0x64, 0x3a, 0x07, 0x59, 0x09, 0x15, 0x81, 0xc6, 0x56, 0x90, 0x32, 0x22, 0x20, 0xba, 0x6a, 0x56,
- 0xf0, 0x50, 0x51, 0x11, 0x8a, 0x83, 0x93, 0x2d, 0xf3, 0x22, 0x68, 0x0d, 0x3c, 0x06, 0xd3, 0xc0,
- 0x7d, 0xef, 0x39, 0xab, 0x36, 0x26, 0x00, 0xb1, 0x4f, 0x86, 0xbe, 0x28, 0x0a, 0x44, 0x94, 0x43,
- 0xd0, 0x2d, 0x7e, 0x00, 0x80, 0xbf, 0x08, 0x33, 0x74, 0x48, 0x5f, 0xc2, 0x50, 0x26, 0x3a, 0x23,
- 0xc1, 0xa2, 0xf1, 0x17, 0xa0, 0x12, 0x3d, 0xe0, 0x75, 0x28, 0x91, 0x49, 0x1b, 0xbd, 0x36, 0x6c,
- 0xa2, 0x7d, 0x66, 0xbb, 0x96, 0x38, 0x27, 0xbd, 0x52, 0x30, 0x54, 0x03, 0x7b, 0x39, 0xb4, 0x2d,
- 0x4b, 0xb8, 0x61, 0xa6, 0x47, 0xb5, 0xe6, 0xe5, 0xe3, 0xf3, 0x73, 0xf3, 0xf1, 0x8d, 0x5f, 0x85,
- 0x6a, 0xc2, 0x69, 0xbc, 0x74, 0xd8, 0x89, 0x8e, 0x65, 0xd3, 0x1d, 0xbb, 0x0d, 0x95, 0xb0, 0x06,
- 0x24, 0xa0, 0xb3, 0xad, 0x62, 0xc4, 0x80, 0xc6, 0x3f, 0xcd, 0xa2, 0x25, 0x8b, 0x43, 0x9b, 0x76,
- 0xf4, 0xb6, 0xa1, 0x18, 0x48, 0x53, 0x4e, 0xc2, 0x62, 0x86, 0x05, 0x37, 0x68, 0x97, 0x68, 0x76,
- 0x96, 0x0c, 0x4d, 0xcd, 0x3f, 0x80, 0x9c, 0x34, 0x07, 0x3a, 0x50, 0xfa, 0x95, 0xc5, 0x98, 0xf4,
- 0xcc, 0xc1, 0xce, 0x92, 0x81, 0x74, 0x7c, 0x17, 0xca, 0x7d, 0x1d, 0xdb, 0xd2, 0x4a, 0x71, 0x41,
- 0x5f, 0x2c, 0x8c, 0x88, 0xed, 0x2c, 0x19, 0x11, 0x07, 0xfe, 0x1d, 0xc8, 0xa3, 0x75, 0xa9, 0x6b,
- 0x3e, 0x16, 0xf4, 0x31, 0x71, 0xbb, 0xec, 0x2c, 0x19, 0x44, 0xb9, 0x51, 0x82, 0x02, 0xe9, 0xe0,
- 0x46, 0x1d, 0x8a, 0x6a, 0xac, 0xd3, 0x33, 0xd7, 0xb8, 0x05, 0xb9, 0x9e, 0x39, 0x40, 0x0b, 0xdf,
- 0xb6, 0x02, 0x1d, 0x2a, 0xc1, 0x9f, 0x8d, 0x57, 0xe2, 0x38, 0x5d, 0x32, 0x04, 0x9c, 0x49, 0x85,
- 0x80, 0x1b, 0x45, 0xc8, 0xe3, 0x1b, 0x1b, 0xb7, 0xaf, 0xf2, 0x16, 0x1a, 0xff, 0x28, 0x87, 0x8e,
- 0x85, 0x14, 0xe7, 0x73, 0xc3, 0xdb, 0x1f, 0x41, 0x65, 0xec, 0x7b, 0x7d, 0x11, 0x04, 0x9e, 0xaf,
- 0x8d, 0xa3, 0xd7, 0x5f, 0x9c, 0x7a, 0x5e, 0x3f, 0x0c, 0x69, 0x8c, 0x98, 0xbc, 0xf9, 0xaf, 0xb2,
- 0x50, 0x89, 0x1e, 0x28, 0x7f, 0x46, 0x8a, 0x73, 0x15, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d,
- 0xa5, 0x3d, 0x36, 0x87, 0x66, 0x68, 0xe4, 0x7e, 0xec, 0x4d, 0xe4, 0xe4, 0x58, 0xa8, 0x10, 0xd6,
- 0x53, 0x7b, 0x24, 0x3c, 0x96, 0xa7, 0xe4, 0x11, 0x0a, 0x76, 0xdf, 0xf1, 0x26, 0x16, 0x2b, 0x60,
- 0xfb, 0x11, 0x1d, 0x6f, 0x7b, 0xe6, 0x38, 0x50, 0x3a, 0x73, 0xcf, 0xf6, 0x3d, 0x56, 0x42, 0xa2,
- 0x6d, 0x7b, 0x30, 0x32, 0x59, 0x19, 0x99, 0xf5, 0x9e, 0xdb, 0x12, 0x95, 0x70, 0x05, 0xcd, 0xd4,
- 0x83, 0xb1, 0x70, 0xbb, 0xd2, 0x17, 0x42, 0xee, 0x99, 0x63, 0x15, 0xd3, 0x34, 0x84, 0x65, 0xd9,
- 0x52, 0xe9, 0xcf, 0x6d, 0xb3, 0x2f, 0x8e, 0x3d, 0xef, 0x94, 0x2d, 0xa3, 0xa2, 0xe9, 0xb8, 0x81,
- 0x34, 0x07, 0xbe, 0x39, 0x52, 0x3a, 0xb4, 0x27, 0x1c, 0x41, 0xad, 0x15, 0x7a, 0xb7, 0x2d, 0x87,
- 0x93, 0xe3, 0x47, 0xe8, 0xf7, 0xad, 0xaa, 0x3c, 0x93, 0x25, 0xc6, 0x02, 0x75, 0xe8, 0x32, 0x94,
- 0x37, 0x6c, 0xc7, 0x3e, 0xb6, 0x1d, 0x9b, 0xad, 0x21, 0x6a, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5,
- 0x9b, 0xcf, 0x19, 0xc7, 0xce, 0x3d, 0xf6, 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x44, 0x72, 0x03, 0xcf,
- 0xec, 0x1f, 0xb2, 0xeb, 0x94, 0x2b, 0x3b, 0x15, 0xb2, 0x3f, 0x3c, 0x31, 0x8f, 0xd9, 0x8d, 0x38,
- 0xa4, 0x77, 0xb3, 0xb1, 0x06, 0xab, 0x53, 0x59, 0xf9, 0x46, 0x49, 0x7b, 0x9f, 0x8d, 0x1a, 0x54,
- 0x13, 0xe9, 0xd2, 0xc6, 0xab, 0x50, 0x0e, 0x93, 0xa9, 0xe8, 0xa5, 0xdb, 0x81, 0x0a, 0x03, 0x6b,
- 0x21, 0x89, 0xda, 0x8d, 0xdf, 0xcf, 0x40, 0x51, 0x65, 0xb2, 0xf9, 0x46, 0x54, 0x79, 0x92, 0x59,
- 0x20, 0x7b, 0xa9, 0x88, 0x74, 0xee, 0x37, 0x2a, 0x3f, 0xb9, 0x0e, 0x05, 0x87, 0xdc, 0x71, 0xad,
- 0xbe, 0xa8, 0x91, 0xd0, 0x36, 0xb9, 0xa4, 0xb6, 0x69, 0xb6, 0xa2, 0x7c, 0x73, 0x18, 0x7a, 0x24,
- 0xab, 0xb0, 0xe7, 0x0b, 0xa1, 0xc2, 0x8a, 0xe4, 0x4d, 0x67, 0xe9, 0xac, 0xf0, 0x46, 0x63, 0xb3,
- 0x2f, 0x09, 0x40, 0xa7, 0x28, 0x2a, 0x53, 0x96, 0x47, 0x29, 0xdf, 0x1c, 0x9a, 0xb2, 0x79, 0x02,
- 0xe5, 0x43, 0x2f, 0x98, 0x3e, 0x93, 0x4b, 0x90, 0xeb, 0x79, 0x63, 0x65, 0x61, 0x6e, 0x78, 0x92,
- 0x2c, 0x4c, 0x75, 0x04, 0x9f, 0x48, 0x25, 0x54, 0x86, 0x3d, 0x18, 0x4a, 0xe5, 0x89, 0x77, 0x5c,
- 0x57, 0xf8, 0xac, 0x80, 0x6b, 0x68, 0x88, 0x31, 0x5a, 0xb5, 0xac, 0x88, 0xab, 0x46, 0xf0, 0x6d,
- 0xdb, 0x0f, 0x24, 0x2b, 0x35, 0x3b, 0x78, 0x9a, 0xda, 0x03, 0x3a, 0x04, 0xe9, 0x07, 0xb1, 0x5a,
- 0xc2, 0x2e, 0x52, 0x73, 0x53, 0xb8, 0x28, 0x63, 0xe4, 0x3d, 0x29, 0xd7, 0x8f, 0x5e, 0x90, 0xc5,
- 0x13, 0x8c, 0xda, 0x1f, 0x4d, 0x02, 0x69, 0x9f, 0x5c, 0xb0, 0x5c, 0xf3, 0x19, 0xd4, 0x52, 0x65,
- 0x4c, 0xfc, 0x3a, 0xb0, 0x14, 0x00, 0xbb, 0xbe, 0xc4, 0x6f, 0xc1, 0xb5, 0x14, 0x74, 0xcf, 0xb6,
- 0x2c, 0x8a, 0xf5, 0x4e, 0x3f, 0x08, 0x07, 0xb8, 0x51, 0x81, 0x52, 0x5f, 0xad, 0x52, 0xf3, 0x10,
- 0x6a, 0xb4, 0x6c, 0x7b, 0x42, 0x9a, 0x07, 0xae, 0x73, 0xf1, 0x27, 0xae, 0x35, 0x6b, 0x7e, 0x55,
- 0x3b, 0x58, 0xa8, 0x2f, 0x4e, 0x7c, 0x6f, 0x44, 0xbc, 0x0a, 0x06, 0xfd, 0x46, 0xee, 0xd2, 0xd3,
- 0x6b, 0x9f, 0x95, 0x5e, 0xf3, 0x97, 0x15, 0x28, 0xb5, 0xfa, 0x7d, 0x74, 0x09, 0x67, 0xde, 0xfc,
- 0x0e, 0x14, 0xfb, 0x9e, 0x7b, 0x62, 0x0f, 0xb4, 0x3e, 0x9e, 0xb6, 0x0c, 0x35, 0x1d, 0x0a, 0xdc,
- 0x89, 0x3d, 0x30, 0x34, 0x32, 0x92, 0xe9, 0xf3, 0xa4, 0x70, 0x25, 0x99, 0x52, 0xaa, 0xd1, 0xf1,
- 0xf1, 0x00, 0xf2, 0xb6, 0x7b, 0xe2, 0xe9, 0xc2, 0xd0, 0xcf, 0x5f, 0x42, 0x44, 0xd5, 0x91, 0x84,
- 0xd8, 0xf8, 0x4f, 0x19, 0x28, 0xaa, 0x57, 0xf3, 0x57, 0x61, 0x45, 0xb8, 0xb8, 0x99, 0x42, 0x55,
- 0xae, 0x77, 0xd1, 0x14, 0x14, 0x8d, 0x56, 0x0d, 0x11, 0xc7, 0x93, 0x81, 0x8e, 0xbd, 0x24, 0x41,
- 0xfc, 0x3d, 0xb8, 0xa5, 0x9a, 0x87, 0xbe, 0xf0, 0x85, 0x23, 0xcc, 0x40, 0x6c, 0x0e, 0x4d, 0xd7,
- 0x15, 0x8e, 0x3e, 0xd8, 0x2f, 0x7b, 0xcc, 0x9b, 0xb0, 0xac, 0x1e, 0x75, 0xc7, 0x66, 0x5f, 0x04,
- 0x3a, 0xdf, 0x97, 0x82, 0xf1, 0xaf, 0x41, 0x81, 0xea, 0x66, 0xeb, 0xd6, 0xd5, 0x4b, 0xa9, 0xb0,
- 0x1a, 0x5e, 0x74, 0xf2, 0xb4, 0x00, 0xd4, 0x34, 0xa1, 0xd3, 0xa5, 0x77, 0xff, 0x17, 0xaf, 0x9c,
- 0x57, 0xf2, 0xff, 0x12, 0x44, 0xd8, 0x3f, 0x4b, 0x38, 0x82, 0x0a, 0x1c, 0xf1, 0x64, 0xcc, 0x52,
- 0x66, 0x25, 0x05, 0x6b, 0xfc, 0xc7, 0x3c, 0xe4, 0x71, 0x86, 0x11, 0x79, 0xe8, 0x8d, 0x44, 0x14,
- 0x5f, 0x56, 0xa6, 0x46, 0x0a, 0x86, 0xa6, 0x8d, 0xa9, 0x52, 0xfc, 0x11, 0x9a, 0x52, 0x1e, 0xd3,
- 0x60, 0xc4, 0x1c, 0xfb, 0xde, 0x89, 0xed, 0xc4, 0x98, 0xda, 0x08, 0x9a, 0x02, 0xf3, 0xaf, 0xc3,
- 0xcd, 0x91, 0xe9, 0x9f, 0x0a, 0x49, 0xbb, 0xfb, 0x99, 0xe7, 0x9f, 0x06, 0x38, 0x73, 0x1d, 0x4b,
- 0x07, 0x26, 0x2f, 0x79, 0xca, 0x5f, 0x87, 0xb5, 0xe7, 0x61, 0x33, 0x7a, 0x87, 0x0a, 0x0d, 0xce,
- 0x3e, 0x40, 0x75, 0x6b, 0x89, 0x33, 0x9b, 0xf8, 0x96, 0x55, 0xf5, 0x6c, 0xd8, 0x46, 0x51, 0x32,
- 0xd5, 0x44, 0x76, 0xf5, 0x9b, 0x75, 0x86, 0x29, 0x0d, 0x45, 0x6b, 0x4b, 0x55, 0x15, 0x05, 0x1d,
- 0x8b, 0x22, 0xab, 0x15, 0x23, 0x06, 0xa0, 0xa0, 0xd1, 0x2b, 0x9f, 0x2a, 0xa5, 0x5a, 0x53, 0x2e,
- 0x68, 0x02, 0x84, 0x18, 0x52, 0xf4, 0x87, 0xe1, 0x4b, 0x54, 0xd8, 0x33, 0x09, 0xe2, 0x77, 0x00,
- 0x06, 0xa6, 0x14, 0xcf, 0xcd, 0x8b, 0x27, 0xbe, 0x53, 0x17, 0x2a, 0x55, 0x12, 0x43, 0xd0, 0x89,
- 0x75, 0xbc, 0xbe, 0xe9, 0x74, 0xa5, 0xe7, 0x9b, 0x03, 0x71, 0x68, 0xca, 0x61, 0x7d, 0xa0, 0x9c,
- 0xd8, 0x69, 0x38, 0x8e, 0x58, 0xda, 0x23, 0xf1, 0x89, 0xe7, 0x8a, 0xfa, 0x50, 0x8d, 0x38, 0x6c,
- 0x63, 0x4f, 0x4c, 0xd7, 0x74, 0x2e, 0xa4, 0xdd, 0xc7, 0xb1, 0xd8, 0xaa, 0x27, 0x09, 0x10, 0x85,
- 0x0d, 0x84, 0xc4, 0x79, 0xec, 0x58, 0xf5, 0xef, 0xab, 0xb1, 0x46, 0x00, 0x5c, 0x5d, 0x21, 0x87,
- 0xc2, 0x17, 0x93, 0x51, 0xcb, 0xb2, 0x7c, 0x11, 0x04, 0xf5, 0x53, 0xb5, 0xba, 0x53, 0xe0, 0xc6,
- 0x37, 0x29, 0x91, 0x35, 0x6c, 0xbe, 0x05, 0xb5, 0x5d, 0xec, 0x61, 0x6b, 0x6c, 0x77, 0xfb, 0xde,
- 0x58, 0xa0, 0x42, 0xa7, 0x90, 0x30, 0x05, 0x10, 0xaa, 0x50, 0xfa, 0x28, 0xf0, 0xdc, 0xd6, 0x61,
- 0x47, 0x1d, 0x31, 0xdb, 0x13, 0xc7, 0x61, 0xd9, 0xe6, 0x01, 0x40, 0x2c, 0xd9, 0x78, 0x5c, 0xb4,
- 0x28, 0x6b, 0xc4, 0x96, 0x54, 0xb8, 0xca, 0xb5, 0x6c, 0x77, 0xb0, 0xa5, 0x85, 0x99, 0x65, 0x10,
- 0x48, 0x61, 0x08, 0x61, 0x45, 0x40, 0x32, 0x58, 0xa8, 0x25, 0x2c, 0x96, 0x6b, 0xfe, 0xef, 0x0c,
- 0x54, 0x13, 0x45, 0x12, 0x7f, 0x8a, 0x85, 0x1d, 0x78, 0x9c, 0xa3, 0x41, 0x80, 0xeb, 0xa6, 0x04,
- 0x3d, 0x6a, 0xe3, 0xaa, 0xea, 0x1a, 0x0e, 0x7c, 0xaa, 0x82, 0x0e, 0x09, 0xc8, 0x67, 0x2a, 0xea,
- 0x68, 0x3e, 0xd4, 0x91, 0x9b, 0x2a, 0x94, 0x9e, 0xb8, 0xa7, 0xae, 0xf7, 0xdc, 0x55, 0xe7, 0x34,
- 0x55, 0xea, 0xa4, 0x72, 0x8e, 0x61, 0x31, 0x4d, 0xae, 0xf9, 0x2f, 0xf2, 0x53, 0x45, 0x6d, 0x6d,
- 0x28, 0x2a, 0x77, 0x81, 0x2c, 0xd9, 0xd9, 0x2a, 0xa4, 0x24, 0xb2, 0xce, 0x6f, 0x25, 0x40, 0x86,
- 0x26, 0x46, 0x3b, 0x3e, 0x2a, 0xf9, 0xcc, 0xce, 0xcd, 0xc3, 0xa5, 0x18, 0x85, 0xba, 0x39, 0x55,
- 0xf5, 0x1c, 0x71, 0x68, 0xfc, 0xb5, 0x0c, 0x5c, 0x9f, 0x87, 0x92, 0xac, 0x0d, 0xcf, 0xa4, 0x6b,
- 0xc3, 0xbb, 0x53, 0xb5, 0xd6, 0x59, 0x1a, 0xcd, 0x83, 0x97, 0xec, 0x44, 0xba, 0xf2, 0xba, 0xf9,
- 0x7b, 0x19, 0x58, 0x9b, 0x19, 0x73, 0xc2, 0x8e, 0x01, 0x28, 0x2a, 0xc9, 0x52, 0xa5, 0x50, 0x51,
- 0x71, 0x8a, 0x4a, 0x2e, 0xd0, 0x09, 0x1f, 0xa8, 0x6c, 0xbf, 0xae, 0x2e, 0x57, 0x66, 0x32, 0xae,
- 0x1a, 0x1e, 0x20, 0x03, 0xa1, 0x02, 0xb1, 0xca, 0xd8, 0xd2, 0x90, 0xa2, 0x32, 0x65, 0x55, 0x06,
- 0x84, 0x95, 0xa8, 0xc4, 0x6a, 0x32, 0x76, 0xec, 0x3e, 0x36, 0xcb, 0xbc, 0x01, 0x37, 0xd5, 0x15,
- 0x03, 0xed, 0x36, 0x9e, 0xf4, 0x86, 0x36, 0x6d, 0x0e, 0x56, 0xc1, 0xf7, 0x1c, 0x4e, 0x8e, 0x1d,
- 0x3b, 0x18, 0x32, 0x68, 0x1a, 0x70, 0x6d, 0xce, 0x00, 0xa9, 0xcb, 0x4f, 0x75, 0xf7, 0x57, 0x00,
- 0xb6, 0x9e, 0x86, 0x9d, 0x66, 0x19, 0xce, 0x61, 0x65, 0xeb, 0x69, 0x92, 0xbb, 0xde, 0x3c, 0x4f,
- 0x51, 0x7b, 0x05, 0x2c, 0xd7, 0xfc, 0xb5, 0x4c, 0x58, 0x03, 0xd1, 0xf8, 0xf3, 0x50, 0x53, 0x1d,
- 0x3e, 0x34, 0x2f, 0x1c, 0xcf, 0xb4, 0x78, 0x1b, 0x56, 0x82, 0xe8, 0x12, 0x4c, 0xe2, 0xc0, 0x9a,
- 0x36, 0x04, 0xba, 0x29, 0x24, 0x63, 0x8a, 0x28, 0x74, 0x85, 0xb2, 0x71, 0xe2, 0x84, 0x93, 0x53,
- 0x67, 0xd2, 0x96, 0x5b, 0x26, 0x37, 0xcd, 0x6c, 0x7e, 0x0d, 0xd6, 0xba, 0xb1, 0x72, 0x57, 0x36,
- 0x33, 0x0a, 0x87, 0x3a, 0x19, 0xb6, 0x42, 0xe1, 0xd0, 0xcd, 0xe6, 0x3f, 0x2e, 0x01, 0xc4, 0x49,
- 0xa2, 0x39, 0x7b, 0x7e, 0x5e, 0xcd, 0xc3, 0x4c, 0xca, 0x36, 0xf7, 0xd2, 0x29, 0xdb, 0xf7, 0x22,
- 0xd3, 0x5d, 0x05, 0x90, 0xa7, 0x0b, 0xbf, 0xe3, 0x3e, 0x4d, 0x1b, 0xec, 0xa9, 0x92, 0xa0, 0xc2,
- 0x74, 0x49, 0xd0, 0xdd, 0xd9, 0xfa, 0xc1, 0x29, 0x65, 0x14, 0x47, 0x26, 0x4a, 0xa9, 0xc8, 0x44,
- 0x03, 0xca, 0xbe, 0x30, 0x2d, 0xcf, 0x75, 0x2e, 0xc2, 0xcc, 0x60, 0xd8, 0xe6, 0x6f, 0x41, 0x41,
- 0xd2, 0x3d, 0x9e, 0x32, 0xed, 0x9d, 0x17, 0x2c, 0x9c, 0xc2, 0x45, 0xcd, 0x66, 0x07, 0xba, 0xe8,
- 0x4f, 0x9d, 0x9a, 0x65, 0x23, 0x01, 0xe1, 0xeb, 0xc0, 0x6d, 0x74, 0xd3, 0x1c, 0x47, 0x58, 0x1b,
- 0x17, 0x5b, 0x2a, 0x61, 0x47, 0xe7, 0x7a, 0xd9, 0x98, 0xf3, 0x24, 0x5c, 0xff, 0xe5, 0x78, 0xfd,
- 0xa9, 0xcb, 0x67, 0x76, 0x80, 0x23, 0xad, 0x91, 0xf9, 0x12, 0xb5, 0xd1, 0x72, 0x08, 0x37, 0xac,
- 0x9a, 0x4b, 0x92, 0xde, 0x38, 0xeb, 0x7d, 0xc9, 0xd3, 0x70, 0x7a, 0x55, 0x68, 0x66, 0x95, 0x98,
- 0xc6, 0x00, 0xd2, 0xe4, 0x7d, 0xcf, 0xdd, 0x47, 0x89, 0x60, 0x5a, 0x93, 0xeb, 0x36, 0x8e, 0x77,
- 0xec, 0x4c, 0x7c, 0xd3, 0xa1, 0xa7, 0x6b, 0x4a, 0x93, 0xc7, 0x90, 0xe6, 0x1f, 0x66, 0x23, 0xe7,
- 0xa9, 0x02, 0x85, 0x63, 0x33, 0xb0, 0xfb, 0xea, 0x74, 0xd3, 0x46, 0x8f, 0x3a, 0xdd, 0xa4, 0x67,
- 0x79, 0x2c, 0x8b, 0x7e, 0x50, 0x20, 0x74, 0xc2, 0x26, 0xbe, 0x35, 0xc5, 0xf2, 0xa8, 0x02, 0x42,
- 0x49, 0x52, 0x55, 0x41, 0x44, 0x4a, 0xe1, 0x37, 0x2b, 0xaa, 0xb7, 0x24, 0x47, 0x9a, 0x8e, 0x18,
- 0x56, 0x46, 0x1c, 0xd7, 0x93, 0x42, 0x05, 0x1f, 0x49, 0xee, 0x19, 0x20, 0x9b, 0xf0, 0x1a, 0x00,
- 0xab, 0xa2, 0x63, 0x12, 0x32, 0x55, 0x11, 0xc3, 0x80, 0xdc, 0xb6, 0x65, 0xdc, 0xf7, 0xe9, 0x07,
- 0xac, 0x86, 0x3d, 0x8a, 0x2f, 0x63, 0xb1, 0x15, 0xe4, 0x6a, 0x52, 0xad, 0xca, 0x2a, 0xfe, 0x3c,
- 0xa3, 0x0a, 0x16, 0x86, 0x6f, 0xb5, 0x50, 0x2f, 0xad, 0x61, 0xcf, 0x22, 0x43, 0x87, 0x71, 0xf4,
- 0xbb, 0xc6, 0x26, 0x3a, 0x41, 0xf6, 0xd8, 0x74, 0x25, 0xbb, 0x86, 0x43, 0x1d, 0x5b, 0x27, 0xec,
- 0x3a, 0x92, 0xf4, 0x87, 0xa6, 0x64, 0x37, 0x10, 0x07, 0x7f, 0x6d, 0x09, 0x1f, 0x25, 0x85, 0xdd,
- 0x44, 0x1c, 0x69, 0x0e, 0xd8, 0xad, 0xe6, 0x6f, 0xc6, 0x15, 0xcf, 0x6f, 0x44, 0xee, 0xc9, 0x22,
- 0xdb, 0x07, 0x1d, 0x98, 0x79, 0x7b, 0xb9, 0x0d, 0x6b, 0xbe, 0xf8, 0xc1, 0xc4, 0x4e, 0xdd, 0x03,
- 0xc8, 0x5d, 0x5d, 0x68, 0x32, 0x4b, 0xd1, 0x3c, 0x83, 0xb5, 0xb0, 0xf1, 0xcc, 0x96, 0x43, 0x8a,
- 0x14, 0xf1, 0xb7, 0x12, 0x17, 0x15, 0x32, 0x73, 0x2f, 0x78, 0x45, 0x2c, 0xe3, 0x8b, 0x09, 0x51,
- 0x26, 0x20, 0xbb, 0x40, 0x26, 0xa0, 0xf9, 0xbf, 0x92, 0xa9, 0x65, 0xe5, 0xb0, 0x59, 0x91, 0xc3,
- 0x36, 0x9b, 0x6a, 0x8e, 0x83, 0xfb, 0xd9, 0x97, 0x09, 0xee, 0xcf, 0x2b, 0xdb, 0x78, 0x1f, 0xfd,
- 0x07, 0xda, 0x99, 0x4f, 0x17, 0x48, 0x5c, 0xa4, 0x70, 0xf9, 0x06, 0x25, 0x8e, 0xcd, 0xae, 0xaa,
- 0x29, 0x2a, 0xcc, 0xbd, 0x36, 0x94, 0xcc, 0x10, 0x6b, 0x4c, 0x23, 0x41, 0x95, 0xd0, 0x63, 0xc5,
- 0x79, 0x7a, 0x0c, 0x7d, 0x67, 0xad, 0xe1, 0xa2, 0xb6, 0xca, 0xf3, 0xa8, 0xdf, 0x21, 0x7b, 0xda,
- 0xe3, 0x65, 0x63, 0x06, 0x8e, 0xc6, 0xde, 0x68, 0xe2, 0x48, 0x5b, 0xa7, 0x32, 0x54, 0x63, 0xfa,
- 0x5e, 0x63, 0x65, 0xf6, 0x5e, 0xe3, 0x87, 0x00, 0x81, 0xc0, 0xdd, 0xb1, 0x65, 0xf7, 0xa5, 0xae,
- 0x3c, 0xba, 0x73, 0xd9, 0xd8, 0x74, 0x02, 0x26, 0x41, 0x81, 0xfd, 0x1f, 0x99, 0xe7, 0x94, 0x94,
- 0xd5, 0x25, 0x12, 0x51, 0x7b, 0x5a, 0xbb, 0xaf, 0xcc, 0x6a, 0xf7, 0xb7, 0xa0, 0x10, 0xa0, 0x09,
- 0x4d, 0x57, 0x73, 0x2e, 0x5f, 0xdf, 0x75, 0xb2, 0xb3, 0x0d, 0x85, 0x4b, 0x21, 0x49, 0xd4, 0x7f,
- 0x9e, 0x4f, 0x97, 0x72, 0x2a, 0x46, 0xd8, 0x4c, 0x69, 0xd8, 0x9b, 0x69, 0x0d, 0xdb, 0xb0, 0xa0,
- 0xa8, 0xd3, 0x0b, 0xd3, 0x81, 0x82, 0x30, 0x30, 0x99, 0x4d, 0x04, 0x26, 0xa3, 0xfa, 0xd6, 0x5c,
- 0xb2, 0xbe, 0x75, 0xea, 0xde, 0x5e, 0x61, 0xe6, 0xde, 0x5e, 0xf3, 0x13, 0x28, 0x28, 0x9f, 0x00,
- 0x42, 0x73, 0x54, 0x99, 0xb2, 0x38, 0x28, 0x96, 0xe1, 0xd7, 0x81, 0x05, 0x82, 0x6c, 0x1d, 0xd1,
- 0x35, 0x47, 0x82, 0x94, 0x64, 0x96, 0xd7, 0xe1, 0xba, 0xc2, 0x0d, 0xd2, 0x4f, 0xc8, 0xe0, 0x72,
- 0xec, 0x63, 0xdf, 0xf4, 0x2f, 0x58, 0xbe, 0xf9, 0x21, 0x25, 0xf7, 0x43, 0x81, 0xaa, 0x46, 0xf7,
- 0x24, 0x95, 0x5a, 0xb6, 0xb4, 0xf6, 0xa1, 0xda, 0x10, 0xed, 0xed, 0xa9, 0x8a, 0x39, 0x72, 0xa7,
- 0x28, 0x1e, 0xb4, 0x9c, 0x3c, 0xe3, 0xff, 0xd4, 0xf6, 0x5b, 0x73, 0x23, 0x61, 0x31, 0xa6, 0x4b,
- 0xe0, 0x32, 0x8b, 0x96, 0xc0, 0x35, 0x1f, 0xc3, 0xaa, 0x91, 0xd6, 0xe9, 0xfc, 0x3d, 0x28, 0x79,
- 0xe3, 0x24, 0x9f, 0x17, 0xc9, 0x65, 0x88, 0xde, 0xfc, 0x59, 0x06, 0x96, 0x3b, 0xae, 0x14, 0xbe,
- 0x6b, 0x3a, 0xdb, 0x8e, 0x39, 0xe0, 0xef, 0x86, 0x5a, 0x6a, 0x7e, 0xec, 0x21, 0x89, 0x9b, 0x56,
- 0x58, 0x8e, 0x0e, 0xa3, 0xf3, 0x1b, 0xb0, 0x26, 0x2c, 0x5b, 0x7a, 0xbe, 0xb2, 0x93, 0xc3, 0x4a,
- 0xc5, 0xeb, 0xc0, 0x14, 0xb8, 0x4b, 0x5b, 0xa2, 0xa7, 0x96, 0xb9, 0x0e, 0xd7, 0x53, 0xd0, 0xd0,
- 0x08, 0xce, 0xf2, 0xdb, 0x50, 0x8f, 0x4f, 0xa3, 0x2d, 0xcf, 0x95, 0x1d, 0xd7, 0x12, 0xe7, 0x64,
- 0x64, 0xb1, 0x5c, 0xf3, 0x37, 0x22, 0xf3, 0xee, 0xa9, 0xae, 0x63, 0xf4, 0x3d, 0x2f, 0xbe, 0x24,
- 0xab, 0x5b, 0x89, 0xcb, 0xd8, 0xd9, 0x05, 0x2e, 0x63, 0x7f, 0x18, 0x5f, 0xa8, 0x55, 0x07, 0xc5,
- 0x2b, 0x73, 0x4f, 0x1f, 0x2a, 0xbf, 0xd2, 0xd6, 0x7d, 0x57, 0x24, 0x6e, 0xd7, 0xbe, 0xa9, 0x5d,
- 0xba, 0xfc, 0x22, 0x56, 0xb0, 0xaa, 0x54, 0x78, 0x67, 0xfa, 0x16, 0xc7, 0x62, 0x65, 0x90, 0x33,
- 0x86, 0x2a, 0xbc, 0xb4, 0xa1, 0xfa, 0xed, 0x29, 0xef, 0xa9, 0x3c, 0x37, 0x1c, 0x77, 0xc5, 0x1d,
- 0xd5, 0x6f, 0x43, 0x69, 0x68, 0x07, 0xd2, 0xf3, 0xd5, 0xbd, 0xe9, 0xd9, 0x7b, 0x5e, 0x89, 0xd9,
- 0xda, 0x51, 0x88, 0x54, 0xb3, 0x16, 0x52, 0xf1, 0xef, 0xc1, 0x1a, 0x4d, 0xfc, 0x61, 0x6c, 0x35,
- 0x04, 0xf5, 0xea, 0xdc, 0x5a, 0xc1, 0x04, 0xab, 0x8d, 0x29, 0x12, 0x63, 0x96, 0x49, 0x63, 0x00,
- 0x10, 0xaf, 0xcf, 0x8c, 0x16, 0xfb, 0x0c, 0xf7, 0xa6, 0x6f, 0x42, 0x31, 0x98, 0x1c, 0xc7, 0xf9,
- 0x36, 0xdd, 0x6a, 0x9c, 0x43, 0x63, 0xc6, 0x3a, 0x38, 0x14, 0xbe, 0xea, 0xee, 0x95, 0x97, 0xb7,
- 0x3f, 0x4c, 0x2e, 0xbc, 0x12, 0xce, 0xbb, 0x97, 0xac, 0x5e, 0xc4, 0x39, 0x21, 0x01, 0x8d, 0x77,
- 0xa0, 0x9a, 0x98, 0x54, 0xd4, 0xcc, 0x13, 0xd7, 0xf2, 0xc2, 0x10, 0x30, 0xfe, 0x56, 0x97, 0xd7,
- 0xac, 0x30, 0x08, 0x4c, 0xbf, 0x1b, 0x06, 0xb0, 0xe9, 0x09, 0xbc, 0xc2, 0xc3, 0x7e, 0x05, 0x6a,
- 0x09, 0x93, 0x2e, 0x0a, 0x0f, 0xa6, 0x81, 0xcd, 0x33, 0xf8, 0x7c, 0x82, 0xdd, 0xa1, 0xf0, 0x47,
- 0x76, 0x80, 0x07, 0x89, 0x72, 0x16, 0xc9, 0xb4, 0xb6, 0x84, 0x2b, 0x6d, 0x19, 0x6a, 0xd0, 0xa8,
- 0xcd, 0xbf, 0x09, 0x85, 0xb1, 0xf0, 0x47, 0x81, 0xd6, 0xa2, 0xd3, 0x12, 0x34, 0x97, 0x6d, 0x60,
- 0x28, 0x9a, 0xe6, 0x3f, 0xcc, 0x40, 0x79, 0x4f, 0x48, 0x13, 0x6d, 0x07, 0xbe, 0x37, 0xf5, 0x96,
- 0xd9, 0x1c, 0x71, 0x88, 0xba, 0xae, 0xdd, 0xd7, 0xf5, 0x8e, 0xc6, 0xd7, 0xed, 0x9d, 0xa5, 0xb8,
- 0x63, 0x8d, 0x0d, 0x28, 0x69, 0x70, 0xe3, 0x5d, 0x58, 0x9d, 0xc2, 0xa4, 0x79, 0x51, 0xb6, 0x7d,
- 0xf7, 0x62, 0x14, 0x16, 0x32, 0x2d, 0x1b, 0x69, 0xe0, 0x46, 0x05, 0x4a, 0x63, 0x45, 0xd0, 0xfc,
- 0xc3, 0x1b, 0x54, 0x3e, 0x63, 0x9f, 0xa0, 0x4f, 0x3f, 0xef, 0x64, 0xbd, 0x03, 0x40, 0x47, 0xb3,
- 0x2a, 0xb2, 0x50, 0x21, 0xdb, 0x04, 0x84, 0xbf, 0x1f, 0xc5, 0xda, 0xf3, 0x73, 0x8d, 0xaa, 0x24,
- 0xf3, 0xe9, 0x80, 0x7b, 0x1d, 0x4a, 0x76, 0x40, 0x71, 0x38, 0x5d, 0x98, 0x14, 0x36, 0xf9, 0xb7,
- 0xa0, 0x68, 0x8f, 0xc6, 0x9e, 0x2f, 0x75, 0x30, 0xfe, 0x4a, 0xae, 0x1d, 0xc2, 0xdc, 0x59, 0x32,
- 0x34, 0x0d, 0x52, 0x8b, 0x73, 0xa2, 0x2e, 0xbf, 0x98, 0xba, 0x7d, 0x1e, 0x52, 0x2b, 0x1a, 0xfe,
- 0x5d, 0xa8, 0x0d, 0x54, 0x5d, 0xa6, 0x62, 0xac, 0x95, 0xc8, 0x57, 0xae, 0x62, 0xf2, 0x28, 0x49,
- 0xb0, 0xb3, 0x64, 0xa4, 0x39, 0x20, 0x4b, 0x34, 0xe0, 0x45, 0x20, 0x7b, 0xde, 0x47, 0x9e, 0xed,
- 0x92, 0xbb, 0xfb, 0x02, 0x96, 0x46, 0x92, 0x00, 0x59, 0xa6, 0x38, 0xf0, 0xaf, 0xa3, 0xc5, 0x13,
- 0x48, 0x7d, 0x75, 0xfd, 0xee, 0x55, 0x9c, 0x7a, 0x22, 0xd0, 0x97, 0xce, 0x03, 0xc9, 0xcf, 0xa1,
- 0x91, 0xd8, 0x24, 0xfa, 0x25, 0xad, 0xf1, 0xd8, 0xf7, 0xd0, 0x67, 0xae, 0x11, 0xb7, 0xaf, 0x5f,
- 0xc5, 0xed, 0xf0, 0x52, 0xea, 0x9d, 0x25, 0xe3, 0x0a, 0xde, 0xbc, 0x87, 0x9e, 0x9d, 0x1e, 0xc2,
- 0xae, 0x30, 0xcf, 0xc2, 0x8b, 0xef, 0xf7, 0x17, 0x9a, 0x05, 0xa2, 0xd8, 0x59, 0x32, 0xa6, 0x78,
- 0xf0, 0x5f, 0x85, 0xb5, 0xd4, 0x3b, 0xe9, 0xae, 0xab, 0xba, 0x16, 0xff, 0xb5, 0x85, 0x87, 0x81,
- 0x44, 0x3b, 0x4b, 0xc6, 0x2c, 0x27, 0x3e, 0x81, 0xcf, 0xcd, 0x0e, 0x69, 0x4b, 0xf4, 0x1d, 0xdb,
- 0x15, 0xfa, 0x06, 0xfd, 0x3b, 0x2f, 0x37, 0x5b, 0x9a, 0x78, 0x67, 0xc9, 0xb8, 0x9c, 0x33, 0xff,
- 0x8b, 0x70, 0x7b, 0x3c, 0x57, 0xc5, 0x28, 0xd5, 0xa5, 0x2f, 0xe0, 0xbf, 0xb7, 0xe0, 0x9b, 0x67,
- 0xe8, 0x77, 0x96, 0x8c, 0x2b, 0xf9, 0xa3, 0xed, 0x4c, 0x1e, 0xb4, 0x2e, 0x1f, 0x57, 0x0d, 0x7e,
- 0x1b, 0x2a, 0x66, 0xdf, 0xd9, 0x11, 0xa6, 0x15, 0xe5, 0x0b, 0x62, 0x40, 0xe3, 0xbf, 0x65, 0xa0,
- 0xa8, 0xe5, 0xfd, 0x76, 0x54, 0x13, 0x10, 0xa9, 0xee, 0x18, 0xc0, 0x3f, 0x80, 0x8a, 0xf0, 0x7d,
- 0xcf, 0xdf, 0xf4, 0xac, 0xb0, 0x9c, 0x72, 0x3a, 0xca, 0xac, 0xf8, 0xac, 0xb7, 0x43, 0x34, 0x23,
- 0xa6, 0xe0, 0xef, 0x03, 0xa8, 0x7d, 0xde, 0x8b, 0x6f, 0x01, 0x35, 0xe6, 0xd3, 0xab, 0x14, 0x54,
- 0x8c, 0x1d, 0x87, 0xe5, 0xc2, 0xfc, 0x4f, 0xd8, 0x8c, 0x1c, 0xce, 0x42, 0xc2, 0xe1, 0xbc, 0xad,
- 0xe3, 0x08, 0x14, 0x5e, 0xd1, 0x77, 0xe1, 0x22, 0x40, 0xe3, 0x0f, 0x32, 0x50, 0x54, 0xca, 0x83,
- 0xb7, 0x67, 0x47, 0xf4, 0xda, 0x8b, 0x75, 0xce, 0xfa, 0xf4, 0xc8, 0xbe, 0x05, 0xa0, 0x74, 0x50,
- 0x62, 0x64, 0xb7, 0xa7, 0xf8, 0x68, 0xd2, 0xb0, 0x80, 0x39, 0xc6, 0x6f, 0x3e, 0x54, 0xf7, 0xb5,
- 0x28, 0x24, 0xfc, 0x64, 0x77, 0x97, 0x2d, 0xf1, 0x35, 0xa8, 0x3d, 0xd9, 0x7f, 0xbc, 0x7f, 0xf0,
- 0x6c, 0xff, 0xa8, 0x6d, 0x18, 0x07, 0x86, 0x8a, 0x0c, 0x6f, 0xb4, 0xb6, 0x8e, 0x3a, 0xfb, 0x87,
- 0x4f, 0x7a, 0x2c, 0xdb, 0xf8, 0x67, 0x19, 0xa8, 0xa5, 0x74, 0xd7, 0x9f, 0xed, 0xd2, 0x25, 0xa6,
- 0x3f, 0x37, 0x7f, 0xfa, 0xf3, 0x97, 0x4d, 0x7f, 0x61, 0x7a, 0xfa, 0x7f, 0x27, 0x03, 0xb5, 0x94,
- 0x8e, 0x4c, 0x72, 0xcf, 0xa4, 0xb9, 0x27, 0x4f, 0xfa, 0xec, 0xd4, 0x49, 0xdf, 0x84, 0xe5, 0xf0,
- 0xf7, 0x7e, 0x1c, 0x71, 0x48, 0xc1, 0x92, 0x38, 0x74, 0x61, 0x22, 0x9f, 0xc6, 0xa1, 0x4b, 0x13,
- 0x57, 0xf7, 0x96, 0x2e, 0x88, 0x06, 0x74, 0x7f, 0xbe, 0x71, 0xb9, 0x06, 0xbd, 0x62, 0x08, 0x8f,
- 0xa0, 0x3a, 0x8e, 0xb7, 0xe9, 0xcb, 0x99, 0x25, 0x49, 0xca, 0x17, 0xf4, 0xf3, 0x77, 0x33, 0xb0,
- 0x92, 0xd6, 0xb9, 0xff, 0x4f, 0x4f, 0xeb, 0x3f, 0xc9, 0xc0, 0xda, 0x8c, 0x26, 0xbf, 0xd2, 0xb0,
- 0x9b, 0xee, 0x57, 0x76, 0x81, 0x7e, 0xe5, 0xe6, 0xf4, 0xeb, 0x72, 0x4d, 0x72, 0x75, 0x8f, 0xbb,
- 0xf0, 0xb9, 0x4b, 0xcf, 0x84, 0x2b, 0xa6, 0x3a, 0xc5, 0x34, 0x37, 0xcd, 0xf4, 0xb7, 0x33, 0x70,
- 0xfb, 0x2a, 0x7d, 0xff, 0x7f, 0x5d, 0xae, 0xa6, 0x7b, 0xd8, 0x7c, 0x37, 0x2a, 0x24, 0xa8, 0x42,
- 0x49, 0x7f, 0x97, 0x4a, 0x97, 0x6a, 0x0f, 0xbd, 0xe7, 0xae, 0x8a, 0x44, 0x1b, 0xc2, 0xd4, 0x37,
- 0xf7, 0x0d, 0x31, 0x76, 0x6c, 0xca, 0x91, 0xde, 0x02, 0x68, 0x91, 0x5f, 0x17, 0x5e, 0xa4, 0xd9,
- 0xdc, 0x3d, 0xe8, 0xb6, 0xd9, 0x52, 0xd2, 0x88, 0xfd, 0x24, 0x54, 0xc4, 0xcd, 0x43, 0x28, 0xc6,
- 0x57, 0x1b, 0xf6, 0x4c, 0xff, 0xd4, 0x52, 0x99, 0xc8, 0x65, 0x28, 0x1f, 0x6a, 0x17, 0x4a, 0xbd,
- 0xea, 0xa3, 0xee, 0xc1, 0xbe, 0x0a, 0x7a, 0x6f, 0x1d, 0xf4, 0xd4, 0x05, 0x89, 0xee, 0xd3, 0x47,
- 0x2a, 0x25, 0xf6, 0xc8, 0x68, 0x1d, 0xee, 0x1c, 0x11, 0x46, 0xa1, 0xf9, 0x5b, 0xf9, 0xf0, 0x54,
- 0x6b, 0x1a, 0x3a, 0xc7, 0x09, 0x50, 0x44, 0x6d, 0xee, 0x69, 0xc6, 0xd1, 0x6b, 0xa8, 0xa8, 0xb7,
- 0x7d, 0xae, 0xe2, 0x10, 0x2c, 0xcb, 0x8b, 0x90, 0x3d, 0x3c, 0x56, 0x95, 0x48, 0x3b, 0x72, 0xe4,
- 0xa8, 0x9b, 0x95, 0xbd, 0x73, 0xc9, 0x0a, 0xf8, 0x63, 0x33, 0x38, 0x63, 0xc5, 0xe6, 0x3f, 0xcf,
- 0x41, 0x25, 0x52, 0x95, 0x2f, 0xa3, 0xba, 0x39, 0x87, 0x95, 0xce, 0x7e, 0xaf, 0x6d, 0xec, 0xb7,
- 0x76, 0x35, 0x4a, 0x8e, 0x5f, 0x83, 0xd5, 0xed, 0xce, 0x6e, 0xfb, 0x68, 0xf7, 0xa0, 0xb5, 0xa5,
- 0x81, 0x65, 0x7e, 0x13, 0x78, 0x67, 0xef, 0xf0, 0xc0, 0xe8, 0x1d, 0x75, 0xba, 0x47, 0x9b, 0xad,
- 0xfd, 0xcd, 0xf6, 0x6e, 0x7b, 0x8b, 0x15, 0xf9, 0x2b, 0x70, 0x77, 0xff, 0xa0, 0xd7, 0x39, 0xd8,
- 0x3f, 0xda, 0x3f, 0x38, 0x3a, 0xd8, 0xf8, 0xa8, 0xbd, 0xd9, 0xeb, 0x1e, 0x75, 0xf6, 0x8f, 0x90,
- 0xeb, 0x23, 0xa3, 0x85, 0x4f, 0x58, 0x81, 0xdf, 0x85, 0xdb, 0x1a, 0xab, 0xdb, 0x36, 0x9e, 0xb6,
- 0x0d, 0x64, 0xf2, 0x64, 0xbf, 0xf5, 0xb4, 0xd5, 0xd9, 0x6d, 0x6d, 0xec, 0xb6, 0xd9, 0x32, 0xbf,
- 0x03, 0x0d, 0x8d, 0x61, 0xb4, 0x7a, 0xed, 0xa3, 0xdd, 0xce, 0x5e, 0xa7, 0x77, 0xd4, 0xfe, 0xde,
- 0x66, 0xbb, 0xbd, 0xd5, 0xde, 0x62, 0x35, 0xfe, 0x15, 0xf8, 0x32, 0x75, 0x4a, 0x77, 0x22, 0xfd,
- 0xb2, 0x4f, 0x3a, 0x87, 0x47, 0x2d, 0x63, 0x73, 0xa7, 0xf3, 0xb4, 0xcd, 0x56, 0xf8, 0x6b, 0xf0,
- 0xa5, 0xcb, 0x51, 0xb7, 0x3a, 0x46, 0x7b, 0xb3, 0x77, 0x60, 0x7c, 0xcc, 0xd6, 0xf8, 0x17, 0xe0,
- 0x73, 0x3b, 0xbd, 0xbd, 0xdd, 0xa3, 0x67, 0xc6, 0xc1, 0xfe, 0xa3, 0x23, 0xfa, 0xd9, 0xed, 0x19,
- 0x4f, 0x36, 0x7b, 0x4f, 0x8c, 0x36, 0x03, 0xde, 0x80, 0x9b, 0x87, 0x1b, 0x47, 0xfb, 0x07, 0xbd,
- 0xa3, 0xd6, 0xfe, 0xc7, 0x1b, 0xbb, 0x07, 0x9b, 0x8f, 0x8f, 0xb6, 0x0f, 0x8c, 0xbd, 0x56, 0x8f,
- 0x55, 0xf9, 0x57, 0xe1, 0xb5, 0xcd, 0xee, 0x53, 0xdd, 0xcd, 0x83, 0xed, 0x23, 0xe3, 0xe0, 0x59,
- 0xf7, 0xe8, 0xc0, 0x38, 0x32, 0xda, 0xbb, 0x34, 0xe6, 0x6e, 0xdc, 0xf7, 0x12, 0xbf, 0x0d, 0xf5,
- 0xce, 0x7e, 0xf7, 0xc9, 0xf6, 0x76, 0x67, 0xb3, 0xd3, 0xde, 0xef, 0x1d, 0x1d, 0xb6, 0x8d, 0xbd,
- 0x4e, 0xb7, 0x8b, 0x68, 0xac, 0xd2, 0xfc, 0x0e, 0x14, 0x3b, 0xee, 0x99, 0x2d, 0x69, 0x7f, 0x69,
- 0x61, 0xd4, 0x1e, 0x57, 0xd8, 0xa4, 0x6d, 0x61, 0x0f, 0x5c, 0xfa, 0x62, 0x00, 0xed, 0xae, 0x65,
- 0x23, 0x06, 0x34, 0xff, 0x20, 0x07, 0x35, 0xc5, 0x22, 0xf4, 0xe0, 0xee, 0xc1, 0xaa, 0x0e, 0x85,
- 0x76, 0xd2, 0x2a, 0x6c, 0x1a, 0x4c, 0x9f, 0xe2, 0x52, 0xa0, 0x84, 0x22, 0x4b, 0x82, 0xf8, 0x4d,
- 0x28, 0x9a, 0x7d, 0x07, 0xdd, 0x40, 0x95, 0xaf, 0xd4, 0xad, 0xcf, 0xaa, 0xbb, 0x50, 0x2f, 0x2a,
- 0xc4, 0xbe, 0xe7, 0x6e, 0x46, 0x97, 0x46, 0x52, 0x30, 0xfe, 0x09, 0xdc, 0x8a, 0xda, 0x6d, 0xb7,
- 0xef, 0x5f, 0x8c, 0xa3, 0x6f, 0xe5, 0x95, 0xe6, 0x06, 0x13, 0xb6, 0x6d, 0x47, 0xa4, 0x10, 0x8d,
- 0xcb, 0x18, 0xf0, 0x47, 0x00, 0x36, 0x4d, 0x16, 0xd9, 0x47, 0xf3, 0x6f, 0x46, 0xa7, 0x66, 0x53,
- 0xb7, 0xb4, 0x19, 0x18, 0xfd, 0xc6, 0x03, 0x62, 0x80, 0x7a, 0xf7, 0xb1, 0xfe, 0xb4, 0xde, 0xb2,
- 0x11, 0xb5, 0x9b, 0x0f, 0x00, 0x62, 0x2a, 0xce, 0x60, 0x19, 0x6d, 0x8b, 0x56, 0xb0, 0x27, 0x46,
- 0xc7, 0xc2, 0x57, 0x55, 0x7c, 0x0a, 0xf2, 0x08, 0x29, 0x58, 0xa6, 0xf9, 0x47, 0x99, 0x84, 0x1f,
- 0xae, 0xfc, 0xec, 0x2b, 0x4f, 0xa0, 0x79, 0x39, 0x21, 0xf4, 0x84, 0xf5, 0xa4, 0x6a, 0xc3, 0x48,
- 0x37, 0xf9, 0x21, 0x70, 0x7b, 0x76, 0x2a, 0xf3, 0x0b, 0x4e, 0xe5, 0x1c, 0xda, 0xe9, 0x90, 0x7e,
- 0x61, 0x36, 0xa4, 0x7f, 0x07, 0x60, 0xe0, 0x78, 0xc7, 0x3a, 0xaf, 0x58, 0xd4, 0x75, 0x3f, 0x11,
- 0xa4, 0xe9, 0x40, 0x39, 0xfc, 0x4e, 0x20, 0xca, 0x18, 0x7d, 0x29, 0x30, 0x0a, 0x70, 0xaa, 0x16,
- 0xdf, 0x81, 0x15, 0x91, 0xee, 0x73, 0x76, 0xc1, 0x3e, 0x4f, 0xd1, 0x35, 0xbf, 0x01, 0x6b, 0x33,
- 0x48, 0x38, 0x89, 0x63, 0x53, 0x46, 0x1f, 0x0b, 0xc0, 0xdf, 0xb3, 0xe9, 0xfa, 0xe6, 0xbf, 0xcf,
- 0xc2, 0xf2, 0x9e, 0xe9, 0xda, 0x27, 0x22, 0x90, 0x61, 0x6f, 0x83, 0xfe, 0x50, 0x8c, 0xcc, 0xb0,
- 0xb7, 0xaa, 0xa5, 0xa3, 0x1e, 0xd9, 0x64, 0x3e, 0x61, 0x26, 0xfd, 0x84, 0xbb, 0x69, 0x22, 0x87,
- 0x51, 0xfd, 0xbc, 0x6e, 0xe1, 0xda, 0x39, 0x76, 0x5f, 0xb8, 0x41, 0xb8, 0x63, 0xc2, 0x66, 0x5c,
- 0xbd, 0x53, 0xbc, 0xa2, 0x7a, 0xa7, 0x34, 0x3b, 0xff, 0x77, 0xa1, 0x1a, 0xf4, 0x7d, 0x21, 0xdc,
- 0x60, 0xe8, 0xc9, 0xf0, 0x1b, 0x93, 0x49, 0x10, 0x95, 0xd2, 0x79, 0xcf, 0x5d, 0x94, 0xf1, 0x5d,
- 0xdb, 0x3d, 0xd5, 0x15, 0x62, 0x29, 0x18, 0xca, 0x20, 0xc5, 0x7c, 0xec, 0x1f, 0x0a, 0x8a, 0x37,
- 0x14, 0x8c, 0xa8, 0x4d, 0x51, 0x1d, 0x53, 0x8a, 0x81, 0xe7, 0xdb, 0x42, 0x85, 0x36, 0x2b, 0x46,
- 0x02, 0x82, 0xb4, 0x8e, 0xe9, 0x0e, 0x26, 0xe6, 0x40, 0xe8, 0xf4, 0x77, 0xd4, 0x6e, 0xfe, 0xf7,
- 0x02, 0x80, 0xda, 0x0d, 0xc1, 0xd0, 0x1e, 0x53, 0xea, 0xc5, 0xd6, 0x55, 0xc3, 0x35, 0x83, 0x7e,
- 0xf3, 0xf7, 0x52, 0x05, 0xfd, 0xb3, 0xc9, 0xd2, 0x98, 0x7c, 0x3a, 0x24, 0x84, 0x93, 0x63, 0x4a,
- 0xa1, 0x0b, 0xa7, 0x68, 0xfe, 0xf3, 0x46, 0x12, 0x44, 0xa5, 0x73, 0xa6, 0x14, 0x6d, 0xd7, 0x52,
- 0x21, 0xa7, 0xbc, 0x11, 0xb5, 0xe9, 0x4a, 0x50, 0xd0, 0x9a, 0x48, 0xcf, 0x10, 0xae, 0x78, 0x1e,
- 0xdd, 0x76, 0x8b, 0x41, 0x7c, 0x0f, 0x6a, 0x63, 0xf3, 0x62, 0x24, 0x5c, 0xb9, 0x27, 0xe4, 0xd0,
- 0xb3, 0x74, 0x95, 0xd3, 0x6b, 0x97, 0x77, 0xf0, 0x30, 0x89, 0x6e, 0xa4, 0xa9, 0x51, 0x26, 0xdc,
- 0x80, 0x76, 0x89, 0x5a, 0x46, 0xdd, 0xe2, 0x1b, 0x00, 0xea, 0x57, 0x42, 0x53, 0xcd, 0x44, 0xa1,
- 0xcc, 0x91, 0x08, 0x84, 0x7f, 0x66, 0x2b, 0xed, 0xaa, 0x94, 0x54, 0x4c, 0x85, 0xba, 0x78, 0x12,
- 0x08, 0xbf, 0x3d, 0x32, 0x6d, 0x47, 0x2f, 0x70, 0x0c, 0xe0, 0x6f, 0xc3, 0x8d, 0x60, 0x72, 0x8c,
- 0x32, 0x73, 0x2c, 0x7a, 0xde, 0xbe, 0x78, 0x1e, 0x38, 0x42, 0x4a, 0xe1, 0xeb, 0x4a, 0x8a, 0xf9,
- 0x0f, 0x9b, 0x83, 0xc8, 0x0c, 0xa3, 0xef, 0x99, 0xe0, 0xaf, 0xb8, 0x5c, 0x2b, 0x02, 0xe9, 0x5a,
- 0x36, 0x96, 0x41, 0xf5, 0xa7, 0x40, 0xba, 0xd4, 0x2d, 0xcb, 0xbf, 0x0c, 0x5f, 0x4c, 0x21, 0x19,
- 0x2a, 0x31, 0x1d, 0x6c, 0xdb, 0xae, 0xe9, 0xd8, 0x3f, 0x54, 0x65, 0x02, 0xb9, 0xe6, 0x18, 0x6a,
- 0xa9, 0x89, 0xa3, 0xeb, 0x99, 0xf4, 0x4b, 0xd7, 0xfb, 0x30, 0x58, 0x56, 0xed, 0xae, 0xf4, 0x6d,
- 0xca, 0xb8, 0x44, 0x90, 0x4d, 0xdc, 0xe7, 0x1e, 0xcb, 0xf2, 0xeb, 0xc0, 0x14, 0xa4, 0xe3, 0x9a,
- 0xe3, 0x71, 0x6b, 0x3c, 0x76, 0x04, 0xcb, 0xd1, 0xd5, 0xd7, 0x18, 0xaa, 0xca, 0xfa, 0x59, 0xbe,
- 0xf9, 0x3d, 0xb8, 0x45, 0x33, 0xf3, 0x54, 0xf8, 0x91, 0xa3, 0xad, 0xc7, 0x7a, 0x03, 0xd6, 0xd4,
- 0xaf, 0x7d, 0x4f, 0xaa, 0xc7, 0x64, 0x7c, 0x72, 0x58, 0x51, 0x60, 0xb4, 0xbd, 0xba, 0x82, 0x2e,
- 0xb4, 0x46, 0xb0, 0x08, 0x2f, 0xdb, 0xfc, 0x59, 0x11, 0x78, 0x2c, 0x10, 0x3d, 0x5b, 0xf8, 0x5b,
- 0xa6, 0x34, 0x13, 0x91, 0xd2, 0xda, 0xa5, 0xb9, 0xfe, 0x17, 0x57, 0xea, 0xdd, 0x84, 0xa2, 0x1d,
- 0xa0, 0x6b, 0xa8, 0xcb, 0x75, 0x75, 0x8b, 0xef, 0x02, 0x8c, 0x85, 0x6f, 0x7b, 0x16, 0x49, 0x50,
- 0x61, 0xee, 0xbd, 0x8a, 0xd9, 0x4e, 0xad, 0x1f, 0x46, 0x34, 0x46, 0x82, 0x1e, 0xfb, 0xa1, 0x5a,
- 0x2a, 0x73, 0x5e, 0xa4, 0x4e, 0x27, 0x41, 0xfc, 0x0d, 0xb8, 0x36, 0xf6, 0xed, 0xbe, 0x50, 0xcb,
- 0xf1, 0x24, 0xb0, 0x36, 0xe9, 0x2b, 0x80, 0x25, 0xc2, 0x9c, 0xf7, 0x08, 0x25, 0xd0, 0x74, 0xc9,
- 0x61, 0x0a, 0x28, 0x57, 0xac, 0xaf, 0x80, 0xab, 0x82, 0xd6, 0x9a, 0x31, 0xff, 0x21, 0xbf, 0x0f,
- 0x4c, 0x3f, 0xd8, 0xb3, 0xdd, 0x5d, 0xe1, 0x0e, 0xe4, 0x90, 0x84, 0xbb, 0x66, 0xcc, 0xc0, 0x49,
- 0x83, 0xa9, 0x6f, 0x2d, 0xa9, 0x3c, 0x52, 0xc5, 0x88, 0xda, 0xea, 0xb3, 0x02, 0x8e, 0xe7, 0x77,
- 0xa5, 0xaf, 0x2b, 0x73, 0xa3, 0x36, 0xda, 0x50, 0x01, 0xf5, 0xf5, 0xd0, 0xf7, 0xac, 0x09, 0x65,
- 0x39, 0x94, 0x12, 0x9b, 0x06, 0xc7, 0x98, 0x7b, 0xa6, 0xab, 0xcb, 0x25, 0x6b, 0x49, 0xcc, 0x08,
- 0x4c, 0x3e, 0xa1, 0x17, 0xc4, 0x0c, 0x57, 0xb5, 0x4f, 0x98, 0x80, 0x69, 0x9c, 0x98, 0x15, 0x8b,
- 0x70, 0x62, 0x3e, 0x34, 0x7e, 0xcb, 0xf7, 0x6c, 0x2b, 0xe6, 0xa5, 0x2a, 0x77, 0x66, 0xe0, 0x09,
- 0xdc, 0x98, 0x27, 0x4f, 0xe1, 0x46, 0xf0, 0xe6, 0x8f, 0x33, 0x00, 0xf1, 0xe2, 0xa3, 0xc8, 0xc7,
- 0xad, 0x78, 0x8b, 0xdf, 0x82, 0x6b, 0x49, 0xb0, 0xa3, 0x4b, 0x5e, 0x49, 0xee, 0xe3, 0x07, 0x5b,
- 0xe6, 0x45, 0xc0, 0xb2, 0xfa, 0x12, 0xb6, 0x86, 0x3d, 0x13, 0x82, 0xea, 0x07, 0xaf, 0x03, 0x8b,
- 0x81, 0x74, 0xb3, 0x2e, 0x60, 0xf9, 0x34, 0xea, 0xc7, 0xc2, 0xf4, 0x03, 0x56, 0x68, 0xee, 0x40,
- 0x51, 0x25, 0xbb, 0xe6, 0xa4, 0xa9, 0x5f, 0xae, 0xe6, 0xe4, 0xaf, 0x67, 0x00, 0xb6, 0x54, 0x7d,
- 0x34, 0x9e, 0xe2, 0x73, 0xb2, 0xff, 0xf3, 0x2c, 0x2a, 0xd3, 0xb2, 0xa8, 0xce, 0x3c, 0x17, 0x7d,
- 0xc1, 0x07, 0x9b, 0x28, 0x39, 0x66, 0x58, 0x23, 0xa6, 0xf6, 0x5c, 0xd4, 0x56, 0x07, 0xc8, 0xa6,
- 0xe7, 0xba, 0xa2, 0x8f, 0xc7, 0x4f, 0x74, 0x80, 0x44, 0xa0, 0xe6, 0x8f, 0xb2, 0x50, 0xd9, 0x1c,
- 0x9a, 0x52, 0x7d, 0xf0, 0xe6, 0x3b, 0x50, 0x1e, 0x89, 0x20, 0x30, 0x07, 0x22, 0xd0, 0xc9, 0x9d,
- 0xe9, 0xcc, 0x6c, 0x84, 0xbb, 0xfe, 0xc4, 0xf5, 0x85, 0x69, 0xa9, 0xaf, 0xfc, 0x44, 0x54, 0x8a,
- 0x83, 0x2b, 0x23, 0xe7, 0xfb, 0x25, 0x38, 0xb8, 0xd1, 0x27, 0x79, 0xad, 0xe3, 0xf8, 0x1b, 0xd0,
- 0x6a, 0xb4, 0x49, 0x50, 0x63, 0x0f, 0xaa, 0x09, 0x52, 0xfe, 0x0a, 0xd4, 0x3c, 0xc7, 0x12, 0x81,
- 0xba, 0xe7, 0x17, 0x7f, 0x1a, 0x31, 0x05, 0xa4, 0x12, 0x0d, 0xdc, 0xb9, 0xc2, 0xd7, 0x79, 0xba,
- 0xb0, 0xd9, 0xfc, 0x9f, 0x25, 0xa8, 0x62, 0xa7, 0xf6, 0xd4, 0x18, 0x66, 0x96, 0xa3, 0x0e, 0x25,
- 0x4f, 0x73, 0xd6, 0x17, 0x04, 0xbd, 0x04, 0x4f, 0x5d, 0xf6, 0x91, 0x4b, 0x97, 0x7d, 0xdc, 0x86,
- 0x8a, 0x4a, 0x2a, 0x59, 0x2d, 0xa5, 0x09, 0x73, 0x46, 0x0c, 0x40, 0x73, 0x65, 0xe4, 0x59, 0xa4,
- 0x8f, 0x5b, 0x2a, 0x1f, 0x93, 0x33, 0x12, 0x90, 0xe4, 0xe7, 0x9a, 0xaa, 0xe9, 0xcf, 0x35, 0x51,
- 0xfd, 0xcd, 0xd8, 0xb9, 0xe8, 0x79, 0xba, 0xb7, 0x1d, 0x2b, 0xbe, 0x67, 0x9d, 0x86, 0xf3, 0x4d,
- 0x28, 0xe9, 0x65, 0xd1, 0x59, 0xa7, 0xaf, 0xcc, 0x59, 0x09, 0x8d, 0xbe, 0xae, 0xff, 0xea, 0xab,
- 0x4e, 0x46, 0x48, 0xc9, 0x1f, 0x41, 0xd5, 0x94, 0xd2, 0xec, 0x0f, 0x47, 0x5a, 0x7f, 0xe6, 0xe6,
- 0x24, 0xa0, 0x93, 0x8c, 0x5a, 0x11, 0xb6, 0x91, 0xa4, 0xe4, 0x1b, 0x50, 0xf1, 0x85, 0x99, 0xca,
- 0x81, 0xbf, 0x72, 0x05, 0x1b, 0x23, 0xc4, 0x35, 0x62, 0xb2, 0xe8, 0x2b, 0xa1, 0x10, 0x7f, 0x25,
- 0xb4, 0xf1, 0xd3, 0x0c, 0xac, 0xa4, 0x3b, 0xff, 0x67, 0xf1, 0xd5, 0xba, 0x6f, 0xc5, 0x5f, 0xad,
- 0xfb, 0x0c, 0x5f, 0x80, 0xfb, 0xed, 0x0c, 0x40, 0x3c, 0x2f, 0x78, 0x46, 0xaa, 0xaf, 0x6b, 0x85,
- 0x56, 0xbb, 0x6a, 0xf1, 0x9d, 0xd4, 0x27, 0x19, 0xde, 0x5e, 0x68, 0x92, 0x13, 0x3f, 0x13, 0xe5,
- 0xeb, 0x0f, 0x60, 0x25, 0x0d, 0xa7, 0xb2, 0xff, 0xce, 0x6e, 0x5b, 0xc5, 0xa8, 0x3a, 0x7b, 0xad,
- 0x47, 0x6d, 0x7d, 0xdd, 0xac, 0xb3, 0xff, 0x98, 0x65, 0x1b, 0x7f, 0x9c, 0x81, 0x4a, 0x34, 0xe5,
- 0xfc, 0xbb, 0xc9, 0xb5, 0x52, 0x85, 0x2e, 0x6f, 0x2d, 0xb2, 0x56, 0xf1, 0xaf, 0xb6, 0x2b, 0xfd,
- 0x8b, 0xc4, 0xd2, 0x35, 0x3c, 0x58, 0x49, 0x3f, 0x9c, 0xa3, 0x44, 0x1f, 0xa5, 0x95, 0xe8, 0x9b,
- 0x0b, 0xbd, 0x32, 0x74, 0x55, 0x77, 0xed, 0x40, 0x6a, 0xfd, 0xfa, 0x7e, 0xf6, 0xbd, 0x4c, 0xe3,
- 0x2e, 0x2c, 0x27, 0x1f, 0xcd, 0xde, 0x29, 0xbd, 0xff, 0xc7, 0x39, 0x58, 0x49, 0xd7, 0x8a, 0xd0,
- 0x0d, 0x36, 0x55, 0xa7, 0x74, 0xe0, 0x58, 0x89, 0x8a, 0x7f, 0x86, 0x6e, 0xb2, 0x76, 0x86, 0x09,
- 0xb0, 0x46, 0x51, 0x30, 0x6f, 0x24, 0xd8, 0xdd, 0xe4, 0x97, 0x39, 0xdf, 0xe0, 0x10, 0xde, 0x2d,
- 0x64, 0x63, 0x5e, 0xd1, 0xdf, 0x28, 0xfb, 0x51, 0x96, 0xd7, 0x12, 0x75, 0xe7, 0x3f, 0x41, 0x4b,
- 0x70, 0x75, 0x63, 0xe2, 0x5a, 0x8e, 0xb0, 0x22, 0xe8, 0x4f, 0x93, 0xd0, 0xa8, 0x70, 0xfc, 0x47,
- 0x79, 0xbe, 0x02, 0x95, 0xee, 0xe4, 0x58, 0x17, 0x8d, 0xff, 0xa5, 0x3c, 0xbf, 0x09, 0x6b, 0x1a,
- 0x2b, 0xae, 0xd1, 0x64, 0x7f, 0x19, 0xcf, 0xac, 0x95, 0x96, 0x9a, 0x2f, 0xdd, 0x51, 0xf6, 0x57,
- 0xf2, 0xd8, 0x05, 0xba, 0xb2, 0xfe, 0x57, 0x89, 0x4f, 0x74, 0xc1, 0x87, 0xfd, 0x5a, 0x9e, 0xaf,
- 0x02, 0x74, 0x7b, 0xd1, 0x8b, 0x7e, 0x23, 0xcf, 0xab, 0x50, 0xec, 0xf6, 0x88, 0xdb, 0x8f, 0xf3,
- 0xfc, 0x06, 0xb0, 0xf8, 0xa9, 0xae, 0x5c, 0xfd, 0x1b, 0xaa, 0x33, 0x51, 0x29, 0xea, 0xdf, 0xcc,
- 0xe3, 0xb8, 0xc2, 0x59, 0x66, 0x7f, 0x2b, 0xcf, 0x19, 0x54, 0x13, 0xb1, 0x55, 0xf6, 0xb7, 0xf3,
- 0x9c, 0x43, 0x6d, 0xcf, 0x0e, 0x02, 0xdb, 0x1d, 0xe8, 0x11, 0xfc, 0x3a, 0xbd, 0x79, 0x3b, 0xba,
- 0xa3, 0xc4, 0x7e, 0x33, 0xcf, 0x6f, 0x01, 0x4f, 0xe6, 0x93, 0xf4, 0x83, 0xbf, 0x43, 0xd4, 0xea,
- 0x9c, 0x0c, 0x34, 0xec, 0xef, 0x12, 0x35, 0x4a, 0x82, 0x06, 0xfc, 0x16, 0x4d, 0xc8, 0x66, 0x5c,
- 0xeb, 0xaa, 0xe1, 0x3f, 0x21, 0xe2, 0x70, 0x31, 0x15, 0xec, 0xa7, 0xf9, 0xfb, 0x3f, 0xa3, 0x7c,
- 0x40, 0xb2, 0x64, 0x8c, 0x2f, 0x43, 0xd9, 0xf1, 0xdc, 0x81, 0x54, 0x5f, 0x44, 0xad, 0x41, 0x25,
- 0x18, 0x7a, 0xbe, 0xa4, 0x26, 0x5d, 0xa2, 0x74, 0xe9, 0x3a, 0xbd, 0xba, 0x76, 0xa0, 0xbc, 0x3a,
- 0x15, 0x5f, 0x95, 0xe6, 0x80, 0x55, 0xa3, 0x2a, 0xdd, 0x7c, 0x54, 0x49, 0x4c, 0xd7, 0xfa, 0xc3,
- 0x6b, 0xd3, 0xac, 0x88, 0xa8, 0x13, 0xdf, 0x51, 0x15, 0xc5, 0x02, 0x2d, 0x7a, 0xf5, 0xe9, 0xc3,
- 0xf1, 0x10, 0x1d, 0x87, 0x8a, 0x82, 0x7a, 0xdf, 0xb7, 0xd5, 0x85, 0x5c, 0x5d, 0xa0, 0x67, 0x61,
- 0x3f, 0xa2, 0x1a, 0x14, 0x26, 0xee, 0xff, 0xbd, 0x0c, 0x2c, 0x87, 0x97, 0xd9, 0xed, 0x81, 0xed,
- 0xaa, 0x9a, 0xe4, 0xf0, 0x3b, 0xb3, 0x7d, 0xc7, 0x1e, 0x87, 0xdf, 0x6d, 0x5c, 0x85, 0xaa, 0xe5,
- 0x9b, 0x83, 0x96, 0x6b, 0x6d, 0xf9, 0xde, 0x58, 0x75, 0x5b, 0x65, 0x0c, 0x55, 0x2d, 0xf4, 0x73,
- 0x71, 0x8c, 0xe8, 0x63, 0xe1, 0xb3, 0x3c, 0x15, 0xff, 0x0d, 0x4d, 0xdf, 0x76, 0x07, 0xed, 0x73,
- 0x29, 0xdc, 0x40, 0xd5, 0x44, 0x57, 0xa1, 0x34, 0x09, 0x44, 0xdf, 0x0c, 0x04, 0x2b, 0x62, 0xe3,
- 0x78, 0x62, 0x3b, 0xd2, 0x76, 0xd5, 0xe7, 0x12, 0xa3, 0xa2, 0xe7, 0x32, 0x8e, 0xcc, 0x1c, 0xdb,
- 0xac, 0x72, 0xff, 0xf7, 0x33, 0x50, 0x25, 0xb1, 0x88, 0x63, 0xe2, 0xb1, 0x8d, 0x56, 0x85, 0xd2,
- 0x6e, 0xf4, 0xdd, 0xbc, 0x22, 0x64, 0x0f, 0x4e, 0x55, 0x4c, 0x5c, 0x8b, 0x85, 0xba, 0x93, 0xaa,
- 0x3e, 0xa1, 0x97, 0xe7, 0x9f, 0x83, 0x1b, 0x86, 0x18, 0x79, 0x52, 0x3c, 0x33, 0x6d, 0x99, 0xbc,
- 0x7f, 0x54, 0x40, 0x77, 0x4e, 0x3d, 0x0a, 0x2f, 0x1c, 0x15, 0xc9, 0x9d, 0xc3, 0xd7, 0x86, 0x90,
- 0x12, 0x8e, 0x9e, 0x20, 0xda, 0xbf, 0x2b, 0x47, 0x28, 0x1f, 0x79, 0xb6, 0x8b, 0x6f, 0xa3, 0x9b,
- 0xd0, 0x04, 0xa1, 0xe4, 0x0a, 0x82, 0xe0, 0xfe, 0x3e, 0xdc, 0x9c, 0x9f, 0x12, 0x50, 0x77, 0xa4,
- 0xe9, 0x63, 0xcd, 0x74, 0x23, 0xe5, 0x99, 0x6f, 0xab, 0xab, 0xae, 0x15, 0x28, 0x1c, 0x3c, 0x77,
- 0x49, 0x2c, 0xd6, 0xa0, 0xb6, 0xef, 0x25, 0x68, 0x58, 0xee, 0x7e, 0x3f, 0x95, 0xc5, 0x89, 0x27,
- 0x25, 0xec, 0xc4, 0x52, 0xe2, 0xb6, 0x55, 0x46, 0xe5, 0x07, 0xe8, 0xff, 0x6d, 0xa8, 0xef, 0x47,
- 0xe8, 0xec, 0x89, 0xa5, 0xbe, 0x1f, 0x11, 0x75, 0x33, 0xaf, 0x3e, 0xa4, 0xe5, 0xf6, 0x85, 0x23,
- 0x2c, 0x56, 0xb8, 0xff, 0x1e, 0xac, 0xea, 0xa1, 0xf6, 0x45, 0x10, 0x84, 0xb7, 0x95, 0x0e, 0x7d,
- 0xfb, 0x4c, 0x7d, 0xa3, 0x62, 0x19, 0xca, 0x87, 0xc2, 0x0f, 0x3c, 0x97, 0xbe, 0xcf, 0x01, 0x50,
- 0xec, 0x0e, 0x4d, 0x1f, 0xdf, 0x71, 0xff, 0x6b, 0x7a, 0x92, 0x9e, 0x9c, 0x87, 0x47, 0x03, 0xee,
- 0x1f, 0xfd, 0x79, 0x1a, 0x53, 0x9a, 0x1a, 0x5d, 0xfa, 0xc2, 0x1c, 0xb1, 0xec, 0xfd, 0x4d, 0xa8,
- 0xd0, 0x65, 0xa7, 0xc7, 0xb6, 0x6b, 0xe1, 0xc0, 0x37, 0x74, 0xe1, 0x3d, 0x7d, 0x37, 0xe9, 0x8c,
- 0xa6, 0xa3, 0xac, 0xbe, 0x30, 0xcb, 0xb2, 0xfc, 0x26, 0xf0, 0xd6, 0x44, 0x7a, 0x23, 0x93, 0x2e,
- 0xe9, 0x3a, 0x17, 0xea, 0x6b, 0xc4, 0xb9, 0xfb, 0xdf, 0x06, 0xae, 0x62, 0x6c, 0x96, 0x38, 0xb7,
- 0xdd, 0x41, 0x74, 0xff, 0x1f, 0xe8, 0x63, 0x1e, 0x96, 0x38, 0x0f, 0x6f, 0xaa, 0x85, 0x8d, 0xf0,
- 0x93, 0x22, 0xdb, 0xde, 0xc4, 0xc5, 0x4e, 0x3f, 0x85, 0xeb, 0x4a, 0xc4, 0x70, 0x14, 0x74, 0x03,
- 0xf4, 0x52, 0xc7, 0x5f, 0xdd, 0x54, 0x93, 0x93, 0x20, 0xc2, 0x65, 0x19, 0xec, 0x58, 0xe4, 0x34,
- 0xc7, 0xf0, 0xec, 0xfd, 0x26, 0x5c, 0x9b, 0x13, 0xb9, 0x20, 0xa5, 0xae, 0xfc, 0x37, 0xb6, 0x74,
- 0xff, 0x43, 0x58, 0x53, 0x6a, 0x68, 0x5f, 0xdd, 0xd1, 0x0b, 0xa7, 0xed, 0x59, 0x67, 0xbb, 0xa3,
- 0x66, 0x7a, 0xb3, 0xbd, 0xbb, 0xfb, 0x64, 0xb7, 0x65, 0xb0, 0x0c, 0xc9, 0xc3, 0x41, 0xef, 0x68,
- 0xf3, 0x60, 0x7f, 0xbf, 0xbd, 0xd9, 0x6b, 0x6f, 0xb1, 0xec, 0xc6, 0xfd, 0x7f, 0xf3, 0xe9, 0x9d,
- 0xcc, 0xcf, 0x3f, 0xbd, 0x93, 0xf9, 0xcf, 0x9f, 0xde, 0xc9, 0xfc, 0xf8, 0x17, 0x77, 0x96, 0x7e,
- 0xfe, 0x8b, 0x3b, 0x4b, 0xff, 0xe1, 0x17, 0x77, 0x96, 0x3e, 0x61, 0xd3, 0xff, 0x32, 0xe7, 0xb8,
- 0x48, 0x2e, 0xc3, 0x5b, 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x42, 0x2e, 0x22, 0x4d, 0x67,
- 0x00, 0x00,
+ // 9288 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xc9,
+ 0x91, 0x58, 0xf3, 0x4d, 0x06, 0xfb, 0x91, 0x9d, 0xf3, 0xa2, 0xa8, 0xb9, 0xf1, 0x88, 0x5a, 0xed,
+ 0x8e, 0x46, 0xab, 0x9e, 0xdd, 0xd9, 0x5d, 0xed, 0x6a, 0xa5, 0x5d, 0x89, 0xcd, 0x66, 0x4f, 0x73,
+ 0xa7, 0x5f, 0x2a, 0x72, 0x66, 0xb4, 0x8b, 0x3b, 0xb7, 0xab, 0x59, 0xd9, 0x64, 0xa9, 0x8b, 0x55,
+ 0x54, 0x55, 0xb2, 0xa7, 0x5b, 0xf0, 0x19, 0xf2, 0xeb, 0xce, 0xf7, 0x27, 0x1b, 0x3e, 0xdb, 0x07,
+ 0xc3, 0x38, 0xe9, 0xc3, 0x80, 0xe1, 0x3b, 0xc3, 0x5f, 0x82, 0x7d, 0xb6, 0x0f, 0xb8, 0x33, 0x60,
+ 0xc0, 0x80, 0x7f, 0x64, 0x7f, 0xf9, 0xc3, 0x80, 0x8d, 0x15, 0xe0, 0x1f, 0xc3, 0x3e, 0x9c, 0x01,
+ 0x03, 0x82, 0xe1, 0x0f, 0x23, 0x22, 0xb3, 0x5e, 0x24, 0xbb, 0x87, 0xb3, 0x77, 0x67, 0xf8, 0xab,
+ 0x99, 0x51, 0x11, 0x91, 0xaf, 0xc8, 0xc8, 0x88, 0xc8, 0xc8, 0x6c, 0x78, 0x65, 0x7c, 0x3a, 0x78,
+ 0xe0, 0xd8, 0xc7, 0x0f, 0xc6, 0xc7, 0x0f, 0x46, 0x9e, 0x25, 0x9c, 0x07, 0x63, 0xdf, 0x93, 0x5e,
+ 0xa0, 0x0a, 0xc1, 0x06, 0x95, 0xf8, 0x8a, 0xe9, 0x5e, 0xc8, 0x8b, 0xb1, 0xd8, 0x20, 0x68, 0xfd,
+ 0xf6, 0xc0, 0xf3, 0x06, 0x8e, 0x50, 0xa8, 0xc7, 0x93, 0x93, 0x07, 0x81, 0xf4, 0x27, 0x7d, 0xa9,
+ 0x90, 0x1b, 0x3f, 0xcb, 0xc3, 0xcd, 0xee, 0xc8, 0xf4, 0xe5, 0xa6, 0xe3, 0xf5, 0x4f, 0xbb, 0xae,
+ 0x39, 0x0e, 0x86, 0x9e, 0xdc, 0x34, 0x03, 0xc1, 0x5f, 0x87, 0xe2, 0x31, 0x02, 0x83, 0x5a, 0xe6,
+ 0x6e, 0xee, 0x5e, 0xf5, 0xe1, 0xf5, 0x8d, 0x14, 0xe3, 0x0d, 0xa2, 0x30, 0x34, 0x0e, 0x7f, 0x13,
+ 0x4a, 0x96, 0x90, 0xa6, 0xed, 0x04, 0xb5, 0xec, 0xdd, 0xcc, 0xbd, 0xea, 0xc3, 0x5b, 0x1b, 0xaa,
+ 0xe2, 0x8d, 0xb0, 0xe2, 0x8d, 0x2e, 0x55, 0x6c, 0x84, 0x78, 0xfc, 0x5d, 0x28, 0x9f, 0xd8, 0x8e,
+ 0x78, 0x2c, 0x2e, 0x82, 0x5a, 0xee, 0x4a, 0x9a, 0xcd, 0x6c, 0x2d, 0x63, 0x44, 0xc8, 0xbc, 0x05,
+ 0xab, 0xe2, 0x5c, 0xfa, 0xa6, 0x21, 0x1c, 0x53, 0xda, 0x9e, 0x1b, 0xd4, 0xf2, 0xd4, 0xc2, 0x5b,
+ 0x53, 0x2d, 0x0c, 0xbf, 0x13, 0xf9, 0x14, 0x09, 0xbf, 0x0b, 0x55, 0xef, 0xf8, 0x7b, 0xa2, 0x2f,
+ 0x7b, 0x17, 0x63, 0x11, 0xd4, 0x0a, 0x77, 0x73, 0xf7, 0x2a, 0x46, 0x12, 0xc4, 0xbf, 0x0e, 0xd5,
+ 0xbe, 0xe7, 0x38, 0xa2, 0xaf, 0xea, 0x28, 0x5e, 0xdd, 0xad, 0x24, 0x2e, 0x7f, 0x1b, 0x6e, 0xf8,
+ 0x62, 0xe4, 0x9d, 0x09, 0xab, 0x15, 0x41, 0xa9, 0x9f, 0x65, 0xaa, 0x66, 0xfe, 0x47, 0xde, 0x84,
+ 0x15, 0x5f, 0xb7, 0x6f, 0xd7, 0x76, 0x4f, 0x83, 0x5a, 0x89, 0xba, 0xf5, 0xf9, 0x4b, 0xba, 0x85,
+ 0x38, 0x46, 0x9a, 0x82, 0x33, 0xc8, 0x9d, 0x8a, 0x8b, 0x5a, 0xe5, 0x6e, 0xe6, 0x5e, 0xc5, 0xc0,
+ 0x9f, 0xfc, 0x7d, 0xa8, 0x79, 0xbe, 0x3d, 0xb0, 0x5d, 0xd3, 0x69, 0xf9, 0xc2, 0x94, 0xc2, 0xea,
+ 0xd9, 0x23, 0x11, 0x48, 0x73, 0x34, 0xae, 0xc1, 0xdd, 0xcc, 0xbd, 0x9c, 0x71, 0xe9, 0x77, 0xfe,
+ 0x96, 0x9a, 0xa1, 0x8e, 0x7b, 0xe2, 0xd5, 0xaa, 0xba, 0xfb, 0xe9, 0xb6, 0x6c, 0xeb, 0xcf, 0x46,
+ 0x84, 0xd8, 0xf8, 0x45, 0x16, 0x8a, 0x5d, 0x61, 0xfa, 0xfd, 0x61, 0xfd, 0xd7, 0x33, 0x50, 0x34,
+ 0x44, 0x30, 0x71, 0x24, 0xaf, 0x43, 0x59, 0x8d, 0x6d, 0xc7, 0xaa, 0x65, 0xa8, 0x75, 0x51, 0xf9,
+ 0xb3, 0xc8, 0xce, 0x06, 0xe4, 0x47, 0x42, 0x9a, 0xb5, 0x1c, 0x8d, 0x50, 0x7d, 0xaa, 0x55, 0xaa,
+ 0xfa, 0x8d, 0x3d, 0x21, 0x4d, 0x83, 0xf0, 0xea, 0x3f, 0xcf, 0x40, 0x1e, 0x8b, 0xfc, 0x36, 0x54,
+ 0x86, 0xf6, 0x60, 0xe8, 0xd8, 0x83, 0xa1, 0xd4, 0x0d, 0x89, 0x01, 0xfc, 0x43, 0x58, 0x8b, 0x0a,
+ 0x86, 0xe9, 0x0e, 0x04, 0xb6, 0x68, 0x9e, 0xf0, 0xd3, 0x47, 0x63, 0x1a, 0x99, 0xd7, 0xa0, 0x44,
+ 0xeb, 0xa1, 0x63, 0x91, 0x44, 0x57, 0x8c, 0xb0, 0x88, 0xe2, 0x16, 0xce, 0xd4, 0x63, 0x71, 0x51,
+ 0xcb, 0xd3, 0xd7, 0x24, 0x88, 0x37, 0x61, 0x2d, 0x2c, 0x6e, 0xe9, 0xd1, 0x28, 0x5c, 0x3d, 0x1a,
+ 0xd3, 0xf8, 0x8d, 0x4f, 0x77, 0xa1, 0x40, 0xcb, 0x92, 0xaf, 0x42, 0xd6, 0x0e, 0x07, 0x3a, 0x6b,
+ 0x5b, 0xfc, 0x01, 0x14, 0x4f, 0x6c, 0xe1, 0x58, 0x2f, 0x1c, 0x61, 0x8d, 0xc6, 0xdb, 0xb0, 0xec,
+ 0x8b, 0x40, 0xfa, 0xb6, 0x96, 0x7e, 0xb5, 0x40, 0xbf, 0x30, 0x4f, 0x07, 0x6c, 0x18, 0x09, 0x44,
+ 0x23, 0x45, 0x86, 0xdd, 0xee, 0x0f, 0x6d, 0xc7, 0xf2, 0x85, 0xdb, 0xb1, 0xd4, 0x3a, 0xad, 0x18,
+ 0x49, 0x10, 0xbf, 0x07, 0x6b, 0xc7, 0x66, 0xff, 0x74, 0xe0, 0x7b, 0x13, 0x17, 0x17, 0x84, 0xe7,
+ 0x53, 0xb7, 0x2b, 0xc6, 0x34, 0x98, 0xbf, 0x01, 0x05, 0xd3, 0xb1, 0x07, 0x2e, 0xad, 0xc4, 0xd5,
+ 0x99, 0x49, 0x57, 0x6d, 0x69, 0x22, 0x86, 0xa1, 0x10, 0xf9, 0x0e, 0xac, 0x9c, 0x09, 0x5f, 0xda,
+ 0x7d, 0xd3, 0x21, 0x78, 0xad, 0x44, 0x94, 0x8d, 0xb9, 0x94, 0x4f, 0x93, 0x98, 0x46, 0x9a, 0x90,
+ 0x77, 0x00, 0x02, 0x54, 0x93, 0x34, 0x9d, 0x7a, 0x2d, 0xbc, 0x36, 0x97, 0x4d, 0xcb, 0x73, 0xa5,
+ 0x70, 0xe5, 0x46, 0x37, 0x42, 0xdf, 0x59, 0x32, 0x12, 0xc4, 0xfc, 0x5d, 0xc8, 0x4b, 0x71, 0x2e,
+ 0x6b, 0xab, 0x57, 0x8c, 0x68, 0xc8, 0xa4, 0x27, 0xce, 0xe5, 0xce, 0x92, 0x41, 0x04, 0x48, 0x88,
+ 0x8b, 0xac, 0xb6, 0xb6, 0x00, 0x21, 0xae, 0x4b, 0x24, 0x44, 0x02, 0xfe, 0x01, 0x14, 0x1d, 0xf3,
+ 0xc2, 0x9b, 0xc8, 0x1a, 0x23, 0xd2, 0x2f, 0x5e, 0x49, 0xba, 0x4b, 0xa8, 0x3b, 0x4b, 0x86, 0x26,
+ 0xe2, 0x6f, 0x43, 0xce, 0xb2, 0xcf, 0x6a, 0xeb, 0x44, 0x7b, 0xf7, 0x4a, 0xda, 0x2d, 0xfb, 0x6c,
+ 0x67, 0xc9, 0x40, 0x74, 0xde, 0x82, 0xf2, 0xb1, 0xe7, 0x9d, 0x8e, 0x4c, 0xff, 0xb4, 0xc6, 0x89,
+ 0xf4, 0x4b, 0x57, 0x92, 0x6e, 0x6a, 0xe4, 0x9d, 0x25, 0x23, 0x22, 0xc4, 0x2e, 0xdb, 0x7d, 0xcf,
+ 0xad, 0x5d, 0x5b, 0xa0, 0xcb, 0x9d, 0xbe, 0xe7, 0x62, 0x97, 0x91, 0x00, 0x09, 0x1d, 0xdb, 0x3d,
+ 0xad, 0x5d, 0x5f, 0x80, 0x10, 0x35, 0x27, 0x12, 0x22, 0x01, 0x36, 0xdb, 0x32, 0xa5, 0x79, 0x66,
+ 0x8b, 0xe7, 0xb5, 0x1b, 0x0b, 0x34, 0x7b, 0x4b, 0x23, 0x63, 0xb3, 0x43, 0x42, 0x64, 0x12, 0x2e,
+ 0xcd, 0xda, 0xcd, 0x05, 0x98, 0x84, 0x1a, 0x1d, 0x99, 0x84, 0x84, 0xfc, 0xcf, 0xc3, 0xfa, 0x89,
+ 0x30, 0xe5, 0xc4, 0x17, 0x56, 0xbc, 0xd1, 0xdd, 0x22, 0x6e, 0x1b, 0x57, 0xcf, 0xfd, 0x34, 0xd5,
+ 0xce, 0x92, 0x31, 0xcb, 0x8a, 0xbf, 0x0f, 0x05, 0xc7, 0x94, 0xe2, 0xbc, 0x56, 0x23, 0x9e, 0x8d,
+ 0x17, 0x08, 0x85, 0x14, 0xe7, 0x3b, 0x4b, 0x86, 0x22, 0xe1, 0xdf, 0x85, 0x35, 0x69, 0x1e, 0x3b,
+ 0xe2, 0xe0, 0x44, 0x23, 0x04, 0xb5, 0xcf, 0x11, 0x97, 0xd7, 0xaf, 0x16, 0xe7, 0x34, 0xcd, 0xce,
+ 0x92, 0x31, 0xcd, 0x06, 0x5b, 0x45, 0xa0, 0x5a, 0x7d, 0x81, 0x56, 0x11, 0x3f, 0x6c, 0x15, 0x91,
+ 0xf0, 0x5d, 0xa8, 0xd2, 0x8f, 0x96, 0xe7, 0x4c, 0x46, 0x6e, 0xed, 0xf3, 0xc4, 0xe1, 0xde, 0x8b,
+ 0x39, 0x28, 0xfc, 0x9d, 0x25, 0x23, 0x49, 0x8e, 0x93, 0x48, 0x45, 0xc3, 0x7b, 0x5e, 0xbb, 0xbd,
+ 0xc0, 0x24, 0xf6, 0x34, 0x32, 0x4e, 0x62, 0x48, 0x88, 0x4b, 0xef, 0xb9, 0x6d, 0x0d, 0x84, 0xac,
+ 0xfd, 0xd2, 0x02, 0x4b, 0xef, 0x19, 0xa1, 0xe2, 0xd2, 0x53, 0x44, 0x28, 0xc6, 0xfd, 0xa1, 0x29,
+ 0x6b, 0x77, 0x16, 0x10, 0xe3, 0xd6, 0xd0, 0x24, 0x5d, 0x81, 0x04, 0xf5, 0x1f, 0xc0, 0x72, 0x52,
+ 0x2b, 0x73, 0x0e, 0x79, 0x5f, 0x98, 0x6a, 0x47, 0x28, 0x1b, 0xf4, 0x1b, 0x61, 0xc2, 0xb2, 0x25,
+ 0xed, 0x08, 0x65, 0x83, 0x7e, 0xf3, 0x9b, 0x50, 0x54, 0xb6, 0x09, 0x29, 0xfc, 0xb2, 0xa1, 0x4b,
+ 0x88, 0x6b, 0xf9, 0xe6, 0x80, 0xf6, 0xad, 0xb2, 0x41, 0xbf, 0x11, 0xd7, 0xf2, 0xbd, 0xf1, 0x81,
+ 0x4b, 0x0a, 0xbb, 0x6c, 0xe8, 0x52, 0xfd, 0xdf, 0x7c, 0x00, 0x25, 0xdd, 0xa8, 0xfa, 0x3f, 0xc8,
+ 0x40, 0x51, 0x29, 0x14, 0xfe, 0x2d, 0x28, 0x04, 0xf2, 0xc2, 0x11, 0xd4, 0x86, 0xd5, 0x87, 0x5f,
+ 0x5e, 0x40, 0x09, 0x6d, 0x74, 0x91, 0xc0, 0x50, 0x74, 0x0d, 0x03, 0x0a, 0x54, 0xe6, 0x25, 0xc8,
+ 0x19, 0xde, 0x73, 0xb6, 0xc4, 0x01, 0x8a, 0x6a, 0xb2, 0x58, 0x06, 0x81, 0x5b, 0xf6, 0x19, 0xcb,
+ 0x22, 0x70, 0x47, 0x98, 0x96, 0xf0, 0x59, 0x8e, 0xaf, 0x40, 0x25, 0x9c, 0x96, 0x80, 0xe5, 0x39,
+ 0x83, 0xe5, 0xc4, 0x84, 0x07, 0xac, 0x50, 0xff, 0x9f, 0x79, 0xc8, 0xe3, 0xfa, 0xe7, 0xaf, 0xc0,
+ 0x8a, 0x34, 0xfd, 0x81, 0x50, 0x86, 0x70, 0x64, 0xa4, 0xa4, 0x81, 0xfc, 0x83, 0xb0, 0x0f, 0x59,
+ 0xea, 0xc3, 0x6b, 0x2f, 0xd4, 0x2b, 0xa9, 0x1e, 0x24, 0x76, 0xe1, 0xdc, 0x62, 0xbb, 0xf0, 0x36,
+ 0x94, 0x51, 0x9d, 0x75, 0xed, 0x1f, 0x08, 0x1a, 0xfa, 0xd5, 0x87, 0xf7, 0x5f, 0x5c, 0x65, 0x47,
+ 0x53, 0x18, 0x11, 0x2d, 0xef, 0x40, 0xa5, 0x6f, 0xfa, 0x16, 0x35, 0x86, 0x66, 0x6b, 0xf5, 0xe1,
+ 0x57, 0x5e, 0xcc, 0xa8, 0x15, 0x92, 0x18, 0x31, 0x35, 0x3f, 0x80, 0xaa, 0x25, 0x82, 0xbe, 0x6f,
+ 0x8f, 0x49, 0xbd, 0xa9, 0xbd, 0xf8, 0xab, 0x2f, 0x66, 0xb6, 0x15, 0x13, 0x19, 0x49, 0x0e, 0x68,
+ 0x91, 0xf9, 0x91, 0x7e, 0x2b, 0x91, 0x81, 0x10, 0x03, 0x1a, 0xef, 0x42, 0x39, 0xec, 0x0f, 0x5f,
+ 0x86, 0x32, 0xfe, 0xdd, 0xf7, 0x5c, 0xc1, 0x96, 0x70, 0x6e, 0xb1, 0xd4, 0x1d, 0x99, 0x8e, 0xc3,
+ 0x32, 0x7c, 0x15, 0x00, 0x8b, 0x7b, 0xc2, 0xb2, 0x27, 0x23, 0x96, 0x6d, 0x7c, 0x23, 0x94, 0x96,
+ 0x32, 0xe4, 0x0f, 0xcd, 0x01, 0x52, 0x2c, 0x43, 0x39, 0x54, 0xd7, 0x2c, 0x83, 0xf4, 0x5b, 0x66,
+ 0x30, 0x3c, 0xf6, 0x4c, 0xdf, 0x62, 0x59, 0x5e, 0x85, 0x52, 0xd3, 0xef, 0x0f, 0xed, 0x33, 0xc1,
+ 0x72, 0x8d, 0x07, 0x50, 0x4d, 0xb4, 0x17, 0x59, 0xe8, 0x4a, 0x2b, 0x50, 0x68, 0x5a, 0x96, 0xb0,
+ 0x58, 0x06, 0x09, 0x74, 0x07, 0x59, 0xb6, 0xf1, 0x15, 0xa8, 0x44, 0xa3, 0x85, 0xe8, 0xb8, 0x71,
+ 0xb3, 0x25, 0xfc, 0x85, 0x60, 0x96, 0x41, 0xa9, 0xec, 0xb8, 0x8e, 0xed, 0x0a, 0x96, 0xad, 0xff,
+ 0x05, 0x12, 0x55, 0xfe, 0xcd, 0xf4, 0x82, 0x78, 0xf5, 0x45, 0x3b, 0x6b, 0x7a, 0x35, 0x7c, 0x3e,
+ 0xd1, 0xbf, 0x5d, 0x9b, 0x1a, 0x57, 0x86, 0xfc, 0x96, 0x27, 0x03, 0x96, 0xa9, 0xff, 0xb7, 0x2c,
+ 0x94, 0xc3, 0x0d, 0x15, 0x7d, 0x82, 0x89, 0xef, 0x68, 0x81, 0xc6, 0x9f, 0xfc, 0x3a, 0x14, 0xa4,
+ 0x2d, 0xb5, 0x18, 0x57, 0x0c, 0x55, 0x40, 0x5b, 0x2d, 0x39, 0xb3, 0xca, 0x80, 0x9d, 0x9e, 0x2a,
+ 0x7b, 0x64, 0x0e, 0xc4, 0x8e, 0x19, 0x0c, 0xb5, 0x09, 0x1b, 0x03, 0x90, 0xfe, 0xc4, 0x3c, 0x43,
+ 0x99, 0xa3, 0xef, 0xca, 0x8a, 0x4b, 0x82, 0xf8, 0x5b, 0x90, 0xc7, 0x0e, 0x6a, 0xa1, 0xf9, 0x73,
+ 0x53, 0x1d, 0x46, 0x31, 0x39, 0xf4, 0x05, 0x4e, 0xcf, 0x06, 0x7a, 0x60, 0x06, 0x21, 0xf3, 0x57,
+ 0x61, 0x55, 0x2d, 0xc2, 0x83, 0xd0, 0x7f, 0x28, 0x11, 0xe7, 0x29, 0x28, 0x6f, 0xe2, 0x70, 0x9a,
+ 0x52, 0xd4, 0xca, 0x0b, 0xc8, 0x77, 0x38, 0x38, 0x1b, 0x5d, 0x24, 0x31, 0x14, 0x65, 0xe3, 0x1d,
+ 0x1c, 0x53, 0x53, 0x0a, 0x9c, 0xe6, 0xf6, 0x68, 0x2c, 0x2f, 0x94, 0xd0, 0x6c, 0x0b, 0xd9, 0x1f,
+ 0xda, 0xee, 0x80, 0x65, 0xd4, 0x10, 0xe3, 0x24, 0x12, 0x8a, 0xef, 0x7b, 0x3e, 0xcb, 0xd5, 0xeb,
+ 0x90, 0x47, 0x19, 0x45, 0x25, 0xe9, 0x9a, 0x23, 0xa1, 0x47, 0x9a, 0x7e, 0xd7, 0xaf, 0xc1, 0xfa,
+ 0xcc, 0x7e, 0x5c, 0xff, 0xbd, 0xa2, 0x92, 0x10, 0xa4, 0x20, 0x5b, 0x50, 0x53, 0x90, 0x99, 0xf7,
+ 0x52, 0x3a, 0x06, 0xb9, 0xa4, 0x75, 0xcc, 0x07, 0x50, 0xc0, 0x8e, 0x85, 0x2a, 0x66, 0x01, 0xf2,
+ 0x3d, 0x44, 0x37, 0x14, 0x15, 0x7a, 0x30, 0xfd, 0xa1, 0xe8, 0x9f, 0x0a, 0x4b, 0xeb, 0xfa, 0xb0,
+ 0x88, 0x42, 0xd3, 0x4f, 0x98, 0xe7, 0xaa, 0x40, 0x22, 0xd1, 0xf7, 0xdc, 0xf6, 0xc8, 0xfb, 0x9e,
+ 0x4d, 0xf3, 0x8a, 0x22, 0x11, 0x02, 0xc2, 0xaf, 0x1d, 0x94, 0x11, 0x3d, 0x6d, 0x31, 0xa0, 0xde,
+ 0x86, 0x02, 0xd5, 0x8d, 0x2b, 0x41, 0xb5, 0x59, 0x45, 0x1a, 0x5e, 0x5d, 0xac, 0xcd, 0xba, 0xc9,
+ 0xf5, 0xdf, 0xcd, 0x42, 0x1e, 0xcb, 0xfc, 0x3e, 0x14, 0x7c, 0xf4, 0xc3, 0x68, 0x38, 0x2f, 0xf3,
+ 0xd9, 0x14, 0x0a, 0xff, 0x96, 0x16, 0xc5, 0xec, 0x02, 0xc2, 0x12, 0xd5, 0x98, 0x14, 0xcb, 0xeb,
+ 0x50, 0x18, 0x9b, 0xbe, 0x39, 0xd2, 0xeb, 0x44, 0x15, 0x1a, 0x3f, 0xce, 0x40, 0x1e, 0x91, 0xf8,
+ 0x3a, 0xac, 0x74, 0xa5, 0x6f, 0x9f, 0x0a, 0x39, 0xf4, 0xbd, 0xc9, 0x60, 0xa8, 0x24, 0xe9, 0xb1,
+ 0xb8, 0x50, 0xfa, 0x46, 0x29, 0x04, 0x69, 0x3a, 0x76, 0x9f, 0x65, 0x51, 0xaa, 0x36, 0x3d, 0xc7,
+ 0x62, 0x39, 0xbe, 0x06, 0xd5, 0x27, 0xae, 0x25, 0xfc, 0xa0, 0xef, 0xf9, 0xc2, 0x62, 0x79, 0xbd,
+ 0xba, 0x4f, 0x59, 0x81, 0xf6, 0x32, 0x71, 0x2e, 0xc9, 0x17, 0x62, 0x45, 0x7e, 0x0d, 0xd6, 0x36,
+ 0xd3, 0x0e, 0x12, 0x2b, 0xa1, 0x4e, 0xda, 0x13, 0x2e, 0x0a, 0x19, 0x2b, 0x2b, 0x21, 0xf6, 0xbe,
+ 0x67, 0xb3, 0x0a, 0x56, 0xa6, 0xd6, 0x09, 0x83, 0xc6, 0xbf, 0xca, 0x84, 0x9a, 0x63, 0x05, 0x2a,
+ 0x87, 0xa6, 0x6f, 0x0e, 0x7c, 0x73, 0x8c, 0xed, 0xab, 0x42, 0x49, 0x6d, 0x9c, 0x6f, 0x2a, 0xed,
+ 0xa6, 0x0a, 0x0f, 0x95, 0x6e, 0x54, 0x85, 0xb7, 0x58, 0x2e, 0x2e, 0xbc, 0xcd, 0xf2, 0x58, 0xc7,
+ 0x77, 0x26, 0x9e, 0x14, 0xac, 0x40, 0xba, 0xce, 0xb3, 0x04, 0x2b, 0x22, 0xb0, 0x87, 0x1a, 0x85,
+ 0x95, 0xb0, 0xcf, 0x2d, 0x94, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, 0x62,
+ 0x15, 0xfc, 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x97, 0x9e, 0x37, 0x18, 0x38, 0x82,
+ 0x55, 0x71, 0x0c, 0x12, 0xca, 0x97, 0x2d, 0x93, 0xa6, 0x35, 0x1d, 0xc7, 0x9b, 0x48, 0xb6, 0x52,
+ 0xff, 0x45, 0x0e, 0xf2, 0xe8, 0xdd, 0xe0, 0xda, 0x19, 0xa2, 0x9e, 0xd1, 0x6b, 0x07, 0x7f, 0x47,
+ 0x2b, 0x30, 0x1b, 0xaf, 0x40, 0xfe, 0xbe, 0x9e, 0xe9, 0xdc, 0x02, 0x5a, 0x16, 0x19, 0x27, 0x27,
+ 0x99, 0x43, 0x7e, 0x64, 0x8f, 0x84, 0xd6, 0x75, 0xf4, 0x1b, 0x61, 0x01, 0xee, 0xc7, 0x05, 0x0a,
+ 0x9e, 0xd0, 0x6f, 0x5c, 0x35, 0x26, 0x6e, 0x0b, 0x4d, 0x49, 0x6b, 0x20, 0x67, 0x84, 0xc5, 0x39,
+ 0xda, 0xab, 0x32, 0x57, 0x7b, 0x7d, 0x10, 0x6a, 0xaf, 0xd2, 0x02, 0xab, 0x9e, 0x9a, 0x99, 0xd4,
+ 0x5c, 0xb1, 0xd2, 0x28, 0x2f, 0x4e, 0x9e, 0xd8, 0x4c, 0xb6, 0xb4, 0xd4, 0xc6, 0x1b, 0x5d, 0x59,
+ 0x8d, 0x32, 0xcb, 0xe0, 0x6c, 0xd2, 0x72, 0x55, 0x3a, 0xef, 0xa9, 0x6d, 0x09, 0x8f, 0xe5, 0x68,
+ 0x23, 0x9c, 0x58, 0xb6, 0xc7, 0xf2, 0x68, 0x79, 0x1d, 0x6e, 0x6d, 0xb3, 0x42, 0xe3, 0xd5, 0xc4,
+ 0x96, 0xd4, 0x9c, 0x48, 0x4f, 0xb1, 0x21, 0xf1, 0xcd, 0x28, 0x69, 0x3c, 0x16, 0x16, 0xcb, 0x36,
+ 0xbe, 0x36, 0x47, 0xcd, 0xae, 0x40, 0xe5, 0xc9, 0xd8, 0xf1, 0x4c, 0xeb, 0x0a, 0x3d, 0xbb, 0x0c,
+ 0x10, 0x7b, 0xd5, 0xf5, 0x5f, 0x34, 0xe2, 0xed, 0x1c, 0x6d, 0xd1, 0xc0, 0x9b, 0xf8, 0x7d, 0x41,
+ 0x2a, 0xa4, 0x62, 0xe8, 0x12, 0xff, 0x36, 0x14, 0xf0, 0x7b, 0x18, 0xc6, 0xb9, 0xbf, 0x90, 0x2f,
+ 0xb7, 0xf1, 0xd4, 0x16, 0xcf, 0x0d, 0x45, 0xc8, 0xef, 0x00, 0x98, 0x7d, 0x69, 0x9f, 0x09, 0x04,
+ 0xea, 0xc5, 0x9e, 0x80, 0xf0, 0x77, 0x92, 0xe6, 0xcb, 0xd5, 0x71, 0xc8, 0x84, 0x5d, 0xc3, 0x0d,
+ 0xa8, 0xe2, 0xd2, 0x1d, 0x1f, 0xf8, 0xb8, 0xda, 0x6b, 0xcb, 0x44, 0xf8, 0xc6, 0x62, 0xcd, 0x7b,
+ 0x14, 0x11, 0x1a, 0x49, 0x26, 0xfc, 0x09, 0x2c, 0xab, 0x98, 0x9a, 0x66, 0xba, 0x42, 0x4c, 0xdf,
+ 0x5c, 0x8c, 0xe9, 0x41, 0x4c, 0x69, 0xa4, 0xd8, 0xcc, 0x86, 0x25, 0x0b, 0x2f, 0x1d, 0x96, 0x7c,
+ 0x15, 0x56, 0x7b, 0xe9, 0x55, 0xa0, 0xb6, 0x8a, 0x29, 0x28, 0x6f, 0xc0, 0xb2, 0x1d, 0xc4, 0x51,
+ 0x51, 0x8a, 0x91, 0x94, 0x8d, 0x14, 0xac, 0xfe, 0xef, 0x8b, 0x90, 0xa7, 0x91, 0x9f, 0x8e, 0x71,
+ 0xb5, 0x52, 0x2a, 0xfd, 0xc1, 0xe2, 0x53, 0x3d, 0xb5, 0xe2, 0x49, 0x83, 0xe4, 0x12, 0x1a, 0xe4,
+ 0xdb, 0x50, 0x08, 0x3c, 0x5f, 0x86, 0xd3, 0xbb, 0xa0, 0x10, 0x75, 0x3d, 0x5f, 0x1a, 0x8a, 0x90,
+ 0x6f, 0x43, 0xe9, 0xc4, 0x76, 0x24, 0x4e, 0x8a, 0x1a, 0xbc, 0xd7, 0x17, 0xe3, 0xb1, 0x4d, 0x44,
+ 0x46, 0x48, 0xcc, 0x77, 0x93, 0xc2, 0x56, 0x24, 0x4e, 0x1b, 0x8b, 0x71, 0x9a, 0x27, 0x83, 0xf7,
+ 0x81, 0xf5, 0xbd, 0x33, 0xe1, 0x1b, 0x89, 0xc0, 0xa4, 0xda, 0xa4, 0x67, 0xe0, 0xbc, 0x0e, 0xe5,
+ 0xa1, 0x6d, 0x09, 0xb4, 0x73, 0x48, 0xc7, 0x94, 0x8d, 0xa8, 0xcc, 0x1f, 0x43, 0x99, 0xfc, 0x03,
+ 0xd4, 0x8a, 0x95, 0x97, 0x1e, 0x7c, 0xe5, 0xaa, 0x84, 0x0c, 0xb0, 0x22, 0xaa, 0x7c, 0xdb, 0x96,
+ 0x14, 0x9f, 0x2e, 0x1b, 0x51, 0x19, 0x1b, 0x4c, 0xf2, 0x9e, 0x6c, 0x70, 0x55, 0x35, 0x78, 0x1a,
+ 0xce, 0xdf, 0x86, 0x1b, 0x04, 0x9b, 0xda, 0x24, 0x71, 0xa9, 0x21, 0xd3, 0xf9, 0x1f, 0xd1, 0x60,
+ 0x19, 0x9b, 0x03, 0xb1, 0x6b, 0x8f, 0x6c, 0x59, 0x5b, 0xb9, 0x9b, 0xb9, 0x57, 0x30, 0x62, 0x00,
+ 0x7f, 0x1d, 0xd6, 0x2d, 0x71, 0x62, 0x4e, 0x1c, 0xd9, 0x13, 0xa3, 0xb1, 0x63, 0x4a, 0xd1, 0xb1,
+ 0x48, 0x46, 0x2b, 0xc6, 0xec, 0x07, 0xfe, 0x06, 0x5c, 0xd3, 0xc0, 0x83, 0xe8, 0x54, 0xa1, 0x63,
+ 0x51, 0xf8, 0xae, 0x62, 0xcc, 0xfb, 0xd4, 0xd8, 0xd3, 0x6a, 0x18, 0x37, 0x50, 0xf4, 0x53, 0x43,
+ 0x05, 0x1a, 0x48, 0xb5, 0x23, 0x3f, 0x32, 0x1d, 0x47, 0xf8, 0x17, 0xca, 0xc9, 0x7d, 0x6c, 0xba,
+ 0xc7, 0xa6, 0xcb, 0x72, 0xb4, 0xc7, 0x9a, 0x8e, 0x70, 0x2d, 0xd3, 0x57, 0x3b, 0xf2, 0x23, 0xda,
+ 0xd0, 0x0b, 0x8d, 0x7b, 0x90, 0xa7, 0x21, 0xad, 0x40, 0x41, 0x79, 0x49, 0xe4, 0x31, 0x6b, 0x0f,
+ 0x89, 0x34, 0xf2, 0x2e, 0x2e, 0x3f, 0x96, 0xad, 0xff, 0xc3, 0x22, 0x94, 0xc3, 0xc1, 0x0b, 0xcf,
+ 0x10, 0x32, 0xf1, 0x19, 0x02, 0x9a, 0x71, 0xc1, 0x53, 0x3b, 0xb0, 0x8f, 0xb5, 0x59, 0x5a, 0x36,
+ 0x62, 0x00, 0x5a, 0x42, 0xcf, 0x6d, 0x4b, 0x0e, 0x69, 0xcd, 0x14, 0x0c, 0x55, 0xe0, 0xf7, 0x60,
+ 0xcd, 0xc2, 0x71, 0x70, 0xfb, 0xce, 0xc4, 0x12, 0x3d, 0xdc, 0x45, 0x55, 0x98, 0x60, 0x1a, 0xcc,
+ 0x3f, 0x06, 0x90, 0xf6, 0x48, 0x6c, 0x7b, 0xfe, 0xc8, 0x94, 0xda, 0x37, 0xf8, 0xfa, 0xcb, 0x49,
+ 0xf5, 0x46, 0x2f, 0x62, 0x60, 0x24, 0x98, 0x21, 0x6b, 0xac, 0x4d, 0xb3, 0x2e, 0x7d, 0x26, 0xd6,
+ 0x5b, 0x11, 0x03, 0x23, 0xc1, 0x8c, 0xf7, 0xa0, 0x74, 0xe2, 0xf9, 0xa3, 0x89, 0x63, 0xea, 0x3d,
+ 0xf7, 0xfd, 0x97, 0xe4, 0xbb, 0xad, 0xa8, 0x49, 0xf7, 0x84, 0xac, 0xe2, 0x18, 0x77, 0x65, 0xc1,
+ 0x18, 0x77, 0xe3, 0x97, 0x01, 0xe2, 0x16, 0xf2, 0x9b, 0xc0, 0xf7, 0x3c, 0x57, 0x0e, 0x9b, 0xc7,
+ 0xc7, 0xfe, 0xa6, 0x38, 0xf1, 0x7c, 0xb1, 0x65, 0xe2, 0xf6, 0x7a, 0x03, 0xd6, 0x23, 0x78, 0xf3,
+ 0x44, 0x0a, 0x1f, 0xc1, 0x24, 0x02, 0xdd, 0xa1, 0xe7, 0x4b, 0x65, 0xe3, 0xd1, 0xcf, 0x27, 0x5d,
+ 0x96, 0xc3, 0x2d, 0xbd, 0xd3, 0x3d, 0x60, 0xf9, 0xc6, 0x3d, 0x80, 0x78, 0x68, 0xc9, 0x17, 0xa2,
+ 0x5f, 0x6f, 0x3e, 0xd4, 0x9e, 0x11, 0x95, 0x1e, 0xbe, 0xcd, 0x32, 0x8d, 0x4f, 0x33, 0x50, 0x4d,
+ 0x74, 0x29, 0xed, 0x33, 0xb7, 0xbc, 0x89, 0x2b, 0x95, 0x93, 0x4e, 0x3f, 0x9f, 0x9a, 0xce, 0x04,
+ 0x37, 0xf7, 0x75, 0x58, 0xa1, 0xf2, 0x96, 0x1d, 0x48, 0xdb, 0xed, 0x4b, 0x96, 0x8b, 0x50, 0x94,
+ 0x61, 0x90, 0x8f, 0x50, 0xf6, 0x3d, 0x0d, 0x2a, 0x70, 0x06, 0xcb, 0x87, 0xc2, 0xef, 0x8b, 0x10,
+ 0x89, 0x8c, 0x61, 0x0d, 0x89, 0xd0, 0x94, 0x31, 0x6c, 0xca, 0x61, 0x77, 0x32, 0x62, 0x65, 0x34,
+ 0x2a, 0xb1, 0xd0, 0x3c, 0x13, 0x3e, 0xda, 0x32, 0x15, 0xac, 0x07, 0x01, 0xb8, 0x1a, 0x4c, 0x97,
+ 0x41, 0x88, 0xbd, 0x67, 0xbb, 0xac, 0x1a, 0x15, 0xcc, 0x73, 0xb6, 0x8c, 0xed, 0x27, 0xd7, 0x81,
+ 0xad, 0xd4, 0xff, 0x6b, 0x0e, 0xf2, 0xa8, 0xd7, 0xd1, 0xd7, 0x4d, 0x2a, 0x21, 0xb5, 0x56, 0x92,
+ 0xa0, 0xcf, 0xb6, 0x1b, 0x21, 0xef, 0xe4, 0x6e, 0xf4, 0x1e, 0x54, 0xfb, 0x93, 0x40, 0x7a, 0x23,
+ 0xda, 0x8a, 0xf5, 0x69, 0xd7, 0xcd, 0x99, 0xa8, 0x11, 0x0d, 0xa7, 0x91, 0x44, 0xe5, 0xef, 0x40,
+ 0xf1, 0x44, 0x49, 0xbd, 0x8a, 0x1b, 0xfd, 0xd2, 0x25, 0xbb, 0xb5, 0x96, 0x6c, 0x8d, 0x8c, 0xfd,
+ 0xb2, 0x67, 0x56, 0x6c, 0x12, 0xa4, 0x77, 0xdd, 0x62, 0xb4, 0xeb, 0xfe, 0x32, 0xac, 0x0a, 0x1c,
+ 0xf0, 0x43, 0xc7, 0xec, 0x8b, 0x91, 0x70, 0xc3, 0x65, 0xf6, 0xf6, 0x4b, 0xf4, 0x98, 0x66, 0x8c,
+ 0xba, 0x3d, 0xc5, 0x0b, 0x35, 0x8f, 0xeb, 0xe1, 0xe6, 0x1f, 0x3a, 0xf6, 0x65, 0x23, 0x06, 0x34,
+ 0xbe, 0xa4, 0xf5, 0x65, 0x09, 0x72, 0xcd, 0xa0, 0xaf, 0x23, 0x20, 0x22, 0xe8, 0x2b, 0xf7, 0xaa,
+ 0x45, 0xc3, 0xc1, 0xb2, 0x8d, 0x37, 0xa1, 0x12, 0xd5, 0x80, 0xc2, 0xb3, 0xef, 0xc9, 0xee, 0x58,
+ 0xf4, 0xed, 0x13, 0x5b, 0x58, 0x4a, 0x3e, 0xbb, 0xd2, 0xf4, 0xa5, 0x0a, 0x22, 0xb6, 0x5d, 0x8b,
+ 0x65, 0xeb, 0xbf, 0x53, 0x86, 0xa2, 0xda, 0x7c, 0x75, 0x87, 0x2b, 0x51, 0x87, 0xbf, 0x03, 0x65,
+ 0x6f, 0x2c, 0x7c, 0x53, 0x7a, 0xbe, 0x8e, 0xdc, 0xbc, 0xf3, 0x32, 0x9b, 0xf9, 0xc6, 0x81, 0x26,
+ 0x36, 0x22, 0x36, 0xd3, 0xd2, 0x94, 0x9d, 0x95, 0xa6, 0xfb, 0xc0, 0xc2, 0x7d, 0xfb, 0xd0, 0x47,
+ 0x3a, 0x79, 0xa1, 0xfd, 0xf0, 0x19, 0x38, 0xef, 0x41, 0xa5, 0xef, 0xb9, 0x96, 0x1d, 0x45, 0x71,
+ 0x56, 0x1f, 0x7e, 0xed, 0xa5, 0x5a, 0xd8, 0x0a, 0xa9, 0x8d, 0x98, 0x11, 0x7f, 0x1d, 0x0a, 0x67,
+ 0x28, 0x66, 0x24, 0x4f, 0x97, 0x0b, 0xa1, 0x42, 0xe2, 0x9f, 0x40, 0xf5, 0xfb, 0x13, 0xbb, 0x7f,
+ 0x7a, 0x90, 0x8c, 0x12, 0xbe, 0xf7, 0x52, 0xad, 0xf8, 0x4e, 0x4c, 0x6f, 0x24, 0x99, 0x25, 0x44,
+ 0xbb, 0xf4, 0x27, 0x10, 0xed, 0xf2, 0xac, 0x68, 0x1b, 0xb0, 0xe2, 0x8a, 0x40, 0x0a, 0x6b, 0x5b,
+ 0xdb, 0x6a, 0xf0, 0x19, 0x6c, 0xb5, 0x34, 0x8b, 0xc6, 0x17, 0xa1, 0x1c, 0x4e, 0x38, 0x2f, 0x42,
+ 0x76, 0x1f, 0x9d, 0xa2, 0x22, 0x64, 0x0f, 0x7c, 0x25, 0x6d, 0x4d, 0x94, 0xb6, 0xc6, 0x1f, 0x65,
+ 0xa0, 0x12, 0x0d, 0x7a, 0x5a, 0x73, 0xb6, 0xbf, 0x3f, 0x31, 0x1d, 0x96, 0x21, 0x77, 0xd9, 0x93,
+ 0xaa, 0x44, 0xca, 0xfa, 0x11, 0x1d, 0xd6, 0xfb, 0x2c, 0x47, 0x26, 0x82, 0x08, 0x02, 0x96, 0xe7,
+ 0x1c, 0x56, 0x35, 0xf8, 0xc0, 0x57, 0xa8, 0x05, 0x54, 0x7c, 0xf8, 0x35, 0x04, 0x14, 0x95, 0x45,
+ 0x71, 0x2a, 0x94, 0x82, 0xdc, 0xf7, 0x24, 0x15, 0xca, 0xd8, 0xa8, 0x8e, 0xcb, 0x2a, 0x58, 0xe7,
+ 0xbe, 0x27, 0x3b, 0xa8, 0x12, 0x23, 0xf7, 0xac, 0x1a, 0x56, 0x4f, 0x25, 0xd2, 0x88, 0x4d, 0xc7,
+ 0xe9, 0xb8, 0x6c, 0x45, 0x7f, 0x50, 0xa5, 0x55, 0xe4, 0xd8, 0x3e, 0x37, 0xfb, 0x48, 0xbe, 0x86,
+ 0x1a, 0x16, 0x69, 0x74, 0x99, 0xe1, 0x92, 0x6c, 0x9f, 0xdb, 0x81, 0x0c, 0xd8, 0x7a, 0xe3, 0xdf,
+ 0x65, 0xa0, 0x9a, 0x98, 0x60, 0x74, 0xff, 0x08, 0x11, 0xb7, 0x32, 0xe5, 0x0d, 0x7e, 0x8c, 0xc3,
+ 0xe8, 0x5b, 0xe1, 0x36, 0xd5, 0xf3, 0xf0, 0x67, 0x16, 0xeb, 0xeb, 0x79, 0x23, 0xcf, 0xf7, 0xbd,
+ 0xe7, 0xca, 0xf4, 0xd9, 0x35, 0x03, 0xf9, 0x4c, 0x88, 0x53, 0x96, 0xc7, 0xae, 0xb6, 0x26, 0xbe,
+ 0x2f, 0x5c, 0x05, 0x28, 0x50, 0xe3, 0xc4, 0xb9, 0x2a, 0x15, 0x91, 0x29, 0x22, 0xd3, 0x3e, 0xc8,
+ 0x4a, 0xa8, 0x08, 0x34, 0xb6, 0x82, 0x94, 0x11, 0x01, 0xd1, 0x55, 0xb1, 0x82, 0x9b, 0x8a, 0x8a,
+ 0x50, 0x1c, 0x9c, 0x6c, 0x99, 0x17, 0x41, 0x73, 0xe0, 0x31, 0x98, 0x06, 0xee, 0x7b, 0xcf, 0x59,
+ 0xb5, 0x3e, 0x01, 0x88, 0x7d, 0x32, 0xf4, 0x45, 0x51, 0x20, 0xa2, 0x33, 0x04, 0x5d, 0xe2, 0x07,
+ 0x00, 0xf8, 0x8b, 0x30, 0x43, 0x87, 0xf4, 0x25, 0x0c, 0x65, 0xa2, 0x33, 0x12, 0x2c, 0xea, 0xbf,
+ 0x0a, 0x95, 0xe8, 0x03, 0xaf, 0x41, 0x89, 0x4c, 0xda, 0xa8, 0xda, 0xb0, 0x88, 0xf6, 0x99, 0xed,
+ 0x5a, 0xe2, 0x9c, 0xf4, 0x4a, 0xc1, 0x50, 0x05, 0x6c, 0xe5, 0xd0, 0xb6, 0x2c, 0xe1, 0x86, 0x27,
+ 0x3d, 0xaa, 0x34, 0xef, 0x3c, 0x3e, 0x3f, 0xf7, 0x3c, 0xbe, 0xfe, 0x2b, 0x50, 0x4d, 0x38, 0x8d,
+ 0x97, 0x76, 0x3b, 0xd1, 0xb0, 0x6c, 0xba, 0x61, 0xb7, 0xa1, 0x12, 0xe6, 0x80, 0x04, 0xb4, 0xb7,
+ 0x55, 0x8c, 0x18, 0x50, 0xff, 0x67, 0x59, 0xb4, 0x64, 0xb1, 0x6b, 0xd3, 0x8e, 0xde, 0x36, 0x14,
+ 0x03, 0x69, 0xca, 0x49, 0x98, 0xcc, 0xb0, 0xe0, 0x02, 0xed, 0x12, 0xcd, 0xce, 0x92, 0xa1, 0xa9,
+ 0xf9, 0x07, 0x90, 0x93, 0xe6, 0x40, 0x07, 0x4a, 0xbf, 0xbc, 0x18, 0x93, 0x9e, 0x39, 0xd8, 0x59,
+ 0x32, 0x90, 0x8e, 0xef, 0x42, 0xb9, 0xaf, 0x63, 0x5b, 0x5a, 0x29, 0x2e, 0xe8, 0x8b, 0x85, 0x11,
+ 0xb1, 0x9d, 0x25, 0x23, 0xe2, 0xc0, 0xbf, 0x0d, 0x79, 0xb4, 0x2e, 0x75, 0xce, 0xc7, 0x82, 0x3e,
+ 0x26, 0x2e, 0x97, 0x9d, 0x25, 0x83, 0x28, 0x37, 0x4b, 0x50, 0x20, 0x1d, 0x5c, 0xaf, 0x41, 0x51,
+ 0xf5, 0x75, 0x7a, 0xe4, 0xea, 0xb7, 0x20, 0xd7, 0x33, 0x07, 0x68, 0xe1, 0xdb, 0x56, 0xa0, 0x43,
+ 0x25, 0xf8, 0xb3, 0xfe, 0x4a, 0x1c, 0xa7, 0x4b, 0x86, 0x80, 0x33, 0xa9, 0x10, 0x70, 0xbd, 0x08,
+ 0x79, 0xac, 0xb1, 0x7e, 0xfb, 0x2a, 0x6f, 0xa1, 0xfe, 0x8f, 0x73, 0xe8, 0x58, 0x48, 0x71, 0x3e,
+ 0x37, 0xbc, 0xfd, 0x11, 0x54, 0xc6, 0xbe, 0xd7, 0x17, 0x41, 0xe0, 0xf9, 0xda, 0x38, 0x7a, 0xfd,
+ 0xc5, 0x47, 0xcf, 0x1b, 0x87, 0x21, 0x8d, 0x11, 0x93, 0x37, 0xfe, 0x20, 0x0b, 0x95, 0xe8, 0x83,
+ 0xf2, 0x67, 0xa4, 0x38, 0x57, 0xa1, 0xcc, 0x3d, 0xe1, 0x8f, 0x4c, 0xdb, 0x52, 0xda, 0xa3, 0x35,
+ 0x34, 0x43, 0x23, 0xf7, 0x63, 0x6f, 0x22, 0x27, 0xc7, 0x42, 0x85, 0xb0, 0x9e, 0xda, 0x23, 0xe1,
+ 0xb1, 0x3c, 0x1d, 0x1e, 0xa1, 0x60, 0xf7, 0x1d, 0x6f, 0x62, 0xb1, 0x02, 0x96, 0x1f, 0xd1, 0xf6,
+ 0xb6, 0x67, 0x8e, 0x03, 0xa5, 0x33, 0xf7, 0x6c, 0xdf, 0x63, 0x25, 0x24, 0xda, 0xb6, 0x07, 0x23,
+ 0x93, 0x95, 0x91, 0x59, 0xef, 0xb9, 0x2d, 0x51, 0x09, 0x57, 0xd0, 0x4c, 0x3d, 0x18, 0x0b, 0xb7,
+ 0x2b, 0x7d, 0x21, 0xe4, 0x9e, 0x39, 0x56, 0x31, 0x4d, 0x43, 0x58, 0x96, 0x2d, 0x95, 0xfe, 0xdc,
+ 0x36, 0xfb, 0xe2, 0xd8, 0xf3, 0x4e, 0xd9, 0x32, 0x2a, 0x9a, 0x8e, 0x1b, 0x48, 0x73, 0xe0, 0x9b,
+ 0x23, 0xa5, 0x43, 0x7b, 0xc2, 0x11, 0x54, 0x5a, 0xa5, 0xba, 0x6d, 0x39, 0x9c, 0x1c, 0x3f, 0x42,
+ 0xbf, 0x6f, 0x4d, 0x9d, 0x33, 0x59, 0x62, 0x2c, 0x50, 0x87, 0x2e, 0x43, 0x79, 0xd3, 0x76, 0xec,
+ 0x63, 0xdb, 0xb1, 0xd9, 0x3a, 0xa2, 0xb6, 0xcf, 0xfb, 0xa6, 0x63, 0x5b, 0xbe, 0xf9, 0x9c, 0x71,
+ 0x6c, 0xdc, 0x63, 0xdf, 0x3b, 0xb5, 0xd9, 0x35, 0x44, 0x24, 0x37, 0xf0, 0xcc, 0xfe, 0x01, 0xbb,
+ 0x4e, 0x67, 0x65, 0xa7, 0x42, 0xf6, 0x87, 0x27, 0xe6, 0x31, 0xbb, 0x11, 0x87, 0xf4, 0x6e, 0xd6,
+ 0xd7, 0x61, 0x6d, 0xea, 0x54, 0xbe, 0x5e, 0xd2, 0xde, 0x67, 0x7d, 0x05, 0xaa, 0x89, 0xe3, 0xd2,
+ 0xfa, 0xab, 0x50, 0x0e, 0x0f, 0x53, 0xd1, 0x4b, 0xb7, 0x03, 0x15, 0x06, 0xd6, 0x42, 0x12, 0x95,
+ 0xeb, 0xbf, 0x9f, 0x81, 0xa2, 0x3a, 0xc9, 0xe6, 0x9b, 0x51, 0xe6, 0x49, 0x66, 0x81, 0xd3, 0x4b,
+ 0x45, 0xa4, 0xcf, 0x7e, 0xa3, 0xf4, 0x93, 0xeb, 0x50, 0x70, 0xc8, 0x1d, 0xd7, 0xea, 0x8b, 0x0a,
+ 0x09, 0x6d, 0x93, 0x4b, 0x6a, 0x9b, 0x46, 0x33, 0x3a, 0x6f, 0x0e, 0x43, 0x8f, 0x64, 0x15, 0xf6,
+ 0x7c, 0x21, 0x54, 0x58, 0x91, 0xbc, 0xe9, 0x2c, 0xed, 0x15, 0xde, 0x68, 0x6c, 0xf6, 0x25, 0x01,
+ 0x68, 0x17, 0x45, 0x65, 0xca, 0xf2, 0x28, 0xe5, 0xad, 0xa1, 0x29, 0x1b, 0x27, 0x50, 0x3e, 0xf4,
+ 0x82, 0xe9, 0x3d, 0xb9, 0x04, 0xb9, 0x9e, 0x37, 0x56, 0x16, 0xe6, 0xa6, 0x27, 0xc9, 0xc2, 0x54,
+ 0x5b, 0xf0, 0x89, 0x54, 0x42, 0x65, 0xd8, 0x83, 0xa1, 0x54, 0x9e, 0x78, 0xc7, 0x75, 0x85, 0xcf,
+ 0x0a, 0x38, 0x87, 0x86, 0x18, 0xa3, 0x55, 0xcb, 0x8a, 0x38, 0x6b, 0x04, 0xdf, 0xb6, 0xfd, 0x40,
+ 0xb2, 0x52, 0xa3, 0x83, 0xbb, 0xa9, 0x3d, 0xa0, 0x4d, 0x90, 0x7e, 0x10, 0xab, 0x25, 0x6c, 0x22,
+ 0x15, 0x5b, 0xc2, 0x45, 0x19, 0x23, 0xef, 0x49, 0xb9, 0x7e, 0x54, 0x41, 0x16, 0x77, 0x30, 0x2a,
+ 0x7f, 0x34, 0x09, 0xa4, 0x7d, 0x72, 0xc1, 0x72, 0x8d, 0x67, 0xb0, 0x92, 0x4a, 0x63, 0xe2, 0xd7,
+ 0x81, 0xa5, 0x00, 0xd8, 0xf4, 0x25, 0x7e, 0x0b, 0xae, 0xa5, 0xa0, 0x7b, 0xb6, 0x65, 0x51, 0xac,
+ 0x77, 0xfa, 0x43, 0xd8, 0xc1, 0xcd, 0x0a, 0x94, 0xfa, 0x6a, 0x96, 0x1a, 0x87, 0xb0, 0x42, 0xd3,
+ 0xb6, 0x27, 0xa4, 0x79, 0xe0, 0x3a, 0x17, 0x7f, 0xe2, 0x5c, 0xb3, 0xc6, 0x57, 0xb4, 0x83, 0x85,
+ 0xfa, 0xe2, 0xc4, 0xf7, 0x46, 0xc4, 0xab, 0x60, 0xd0, 0x6f, 0xe4, 0x2e, 0x3d, 0x3d, 0xf7, 0x59,
+ 0xe9, 0x35, 0x7e, 0x51, 0x81, 0x52, 0xb3, 0xdf, 0x47, 0x97, 0x70, 0xa6, 0xe6, 0x77, 0xa0, 0xd8,
+ 0xf7, 0xdc, 0x13, 0x7b, 0xa0, 0xf5, 0xf1, 0xb4, 0x65, 0xa8, 0xe9, 0x50, 0xe0, 0x4e, 0xec, 0x81,
+ 0xa1, 0x91, 0x91, 0x4c, 0xef, 0x27, 0x85, 0x2b, 0xc9, 0x94, 0x52, 0x8d, 0xb6, 0x8f, 0x07, 0x90,
+ 0xb7, 0xdd, 0x13, 0x4f, 0x27, 0x86, 0x7e, 0xfe, 0x12, 0x22, 0xca, 0x8e, 0x24, 0xc4, 0xfa, 0x7f,
+ 0xce, 0x40, 0x51, 0x55, 0xcd, 0x5f, 0x85, 0x55, 0xe1, 0xe2, 0x62, 0x0a, 0x55, 0xb9, 0x5e, 0x45,
+ 0x53, 0x50, 0x34, 0x5a, 0x35, 0x44, 0x1c, 0x4f, 0x06, 0x3a, 0xf6, 0x92, 0x04, 0xf1, 0xf7, 0xe0,
+ 0x96, 0x2a, 0x1e, 0xfa, 0xc2, 0x17, 0x8e, 0x30, 0x03, 0xd1, 0x1a, 0x9a, 0xae, 0x2b, 0x1c, 0xbd,
+ 0xb1, 0x5f, 0xf6, 0x99, 0x37, 0x60, 0x59, 0x7d, 0xea, 0x8e, 0xcd, 0xbe, 0x08, 0xf4, 0x79, 0x5f,
+ 0x0a, 0xc6, 0xbf, 0x0a, 0x05, 0xca, 0x9b, 0xad, 0x59, 0x57, 0x4f, 0xa5, 0xc2, 0xaa, 0x7b, 0xd1,
+ 0xce, 0xd3, 0x04, 0x50, 0xc3, 0x84, 0x4e, 0x97, 0x5e, 0xfd, 0x5f, 0xb8, 0x72, 0x5c, 0xc9, 0xff,
+ 0x4b, 0x10, 0x61, 0xfb, 0x2c, 0xe1, 0x08, 0x4a, 0x70, 0xc4, 0x9d, 0x31, 0x4b, 0x27, 0x2b, 0x29,
+ 0x58, 0xfd, 0x3f, 0xe5, 0x21, 0x8f, 0x23, 0x8c, 0xc8, 0x43, 0x6f, 0x24, 0xa2, 0xf8, 0xb2, 0x32,
+ 0x35, 0x52, 0x30, 0x34, 0x6d, 0x4c, 0x75, 0xc4, 0x1f, 0xa1, 0x29, 0xe5, 0x31, 0x0d, 0x46, 0xcc,
+ 0xb1, 0xef, 0x9d, 0xd8, 0x4e, 0x8c, 0xa9, 0x8d, 0xa0, 0x29, 0x30, 0xff, 0x1a, 0xdc, 0x1c, 0x99,
+ 0xfe, 0xa9, 0x90, 0xb4, 0xba, 0x9f, 0x79, 0xfe, 0x69, 0x80, 0x23, 0xd7, 0xb1, 0x74, 0x60, 0xf2,
+ 0x92, 0xaf, 0xfc, 0x75, 0x58, 0x7f, 0x1e, 0x16, 0xa3, 0x3a, 0x54, 0x68, 0x70, 0xf6, 0x03, 0xaa,
+ 0x5b, 0x4b, 0x9c, 0xd9, 0xc4, 0xb7, 0xac, 0xb2, 0x67, 0xc3, 0x32, 0x8a, 0x92, 0xa9, 0x06, 0xb2,
+ 0xab, 0x6b, 0xd6, 0x27, 0x4c, 0x69, 0x28, 0x5a, 0x5b, 0x2a, 0xab, 0x28, 0xe8, 0x58, 0x14, 0x59,
+ 0xad, 0x18, 0x31, 0x00, 0x05, 0x8d, 0xaa, 0x7c, 0xaa, 0x94, 0xea, 0x8a, 0x72, 0x41, 0x13, 0x20,
+ 0xc4, 0x90, 0xa2, 0x3f, 0x0c, 0x2b, 0x51, 0x61, 0xcf, 0x24, 0x88, 0xdf, 0x01, 0x18, 0x98, 0x52,
+ 0x3c, 0x37, 0x2f, 0x9e, 0xf8, 0x4e, 0x4d, 0xa8, 0xa3, 0x92, 0x18, 0x82, 0x4e, 0xac, 0xe3, 0xf5,
+ 0x4d, 0xa7, 0x2b, 0x3d, 0xdf, 0x1c, 0x88, 0x43, 0x53, 0x0e, 0x6b, 0x03, 0xe5, 0xc4, 0x4e, 0xc3,
+ 0xb1, 0xc7, 0xd2, 0x1e, 0x89, 0x4f, 0x3c, 0x57, 0xd4, 0x86, 0xaa, 0xc7, 0x61, 0x19, 0x5b, 0x62,
+ 0xba, 0xa6, 0x73, 0x21, 0xed, 0x3e, 0xf6, 0xc5, 0x56, 0x2d, 0x49, 0x80, 0x28, 0x6c, 0x20, 0x24,
+ 0x8e, 0x63, 0xc7, 0xaa, 0x7d, 0x4f, 0xf5, 0x35, 0x02, 0xe0, 0xec, 0x0a, 0x39, 0x14, 0xbe, 0x98,
+ 0x8c, 0x9a, 0x96, 0xe5, 0x8b, 0x20, 0xa8, 0x9d, 0xaa, 0xd9, 0x9d, 0x02, 0xd7, 0xbf, 0x41, 0x07,
+ 0x59, 0xc3, 0xc6, 0x5b, 0xb0, 0xb2, 0x8b, 0x2d, 0x6c, 0x8e, 0xed, 0x6e, 0xdf, 0x1b, 0x0b, 0x54,
+ 0xe8, 0x14, 0x12, 0xa6, 0x00, 0x42, 0x15, 0x4a, 0x1f, 0x05, 0x9e, 0xdb, 0x3c, 0xec, 0xa8, 0x2d,
+ 0x66, 0x7b, 0xe2, 0x38, 0x2c, 0xdb, 0x38, 0x00, 0x88, 0x25, 0x1b, 0xb7, 0x8b, 0x26, 0x9d, 0x1a,
+ 0xb1, 0x25, 0x15, 0xae, 0x72, 0x2d, 0xdb, 0x1d, 0x6c, 0x69, 0x61, 0x66, 0x19, 0x04, 0x52, 0x18,
+ 0x42, 0x58, 0x11, 0x90, 0x0c, 0x16, 0x2a, 0x09, 0x8b, 0xe5, 0x1a, 0xff, 0x27, 0x03, 0xd5, 0x44,
+ 0x92, 0xc4, 0x9f, 0x62, 0x62, 0x07, 0x6e, 0xe7, 0x68, 0x10, 0xe0, 0xbc, 0x29, 0x41, 0x8f, 0xca,
+ 0x38, 0xab, 0x3a, 0x87, 0x03, 0xbf, 0xaa, 0xa0, 0x43, 0x02, 0xf2, 0x99, 0x92, 0x3a, 0x1a, 0x0f,
+ 0x75, 0xe4, 0xa6, 0x0a, 0xa5, 0x27, 0xee, 0xa9, 0xeb, 0x3d, 0x77, 0xd5, 0x3e, 0x4d, 0x99, 0x3a,
+ 0xa9, 0x33, 0xc7, 0x30, 0x99, 0x26, 0xd7, 0xf8, 0x97, 0xf9, 0xa9, 0xa4, 0xb6, 0x36, 0x14, 0x95,
+ 0xbb, 0x40, 0x96, 0xec, 0x6c, 0x16, 0x52, 0x12, 0x59, 0x9f, 0x6f, 0x25, 0x40, 0x86, 0x26, 0x46,
+ 0x3b, 0x3e, 0x4a, 0xf9, 0xcc, 0xce, 0x3d, 0x87, 0x4b, 0x31, 0x0a, 0x75, 0x73, 0x2a, 0xeb, 0x39,
+ 0xe2, 0x50, 0xff, 0xeb, 0x19, 0xb8, 0x3e, 0x0f, 0x25, 0x99, 0x1b, 0x9e, 0x49, 0xe7, 0x86, 0x77,
+ 0xa7, 0x72, 0xad, 0xb3, 0xd4, 0x9b, 0x07, 0x2f, 0xd9, 0x88, 0x74, 0xe6, 0x75, 0xe3, 0xf7, 0x32,
+ 0xb0, 0x3e, 0xd3, 0xe7, 0x84, 0x1d, 0x03, 0x50, 0x54, 0x92, 0xa5, 0x52, 0xa1, 0xa2, 0xe4, 0x14,
+ 0x75, 0xb8, 0x40, 0x3b, 0x7c, 0xa0, 0x4e, 0xfb, 0x75, 0x76, 0xb9, 0x32, 0x93, 0x71, 0xd6, 0x70,
+ 0x03, 0x19, 0x08, 0x15, 0x88, 0x55, 0xc6, 0x96, 0x86, 0x14, 0x95, 0x29, 0xab, 0x4e, 0x40, 0x58,
+ 0x89, 0x52, 0xac, 0x26, 0x63, 0xc7, 0xee, 0x63, 0xb1, 0xcc, 0xeb, 0x70, 0x53, 0x5d, 0x31, 0xd0,
+ 0x6e, 0xe3, 0x49, 0x6f, 0x68, 0xd3, 0xe2, 0x60, 0x15, 0xac, 0xe7, 0x70, 0x72, 0xec, 0xd8, 0xc1,
+ 0x90, 0x41, 0xc3, 0x80, 0x6b, 0x73, 0x3a, 0x48, 0x4d, 0x7e, 0xaa, 0x9b, 0xbf, 0x0a, 0xb0, 0xf5,
+ 0x34, 0x6c, 0x34, 0xcb, 0x70, 0x0e, 0xab, 0x5b, 0x4f, 0x93, 0xdc, 0xf5, 0xe2, 0x79, 0x8a, 0xda,
+ 0x2b, 0x60, 0xb9, 0xc6, 0xaf, 0x65, 0xc2, 0x1c, 0x88, 0xfa, 0x5f, 0x84, 0x15, 0xd5, 0xe0, 0x43,
+ 0xf3, 0xc2, 0xf1, 0x4c, 0x8b, 0xb7, 0x61, 0x35, 0x88, 0x2e, 0xc1, 0x24, 0x36, 0xac, 0x69, 0x43,
+ 0xa0, 0x9b, 0x42, 0x32, 0xa6, 0x88, 0x42, 0x57, 0x28, 0x1b, 0x1f, 0x9c, 0x70, 0x72, 0xea, 0x4c,
+ 0x5a, 0x72, 0xcb, 0xe4, 0xa6, 0x99, 0x8d, 0xaf, 0xc2, 0x7a, 0x37, 0x56, 0xee, 0xca, 0x66, 0x46,
+ 0xe1, 0x50, 0x3b, 0xc3, 0x56, 0x28, 0x1c, 0xba, 0xd8, 0xf8, 0x27, 0x25, 0x80, 0xf8, 0x90, 0x68,
+ 0xce, 0x9a, 0x9f, 0x97, 0xf3, 0x30, 0x73, 0x64, 0x9b, 0x7b, 0xe9, 0x23, 0xdb, 0xf7, 0x22, 0xd3,
+ 0x5d, 0x05, 0x90, 0xa7, 0x13, 0xbf, 0xe3, 0x36, 0x4d, 0x1b, 0xec, 0xa9, 0x94, 0xa0, 0xc2, 0x74,
+ 0x4a, 0xd0, 0xdd, 0xd9, 0xfc, 0xc1, 0x29, 0x65, 0x14, 0x47, 0x26, 0x4a, 0xa9, 0xc8, 0x44, 0x1d,
+ 0xca, 0xbe, 0x30, 0x2d, 0xcf, 0x75, 0x2e, 0xc2, 0x93, 0xc1, 0xb0, 0xcc, 0xdf, 0x82, 0x82, 0xa4,
+ 0x7b, 0x3c, 0x65, 0x5a, 0x3b, 0x2f, 0x98, 0x38, 0x85, 0x8b, 0x9a, 0xcd, 0x0e, 0x74, 0xd2, 0x9f,
+ 0xda, 0x35, 0xcb, 0x46, 0x02, 0xc2, 0x37, 0x80, 0xdb, 0xe8, 0xa6, 0x39, 0x8e, 0xb0, 0x36, 0x2f,
+ 0xb6, 0xd4, 0x81, 0x1d, 0xed, 0xeb, 0x65, 0x63, 0xce, 0x97, 0x70, 0xfe, 0x97, 0xe3, 0xf9, 0xa7,
+ 0x26, 0x9f, 0xd9, 0x01, 0xf6, 0x74, 0x85, 0xcc, 0x97, 0xa8, 0x8c, 0x96, 0x43, 0xb8, 0x60, 0xd5,
+ 0x58, 0x92, 0xf4, 0xc6, 0xa7, 0xde, 0x97, 0x7c, 0x0d, 0x87, 0x57, 0x85, 0x66, 0xd6, 0x88, 0x69,
+ 0x0c, 0x20, 0x4d, 0xde, 0xf7, 0xdc, 0x7d, 0x94, 0x08, 0xa6, 0x35, 0xb9, 0x2e, 0x63, 0x7f, 0xc7,
+ 0xce, 0xc4, 0x37, 0x1d, 0xfa, 0xba, 0xae, 0x34, 0x79, 0x0c, 0x69, 0xfc, 0xeb, 0x6c, 0xe4, 0x3c,
+ 0x55, 0xa0, 0x70, 0x6c, 0x06, 0x76, 0x5f, 0xed, 0x6e, 0xda, 0xe8, 0x51, 0xbb, 0x9b, 0xf4, 0x2c,
+ 0x8f, 0x65, 0xd1, 0x0f, 0x0a, 0x84, 0x3e, 0xb0, 0x89, 0x6f, 0x4d, 0xb1, 0x3c, 0xaa, 0x80, 0x50,
+ 0x92, 0x54, 0x56, 0x10, 0x91, 0x52, 0xf8, 0xcd, 0x8a, 0xf2, 0x2d, 0xc9, 0x91, 0xa6, 0x2d, 0x86,
+ 0x95, 0x11, 0xc7, 0xf5, 0xa4, 0x50, 0xc1, 0x47, 0x92, 0x7b, 0x06, 0xc8, 0x26, 0xbc, 0x06, 0xc0,
+ 0xaa, 0xe8, 0x98, 0x84, 0x4c, 0x55, 0xc4, 0x30, 0x20, 0xb7, 0x6d, 0x19, 0xd7, 0x7d, 0xfa, 0x03,
+ 0x5b, 0xc1, 0x16, 0xc5, 0x97, 0xb1, 0xd8, 0x2a, 0x72, 0x35, 0x29, 0x57, 0x65, 0x0d, 0x7f, 0x9e,
+ 0x51, 0x06, 0x0b, 0xc3, 0x5a, 0x2d, 0xd4, 0x4b, 0xeb, 0xd8, 0xb2, 0xc8, 0xd0, 0x61, 0x1c, 0xfd,
+ 0xae, 0xb1, 0x89, 0x4e, 0x90, 0x3d, 0x36, 0x5d, 0xc9, 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb,
+ 0x8e, 0x24, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xc4, 0xc1, 0x5f, 0x5b, 0xc2, 0x47, 0x49, 0x61, 0x37,
+ 0x11, 0x47, 0x9a, 0x03, 0x76, 0xab, 0xf1, 0x9b, 0x71, 0xc6, 0xf3, 0x1b, 0x91, 0x7b, 0xb2, 0xc8,
+ 0xf2, 0x41, 0x07, 0x66, 0xde, 0x5a, 0x6e, 0xc3, 0xba, 0x2f, 0xbe, 0x3f, 0xb1, 0x53, 0xf7, 0x00,
+ 0x72, 0x57, 0x27, 0x9a, 0xcc, 0x52, 0x34, 0xce, 0x60, 0x3d, 0x2c, 0x3c, 0xb3, 0xe5, 0x90, 0x22,
+ 0x45, 0xfc, 0xad, 0xc4, 0x45, 0x85, 0xcc, 0xdc, 0x0b, 0x5e, 0x11, 0xcb, 0xf8, 0x62, 0x42, 0x74,
+ 0x12, 0x90, 0x5d, 0xe0, 0x24, 0xa0, 0xf1, 0xbf, 0x93, 0x47, 0xcb, 0xca, 0x61, 0xb3, 0x22, 0x87,
+ 0x6d, 0xf6, 0xa8, 0x39, 0x0e, 0xee, 0x67, 0x5f, 0x26, 0xb8, 0x3f, 0x2f, 0x6d, 0xe3, 0x7d, 0xf4,
+ 0x1f, 0x68, 0x65, 0x3e, 0x5d, 0xe0, 0xe0, 0x22, 0x85, 0xcb, 0x37, 0xe9, 0xe0, 0xd8, 0xec, 0xaa,
+ 0x9c, 0xa2, 0xc2, 0xdc, 0x6b, 0x43, 0xc9, 0x13, 0x62, 0x8d, 0x69, 0x24, 0xa8, 0x12, 0x7a, 0xac,
+ 0x38, 0x4f, 0x8f, 0xa1, 0xef, 0xac, 0x35, 0x5c, 0x54, 0x56, 0xe7, 0x3c, 0xea, 0x77, 0xc8, 0x9e,
+ 0xd6, 0x78, 0xd9, 0x98, 0x81, 0xa3, 0xb1, 0x37, 0x9a, 0x38, 0xd2, 0xd6, 0x47, 0x19, 0xaa, 0x30,
+ 0x7d, 0xaf, 0xb1, 0x32, 0x7b, 0xaf, 0xf1, 0x43, 0x80, 0x40, 0xe0, 0xea, 0xd8, 0xb2, 0xfb, 0x52,
+ 0x67, 0x1e, 0xdd, 0xb9, 0xac, 0x6f, 0xfa, 0x00, 0x26, 0x41, 0x81, 0xed, 0x1f, 0x99, 0xe7, 0x74,
+ 0x28, 0xab, 0x53, 0x24, 0xa2, 0xf2, 0xb4, 0x76, 0x5f, 0x9d, 0xd5, 0xee, 0x6f, 0x41, 0x21, 0x40,
+ 0x13, 0x9a, 0xae, 0xe6, 0x5c, 0x3e, 0xbf, 0x1b, 0x64, 0x67, 0x1b, 0x0a, 0x97, 0x42, 0x92, 0xa8,
+ 0xff, 0x3c, 0x9f, 0x2e, 0xe5, 0x54, 0x8c, 0xb0, 0x98, 0xd2, 0xb0, 0x37, 0xd3, 0x1a, 0xb6, 0x6e,
+ 0x41, 0x51, 0x1f, 0x2f, 0x4c, 0x07, 0x0a, 0xc2, 0xc0, 0x64, 0x36, 0x11, 0x98, 0x8c, 0xf2, 0x5b,
+ 0x73, 0xc9, 0xfc, 0xd6, 0xa9, 0x7b, 0x7b, 0x85, 0x99, 0x7b, 0x7b, 0x8d, 0x4f, 0xa0, 0xa0, 0x7c,
+ 0x02, 0x08, 0xcd, 0x51, 0x65, 0xca, 0x62, 0xa7, 0x58, 0x86, 0x5f, 0x07, 0x16, 0x08, 0xb2, 0x75,
+ 0x44, 0xd7, 0x1c, 0x09, 0x52, 0x92, 0x59, 0x5e, 0x83, 0xeb, 0x0a, 0x37, 0x48, 0x7f, 0x21, 0x83,
+ 0xcb, 0xb1, 0x8f, 0x7d, 0xd3, 0xbf, 0x60, 0xf9, 0xc6, 0x87, 0x74, 0xb8, 0x1f, 0x0a, 0x54, 0x35,
+ 0xba, 0x27, 0xa9, 0xd4, 0xb2, 0xa5, 0xb5, 0x0f, 0xe5, 0x86, 0x68, 0x6f, 0x4f, 0x65, 0xcc, 0x91,
+ 0x3b, 0x45, 0xf1, 0xa0, 0xe5, 0xe4, 0x1e, 0xff, 0xa7, 0xb6, 0xde, 0x1a, 0x9b, 0x09, 0x8b, 0x31,
+ 0x9d, 0x02, 0x97, 0x59, 0x34, 0x05, 0xae, 0xf1, 0x18, 0xd6, 0x8c, 0xb4, 0x4e, 0xe7, 0xef, 0x41,
+ 0xc9, 0x1b, 0x27, 0xf9, 0xbc, 0x48, 0x2e, 0x43, 0xf4, 0xc6, 0x4f, 0x33, 0xb0, 0xdc, 0x71, 0xa5,
+ 0xf0, 0x5d, 0xd3, 0xd9, 0x76, 0xcc, 0x01, 0x7f, 0x37, 0xd4, 0x52, 0xf3, 0x63, 0x0f, 0x49, 0xdc,
+ 0xb4, 0xc2, 0x72, 0x74, 0x18, 0x9d, 0xdf, 0x80, 0x75, 0x61, 0xd9, 0xd2, 0xf3, 0x95, 0x9d, 0x1c,
+ 0x66, 0x2a, 0x5e, 0x07, 0xa6, 0xc0, 0x5d, 0x5a, 0x12, 0x3d, 0x35, 0xcd, 0x35, 0xb8, 0x9e, 0x82,
+ 0x86, 0x46, 0x70, 0x96, 0xdf, 0x86, 0x5a, 0xbc, 0x1b, 0x6d, 0x79, 0xae, 0xec, 0xb8, 0x96, 0x38,
+ 0x27, 0x23, 0x8b, 0xe5, 0x1a, 0xbf, 0x11, 0x99, 0x77, 0x4f, 0x75, 0x1e, 0xa3, 0xef, 0x79, 0xf1,
+ 0x25, 0x59, 0x5d, 0x4a, 0x5c, 0xc6, 0xce, 0x2e, 0x70, 0x19, 0xfb, 0xc3, 0xf8, 0x42, 0xad, 0xda,
+ 0x28, 0x5e, 0x99, 0xbb, 0xfb, 0x50, 0xfa, 0x95, 0xb6, 0xee, 0xbb, 0x22, 0x71, 0xbb, 0xf6, 0x4d,
+ 0xed, 0xd2, 0xe5, 0x17, 0xb1, 0x82, 0x55, 0xa6, 0xc2, 0x3b, 0xd3, 0xb7, 0x38, 0x16, 0x4b, 0x83,
+ 0x9c, 0x31, 0x54, 0xe1, 0xa5, 0x0d, 0xd5, 0x6f, 0x4d, 0x79, 0x4f, 0xe5, 0xb9, 0xe1, 0xb8, 0x2b,
+ 0xee, 0xa8, 0x7e, 0x0b, 0x4a, 0x43, 0x3b, 0x90, 0x9e, 0xaf, 0xee, 0x4d, 0xcf, 0xde, 0xf3, 0x4a,
+ 0x8c, 0xd6, 0x8e, 0x42, 0xa4, 0x9c, 0xb5, 0x90, 0x8a, 0x7f, 0x17, 0xd6, 0x69, 0xe0, 0x0f, 0x63,
+ 0xab, 0x21, 0xa8, 0x55, 0xe7, 0xe6, 0x0a, 0x26, 0x58, 0x6d, 0x4e, 0x91, 0x18, 0xb3, 0x4c, 0xea,
+ 0x03, 0x80, 0x78, 0x7e, 0x66, 0xb4, 0xd8, 0x67, 0xb8, 0x37, 0x7d, 0x13, 0x8a, 0xc1, 0xe4, 0x38,
+ 0x3e, 0x6f, 0xd3, 0xa5, 0xfa, 0x39, 0xd4, 0x67, 0xac, 0x83, 0x43, 0xe1, 0xab, 0xe6, 0x5e, 0x79,
+ 0x79, 0xfb, 0xc3, 0xe4, 0xc4, 0x2b, 0xe1, 0xbc, 0x7b, 0xc9, 0xec, 0x45, 0x9c, 0x13, 0x12, 0x50,
+ 0x7f, 0x07, 0xaa, 0x89, 0x41, 0x45, 0xcd, 0x3c, 0x71, 0x2d, 0x2f, 0x0c, 0x01, 0xe3, 0x6f, 0x75,
+ 0x79, 0xcd, 0x0a, 0x83, 0xc0, 0xf4, 0xbb, 0x6e, 0x00, 0x9b, 0x1e, 0xc0, 0x2b, 0x3c, 0xec, 0x57,
+ 0x60, 0x25, 0x61, 0xd2, 0x45, 0xe1, 0xc1, 0x34, 0xb0, 0x71, 0x06, 0x9f, 0x4f, 0xb0, 0x3b, 0x14,
+ 0xfe, 0xc8, 0x0e, 0x70, 0x23, 0x51, 0xce, 0x22, 0x99, 0xd6, 0x96, 0x70, 0xa5, 0x2d, 0x43, 0x0d,
+ 0x1a, 0x95, 0xf9, 0x37, 0xa0, 0x30, 0x16, 0xfe, 0x28, 0xd0, 0x5a, 0x74, 0x5a, 0x82, 0xe6, 0xb2,
+ 0x0d, 0x0c, 0x45, 0xd3, 0xf8, 0x47, 0x19, 0x28, 0xef, 0x09, 0x69, 0xa2, 0xed, 0xc0, 0xf7, 0xa6,
+ 0x6a, 0x99, 0x3d, 0x23, 0x0e, 0x51, 0x37, 0xb4, 0xfb, 0xba, 0xd1, 0xd1, 0xf8, 0xba, 0xbc, 0xb3,
+ 0x14, 0x37, 0xac, 0xbe, 0x09, 0x25, 0x0d, 0xae, 0xbf, 0x0b, 0x6b, 0x53, 0x98, 0x34, 0x2e, 0xca,
+ 0xb6, 0xef, 0x5e, 0x8c, 0xc2, 0x44, 0xa6, 0x65, 0x23, 0x0d, 0xdc, 0xac, 0x40, 0x69, 0xac, 0x08,
+ 0x1a, 0x7f, 0x70, 0x8b, 0xd2, 0x67, 0xec, 0x13, 0xf4, 0xe9, 0xe7, 0xed, 0xac, 0x77, 0x00, 0x68,
+ 0x6b, 0x56, 0x49, 0x16, 0x2a, 0x64, 0x9b, 0x80, 0xf0, 0xf7, 0xa3, 0x58, 0x7b, 0x7e, 0xae, 0x51,
+ 0x95, 0x64, 0x3e, 0x1d, 0x70, 0xaf, 0x41, 0xc9, 0x0e, 0x28, 0x0e, 0xa7, 0x13, 0x93, 0xc2, 0xa2,
+ 0xfa, 0xd2, 0xf3, 0xcc, 0x40, 0xea, 0xa0, 0x77, 0x58, 0xe4, 0xdf, 0x84, 0xa2, 0x3d, 0x1a, 0x7b,
+ 0xbe, 0xd4, 0x61, 0xfa, 0x2b, 0xeb, 0xeb, 0x10, 0xe6, 0xce, 0x92, 0xa1, 0x69, 0x90, 0x5a, 0x9c,
+ 0x13, 0x75, 0xf9, 0xc5, 0xd4, 0xed, 0xf3, 0x90, 0x5a, 0xd1, 0xf0, 0xef, 0xc0, 0xca, 0x40, 0x65,
+ 0x6c, 0x2a, 0xc6, 0x5a, 0xbd, 0x7c, 0xf9, 0x2a, 0x26, 0x8f, 0x92, 0x04, 0x3b, 0x4b, 0x46, 0x9a,
+ 0x03, 0xb2, 0x44, 0xd3, 0x5e, 0x04, 0xb2, 0xe7, 0x7d, 0xe4, 0xd9, 0x2e, 0x39, 0xc2, 0x2f, 0x60,
+ 0x69, 0x24, 0x09, 0x90, 0x65, 0x8a, 0x03, 0xff, 0x1a, 0xda, 0x42, 0x81, 0xd4, 0x97, 0xda, 0xef,
+ 0x5e, 0xc5, 0xa9, 0x27, 0x02, 0x7d, 0x1d, 0x3d, 0x90, 0xfc, 0x1c, 0xea, 0x89, 0xe5, 0xa3, 0x2b,
+ 0x69, 0x8e, 0xc7, 0xbe, 0x87, 0xde, 0xf4, 0x0a, 0x71, 0xfb, 0xda, 0x55, 0xdc, 0x0e, 0x2f, 0xa5,
+ 0xde, 0x59, 0x32, 0xae, 0xe0, 0xcd, 0x7b, 0xe8, 0xf3, 0xe9, 0x2e, 0xec, 0x0a, 0xf3, 0x2c, 0xbc,
+ 0x12, 0x7f, 0x7f, 0xa1, 0x51, 0x20, 0x8a, 0x9d, 0x25, 0x63, 0x8a, 0x07, 0xff, 0x15, 0x58, 0x4f,
+ 0xd5, 0x49, 0xb7, 0x60, 0xd5, 0x85, 0xf9, 0xaf, 0x2e, 0xdc, 0x0d, 0x24, 0xda, 0x59, 0x32, 0x66,
+ 0x39, 0xf1, 0x09, 0x7c, 0x6e, 0xb6, 0x4b, 0x5b, 0xa2, 0xef, 0xd8, 0xae, 0xd0, 0x77, 0xeb, 0xdf,
+ 0x79, 0xb9, 0xd1, 0xd2, 0xc4, 0x3b, 0x4b, 0xc6, 0xe5, 0x9c, 0xf9, 0x5f, 0x82, 0xdb, 0xe3, 0xb9,
+ 0xca, 0x47, 0x29, 0x35, 0x7d, 0x35, 0xff, 0xbd, 0x05, 0x6b, 0x9e, 0xa1, 0xdf, 0x59, 0x32, 0xae,
+ 0xe4, 0xcf, 0xfb, 0x70, 0xcd, 0x9c, 0x48, 0x0f, 0x2d, 0x05, 0x75, 0xbc, 0x4b, 0xd7, 0x27, 0xf5,
+ 0x85, 0xfe, 0x07, 0x57, 0x55, 0xdb, 0x9c, 0x25, 0xdb, 0x59, 0x32, 0xe6, 0x71, 0x43, 0xd3, 0x9d,
+ 0x1c, 0x78, 0x9d, 0xbd, 0xae, 0x0a, 0xfc, 0x36, 0x54, 0xcc, 0xbe, 0xb3, 0x23, 0x4c, 0x2b, 0x3a,
+ 0xae, 0x88, 0x01, 0xf5, 0xff, 0x9e, 0x81, 0xa2, 0x5e, 0x54, 0xb7, 0xa3, 0x94, 0x84, 0x68, 0xe7,
+ 0x88, 0x01, 0xfc, 0x03, 0xa8, 0x08, 0xdf, 0xf7, 0xfc, 0x96, 0x67, 0x85, 0xd9, 0x9c, 0xd3, 0x41,
+ 0x6e, 0xc5, 0x67, 0xa3, 0x1d, 0xa2, 0x19, 0x31, 0x05, 0x7f, 0x1f, 0x40, 0x29, 0x93, 0x5e, 0x7c,
+ 0x09, 0xa9, 0x3e, 0x9f, 0x5e, 0x9d, 0x80, 0xc5, 0xd8, 0x71, 0x54, 0x30, 0x3c, 0x7e, 0x0a, 0x8b,
+ 0x91, 0xbf, 0x5b, 0x48, 0xf8, 0xbb, 0xb7, 0x75, 0x18, 0x83, 0xa2, 0x3b, 0xfa, 0x2a, 0x5e, 0x04,
+ 0xa8, 0xff, 0x61, 0x06, 0x8a, 0x4a, 0x43, 0xf1, 0xf6, 0x6c, 0x8f, 0x5e, 0x7b, 0xb1, 0x62, 0xdb,
+ 0x98, 0xee, 0xd9, 0x37, 0x01, 0x94, 0xa2, 0x4b, 0xf4, 0xec, 0xf6, 0x14, 0x1f, 0x4d, 0x1a, 0xe6,
+ 0x4f, 0xc7, 0xf8, 0x8d, 0x87, 0xea, 0xba, 0x18, 0x45, 0xa4, 0x9f, 0xec, 0xee, 0xb2, 0x25, 0xbe,
+ 0x0e, 0x2b, 0x4f, 0xf6, 0x1f, 0xef, 0x1f, 0x3c, 0xdb, 0x3f, 0x6a, 0x1b, 0xc6, 0x81, 0xa1, 0x02,
+ 0xd3, 0x9b, 0xcd, 0xad, 0xa3, 0xce, 0xfe, 0xe1, 0x93, 0x1e, 0xcb, 0xd6, 0xff, 0x79, 0x06, 0x56,
+ 0x52, 0x0a, 0xf2, 0xcf, 0x76, 0xea, 0x12, 0xc3, 0x9f, 0x9b, 0x3f, 0xfc, 0xf9, 0xcb, 0x86, 0xbf,
+ 0x30, 0x3d, 0xfc, 0xbf, 0x93, 0x81, 0x95, 0x94, 0x22, 0x4e, 0x72, 0xcf, 0xa4, 0xb9, 0x27, 0x0d,
+ 0x8d, 0xec, 0x94, 0xa1, 0xd1, 0x80, 0xe5, 0xf0, 0xf7, 0x7e, 0x1c, 0xf0, 0x48, 0xc1, 0x92, 0x38,
+ 0x74, 0x5f, 0x23, 0x9f, 0xc6, 0xa1, 0x3b, 0x1b, 0x57, 0xb7, 0x96, 0xee, 0xa7, 0x06, 0x74, 0x7d,
+ 0xbf, 0x7e, 0xb9, 0x9a, 0xbe, 0xa2, 0x0b, 0x8f, 0xa0, 0x3a, 0x8e, 0x75, 0xc1, 0xcb, 0x59, 0x45,
+ 0x49, 0xca, 0x17, 0xb4, 0xf3, 0x77, 0x33, 0xb0, 0x9a, 0x56, 0xec, 0xff, 0x5f, 0x0f, 0xeb, 0x3f,
+ 0xcd, 0xc0, 0xfa, 0xcc, 0x76, 0x71, 0xa5, 0x5d, 0x39, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd,
+ 0x69, 0xd7, 0xe5, 0x9a, 0xe4, 0xea, 0x16, 0x77, 0xe1, 0x73, 0x97, 0x6e, 0x3c, 0x57, 0x0c, 0x75,
+ 0x8a, 0x69, 0x6e, 0x9a, 0xe9, 0x6f, 0x67, 0xe0, 0xf6, 0x55, 0x9b, 0xca, 0xff, 0x73, 0xb9, 0x9a,
+ 0x69, 0xe1, 0xaf, 0xc2, 0xb5, 0x39, 0xdb, 0xcf, 0x15, 0xed, 0x7a, 0x15, 0x56, 0xb1, 0x01, 0x87,
+ 0x71, 0x78, 0x3d, 0xab, 0xaf, 0x79, 0xa6, 0xa0, 0x68, 0x70, 0xab, 0x33, 0xf7, 0xcd, 0xd4, 0x33,
+ 0x51, 0x69, 0x60, 0xe3, 0xdd, 0x28, 0x8d, 0xa2, 0x0a, 0x25, 0xfd, 0x2a, 0x97, 0x4e, 0x54, 0x1f,
+ 0x7a, 0xcf, 0x5d, 0x15, 0x87, 0x37, 0x84, 0xa9, 0xdf, 0x2d, 0x30, 0xc4, 0xd8, 0xb1, 0xe9, 0x84,
+ 0xf8, 0x16, 0x40, 0x93, 0xbc, 0xda, 0xf0, 0x1a, 0x51, 0x6b, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49,
+ 0x13, 0xfe, 0x93, 0x70, 0x1f, 0x68, 0x1c, 0x42, 0x31, 0xbe, 0xd8, 0xb1, 0x67, 0xfa, 0xa7, 0x96,
+ 0x3a, 0x87, 0x5d, 0x86, 0xf2, 0xa1, 0x76, 0x20, 0x55, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xc8,
+ 0x7f, 0xeb, 0xa0, 0xa7, 0xae, 0x87, 0x74, 0x9f, 0x3e, 0x52, 0x07, 0x82, 0x8f, 0x8c, 0xe6, 0xe1,
+ 0xce, 0x11, 0x61, 0x14, 0x1a, 0xbf, 0x95, 0x0f, 0x37, 0xd5, 0x86, 0xa1, 0x4f, 0x78, 0x01, 0x8a,
+ 0xb8, 0x99, 0x78, 0x9a, 0x71, 0x54, 0x0d, 0xa5, 0x34, 0xb7, 0xcf, 0x55, 0x14, 0x86, 0x65, 0x79,
+ 0x11, 0xb2, 0x87, 0xc7, 0x2a, 0x0f, 0x6b, 0x47, 0x8e, 0x1c, 0x75, 0xaf, 0xb4, 0x77, 0x2e, 0x59,
+ 0x01, 0x7f, 0xb4, 0x82, 0x33, 0x56, 0x6c, 0xfc, 0x8b, 0x1c, 0x54, 0x22, 0x4d, 0xfd, 0x32, 0x3b,
+ 0x07, 0xe7, 0xb0, 0xda, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xe6, 0xae, 0x46, 0xc9, 0xf1, 0x6b, 0xb0,
+ 0xb6, 0xdd, 0xd9, 0x6d, 0x1f, 0xed, 0x1e, 0x34, 0xb7, 0x34, 0xb0, 0xcc, 0x6f, 0x02, 0xef, 0xec,
+ 0x1d, 0x1e, 0x18, 0xbd, 0xa3, 0x4e, 0xf7, 0xa8, 0xd5, 0xdc, 0x6f, 0xb5, 0x77, 0xdb, 0x5b, 0xac,
+ 0xc8, 0x5f, 0x81, 0xbb, 0xfb, 0x07, 0xbd, 0xce, 0xc1, 0xfe, 0xd1, 0xfe, 0xc1, 0xd1, 0xc1, 0xe6,
+ 0x47, 0xed, 0x56, 0xaf, 0x7b, 0xd4, 0xd9, 0x3f, 0x42, 0xae, 0x8f, 0x8c, 0x26, 0x7e, 0x61, 0x05,
+ 0x7e, 0x17, 0x6e, 0x6b, 0xac, 0x6e, 0xdb, 0x78, 0xda, 0x36, 0x90, 0xc9, 0x93, 0xfd, 0xe6, 0xd3,
+ 0x66, 0x67, 0xb7, 0xb9, 0xb9, 0xdb, 0x66, 0xcb, 0xfc, 0x0e, 0xd4, 0x35, 0x86, 0xd1, 0xec, 0xb5,
+ 0x8f, 0x76, 0x3b, 0x7b, 0x9d, 0xde, 0x51, 0xfb, 0xbb, 0xad, 0x76, 0x7b, 0xab, 0xbd, 0xc5, 0x56,
+ 0xf8, 0x97, 0xe1, 0x4b, 0xd4, 0x28, 0xdd, 0x88, 0x74, 0x65, 0x9f, 0x74, 0x0e, 0x8f, 0x9a, 0x46,
+ 0x6b, 0xa7, 0xf3, 0xb4, 0xcd, 0x56, 0xf9, 0x6b, 0xf0, 0xc5, 0xcb, 0x51, 0xb7, 0x3a, 0x46, 0xbb,
+ 0xd5, 0x3b, 0x30, 0x3e, 0x66, 0xeb, 0xfc, 0x97, 0xe0, 0x73, 0x3b, 0xbd, 0xbd, 0xdd, 0xa3, 0x67,
+ 0xc6, 0xc1, 0xfe, 0xa3, 0x23, 0xfa, 0xd9, 0xed, 0x19, 0x4f, 0x5a, 0xbd, 0x27, 0x46, 0x9b, 0x01,
+ 0xaf, 0xc3, 0xcd, 0xc3, 0xcd, 0xa3, 0xfd, 0x83, 0xde, 0x51, 0x73, 0xff, 0xe3, 0xcd, 0xdd, 0x83,
+ 0xd6, 0xe3, 0xa3, 0xed, 0x03, 0x63, 0xaf, 0xd9, 0x63, 0x55, 0xfe, 0x15, 0x78, 0xad, 0xd5, 0x7d,
+ 0xaa, 0x9b, 0x79, 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97,
+ 0xfa, 0xdc, 0x8d, 0xdb, 0x5e, 0xe2, 0xb7, 0xa1, 0xd6, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0xb4,
+ 0x3a, 0xed, 0xfd, 0xde, 0xd1, 0x61, 0xdb, 0xd8, 0xeb, 0x74, 0xbb, 0x88, 0xc6, 0x2a, 0x8d, 0x6f,
+ 0x43, 0xb1, 0xe3, 0x9e, 0xd9, 0x92, 0x96, 0xb7, 0x16, 0x46, 0xed, 0x6f, 0x86, 0x45, 0x5a, 0x95,
+ 0xf6, 0xc0, 0xa5, 0xf7, 0x12, 0x68, 0x05, 0x2d, 0x1b, 0x31, 0xa0, 0xf1, 0x87, 0x39, 0x58, 0x51,
+ 0x2c, 0x42, 0xff, 0xf5, 0x1e, 0xac, 0xe9, 0x40, 0x70, 0x27, 0xad, 0x41, 0xa7, 0xc1, 0xf4, 0x10,
+ 0x99, 0x02, 0x25, 0x56, 0x67, 0x12, 0xc4, 0x6f, 0x42, 0xd1, 0xec, 0x3b, 0xe8, 0x04, 0xab, 0xd3,
+ 0x5a, 0x5d, 0xfa, 0xac, 0xaa, 0x13, 0xd5, 0xb2, 0x42, 0xec, 0x7b, 0x6e, 0x2b, 0xba, 0x32, 0x93,
+ 0x82, 0xf1, 0x4f, 0xe0, 0x56, 0x54, 0x6e, 0xbb, 0x7d, 0xff, 0x62, 0x1c, 0xbd, 0x14, 0x58, 0x9a,
+ 0x1b, 0x4a, 0xd9, 0xb6, 0x1d, 0x91, 0x42, 0x34, 0x2e, 0x63, 0xc0, 0x1f, 0x01, 0xd8, 0x34, 0x58,
+ 0x64, 0x9e, 0xcd, 0xbf, 0x17, 0x9e, 0x1a, 0x4d, 0x5d, 0xd2, 0x56, 0x68, 0xf4, 0x1b, 0xf7, 0xa7,
+ 0x01, 0xaa, 0xfd, 0xc7, 0xfa, 0x61, 0xc1, 0x65, 0x23, 0x2a, 0x37, 0x1e, 0x00, 0xc4, 0x54, 0x9c,
+ 0xc1, 0x32, 0x9a, 0x36, 0xcd, 0x60, 0x4f, 0x8c, 0x8e, 0x85, 0xaf, 0x72, 0x18, 0x15, 0xe4, 0x11,
+ 0x52, 0xb0, 0x4c, 0xe3, 0x8f, 0x32, 0x89, 0x28, 0x84, 0x8a, 0x32, 0x5c, 0xb9, 0x01, 0xce, 0x3b,
+ 0x11, 0x43, 0x6f, 0x5f, 0x0f, 0xaa, 0xb6, 0xcb, 0x74, 0x91, 0x1f, 0x02, 0xb7, 0x67, 0x87, 0x32,
+ 0xbf, 0xe0, 0x50, 0xce, 0xa1, 0x9d, 0x3e, 0xd0, 0x28, 0xcc, 0x1e, 0x68, 0xdc, 0x01, 0x18, 0x38,
+ 0xde, 0xb1, 0x56, 0xfb, 0x45, 0x9d, 0xf5, 0x14, 0x41, 0x1a, 0x0e, 0x94, 0xc3, 0x57, 0x12, 0x51,
+ 0xc6, 0xe8, 0x9d, 0xc4, 0x28, 0xbc, 0xab, 0x4a, 0x7c, 0x07, 0x56, 0x45, 0xba, 0xcd, 0xd9, 0x05,
+ 0xdb, 0x3c, 0x45, 0xd7, 0xf8, 0x3a, 0xac, 0xcf, 0x20, 0xe1, 0x20, 0x8e, 0x4d, 0x19, 0x3d, 0x95,
+ 0x80, 0xbf, 0x67, 0x93, 0x15, 0x1a, 0xff, 0x21, 0x0b, 0xcb, 0x7b, 0xa6, 0x6b, 0x9f, 0x88, 0x40,
+ 0x86, 0xad, 0x0d, 0xfa, 0x43, 0x31, 0x32, 0xc3, 0xd6, 0xaa, 0x92, 0x8e, 0xf9, 0x64, 0x93, 0xa7,
+ 0x29, 0x33, 0x87, 0x6f, 0xb8, 0x9a, 0x26, 0x72, 0x18, 0xdd, 0x1e, 0xd0, 0x25, 0x9c, 0x3b, 0xc7,
+ 0xee, 0x0b, 0x37, 0x08, 0x57, 0x4c, 0x58, 0x8c, 0x73, 0x97, 0x8a, 0x57, 0xe4, 0x2e, 0x95, 0x66,
+ 0xc7, 0xff, 0x2e, 0x54, 0x83, 0xbe, 0x2f, 0x84, 0x1b, 0x0c, 0x3d, 0x19, 0xbe, 0xb0, 0x99, 0x04,
+ 0x51, 0x22, 0xa1, 0xf7, 0xdc, 0x45, 0x19, 0xdf, 0xb5, 0xdd, 0x53, 0x9d, 0x1f, 0x97, 0x82, 0xa1,
+ 0x0c, 0x52, 0xc4, 0xcb, 0xfe, 0x81, 0xa0, 0x98, 0x4a, 0xc1, 0x88, 0xca, 0x14, 0xd3, 0x32, 0xa5,
+ 0x18, 0x78, 0xbe, 0x2d, 0x54, 0x60, 0xb7, 0x62, 0x24, 0x20, 0x48, 0xeb, 0x98, 0xee, 0x60, 0x62,
+ 0x0e, 0x84, 0x3e, 0xfc, 0x8f, 0xca, 0x8d, 0xff, 0x51, 0x00, 0x50, 0xab, 0x21, 0x18, 0xda, 0x63,
+ 0x3a, 0x78, 0xb2, 0x75, 0xce, 0xf4, 0x8a, 0x41, 0xbf, 0xf9, 0x7b, 0xa9, 0xeb, 0x0c, 0xb3, 0x47,
+ 0xc5, 0x31, 0xf9, 0x74, 0x40, 0x0c, 0x07, 0xc7, 0x94, 0x42, 0xa7, 0x8d, 0xd1, 0xf8, 0xe7, 0x8d,
+ 0x24, 0x88, 0x12, 0x07, 0x4d, 0x29, 0xda, 0xae, 0xa5, 0x02, 0x6e, 0x79, 0x23, 0x2a, 0xd3, 0x85,
+ 0xa8, 0x00, 0xcd, 0x1c, 0x43, 0xb8, 0xe2, 0x79, 0x74, 0xd7, 0x2f, 0x06, 0xf1, 0x3d, 0x58, 0x19,
+ 0x9b, 0x17, 0x23, 0xe1, 0xca, 0x3d, 0x21, 0x87, 0x9e, 0xa5, 0x73, 0xbc, 0x5e, 0xbb, 0xbc, 0x81,
+ 0x87, 0x49, 0x74, 0x23, 0x4d, 0x8d, 0x32, 0xe1, 0x06, 0xb4, 0x4a, 0xd4, 0x34, 0xea, 0x12, 0xdf,
+ 0x04, 0x50, 0xbf, 0x12, 0x9a, 0x6a, 0x26, 0xd2, 0x66, 0x8e, 0x44, 0x20, 0xfc, 0x33, 0x5b, 0x69,
+ 0x57, 0xa5, 0xa4, 0x62, 0x2a, 0xd4, 0xc5, 0x93, 0x40, 0xf8, 0xed, 0x91, 0x69, 0x3b, 0x7a, 0x82,
+ 0x63, 0x00, 0x7f, 0x1b, 0x6e, 0x04, 0x93, 0x63, 0x94, 0x99, 0x63, 0xd1, 0xf3, 0xf6, 0xc5, 0xf3,
+ 0xc0, 0x11, 0x52, 0x0a, 0x5f, 0xe7, 0x91, 0xcc, 0xff, 0xd8, 0x18, 0x44, 0x66, 0x18, 0xbd, 0xe6,
+ 0x82, 0xbf, 0xe2, 0x64, 0xb5, 0x08, 0xa4, 0x33, 0xf9, 0x58, 0x06, 0xd5, 0x9f, 0x02, 0xe9, 0x44,
+ 0xbf, 0x2c, 0xff, 0x12, 0x7c, 0x21, 0x85, 0x64, 0xa8, 0x63, 0xf9, 0x60, 0xdb, 0x76, 0x4d, 0xc7,
+ 0xfe, 0x81, 0x4a, 0x92, 0xc8, 0x35, 0xc6, 0xb0, 0x92, 0x1a, 0x38, 0xba, 0x9c, 0x4a, 0xbf, 0x74,
+ 0xb6, 0x13, 0x83, 0x65, 0x55, 0xee, 0x4a, 0xdf, 0xa6, 0xf3, 0xa6, 0x08, 0xd2, 0xc2, 0x75, 0xee,
+ 0xb1, 0x2c, 0xbf, 0x0e, 0x4c, 0x41, 0x3a, 0xae, 0x39, 0x1e, 0x37, 0xc7, 0x63, 0x47, 0xb0, 0x1c,
+ 0x5d, 0xfc, 0x8d, 0xa1, 0xea, 0x52, 0x03, 0xcb, 0x37, 0xbe, 0x0b, 0xb7, 0x68, 0x64, 0x9e, 0x0a,
+ 0x3f, 0xf2, 0xf3, 0x75, 0x5f, 0x6f, 0xc0, 0xba, 0xfa, 0xb5, 0xef, 0x49, 0xf5, 0x99, 0x8c, 0x4f,
+ 0x0e, 0xab, 0x0a, 0x8c, 0xb6, 0x57, 0x57, 0xd0, 0x75, 0xde, 0x08, 0x16, 0xe1, 0x65, 0x1b, 0x3f,
+ 0x2d, 0x02, 0x8f, 0x05, 0xa2, 0x67, 0x0b, 0x7f, 0xcb, 0x94, 0x66, 0x22, 0x4e, 0xbc, 0x72, 0x69,
+ 0xa6, 0xc3, 0x8b, 0xf3, 0x14, 0x6f, 0x42, 0xd1, 0x0e, 0xd0, 0x33, 0xd5, 0xc9, 0xca, 0xba, 0xc4,
+ 0x77, 0x01, 0xc6, 0xc2, 0xb7, 0x3d, 0x8b, 0x24, 0xa8, 0x30, 0xf7, 0x56, 0xc9, 0x6c, 0xa3, 0x36,
+ 0x0e, 0x23, 0x1a, 0x23, 0x41, 0x8f, 0xed, 0x50, 0x25, 0x95, 0x37, 0x50, 0xa4, 0x46, 0x27, 0x41,
+ 0xfc, 0x0d, 0xb8, 0x36, 0xf6, 0xed, 0xbe, 0x50, 0xd3, 0xf1, 0x24, 0xb0, 0x5a, 0xf4, 0x06, 0x62,
+ 0x89, 0x30, 0xe7, 0x7d, 0x42, 0x09, 0x34, 0x5d, 0xf2, 0xd7, 0x02, 0x3a, 0x29, 0xd7, 0x17, 0xe0,
+ 0x55, 0x3a, 0xef, 0x8a, 0x31, 0xff, 0x23, 0xbf, 0x0f, 0x4c, 0x7f, 0xd8, 0xb3, 0xdd, 0x5d, 0xe1,
+ 0x0e, 0xe4, 0x90, 0x84, 0x7b, 0xc5, 0x98, 0x81, 0x93, 0x06, 0x53, 0x2f, 0x4d, 0xa9, 0x53, 0xb4,
+ 0x8a, 0x11, 0x95, 0xd5, 0xa3, 0x0a, 0x8e, 0xe7, 0x77, 0xa5, 0xaf, 0xf3, 0x92, 0xa3, 0x32, 0xda,
+ 0x50, 0x01, 0xb5, 0xf5, 0xd0, 0xf7, 0xac, 0x09, 0x9d, 0xf1, 0x28, 0x25, 0x36, 0x0d, 0x8e, 0x31,
+ 0xf7, 0x4c, 0x57, 0x27, 0x8b, 0xae, 0x24, 0x31, 0x23, 0x30, 0xb9, 0xa4, 0x5e, 0x10, 0x33, 0x5c,
+ 0xd3, 0x2e, 0x69, 0x02, 0xa6, 0x71, 0x62, 0x56, 0x2c, 0xc2, 0x89, 0xf9, 0x50, 0xff, 0x2d, 0xdf,
+ 0xb3, 0xad, 0x98, 0x97, 0xca, 0x5b, 0x9a, 0x81, 0x27, 0x70, 0x63, 0x9e, 0x3c, 0x85, 0x1b, 0xc1,
+ 0x1b, 0x3f, 0xca, 0x00, 0xc4, 0x93, 0x8f, 0x22, 0x1f, 0x97, 0xe2, 0x25, 0x7e, 0x0b, 0xae, 0x25,
+ 0xc1, 0x8e, 0x4e, 0xf8, 0x25, 0xb9, 0x8f, 0x3f, 0x6c, 0x99, 0x17, 0x01, 0xcb, 0xea, 0x2b, 0xe8,
+ 0x1a, 0xf6, 0x4c, 0x08, 0xca, 0x9e, 0xbc, 0x0e, 0x2c, 0x06, 0xd2, 0xbd, 0xc2, 0x80, 0xe5, 0xd3,
+ 0xa8, 0x1f, 0x0b, 0xd3, 0x0f, 0x58, 0xa1, 0xb1, 0x03, 0x45, 0x75, 0xd4, 0x37, 0xe7, 0x90, 0xfe,
+ 0xe5, 0x32, 0x6e, 0xfe, 0x46, 0x06, 0x60, 0x4b, 0x65, 0x87, 0xe3, 0x2e, 0x3e, 0x27, 0xf7, 0x61,
+ 0x9e, 0x45, 0x65, 0x5a, 0x16, 0x65, 0xd9, 0xe7, 0xa2, 0xf7, 0x8b, 0xb0, 0x88, 0x92, 0x63, 0x86,
+ 0x19, 0x72, 0x6a, 0xcd, 0x45, 0x65, 0xb5, 0x81, 0xb4, 0x3c, 0xd7, 0x15, 0x7d, 0xdc, 0x7e, 0xa2,
+ 0x0d, 0x24, 0x02, 0x35, 0x7e, 0x98, 0x85, 0x4a, 0x6b, 0x68, 0x4a, 0xf5, 0xdc, 0xcf, 0xb7, 0xa1,
+ 0x3c, 0x12, 0x41, 0x60, 0x0e, 0x44, 0xa0, 0x8f, 0xb6, 0xa6, 0xcf, 0xa5, 0x23, 0xdc, 0x8d, 0x27,
+ 0xae, 0x2f, 0x4c, 0x4b, 0xbd, 0x71, 0x14, 0x51, 0x29, 0x0e, 0xae, 0x8c, 0x7c, 0xff, 0x97, 0xe0,
+ 0xe0, 0x46, 0x0f, 0x12, 0x5b, 0xc7, 0xf1, 0x0b, 0xd8, 0xaa, 0xb7, 0x49, 0x50, 0x7d, 0x0f, 0xaa,
+ 0x09, 0x52, 0xf4, 0xd8, 0x3d, 0xc7, 0x12, 0x81, 0xba, 0xe5, 0x18, 0x3f, 0x0c, 0x99, 0x02, 0x52,
+ 0x82, 0x0a, 0xae, 0x5c, 0xe1, 0xeb, 0x53, 0xca, 0xb0, 0xd8, 0xf8, 0x5f, 0x25, 0xa8, 0x62, 0xa3,
+ 0xf6, 0x54, 0x1f, 0x66, 0xa6, 0xa3, 0x06, 0x25, 0x4f, 0x73, 0xd6, 0xd7, 0x23, 0xbd, 0x04, 0x4f,
+ 0x9d, 0xf4, 0x92, 0x4b, 0x27, 0xbd, 0xdc, 0x86, 0x8a, 0x3a, 0x52, 0xb3, 0x9a, 0x4a, 0x13, 0xe6,
+ 0x8c, 0x18, 0x80, 0xe6, 0xca, 0xc8, 0xb3, 0x48, 0x1f, 0x37, 0xd5, 0x99, 0x53, 0xce, 0x48, 0x40,
+ 0x92, 0x8f, 0x55, 0x55, 0xd3, 0x8f, 0x55, 0x51, 0xf6, 0xd1, 0xd8, 0xb9, 0xe8, 0x79, 0xba, 0xb5,
+ 0x1d, 0x2b, 0xbe, 0x65, 0x9e, 0x86, 0xf3, 0x16, 0x94, 0xf4, 0xb4, 0xe8, 0x93, 0xb5, 0x2f, 0xcf,
+ 0x99, 0x09, 0x8d, 0xbe, 0xa1, 0xff, 0xea, 0x8b, 0x5e, 0x46, 0x48, 0xc9, 0x1f, 0x41, 0xd5, 0x94,
+ 0xd2, 0xec, 0x0f, 0x47, 0x5a, 0x7f, 0xe6, 0xe6, 0x1c, 0xbf, 0x27, 0x19, 0x35, 0x23, 0x6c, 0x23,
+ 0x49, 0xc9, 0x37, 0xa1, 0xe2, 0x0b, 0x33, 0x95, 0x01, 0xf0, 0xca, 0x15, 0x6c, 0x8c, 0x10, 0xd7,
+ 0x88, 0xc9, 0xa2, 0x37, 0x52, 0x21, 0x7e, 0x23, 0xb5, 0xfe, 0x93, 0x0c, 0xac, 0xa6, 0x1b, 0xff,
+ 0x67, 0xf1, 0x66, 0xdf, 0x37, 0xe3, 0x37, 0xfb, 0x3e, 0xc3, 0xfb, 0x77, 0xbf, 0x9d, 0x01, 0x88,
+ 0xc7, 0x05, 0xf7, 0x48, 0xf5, 0xb6, 0x58, 0x68, 0xb5, 0xab, 0x12, 0xdf, 0x49, 0x3d, 0x48, 0xf1,
+ 0xf6, 0x42, 0x83, 0x9c, 0xf8, 0x99, 0x48, 0xde, 0x7f, 0x00, 0xab, 0x69, 0x38, 0x5d, 0x7a, 0xe8,
+ 0xec, 0xb6, 0x55, 0x8c, 0xaa, 0xb3, 0xd7, 0x7c, 0xd4, 0xd6, 0x97, 0xed, 0x3a, 0xfb, 0x8f, 0x59,
+ 0xb6, 0xfe, 0xc7, 0x19, 0xa8, 0x44, 0x43, 0xce, 0xbf, 0x93, 0x9c, 0x2b, 0x95, 0xe6, 0xf3, 0xd6,
+ 0x22, 0x73, 0x15, 0xff, 0x6a, 0xbb, 0xd2, 0xbf, 0x48, 0x4c, 0x5d, 0xdd, 0x83, 0xd5, 0xf4, 0xc7,
+ 0x39, 0x4a, 0xf4, 0x51, 0x5a, 0x89, 0xbe, 0xb9, 0x50, 0x95, 0xa1, 0xab, 0xba, 0x6b, 0x07, 0x52,
+ 0xeb, 0xd7, 0xf7, 0xb3, 0xef, 0x65, 0xea, 0x77, 0x61, 0x39, 0xf9, 0x69, 0xf6, 0x46, 0xed, 0xfd,
+ 0x3f, 0xce, 0xc1, 0x6a, 0x3a, 0x53, 0x86, 0xee, 0xef, 0xa9, 0x2c, 0xad, 0x03, 0xc7, 0x4a, 0xdc,
+ 0x77, 0x60, 0xe8, 0x26, 0x6b, 0x67, 0x98, 0x00, 0xeb, 0x14, 0x05, 0xf3, 0x46, 0x82, 0xdd, 0x4d,
+ 0xbe, 0x4b, 0xfa, 0x06, 0x87, 0xf0, 0x66, 0x25, 0x1b, 0xf3, 0x8a, 0x7e, 0xa1, 0xed, 0x87, 0x59,
+ 0xbe, 0x92, 0xc8, 0xba, 0xff, 0x31, 0x5a, 0x82, 0x6b, 0x9b, 0x13, 0xd7, 0x72, 0x84, 0x15, 0x41,
+ 0x7f, 0x92, 0x84, 0x46, 0x69, 0xf3, 0x3f, 0xcc, 0xf3, 0x55, 0xa8, 0x74, 0x27, 0xc7, 0x3a, 0x65,
+ 0xfe, 0x2f, 0xe7, 0xf9, 0x4d, 0x58, 0xd7, 0x58, 0x71, 0x86, 0x2a, 0xfb, 0x2b, 0xb8, 0x67, 0xad,
+ 0x36, 0xd5, 0x78, 0xe9, 0x86, 0xb2, 0xbf, 0x9a, 0xc7, 0x26, 0xd0, 0x85, 0xfd, 0xbf, 0x46, 0x7c,
+ 0xa2, 0xeb, 0x4d, 0xec, 0xd7, 0xf2, 0x7c, 0x0d, 0xa0, 0xdb, 0x8b, 0x2a, 0xfa, 0x8d, 0x3c, 0xaf,
+ 0x42, 0xb1, 0xdb, 0x23, 0x6e, 0x3f, 0xca, 0xf3, 0x1b, 0xc0, 0xe2, 0xaf, 0x3a, 0x6f, 0xf7, 0x6f,
+ 0xaa, 0xc6, 0x44, 0x89, 0xb8, 0x7f, 0x2b, 0x8f, 0xfd, 0x0a, 0x47, 0x99, 0xfd, 0xed, 0x3c, 0x67,
+ 0x50, 0x4d, 0x84, 0x76, 0xd9, 0xdf, 0xc9, 0x73, 0x0e, 0x2b, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40,
+ 0xf7, 0xe0, 0xd7, 0xa9, 0xe6, 0xed, 0xe8, 0x86, 0x16, 0xfb, 0xcd, 0x3c, 0xbf, 0x05, 0x3c, 0x79,
+ 0x9c, 0xa5, 0x3f, 0xfc, 0x5d, 0xa2, 0x56, 0xfb, 0x64, 0xa0, 0x61, 0x7f, 0x8f, 0xa8, 0x51, 0x12,
+ 0x34, 0xe0, 0xb7, 0x68, 0x40, 0x5a, 0x71, 0xa6, 0xaf, 0x86, 0xff, 0x98, 0x88, 0xc3, 0xc9, 0x54,
+ 0xb0, 0x9f, 0xe4, 0xef, 0xff, 0x94, 0x8e, 0x23, 0x92, 0x09, 0x73, 0x7c, 0x19, 0xca, 0x8e, 0xe7,
+ 0x0e, 0xa4, 0x7a, 0x0f, 0x76, 0x05, 0x2a, 0xc1, 0xd0, 0xf3, 0x25, 0x15, 0xe9, 0x0a, 0xa9, 0x4b,
+ 0x8f, 0x09, 0xa8, 0x4b, 0x17, 0xca, 0xab, 0x53, 0xf1, 0x55, 0x69, 0x0e, 0x58, 0x35, 0xca, 0x51,
+ 0xce, 0x47, 0x79, 0xd4, 0xf4, 0xa8, 0x41, 0x78, 0x69, 0x9c, 0x15, 0x11, 0x75, 0xe2, 0x3b, 0x2a,
+ 0x9f, 0x5a, 0xa0, 0x45, 0xaf, 0x1e, 0x7e, 0x1c, 0x0f, 0xd1, 0x71, 0xa8, 0x28, 0xa8, 0xf7, 0x3d,
+ 0x5b, 0x5d, 0x47, 0xd6, 0xe9, 0x89, 0x16, 0xb6, 0x23, 0xca, 0xc0, 0x61, 0xe2, 0xfe, 0xdf, 0xcf,
+ 0xc0, 0x72, 0x78, 0x95, 0xdf, 0x1e, 0xd8, 0xae, 0xca, 0xc8, 0x0e, 0x5f, 0xd9, 0xed, 0x3b, 0xf6,
+ 0x38, 0x7c, 0xb5, 0x72, 0x0d, 0xaa, 0x96, 0x6f, 0x0e, 0x9a, 0xae, 0xb5, 0xe5, 0x7b, 0x63, 0xd5,
+ 0x6c, 0x75, 0x60, 0xa9, 0x32, 0xc1, 0x9f, 0x8b, 0x63, 0x44, 0x1f, 0x0b, 0x9f, 0xe5, 0x29, 0xf5,
+ 0x71, 0x68, 0xfa, 0xb6, 0x3b, 0x68, 0x9f, 0x4b, 0xe1, 0x06, 0x2a, 0x23, 0xbc, 0x0a, 0xa5, 0x49,
+ 0x20, 0xfa, 0x66, 0x20, 0x58, 0x11, 0x0b, 0xc7, 0x13, 0xdb, 0x91, 0xb6, 0xab, 0x1e, 0x8b, 0x8c,
+ 0x52, 0xbe, 0xcb, 0xd8, 0x33, 0x73, 0x6c, 0xb3, 0xca, 0xfd, 0xdf, 0xcf, 0x40, 0x95, 0xc4, 0x22,
+ 0x8e, 0x89, 0xc7, 0x36, 0x5a, 0x15, 0x4a, 0xbb, 0xd1, 0xab, 0x81, 0x45, 0xc8, 0x1e, 0x9c, 0xaa,
+ 0x98, 0xb8, 0x16, 0x0b, 0x75, 0x23, 0x57, 0x3d, 0x20, 0x98, 0xe7, 0x9f, 0x83, 0x1b, 0x86, 0x18,
+ 0x79, 0x52, 0x3c, 0x33, 0x6d, 0x99, 0xbc, 0x7d, 0x55, 0x40, 0x77, 0x4e, 0x7d, 0x0a, 0xaf, 0x5b,
+ 0x15, 0xc9, 0x9d, 0xc3, 0x6a, 0x43, 0x48, 0x09, 0x7b, 0x4f, 0x10, 0xed, 0xdf, 0x95, 0x23, 0x94,
+ 0x8f, 0x3c, 0xdb, 0xc5, 0xda, 0xe8, 0x1e, 0x38, 0x41, 0xe8, 0x6c, 0x07, 0x41, 0x70, 0x7f, 0x1f,
+ 0x6e, 0xce, 0x3f, 0x91, 0x50, 0x37, 0xc4, 0xe9, 0xa9, 0x6a, 0xba, 0x8f, 0xf3, 0xcc, 0xb7, 0xd5,
+ 0x45, 0xdf, 0x0a, 0x14, 0x0e, 0x9e, 0xbb, 0x24, 0x16, 0xeb, 0xb0, 0xb2, 0xef, 0x25, 0x68, 0x58,
+ 0xee, 0x7e, 0x3f, 0x75, 0x88, 0x14, 0x0f, 0x4a, 0xd8, 0x88, 0xa5, 0xc4, 0x5d, 0xb3, 0x8c, 0x3a,
+ 0x1f, 0xa0, 0xff, 0x36, 0xa2, 0x5e, 0xcf, 0xd0, 0x87, 0x37, 0x96, 0x7a, 0x3d, 0x23, 0x6a, 0x66,
+ 0x5e, 0x3d, 0x23, 0xe6, 0xf6, 0x85, 0x23, 0x2c, 0x56, 0xb8, 0xff, 0x1e, 0xac, 0xe9, 0xae, 0xf6,
+ 0x45, 0x10, 0x84, 0x77, 0xb5, 0x0e, 0x7d, 0xfb, 0x4c, 0xbd, 0xd0, 0xb1, 0x0c, 0xe5, 0x43, 0xe1,
+ 0x07, 0x9e, 0x4b, 0xaf, 0x93, 0x00, 0x14, 0xbb, 0x43, 0xd3, 0xc7, 0x3a, 0xee, 0x7f, 0x55, 0x0f,
+ 0xd2, 0x93, 0xf3, 0x70, 0x6b, 0xc0, 0xf5, 0xa3, 0x1f, 0xe7, 0x31, 0xa5, 0xa9, 0xd1, 0xa5, 0x2f,
+ 0xcc, 0x11, 0xcb, 0xde, 0x6f, 0x41, 0x85, 0xae, 0x7a, 0x3d, 0xb6, 0x5d, 0x0b, 0x3b, 0xbe, 0xa9,
+ 0xaf, 0x1d, 0xd0, 0xab, 0x51, 0x67, 0x34, 0x1c, 0x65, 0xf5, 0xbe, 0x2e, 0xcb, 0xf2, 0x9b, 0xc0,
+ 0x9b, 0x13, 0xe9, 0x8d, 0x4c, 0xba, 0xa2, 0xec, 0x5c, 0xa8, 0xb7, 0x98, 0x73, 0xf7, 0xbf, 0x05,
+ 0x5c, 0xc5, 0xd8, 0x2c, 0x71, 0x6e, 0xbb, 0x83, 0xe8, 0xf5, 0x03, 0xa0, 0xa7, 0x4c, 0x2c, 0x71,
+ 0x1e, 0xde, 0xd3, 0x0b, 0x0b, 0xe1, 0x83, 0x2a, 0xdb, 0xde, 0xc4, 0xc5, 0x46, 0x3f, 0x85, 0xeb,
+ 0x4a, 0xc4, 0xb0, 0x17, 0x74, 0xff, 0xf5, 0x52, 0xc7, 0x5f, 0xdd, 0xd3, 0x93, 0x93, 0x20, 0xc2,
+ 0x65, 0x19, 0x6c, 0x58, 0xe4, 0x34, 0xc7, 0xf0, 0xec, 0xfd, 0x06, 0x5c, 0x9b, 0x13, 0xb9, 0x20,
+ 0xa5, 0xae, 0xfc, 0x37, 0xb6, 0x74, 0xff, 0x43, 0x58, 0x57, 0x6a, 0x68, 0x5f, 0xdd, 0x50, 0x0c,
+ 0x87, 0xed, 0x59, 0x67, 0xbb, 0xa3, 0x46, 0xba, 0xd5, 0xde, 0xdd, 0x7d, 0xb2, 0xdb, 0x34, 0x58,
+ 0x86, 0xe4, 0xe1, 0xa0, 0x77, 0xd4, 0x3a, 0xd8, 0xdf, 0x6f, 0xb7, 0x7a, 0xed, 0x2d, 0x96, 0xdd,
+ 0xbc, 0xff, 0x6f, 0x3f, 0xbd, 0x93, 0xf9, 0xd9, 0xa7, 0x77, 0x32, 0xff, 0xe5, 0xd3, 0x3b, 0x99,
+ 0x1f, 0xfd, 0xfc, 0xce, 0xd2, 0xcf, 0x7e, 0x7e, 0x67, 0xe9, 0x3f, 0xfe, 0xfc, 0xce, 0xd2, 0x27,
+ 0x6c, 0xfa, 0x1f, 0x06, 0x1d, 0x17, 0xc9, 0x65, 0x78, 0xeb, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
+ 0x90, 0x26, 0xce, 0x54, 0x4b, 0x68, 0x00, 0x00,
}
func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) {
@@ -14752,6 +14838,16 @@ func (m *Notification) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x20
}
+ if m.IsToast {
+ i--
+ if m.IsToast {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x18
+ }
if m.CreateTime != 0 {
i = encodeVarintModels(dAtA, i, uint64(m.CreateTime))
i--
@@ -14983,6 +15079,29 @@ func (m *NotificationPayloadOfParticipantPermissionsChange) MarshalToSizedBuffer
}
return len(dAtA) - i, nil
}
+func (m *NotificationPayloadOfAutoTypeWidgetAdded) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *NotificationPayloadOfAutoTypeWidgetAdded) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.AutoTypeWidgetAdded != nil {
+ {
+ size, err := m.AutoTypeWidgetAdded.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintModels(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1
+ i--
+ dAtA[i] = 0x9a
+ }
+ return len(dAtA) - i, nil
+}
func (m *NotificationImport) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -15451,6 +15570,50 @@ func (m *NotificationParticipantPermissionsChange) MarshalToSizedBuffer(dAtA []b
return len(dAtA) - i, nil
}
+func (m *NotificationAutoTypeWidgetAdded) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *NotificationAutoTypeWidgetAdded) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *NotificationAutoTypeWidgetAdded) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.WidgetBlockId) > 0 {
+ i -= len(m.WidgetBlockId)
+ copy(dAtA[i:], m.WidgetBlockId)
+ i = encodeVarintModels(dAtA, i, uint64(len(m.WidgetBlockId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.TypePluralName) > 0 {
+ i -= len(m.TypePluralName)
+ copy(dAtA[i:], m.TypePluralName)
+ i = encodeVarintModels(dAtA, i, uint64(len(m.TypePluralName)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.SpaceId) > 0 {
+ i -= len(m.SpaceId)
+ copy(dAtA[i:], m.SpaceId)
+ i = encodeVarintModels(dAtA, i, uint64(len(m.SpaceId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *Export) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -18532,6 +18695,9 @@ func (m *Notification) Size() (n int) {
if m.CreateTime != 0 {
n += 1 + sovModels(uint64(m.CreateTime))
}
+ if m.IsToast {
+ n += 2
+ }
if m.Status != 0 {
n += 1 + sovModels(uint64(m.Status))
}
@@ -18672,6 +18838,18 @@ func (m *NotificationPayloadOfParticipantPermissionsChange) Size() (n int) {
}
return n
}
+func (m *NotificationPayloadOfAutoTypeWidgetAdded) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.AutoTypeWidgetAdded != nil {
+ l = m.AutoTypeWidgetAdded.Size()
+ n += 2 + l + sovModels(uint64(l))
+ }
+ return n
+}
func (m *NotificationImport) Size() (n int) {
if m == nil {
return 0
@@ -18899,6 +19077,27 @@ func (m *NotificationParticipantPermissionsChange) Size() (n int) {
return n
}
+func (m *NotificationAutoTypeWidgetAdded) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.SpaceId)
+ if l > 0 {
+ n += 1 + l + sovModels(uint64(l))
+ }
+ l = len(m.TypePluralName)
+ if l > 0 {
+ n += 1 + l + sovModels(uint64(l))
+ }
+ l = len(m.WidgetBlockId)
+ if l > 0 {
+ n += 1 + l + sovModels(uint64(l))
+ }
+ return n
+}
+
func (m *Export) Size() (n int) {
if m == nil {
return 0
@@ -31055,6 +31254,26 @@ func (m *Notification) Unmarshal(dAtA []byte) error {
break
}
}
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IsToast", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowModels
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.IsToast = bool(v != 0)
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
@@ -31508,6 +31727,41 @@ func (m *Notification) Unmarshal(dAtA []byte) error {
}
m.Payload = &NotificationPayloadOfParticipantPermissionsChange{v}
iNdEx = postIndex
+ case 19:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AutoTypeWidgetAdded", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowModels
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthModels
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthModels
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &NotificationAutoTypeWidgetAdded{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Payload = &NotificationPayloadOfAutoTypeWidgetAdded{v}
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipModels(dAtA[iNdEx:])
@@ -33090,6 +33344,152 @@ func (m *NotificationParticipantPermissionsChange) Unmarshal(dAtA []byte) error
}
return nil
}
+func (m *NotificationAutoTypeWidgetAdded) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowModels
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: AutoTypeWidgetAdded: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: AutoTypeWidgetAdded: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowModels
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthModels
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthModels
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.SpaceId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TypePluralName", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowModels
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthModels
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthModels
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TypePluralName = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field WidgetBlockId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowModels
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthModels
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthModels
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.WidgetBlockId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipModels(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthModels
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *Export) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto
index 38577c2bf..080995757 100644
--- a/pkg/lib/pb/model/protos/models.proto
+++ b/pkg/lib/pb/model/protos/models.proto
@@ -1043,6 +1043,7 @@ message Notification {
int64 createTime = 2;
Status status = 4;
bool isLocal = 5;
+ bool isToast = 3; // means it should automatically hide after some time if client window is active
oneof payload {
Import import = 6;
Export export = 8;
@@ -1054,6 +1055,7 @@ message Notification {
ParticipantRemove participantRemove = 16;
ParticipantRequestDecline participantRequestDecline = 17;
ParticipantPermissionsChange participantPermissionsChange = 18;
+ AutoTypeWidgetAdded autoTypeWidgetAdded = 19;
}
string space = 7;
string aclHeadId = 14;
@@ -1138,6 +1140,12 @@ message Notification {
enum ActionType {
CLOSE = 0;
}
+
+ message AutoTypeWidgetAdded {
+ string spaceId = 1;
+ string typePluralName = 2; // fallback to singular if missing
+ string widgetBlockId = 3;
+ }
}
message Export {
From 0356512e1c01349a2e5c9b83f30a2adb657bf3fe Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Mon, 24 Mar 2025 12:29:07 +0100
Subject: [PATCH 074/132] GO-4459: Simplify template exclusion in object
service
---
core/api/internal/object/service.go | 9 +---
core/api/internal/object/service_test.go | 52 ++----------------------
2 files changed, 6 insertions(+), 55 deletions(-)
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 36b5dcf99..52f805cf4 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -114,11 +114,6 @@ func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceServic
// ListObjects retrieves a paginated list of objects in a specific space.
func (s *ObjectService) ListObjects(ctx context.Context, spaceId string, offset int, limit int) (objects []Object, total int, hasMore bool, err error) {
- typeId, err := util.ResolveUniqueKeyToTypeId(s.mw, spaceId, "ot-template")
- if err != nil {
- return nil, 0, false, err
- }
-
resp := s.mw.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
@@ -139,9 +134,9 @@ func (s *ObjectService) ListObjects(ctx context.Context, spaceId string, offset
},
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyType.String(),
+ RelationKey: "type.uniqueKey",
Condition: model.BlockContentDataviewFilter_NotEqual,
- Value: pbtypes.String(typeId),
+ Value: pbtypes.String("ot-template"),
},
{
Operator: model.BlockContentDataviewFilter_No,
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 6fd190e2f..5bb40f904 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -66,28 +66,6 @@ func TestObjectService_ListObjects(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
- // Mock template type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String("ot-template"),
- },
- },
- Keys: []string{bundle.RelationKeyId.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
- },
- },
- },
- }).Once()
-
// Mock object search
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
@@ -108,9 +86,9 @@ func TestObjectService_ListObjects(t *testing.T) {
},
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyType.String(),
+ RelationKey: "type.uniqueKey",
Condition: model.BlockContentDataviewFilter_NotEqual,
- Value: pbtypes.String(mockedTypeId),
+ Value: pbtypes.String("ot-template"),
},
{
Operator: model.BlockContentDataviewFilter_No,
@@ -262,28 +240,6 @@ func TestObjectService_ListObjects(t *testing.T) {
ctx := context.Background()
fx := newFixture(t)
- // Mock template type resolution
- fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
- SpaceId: mockedSpaceId,
- Filters: []*model.BlockContentDataviewFilter{
- {
- RelationKey: bundle.RelationKeyUniqueKey.String(),
- Condition: model.BlockContentDataviewFilter_Equal,
- Value: pbtypes.String("ot-template"),
- },
- },
- Keys: []string{bundle.RelationKeyId.String()},
- }).Return(&pb.RpcObjectSearchResponse{
- Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
- Records: []*types.Struct{
- {
- Fields: map[string]*types.Value{
- bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
- },
- },
- },
- }).Once()
-
// Mock object search
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
@@ -304,9 +260,9 @@ func TestObjectService_ListObjects(t *testing.T) {
},
{
Operator: model.BlockContentDataviewFilter_No,
- RelationKey: bundle.RelationKeyType.String(),
+ RelationKey: "type.uniqueKey",
Condition: model.BlockContentDataviewFilter_NotEqual,
- Value: pbtypes.String(mockedTypeId),
+ Value: pbtypes.String("ot-template"),
},
{
Operator: model.BlockContentDataviewFilter_No,
From 11c1b9429803a5e9ce99eec66ddc64bcb9729220 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 13:39:01 +0100
Subject: [PATCH 075/132] GO-4459: Add support for queries in GetObjectsInList
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 5 +++--
core/api/internal/list/handler.go | 7 ++++++-
core/api/internal/list/service.go | 27 ++++++++++++++++++++++++++-
core/api/internal/object/service.go | 6 +++---
core/api/util/util.go | 26 +++++++++++++++++++++-----
7 files changed, 61 insertions(+), 14 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 4957bb441..abeb29d1c 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -9,7 +9,7 @@ const docTemplate = `{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index d93223be9..8d71916fc 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -2,7 +2,7 @@
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index a60f9afd1..b9f520b14 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1107,9 +1107,10 @@ paths:
/spaces/{space_id}/lists/{list_id}/{view_id}/objects:
get:
description: Returns a paginated list of objects that are associated with a
- specific list (or collection) within a space. This endpoint helps clients
+ specific list (query or collection) within a space. This endpoint helps clients
to manage grouped objects (for example, tasks within a list) by returning
- detailed object information for each item of the list.
+ detailed object information for each item of the list. View IDs can be obtained
+ from the block entry with ID "dataview" when retrieving the list object.
parameters:
- description: Space ID
in: path
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index 4fece4d47..8ce726fd3 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -12,7 +12,7 @@ import (
// GetObjectsInListHandler
//
// @Summary Get objects in list
-// @Description Returns a paginated list of objects that are associated with a specific list (or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list.
+// @Description Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID "dataview" when retrieving the list object.
// @Tags lists
// @Produce json
// @Param space_id path string true "Space ID"
@@ -36,7 +36,12 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
objects, total, hasMore, err := s.GetObjectsInList(c, spaceId, listId, viewId, offset, limit)
code := util.MapErrorCode(err,
+ util.ErrToCode(ErrFailedGetList, http.StatusNotFound),
+ util.ErrToCode(ErrFailedGetListDataview, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedGetListDataviewView, http.StatusInternalServerError),
+ util.ErrToCode(ErrUnsupportedListType, http.StatusInternalServerError),
util.ErrToCode(ErrFailedGetObjectsInList, http.StatusInternalServerError),
+ util.ErrToCode(util.ErrorTypeNotFound, http.StatusInternalServerError),
)
if code != http.StatusOK {
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index dea3f8571..cfa175b7a 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -6,6 +6,7 @@ import (
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/pagination"
+ "github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
@@ -16,6 +17,7 @@ var (
ErrFailedGetList = errors.New("failed to get list")
ErrFailedGetListDataview = errors.New("failed to get list dataview")
ErrFailedGetListDataviewView = errors.New("failed to get list dataview view")
+ ErrUnsupportedListType = errors.New("unsupported list type")
ErrFailedGetObjectsInList = errors.New("failed to get objects in list")
ErrFailedAddObjectsToList = errors.New("failed to add objects to list")
ErrFailedRemoveObjectsFromList = errors.New("failed to remove objects from list")
@@ -88,14 +90,37 @@ func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, list
return nil, 0, false, ErrFailedGetListDataview
}
+ var collectionId string
+ var source []string
+ listType := s.objectService.GetTypeFromDetails(resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details)
+
+ if listType.RecommendedLayout == "set" {
+ // for queries, we search within the space for objects of the setOf type
+ setOfValues := resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeySetOf.String()].GetListValue().Values
+ for _, value := range setOfValues {
+ typeKey, err := util.ResolveIdtoUniqueKey(s.mw, spaceId, value.GetStringValue())
+ if err != nil {
+ return nil, 0, false, err
+ }
+ source = append(source, typeKey)
+ }
+ } else if listType.RecommendedLayout == "collection" {
+ // for collections, we need to search within that collection
+ collectionId = listId
+ } else {
+ return nil, 0, false, ErrUnsupportedListType
+ }
+
+ // TODO: use subscription service with internal: 'true' to not send events to clients
searchResp := s.mw.ObjectSearchSubscribe(ctx, &pb.RpcObjectSearchSubscribeRequest{
SpaceId: spaceId,
Limit: int64(limit), // nolint: gosec
Offset: int64(offset), // nolint: gosec
Keys: []string{bundle.RelationKeyId.String()},
- CollectionId: listId,
Sorts: sorts,
Filters: filters,
+ Source: source,
+ CollectionId: collectionId,
})
// TODO: returned error from ObjectSearchSubscribe is inconsistent with other RPCs: Error is nil instead of Code being NULL
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 52f805cf4..d5cf23d08 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -207,7 +207,7 @@ func (s *ObjectService) GetObject(ctx context.Context, spaceId string, objectId
SpaceId: details[bundle.RelationKeySpaceId.String()].GetStringValue(),
Snippet: details[bundle.RelationKeySnippet.String()].GetStringValue(),
Layout: model.ObjectTypeLayout_name[int32(details[bundle.RelationKeyResolvedLayout.String()].GetNumberValue())],
- Type: s.getTypeFromDetails(details[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
+ Type: s.GetTypeFromDetails(details[bundle.RelationKeyType.String()].GetStringValue(), resp.ObjectView.Details),
Blocks: s.getBlocks(resp),
Properties: s.getProperties(resp),
}
@@ -545,8 +545,8 @@ func (s *ObjectService) GetTemplate(ctx context.Context, spaceId string, typeId
}, nil
}
-// getTypeFromDetails returns the type from the details of the ObjectShowResponse.
-func (s *ObjectService) getTypeFromDetails(typeId string, details []*model.ObjectViewDetailsSet) Type {
+// GetTypeFromDetails returns the type from the details of the ObjectShowResponse.
+func (s *ObjectService) GetTypeFromDetails(typeId string, details []*model.ObjectViewDetailsSet) Type {
var objectTypeDetail *types.Struct
for _, detail := range details {
if detail.Id == typeId {
diff --git a/core/api/util/util.go b/core/api/util/util.go
index c3c9f37bc..d6460c243 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -94,17 +94,33 @@ func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, u
Keys: []string{bundle.RelationKeyId.String()},
})
- if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
- return "", ErrFailedSearchType
- }
+ if resp.Error != nil {
+ if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
+ return "", ErrFailedSearchType
+ }
- if len(resp.Records) == 0 {
- return "", ErrorTypeNotFound
+ if len(resp.Records) == 0 {
+ return "", ErrorTypeNotFound
+ }
}
return resp.Records[0].Fields[bundle.RelationKeyId.String()].GetStringValue(), nil
}
+// ResolveIdtoUniqueKey resolves the type's ID to the unique key
+func ResolveIdtoUniqueKey(mw service.ClientCommandsServer, spaceId string, typeId string) (uniqueKey string, err error) {
+ resp := mw.ObjectShow(context.Background(), &pb.RpcObjectShowRequest{
+ SpaceId: spaceId,
+ ObjectId: typeId,
+ })
+
+ if resp.Error != nil && resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return "", ErrorTypeNotFound
+ }
+
+ return resp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(), nil
+}
+
// ResolveRelationKeyToPropertyName resolves the property key to the property's name
func ResolveRelationKeyToPropertyName(mw service.ClientCommandsServer, spaceId string, relationKey string) (property string, err error) {
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
From ea47186bd1b95f90d16b4f2479df524d7eeb9788 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 13:44:31 +0100
Subject: [PATCH 076/132] GO-4459: Fix list tests
---
core/api/internal/list/service_test.go | 112 +++++++++++++++++++++----
1 file changed, 97 insertions(+), 15 deletions(-)
diff --git a/core/api/internal/list/service_test.go b/core/api/internal/list/service_test.go
index d7c0cedbc..a2aeddc73 100644
--- a/core/api/internal/list/service_test.go
+++ b/core/api/internal/list/service_test.go
@@ -18,11 +18,14 @@ import (
)
const (
- mockedSpaceId = "mocked-space-id"
- mockedListId = "mocked-list-id"
- mockedViewId = "view-1"
- offset = 0
- limit = 100
+ mockedSpaceId = "mocked-space-id"
+ mockedListId = "mocked-list-id"
+ mockedTypeId = "mocked-type-id"
+ mockedSetOfTypeId = "mocked-set-of-type-id"
+ mockedUniueKey = "mocked-unique-key"
+ mockedViewId = "view-1"
+ offset = 0
+ limit = 100
)
type fixture struct {
@@ -74,7 +77,7 @@ func TestListService_GetObjectsInList(t *testing.T) {
Filters: filters,
}
- // Expect the ObjectShow call for the list to return a block with a dataview.
+ // Expect the ObjectShow call for the list to return the type in the details and dataview block.
fx.mwMock.
On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
SpaceId: mockedSpaceId,
@@ -83,6 +86,25 @@ func TestListService_GetObjectsInList(t *testing.T) {
Return(&pb.RpcObjectShowResponse{
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Id: mockedListId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeySetOf.String(): pbtypes.StringList([]string{mockedSetOfTypeId}),
+ },
+ },
+ },
+ {
+ Id: mockedTypeId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyRecommendedLayout.String(): pbtypes.Int64(int64(model.ObjectType_set)),
+ },
+ },
+ },
+ },
Blocks: []*model.Block{
{
Id: "dataview",
@@ -96,16 +118,38 @@ func TestListService_GetObjectsInList(t *testing.T) {
},
}, nil).Once()
+ // Expect the ObjectShow to return the type's unique key.
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedSetOfTypeId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Id: mockedSetOfTypeId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedUniueKey),
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
// Expect the ObjectSearchSubscribe call to return one record.
fx.mwMock.
On("ObjectSearchSubscribe", mock.Anything, &pb.RpcObjectSearchSubscribeRequest{
- SpaceId: mockedSpaceId,
- Limit: int64(limit),
- Offset: int64(offset),
- Keys: []string{bundle.RelationKeyId.String()},
- CollectionId: mockedListId,
- Sorts: sorts,
- Filters: filters,
+ SpaceId: mockedSpaceId,
+ Limit: int64(limit),
+ Offset: int64(offset),
+ Keys: []string{bundle.RelationKeyId.String()},
+ Sorts: sorts,
+ Filters: filters,
+ Source: []string{mockedUniueKey},
}).
Return(&pb.RpcObjectSearchSubscribeResponse{
Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_NULL},
@@ -295,6 +339,25 @@ func TestListService_GetObjectsInList(t *testing.T) {
Return(&pb.RpcObjectShowResponse{
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Id: mockedListId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeySetOf.String(): pbtypes.StringList([]string{mockedSetOfTypeId}),
+ },
+ },
+ },
+ {
+ Id: mockedTypeId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyRecommendedLayout.String(): pbtypes.Int64(int64(model.ObjectType_collection)),
+ },
+ },
+ },
+ },
Blocks: []*model.Block{
{
Id: "dataview",
@@ -315,9 +378,9 @@ func TestListService_GetObjectsInList(t *testing.T) {
Limit: int64(limit),
Offset: int64(offset),
Keys: []string{bundle.RelationKeyId.String()},
- CollectionId: mockedListId,
Sorts: sorts,
Filters: filters,
+ CollectionId: mockedListId,
}).
Return(&pb.RpcObjectSearchSubscribeResponse{
Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_UNKNOWN_ERROR},
@@ -351,6 +414,25 @@ func TestListService_GetObjectsInList(t *testing.T) {
Return(&pb.RpcObjectShowResponse{
Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Id: mockedListId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeySetOf.String(): pbtypes.StringList([]string{mockedSetOfTypeId}),
+ },
+ },
+ },
+ {
+ Id: mockedTypeId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyRecommendedLayout.String(): pbtypes.Int64(int64(model.ObjectType_collection)),
+ },
+ },
+ },
+ },
Blocks: []*model.Block{
{
Id: "dataview",
@@ -370,9 +452,9 @@ func TestListService_GetObjectsInList(t *testing.T) {
Limit: int64(limit),
Offset: int64(offset),
Keys: []string{bundle.RelationKeyId.String()},
- CollectionId: mockedListId,
Sorts: sorts,
Filters: filters,
+ CollectionId: mockedListId,
}).
Return(&pb.RpcObjectSearchSubscribeResponse{
Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_NULL},
From 18206b6ecbb8e396b4d4a7574c018adadcda0e11 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Tue, 25 Mar 2025 15:13:01 +0100
Subject: [PATCH 077/132] GO-5364 internal API to export the single object into
markdown into a byte slice
---
core/block/export/export.go | 49 +++++++++++++++++++++++++++++++++++--
core/block/export/writer.go | 43 ++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+), 2 deletions(-)
diff --git a/core/block/export/export.go b/core/block/export/export.go
index 9c34bf8ec..eed8135a5 100644
--- a/core/block/export/export.go
+++ b/core/block/export/export.go
@@ -69,6 +69,7 @@ var log = logging.Logger("anytype-mw-export")
type Export interface {
Export(ctx context.Context, req pb.RpcObjectListExportRequest) (path string, succeed int, err error)
+ ExportInMemory(ctx context.Context, spaceId string, objectIds []string, format model.ExportFormat, includeRelations bool) (res map[string][]byte, err error)
app.Component
}
@@ -114,10 +115,32 @@ func (e *export) Export(ctx context.Context, req pb.RpcObjectListExportRequest)
if err = queue.Start(); err != nil {
return
}
- exportCtx := newExportContext(e, req)
+ exportCtx := NewExportContext(e, req)
return exportCtx.exportObjects(ctx, queue)
}
+func (e *export) ExportInMemory(ctx context.Context, spaceId string, objectIds []string, format model.ExportFormat, includeRelations bool) (res map[string][]byte, err error) {
+ req := pb.RpcObjectListExportRequest{
+ SpaceId: spaceId,
+ ObjectIds: objectIds,
+ IncludeFiles: false,
+ Format: format,
+ IncludeNested: true,
+ }
+
+ res = make(map[string][]byte)
+ exportCtx := NewExportContext(e, req)
+ for _, objectId := range objectIds {
+ b, err := exportCtx.exportObject(ctx, objectId)
+ if err != nil {
+ return nil, err
+ }
+ res[objectId] = b
+ }
+
+ return res, nil
+}
+
func (e *export) finishWithNotification(spaceId string, exportFormat model.ExportFormat, queue process.Queue, err error) {
errCode := model.NotificationExport_NULL
if err != nil {
@@ -172,7 +195,7 @@ type exportContext struct {
*export
}
-func newExportContext(e *export, req pb.RpcObjectListExportRequest) *exportContext {
+func NewExportContext(e *export, req pb.RpcObjectListExportRequest) *exportContext {
ec := &exportContext{
path: req.Path,
spaceId: req.SpaceId,
@@ -224,6 +247,28 @@ func (e *exportContext) getStateFilters(id string) *state.Filters {
return nil
}
+// exportObject synchronously exports a single object and return the bytes slice
+func (e *exportContext) exportObject(ctx context.Context, objectId string) ([]byte, error) {
+ e.reqIds = []string{objectId}
+ e.includeArchive = true
+ err := e.docsForExport(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ inMemoryWriter := &InMemoryWriter{}
+ err = e.writeDoc(ctx, inMemoryWriter, objectId, e.docs.transformToDetailsMap())
+ if err != nil {
+ return nil, err
+ }
+
+ for _, v := range inMemoryWriter.data {
+ return v, nil
+ }
+
+ return nil, fmt.Errorf("failed to find data in writer")
+}
+
func (e *exportContext) exportObjects(ctx context.Context, queue process.Queue) (string, int, error) {
var (
err error
diff --git a/core/block/export/writer.go b/core/block/export/writer.go
index cc89bbb25..034f11ed8 100644
--- a/core/block/export/writer.go
+++ b/core/block/export/writer.go
@@ -149,3 +149,46 @@ func (d *zipWriter) Close() (err error) {
func getZipName(path string) string {
return filepath.Join(path, uniqName()+".zip")
}
+
+type InMemoryWriter struct {
+ data map[string][]byte
+ fn *namer
+ m sync.Mutex
+}
+
+func (d *InMemoryWriter) Namer() *namer {
+ d.m.Lock()
+ defer d.m.Unlock()
+ if d.fn == nil {
+ d.fn = newNamer()
+ }
+ return d.fn
+}
+
+func (d *InMemoryWriter) Path() string {
+ return ""
+}
+
+func (d *InMemoryWriter) WriteFile(filename string, r io.Reader, lastModifiedDate int64) (err error) {
+ d.m.Lock()
+ defer d.m.Unlock()
+ if d.data == nil {
+ d.data = make(map[string][]byte)
+ }
+ b, err := io.ReadAll(r)
+ if err != nil {
+ return
+ }
+ d.data[filename] = b
+ return
+}
+
+func (d *InMemoryWriter) Close() (err error) {
+ return nil
+}
+
+func (d *InMemoryWriter) GetData(id string) []byte {
+ d.m.Lock()
+ defer d.m.Unlock()
+ return d.data[id]
+}
From 9cc41e1be57dc768d0ab598c56b9cecbef289e0a Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 16:20:52 +0100
Subject: [PATCH 078/132] GO-4459: Refactor list views into separate endpoint
---
core/api/docs/docs.go | 4 +-
core/api/docs/swagger.json | 4 +-
core/api/docs/swagger.yaml | 236 ++++++++++++++++++----------
core/api/internal/list/handler.go | 43 ++++-
core/api/internal/list/model.go | 24 +++
core/api/internal/list/service.go | 78 +++++++++
core/api/internal/object/model.go | 28 ----
core/api/internal/object/service.go | 52 +-----
core/api/server/router.go | 1 +
9 files changed, 300 insertions(+), 170 deletions(-)
create mode 100644 core/api/internal/list/model.go
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index abeb29d1c..ac3dbaf0a 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 8d71916fc..567351214 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"dataview":{"$ref":"#/components/schemas/object.Dataview"},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.Dataview":{"description":"The dataview, applicable for list objects","properties":{"views":{"description":"The list of views","items":{"$ref":"#/components/schemas/object.View"},"type":"array","uniqueItems":false}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/object.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/object.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index b9f520b14..67bf0dfd9 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -26,6 +26,78 @@ components:
example: /path/to/export
type: string
type: object
+ list.Filter:
+ properties:
+ condition:
+ description: The filter condition
+ example: contains
+ type: string
+ format:
+ description: The format of the property used for filtering
+ example: text
+ type: string
+ id:
+ description: The id of the filter
+ example: 67bf3f21cda9134102e2422c
+ type: string
+ property_key:
+ description: The property key used for filtering
+ example: name
+ type: string
+ value:
+ description: The value used for filtering
+ example: Some value...
+ type: string
+ type: object
+ list.Sort:
+ properties:
+ format:
+ description: The format of the property used for sorting
+ example: text
+ type: string
+ id:
+ description: The id of the sort
+ example: 67bf3f21cda9134102e2422c
+ type: string
+ property_key:
+ description: The property key used for sorting
+ example: name
+ type: string
+ sort_type:
+ description: The sort direction
+ example: asc
+ type: string
+ type: object
+ list.View:
+ properties:
+ filters:
+ description: The list of filters
+ items:
+ $ref: '#/components/schemas/list.Filter'
+ type: array
+ uniqueItems: false
+ id:
+ description: The id of the view
+ example: 67bf3f21cda9134102e2422c
+ type: string
+ layout:
+ description: The layout of the view
+ enum:
+ - grid
+ - table
+ example: grid
+ type: string
+ name:
+ description: The name of the view
+ example: All
+ type: string
+ sorts:
+ description: The list of sorts
+ items:
+ $ref: '#/components/schemas/list.Sort'
+ type: array
+ uniqueItems: false
+ type: object
object.Block:
properties:
align:
@@ -49,8 +121,6 @@ components:
type: string
type: array
uniqueItems: false
- dataview:
- $ref: '#/components/schemas/object.Dataview'
file:
$ref: '#/components/schemas/object.File'
id:
@@ -99,16 +169,6 @@ components:
example: ot-page
type: string
type: object
- object.Dataview:
- description: The dataview, applicable for list objects
- properties:
- views:
- description: The list of views
- items:
- $ref: '#/components/schemas/object.View'
- type: array
- uniqueItems: false
- type: object
object.File:
description: The file of the block, if applicable
properties:
@@ -140,29 +200,6 @@ components:
description: The type of the file
type: string
type: object
- object.Filter:
- properties:
- condition:
- description: The filter condition
- example: contains
- type: string
- format:
- description: The format of the property used for filtering
- example: text
- type: string
- id:
- description: The id of the filter
- example: 67bf3f21cda9134102e2422c
- type: string
- property_key:
- description: The property key used for filtering
- example: name
- type: string
- value:
- description: The value used for filtering
- example: Some value...
- type: string
- type: object
object.Object:
description: The object
properties:
@@ -297,25 +334,6 @@ components:
example: https://example.com
type: string
type: object
- object.Sort:
- properties:
- format:
- description: The format of the property used for sorting
- example: text
- type: string
- id:
- description: The id of the sort
- example: 67bf3f21cda9134102e2422c
- type: string
- property_key:
- description: The property key used for sorting
- example: name
- type: string
- sort_type:
- description: The sort direction
- example: asc
- type: string
- type: object
object.Tag:
description: The select value, if applicable
properties:
@@ -432,35 +450,16 @@ components:
type:
$ref: '#/components/schemas/object.Type'
type: object
- object.View:
+ pagination.PaginatedResponse-list_View:
properties:
- filters:
- description: The list of filters
+ data:
+ description: The list of items in the current result set
items:
- $ref: '#/components/schemas/object.Filter'
- type: array
- uniqueItems: false
- id:
- description: The id of the view
- example: 67bf3f21cda9134102e2422c
- type: string
- layout:
- description: The layout of the view
- enum:
- - grid
- - table
- example: grid
- type: string
- name:
- description: The name of the view
- example: All
- type: string
- sorts:
- description: The list of sorts
- items:
- $ref: '#/components/schemas/object.Sort'
+ $ref: '#/components/schemas/list.View'
type: array
uniqueItems: false
+ pagination:
+ $ref: '#/components/schemas/pagination.PaginationMeta'
type: object
pagination.PaginatedResponse-object_Object:
properties:
@@ -1174,9 +1173,9 @@ paths:
- lists
/spaces/{space_id}/lists/{list_id}/objects:
post:
- description: Enables clients to add one or more objects to a specific list by
- submitting a JSON array of object IDs. Upon success, the endpoint returns
- a confirmation message. This endpoint is vital for building user interfaces
+ description: Enables clients to add one or more objects to a specific list (collection
+ only) by submitting a JSON array of object IDs. Upon success, the endpoint
+ returns a confirmation message. This endpoint is vital for building user interfaces
that allow drag‑and‑drop or multi‑select additions to collections.
parameters:
- description: Space ID
@@ -1238,11 +1237,11 @@ paths:
- lists
/spaces/{space_id}/lists/{list_id}/objects/{object_id}:
delete:
- description: Removes a given object from the specified list in a space. The
- endpoint takes the space, list, and object identifiers as path parameters.
- It's subject to rate limiting and returns a success message on completion.
- It is used for dynamically managing collections without affecting the underlying
- object data.
+ description: Removes a given object from the specified list (collection only)
+ in a space. The endpoint takes the space, list, and object identifiers as
+ path parameters. It's subject to rate limiting and returns a success message
+ on completion. It is used for dynamically managing collections without affecting
+ the underlying object data.
parameters:
- description: Space ID
in: path
@@ -1298,6 +1297,69 @@ paths:
summary: Remove object from list
tags:
- lists
+ /spaces/{space_id}/lists/{list_id}/views:
+ get:
+ description: Returns a paginated list of views defined for a specific list (query
+ or collection) within a space. Each view includes configuration details such
+ as layout, applied filters, and sorting options, enabling clients to render
+ the list according to user preferences and context. This endpoint supports
+ pagination parameters to control the number of views returned and the starting
+ point of the result set.
+ parameters:
+ - description: Space ID
+ in: path
+ name: space_id
+ required: true
+ schema:
+ type: string
+ - description: List ID
+ in: path
+ name: list_id
+ required: true
+ schema:
+ type: string
+ - description: The number of items to skip before starting to collect the result
+ set
+ in: query
+ name: offset
+ schema:
+ default: 0
+ type: integer
+ - description: The number of items to return
+ in: query
+ name: limit
+ schema:
+ type: integer
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/pagination.PaginatedResponse-list_View'
+ description: List of views
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.UnauthorizedError'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.NotFoundError'
+ description: Not found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/util.ServerError'
+ description: Internal server error
+ security:
+ - bearerauth: []
+ summary: Get list views
+ tags:
+ - lists
/spaces/{space_id}/members:
get:
description: Returns a paginated list of members belonging to the specified
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index 8ce726fd3..fcf15278c 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -9,6 +9,45 @@ import (
"github.com/anyproto/anytype-heart/core/api/util"
)
+// GetListViewsHandler
+//
+// @Summary Get list views
+// @Description Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.
+// @Tags lists
+// @Produce json
+// @Param space_id path string true "Space ID"
+// @Param list_id path string true "List ID"
+// @Param offset query int false "The number of items to skip before starting to collect the result set" default(0)
+// @Param limit query int false "The number of items to return"
+// @Success 200 {object} pagination.PaginatedResponse[View] "List of views"
+// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
+// @Failure 404 {object} util.NotFoundError "Not found"
+// @Failure 500 {object} util.ServerError "Internal server error"
+// @Security bearerauth
+// @Router /spaces/{space_id}/lists/{list_id}/views [get]
+func GetListViewsHandler(s *ListService) gin.HandlerFunc {
+ return func(c *gin.Context) {
+ spaceId := c.Param("space_id")
+ listId := c.Param("list_id")
+ offset := c.GetInt("offset")
+ limit := c.GetInt("limit")
+
+ views, total, hasMore, err := s.GetListViews(c, spaceId, listId, offset, limit)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrFailedGetList, http.StatusNotFound),
+ util.ErrToCode(ErrFailedGetListDataview, http.StatusInternalServerError),
+ )
+
+ if code != http.StatusOK {
+ apiErr := util.CodeToAPIError(code, err.Error())
+ c.JSON(code, apiErr)
+ return
+ }
+
+ pagination.RespondWithPagination(c, http.StatusOK, views, total, offset, limit, hasMore)
+ }
+}
+
// GetObjectsInListHandler
//
// @Summary Get objects in list
@@ -57,7 +96,7 @@ func GetObjectsInListHandler(s *ListService) gin.HandlerFunc {
// AddObjectsToListHandler
//
// @Summary Add objects to list
-// @Description Enables clients to add one or more objects to a specific list by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.
+// @Description Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.
// @Tags lists
// @Accept json
// @Produce json
@@ -101,7 +140,7 @@ func AddObjectsToListHandler(s *ListService) gin.HandlerFunc {
// RemoveObjectFromListHandler
//
// @Summary Remove object from list
-// @Description Removes a given object from the specified list in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.
+// @Description Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.
// @Tags lists
// @Produce json
// @Param space_id path string true "Space ID"
diff --git a/core/api/internal/list/model.go b/core/api/internal/list/model.go
new file mode 100644
index 000000000..e47d72cc5
--- /dev/null
+++ b/core/api/internal/list/model.go
@@ -0,0 +1,24 @@
+package list
+
+type View struct {
+ Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the view
+ Name string `json:"name" example:"All"` // The name of the view
+ Layout string `json:"layout" example:"grid" enums:"grid,table"` // The layout of the view
+ Filters []Filter `json:"filters"` // The list of filters
+ Sorts []Sort `json:"sorts"` // The list of sorts
+}
+
+type Filter struct {
+ Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the filter
+ PropertyKey string `json:"property_key" example:"name"` // The property key used for filtering
+ Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the property used for filtering
+ Condition string `json:"condition" example:"contains" enum:"equal,not_equal,greater,less,greater_or_equal,less_or_equal,like,not_like,in,not_in,empty,not_empty,all_in,not_all_in,exact_in,not_exact_in,exists"` // The filter condition
+ Value string `json:"value" example:"Some value..."` // The value used for filtering
+}
+
+type Sort struct {
+ Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the sort
+ PropertyKey string `json:"property_key" example:"name"` // The property key used for sorting
+ Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the property used for sorting
+ SortType string `json:"sort_type" example:"asc" enum:"asc,desc,custom"` // The sort direction
+}
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index cfa175b7a..bd5f3e295 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -4,6 +4,8 @@ import (
"context"
"errors"
+ "github.com/iancoleman/strcase"
+
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/pagination"
"github.com/anyproto/anytype-heart/core/api/util"
@@ -24,6 +26,7 @@ var (
)
type Service interface {
+ GetListViews(ctx context.Context, spaceId string, listId string, offset, limit int) ([]View, int, bool, error)
GetObjectsInList(ctx context.Context, spaceId string, listId string, viewId string, offset, limit int) ([]object.Object, int, bool, error)
AddObjectsToList(ctx context.Context, spaceId string, listId string, objectIds []string) error
RemoveObjectsFromList(ctx context.Context, spaceId string, listId string, objectIds []string) error
@@ -38,6 +41,71 @@ func NewService(mw service.ClientCommandsServer, objectService *object.ObjectSer
return &ListService{mw: mw, objectService: objectService}
}
+// GetListViews retrieves views of a list
+func (s *ListService) GetListViews(ctx context.Context, spaceId string, listId string, offset, limit int) ([]View, int, bool, error) {
+ resp := s.mw.ObjectShow(ctx, &pb.RpcObjectShowRequest{
+ SpaceId: spaceId,
+ ObjectId: listId,
+ })
+
+ if resp.Error != nil && resp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return nil, 0, false, ErrFailedGetList
+ }
+
+ var dataviewBlock *model.Block
+ for _, block := range resp.ObjectView.Blocks {
+ if block.Id == "dataview" {
+ dataviewBlock = block
+ break
+ }
+ }
+
+ if dataviewBlock == nil {
+ return nil, 0, false, ErrFailedGetListDataview
+ }
+
+ var views []View
+ switch content := dataviewBlock.Content.(type) {
+ case *model.BlockContentOfDataview:
+ for _, view := range content.Dataview.Views {
+ var filters []Filter
+ for _, f := range view.Filters {
+ filters = append(filters, Filter{
+ Id: f.Id,
+ PropertyKey: f.RelationKey,
+ Format: s.objectService.MapRelationFormat(f.Format),
+ Condition: strcase.ToSnake(model.BlockContentDataviewFilterCondition_name[int32(f.Condition)]),
+ Value: f.Value.GetStringValue(),
+ })
+ }
+ var sorts []Sort
+ for _, srt := range view.Sorts {
+ sorts = append(sorts, Sort{
+ Id: srt.Id,
+ PropertyKey: srt.RelationKey,
+ Format: s.objectService.MapRelationFormat(srt.Format),
+ SortType: strcase.ToSnake(model.BlockContentDataviewSortType_name[int32(srt.Type)]),
+ })
+
+ views = append(views, View{
+ Id: view.Id,
+ Name: view.Name,
+ Layout: s.mapDataviewTypeName(view.Type),
+ Filters: filters,
+ Sorts: sorts,
+ })
+ }
+ }
+ default:
+ return nil, 0, false, ErrFailedGetListDataview
+ }
+
+ total := len(views)
+ paginatedViews, hasMore := pagination.Paginate(views, offset, limit)
+
+ return paginatedViews, total, hasMore, nil
+}
+
// GetObjectsInList retrieves objects in a list
func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, listId string, viewId string, offset, limit int) ([]object.Object, int, bool, error) {
resp := s.mw.ObjectShow(ctx, &pb.RpcObjectShowRequest{
@@ -170,3 +238,13 @@ func (s *ListService) RemoveObjectsFromList(ctx context.Context, spaceId string,
return nil
}
+
+// mapDataviewTypeName maps the dataview type to a string.
+func (s *ListService) mapDataviewTypeName(dataviewType model.BlockContentDataviewViewType) string {
+ switch dataviewType {
+ case model.BlockContentDataviewView_Table:
+ return "grid"
+ default:
+ return strcase.ToSnake(model.BlockContentDataviewViewType_name[int32(dataviewType)])
+ }
+}
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index a864d48ac..40783fa74 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -39,7 +39,6 @@ type Block struct {
Text *Text `json:"text,omitempty"` // The text of the block, if applicable
File *File `json:"file,omitempty"` // The file of the block, if applicable
Property *Property `json:"property,omitempty"` // The property block, if applicable
- Dataview *Dataview `json:"dataview,omitempty"` // The dataview, applicable for list objects
}
type Text struct {
@@ -62,33 +61,6 @@ type File struct {
Style string `json:"style"` // The style of the file
}
-type Dataview struct {
- Views []View `json:"views"` // The list of views
-}
-
-type View struct {
- Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the view
- Name string `json:"name" example:"All"` // The name of the view
- Layout string `json:"layout" example:"grid" enums:"grid,table"` // The layout of the view
- Filters []Filter `json:"filters"` // The list of filters
- Sorts []Sort `json:"sorts"` // The list of sorts
-}
-
-type Filter struct {
- Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the filter
- PropertyKey string `json:"property_key" example:"name"` // The property key used for filtering
- Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the property used for filtering
- Condition string `json:"condition" example:"contains" enum:"equal,not_equal,greater,less,greater_or_equal,less_or_equal,like,not_like,in,not_in,empty,not_empty,all_in,not_all_in,exact_in,not_exact_in,exists"` // The filter condition
- Value string `json:"value" example:"Some value..."` // The value used for filtering
-}
-
-type Sort struct {
- Id string `json:"id" example:"67bf3f21cda9134102e2422c"` // The id of the sort
- PropertyKey string `json:"property_key" example:"name"` // The property key used for sorting
- Format string `json:"format" example:"text" enum:"text,number,select,multi_select,date,file,checkbox,url,email,phone,object"` // The format of the property used for sorting
- SortType string `json:"sort_type" example:"asc" enum:"asc,desc,custom"` // The sort direction
-}
-
type Property struct {
Id string `json:"id" example:"last_modified_date"` // The id of the property
Name string `json:"name" example:"Last modified date"` // The name of the property
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index d5cf23d08..8bbc608ba 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -770,7 +770,7 @@ func (s *ObjectService) convertValue(key string, value *types.Value, format stri
func (s *ObjectService) getPropertyFormatMap(propertyLinks []*model.RelationLink) map[string]string {
propertyFormatToName := make(map[int32]string, len(model.RelationFormat_name))
for k := range model.RelationFormat_name {
- propertyFormatToName[k] = s.mapRelationFormat(model.RelationFormat(k))
+ propertyFormatToName[k] = s.MapRelationFormat(model.RelationFormat(k))
}
propertyFormatMap := map[string]string{}
@@ -836,7 +836,6 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
var text *Text
var file *File
var property *Property
- var dataviewMapping *Dataview
switch content := block.Content.(type) {
case *model.BlockContentOfText:
@@ -864,40 +863,6 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
// TODO: is it sufficient to return the id only?
Id: content.Relation.Key,
}
- case *model.BlockContentOfDataview:
- var viewList []View
- for _, v := range content.Dataview.Views {
- var filters []Filter
- for _, f := range v.Filters {
- filters = append(filters, Filter{
- Id: f.Id,
- PropertyKey: f.RelationKey,
- Format: s.mapRelationFormat(f.Format),
- Condition: strcase.ToSnake(model.BlockContentDataviewFilterCondition_name[int32(f.Condition)]),
- Value: f.Value.GetStringValue(),
- })
- }
- var sorts []Sort
- for _, srt := range v.Sorts {
- sorts = append(sorts, Sort{
- Id: srt.Id,
- PropertyKey: srt.RelationKey,
- Format: s.mapRelationFormat(srt.Format),
- SortType: strcase.ToSnake(model.BlockContentDataviewSortType_name[int32(srt.Type)]),
- })
- }
- viewList = append(viewList, View{
- Id: v.Id,
- Name: v.Name,
- Layout: s.mapDataviewTypeName(v.Type),
- Filters: filters,
- Sorts: sorts,
- })
- }
- dataviewMapping = &Dataview{
- Views: viewList,
- }
-
}
// TODO: other content types?
@@ -910,15 +875,14 @@ func (s *ObjectService) getBlocks(resp *pb.RpcObjectShowResponse) []Block {
Text: text,
File: file,
Property: property,
- Dataview: dataviewMapping,
})
}
return blocks
}
-// mapRelationFormat maps the relation format to a string.
-func (s *ObjectService) mapRelationFormat(format model.RelationFormat) string {
+// MapRelationFormat maps the relation format to a string.
+func (s *ObjectService) MapRelationFormat(format model.RelationFormat) string {
switch format {
case model.RelationFormat_longtext:
return "text"
@@ -932,13 +896,3 @@ func (s *ObjectService) mapRelationFormat(format model.RelationFormat) string {
return strcase.ToSnake(model.RelationFormat_name[int32(format)])
}
}
-
-// mapDataviewTypeName maps the dataview type to a string.
-func (s *ObjectService) mapDataviewTypeName(dataviewType model.BlockContentDataviewViewType) string {
- switch dataviewType {
- case model.BlockContentDataviewView_Table:
- return "grid"
- default:
- return strcase.ToSnake(model.BlockContentDataviewViewType_name[int32(dataviewType)])
- }
-}
diff --git a/core/api/server/router.go b/core/api/server/router.go
index 7dc888a84..bc04565fd 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -69,6 +69,7 @@ func (s *Server) NewRouter(accountService account.Service, mw service.ClientComm
v1.POST("/spaces/:space_id/objects/:object_id/export/:format", export.GetObjectExportHandler(s.exportService))
// List
+ v1.GET("/spaces/:space_id/lists/:list_id/views", list.GetListViewsHandler(s.listService))
v1.GET("/spaces/:space_id/lists/:list_id/:view_id/objects", list.GetObjectsInListHandler(s.listService))
v1.POST("/spaces/:space_id/lists/:list_id/objects", list.AddObjectsToListHandler(s.listService))
v1.DELETE("/spaces/:space_id/lists/:list_id/objects/:object_id", s.rateLimit(maxWriteRequestsPerSecond), list.RemoveObjectFromListHandler(s.listService))
From 12a688b8124f1383007c376cf28f9c7c1bf45a9f Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 16:21:14 +0100
Subject: [PATCH 079/132] GO-4459: Fix pagination for GetObjectsInList
---
core/api/internal/list/service.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index bd5f3e295..6948bc5fc 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -197,10 +197,10 @@ func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, list
}
total := int(searchResp.Counters.Total)
- paginatedRecords, hasMore := pagination.Paginate(searchResp.Records, offset, limit)
+ hasMore := searchResp.Counters.Total > int64(offset+limit)
- objects := make([]object.Object, 0, len(paginatedRecords))
- for _, record := range paginatedRecords {
+ objects := make([]object.Object, 0, len(searchResp.Records))
+ for _, record := range searchResp.Records {
object, err := s.objectService.GetObject(ctx, spaceId, record.Fields[bundle.RelationKeyId.String()].GetStringValue())
if err != nil {
return nil, 0, false, err
From fafcf9f8623a4aaf99620dc1e22d2ea92630693d Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 16:33:15 +0100
Subject: [PATCH 080/132] GO-4459: Fix view append and add tests for
GetListViews
---
core/api/internal/list/service.go | 15 +-
core/api/internal/list/service_test.go | 246 ++++++++++++++++++++++++-
2 files changed, 250 insertions(+), 11 deletions(-)
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 6948bc5fc..78817233c 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -86,15 +86,14 @@ func (s *ListService) GetListViews(ctx context.Context, spaceId string, listId s
Format: s.objectService.MapRelationFormat(srt.Format),
SortType: strcase.ToSnake(model.BlockContentDataviewSortType_name[int32(srt.Type)]),
})
-
- views = append(views, View{
- Id: view.Id,
- Name: view.Name,
- Layout: s.mapDataviewTypeName(view.Type),
- Filters: filters,
- Sorts: sorts,
- })
}
+ views = append(views, View{
+ Id: view.Id,
+ Name: view.Name,
+ Layout: s.mapDataviewTypeName(view.Type),
+ Filters: filters,
+ Sorts: sorts,
+ })
}
default:
return nil, 0, false, ErrFailedGetListDataview
diff --git a/core/api/internal/list/service_test.go b/core/api/internal/list/service_test.go
index a2aeddc73..8ab9e373c 100644
--- a/core/api/internal/list/service_test.go
+++ b/core/api/internal/list/service_test.go
@@ -22,7 +22,7 @@ const (
mockedListId = "mocked-list-id"
mockedTypeId = "mocked-type-id"
mockedSetOfTypeId = "mocked-set-of-type-id"
- mockedUniueKey = "mocked-unique-key"
+ mockedUniqueKey = "mocked-unique-key"
mockedViewId = "view-1"
offset = 0
limit = 100
@@ -50,6 +50,246 @@ func newFixture(t *testing.T) *fixture {
}
}
+func TestListService_GetListViews(t *testing.T) {
+ ctx := context.Background()
+
+ t.Run("successful", func(t *testing.T) {
+ fx := newFixture(t)
+
+ // Prepare a view with one sort and one filter
+ sorts := []*model.BlockContentDataviewSort{
+ {
+ Id: "sort-1",
+ RelationKey: "dummy-sort",
+ Type: model.BlockContentDataviewSort_Asc,
+ },
+ }
+ filters := []*model.BlockContentDataviewFilter{
+ {
+ Id: "filter-1",
+ RelationKey: "dummy-filter",
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("dummy-value"),
+ },
+ }
+ view := &model.BlockContentDataviewView{
+ Id: "view-1",
+ Name: "Test View",
+ Sorts: sorts,
+ Filters: filters,
+ Type: model.BlockContentDataviewView_Table,
+ }
+
+ resp := &pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{view},
+ },
+ },
+ },
+ },
+ },
+ }
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(resp, nil).Once()
+
+ views, total, hasMore, err := fx.GetListViews(ctx, mockedSpaceId, mockedListId, offset, limit)
+ require.NoError(t, err)
+ require.Len(t, views, 1)
+ require.Equal(t, 1, total)
+ require.False(t, hasMore)
+
+ retView := views[0]
+ require.Equal(t, "view-1", retView.Id)
+ require.Equal(t, "Test View", retView.Name)
+ require.Len(t, retView.Filters, 1)
+ require.Len(t, retView.Sorts, 1)
+ })
+
+ t.Run("object show error", func(t *testing.T) {
+ fx := newFixture(t)
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_UNKNOWN_ERROR},
+ }, nil).Once()
+
+ _, _, _, err := fx.GetListViews(ctx, mockedSpaceId, mockedListId, offset, limit)
+ require.ErrorIs(t, err, ErrFailedGetList)
+ })
+
+ t.Run("no dataview block", func(t *testing.T) {
+ fx := newFixture(t)
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {Id: "non-dataview"},
+ },
+ },
+ }, nil).Once()
+
+ _, _, _, err := fx.GetListViews(ctx, mockedSpaceId, mockedListId, offset, limit)
+ require.ErrorIs(t, err, ErrFailedGetListDataview)
+ })
+
+ t.Run("invalid dataview content", func(t *testing.T) {
+ fx := newFixture(t)
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {Id: "dataview", Content: nil},
+ },
+ },
+ }, nil).Once()
+
+ _, _, _, err := fx.GetListViews(ctx, mockedSpaceId, mockedListId, offset, limit)
+ require.ErrorIs(t, err, ErrFailedGetListDataview)
+ })
+
+ t.Run("view with no sorts", func(t *testing.T) {
+ fx := newFixture(t)
+
+ // Create a view with filters but no sorts
+ filters := []*model.BlockContentDataviewFilter{
+ {
+ Id: "filter-1",
+ RelationKey: "dummy-filter",
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("dummy-value"),
+ },
+ }
+ view := &model.BlockContentDataviewView{
+ Id: "view-2",
+ Name: "No Sort View",
+ Sorts: []*model.BlockContentDataviewSort{},
+ Filters: filters,
+ Type: model.BlockContentDataviewView_Table,
+ }
+
+ resp := &pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{view},
+ },
+ },
+ },
+ },
+ },
+ }
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(resp, nil).Once()
+
+ views, total, hasMore, err := fx.GetListViews(ctx, mockedSpaceId, mockedListId, offset, limit)
+ require.NoError(t, err)
+ require.Len(t, views, 1)
+ require.Equal(t, 1, total)
+ require.False(t, hasMore)
+ })
+
+ t.Run("view with multiple sorts", func(t *testing.T) {
+ fx := newFixture(t)
+
+ // Create a view with 2 sorts
+ sorts := []*model.BlockContentDataviewSort{
+ {
+ Id: "sort-1",
+ RelationKey: "dummy-sort",
+ Type: model.BlockContentDataviewSort_Asc,
+ },
+ {
+ Id: "sort-2",
+ RelationKey: "dummy-sort2",
+ Type: model.BlockContentDataviewSort_Desc,
+ },
+ }
+ filters := []*model.BlockContentDataviewFilter{
+ {
+ Id: "filter-1",
+ RelationKey: "dummy-filter",
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("dummy-value"),
+ },
+ }
+ view := &model.BlockContentDataviewView{
+ Id: "view-3",
+ Name: "Multi-Sort View",
+ Sorts: sorts,
+ Filters: filters,
+ Type: model.BlockContentDataviewView_Table,
+ }
+
+ resp := &pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{view},
+ },
+ },
+ },
+ },
+ },
+ }
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(resp, nil).Once()
+
+ views, total, hasMore, err := fx.GetListViews(ctx, mockedSpaceId, mockedListId, offset, limit)
+ require.NoError(t, err)
+ require.Len(t, views, 1)
+ require.Equal(t, 1, total)
+ require.False(t, hasMore)
+
+ require.Equal(t, "view-3", views[0].Id)
+ require.Len(t, views[0].Sorts, 2)
+ })
+}
+
func TestListService_GetObjectsInList(t *testing.T) {
t.Run("successful", func(t *testing.T) {
@@ -132,7 +372,7 @@ func TestListService_GetObjectsInList(t *testing.T) {
Id: mockedSetOfTypeId,
Details: &types.Struct{
Fields: map[string]*types.Value{
- bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedUniueKey),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedUniqueKey),
},
},
},
@@ -149,7 +389,7 @@ func TestListService_GetObjectsInList(t *testing.T) {
Keys: []string{bundle.RelationKeyId.String()},
Sorts: sorts,
Filters: filters,
- Source: []string{mockedUniueKey},
+ Source: []string{mockedUniqueKey},
}).
Return(&pb.RpcObjectSearchSubscribeResponse{
Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_NULL},
From 2189444342c17adee08a84450803d4f5d27ac6d3 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 17:15:59 +0100
Subject: [PATCH 081/132] GO-4459: Change logic to no filtering on empty view
id for lists
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 11 ++++++-----
core/api/internal/list/handler.go | 2 +-
core/api/internal/list/service.go | 21 ++++++++-------------
5 files changed, 17 insertions(+), 21 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index ac3dbaf0a..afc11bae4 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -9,7 +9,7 @@ const docTemplate = `{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 567351214..65f2cb126 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -2,7 +2,7 @@
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID \"dataview\" when retrieving the list object.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 67bf0dfd9..e3a7ad9b5 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1105,11 +1105,12 @@ paths:
- spaces
/spaces/{space_id}/lists/{list_id}/{view_id}/objects:
get:
- description: Returns a paginated list of objects that are associated with a
- specific list (query or collection) within a space. This endpoint helps clients
- to manage grouped objects (for example, tasks within a list) by returning
- detailed object information for each item of the list. View IDs can be obtained
- from the block entry with ID "dataview" when retrieving the list object.
+ description: Returns a paginated list of objects associated with a specific
+ list (query or collection) within a space. When a view ID is provided, the
+ objects are filtered and sorted according to the view's configuration. If
+ no view ID is specified, all list objects are returned without filtering and
+ sorting. This endpoint helps clients to manage grouped objects (for example,
+ tasks within a list) by returning information for each item of the list.
parameters:
- description: Space ID
in: path
diff --git a/core/api/internal/list/handler.go b/core/api/internal/list/handler.go
index fcf15278c..a56841e28 100644
--- a/core/api/internal/list/handler.go
+++ b/core/api/internal/list/handler.go
@@ -51,7 +51,7 @@ func GetListViewsHandler(s *ListService) gin.HandlerFunc {
// GetObjectsInListHandler
//
// @Summary Get objects in list
-// @Description Returns a paginated list of objects that are associated with a specific list (query or collection) within a space. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning detailed object information for each item of the list. View IDs can be obtained from the block entry with ID "dataview" when retrieving the list object.
+// @Description Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.
// @Tags lists
// @Produce json
// @Param space_id path string true "Space ID"
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 78817233c..2cc463abe 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -133,26 +133,21 @@ func (s *ListService) GetObjectsInList(ctx context.Context, spaceId string, list
switch content := dataviewBlock.Content.(type) {
case *model.BlockContentOfDataview:
- var targetView *model.BlockContentDataviewView
- if viewId == "" && len(content.Dataview.Views) > 0 {
- // fallback to first view when view id is empty
- targetView = content.Dataview.Views[0]
- } else if viewId != "" {
+ // if view not specified: return all objects without filtering and sorting
+ if viewId != "" {
+ var targetView *model.BlockContentDataviewView
for _, view := range content.Dataview.Views {
if view.Id == viewId {
targetView = view
break
}
}
+ if targetView == nil {
+ return nil, 0, false, ErrFailedGetListDataviewView
+ }
+ sorts = targetView.Sorts
+ filters = targetView.Filters
}
-
- if targetView == nil {
- return nil, 0, false, ErrFailedGetListDataviewView
- }
-
- // use the sorts and filters from the selected view
- sorts = targetView.Sorts
- filters = targetView.Filters
default:
return nil, 0, false, ErrFailedGetListDataview
}
From dbd2e3a1b78f0a0c6f63d8eae7e0d2a589e3d2cd Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 17:39:18 +0100
Subject: [PATCH 082/132] GO-4459: Fix list tests
---
core/api/internal/list/service_test.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/api/internal/list/service_test.go b/core/api/internal/list/service_test.go
index 8ab9e373c..c688edf49 100644
--- a/core/api/internal/list/service_test.go
+++ b/core/api/internal/list/service_test.go
@@ -427,7 +427,7 @@ func TestListService_GetObjectsInList(t *testing.T) {
}, nil).Once()
// when
- objects, total, hasMore, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+ objects, total, hasMore, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, mockedViewId, offset, limit)
// then
require.NoError(t, err)
@@ -627,7 +627,7 @@ func TestListService_GetObjectsInList(t *testing.T) {
}, nil).Once()
// when
- _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+ _, _, _, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, mockedViewId, offset, limit)
// then
require.ErrorIs(t, err, ErrFailedGetObjectsInList)
From 2abbc574d5b3fd83105785cc19d2ff73fca89162 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 17:49:34 +0100
Subject: [PATCH 083/132] GO-4459: Add list test for empty view id
---
core/api/internal/list/service_test.go | 126 +++++++++++++++++++++++++
1 file changed, 126 insertions(+)
diff --git a/core/api/internal/list/service_test.go b/core/api/internal/list/service_test.go
index c688edf49..cd4295092 100644
--- a/core/api/internal/list/service_test.go
+++ b/core/api/internal/list/service_test.go
@@ -438,6 +438,132 @@ func TestListService_GetObjectsInList(t *testing.T) {
require.Equal(t, "Object One", objects[0].Name)
})
+ t.Run("successful with empty viewId", func(t *testing.T) {
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // Prepare an ObjectShow response with a dataview block containing a view (which will not be used since viewId is empty)
+ resp := &pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Id: mockedListId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyType.String(): pbtypes.String(mockedTypeId),
+ bundle.RelationKeySetOf.String(): pbtypes.StringList([]string{mockedSetOfTypeId}),
+ },
+ },
+ },
+ {
+ Id: mockedTypeId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyRecommendedLayout.String(): pbtypes.Int64(int64(model.ObjectType_collection)),
+ },
+ },
+ },
+ },
+ Blocks: []*model.Block{
+ {
+ Id: "dataview",
+ Content: &model.BlockContentOfDataview{
+ Dataview: &model.BlockContentDataview{
+ Views: []*model.BlockContentDataviewView{
+ {
+ Id: mockedListId,
+ Sorts: []*model.BlockContentDataviewSort{
+ {
+ Id: "view_sort",
+ RelationKey: bundle.RelationKeyLastModifiedDate.String(),
+ Format: model.RelationFormat_date,
+ Type: model.BlockContentDataviewSort_Asc,
+ },
+ },
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Id: "view_filter",
+ RelationKey: bundle.RelationKeyStatus.String(),
+ Format: model.RelationFormat_longtext,
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("active"),
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: mockedListId,
+ }).
+ Return(resp, nil).Once()
+
+ // Since viewId is empty, sorts and filters should be nil.
+ fx.mwMock.
+ On("ObjectSearchSubscribe", mock.Anything, &pb.RpcObjectSearchSubscribeRequest{
+ SpaceId: mockedSpaceId,
+ Limit: int64(limit),
+ Offset: int64(offset),
+ Keys: []string{bundle.RelationKeyId.String()},
+ Sorts: nil,
+ Filters: nil,
+ CollectionId: mockedListId,
+ }).
+ Return(&pb.RpcObjectSearchSubscribeResponse{
+ Error: &pb.RpcObjectSearchSubscribeResponseError{Code: pb.RpcObjectSearchSubscribeResponseError_NULL},
+ Counters: &pb.EventObjectSubscriptionCounters{Total: 1},
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("object-1"),
+ },
+ },
+ },
+ }, nil).Once()
+
+ // Expect the ObjectShow call for "object-1" to return its details.
+ fx.mwMock.
+ On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: "object-1",
+ }).
+ Return(&pb.RpcObjectShowResponse{
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Id: "object-1",
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("object-1"),
+ bundle.RelationKeyName.String(): pbtypes.String("Object One"),
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
+ // when
+ objects, total, hasMore, err := fx.GetObjectsInList(ctx, mockedSpaceId, mockedListId, "", offset, limit)
+
+ // then
+ require.NoError(t, err)
+ require.Len(t, objects, 1)
+ require.Equal(t, 1, total)
+ require.False(t, hasMore)
+ require.Equal(t, "object-1", objects[0].Id)
+ require.Equal(t, "Object One", objects[0].Name)
+ })
+
t.Run("object show error", func(t *testing.T) {
// given
ctx := context.Background()
From 276efcabb9629cd7078b3b7d23ef1b88a56bd5db Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Tue, 25 Mar 2025 17:57:07 +0100
Subject: [PATCH 084/132] GO-5364 deeplink paths for single object export
---
core/block/export/export.go | 23 +++++++---
core/block/export/writer.go | 46 +++++++++++++++----
.../import/markdown/anymark/anyblocks.go | 2 +-
pkg/lib/mill/image_resize.go | 8 ++++
4 files changed, 61 insertions(+), 18 deletions(-)
diff --git a/core/block/export/export.go b/core/block/export/export.go
index eed8135a5..5d87faff1 100644
--- a/core/block/export/export.go
+++ b/core/block/export/export.go
@@ -39,6 +39,7 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/database"
+ "github.com/anyproto/anytype-heart/pkg/lib/gateway"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore"
"github.com/anyproto/anytype-heart/pkg/lib/logging"
@@ -82,6 +83,7 @@ type export struct {
accountService account.Service
notificationService notifications.Notifications
processService process.Service
+ gatewayService gateway.Gateway
}
func New() Export {
@@ -97,6 +99,7 @@ func (e *export) Init(a *app.App) (err error) {
e.spaceService = app.MustComponent[space.Service](a)
e.accountService = app.MustComponent[account.Service](a)
e.notificationService = app.MustComponent[notifications.Notifications](a)
+ e.gatewayService = app.MustComponent[gateway.Gateway](a)
return
}
@@ -115,7 +118,7 @@ func (e *export) Export(ctx context.Context, req pb.RpcObjectListExportRequest)
if err = queue.Start(); err != nil {
return
}
- exportCtx := NewExportContext(e, req)
+ exportCtx := newExportContext(e, req)
return exportCtx.exportObjects(ctx, queue)
}
@@ -129,7 +132,7 @@ func (e *export) ExportInMemory(ctx context.Context, spaceId string, objectIds [
}
res = make(map[string][]byte)
- exportCtx := NewExportContext(e, req)
+ exportCtx := newExportContext(e, req)
for _, objectId := range objectIds {
b, err := exportCtx.exportObject(ctx, objectId)
if err != nil {
@@ -191,11 +194,11 @@ type exportContext struct {
relations map[string]struct{}
setOfList map[string]struct{}
objectTypes map[string]struct{}
-
+ gatewayUrl string
*export
}
-func NewExportContext(e *export, req pb.RpcObjectListExportRequest) *exportContext {
+func newExportContext(e *export, req pb.RpcObjectListExportRequest) *exportContext {
ec := &exportContext{
path: req.Path,
spaceId: req.SpaceId,
@@ -213,8 +216,8 @@ func NewExportContext(e *export, req pb.RpcObjectListExportRequest) *exportConte
setOfList: make(map[string]struct{}),
objectTypes: make(map[string]struct{}),
relations: make(map[string]struct{}),
-
- export: e,
+ gatewayUrl: "http://" + e.gatewayService.Addr(),
+ export: e,
}
return ec
}
@@ -256,7 +259,13 @@ func (e *exportContext) exportObject(ctx context.Context, objectId string) ([]by
return nil, err
}
- inMemoryWriter := &InMemoryWriter{}
+ var docNamer Namer
+ if e.format == model.Export_Markdown {
+ docNamer = &deepLinkNamer{gatewayUrl: e.gatewayUrl}
+ } else {
+ docNamer = newNamer()
+ }
+ inMemoryWriter := &InMemoryWriter{fn: docNamer}
err = e.writeDoc(ctx, inMemoryWriter, objectId, e.docs.transformToDetailsMap())
if err != nil {
return nil, err
diff --git a/core/block/export/writer.go b/core/block/export/writer.go
index 034f11ed8..87541154b 100644
--- a/core/block/export/writer.go
+++ b/core/block/export/writer.go
@@ -4,22 +4,28 @@ import (
"archive/zip"
"fmt"
"io"
+ "net/url"
"os"
"path"
"path/filepath"
"sync"
"time"
+ "github.com/anyproto/anytype-heart/pkg/lib/mill"
"github.com/anyproto/anytype-heart/util/anyerror"
)
type writer interface {
Path() string
- Namer() *namer
+ Namer() Namer
WriteFile(filename string, r io.Reader, lastModifiedDate int64) (err error)
Close() (err error)
}
+type Namer interface {
+ Get(path, hash, title, ext string) (name string)
+}
+
func uniqName() string {
return time.Now().Format("Anytype.20060102.150405.99")
}
@@ -44,7 +50,7 @@ type dirWriter struct {
m sync.Mutex
}
-func (d *dirWriter) Namer() *namer {
+func (d *dirWriter) Namer() Namer {
d.m.Lock()
defer d.m.Unlock()
if d.fn == nil {
@@ -108,7 +114,7 @@ type zipWriter struct {
fn *namer
}
-func (d *zipWriter) Namer() *namer {
+func (d *zipWriter) Namer() Namer {
d.m.Lock()
defer d.m.Unlock()
if d.fn == nil {
@@ -152,16 +158,11 @@ func getZipName(path string) string {
type InMemoryWriter struct {
data map[string][]byte
- fn *namer
+ fn Namer
m sync.Mutex
}
-func (d *InMemoryWriter) Namer() *namer {
- d.m.Lock()
- defer d.m.Unlock()
- if d.fn == nil {
- d.fn = newNamer()
- }
+func (d *InMemoryWriter) Namer() Namer {
return d.fn
}
@@ -192,3 +193,28 @@ func (d *InMemoryWriter) GetData(id string) []byte {
defer d.m.Unlock()
return d.data[id]
}
+
+// deepLinkNamer used to render a single-object export, in md format
+type deepLinkNamer struct {
+ gatewayUrl string
+}
+
+func (fn *deepLinkNamer) Get(path, hash, title, ext string) (name string) {
+ if ext == ".md" {
+ // object links via deeplink to the app
+ return "anytype://object?objectId=" + hash
+ }
+
+ // files links via gateway
+ u, err := url.Parse(fn.gatewayUrl)
+ if err != nil {
+ return "anytype://object?objectId=" + hash
+ }
+ if mill.IsImageExt(ext) {
+ u.Path = "image/" + hash
+ } else {
+ u.Path = "file/" + hash
+ }
+
+ return u.String()
+}
diff --git a/core/block/import/markdown/anymark/anyblocks.go b/core/block/import/markdown/anymark/anyblocks.go
index eeea01d64..aa43abd81 100644
--- a/core/block/import/markdown/anymark/anyblocks.go
+++ b/core/block/import/markdown/anymark/anyblocks.go
@@ -98,7 +98,7 @@ func ConvertTextToFile(filePath string) *model.BlockContentOfFile {
return nil
}
- imageFormats := []string{"jpg", "jpeg", "png", "gif", "webp"}
+ imageFormats := []string{"jpg", "jpeg", "png", "gif", "webp", "heic", "heif", "bmp", "tiff", "psd", "ico"}
videoFormats := []string{"mp4", "m4v", "mov"}
audioFormats := []string{"mp3", "ogg", "wav", "m4a", "flac"}
pdfFormat := "pdf"
diff --git a/pkg/lib/mill/image_resize.go b/pkg/lib/mill/image_resize.go
index e49fd09e4..a14933dda 100644
--- a/pkg/lib/mill/image_resize.go
+++ b/pkg/lib/mill/image_resize.go
@@ -42,6 +42,14 @@ const (
TIFF Format = "tiff"
)
+func IsImageExt(ext string) bool {
+ switch strings.ToLower(strings.TrimPrefix(ext, ".")) {
+ case "jpg", "jpeg", "png", "gif", "ico", "webp", "heic", "heif", "bmp", "tiff", "psd":
+ return true
+ }
+ return false
+}
+
func IsImage(mime string) bool {
parts := strings.SplitN(mime, "/", 2)
if len(parts) == 1 {
From fdd7085404742bcc0683c2e080dd77b7a964d68f Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 18:17:27 +0100
Subject: [PATCH 085/132] GO-4459: Add tests for GetSpace and GetMember
---
core/api/internal/space/service_test.go | 367 ++++++++++++++++++++++++
1 file changed, 367 insertions(+)
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index 519c8ec35..35bea6a63 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -188,6 +188,173 @@ func TestSpaceService_ListSpaces(t *testing.T) {
})
}
+func TestSpaceService_GetSpace(t *testing.T) {
+ t.Run("successful retrieval of space", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: techSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyTargetSpaceId.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("space-id"),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeySpaceLocalStatus.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyTargetSpaceId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
+ bundle.RelationKeyTargetSpaceId.String(): pbtypes.String("space-id"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ fx.mwMock.On("WorkspaceOpen", mock.Anything, mock.Anything).Return(&pb.RpcWorkspaceOpenResponse{
+ Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
+ Info: &model.AccountInfo{
+ HomeObjectId: "home-object-id",
+ ArchiveObjectId: "archive-object-id",
+ ProfileObjectId: "profile-object-id",
+ MarketplaceWorkspaceId: "marketplace-workspace-id",
+ WorkspaceObjectId: "workspace-object-id",
+ DeviceId: "device-id",
+ AccountSpaceId: "account-space-id",
+ WidgetsId: "widgets-id",
+ SpaceViewId: "space-view-id",
+ TechSpaceId: "tech-space-id",
+ GatewayUrl: "gateway-url",
+ LocalStoragePath: "local-storage-path",
+ TimeZone: "time-zone",
+ AnalyticsId: "analytics-id",
+ NetworkId: "network-id",
+ },
+ }, nil).Once()
+
+ // when
+ space, err := fx.GetSpace(nil, "space-id")
+
+ // then
+ require.NoError(t, err)
+ require.Equal(t, "My Workspace", space.Name)
+ require.Equal(t, "space-id", space.Id)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("🚀")}, space.Icon)
+ require.Equal(t, "gateway-url", space.GatewayUrl)
+ require.Equal(t, "network-id", space.NetworkId)
+ })
+
+ t.Run("workspace not found", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: techSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyTargetSpaceId.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("space-id"),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeySpaceLocalStatus.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyTargetSpaceId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{},
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ // when
+ space, err := fx.GetSpace(nil, "space-id")
+
+ // then
+ require.ErrorIs(t, err, ErrWorkspaceNotFound)
+ require.Equal(t, Space{}, space)
+ })
+
+ t.Run("failed workspace open", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: techSpaceId,
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyTargetSpaceId.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("space-id"),
+ },
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeySpaceLocalStatus.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyTargetSpaceId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
+ bundle.RelationKeyTargetSpaceId.String(): pbtypes.String("space-id"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ fx.mwMock.On("WorkspaceOpen", mock.Anything, mock.Anything).
+ Return(&pb.RpcWorkspaceOpenResponse{
+ Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_UNKNOWN_ERROR},
+ }, nil).Once()
+
+ // when
+ space, err := fx.GetSpace(nil, "space-id")
+
+ // then
+ require.ErrorIs(t, err, ErrFailedOpenWorkspace)
+ require.Equal(t, Space{}, space)
+ })
+}
+
func TestSpaceService_CreateSpace(t *testing.T) {
t.Run("successful create space", func(t *testing.T) {
// given
@@ -404,3 +571,203 @@ func TestSpaceService_ListMembers(t *testing.T) {
require.False(t, hasMore)
})
}
+
+func TestSpaceService_GetMember(t *testing.T) {
+ t.Run("successful retrieval of member", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-id"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-id"),
+ bundle.RelationKeyName.String(): pbtypes.String("John Doe"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String("icon.png"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-id"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("john.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Owner)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ // when
+ member, err := fx.GetMember(nil, "space-id", "member-id")
+
+ // then
+ require.NoError(t, err)
+ require.Equal(t, "member-id", member.Id)
+ require.Equal(t, "John Doe", member.Name)
+ require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/icon.png`), *member.Icon.File, "Icon URL does not match")
+ require.Equal(t, "member-id", member.Identity)
+ require.Equal(t, "john.any", member.GlobalName)
+ require.Equal(t, "active", member.Status)
+ require.Equal(t, "owner", member.Role)
+ })
+
+ t.Run("member not found", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-id")},
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{},
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ // when
+ member, err := fx.GetMember(nil, "space-id", "member-id")
+
+ // then
+ require.ErrorIs(t, err, ErrMemberNotFound)
+ require.Equal(t, Member{}, member)
+ })
+ t.Run("failed get member", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-id"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-id"),
+ bundle.RelationKeyName.String(): pbtypes.String("John Doe"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String("icon.png"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-id"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("john.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Owner)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_UNKNOWN_ERROR},
+ }).Once()
+
+ // when
+ member, err := fx.GetMember(nil, "space-id", "member-id")
+
+ // then
+ require.ErrorIs(t, err, ErrFailedGetMember)
+ require.Equal(t, Member{}, member)
+ })
+
+ t.Run("successful retrieval of member with participant id", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ participantId := "_participant123"
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyId.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String(participantId),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String(participantId),
+ bundle.RelationKeyName.String(): pbtypes.String("Alice"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("😊"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String("participant.png"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("alice-identity"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("alice.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Writer)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ // when
+ member, err := fx.GetMember(nil, "space-id", participantId)
+
+ // then
+ require.NoError(t, err)
+ require.Equal(t, participantId, member.Id)
+ require.Equal(t, "Alice", member.Name)
+ require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/participant.png`), *member.Icon.File, "Icon URL does not match")
+ require.Equal(t, "alice-identity", member.Identity)
+ require.Equal(t, "alice.any", member.GlobalName)
+ require.Equal(t, "active", member.Status)
+ require.Equal(t, "editor", member.Role)
+ })
+}
From 937fb0440318a9c6a8b66bfe50199536f9a7a6c1 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 18:19:13 +0100
Subject: [PATCH 086/132] GO-4459: Update member retrieval documentation to
clarify member_id parameter usage
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 6 ++++--
core/api/internal/space/handler.go | 2 +-
4 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index afc11bae4..b55186eb7 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -9,7 +9,7 @@ const docTemplate = `{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 65f2cb126..23b399fca 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -2,7 +2,7 @@
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index e3a7ad9b5..7204c1b35 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -1418,8 +1418,10 @@ paths:
get:
description: Fetches detailed information about a single member within a space.
The endpoint returns the member’s identifier, name, icon, identity, global
- name, status and role. This is useful for user profile pages, permission management,
- and displaying member-specific information in collaborative environments.
+ name, status and role. The member_id path parameter can be provided as either
+ the member's ID (starting with `_participant`) or the member's identity.
+ This is useful for user profile pages, permission management, and displaying
+ member-specific information in collaborative environments.
parameters:
- description: Space ID
in: path
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 7f6aab9ad..ab4107fc6 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -153,7 +153,7 @@ func GetMembersHandler(s *SpaceService) gin.HandlerFunc {
// GetMemberHandler retrieves a member in a space
//
// @Summary Get member
-// @Description Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.
+// @Description Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.
// @Tags members
// @Produce json
// @Param space_id path string true "Space ID"
From e536f8bf370b3a26d22007be68593ee72d54a6ea Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Tue, 25 Mar 2025 18:30:03 +0100
Subject: [PATCH 087/132] GO-5364 ObjectExport
single object export/deeplink linking for md
---
clientlibrary/service/service.pb.go | 737 ++--
core/block/export/export.go | 49 +-
core/block/export/writer.go | 6 +-
.../import/markdown/anymark/anyblocks.go | 9 +-
core/export.go | 28 +
docs/proto.md | 79 +
pb/commands.pb.go | 3556 +++++++++++------
pb/protos/commands.proto | 29 +
pb/protos/service/service.proto | 1 +
pb/service/service.pb.go | 736 ++--
10 files changed, 3171 insertions(+), 2059 deletions(-)
diff --git a/clientlibrary/service/service.pb.go b/clientlibrary/service/service.pb.go
index b54493d9c..344ce49f7 100644
--- a/clientlibrary/service/service.pb.go
+++ b/clientlibrary/service/service.pb.go
@@ -25,356 +25,356 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
- // 5574 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdf, 0x8f, 0x1c, 0x49,
- 0x52, 0xf8, 0xb7, 0x5f, 0xbe, 0xfb, 0xa5, 0x8e, 0x5b, 0xa0, 0x17, 0x96, 0xbd, 0xe5, 0xce, 0xf6,
- 0x7a, 0xed, 0x19, 0xdb, 0xe3, 0xe9, 0xf1, 0xda, 0xfb, 0x8b, 0x3b, 0x24, 0x68, 0xcf, 0xd8, 0xb3,
- 0x73, 0x37, 0x33, 0x3b, 0x4c, 0xf7, 0xd8, 0x62, 0x25, 0x24, 0x6a, 0xba, 0x72, 0x7a, 0x8a, 0xa9,
- 0xae, 0xac, 0xab, 0xca, 0x6e, 0xbb, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x5f, 0x82,
- 0x27, 0x24, 0xfe, 0x02, 0xfe, 0x0c, 0x1e, 0xef, 0x91, 0x47, 0xb4, 0xfb, 0x2f, 0x20, 0x9e, 0x51,
- 0x65, 0x66, 0xe5, 0x8f, 0xa8, 0x88, 0xac, 0x9a, 0xe5, 0xc9, 0xd6, 0xc4, 0x27, 0x22, 0x32, 0x2b,
- 0x23, 0x33, 0x23, 0xb3, 0xb2, 0xb2, 0xa3, 0x9b, 0xc5, 0xf9, 0x4e, 0x51, 0x72, 0xc1, 0xab, 0x9d,
- 0x8a, 0x95, 0xab, 0x74, 0xc6, 0x9a, 0x7f, 0x47, 0xf2, 0xcf, 0xc3, 0x37, 0xe3, 0x7c, 0x2d, 0xd6,
- 0x05, 0x7b, 0xef, 0x5d, 0x4b, 0xce, 0xf8, 0x62, 0x11, 0xe7, 0x49, 0xa5, 0x90, 0xf7, 0xde, 0xb1,
- 0x12, 0xb6, 0x62, 0xb9, 0xd0, 0x7f, 0x7f, 0xfc, 0xdf, 0xff, 0x33, 0x88, 0xde, 0xda, 0xcd, 0x52,
- 0x96, 0x8b, 0x5d, 0xad, 0x31, 0xfc, 0x32, 0xfa, 0xf6, 0xb8, 0x28, 0xf6, 0x99, 0x78, 0xc1, 0xca,
- 0x2a, 0xe5, 0xf9, 0xf0, 0x83, 0x91, 0x76, 0x30, 0x3a, 0x2d, 0x66, 0xa3, 0x71, 0x51, 0x8c, 0xac,
- 0x70, 0x74, 0xca, 0x7e, 0xbc, 0x64, 0x95, 0x78, 0xef, 0x4e, 0x18, 0xaa, 0x0a, 0x9e, 0x57, 0x6c,
- 0x78, 0x11, 0xfd, 0xd2, 0xb8, 0x28, 0x26, 0x4c, 0xec, 0xb1, 0xba, 0x02, 0x13, 0x11, 0x0b, 0x36,
- 0xdc, 0x6c, 0xa9, 0xfa, 0x80, 0xf1, 0x71, 0xaf, 0x1b, 0xd4, 0x7e, 0xa6, 0xd1, 0xb7, 0x6a, 0x3f,
- 0x97, 0x4b, 0x91, 0xf0, 0x57, 0xf9, 0xf0, 0xfd, 0xb6, 0xa2, 0x16, 0x19, 0xdb, 0xb7, 0x43, 0x88,
- 0xb6, 0xfa, 0x32, 0xfa, 0xf9, 0x97, 0x71, 0x96, 0x31, 0xb1, 0x5b, 0xb2, 0xba, 0xe0, 0xbe, 0x8e,
- 0x12, 0x8d, 0x94, 0xcc, 0xd8, 0xfd, 0x20, 0xc8, 0x68, 0xc3, 0x5f, 0x46, 0xdf, 0x56, 0x92, 0x53,
- 0x36, 0xe3, 0x2b, 0x56, 0x0e, 0x51, 0x2d, 0x2d, 0x24, 0x1e, 0x79, 0x0b, 0x82, 0xb6, 0x77, 0x79,
- 0xbe, 0x62, 0xa5, 0xc0, 0x6d, 0x6b, 0x61, 0xd8, 0xb6, 0x85, 0xb4, 0xed, 0xbf, 0x1c, 0x44, 0xdf,
- 0x1d, 0xcf, 0x66, 0x7c, 0x99, 0x8b, 0x43, 0x3e, 0x8b, 0xb3, 0xc3, 0x34, 0xbf, 0x3a, 0x66, 0xaf,
- 0x76, 0x2f, 0x6b, 0x3e, 0x9f, 0xb3, 0xe1, 0x13, 0xff, 0xa9, 0x2a, 0x74, 0x64, 0xd8, 0x91, 0x0b,
- 0x1b, 0xdf, 0x1f, 0x5d, 0x4f, 0x49, 0x97, 0xe5, 0x6f, 0x07, 0xd1, 0x0d, 0x58, 0x96, 0x09, 0xcf,
- 0x56, 0xcc, 0x96, 0xe6, 0xe3, 0x0e, 0xc3, 0x3e, 0x6e, 0xca, 0xf3, 0xc9, 0x75, 0xd5, 0x74, 0x89,
- 0xb2, 0xe8, 0x6d, 0x37, 0x5c, 0x26, 0xac, 0x92, 0xdd, 0xe9, 0x3e, 0x1d, 0x11, 0x1a, 0x31, 0x9e,
- 0x1f, 0xf4, 0x41, 0xb5, 0xb7, 0x34, 0x1a, 0x6a, 0x6f, 0x19, 0xaf, 0x8c, 0xb3, 0x7b, 0xa8, 0x05,
- 0x87, 0x30, 0xbe, 0xee, 0xf7, 0x20, 0xb5, 0xab, 0xdf, 0x8b, 0x7e, 0xe1, 0x25, 0x2f, 0xaf, 0xaa,
- 0x22, 0x9e, 0x31, 0xdd, 0x15, 0xee, 0xfa, 0xda, 0x8d, 0x14, 0xf6, 0x86, 0x8d, 0x2e, 0xcc, 0x09,
- 0xda, 0x46, 0xf8, 0x45, 0xc1, 0xe0, 0x18, 0x64, 0x15, 0x6b, 0x21, 0x15, 0xb4, 0x10, 0xd2, 0xb6,
- 0xaf, 0xa2, 0xa1, 0xb5, 0x7d, 0xfe, 0xfb, 0x6c, 0x26, 0xc6, 0x49, 0x02, 0x5b, 0xc5, 0xea, 0x4a,
- 0x62, 0x34, 0x4e, 0x12, 0xaa, 0x55, 0x70, 0x54, 0x3b, 0x7b, 0x15, 0xbd, 0x03, 0x9c, 0x1d, 0xa6,
- 0x95, 0x74, 0xb8, 0x1d, 0xb6, 0xa2, 0x31, 0xe3, 0x74, 0xd4, 0x17, 0xd7, 0x8e, 0xff, 0x78, 0x10,
- 0x7d, 0x07, 0xf1, 0x7c, 0xca, 0x16, 0x7c, 0xc5, 0x86, 0x8f, 0xba, 0xad, 0x29, 0xd2, 0xf8, 0xff,
- 0xf0, 0x1a, 0x1a, 0x48, 0x98, 0x4c, 0x58, 0xc6, 0x66, 0x82, 0x0c, 0x13, 0x25, 0xee, 0x0c, 0x13,
- 0x83, 0x39, 0x3d, 0xac, 0x11, 0xee, 0x33, 0xb1, 0xbb, 0x2c, 0x4b, 0x96, 0x0b, 0xb2, 0x2d, 0x2d,
- 0xd2, 0xd9, 0x96, 0x1e, 0x8a, 0xd4, 0x67, 0x9f, 0x89, 0x71, 0x96, 0x91, 0xf5, 0x51, 0xe2, 0xce,
- 0xfa, 0x18, 0x4c, 0x7b, 0x98, 0x45, 0xbf, 0xe8, 0x3c, 0x31, 0x71, 0x90, 0x5f, 0xf0, 0x21, 0xfd,
- 0x2c, 0xa4, 0xdc, 0xf8, 0xd8, 0xec, 0xe4, 0x90, 0x6a, 0x3c, 0x7b, 0x5d, 0xf0, 0x92, 0x6e, 0x16,
- 0x25, 0xee, 0xac, 0x86, 0xc1, 0xb4, 0x87, 0xdf, 0x8d, 0xde, 0xd2, 0xa3, 0x64, 0x33, 0x9f, 0xdd,
- 0x41, 0x87, 0x50, 0x38, 0xa1, 0xdd, 0xed, 0xa0, 0x5a, 0xe6, 0x8f, 0xd2, 0x79, 0x59, 0x8f, 0x3e,
- 0xb8, 0x79, 0x2d, 0xed, 0x30, 0x6f, 0x29, 0x6d, 0x9e, 0x47, 0xbf, 0xec, 0x9b, 0xdf, 0x8d, 0xf3,
- 0x19, 0xcb, 0x86, 0x0f, 0x42, 0xea, 0x8a, 0x31, 0xae, 0xb6, 0x7a, 0xb1, 0x76, 0xb0, 0xd3, 0x84,
- 0x1e, 0x4c, 0x3f, 0x40, 0xb5, 0xc1, 0x50, 0x7a, 0x27, 0x0c, 0xb5, 0x6c, 0xef, 0xb1, 0x8c, 0x91,
- 0xb6, 0x95, 0xb0, 0xc3, 0xb6, 0x81, 0xb4, 0xed, 0x32, 0xfa, 0x15, 0xd3, 0xcc, 0x75, 0x5e, 0x20,
- 0xe5, 0xf5, 0xa4, 0xb3, 0x45, 0xb4, 0xa3, 0x0b, 0x19, 0x5f, 0x0f, 0xfb, 0xc1, 0xad, 0xfa, 0xe8,
- 0x11, 0x05, 0xaf, 0x0f, 0x18, 0x4f, 0xee, 0x84, 0x21, 0x6d, 0xfb, 0xaf, 0x06, 0xd1, 0xf7, 0xb4,
- 0xec, 0x59, 0x1e, 0x9f, 0x67, 0x4c, 0x4e, 0xf1, 0xc7, 0x4c, 0xbc, 0xe2, 0xe5, 0xd5, 0x64, 0x9d,
- 0xcf, 0x88, 0x74, 0x06, 0x87, 0x3b, 0xd2, 0x19, 0x52, 0x49, 0x17, 0xe6, 0x0f, 0xa2, 0x77, 0x9b,
- 0xa0, 0xb8, 0x8c, 0xf3, 0x39, 0xfb, 0x61, 0xc5, 0xf3, 0x71, 0x91, 0x8e, 0x93, 0xa4, 0x1c, 0x8e,
- 0xf0, 0xa6, 0x87, 0x9c, 0x29, 0xc1, 0x4e, 0x6f, 0xde, 0x49, 0x9f, 0xf5, 0x53, 0x16, 0xbc, 0x80,
- 0xe9, 0x73, 0xf3, 0xf8, 0x04, 0x2f, 0xa8, 0xf4, 0xd9, 0x47, 0x5a, 0x56, 0x8f, 0xea, 0x39, 0x08,
- 0xb7, 0x7a, 0xe4, 0x4e, 0x3a, 0xb7, 0x43, 0x88, 0x9d, 0x03, 0x9a, 0x07, 0xc5, 0xf3, 0x8b, 0x74,
- 0x7e, 0x56, 0x24, 0x75, 0x1f, 0xba, 0x8f, 0xd7, 0xd9, 0x41, 0x88, 0x39, 0x80, 0x40, 0xb5, 0xb7,
- 0xbf, 0xb1, 0x59, 0xa6, 0x1e, 0x97, 0x9e, 0x97, 0x7c, 0x71, 0xc8, 0xe6, 0xf1, 0x6c, 0xad, 0x07,
- 0xd3, 0x8f, 0x42, 0xa3, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xbe, 0xa6, 0x96, 0x2e, 0xcf, 0xbf, 0x0e,
- 0xa2, 0x3b, 0x5e, 0x9c, 0xe8, 0x60, 0x52, 0xa5, 0x1f, 0xe7, 0xc9, 0x29, 0xab, 0x44, 0x5c, 0x8a,
- 0xe1, 0xf7, 0x03, 0x31, 0x40, 0xe8, 0x98, 0xb2, 0xfd, 0xe0, 0x1b, 0xe9, 0xda, 0x56, 0x9f, 0xd4,
- 0xb3, 0x84, 0x1e, 0x7f, 0xfc, 0x56, 0x97, 0x12, 0x38, 0xfa, 0xdc, 0x0e, 0x21, 0xb6, 0xd5, 0xa5,
- 0xe0, 0x20, 0x5f, 0xa5, 0x82, 0xed, 0xb3, 0x9c, 0x95, 0xed, 0x56, 0x57, 0xaa, 0x3e, 0x42, 0xb4,
- 0x3a, 0x81, 0xda, 0x91, 0xce, 0xf3, 0x66, 0x32, 0x8d, 0xad, 0x80, 0x91, 0x56, 0xae, 0xf1, 0xb0,
- 0x1f, 0x6c, 0x97, 0xca, 0x8e, 0xcf, 0x53, 0xb6, 0xe2, 0x57, 0x70, 0xa9, 0xec, 0x9a, 0x50, 0x00,
- 0xb1, 0x54, 0x46, 0x41, 0x9b, 0x0e, 0x38, 0x7e, 0x5e, 0xa4, 0xec, 0x15, 0x48, 0x07, 0x5c, 0xe5,
- 0x5a, 0x4c, 0xa4, 0x03, 0x08, 0xa6, 0x3d, 0x1c, 0x47, 0x3f, 0x27, 0x85, 0x3f, 0xe4, 0x69, 0x3e,
- 0xbc, 0x89, 0x28, 0xd5, 0x02, 0x63, 0xf5, 0x16, 0x0d, 0x80, 0x12, 0xd7, 0x7f, 0xd5, 0x73, 0xf3,
- 0x5d, 0x42, 0x09, 0x4c, 0xcb, 0x1b, 0x5d, 0x98, 0xcd, 0xc3, 0xa4, 0xb0, 0x1e, 0xbf, 0x26, 0x97,
- 0x71, 0x99, 0xe6, 0xf3, 0x21, 0xa6, 0xeb, 0xc8, 0x89, 0x3c, 0x0c, 0xe3, 0x40, 0x08, 0x6b, 0xc5,
- 0x71, 0x51, 0x94, 0xf5, 0xb0, 0x88, 0x85, 0xb0, 0x8f, 0x04, 0x43, 0xb8, 0x85, 0xe2, 0xde, 0xf6,
- 0xd8, 0x2c, 0x4b, 0xf3, 0xa0, 0x37, 0x8d, 0xf4, 0xf1, 0x66, 0x51, 0x10, 0xbc, 0x87, 0x2c, 0x5e,
- 0xb1, 0xa6, 0x66, 0xd8, 0x93, 0x71, 0x81, 0x60, 0xf0, 0x02, 0xd0, 0x2e, 0x7a, 0xa5, 0xf8, 0x28,
- 0xbe, 0x62, 0xf5, 0x03, 0x66, 0xf5, 0xa4, 0x3a, 0xc4, 0xf4, 0x3d, 0x82, 0x58, 0xf4, 0xe2, 0xa4,
- 0x76, 0xb5, 0x8c, 0xde, 0x91, 0xf2, 0x93, 0xb8, 0x14, 0xe9, 0x2c, 0x2d, 0xe2, 0xbc, 0x59, 0x4c,
- 0x61, 0xfd, 0xba, 0x45, 0x19, 0x97, 0xdb, 0x3d, 0x69, 0xed, 0xf6, 0x9f, 0x06, 0xd1, 0xfb, 0xd0,
- 0xef, 0x09, 0x2b, 0x17, 0xa9, 0x5c, 0x93, 0x57, 0x6a, 0x10, 0x1e, 0x7e, 0x1a, 0x36, 0xda, 0x52,
- 0x30, 0xa5, 0xf9, 0xec, 0xfa, 0x8a, 0x36, 0x13, 0x9b, 0xe8, 0x75, 0xca, 0x17, 0x65, 0xd2, 0xda,
- 0xb3, 0x9a, 0x34, 0x8b, 0x0f, 0x29, 0x24, 0x32, 0xb1, 0x16, 0x04, 0x7a, 0xf8, 0x59, 0x5e, 0x35,
- 0xd6, 0xb1, 0x1e, 0x6e, 0xc5, 0xc1, 0x1e, 0xee, 0x61, 0xb6, 0x87, 0x9f, 0x2c, 0xcf, 0xb3, 0xb4,
- 0xba, 0x4c, 0xf3, 0xb9, 0x4e, 0xbb, 0x7d, 0x5d, 0x2b, 0x86, 0x99, 0xf7, 0x66, 0x27, 0x87, 0x39,
- 0xd1, 0xc1, 0x42, 0x3a, 0x01, 0x61, 0xb2, 0xd9, 0xc9, 0xd9, 0xd5, 0x90, 0x95, 0xd6, 0xcb, 0x70,
- 0xb0, 0x1a, 0x72, 0x54, 0x6b, 0x29, 0xb1, 0x1a, 0x6a, 0x53, 0x76, 0x35, 0xe4, 0xd6, 0xa1, 0xe2,
- 0xd9, 0x8a, 0x9d, 0x95, 0x29, 0x58, 0x0d, 0x79, 0xe5, 0x6b, 0x18, 0x62, 0x35, 0x44, 0xb1, 0x76,
- 0xa0, 0xb2, 0xc4, 0x3e, 0x13, 0x13, 0x11, 0x8b, 0x65, 0x05, 0x06, 0x2a, 0xc7, 0x86, 0x41, 0x88,
- 0x81, 0x8a, 0x40, 0xb5, 0xb7, 0xdf, 0x8e, 0x22, 0xb5, 0x83, 0x21, 0x77, 0x99, 0xfc, 0xb9, 0x47,
- 0x6f, 0x6d, 0x78, 0x5b, 0x4c, 0xef, 0x07, 0x08, 0x9b, 0xf0, 0xa8, 0xbf, 0xcb, 0xcd, 0xb3, 0x21,
- 0xaa, 0x21, 0x45, 0x44, 0xc2, 0x03, 0x10, 0x58, 0xd0, 0xc9, 0x25, 0x7f, 0x85, 0x17, 0xb4, 0x96,
- 0x84, 0x0b, 0xaa, 0x09, 0xbb, 0x9d, 0xad, 0x0b, 0x8a, 0x6d, 0x67, 0x37, 0xc5, 0x08, 0x6d, 0x67,
- 0x43, 0xc6, 0xc6, 0x8c, 0x6b, 0xf8, 0x29, 0xe7, 0x57, 0x8b, 0xb8, 0xbc, 0x02, 0x31, 0xe3, 0x29,
- 0x37, 0x0c, 0x11, 0x33, 0x14, 0x6b, 0x63, 0xc6, 0x75, 0x58, 0xa7, 0xcb, 0x67, 0x65, 0x06, 0x62,
- 0xc6, 0xb3, 0xa1, 0x11, 0x22, 0x66, 0x08, 0xd4, 0x8e, 0x4e, 0xae, 0xb7, 0x09, 0x83, 0x1b, 0x28,
- 0x9e, 0xfa, 0x84, 0x51, 0x1b, 0x28, 0x08, 0x06, 0x43, 0x68, 0xbf, 0x8c, 0x8b, 0x4b, 0x3c, 0x84,
- 0xa4, 0x28, 0x1c, 0x42, 0x0d, 0x02, 0xdb, 0x7b, 0xc2, 0xe2, 0x72, 0x76, 0x89, 0xb7, 0xb7, 0x92,
- 0x85, 0xdb, 0xdb, 0x30, 0xb0, 0xbd, 0x95, 0xe0, 0x65, 0x2a, 0x2e, 0x8f, 0x98, 0x88, 0xf1, 0xf6,
- 0xf6, 0x99, 0x70, 0x7b, 0xb7, 0x58, 0x9b, 0x8f, 0xbb, 0x0e, 0x27, 0xcb, 0xf3, 0x6a, 0x56, 0xa6,
- 0xe7, 0x6c, 0x18, 0xb0, 0x62, 0x20, 0x22, 0x1f, 0x27, 0x61, 0xed, 0xf3, 0xa7, 0x83, 0xe8, 0x66,
- 0xd3, 0xec, 0xbc, 0xaa, 0xf4, 0xdc, 0xe7, 0xbb, 0xff, 0x18, 0x6f, 0x5f, 0x02, 0x27, 0x5e, 0x30,
- 0xf4, 0x50, 0x73, 0x72, 0x03, 0xbc, 0x48, 0x67, 0x79, 0x65, 0x0a, 0xf5, 0x69, 0x1f, 0xeb, 0x8e,
- 0x02, 0x91, 0x1b, 0xf4, 0x52, 0xb4, 0x69, 0x99, 0x6e, 0x9f, 0x46, 0x76, 0x90, 0x54, 0x20, 0x2d,
- 0x6b, 0x9e, 0xb7, 0x43, 0x10, 0x69, 0x19, 0x4e, 0xc2, 0x50, 0xd8, 0x2f, 0xf9, 0xb2, 0xa8, 0x3a,
- 0x42, 0x01, 0x40, 0xe1, 0x50, 0x68, 0xc3, 0xda, 0xe7, 0xeb, 0xe8, 0x57, 0xdd, 0xf0, 0x73, 0x1f,
- 0xf6, 0x36, 0x1d, 0x53, 0xd8, 0x23, 0x1e, 0xf5, 0xc5, 0x6d, 0x46, 0xd1, 0x78, 0x16, 0x7b, 0x4c,
- 0xc4, 0x69, 0x56, 0x0d, 0x37, 0x70, 0x1b, 0x8d, 0x9c, 0xc8, 0x28, 0x30, 0x0e, 0x8e, 0x6f, 0x7b,
- 0xcb, 0x22, 0x4b, 0x67, 0xed, 0xd7, 0x3b, 0x5a, 0xd7, 0x88, 0xc3, 0xe3, 0x9b, 0x8b, 0xc1, 0xf1,
- 0xba, 0x4e, 0xfd, 0xe4, 0x7f, 0xa6, 0xeb, 0x82, 0xe1, 0xe3, 0xb5, 0x87, 0x84, 0xc7, 0x6b, 0x88,
- 0xc2, 0xfa, 0x4c, 0x98, 0x38, 0x8c, 0xd7, 0x7c, 0x49, 0x8c, 0xd7, 0x46, 0x1c, 0xae, 0x8f, 0x8b,
- 0xd9, 0xb5, 0x81, 0xf1, 0x70, 0x90, 0x0b, 0x56, 0xe6, 0x71, 0xf6, 0x3c, 0x8b, 0xe7, 0xd5, 0x90,
- 0x18, 0x63, 0x7c, 0x8a, 0x58, 0x1b, 0xd0, 0x34, 0xf2, 0x18, 0x0f, 0xaa, 0xe7, 0xf1, 0x8a, 0x97,
- 0xa9, 0xa0, 0x1f, 0xa3, 0x45, 0x3a, 0x1f, 0xa3, 0x87, 0xa2, 0xde, 0xc6, 0xe5, 0xec, 0x32, 0x5d,
- 0xb1, 0x24, 0xe0, 0xad, 0x41, 0x7a, 0x78, 0x73, 0x50, 0xa4, 0xd1, 0x26, 0x7c, 0x59, 0xce, 0x18,
- 0xd9, 0x68, 0x4a, 0xdc, 0xd9, 0x68, 0x06, 0xd3, 0x1e, 0xfe, 0x6c, 0x10, 0xfd, 0x9a, 0x92, 0xba,
- 0xef, 0x5c, 0xf6, 0xe2, 0xea, 0xf2, 0x9c, 0xc7, 0x65, 0x32, 0xfc, 0x10, 0xb3, 0x83, 0xa2, 0xc6,
- 0xf5, 0xe3, 0xeb, 0xa8, 0xc0, 0xc7, 0x5a, 0xe7, 0xdd, 0xb6, 0xc7, 0xa1, 0x8f, 0xd5, 0x43, 0xc2,
- 0x8f, 0x15, 0xa2, 0x70, 0x00, 0x91, 0x72, 0xb5, 0x25, 0xb7, 0x41, 0xea, 0xfb, 0xfb, 0x72, 0x9b,
- 0x9d, 0x1c, 0x1c, 0x1f, 0x6b, 0xa1, 0x1f, 0x2d, 0xdb, 0x94, 0x0d, 0x3c, 0x62, 0x46, 0x7d, 0x71,
- 0xd2, 0xb3, 0xe9, 0x15, 0x61, 0xcf, 0xad, 0x9e, 0x31, 0xea, 0x8b, 0x13, 0x9e, 0x9d, 0x61, 0x2d,
- 0xe4, 0x19, 0x19, 0xda, 0x46, 0x7d, 0x71, 0x98, 0x7d, 0x69, 0xa6, 0x99, 0x17, 0x1e, 0x04, 0xec,
- 0xc0, 0xb9, 0x61, 0xab, 0x17, 0xab, 0x1d, 0xfe, 0xc5, 0x20, 0xfa, 0xae, 0xf5, 0x78, 0xc4, 0x93,
- 0xf4, 0x62, 0xad, 0xa0, 0x17, 0x71, 0xb6, 0x64, 0xd5, 0xf0, 0x31, 0x65, 0xad, 0xcd, 0x9a, 0x12,
- 0x3c, 0xb9, 0x96, 0x0e, 0xec, 0x3b, 0xe3, 0xa2, 0xc8, 0xd6, 0x53, 0xb6, 0x28, 0x32, 0xb2, 0xef,
- 0x78, 0x48, 0xb8, 0xef, 0x40, 0x14, 0x66, 0xe5, 0x53, 0x5e, 0xe7, 0xfc, 0x68, 0x56, 0x2e, 0x45,
- 0xe1, 0xac, 0xbc, 0x41, 0x60, 0xae, 0x34, 0xe5, 0xbb, 0x3c, 0xcb, 0xd8, 0x4c, 0xb4, 0xcf, 0x6d,
- 0x18, 0x4d, 0x4b, 0x84, 0x73, 0x25, 0x40, 0xda, 0x5d, 0xb9, 0x66, 0x0d, 0x19, 0x97, 0xec, 0xe9,
- 0xfa, 0x30, 0xcd, 0xaf, 0x86, 0x78, 0x5a, 0x60, 0x01, 0x62, 0x57, 0x0e, 0x05, 0xe1, 0x5a, 0xf5,
- 0x2c, 0x4f, 0x38, 0xbe, 0x56, 0xad, 0x25, 0xe1, 0xb5, 0xaa, 0x26, 0xa0, 0xc9, 0x53, 0x46, 0x99,
- 0xac, 0x25, 0x61, 0x93, 0x9a, 0xc0, 0x86, 0x42, 0xfd, 0xee, 0x86, 0x1c, 0x0a, 0xc1, 0xdb, 0x9a,
- 0xcd, 0x4e, 0x0e, 0x46, 0x68, 0xb3, 0x68, 0x7d, 0xce, 0xc4, 0xec, 0x12, 0x8f, 0x50, 0x0f, 0x09,
- 0x47, 0x28, 0x44, 0x61, 0x95, 0xa6, 0xdc, 0x2c, 0xba, 0x37, 0xf0, 0xf8, 0x68, 0x2d, 0xb8, 0x37,
- 0x3b, 0x39, 0xb8, 0x8c, 0x3c, 0x58, 0xc8, 0x67, 0x86, 0x06, 0xb9, 0x92, 0x85, 0x97, 0x91, 0x86,
- 0x81, 0xa5, 0x57, 0x02, 0xb9, 0x97, 0xb5, 0x41, 0x2b, 0x7a, 0xbb, 0x59, 0x9b, 0x9d, 0x9c, 0x76,
- 0xf2, 0x0f, 0x66, 0x19, 0xa7, 0xa4, 0xc7, 0xbc, 0xee, 0x23, 0x2f, 0xe2, 0x2c, 0x4d, 0x62, 0xc1,
- 0xa6, 0xfc, 0x8a, 0xe5, 0xf8, 0x8a, 0x49, 0x97, 0x56, 0xf1, 0x23, 0x4f, 0x21, 0xbc, 0x62, 0x0a,
- 0x2b, 0xc2, 0x38, 0x51, 0xf4, 0x59, 0xc5, 0x76, 0xe3, 0x8a, 0x18, 0xc9, 0x3c, 0x24, 0x1c, 0x27,
- 0x10, 0x85, 0xf9, 0xaa, 0x92, 0x3f, 0x7b, 0x5d, 0xb0, 0x32, 0x65, 0xf9, 0x8c, 0xe1, 0xf9, 0x2a,
- 0xa4, 0xc2, 0xf9, 0x2a, 0x42, 0xc3, 0xb5, 0xda, 0x5e, 0x2c, 0xd8, 0xd3, 0xf5, 0x34, 0x5d, 0xb0,
- 0x4a, 0xc4, 0x8b, 0x02, 0x5f, 0xab, 0x01, 0x28, 0xbc, 0x56, 0x6b, 0xc3, 0xad, 0xad, 0x21, 0x33,
- 0x20, 0xb6, 0x8f, 0x7b, 0x41, 0x22, 0x70, 0xdc, 0x8b, 0x40, 0xe1, 0x83, 0xb5, 0x00, 0xfa, 0x92,
- 0xa0, 0x65, 0x25, 0xf8, 0x92, 0x80, 0xa6, 0x5b, 0x1b, 0x6e, 0x86, 0x99, 0xd4, 0x5d, 0xb3, 0xa3,
- 0xe8, 0x13, 0xb7, 0x8b, 0x6e, 0xf5, 0x62, 0xf1, 0x1d, 0xbe, 0x53, 0x96, 0xc5, 0x72, 0xda, 0x0a,
- 0x6c, 0xa3, 0x35, 0x4c, 0x9f, 0x1d, 0x3e, 0x87, 0xd5, 0x0e, 0xff, 0x64, 0x10, 0xbd, 0x87, 0x79,
- 0xfc, 0xa2, 0x90, 0x7e, 0x1f, 0x75, 0xdb, 0x52, 0x24, 0x71, 0x9e, 0x2d, 0xac, 0x61, 0x8f, 0x64,
- 0x34, 0x22, 0x7b, 0xdc, 0x4d, 0x17, 0xc0, 0x4f, 0xda, 0x4c, 0xf9, 0x21, 0x47, 0x1c, 0xc9, 0x08,
- 0xf1, 0x76, 0x3d, 0xe4, 0x97, 0xab, 0x02, 0xeb, 0x21, 0x63, 0x43, 0x8b, 0x89, 0xf5, 0x10, 0x82,
- 0xd9, 0xde, 0xe9, 0x56, 0xef, 0x65, 0x2a, 0x2e, 0x65, 0xbe, 0x05, 0x7a, 0xa7, 0x57, 0x56, 0x03,
- 0x11, 0xbd, 0x93, 0x84, 0x61, 0x46, 0xd2, 0x80, 0x75, 0xdf, 0xc4, 0xc6, 0x72, 0x63, 0xc8, 0xed,
- 0x99, 0xf7, 0xba, 0x41, 0x18, 0xaf, 0x8d, 0x58, 0x2f, 0x7d, 0x1e, 0x84, 0x2c, 0x80, 0xe5, 0xcf,
- 0x56, 0x2f, 0x56, 0x3b, 0xfc, 0xa3, 0xe8, 0x3b, 0xad, 0x8a, 0x3d, 0x67, 0xb1, 0x58, 0x96, 0x2c,
- 0x19, 0xee, 0x74, 0x94, 0xbb, 0x01, 0x8d, 0xeb, 0x47, 0xfd, 0x15, 0x5a, 0x39, 0x7a, 0xc3, 0xa9,
- 0xb0, 0x32, 0x65, 0x78, 0x1c, 0x32, 0xe9, 0xb3, 0xc1, 0x1c, 0x9d, 0xd6, 0x69, 0x2d, 0xb3, 0xdd,
- 0xe8, 0x1a, 0xaf, 0xe2, 0x34, 0x93, 0x2f, 0x6b, 0x3f, 0x0c, 0x19, 0xf5, 0xd0, 0xe0, 0x32, 0x9b,
- 0x54, 0x69, 0x8d, 0xcc, 0xb2, 0x8f, 0x3b, 0xcb, 0xb3, 0x87, 0xf4, 0x48, 0x80, 0xac, 0xce, 0xb6,
- 0x7b, 0xd2, 0xda, 0xad, 0x68, 0xa6, 0xbc, 0xfa, 0xcf, 0x6e, 0x90, 0x63, 0x5e, 0xb5, 0x2a, 0x12,
- 0xe9, 0xdb, 0x3d, 0x69, 0xed, 0xf5, 0x0f, 0xa3, 0x77, 0xdb, 0x5e, 0xf5, 0x44, 0xb4, 0xd3, 0x69,
- 0x0a, 0xcc, 0x45, 0x8f, 0xfa, 0x2b, 0x68, 0xf7, 0xff, 0x6c, 0xf6, 0xa5, 0x95, 0xff, 0x19, 0x5f,
- 0x2c, 0x58, 0x9e, 0xb0, 0xa4, 0xd1, 0xa8, 0xea, 0xf5, 0xd3, 0x67, 0xb4, 0x5d, 0xa3, 0x30, 0x72,
- 0x35, 0x4c, 0x89, 0x7e, 0xfd, 0x1b, 0x68, 0xea, 0xa2, 0xfd, 0xfb, 0x20, 0xba, 0x8f, 0x16, 0xad,
- 0x09, 0x5c, 0xaf, 0x88, 0xbf, 0xd5, 0xc7, 0x11, 0xa6, 0x69, 0x8a, 0x3a, 0xfe, 0x3f, 0x58, 0xd0,
- 0x45, 0xfe, 0x97, 0x41, 0x74, 0xdb, 0x2a, 0xd6, 0xe1, 0xbd, 0xcb, 0xf3, 0x8b, 0x2c, 0x9d, 0x09,
- 0xf9, 0x46, 0x56, 0xab, 0xd0, 0x8f, 0x93, 0xd2, 0xe8, 0x7e, 0x9c, 0x01, 0x4d, 0xbb, 0x78, 0xfd,
- 0x3c, 0xad, 0x04, 0x2f, 0xd7, 0x93, 0x4b, 0xfe, 0xaa, 0xf9, 0x60, 0xc8, 0x1f, 0x97, 0x35, 0x30,
- 0x72, 0x08, 0x62, 0xf1, 0x8a, 0x93, 0x2d, 0x57, 0xf6, 0xc3, 0xa2, 0x8a, 0x70, 0xe5, 0x10, 0x1d,
- 0xae, 0x7c, 0xd2, 0xce, 0x4a, 0x4d, 0xad, 0xec, 0x57, 0x50, 0x9b, 0x78, 0x51, 0xdb, 0x5f, 0x42,
- 0xdd, 0xeb, 0x06, 0x6d, 0x6e, 0xaa, 0xc5, 0x7b, 0xe9, 0xc5, 0x85, 0xa9, 0x13, 0x5e, 0x52, 0x17,
- 0x21, 0x72, 0x53, 0x02, 0xb5, 0xcb, 0xab, 0xe7, 0x69, 0xc6, 0xe4, 0xbb, 0x9b, 0x2f, 0x2e, 0x2e,
- 0x32, 0x1e, 0x27, 0x60, 0x79, 0x55, 0x8b, 0x47, 0xae, 0x9c, 0x58, 0x5e, 0x61, 0x9c, 0x3d, 0x15,
- 0x52, 0x4b, 0xeb, 0xe8, 0xce, 0x67, 0x69, 0x06, 0xcf, 0x1b, 0x4b, 0x4d, 0x23, 0x24, 0x4e, 0x85,
- 0xb4, 0x20, 0x9b, 0x02, 0xd5, 0xa2, 0x3a, 0x2a, 0x9b, 0xf2, 0xdf, 0x6d, 0x2b, 0x3a, 0x62, 0x22,
- 0x05, 0x42, 0x30, 0xbb, 0xcb, 0x50, 0x0b, 0xcf, 0x0a, 0x69, 0xfc, 0x56, 0x5b, 0x4b, 0x49, 0x88,
- 0x5d, 0x06, 0x9f, 0xb0, 0xab, 0xe5, 0xfa, 0xef, 0x7b, 0xfc, 0x55, 0x2e, 0x8d, 0xde, 0x6e, 0xab,
- 0x34, 0x32, 0x62, 0xb5, 0x0c, 0x19, 0x6d, 0xf8, 0x47, 0xd1, 0xff, 0x97, 0x86, 0x4b, 0x5e, 0x0c,
- 0x6f, 0x20, 0x0a, 0xa5, 0x73, 0x3a, 0xf7, 0x26, 0x29, 0xb7, 0x87, 0x48, 0x4c, 0x6c, 0x9c, 0x55,
- 0xf1, 0x1c, 0x1e, 0xa9, 0xb7, 0x2d, 0x2e, 0xa5, 0xc4, 0x21, 0x92, 0x36, 0xe5, 0x47, 0xc5, 0x31,
- 0x4f, 0xb4, 0x75, 0xa4, 0x86, 0x46, 0x18, 0x8a, 0x0a, 0x17, 0xb2, 0x69, 0xeb, 0x71, 0xbc, 0x4a,
- 0xe7, 0x26, 0xb5, 0x50, 0x03, 0x58, 0x05, 0xd2, 0x56, 0xcb, 0x8c, 0x1c, 0x88, 0x48, 0x5b, 0x49,
- 0x58, 0xfb, 0xfc, 0xfb, 0x41, 0x74, 0xcb, 0x32, 0xfb, 0xcd, 0xbe, 0xec, 0x41, 0x7e, 0xc1, 0xeb,
- 0x24, 0xf7, 0x30, 0xcd, 0xaf, 0xaa, 0xe1, 0x27, 0x94, 0x49, 0x9c, 0x37, 0x45, 0xf9, 0xf4, 0xda,
- 0x7a, 0x76, 0x7d, 0xd2, 0x6c, 0x5a, 0xda, 0x93, 0x0b, 0x4a, 0x03, 0xac, 0x4f, 0xcc, 0xde, 0x26,
- 0xe4, 0x88, 0xf5, 0x49, 0x88, 0xb7, 0x4d, 0x6c, 0x9c, 0x67, 0x3c, 0x87, 0x4d, 0x6c, 0x2d, 0xd4,
- 0x42, 0xa2, 0x89, 0x5b, 0x90, 0x1d, 0x8f, 0x1b, 0x91, 0xda, 0x5f, 0x1b, 0x67, 0x19, 0x18, 0x8f,
- 0x8d, 0xaa, 0x01, 0x88, 0xf1, 0x18, 0x05, 0xb5, 0x9f, 0xd3, 0xe8, 0x5b, 0xf5, 0x23, 0x3d, 0x29,
- 0xd9, 0x2a, 0x65, 0xf0, 0x90, 0x8d, 0x23, 0x21, 0xfa, 0xbf, 0x4f, 0xd8, 0x9e, 0x75, 0x96, 0x57,
- 0x45, 0x16, 0x57, 0x97, 0xfa, 0xd8, 0x85, 0x5f, 0xe7, 0x46, 0x08, 0x0f, 0x5e, 0xdc, 0xed, 0xa0,
- 0xec, 0xa0, 0xde, 0xc8, 0xcc, 0x10, 0xb3, 0x81, 0xab, 0xb6, 0x86, 0x99, 0xcd, 0x4e, 0xce, 0xbe,
- 0xdb, 0xd8, 0x8f, 0xb3, 0x8c, 0x95, 0xeb, 0x46, 0x76, 0x14, 0xe7, 0xe9, 0x05, 0xab, 0x04, 0x78,
- 0xb7, 0xa1, 0xa9, 0x11, 0xc4, 0x88, 0x77, 0x1b, 0x01, 0xdc, 0xae, 0xdb, 0x80, 0xe7, 0x83, 0x3c,
- 0x61, 0xaf, 0xc1, 0xba, 0x0d, 0xda, 0x91, 0x0c, 0xb1, 0x6e, 0xa3, 0x58, 0xbb, 0xc7, 0xff, 0x34,
- 0xe3, 0xb3, 0x2b, 0x3d, 0x05, 0xf8, 0x0d, 0x2c, 0x25, 0x70, 0x0e, 0xb8, 0x1d, 0x42, 0xec, 0x24,
- 0x20, 0x05, 0xa7, 0xac, 0xc8, 0xe2, 0x19, 0x3c, 0x69, 0xa5, 0x74, 0xb4, 0x8c, 0x98, 0x04, 0x20,
- 0x03, 0x8a, 0xab, 0x4f, 0x70, 0x61, 0xc5, 0x05, 0x07, 0xb8, 0x6e, 0x87, 0x10, 0x3b, 0x0d, 0x4a,
- 0xc1, 0xa4, 0xc8, 0x52, 0x01, 0xba, 0x81, 0xd2, 0x90, 0x12, 0xa2, 0x1b, 0xf8, 0x04, 0x30, 0x79,
- 0xc4, 0xca, 0x39, 0x43, 0x4d, 0x4a, 0x49, 0xd0, 0x64, 0x43, 0xd8, 0x63, 0xe5, 0xaa, 0xee, 0xbc,
- 0x58, 0x83, 0x63, 0xe5, 0xba, 0x5a, 0xbc, 0x58, 0x13, 0xc7, 0xca, 0x3d, 0x00, 0x14, 0xf1, 0x24,
- 0xae, 0x04, 0x5e, 0x44, 0x29, 0x09, 0x16, 0xb1, 0x21, 0xec, 0x1c, 0xad, 0x8a, 0xb8, 0x14, 0x60,
- 0x8e, 0xd6, 0x05, 0x70, 0xce, 0x1a, 0xdc, 0x24, 0xe5, 0x76, 0x24, 0x51, 0xad, 0xc2, 0xc4, 0xf3,
- 0x94, 0x65, 0x49, 0x05, 0x46, 0x12, 0xfd, 0xdc, 0x1b, 0x29, 0x31, 0x92, 0xb4, 0x29, 0x10, 0x4a,
- 0xfa, 0x4d, 0x08, 0x56, 0x3b, 0xf0, 0x12, 0xe4, 0x76, 0x08, 0xb1, 0xe3, 0x53, 0x53, 0xe8, 0xdd,
- 0xb8, 0x2c, 0xd3, 0x7a, 0xf2, 0xdf, 0xc0, 0x0b, 0xd4, 0xc8, 0x89, 0xf1, 0x09, 0xe3, 0x40, 0xf7,
- 0x6a, 0x06, 0x6e, 0xac, 0x60, 0x70, 0xe8, 0xfe, 0x20, 0xc8, 0xd8, 0x8c, 0x53, 0x4a, 0x9c, 0x97,
- 0xe5, 0xd8, 0xd3, 0x44, 0xde, 0x95, 0x6f, 0x74, 0x61, 0xce, 0x37, 0x67, 0xc6, 0xc5, 0x11, 0x5f,
- 0xb1, 0x29, 0x7f, 0xf6, 0x3a, 0xad, 0xea, 0xe5, 0x96, 0x9e, 0xb9, 0x9f, 0x10, 0x96, 0x30, 0x98,
- 0xf8, 0xe6, 0xac, 0x53, 0xc9, 0x26, 0x10, 0xa0, 0x2c, 0xc7, 0xec, 0x15, 0x9a, 0x40, 0x40, 0x8b,
- 0x86, 0x23, 0x12, 0x88, 0x10, 0x6f, 0x77, 0xcc, 0x8c, 0x73, 0x7d, 0xd1, 0xc0, 0x94, 0x37, 0xb9,
- 0x1c, 0x65, 0x0d, 0x82, 0xc4, 0xa6, 0x45, 0x50, 0xc1, 0xae, 0x2f, 0x8d, 0x7f, 0xdb, 0xc5, 0xee,
- 0x11, 0x76, 0xda, 0xdd, 0xec, 0x7e, 0x0f, 0x12, 0x71, 0x65, 0x4f, 0x7c, 0x50, 0xae, 0xda, 0x07,
- 0x3e, 0xee, 0xf7, 0x20, 0x9d, 0xdd, 0x37, 0xb7, 0x5a, 0x4f, 0xe3, 0xd9, 0xd5, 0xbc, 0xe4, 0xcb,
- 0x3c, 0xd9, 0xe5, 0x19, 0x2f, 0xc1, 0xee, 0x9b, 0x57, 0x6a, 0x80, 0x12, 0xbb, 0x6f, 0x1d, 0x2a,
- 0x36, 0x83, 0x73, 0x4b, 0x31, 0xce, 0xd2, 0x39, 0x5c, 0x51, 0x7b, 0x86, 0x24, 0x40, 0x64, 0x70,
- 0x28, 0x88, 0x04, 0x91, 0x5a, 0x71, 0x8b, 0x74, 0x16, 0x67, 0xca, 0xdf, 0x0e, 0x6d, 0xc6, 0x03,
- 0x3b, 0x83, 0x08, 0x51, 0x40, 0xea, 0x39, 0x5d, 0x96, 0xf9, 0x41, 0x2e, 0x38, 0x59, 0xcf, 0x06,
- 0xe8, 0xac, 0xa7, 0x03, 0x82, 0x61, 0x75, 0xca, 0x5e, 0xd7, 0xa5, 0xa9, 0xff, 0xc1, 0x86, 0xd5,
- 0xfa, 0xef, 0x23, 0x2d, 0x0f, 0x0d, 0xab, 0x80, 0x03, 0x95, 0xd1, 0x4e, 0x54, 0xc0, 0x04, 0xb4,
- 0xfd, 0x30, 0xb9, 0xd7, 0x0d, 0xe2, 0x7e, 0x26, 0x62, 0x9d, 0xb1, 0x90, 0x1f, 0x09, 0xf4, 0xf1,
- 0xd3, 0x80, 0x76, 0xbb, 0xc5, 0xab, 0xcf, 0x25, 0x9b, 0x5d, 0xb5, 0x0e, 0xb0, 0xf9, 0x05, 0x55,
- 0x08, 0xb1, 0xdd, 0x42, 0xa0, 0x78, 0x13, 0x1d, 0xcc, 0x78, 0x1e, 0x6a, 0xa2, 0x5a, 0xde, 0xa7,
- 0x89, 0x34, 0x67, 0x17, 0xbf, 0x46, 0xaa, 0x23, 0x53, 0x35, 0xd3, 0x16, 0x61, 0xc1, 0x85, 0x88,
- 0xc5, 0x2f, 0x09, 0xdb, 0x9c, 0x1c, 0xfa, 0x3c, 0x6a, 0x9f, 0xee, 0x6f, 0x59, 0x39, 0xa2, 0x4f,
- 0xf7, 0x53, 0x2c, 0x5d, 0x49, 0x15, 0x23, 0x1d, 0x56, 0xfc, 0x38, 0x79, 0xd8, 0x0f, 0xb6, 0x4b,
- 0x1e, 0xcf, 0xe7, 0x6e, 0xc6, 0xe2, 0x52, 0x79, 0xdd, 0x0e, 0x18, 0xb2, 0x18, 0xb1, 0xe4, 0x09,
- 0xe0, 0x60, 0x08, 0xf3, 0x3c, 0xef, 0xf2, 0x5c, 0xb0, 0x5c, 0x60, 0x43, 0x98, 0x6f, 0x4c, 0x83,
- 0xa1, 0x21, 0x8c, 0x52, 0x00, 0x71, 0x2b, 0xf7, 0x83, 0x98, 0x38, 0x8e, 0x17, 0x68, 0xc6, 0xa6,
- 0xf6, 0x7a, 0x94, 0x3c, 0x14, 0xb7, 0x80, 0x73, 0x5e, 0xe7, 0xba, 0x5e, 0xa6, 0x71, 0x39, 0x37,
- 0xbb, 0x1b, 0xc9, 0xf0, 0x11, 0x6d, 0xc7, 0x27, 0x89, 0xd7, 0xb9, 0x61, 0x0d, 0x30, 0xec, 0x1c,
- 0x2c, 0xe2, 0xb9, 0xa9, 0x29, 0x52, 0x03, 0x29, 0x6f, 0x55, 0xf5, 0x5e, 0x37, 0x08, 0xfc, 0xbc,
- 0x48, 0x13, 0xc6, 0x03, 0x7e, 0xa4, 0xbc, 0x8f, 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0x5a,
- 0xd1, 0x8d, 0xf3, 0x44, 0xaf, 0x63, 0x47, 0xc4, 0xe3, 0x01, 0x5c, 0x28, 0x7b, 0x23, 0x78, 0xd0,
- 0x47, 0x9b, 0x0d, 0xda, 0x50, 0x1f, 0x35, 0xfb, 0xaf, 0x7d, 0xfa, 0x28, 0x06, 0x6b, 0x9f, 0x3f,
- 0xd1, 0x7d, 0x74, 0x2f, 0x16, 0x71, 0x9d, 0xb7, 0xbf, 0x48, 0xd9, 0x2b, 0xbd, 0x10, 0x46, 0xea,
- 0xdb, 0x50, 0x23, 0xf9, 0x71, 0x32, 0x58, 0x15, 0xef, 0xf4, 0xe6, 0x03, 0xbe, 0xf5, 0x0a, 0xa1,
- 0xd3, 0x37, 0x58, 0x2a, 0xec, 0xf4, 0xe6, 0x03, 0xbe, 0xf5, 0xad, 0x07, 0x9d, 0xbe, 0xc1, 0xd5,
- 0x07, 0x3b, 0xbd, 0x79, 0xed, 0xfb, 0x4f, 0x9b, 0x8e, 0xeb, 0x3a, 0xaf, 0xf3, 0xb0, 0x99, 0x48,
- 0x57, 0x0c, 0x4b, 0x27, 0x7d, 0x7b, 0x06, 0x0d, 0xa5, 0x93, 0xb4, 0x8a, 0x73, 0xef, 0x18, 0x56,
- 0x8a, 0x13, 0x5e, 0xa5, 0xf2, 0x38, 0xc6, 0x93, 0x1e, 0x46, 0x1b, 0x38, 0xb4, 0x68, 0x0a, 0x29,
- 0xd9, 0x17, 0xcb, 0x1e, 0x6a, 0xcf, 0xab, 0x3f, 0x0c, 0xd8, 0x6b, 0x1f, 0x5b, 0xdf, 0xee, 0x49,
- 0xdb, 0x57, 0xbc, 0x1e, 0xe3, 0xbe, 0x5b, 0x0e, 0xb5, 0x2a, 0xfa, 0x7a, 0xf9, 0x51, 0x7f, 0x05,
- 0xed, 0xfe, 0xcf, 0x9b, 0x75, 0x05, 0xf4, 0xaf, 0x3b, 0xc1, 0xe3, 0x3e, 0x16, 0x41, 0x47, 0x78,
- 0x72, 0x2d, 0x1d, 0x5d, 0x90, 0xbf, 0x6e, 0x16, 0xd0, 0x0d, 0x2a, 0xbf, 0xda, 0x91, 0x5f, 0xfb,
- 0xea, 0x3e, 0x11, 0x6a, 0x56, 0x0b, 0xc3, 0x9e, 0xf1, 0xf1, 0x35, 0xb5, 0x9c, 0x5b, 0xe8, 0x3c,
- 0x58, 0x7f, 0x5d, 0xea, 0x94, 0x27, 0x64, 0xd9, 0xa1, 0x61, 0x81, 0x3e, 0xb9, 0xae, 0x1a, 0xd5,
- 0x57, 0x1c, 0x58, 0xde, 0xc3, 0xf2, 0xa4, 0xa7, 0x61, 0xef, 0x66, 0x96, 0x8f, 0xae, 0xa7, 0xa4,
- 0xcb, 0xf2, 0x6f, 0x83, 0xe8, 0xae, 0xc7, 0xda, 0xf7, 0x09, 0x60, 0xd7, 0xe3, 0x07, 0x01, 0xfb,
- 0x94, 0x92, 0x29, 0xdc, 0x6f, 0x7c, 0x33, 0x65, 0x7b, 0x65, 0x9b, 0xa7, 0xf2, 0x3c, 0xcd, 0x04,
- 0x2b, 0xdb, 0x57, 0xb6, 0xf9, 0x76, 0x15, 0x35, 0xa2, 0xaf, 0x6c, 0x0b, 0xe0, 0xce, 0x95, 0x6d,
- 0x88, 0x67, 0xf4, 0xca, 0x36, 0xd4, 0x5a, 0xf0, 0xca, 0xb6, 0xb0, 0x06, 0x35, 0xbc, 0x37, 0x45,
- 0x50, 0xfb, 0xd6, 0xbd, 0x2c, 0xfa, 0xdb, 0xd8, 0x8f, 0xaf, 0xa3, 0x42, 0x4c, 0x70, 0x8a, 0x93,
- 0x27, 0x1a, 0x7b, 0x3c, 0x53, 0xef, 0x54, 0xe3, 0x4e, 0x6f, 0x5e, 0xfb, 0xfe, 0xb1, 0x5e, 0xdd,
- 0x98, 0xe1, 0x9c, 0x97, 0xf2, 0xba, 0xbe, 0xad, 0xd0, 0xf0, 0x5c, 0x5b, 0x70, 0x5b, 0xfe, 0x61,
- 0x3f, 0x98, 0xa8, 0x6e, 0x4d, 0xe8, 0x46, 0x1f, 0x75, 0x19, 0x02, 0x4d, 0xbe, 0xd3, 0x9b, 0x27,
- 0xa6, 0x11, 0xe5, 0x5b, 0xb5, 0x76, 0x0f, 0x63, 0x7e, 0x5b, 0x3f, 0xea, 0xaf, 0xa0, 0xdd, 0xaf,
- 0x74, 0xda, 0xe8, 0xba, 0x97, 0xed, 0xbc, 0xdd, 0x65, 0x6a, 0xe2, 0x35, 0xf3, 0xa8, 0x2f, 0x1e,
- 0x4a, 0x20, 0xdc, 0x29, 0xb4, 0x2b, 0x81, 0x40, 0xa7, 0xd1, 0x8f, 0xae, 0xa7, 0xa4, 0xcb, 0xf2,
- 0x77, 0x83, 0xe8, 0x26, 0x59, 0x16, 0x1d, 0x07, 0x9f, 0xf4, 0xb5, 0x0c, 0xe2, 0xe1, 0xd3, 0x6b,
- 0xeb, 0xe9, 0x42, 0xfd, 0xe3, 0x20, 0xba, 0x15, 0x28, 0x94, 0x0a, 0x90, 0x6b, 0x58, 0xf7, 0x03,
- 0xe5, 0xb3, 0xeb, 0x2b, 0x52, 0xd3, 0xbd, 0x8b, 0x4f, 0xda, 0xd7, 0x6f, 0x05, 0x6c, 0x4f, 0xe8,
- 0xeb, 0xb7, 0xba, 0xb5, 0xe0, 0x26, 0x4f, 0x7c, 0xde, 0x2c, 0xba, 0xd0, 0x4d, 0x1e, 0x79, 0x16,
- 0x31, 0x78, 0x8d, 0x08, 0xc6, 0x61, 0x4e, 0x9e, 0xbd, 0x2e, 0xe2, 0x3c, 0xa1, 0x9d, 0x28, 0x79,
- 0xb7, 0x13, 0xc3, 0xc1, 0xcd, 0xb1, 0x5a, 0x7a, 0xca, 0x9b, 0x85, 0xd4, 0x7d, 0x4a, 0xdf, 0x20,
- 0xc1, 0xcd, 0xb1, 0x16, 0x4a, 0x78, 0xd3, 0x59, 0x63, 0xc8, 0x1b, 0x48, 0x16, 0x1f, 0xf4, 0x41,
- 0x41, 0x8a, 0x6e, 0xbc, 0x99, 0x3d, 0xf7, 0x87, 0x21, 0x2b, 0xad, 0x7d, 0xf7, 0xed, 0x9e, 0x34,
- 0xe1, 0x76, 0xc2, 0xc4, 0xe7, 0x2c, 0x4e, 0x58, 0x19, 0x74, 0x6b, 0xa8, 0x5e, 0x6e, 0x5d, 0x1a,
- 0x73, 0xbb, 0xcb, 0xb3, 0xe5, 0x22, 0xd7, 0x8d, 0x49, 0xba, 0x75, 0xa9, 0x6e, 0xb7, 0x80, 0x86,
- 0xdb, 0x82, 0xd6, 0xad, 0x4c, 0x2f, 0x1f, 0x84, 0xcd, 0x78, 0x59, 0xe5, 0x56, 0x2f, 0x96, 0xae,
- 0xa7, 0x0e, 0xa3, 0x8e, 0x7a, 0x82, 0x48, 0xda, 0xee, 0x49, 0xc3, 0xfd, 0x39, 0xc7, 0xad, 0x89,
- 0xa7, 0x9d, 0x0e, 0x5b, 0xad, 0x90, 0x7a, 0xd4, 0x5f, 0x01, 0xee, 0x86, 0xea, 0xa8, 0x3a, 0x4c,
- 0x2b, 0xf1, 0x3c, 0xcd, 0xb2, 0xe1, 0x56, 0x20, 0x4c, 0x1a, 0x28, 0xb8, 0x1b, 0x8a, 0xc0, 0x44,
- 0x24, 0x37, 0xbb, 0x87, 0xf9, 0xb0, 0xcb, 0x8e, 0xa4, 0x7a, 0x45, 0xb2, 0x4b, 0x83, 0x1d, 0x2d,
- 0xe7, 0x51, 0x9b, 0xda, 0x8e, 0xc2, 0x0f, 0xae, 0x55, 0xe1, 0x9d, 0xde, 0x3c, 0x78, 0xdd, 0x2e,
- 0x29, 0x39, 0xb3, 0xdc, 0xa1, 0x4c, 0x78, 0x33, 0xc9, 0xdd, 0x0e, 0x0a, 0xec, 0x0a, 0xaa, 0x6e,
- 0xf4, 0x32, 0x4d, 0xe6, 0x4c, 0xa0, 0x6f, 0x8a, 0x5c, 0x20, 0xf8, 0xa6, 0x08, 0x80, 0xa0, 0xe9,
- 0xd4, 0xdf, 0xcd, 0x76, 0xe8, 0x41, 0x82, 0x35, 0x9d, 0x56, 0x76, 0xa8, 0x50, 0xd3, 0xa1, 0x34,
- 0x18, 0x0d, 0x8c, 0x5b, 0x7d, 0xf1, 0xc2, 0x83, 0x90, 0x19, 0x70, 0xfb, 0xc2, 0x56, 0x2f, 0x16,
- 0xcc, 0x28, 0xd6, 0x61, 0xba, 0x48, 0x05, 0x36, 0xa3, 0x38, 0x36, 0x6a, 0x24, 0x34, 0xa3, 0xb4,
- 0x51, 0xaa, 0x7a, 0x75, 0x8e, 0x70, 0x90, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, 0xeb,
- 0xc5, 0x66, 0x6e, 0x42, 0x46, 0x5c, 0xea, 0xc5, 0x32, 0x12, 0xdb, 0xf2, 0x83, 0x5c, 0x08, 0x86,
- 0x46, 0x1d, 0x4a, 0x01, 0x6e, 0xd8, 0xd7, 0x5c, 0xf3, 0xee, 0xb5, 0x28, 0x58, 0x5c, 0xc6, 0xf9,
- 0x0c, 0x5d, 0x9c, 0x4a, 0x83, 0x2d, 0x32, 0xb4, 0x38, 0x25, 0x35, 0xc0, 0x6b, 0x73, 0xff, 0x53,
- 0x5a, 0xa4, 0x2b, 0x98, 0x6f, 0x56, 0xfd, 0x2f, 0x69, 0xef, 0xf7, 0x20, 0xe1, 0x6b, 0xf3, 0x06,
- 0x30, 0x1b, 0xdf, 0xca, 0xe9, 0x87, 0x01, 0x53, 0x3e, 0x1a, 0x5a, 0x08, 0xd3, 0x2a, 0x20, 0xa8,
- 0x4d, 0x82, 0xcb, 0xc4, 0x8f, 0xd8, 0x1a, 0x0b, 0x6a, 0x9b, 0x9f, 0x4a, 0x24, 0x14, 0xd4, 0x6d,
- 0x14, 0xe4, 0x99, 0xee, 0x3a, 0x68, 0x23, 0xa0, 0xef, 0x2e, 0x7d, 0x36, 0x3b, 0x39, 0xd0, 0x73,
- 0xf6, 0xd2, 0x95, 0xf7, 0x9e, 0x00, 0x29, 0xe8, 0x5e, 0xba, 0xc2, 0x5f, 0x13, 0x6c, 0xf5, 0x62,
- 0xe1, 0x2b, 0xf9, 0x58, 0xb0, 0xd7, 0xcd, 0xbb, 0x72, 0xa4, 0xb8, 0x52, 0xde, 0x7a, 0x59, 0x7e,
- 0xaf, 0x1b, 0xb4, 0x07, 0x60, 0x4f, 0x4a, 0x3e, 0x63, 0x55, 0xa5, 0xef, 0x24, 0xf5, 0x4f, 0x18,
- 0x69, 0xd9, 0x08, 0xdc, 0x48, 0x7a, 0x27, 0x0c, 0x39, 0x17, 0x09, 0x2a, 0x91, 0xbd, 0xdf, 0x68,
- 0x03, 0xd5, 0x6c, 0x5f, 0x6d, 0xb4, 0xd9, 0xc9, 0xd9, 0xee, 0xa5, 0xa5, 0xee, 0x85, 0x46, 0xf7,
- 0x50, 0x75, 0xec, 0x2e, 0xa3, 0xfb, 0x3d, 0x48, 0xed, 0xea, 0xf3, 0xe8, 0xcd, 0x43, 0x3e, 0x9f,
- 0xb0, 0x3c, 0x19, 0x7e, 0xcf, 0x3f, 0x42, 0xcb, 0xe7, 0xa3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a,
- 0x6c, 0x0f, 0x01, 0xee, 0xb1, 0xf3, 0xe5, 0x7c, 0x22, 0x62, 0x01, 0x0e, 0x01, 0xca, 0xbf, 0x8f,
- 0x6a, 0x01, 0x71, 0x08, 0xd0, 0x03, 0x80, 0xbd, 0x69, 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed,
- 0x69, 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, 0x43, 0x7b, 0x56, 0x47, 0x4a, 0x89, 0x2c,
- 0xa2, 0x4d, 0xd9, 0xe0, 0x56, 0xd5, 0x97, 0xf7, 0xcb, 0x2c, 0x17, 0x8b, 0xb8, 0x5c, 0x83, 0xe0,
- 0xd6, 0xb5, 0x74, 0x00, 0x22, 0xb8, 0x51, 0xd0, 0xf6, 0xda, 0xe6, 0x31, 0xcf, 0xae, 0xf6, 0x79,
- 0xc9, 0x97, 0x22, 0xcd, 0x19, 0xbc, 0x63, 0xc4, 0x3c, 0x50, 0x97, 0x21, 0x7a, 0x2d, 0xc5, 0xda,
- 0x2c, 0x57, 0x12, 0xea, 0x3c, 0xa1, 0xbc, 0x26, 0xbd, 0x12, 0xbc, 0x84, 0xef, 0x13, 0x95, 0x15,
- 0x08, 0x11, 0x59, 0x2e, 0x09, 0x83, 0xb6, 0x3f, 0x49, 0xf3, 0x39, 0xda, 0xf6, 0x27, 0xee, 0x3d,
- 0xbf, 0xb7, 0x68, 0xc0, 0x76, 0x28, 0xf5, 0xd0, 0x54, 0x07, 0xd0, 0x5f, 0xed, 0xa2, 0x0f, 0xdd,
- 0x25, 0x88, 0x0e, 0x85, 0x93, 0xc0, 0xd5, 0x17, 0x05, 0xcb, 0x59, 0xd2, 0x9c, 0x9a, 0xc3, 0x5c,
- 0x79, 0x44, 0xd0, 0x15, 0x24, 0xed, 0x58, 0x24, 0xe5, 0xa7, 0xcb, 0xfc, 0xa4, 0xe4, 0x17, 0x69,
- 0xc6, 0x4a, 0x30, 0x16, 0x29, 0x75, 0x47, 0x4e, 0x8c, 0x45, 0x18, 0x67, 0x8f, 0x5f, 0x48, 0xa9,
- 0x77, 0xd7, 0xff, 0xb4, 0x8c, 0x67, 0xf0, 0xf8, 0x85, 0xb2, 0xd1, 0xc6, 0x88, 0x9d, 0xc1, 0x00,
- 0xee, 0x24, 0x3a, 0xca, 0x75, 0xbe, 0x96, 0xf1, 0xa1, 0xbf, 0x1a, 0x95, 0xb7, 0xdf, 0x56, 0x20,
- 0xd1, 0xd1, 0xe6, 0x30, 0x92, 0x48, 0x74, 0xc2, 0x1a, 0x76, 0x2a, 0x91, 0xdc, 0xb1, 0x3e, 0x56,
- 0x04, 0xa6, 0x12, 0x65, 0xa3, 0x11, 0x12, 0x53, 0x49, 0x0b, 0x02, 0x03, 0x52, 0xd3, 0x0d, 0xe6,
- 0xe8, 0x80, 0x64, 0xa4, 0xc1, 0x01, 0xc9, 0xa5, 0xec, 0x40, 0x71, 0x90, 0xa7, 0x22, 0x8d, 0xb3,
- 0x09, 0x13, 0x27, 0x71, 0x19, 0x2f, 0x98, 0x60, 0x25, 0x1c, 0x28, 0x34, 0x32, 0xf2, 0x18, 0x62,
- 0xa0, 0xa0, 0x58, 0xed, 0xf0, 0x37, 0xa3, 0xb7, 0xeb, 0x79, 0x9f, 0xe5, 0xfa, 0x57, 0x8a, 0x9e,
- 0xc9, 0x9f, 0x37, 0x1b, 0xbe, 0x63, 0x6c, 0x4c, 0x44, 0xc9, 0xe2, 0x45, 0x63, 0xfb, 0x2d, 0xf3,
- 0x77, 0x09, 0x3e, 0x1a, 0xd4, 0xf1, 0x7c, 0xcc, 0x45, 0x7a, 0x51, 0x2f, 0xb3, 0xf5, 0x17, 0x44,
- 0x20, 0x9e, 0x5d, 0xf1, 0x28, 0x70, 0xeb, 0x08, 0xc6, 0xd9, 0x71, 0xda, 0x95, 0x9e, 0xb2, 0x22,
- 0x83, 0xe3, 0xb4, 0xa7, 0x2d, 0x01, 0x62, 0x9c, 0x46, 0x41, 0xdb, 0x39, 0x5d, 0xf1, 0x94, 0x85,
- 0x2b, 0x33, 0x65, 0xfd, 0x2a, 0x33, 0xf5, 0x3e, 0xca, 0xc8, 0xa2, 0xb7, 0x8f, 0xd8, 0xe2, 0x9c,
- 0x95, 0xd5, 0x65, 0x5a, 0x50, 0x37, 0xf4, 0x5a, 0xa2, 0xf3, 0x86, 0x5e, 0x02, 0xb5, 0x33, 0x81,
- 0x05, 0x0e, 0xaa, 0xe3, 0x78, 0xc1, 0xe4, 0x1d, 0x2a, 0x60, 0x26, 0x70, 0x8c, 0x38, 0x10, 0x31,
- 0x13, 0x90, 0xb0, 0xf3, 0x7d, 0x97, 0x65, 0x4e, 0xd9, 0xbc, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0x2f,
- 0x58, 0x2e, 0xb4, 0x49, 0xb0, 0x27, 0xef, 0x98, 0xc4, 0x79, 0x62, 0x4f, 0xbe, 0x8f, 0x9e, 0x33,
- 0x34, 0x79, 0x0f, 0xfe, 0x84, 0x97, 0x42, 0xfd, 0x06, 0xd9, 0x59, 0x99, 0x81, 0xa1, 0xc9, 0x7f,
- 0xa8, 0x1e, 0x49, 0x0c, 0x4d, 0x61, 0x0d, 0xe7, 0xf7, 0x26, 0xbc, 0x32, 0xbc, 0x60, 0xa5, 0x89,
- 0x93, 0x67, 0x8b, 0x38, 0xcd, 0x74, 0x34, 0x7c, 0x3f, 0x60, 0x9b, 0xd0, 0x21, 0x7e, 0x6f, 0xa2,
- 0xaf, 0xae, 0xf3, 0x0b, 0x1d, 0xe1, 0x12, 0x82, 0x57, 0x04, 0x1d, 0xf6, 0x89, 0x57, 0x04, 0xdd,
- 0x5a, 0x76, 0xe5, 0x6e, 0x59, 0xc9, 0xad, 0x25, 0xb1, 0xcb, 0x13, 0xb8, 0x5f, 0xe8, 0xd8, 0x04,
- 0x20, 0xb1, 0x72, 0x0f, 0x2a, 0xd8, 0xd4, 0xc0, 0x62, 0xcf, 0xd3, 0x3c, 0xce, 0xd2, 0x9f, 0xc0,
- 0xb4, 0xde, 0xb1, 0xd3, 0x10, 0x44, 0x6a, 0x80, 0x93, 0x98, 0xab, 0x7d, 0x26, 0xa6, 0x69, 0x3d,
- 0xf4, 0xdf, 0x0b, 0x3c, 0x37, 0x49, 0x74, 0xbb, 0x72, 0x48, 0xe7, 0x36, 0x5e, 0xf8, 0x58, 0xc7,
- 0x45, 0x31, 0xa9, 0x67, 0xd5, 0x53, 0x36, 0x63, 0x69, 0x21, 0x86, 0x1f, 0x87, 0x9f, 0x15, 0xc0,
- 0x89, 0x83, 0x16, 0x3d, 0xd4, 0x9c, 0xd7, 0xf7, 0xf5, 0x58, 0x32, 0x51, 0x3f, 0xce, 0x79, 0x56,
- 0xb1, 0x52, 0x27, 0x1a, 0xfb, 0x4c, 0x80, 0xde, 0xe9, 0x70, 0x23, 0x07, 0xac, 0x2b, 0x4a, 0xf4,
- 0xce, 0xb0, 0x86, 0xdd, 0xec, 0x73, 0x38, 0x7d, 0xbb, 0xba, 0x3c, 0x6f, 0xf8, 0x90, 0x34, 0xe6,
- 0x50, 0xc4, 0x66, 0x1f, 0x4d, 0xdb, 0x6c, 0xad, 0xed, 0x76, 0x9c, 0xaf, 0x0f, 0xe0, 0x91, 0x09,
- 0xc4, 0x92, 0xc4, 0x88, 0x6c, 0x2d, 0x80, 0x3b, 0x9b, 0xe1, 0x25, 0x8f, 0x93, 0x59, 0x5c, 0x89,
- 0x93, 0x78, 0x9d, 0xf1, 0x38, 0x91, 0xf3, 0x3a, 0xdc, 0x0c, 0x6f, 0x98, 0x91, 0x0b, 0x51, 0x9b,
- 0xe1, 0x14, 0xec, 0x66, 0x67, 0xf2, 0x37, 0x47, 0xf5, 0x59, 0x4e, 0x98, 0x9d, 0xc9, 0xf2, 0xc2,
- 0x73, 0x9c, 0x77, 0xc2, 0x90, 0xfd, 0x06, 0x4d, 0x89, 0x64, 0x1a, 0x72, 0x0b, 0xd3, 0xf1, 0x12,
- 0x90, 0xf7, 0x03, 0x84, 0xbd, 0x81, 0x44, 0xfd, 0xbd, 0xf9, 0x99, 0x29, 0xa1, 0xef, 0x2c, 0x7f,
- 0x88, 0xe9, 0xba, 0xd0, 0xc8, 0xbd, 0xc8, 0x62, 0xbb, 0x27, 0x6d, 0xd3, 0xcc, 0xdd, 0xcb, 0x58,
- 0x8c, 0x93, 0xe4, 0x88, 0x55, 0xc8, 0x07, 0xe5, 0xb5, 0x70, 0x64, 0xa5, 0x44, 0x9a, 0xd9, 0xa6,
- 0x6c, 0xa0, 0xd7, 0xb2, 0x67, 0x49, 0x2a, 0xb4, 0xac, 0x39, 0x21, 0xfd, 0xb0, 0x6d, 0xa0, 0x4d,
- 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x96, 0xd7, 0xcc, 0x94, 0xcf, 0xe7, 0x19, 0xd3, 0xd0, 0x29, 0x8b,
- 0xd5, 0x95, 0x8d, 0x3b, 0x6d, 0x5b, 0x28, 0x48, 0x8c, 0xe5, 0x41, 0x05, 0x9b, 0x46, 0xd6, 0x98,
- 0x7a, 0x25, 0xd5, 0x3c, 0xd8, 0xcd, 0xb6, 0x19, 0x0f, 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xdf, 0xbd,
- 0xd5, 0xe2, 0x7d, 0xd6, 0x3c, 0x09, 0x78, 0xd9, 0x94, 0x54, 0x76, 0xc4, 0xc4, 0x77, 0x6f, 0x08,
- 0x66, 0xd7, 0x09, 0xc0, 0xc3, 0xd3, 0xf5, 0x41, 0x02, 0xd7, 0x09, 0x50, 0x5f, 0x32, 0xc4, 0x3a,
- 0x81, 0x62, 0xfd, 0xa6, 0x33, 0xfb, 0x5e, 0x87, 0x71, 0x65, 0x2b, 0x87, 0x34, 0x1d, 0x0a, 0x86,
- 0x9a, 0x8e, 0x52, 0xf0, 0x1f, 0xa9, 0xbb, 0xb5, 0x86, 0x3c, 0x52, 0x6c, 0x5f, 0x6d, 0xa3, 0x0b,
- 0xb3, 0xb9, 0x7f, 0x2d, 0x3c, 0x65, 0x71, 0x62, 0x2a, 0x86, 0xe8, 0xba, 0x72, 0x22, 0xf7, 0xc7,
- 0x38, 0xed, 0xe4, 0x77, 0xa2, 0xa1, 0xaa, 0x46, 0xe9, 0xba, 0xb9, 0x85, 0x15, 0xb1, 0x26, 0x88,
- 0x81, 0xca, 0x27, 0x9c, 0xc4, 0xcd, 0x6b, 0xa2, 0x29, 0xd7, 0x0e, 0xf4, 0x77, 0x99, 0x15, 0x48,
- 0xdc, 0xfc, 0xc7, 0xde, 0xa2, 0x89, 0xc4, 0xad, 0x5b, 0xcb, 0x8e, 0xf3, 0x66, 0x7d, 0x2e, 0x8f,
- 0x80, 0xe1, 0xbf, 0x7d, 0xa1, 0x84, 0xc4, 0x38, 0xdf, 0x82, 0x94, 0xed, 0xa7, 0xef, 0xff, 0xc7,
- 0x57, 0x37, 0x06, 0x3f, 0xfb, 0xea, 0xc6, 0xe0, 0xbf, 0xbe, 0xba, 0x31, 0xf8, 0xe9, 0xd7, 0x37,
- 0xde, 0xf8, 0xd9, 0xd7, 0x37, 0xde, 0xf8, 0xcf, 0xaf, 0x6f, 0xbc, 0xf1, 0xe5, 0x9b, 0xfa, 0xb7,
- 0xbd, 0xcf, 0xff, 0x9f, 0xfc, 0x85, 0xee, 0x27, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x49, 0x2e,
- 0xb9, 0x13, 0xff, 0x7b, 0x00, 0x00,
+ // 5583 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0x5b, 0x8f, 0x1c, 0x49,
+ 0x56, 0xf8, 0xa7, 0x5e, 0xfe, 0xf3, 0x27, 0x97, 0x1d, 0xa0, 0x06, 0x86, 0xd9, 0x61, 0xd7, 0xf6,
+ 0x78, 0xec, 0x6e, 0xdb, 0xed, 0xae, 0xf6, 0xd8, 0x73, 0x63, 0x17, 0x09, 0xca, 0xdd, 0x76, 0x4f,
+ 0xef, 0x76, 0xf7, 0x34, 0x5d, 0xd5, 0xb6, 0x18, 0x09, 0x89, 0xec, 0xca, 0xe8, 0xea, 0xa4, 0xb3,
+ 0x32, 0x72, 0x33, 0xa3, 0xca, 0xae, 0x45, 0x20, 0x10, 0x08, 0x04, 0x02, 0xb1, 0xe2, 0x26, 0x78,
+ 0x42, 0xe2, 0x13, 0xf0, 0x31, 0x78, 0x41, 0xda, 0x47, 0x1e, 0xd1, 0xcc, 0x87, 0xe0, 0x15, 0x65,
+ 0x44, 0x64, 0x5c, 0x4e, 0x9e, 0x13, 0x99, 0x3d, 0x3c, 0xd9, 0xea, 0xf3, 0x3b, 0xe7, 0xc4, 0xe5,
+ 0x44, 0xc4, 0x89, 0xc8, 0xc8, 0xac, 0xe8, 0x66, 0x71, 0xbe, 0x53, 0x94, 0x5c, 0xf0, 0x6a, 0xa7,
+ 0x62, 0xe5, 0x2a, 0x9d, 0xb1, 0xe6, 0xdf, 0x91, 0xfc, 0xf3, 0xf0, 0xcd, 0x38, 0x5f, 0x8b, 0x75,
+ 0xc1, 0xde, 0x7b, 0xd7, 0x92, 0x33, 0xbe, 0x58, 0xc4, 0x79, 0x52, 0x29, 0xe4, 0xbd, 0x77, 0xac,
+ 0x84, 0xad, 0x58, 0x2e, 0xf4, 0xdf, 0x1f, 0xff, 0xe7, 0xff, 0x0c, 0xa2, 0xb7, 0x76, 0xb3, 0x94,
+ 0xe5, 0x62, 0x57, 0x6b, 0x0c, 0xbf, 0x8c, 0xbe, 0x3d, 0x2e, 0x8a, 0x7d, 0x26, 0x5e, 0xb0, 0xb2,
+ 0x4a, 0x79, 0x3e, 0xfc, 0x60, 0xa4, 0x1d, 0x8c, 0x4e, 0x8b, 0xd9, 0x68, 0x5c, 0x14, 0x23, 0x2b,
+ 0x1c, 0x9d, 0xb2, 0x1f, 0x2f, 0x59, 0x25, 0xde, 0xbb, 0x13, 0x86, 0xaa, 0x82, 0xe7, 0x15, 0x1b,
+ 0x5e, 0x44, 0xbf, 0x34, 0x2e, 0x8a, 0x09, 0x13, 0x7b, 0xac, 0xae, 0xc0, 0x44, 0xc4, 0x82, 0x0d,
+ 0x37, 0x5b, 0xaa, 0x3e, 0x60, 0x7c, 0xdc, 0xeb, 0x06, 0xb5, 0x9f, 0x69, 0xf4, 0xad, 0xda, 0xcf,
+ 0xe5, 0x52, 0x24, 0xfc, 0x55, 0x3e, 0x7c, 0xbf, 0xad, 0xa8, 0x45, 0xc6, 0xf6, 0xed, 0x10, 0xa2,
+ 0xad, 0xbe, 0x8c, 0x7e, 0xfe, 0x65, 0x9c, 0x65, 0x4c, 0xec, 0x96, 0xac, 0x2e, 0xb8, 0xaf, 0xa3,
+ 0x44, 0x23, 0x25, 0x33, 0x76, 0x3f, 0x08, 0x32, 0xda, 0xf0, 0x97, 0xd1, 0xb7, 0x95, 0xe4, 0x94,
+ 0xcd, 0xf8, 0x8a, 0x95, 0x43, 0x54, 0x4b, 0x0b, 0x89, 0x26, 0x6f, 0x41, 0xd0, 0xf6, 0x2e, 0xcf,
+ 0x57, 0xac, 0x14, 0xb8, 0x6d, 0x2d, 0x0c, 0xdb, 0xb6, 0x90, 0xb6, 0xfd, 0x97, 0x83, 0xe8, 0xbb,
+ 0xe3, 0xd9, 0x8c, 0x2f, 0x73, 0x71, 0xc8, 0x67, 0x71, 0x76, 0x98, 0xe6, 0x57, 0xc7, 0xec, 0xd5,
+ 0xee, 0x65, 0xcd, 0xe7, 0x73, 0x36, 0x7c, 0xe2, 0xb7, 0xaa, 0x42, 0x47, 0x86, 0x1d, 0xb9, 0xb0,
+ 0xf1, 0xfd, 0xd1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x76, 0x10, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0x6c,
+ 0xc5, 0x6c, 0x69, 0x3e, 0xee, 0x30, 0xec, 0xe3, 0xa6, 0x3c, 0x9f, 0x5c, 0x57, 0x4d, 0x97, 0x28,
+ 0x8b, 0xde, 0x76, 0xc3, 0x65, 0xc2, 0x2a, 0x39, 0x9c, 0xee, 0xd3, 0x11, 0xa1, 0x11, 0xe3, 0xf9,
+ 0x41, 0x1f, 0x54, 0x7b, 0x4b, 0xa3, 0xa1, 0xf6, 0x96, 0xf1, 0xca, 0x38, 0xbb, 0x87, 0x5a, 0x70,
+ 0x08, 0xe3, 0xeb, 0x7e, 0x0f, 0x52, 0xbb, 0xfa, 0xbd, 0xe8, 0x17, 0x5e, 0xf2, 0xf2, 0xaa, 0x2a,
+ 0xe2, 0x19, 0xd3, 0x43, 0xe1, 0xae, 0xaf, 0xdd, 0x48, 0xe1, 0x68, 0xd8, 0xe8, 0xc2, 0x9c, 0xa0,
+ 0x6d, 0x84, 0x5f, 0x14, 0x0c, 0xce, 0x41, 0x56, 0xb1, 0x16, 0x52, 0x41, 0x0b, 0x21, 0x6d, 0xfb,
+ 0x2a, 0x1a, 0x5a, 0xdb, 0xe7, 0xbf, 0xcf, 0x66, 0x62, 0x9c, 0x24, 0xb0, 0x57, 0xac, 0xae, 0x24,
+ 0x46, 0xe3, 0x24, 0xa1, 0x7a, 0x05, 0x47, 0xb5, 0xb3, 0x57, 0xd1, 0x3b, 0xc0, 0xd9, 0x61, 0x5a,
+ 0x49, 0x87, 0xdb, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x47, 0x7d, 0x71, 0xed, 0xf8, 0x8f, 0x07, 0xd1,
+ 0x77, 0x10, 0xcf, 0xa7, 0x6c, 0xc1, 0x57, 0x6c, 0xf8, 0xa8, 0xdb, 0x9a, 0x22, 0x8d, 0xff, 0x0f,
+ 0xaf, 0xa1, 0x81, 0x84, 0xc9, 0x84, 0x65, 0x6c, 0x26, 0xc8, 0x30, 0x51, 0xe2, 0xce, 0x30, 0x31,
+ 0x98, 0x33, 0xc2, 0x1a, 0xe1, 0x3e, 0x13, 0xbb, 0xcb, 0xb2, 0x64, 0xb9, 0x20, 0xfb, 0xd2, 0x22,
+ 0x9d, 0x7d, 0xe9, 0xa1, 0x48, 0x7d, 0xf6, 0x99, 0x18, 0x67, 0x19, 0x59, 0x1f, 0x25, 0xee, 0xac,
+ 0x8f, 0xc1, 0xb4, 0x87, 0x59, 0xf4, 0x8b, 0x4e, 0x8b, 0x89, 0x83, 0xfc, 0x82, 0x0f, 0xe9, 0xb6,
+ 0x90, 0x72, 0xe3, 0x63, 0xb3, 0x93, 0x43, 0xaa, 0xf1, 0xec, 0x75, 0xc1, 0x4b, 0xba, 0x5b, 0x94,
+ 0xb8, 0xb3, 0x1a, 0x06, 0xd3, 0x1e, 0x7e, 0x37, 0x7a, 0x4b, 0xcf, 0x92, 0xcd, 0x7a, 0x76, 0x07,
+ 0x9d, 0x42, 0xe1, 0x82, 0x76, 0xb7, 0x83, 0x6a, 0x99, 0x3f, 0x4a, 0xe7, 0x65, 0x3d, 0xfb, 0xe0,
+ 0xe6, 0xb5, 0xb4, 0xc3, 0xbc, 0xa5, 0xb4, 0x79, 0x1e, 0xfd, 0xb2, 0x6f, 0x7e, 0x37, 0xce, 0x67,
+ 0x2c, 0x1b, 0x3e, 0x08, 0xa9, 0x2b, 0xc6, 0xb8, 0xda, 0xea, 0xc5, 0xda, 0xc9, 0x4e, 0x13, 0x7a,
+ 0x32, 0xfd, 0x00, 0xd5, 0x06, 0x53, 0xe9, 0x9d, 0x30, 0xd4, 0xb2, 0xbd, 0xc7, 0x32, 0x46, 0xda,
+ 0x56, 0xc2, 0x0e, 0xdb, 0x06, 0xd2, 0xb6, 0xcb, 0xe8, 0x57, 0x4c, 0x37, 0xd7, 0x79, 0x81, 0x94,
+ 0xd7, 0x8b, 0xce, 0x16, 0xd1, 0x8f, 0x2e, 0x64, 0x7c, 0x3d, 0xec, 0x07, 0xb7, 0xea, 0xa3, 0x67,
+ 0x14, 0xbc, 0x3e, 0x60, 0x3e, 0xb9, 0x13, 0x86, 0xb4, 0xed, 0xbf, 0x1a, 0x44, 0xdf, 0xd3, 0xb2,
+ 0x67, 0x79, 0x7c, 0x9e, 0x31, 0xb9, 0xc4, 0x1f, 0x33, 0xf1, 0x8a, 0x97, 0x57, 0x93, 0x75, 0x3e,
+ 0x23, 0xd2, 0x19, 0x1c, 0xee, 0x48, 0x67, 0x48, 0x25, 0x5d, 0x98, 0x3f, 0x88, 0xde, 0x6d, 0x82,
+ 0xe2, 0x32, 0xce, 0xe7, 0xec, 0x87, 0x15, 0xcf, 0xc7, 0x45, 0x3a, 0x4e, 0x92, 0x72, 0x38, 0xc2,
+ 0xbb, 0x1e, 0x72, 0xa6, 0x04, 0x3b, 0xbd, 0x79, 0x27, 0x7d, 0xd6, 0xad, 0x2c, 0x78, 0x01, 0xd3,
+ 0xe7, 0xa6, 0xf9, 0x04, 0x2f, 0xa8, 0xf4, 0xd9, 0x47, 0x5a, 0x56, 0x8f, 0xea, 0x35, 0x08, 0xb7,
+ 0x7a, 0xe4, 0x2e, 0x3a, 0xb7, 0x43, 0x88, 0x5d, 0x03, 0x9a, 0x86, 0xe2, 0xf9, 0x45, 0x3a, 0x3f,
+ 0x2b, 0x92, 0x7a, 0x0c, 0xdd, 0xc7, 0xeb, 0xec, 0x20, 0xc4, 0x1a, 0x40, 0xa0, 0xda, 0xdb, 0xdf,
+ 0xd8, 0x2c, 0x53, 0xcf, 0x4b, 0xcf, 0x4b, 0xbe, 0x38, 0x64, 0xf3, 0x78, 0xb6, 0xd6, 0x93, 0xe9,
+ 0x47, 0xa1, 0x59, 0x0c, 0xd2, 0xa6, 0x10, 0x1f, 0x5f, 0x53, 0x4b, 0x97, 0xe7, 0x5f, 0x07, 0xd1,
+ 0x1d, 0x2f, 0x4e, 0x74, 0x30, 0xa9, 0xd2, 0x8f, 0xf3, 0xe4, 0x94, 0x55, 0x22, 0x2e, 0xc5, 0xf0,
+ 0xfb, 0x81, 0x18, 0x20, 0x74, 0x4c, 0xd9, 0x7e, 0xf0, 0x8d, 0x74, 0x6d, 0xaf, 0x4f, 0xea, 0x55,
+ 0x42, 0xcf, 0x3f, 0x7e, 0xaf, 0x4b, 0x09, 0x9c, 0x7d, 0x6e, 0x87, 0x10, 0xdb, 0xeb, 0x52, 0x70,
+ 0x90, 0xaf, 0x52, 0xc1, 0xf6, 0x59, 0xce, 0xca, 0x76, 0xaf, 0x2b, 0x55, 0x1f, 0x21, 0x7a, 0x9d,
+ 0x40, 0xed, 0x4c, 0xe7, 0x79, 0x33, 0x99, 0xc6, 0x56, 0xc0, 0x48, 0x2b, 0xd7, 0x78, 0xd8, 0x0f,
+ 0xb6, 0x5b, 0x65, 0xc7, 0xe7, 0x29, 0x5b, 0xf1, 0x2b, 0xb8, 0x55, 0x76, 0x4d, 0x28, 0x80, 0xd8,
+ 0x2a, 0xa3, 0xa0, 0x4d, 0x07, 0x1c, 0x3f, 0x2f, 0x52, 0xf6, 0x0a, 0xa4, 0x03, 0xae, 0x72, 0x2d,
+ 0x26, 0xd2, 0x01, 0x04, 0xd3, 0x1e, 0x8e, 0xa3, 0x9f, 0x93, 0xc2, 0x1f, 0xf2, 0x34, 0x1f, 0xde,
+ 0x44, 0x94, 0x6a, 0x81, 0xb1, 0x7a, 0x8b, 0x06, 0x40, 0x89, 0xeb, 0xbf, 0xea, 0xb5, 0xf9, 0x2e,
+ 0xa1, 0x04, 0x96, 0xe5, 0x8d, 0x2e, 0xcc, 0xe6, 0x61, 0x52, 0x58, 0xcf, 0x5f, 0x93, 0xcb, 0xb8,
+ 0x4c, 0xf3, 0xf9, 0x10, 0xd3, 0x75, 0xe4, 0x44, 0x1e, 0x86, 0x71, 0x20, 0x84, 0xb5, 0xe2, 0xb8,
+ 0x28, 0xca, 0x7a, 0x5a, 0xc4, 0x42, 0xd8, 0x47, 0x82, 0x21, 0xdc, 0x42, 0x71, 0x6f, 0x7b, 0x6c,
+ 0x96, 0xa5, 0x79, 0xd0, 0x9b, 0x46, 0xfa, 0x78, 0xb3, 0x28, 0x08, 0xde, 0x43, 0x16, 0xaf, 0x58,
+ 0x53, 0x33, 0xac, 0x65, 0x5c, 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x9b, 0x5e, 0x29, 0x3e, 0x8a, 0xaf,
+ 0x58, 0xdd, 0xc0, 0xac, 0x5e, 0x54, 0x87, 0x98, 0xbe, 0x47, 0x10, 0x9b, 0x5e, 0x9c, 0xd4, 0xae,
+ 0x96, 0xd1, 0x3b, 0x52, 0x7e, 0x12, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0x37, 0x9b, 0x29, 0x6c,
+ 0x5c, 0xb7, 0x28, 0xe3, 0x72, 0xbb, 0x27, 0xad, 0xdd, 0xfe, 0xd3, 0x20, 0x7a, 0x1f, 0xfa, 0x3d,
+ 0x61, 0xe5, 0x22, 0x95, 0x7b, 0xf2, 0x4a, 0x4d, 0xc2, 0xc3, 0x4f, 0xc3, 0x46, 0x5b, 0x0a, 0xa6,
+ 0x34, 0x9f, 0x5d, 0x5f, 0xd1, 0x66, 0x62, 0x13, 0xbd, 0x4f, 0xf9, 0xa2, 0x4c, 0x5a, 0x67, 0x56,
+ 0x93, 0x66, 0xf3, 0x21, 0x85, 0x44, 0x26, 0xd6, 0x82, 0xc0, 0x08, 0x3f, 0xcb, 0xab, 0xc6, 0x3a,
+ 0x36, 0xc2, 0xad, 0x38, 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0x93, 0xe5, 0x79, 0x96, 0x56, 0x97,
+ 0x69, 0x3e, 0xd7, 0x69, 0xb7, 0xaf, 0x6b, 0xc5, 0x30, 0xf3, 0xde, 0xec, 0xe4, 0x30, 0x27, 0x3a,
+ 0x58, 0x48, 0x27, 0x20, 0x4c, 0x36, 0x3b, 0x39, 0xbb, 0x1b, 0xb2, 0xd2, 0x7a, 0x1b, 0x0e, 0x76,
+ 0x43, 0x8e, 0x6a, 0x2d, 0x25, 0x76, 0x43, 0x6d, 0xca, 0xee, 0x86, 0xdc, 0x3a, 0x54, 0x3c, 0x5b,
+ 0xb1, 0xb3, 0x32, 0x05, 0xbb, 0x21, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0x86, 0x28, 0xd6, 0x4e, 0x54,
+ 0x96, 0xd8, 0x67, 0x62, 0x22, 0x62, 0xb1, 0xac, 0xc0, 0x44, 0xe5, 0xd8, 0x30, 0x08, 0x31, 0x51,
+ 0x11, 0xa8, 0xf6, 0xf6, 0xdb, 0x51, 0xa4, 0x4e, 0x30, 0xe4, 0x29, 0x93, 0xbf, 0xf6, 0xe8, 0xa3,
+ 0x0d, 0xef, 0x88, 0xe9, 0xfd, 0x00, 0x61, 0x13, 0x1e, 0xf5, 0x77, 0x79, 0x78, 0x36, 0x44, 0x35,
+ 0xa4, 0x88, 0x48, 0x78, 0x00, 0x02, 0x0b, 0x3a, 0xb9, 0xe4, 0xaf, 0xf0, 0x82, 0xd6, 0x92, 0x70,
+ 0x41, 0x35, 0x61, 0x8f, 0xb3, 0x75, 0x41, 0xb1, 0xe3, 0xec, 0xa6, 0x18, 0xa1, 0xe3, 0x6c, 0xc8,
+ 0xd8, 0x98, 0x71, 0x0d, 0x3f, 0xe5, 0xfc, 0x6a, 0x11, 0x97, 0x57, 0x20, 0x66, 0x3c, 0xe5, 0x86,
+ 0x21, 0x62, 0x86, 0x62, 0x6d, 0xcc, 0xb8, 0x0e, 0xeb, 0x74, 0xf9, 0xac, 0xcc, 0x40, 0xcc, 0x78,
+ 0x36, 0x34, 0x42, 0xc4, 0x0c, 0x81, 0xda, 0xd9, 0xc9, 0xf5, 0x36, 0x61, 0xf0, 0x00, 0xc5, 0x53,
+ 0x9f, 0x30, 0xea, 0x00, 0x05, 0xc1, 0x60, 0x08, 0xed, 0x97, 0x71, 0x71, 0x89, 0x87, 0x90, 0x14,
+ 0x85, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf1, 0xfe, 0x56, 0xb2, 0x70,
+ 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4c, 0xc5, 0xe5, 0x11, 0x13, 0x31, 0xde, 0xdf, 0x3e,
+ 0x13, 0xee, 0xef, 0x16, 0x6b, 0xf3, 0x71, 0xd7, 0xe1, 0x64, 0x79, 0x5e, 0xcd, 0xca, 0xf4, 0x9c,
+ 0x0d, 0x03, 0x56, 0x0c, 0x44, 0xe4, 0xe3, 0x24, 0xac, 0x7d, 0xfe, 0x74, 0x10, 0xdd, 0x6c, 0xba,
+ 0x9d, 0x57, 0x95, 0x5e, 0xfb, 0x7c, 0xf7, 0x1f, 0xe3, 0xfd, 0x4b, 0xe0, 0xc4, 0x03, 0x86, 0x1e,
+ 0x6a, 0x4e, 0x6e, 0x80, 0x17, 0xe9, 0x2c, 0xaf, 0x4c, 0xa1, 0x3e, 0xed, 0x63, 0xdd, 0x51, 0x20,
+ 0x72, 0x83, 0x5e, 0x8a, 0x36, 0x2d, 0xd3, 0xfd, 0xd3, 0xc8, 0x0e, 0x92, 0x0a, 0xa4, 0x65, 0x4d,
+ 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x0c, 0x85, 0xfd, 0x92, 0x2f, 0x8b, 0xaa, 0x23, 0x14,
+ 0x00, 0x14, 0x0e, 0x85, 0x36, 0xac, 0x7d, 0xbe, 0x8e, 0x7e, 0xd5, 0x0d, 0x3f, 0xb7, 0xb1, 0xb7,
+ 0xe9, 0x98, 0xc2, 0x9a, 0x78, 0xd4, 0x17, 0xb7, 0x19, 0x45, 0xe3, 0x59, 0xec, 0x31, 0x11, 0xa7,
+ 0x59, 0x35, 0xdc, 0xc0, 0x6d, 0x34, 0x72, 0x22, 0xa3, 0xc0, 0x38, 0x38, 0xbf, 0xed, 0x2d, 0x8b,
+ 0x2c, 0x9d, 0xb5, 0x1f, 0xef, 0x68, 0x5d, 0x23, 0x0e, 0xcf, 0x6f, 0x2e, 0x06, 0xe7, 0xeb, 0x3a,
+ 0xf5, 0x93, 0xff, 0x99, 0xae, 0x0b, 0x86, 0xcf, 0xd7, 0x1e, 0x12, 0x9e, 0xaf, 0x21, 0x0a, 0xeb,
+ 0x33, 0x61, 0xe2, 0x30, 0x5e, 0xf3, 0x25, 0x31, 0x5f, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, 0x66, 0xf7,
+ 0x06, 0xc6, 0xc3, 0x41, 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0xf3, 0x2c, 0x9e, 0x57, 0x43, 0x62, 0x8e,
+ 0xf1, 0x29, 0x62, 0x6f, 0x40, 0xd3, 0x48, 0x33, 0x1e, 0x54, 0xcf, 0xe3, 0x15, 0x2f, 0x53, 0x41,
+ 0x37, 0xa3, 0x45, 0x3a, 0x9b, 0xd1, 0x43, 0x51, 0x6f, 0xe3, 0x72, 0x76, 0x99, 0xae, 0x58, 0x12,
+ 0xf0, 0xd6, 0x20, 0x3d, 0xbc, 0x39, 0x28, 0xd2, 0x69, 0x13, 0xbe, 0x2c, 0x67, 0x8c, 0xec, 0x34,
+ 0x25, 0xee, 0xec, 0x34, 0x83, 0x69, 0x0f, 0x7f, 0x36, 0x88, 0x7e, 0x4d, 0x49, 0xdd, 0x67, 0x2e,
+ 0x7b, 0x71, 0x75, 0x79, 0xce, 0xe3, 0x32, 0x19, 0x7e, 0x88, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xf1,
+ 0x75, 0x54, 0x60, 0xb3, 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21,
+ 0x0a, 0x27, 0x10, 0x29, 0x57, 0x47, 0x72, 0x1b, 0xa4, 0xbe, 0x7f, 0x2e, 0xb7, 0xd9, 0xc9, 0xc1,
+ 0xf9, 0xb1, 0x16, 0xfa, 0xd1, 0xb2, 0x4d, 0xd9, 0xc0, 0x23, 0x66, 0xd4, 0x17, 0x27, 0x3d, 0x9b,
+ 0x51, 0x11, 0xf6, 0xdc, 0x1a, 0x19, 0xa3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91,
+ 0xa9, 0x6d, 0xd4, 0x17, 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x41, 0xc0, 0x0e, 0x5c, 0x1b,
+ 0xb6, 0x7a, 0xb1, 0xda, 0xe1, 0x5f, 0x0c, 0xa2, 0xef, 0x5a, 0x8f, 0x47, 0x3c, 0x49, 0x2f, 0xd6,
+ 0x0a, 0x7a, 0x11, 0x67, 0x4b, 0x56, 0x0d, 0x1f, 0x53, 0xd6, 0xda, 0xac, 0x29, 0xc1, 0x93, 0x6b,
+ 0xe9, 0xc0, 0xb1, 0x33, 0x2e, 0x8a, 0x6c, 0x3d, 0x65, 0x8b, 0x22, 0x23, 0xc7, 0x8e, 0x87, 0x84,
+ 0xc7, 0x0e, 0x44, 0x61, 0x56, 0x3e, 0xe5, 0x75, 0xce, 0x8f, 0x66, 0xe5, 0x52, 0x14, 0xce, 0xca,
+ 0x1b, 0x04, 0xe6, 0x4a, 0x53, 0xbe, 0xcb, 0xb3, 0x8c, 0xcd, 0x44, 0xfb, 0xde, 0x86, 0xd1, 0xb4,
+ 0x44, 0x38, 0x57, 0x02, 0xa4, 0x3d, 0x95, 0x6b, 0xf6, 0x90, 0x71, 0xc9, 0x9e, 0xae, 0x0f, 0xd3,
+ 0xfc, 0x6a, 0x88, 0xa7, 0x05, 0x16, 0x20, 0x4e, 0xe5, 0x50, 0x10, 0xee, 0x55, 0xcf, 0xf2, 0x84,
+ 0xe3, 0x7b, 0xd5, 0x5a, 0x12, 0xde, 0xab, 0x6a, 0x02, 0x9a, 0x3c, 0x65, 0x94, 0xc9, 0x5a, 0x12,
+ 0x36, 0xa9, 0x09, 0x6c, 0x2a, 0xd4, 0xcf, 0x6e, 0xc8, 0xa9, 0x10, 0x3c, 0xad, 0xd9, 0xec, 0xe4,
+ 0xe0, 0x9e, 0x4b, 0x3b, 0x40, 0x23, 0x02, 0x18, 0xff, 0x20, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3,
+ 0xcf, 0x99, 0x98, 0x5d, 0xe2, 0xa1, 0xef, 0x21, 0xe1, 0xd0, 0x87, 0x28, 0x6c, 0xab, 0x29, 0x37,
+ 0xbb, 0xf9, 0x0d, 0x3c, 0xf0, 0x5a, 0x3b, 0xf9, 0xcd, 0x4e, 0x0e, 0xb6, 0xd5, 0xc1, 0x82, 0x6e,
+ 0x2b, 0x25, 0x0b, 0xb7, 0x95, 0x61, 0x60, 0xe9, 0x95, 0x40, 0x1e, 0x92, 0x6d, 0xd0, 0x8a, 0xde,
+ 0x31, 0xd9, 0x66, 0x27, 0xa7, 0x9d, 0xfc, 0x83, 0xd9, 0x1f, 0x2a, 0xe9, 0x31, 0xaf, 0x07, 0xdf,
+ 0x8b, 0x38, 0x4b, 0x93, 0x58, 0xb0, 0x29, 0xbf, 0x62, 0x39, 0xbe, 0x15, 0xd3, 0xa5, 0x55, 0xfc,
+ 0xc8, 0x53, 0x08, 0x6f, 0xc5, 0xc2, 0x8a, 0x30, 0x4e, 0x14, 0x7d, 0x56, 0xb1, 0xdd, 0xb8, 0x22,
+ 0xa6, 0x48, 0x0f, 0x09, 0xc7, 0x09, 0x44, 0x61, 0x22, 0xac, 0xe4, 0xcf, 0x5e, 0x17, 0xac, 0x4c,
+ 0x59, 0x3e, 0x63, 0x78, 0x22, 0x0c, 0xa9, 0x70, 0x22, 0x8c, 0xd0, 0x70, 0x13, 0xb8, 0x17, 0x0b,
+ 0xf6, 0x74, 0x3d, 0x4d, 0x17, 0xac, 0x12, 0xf1, 0xa2, 0xc0, 0x37, 0x81, 0x00, 0x0a, 0x6f, 0x02,
+ 0xdb, 0x70, 0xeb, 0xcc, 0xc9, 0xcc, 0xb4, 0xed, 0x7b, 0x64, 0x90, 0x08, 0xdc, 0x23, 0x23, 0x50,
+ 0xd8, 0xb0, 0x16, 0x40, 0x9f, 0x3e, 0xb4, 0xac, 0x04, 0x9f, 0x3e, 0xd0, 0x74, 0xeb, 0x24, 0xcf,
+ 0x30, 0x93, 0x7a, 0x68, 0x76, 0x14, 0x7d, 0xe2, 0x0e, 0xd1, 0xad, 0x5e, 0x2c, 0x7e, 0x74, 0x78,
+ 0xca, 0xb2, 0x58, 0xae, 0x87, 0x81, 0xf3, 0xb9, 0x86, 0xe9, 0x73, 0x74, 0xe8, 0xb0, 0xda, 0xe1,
+ 0x9f, 0x0c, 0xa2, 0xf7, 0x30, 0x8f, 0x5f, 0x14, 0xd2, 0xef, 0xa3, 0x6e, 0x5b, 0x8a, 0x24, 0x2e,
+ 0xca, 0x85, 0x35, 0xec, 0x5d, 0x8f, 0x46, 0x64, 0xef, 0xd1, 0xe9, 0x02, 0xf8, 0xd9, 0xa0, 0x29,
+ 0x3f, 0xe4, 0x88, 0xbb, 0x1e, 0x21, 0xde, 0x6e, 0xb4, 0xfc, 0x72, 0x55, 0x60, 0xa3, 0x65, 0x6c,
+ 0x68, 0x31, 0xb1, 0xd1, 0x42, 0x30, 0x3b, 0x3a, 0xdd, 0xea, 0xbd, 0x4c, 0xc5, 0xa5, 0x4c, 0xe4,
+ 0xc0, 0xe8, 0xf4, 0xca, 0x6a, 0x20, 0x62, 0x74, 0x92, 0x30, 0x4c, 0x75, 0x1a, 0xb0, 0x1e, 0x9b,
+ 0xd8, 0x5c, 0x6e, 0x0c, 0xb9, 0x23, 0xf3, 0x5e, 0x37, 0x08, 0xe3, 0xb5, 0x11, 0xeb, 0x3d, 0xd5,
+ 0x83, 0x90, 0x05, 0xb0, 0xaf, 0xda, 0xea, 0xc5, 0x6a, 0x87, 0x7f, 0x14, 0x7d, 0xa7, 0x55, 0xb1,
+ 0xe7, 0x2c, 0x16, 0xcb, 0x92, 0x25, 0xc3, 0x9d, 0x8e, 0x72, 0x37, 0xa0, 0x71, 0xfd, 0xa8, 0xbf,
+ 0x42, 0x2b, 0xf9, 0x6f, 0x38, 0x15, 0x56, 0xa6, 0x0c, 0x8f, 0x43, 0x26, 0x7d, 0x36, 0x98, 0xfc,
+ 0xd3, 0x3a, 0xad, 0xfd, 0xbb, 0x1b, 0x5d, 0xe3, 0x55, 0x9c, 0x66, 0xf2, 0x29, 0xf0, 0x87, 0x21,
+ 0xa3, 0x1e, 0x1a, 0xdc, 0xbf, 0x93, 0x2a, 0xad, 0x99, 0x59, 0x8e, 0x71, 0x67, 0xdf, 0xf7, 0x90,
+ 0x9e, 0x09, 0x90, 0x6d, 0xdf, 0x76, 0x4f, 0x5a, 0xbb, 0x15, 0xcd, 0x92, 0x57, 0xff, 0xd9, 0x0d,
+ 0x72, 0xcc, 0xab, 0x56, 0x45, 0x22, 0x7d, 0xbb, 0x27, 0xad, 0xbd, 0xfe, 0x61, 0xf4, 0x6e, 0xdb,
+ 0xab, 0x5e, 0x88, 0x76, 0x3a, 0x4d, 0x81, 0xb5, 0xe8, 0x51, 0x7f, 0x05, 0xed, 0xfe, 0x9f, 0xcd,
+ 0x81, 0xb7, 0xf2, 0x3f, 0xe3, 0x8b, 0x05, 0xcb, 0x13, 0x96, 0x34, 0x1a, 0x55, 0xbd, 0x31, 0xfb,
+ 0x8c, 0xb6, 0x6b, 0x14, 0x46, 0xae, 0x86, 0x29, 0xd1, 0xaf, 0x7f, 0x03, 0x4d, 0x5d, 0xb4, 0x7f,
+ 0x1f, 0x44, 0xf7, 0xd1, 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0xb7, 0xfa, 0x38, 0xc2, 0x34, 0x4d,
+ 0x51, 0xc7, 0xff, 0x07, 0x0b, 0xba, 0xc8, 0xff, 0x32, 0x88, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77,
+ 0x79, 0x7e, 0x91, 0xa5, 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6,
+ 0x0c, 0x68, 0xda, 0x5d, 0xf1, 0xe7, 0x69, 0x25, 0x78, 0xb9, 0x9e, 0x5c, 0xf2, 0x57, 0xcd, 0x9b,
+ 0x48, 0xfe, 0xbc, 0xac, 0x81, 0x91, 0x43, 0x10, 0xbb, 0x62, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x2c,
+ 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, 0x76, 0x55, 0x6a, 0x6a, 0x65, 0x5f, 0xaf, 0xda,
+ 0xc4, 0x8b, 0xda, 0x7e, 0xc5, 0xea, 0x5e, 0x37, 0x68, 0x73, 0x53, 0x2d, 0xde, 0x4b, 0x2f, 0x2e,
+ 0x4c, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x9b, 0x12, 0xa8, 0xdd, 0x5e, 0x3d, 0x4f, 0x33, 0x26,
+ 0x1f, 0x0a, 0x7d, 0x71, 0x71, 0x91, 0xf1, 0x38, 0x01, 0xdb, 0xab, 0x5a, 0x3c, 0x72, 0xe5, 0xc4,
+ 0xf6, 0x0a, 0xe3, 0xec, 0x75, 0x93, 0x5a, 0x5a, 0x47, 0x77, 0x3e, 0x4b, 0x33, 0x78, 0x91, 0x59,
+ 0x6a, 0x1a, 0x21, 0x71, 0xdd, 0xa4, 0x05, 0xd9, 0x14, 0xa8, 0x16, 0xd5, 0x51, 0xd9, 0x94, 0xff,
+ 0x6e, 0x5b, 0xd1, 0x11, 0x13, 0x29, 0x10, 0x82, 0xd9, 0xe3, 0x8b, 0x5a, 0x78, 0x56, 0x48, 0xe3,
+ 0xb7, 0xda, 0x5a, 0x4a, 0x42, 0x1c, 0x5f, 0xf8, 0x84, 0xdd, 0x2d, 0xd7, 0x7f, 0xdf, 0xe3, 0xaf,
+ 0x72, 0x69, 0xf4, 0x76, 0x5b, 0xa5, 0x91, 0x11, 0xbb, 0x65, 0xc8, 0x68, 0xc3, 0x3f, 0x8a, 0xfe,
+ 0xbf, 0x34, 0x5c, 0xf2, 0x62, 0x78, 0x03, 0x51, 0x28, 0x9d, 0x6b, 0xbf, 0x37, 0x49, 0xb9, 0xbd,
+ 0x9d, 0x62, 0x62, 0xe3, 0xac, 0x8a, 0xe7, 0xf0, 0xae, 0xbe, 0xed, 0x71, 0x29, 0x25, 0x6e, 0xa7,
+ 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x79, 0xa2, 0xad, 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90,
+ 0x4d, 0x5b, 0x8f, 0xe3, 0x55, 0x3a, 0x37, 0xa9, 0x85, 0x9a, 0xc0, 0x2a, 0x90, 0xb6, 0x5a, 0x66,
+ 0xe4, 0x40, 0x44, 0xda, 0x4a, 0xc2, 0xda, 0xe7, 0xdf, 0x0f, 0xa2, 0x5b, 0x96, 0xd9, 0x6f, 0x0e,
+ 0x7c, 0x0f, 0xf2, 0x0b, 0x5e, 0x27, 0xb9, 0x87, 0x69, 0x7e, 0x55, 0x0d, 0x3f, 0xa1, 0x4c, 0xe2,
+ 0xbc, 0x29, 0xca, 0xa7, 0xd7, 0xd6, 0xb3, 0xfb, 0x93, 0xe6, 0x34, 0xd4, 0x5e, 0x89, 0x50, 0x1a,
+ 0x60, 0x7f, 0x62, 0x0e, 0x4d, 0x21, 0x47, 0xec, 0x4f, 0x42, 0xbc, 0xed, 0x62, 0xe3, 0x3c, 0xe3,
+ 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, 0x88, 0xd4, 0xf9,
+ 0xda, 0x38, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, 0xfd, 0x9c, 0x46,
+ 0xdf, 0xaa, 0x9b, 0xf4, 0xa4, 0x64, 0xab, 0x94, 0xc1, 0xdb, 0x3b, 0x8e, 0x84, 0x18, 0xff, 0x3e,
+ 0x61, 0x47, 0xd6, 0x59, 0x5e, 0x15, 0x59, 0x5c, 0x5d, 0xea, 0xfb, 0x1c, 0x7e, 0x9d, 0x1b, 0x21,
+ 0xbc, 0xd1, 0x71, 0xb7, 0x83, 0xb2, 0x93, 0x7a, 0x23, 0x33, 0x53, 0xcc, 0x06, 0xae, 0xda, 0x9a,
+ 0x66, 0x36, 0x3b, 0x39, 0xfb, 0xd0, 0x64, 0x3f, 0xce, 0x32, 0x56, 0xae, 0x1b, 0xd9, 0x51, 0x9c,
+ 0xa7, 0x17, 0xac, 0x12, 0xe0, 0xa1, 0x89, 0xa6, 0x46, 0x10, 0x23, 0x1e, 0x9a, 0x04, 0x70, 0xbb,
+ 0x6f, 0x03, 0x9e, 0x0f, 0xf2, 0x84, 0xbd, 0x06, 0xfb, 0x36, 0x68, 0x47, 0x32, 0xc4, 0xbe, 0x8d,
+ 0x62, 0xed, 0xc3, 0x83, 0xa7, 0x19, 0x9f, 0x5d, 0xe9, 0x25, 0xc0, 0xef, 0x60, 0x29, 0x81, 0x6b,
+ 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x65, 0x45, 0x16, 0xcf, 0xe0, 0x15, 0x2e, 0xa5,
+ 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x35, 0x0c, 0x2b, 0x2e, 0xb8, 0x19, 0x76,
+ 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, 0x86, 0x94, 0x10,
+ 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x23, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, 0x26, 0x1b, 0xc2,
+ 0xde, 0x57, 0x57, 0x75, 0xe7, 0xc5, 0x1a, 0xdc, 0x57, 0xd7, 0xd5, 0xe2, 0xc5, 0x9a, 0xb8, 0xaf,
+ 0xee, 0x01, 0xa0, 0x88, 0x27, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, 0x0d, 0x61, 0xd7,
+ 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0x89, 0xe1, 0x26, 0x29, 0xb7, 0x33,
+ 0x89, 0xea, 0x15, 0x26, 0x9e, 0xa7, 0x2c, 0x4b, 0x2a, 0x30, 0x93, 0xe8, 0x76, 0x6f, 0xa4, 0xc4,
+ 0x4c, 0xd2, 0xa6, 0x40, 0x28, 0xe9, 0x27, 0x20, 0x58, 0xed, 0xc0, 0x03, 0x90, 0xdb, 0x21, 0xc4,
+ 0xce, 0x4f, 0x4d, 0xa1, 0x77, 0xe3, 0xb2, 0x4c, 0xeb, 0xc5, 0x7f, 0x03, 0x2f, 0x50, 0x23, 0x27,
+ 0xe6, 0x27, 0x8c, 0x03, 0xc3, 0xab, 0x99, 0xb8, 0xb1, 0x82, 0xc1, 0xa9, 0xfb, 0x83, 0x20, 0x63,
+ 0x33, 0x4e, 0x29, 0x71, 0x9e, 0xc2, 0x63, 0xad, 0x89, 0x3c, 0x84, 0xdf, 0xe8, 0xc2, 0x9c, 0x97,
+ 0xd9, 0x8c, 0x8b, 0x23, 0xbe, 0x62, 0x53, 0xfe, 0xec, 0x75, 0x5a, 0xd5, 0xdb, 0x2d, 0xbd, 0x72,
+ 0x3f, 0x21, 0x2c, 0x61, 0x30, 0xf1, 0x32, 0x5b, 0xa7, 0x92, 0x4d, 0x20, 0x40, 0x59, 0x8e, 0xd9,
+ 0x2b, 0x34, 0x81, 0x80, 0x16, 0x0d, 0x47, 0x24, 0x10, 0x21, 0xde, 0x9e, 0x98, 0x19, 0xe7, 0xfa,
+ 0x0b, 0x06, 0x53, 0xde, 0xe4, 0x72, 0x94, 0x35, 0x08, 0x12, 0x87, 0x16, 0x41, 0x05, 0xbb, 0xbf,
+ 0x34, 0xfe, 0xed, 0x10, 0xbb, 0x47, 0xd8, 0x69, 0x0f, 0xb3, 0xfb, 0x3d, 0x48, 0xc4, 0x95, 0xbd,
+ 0x4a, 0x42, 0xb9, 0x6a, 0xdf, 0x24, 0xb9, 0xdf, 0x83, 0x74, 0x4e, 0xdf, 0xdc, 0x6a, 0x3d, 0x8d,
+ 0x67, 0x57, 0xf3, 0x92, 0x2f, 0xf3, 0x64, 0x97, 0x67, 0xbc, 0x04, 0xa7, 0x6f, 0x5e, 0xa9, 0x01,
+ 0x4a, 0x9c, 0xbe, 0x75, 0xa8, 0xd8, 0x0c, 0xce, 0x2d, 0xc5, 0x38, 0x4b, 0xe7, 0x70, 0x47, 0xed,
+ 0x19, 0x92, 0x00, 0x91, 0xc1, 0xa1, 0x20, 0x12, 0x44, 0x6a, 0xc7, 0x2d, 0xd2, 0x59, 0x9c, 0x29,
+ 0x7f, 0x3b, 0xb4, 0x19, 0x0f, 0xec, 0x0c, 0x22, 0x44, 0x01, 0xa9, 0xe7, 0x74, 0x59, 0xe6, 0x07,
+ 0xb9, 0xe0, 0x64, 0x3d, 0x1b, 0xa0, 0xb3, 0x9e, 0x0e, 0x08, 0xa6, 0xd5, 0x29, 0x7b, 0x5d, 0x97,
+ 0xa6, 0xfe, 0x07, 0x9b, 0x56, 0xeb, 0xbf, 0x8f, 0xb4, 0x3c, 0x34, 0xad, 0x02, 0x0e, 0x54, 0x46,
+ 0x3b, 0x51, 0x01, 0x13, 0xd0, 0xf6, 0xc3, 0xe4, 0x5e, 0x37, 0x88, 0xfb, 0x99, 0x88, 0x75, 0xc6,
+ 0x42, 0x7e, 0x24, 0xd0, 0xc7, 0x4f, 0x03, 0xda, 0xe3, 0x16, 0xaf, 0x3e, 0x97, 0x6c, 0x76, 0xd5,
+ 0xba, 0x19, 0xe7, 0x17, 0x54, 0x21, 0xc4, 0x71, 0x0b, 0x81, 0xe2, 0x5d, 0x74, 0x30, 0xe3, 0x79,
+ 0xa8, 0x8b, 0x6a, 0x79, 0x9f, 0x2e, 0xd2, 0x9c, 0xdd, 0xfc, 0x1a, 0xa9, 0x8e, 0x4c, 0xd5, 0x4d,
+ 0x5b, 0x84, 0x05, 0x17, 0x22, 0x36, 0xbf, 0x24, 0x6c, 0x73, 0x72, 0xe8, 0xf3, 0xa8, 0xfd, 0xda,
+ 0x40, 0xcb, 0xca, 0x11, 0xfd, 0xda, 0x00, 0xc5, 0xd2, 0x95, 0x54, 0x31, 0xd2, 0x61, 0xc5, 0x8f,
+ 0x93, 0x87, 0xfd, 0x60, 0xbb, 0xe5, 0xf1, 0x7c, 0xee, 0x66, 0x2c, 0x2e, 0x95, 0xd7, 0xed, 0x80,
+ 0x21, 0x8b, 0x11, 0x5b, 0x9e, 0x00, 0x0e, 0xa6, 0x30, 0xcf, 0xf3, 0x2e, 0xcf, 0x05, 0xcb, 0x05,
+ 0x36, 0x85, 0xf9, 0xc6, 0x34, 0x18, 0x9a, 0xc2, 0x28, 0x05, 0x10, 0xb7, 0xf2, 0x3c, 0x88, 0x89,
+ 0xe3, 0x78, 0x81, 0x66, 0x6c, 0xea, 0xac, 0x47, 0xc9, 0x43, 0x71, 0x0b, 0x38, 0xe7, 0x71, 0xae,
+ 0xeb, 0x65, 0x1a, 0x97, 0x73, 0x73, 0xba, 0x91, 0x0c, 0x1f, 0xd1, 0x76, 0x7c, 0x92, 0x78, 0x9c,
+ 0x1b, 0xd6, 0x00, 0xd3, 0xce, 0xc1, 0x22, 0x9e, 0x9b, 0x9a, 0x22, 0x35, 0x90, 0xf2, 0x56, 0x55,
+ 0xef, 0x75, 0x83, 0xc0, 0xcf, 0x8b, 0x34, 0x61, 0x3c, 0xe0, 0x47, 0xca, 0xfb, 0xf8, 0x81, 0x20,
+ 0xc8, 0xde, 0xea, 0x7a, 0xab, 0x1d, 0xdd, 0x38, 0x4f, 0xf4, 0x3e, 0x76, 0x44, 0x34, 0x0f, 0xe0,
+ 0x42, 0xd9, 0x1b, 0xc1, 0x83, 0x31, 0xda, 0x1c, 0xd0, 0x86, 0xc6, 0xa8, 0x39, 0x7f, 0xed, 0x33,
+ 0x46, 0x31, 0x58, 0xfb, 0xfc, 0x89, 0x1e, 0xa3, 0x7b, 0xb1, 0x88, 0xeb, 0xbc, 0xfd, 0x45, 0xca,
+ 0x5e, 0xe9, 0x8d, 0x30, 0x52, 0xdf, 0x86, 0x1a, 0xc9, 0xb7, 0x9e, 0xc1, 0xae, 0x78, 0xa7, 0x37,
+ 0x1f, 0xf0, 0xad, 0x77, 0x08, 0x9d, 0xbe, 0xc1, 0x56, 0x61, 0xa7, 0x37, 0x1f, 0xf0, 0xad, 0x3f,
+ 0xa7, 0xd0, 0xe9, 0x1b, 0x7c, 0x53, 0x61, 0xa7, 0x37, 0xaf, 0x7d, 0xff, 0x69, 0x33, 0x70, 0x5d,
+ 0xe7, 0x75, 0x1e, 0x36, 0x13, 0xe9, 0x8a, 0x61, 0xe9, 0xa4, 0x6f, 0xcf, 0xa0, 0xa1, 0x74, 0x92,
+ 0x56, 0x71, 0x3e, 0x68, 0x86, 0x95, 0xe2, 0x84, 0x57, 0xa9, 0xbc, 0x8e, 0xf1, 0xa4, 0x87, 0xd1,
+ 0x06, 0x0e, 0x6d, 0x9a, 0x42, 0x4a, 0xf6, 0xc1, 0xb2, 0x87, 0xda, 0x8b, 0xf0, 0x0f, 0x03, 0xf6,
+ 0xda, 0xf7, 0xe1, 0xb7, 0x7b, 0xd2, 0xf6, 0x11, 0xaf, 0xc7, 0xb8, 0xcf, 0x96, 0x43, 0xbd, 0x8a,
+ 0x3e, 0x5e, 0x7e, 0xd4, 0x5f, 0x41, 0xbb, 0xff, 0xf3, 0x66, 0x5f, 0x01, 0xfd, 0xeb, 0x41, 0xf0,
+ 0xb8, 0x8f, 0x45, 0x30, 0x10, 0x9e, 0x5c, 0x4b, 0x47, 0x17, 0xe4, 0xaf, 0x9b, 0x0d, 0x74, 0x83,
+ 0xca, 0xd7, 0x81, 0xe4, 0x6b, 0xc4, 0x7a, 0x4c, 0x84, 0xba, 0xd5, 0xc2, 0x70, 0x64, 0x7c, 0x7c,
+ 0x4d, 0x2d, 0xe7, 0xf3, 0x76, 0x1e, 0xac, 0x5f, 0x5b, 0x75, 0xca, 0x13, 0xb2, 0xec, 0xd0, 0xb0,
+ 0x40, 0x9f, 0x5c, 0x57, 0x8d, 0x1a, 0x2b, 0x0e, 0x2c, 0x3f, 0xf0, 0xf2, 0xa4, 0xa7, 0x61, 0xef,
+ 0x93, 0x2f, 0x1f, 0x5d, 0x4f, 0x49, 0x97, 0xe5, 0xdf, 0x06, 0xd1, 0x5d, 0x8f, 0xb5, 0xcf, 0x13,
+ 0xc0, 0xa9, 0xc7, 0x0f, 0x02, 0xf6, 0x29, 0x25, 0x53, 0xb8, 0xdf, 0xf8, 0x66, 0xca, 0xf6, 0x5b,
+ 0x70, 0x9e, 0xca, 0xf3, 0x34, 0x13, 0xac, 0x6c, 0x7f, 0x0b, 0xce, 0xb7, 0xab, 0xa8, 0x11, 0xfd,
+ 0x2d, 0xb8, 0x00, 0xee, 0x7c, 0x0b, 0x0e, 0xf1, 0x8c, 0x7e, 0x0b, 0x0e, 0xb5, 0x16, 0xfc, 0x16,
+ 0x5c, 0x58, 0x83, 0x9a, 0xde, 0x9b, 0x22, 0xa8, 0x73, 0xeb, 0x5e, 0x16, 0xfd, 0x63, 0xec, 0xc7,
+ 0xd7, 0x51, 0x21, 0x16, 0x38, 0xc5, 0xc9, 0x1b, 0x8d, 0x3d, 0xda, 0xd4, 0xbb, 0xd5, 0xb8, 0xd3,
+ 0x9b, 0xd7, 0xbe, 0x7f, 0xac, 0x77, 0x37, 0x66, 0x3a, 0xe7, 0xa5, 0xfc, 0x0e, 0xe0, 0x56, 0x68,
+ 0x7a, 0xae, 0x2d, 0xb8, 0x3d, 0xff, 0xb0, 0x1f, 0x4c, 0x54, 0xb7, 0x26, 0x74, 0xa7, 0x8f, 0xba,
+ 0x0c, 0x81, 0x2e, 0xdf, 0xe9, 0xcd, 0x13, 0xcb, 0x88, 0xf2, 0xad, 0x7a, 0xbb, 0x87, 0x31, 0xbf,
+ 0xaf, 0x1f, 0xf5, 0x57, 0xd0, 0xee, 0x57, 0x3a, 0x6d, 0x74, 0xdd, 0xcb, 0x7e, 0xde, 0xee, 0x32,
+ 0x35, 0xf1, 0xba, 0x79, 0xd4, 0x17, 0x0f, 0x25, 0x10, 0xee, 0x12, 0xda, 0x95, 0x40, 0xa0, 0xcb,
+ 0xe8, 0x47, 0xd7, 0x53, 0xd2, 0x65, 0xf9, 0xbb, 0x41, 0x74, 0x93, 0x2c, 0x8b, 0x8e, 0x83, 0x4f,
+ 0xfa, 0x5a, 0x06, 0xf1, 0xf0, 0xe9, 0xb5, 0xf5, 0x74, 0xa1, 0xfe, 0x71, 0x10, 0xdd, 0x0a, 0x14,
+ 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xd9, 0xf5, 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27,
+ 0xed, 0xef, 0x7a, 0x05, 0x6c, 0x4f, 0xe8, 0xef, 0x7a, 0x75, 0x6b, 0xc1, 0x43, 0x9e, 0xf8, 0xbc,
+ 0xd9, 0x74, 0xa1, 0x87, 0x3c, 0xf2, 0x2e, 0x62, 0xf0, 0xfb, 0x24, 0x18, 0x87, 0x39, 0x79, 0xf6,
+ 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, 0x07, 0x0f, 0xc7, 0x6a, 0xe9, 0x29,
+ 0x6f, 0x36, 0x52, 0xf7, 0x29, 0x7d, 0x83, 0x04, 0x0f, 0xc7, 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d,
+ 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd0, 0x07, 0x05, 0x29, 0xba, 0xf1, 0x66, 0xce, 0xdc, 0x1f, 0x86,
+ 0xac, 0xb4, 0xce, 0xdd, 0xb7, 0x7b, 0xd2, 0x84, 0xdb, 0x09, 0x13, 0x9f, 0xb3, 0x38, 0x61, 0x65,
+ 0xd0, 0xad, 0xa1, 0x7a, 0xb9, 0x75, 0x69, 0xcc, 0xed, 0x2e, 0xcf, 0x96, 0x8b, 0x5c, 0x77, 0x26,
+ 0xe9, 0xd6, 0xa5, 0xba, 0xdd, 0x02, 0x1a, 0x1e, 0x0b, 0x5a, 0xb7, 0x32, 0xbd, 0x7c, 0x10, 0x36,
+ 0xe3, 0x65, 0x95, 0x5b, 0xbd, 0x58, 0xba, 0x9e, 0x3a, 0x8c, 0x3a, 0xea, 0x09, 0x22, 0x69, 0xbb,
+ 0x27, 0x0d, 0xcf, 0xe7, 0x1c, 0xb7, 0x26, 0x9e, 0x76, 0x3a, 0x6c, 0xb5, 0x42, 0xea, 0x51, 0x7f,
+ 0x05, 0x78, 0x1a, 0xaa, 0xa3, 0xea, 0x30, 0xad, 0xc4, 0xf3, 0x34, 0xcb, 0x86, 0x5b, 0x81, 0x30,
+ 0x69, 0xa0, 0xe0, 0x69, 0x28, 0x02, 0x13, 0x91, 0xdc, 0x9c, 0x1e, 0xe6, 0xc3, 0x2e, 0x3b, 0x92,
+ 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x4e, 0xb4, 0x9c, 0xa6, 0x36, 0xb5, 0x1d, 0x85, 0x1b, 0xae, 0x55,
+ 0xe1, 0x9d, 0xde, 0x3c, 0x78, 0xdc, 0x2e, 0x29, 0xb9, 0xb2, 0xdc, 0xa1, 0x4c, 0x78, 0x2b, 0xc9,
+ 0xdd, 0x0e, 0x0a, 0x9c, 0x0a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, 0xe6, 0x4c, 0xa0, 0x4f, 0x8a, 0x5c,
+ 0x20, 0xf8, 0xa4, 0x08, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, 0x71, 0xe8, 0x41, 0x82, 0x75, 0x9d,
+ 0x56, 0x76, 0xa8, 0x50, 0xd7, 0xa1, 0x34, 0x98, 0x0d, 0x8c, 0x5b, 0xfd, 0x45, 0x87, 0x07, 0x21,
+ 0x33, 0xe0, 0xb3, 0x0e, 0x5b, 0xbd, 0x58, 0xb0, 0xa2, 0x58, 0x87, 0xe9, 0x22, 0x15, 0xd8, 0x8a,
+ 0xe2, 0xd8, 0xa8, 0x91, 0xd0, 0x8a, 0xd2, 0x46, 0xa9, 0xea, 0xd5, 0x39, 0xc2, 0x41, 0x12, 0xae,
+ 0x9e, 0x62, 0xfa, 0x55, 0xcf, 0xb0, 0xad, 0x07, 0x9b, 0xb9, 0x09, 0x19, 0x71, 0xa9, 0x37, 0xcb,
+ 0x48, 0x6c, 0xcb, 0x37, 0x7d, 0x21, 0x18, 0x9a, 0x75, 0x28, 0x05, 0x78, 0x60, 0x5f, 0x73, 0xcd,
+ 0xb3, 0xd7, 0xa2, 0x60, 0x71, 0x19, 0xe7, 0x33, 0x74, 0x73, 0x2a, 0x0d, 0xb6, 0xc8, 0xd0, 0xe6,
+ 0x94, 0xd4, 0x00, 0x8f, 0xcd, 0xfd, 0x57, 0x69, 0x91, 0xa1, 0x60, 0xde, 0x59, 0xf5, 0xdf, 0xa4,
+ 0xbd, 0xdf, 0x83, 0x84, 0x8f, 0xcd, 0x1b, 0xc0, 0x1c, 0x7c, 0x2b, 0xa7, 0x1f, 0x06, 0x4c, 0xf9,
+ 0x68, 0x68, 0x23, 0x4c, 0xab, 0x80, 0xa0, 0x36, 0x09, 0x2e, 0x13, 0x3f, 0x62, 0x6b, 0x2c, 0xa8,
+ 0x6d, 0x7e, 0x2a, 0x91, 0x50, 0x50, 0xb7, 0x51, 0x90, 0x67, 0xba, 0xfb, 0xa0, 0x8d, 0x80, 0xbe,
+ 0xbb, 0xf5, 0xd9, 0xec, 0xe4, 0xc0, 0xc8, 0xd9, 0x4b, 0x57, 0xde, 0x73, 0x02, 0xa4, 0xa0, 0x7b,
+ 0xe9, 0x0a, 0x7f, 0x4c, 0xb0, 0xd5, 0x8b, 0x85, 0x8f, 0xe4, 0x63, 0xc1, 0x5e, 0x37, 0xcf, 0xca,
+ 0x91, 0xe2, 0x4a, 0x79, 0xeb, 0x61, 0xf9, 0xbd, 0x6e, 0xd0, 0x5e, 0x80, 0x3d, 0x29, 0xf9, 0x8c,
+ 0x55, 0x95, 0xfe, 0xd8, 0xa9, 0x7f, 0xc3, 0x48, 0xcb, 0x46, 0xe0, 0x53, 0xa7, 0x77, 0xc2, 0x90,
+ 0xf3, 0x85, 0x42, 0x25, 0xb2, 0x1f, 0x4e, 0xda, 0x40, 0x35, 0xdb, 0xdf, 0x4c, 0xda, 0xec, 0xe4,
+ 0xec, 0xf0, 0xd2, 0x52, 0xf7, 0x4b, 0x49, 0xf7, 0x50, 0x75, 0xec, 0x23, 0x49, 0xf7, 0x7b, 0x90,
+ 0xda, 0xd5, 0xe7, 0xd1, 0x9b, 0x87, 0x7c, 0x3e, 0x61, 0x79, 0x32, 0xfc, 0x9e, 0x7f, 0x85, 0x96,
+ 0xcf, 0x47, 0xf5, 0x9f, 0x8d, 0xd1, 0x1b, 0x94, 0xd8, 0x5e, 0x02, 0xdc, 0x63, 0xe7, 0xcb, 0xf9,
+ 0x44, 0xc4, 0x02, 0x5c, 0x02, 0x94, 0x7f, 0x1f, 0xd5, 0x02, 0xe2, 0x12, 0xa0, 0x07, 0x00, 0x7b,
+ 0xd3, 0x92, 0x31, 0xd4, 0x5e, 0x2d, 0x08, 0xda, 0xd3, 0x80, 0xcd, 0x22, 0x8c, 0xbd, 0x3a, 0x51,
+ 0x87, 0x97, 0xf6, 0xac, 0x8e, 0x94, 0x12, 0x59, 0x44, 0x9b, 0xb2, 0xc1, 0xad, 0xaa, 0x2f, 0x3f,
+ 0x5c, 0xb3, 0x5c, 0x2c, 0xe2, 0x72, 0x0d, 0x82, 0x5b, 0xd7, 0xd2, 0x01, 0x88, 0xe0, 0x46, 0x41,
+ 0x3b, 0x6a, 0x9b, 0x66, 0x9e, 0x5d, 0xed, 0xf3, 0x92, 0x2f, 0x45, 0x9a, 0x33, 0xf8, 0xf1, 0x12,
+ 0xd3, 0xa0, 0x2e, 0x43, 0x8c, 0x5a, 0x8a, 0xb5, 0x59, 0xae, 0x24, 0xd4, 0x7d, 0x42, 0xf9, 0xfd,
+ 0xf5, 0x4a, 0xf0, 0x12, 0x3e, 0x4f, 0x54, 0x56, 0x20, 0x44, 0x64, 0xb9, 0x24, 0x0c, 0xfa, 0xfe,
+ 0x24, 0xcd, 0xe7, 0x68, 0xdf, 0x9f, 0xb8, 0x1f, 0x10, 0xbe, 0x45, 0x03, 0x76, 0x40, 0xa9, 0x46,
+ 0x53, 0x03, 0x40, 0xbf, 0xb5, 0x8b, 0x36, 0xba, 0x4b, 0x10, 0x03, 0x0a, 0x27, 0x81, 0xab, 0x2f,
+ 0x0a, 0x96, 0xb3, 0xa4, 0xb9, 0x35, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0xb9, 0x48,
+ 0xca, 0x4f, 0x97, 0xf9, 0x49, 0xc9, 0x2f, 0xd2, 0x8c, 0x95, 0x60, 0x2e, 0x52, 0xea, 0x8e, 0x9c,
+ 0x98, 0x8b, 0x30, 0xce, 0x5e, 0xbf, 0x90, 0x52, 0xef, 0x47, 0x04, 0xa6, 0x65, 0x3c, 0x83, 0xd7,
+ 0x2f, 0x94, 0x8d, 0x36, 0x46, 0x9c, 0x0c, 0x06, 0x70, 0x27, 0xd1, 0x51, 0xae, 0xf3, 0xb5, 0x8c,
+ 0x0f, 0xfd, 0xd6, 0xa8, 0xfc, 0xac, 0x6e, 0x05, 0x12, 0x1d, 0x6d, 0x0e, 0x23, 0x89, 0x44, 0x27,
+ 0xac, 0x61, 0x97, 0x12, 0xc9, 0x1d, 0xeb, 0x6b, 0x45, 0x60, 0x29, 0x51, 0x36, 0x1a, 0x21, 0xb1,
+ 0x94, 0xb4, 0x20, 0x30, 0x21, 0x35, 0xc3, 0x60, 0x8e, 0x4e, 0x48, 0x46, 0x1a, 0x9c, 0x90, 0x5c,
+ 0xca, 0x4e, 0x14, 0x07, 0x79, 0x2a, 0xd2, 0x38, 0x9b, 0x30, 0x71, 0x12, 0x97, 0xf1, 0x82, 0x09,
+ 0x56, 0xc2, 0x89, 0x42, 0x23, 0x23, 0x8f, 0x21, 0x26, 0x0a, 0x8a, 0xd5, 0x0e, 0x7f, 0x33, 0x7a,
+ 0xbb, 0x5e, 0xf7, 0x59, 0xae, 0x7f, 0xfe, 0xe8, 0x99, 0xfc, 0xdd, 0xb4, 0xe1, 0x3b, 0xc6, 0xc6,
+ 0x44, 0x94, 0x2c, 0x5e, 0x34, 0xb6, 0xdf, 0x32, 0x7f, 0x97, 0xe0, 0xa3, 0x41, 0x1d, 0xcf, 0xc7,
+ 0x5c, 0xa4, 0x17, 0xf5, 0x36, 0x5b, 0xbf, 0x41, 0x04, 0xe2, 0xd9, 0x15, 0x8f, 0x02, 0x5f, 0x1d,
+ 0xc1, 0x38, 0x3b, 0x4f, 0xbb, 0xd2, 0x53, 0x56, 0x64, 0x70, 0x9e, 0xf6, 0xb4, 0x25, 0x40, 0xcc,
+ 0xd3, 0x28, 0x68, 0x07, 0xa7, 0x2b, 0x9e, 0xb2, 0x70, 0x65, 0xa6, 0xac, 0x5f, 0x65, 0xa6, 0xde,
+ 0x4b, 0x19, 0x59, 0xf4, 0xf6, 0x11, 0x5b, 0x9c, 0xb3, 0xb2, 0xba, 0x4c, 0x0b, 0xea, 0xd3, 0xbf,
+ 0x96, 0xe8, 0xfc, 0xf4, 0x2f, 0x81, 0xda, 0x95, 0xc0, 0x02, 0x07, 0xd5, 0x71, 0xbc, 0x60, 0xf2,
+ 0x1b, 0x2a, 0x60, 0x25, 0x70, 0x8c, 0x38, 0x10, 0xb1, 0x12, 0x90, 0xb0, 0xf3, 0x7e, 0x97, 0x65,
+ 0x4e, 0xd9, 0xbc, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0x2f, 0x58, 0x2e, 0xb4, 0x49, 0x70, 0x26, 0xef,
+ 0x98, 0xc4, 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x33, 0x35, 0x79, 0x0d, 0x7f, 0xc2, 0x4b, 0xa1,
+ 0x7e, 0xdc, 0xec, 0xac, 0xcc, 0xc0, 0xd4, 0xe4, 0x37, 0xaa, 0x47, 0x12, 0x53, 0x53, 0x58, 0xc3,
+ 0xf9, 0x21, 0x0b, 0xaf, 0x0c, 0x2f, 0x58, 0x69, 0xe2, 0xe4, 0xd9, 0x22, 0x4e, 0x33, 0x1d, 0x0d,
+ 0xdf, 0x0f, 0xd8, 0x26, 0x74, 0x88, 0x1f, 0xb2, 0xe8, 0xab, 0xeb, 0xfc, 0xf4, 0x47, 0xb8, 0x84,
+ 0xe0, 0x11, 0x41, 0x87, 0x7d, 0xe2, 0x11, 0x41, 0xb7, 0x96, 0xdd, 0xb9, 0x5b, 0x56, 0x72, 0x6b,
+ 0x49, 0xec, 0xf2, 0x04, 0x9e, 0x17, 0x3a, 0x36, 0x01, 0x48, 0xec, 0xdc, 0x83, 0x0a, 0x36, 0x35,
+ 0xb0, 0xd8, 0xf3, 0x34, 0x8f, 0xb3, 0xf4, 0x27, 0x30, 0xad, 0x77, 0xec, 0x34, 0x04, 0x91, 0x1a,
+ 0xe0, 0x24, 0xe6, 0x6a, 0x9f, 0x89, 0x69, 0x5a, 0x4f, 0xfd, 0xf7, 0x02, 0xed, 0x26, 0x89, 0x6e,
+ 0x57, 0x0e, 0xe9, 0x7c, 0xe6, 0x17, 0x36, 0xeb, 0xb8, 0x28, 0x26, 0xf5, 0xaa, 0x7a, 0xca, 0x66,
+ 0x2c, 0x2d, 0xc4, 0xf0, 0xe3, 0x70, 0x5b, 0x01, 0x9c, 0xb8, 0x68, 0xd1, 0x43, 0xcd, 0x79, 0x7c,
+ 0x5f, 0xcf, 0x25, 0x13, 0xf5, 0xab, 0x9f, 0x67, 0x15, 0x2b, 0x75, 0xa2, 0xb1, 0xcf, 0x04, 0x18,
+ 0x9d, 0x0e, 0x37, 0x72, 0xc0, 0xba, 0xa2, 0xc4, 0xe8, 0x0c, 0x6b, 0xd8, 0xc3, 0x3e, 0x87, 0xd3,
+ 0x9f, 0x6d, 0x97, 0xf7, 0x0d, 0x1f, 0x92, 0xc6, 0x1c, 0x8a, 0x38, 0xec, 0xa3, 0x69, 0x9b, 0xad,
+ 0xb5, 0xdd, 0x8e, 0xf3, 0xf5, 0x01, 0xbc, 0x32, 0x81, 0x58, 0x92, 0x18, 0x91, 0xad, 0x05, 0x70,
+ 0xe7, 0x30, 0xbc, 0xe4, 0x71, 0x32, 0x8b, 0x2b, 0x71, 0x12, 0xaf, 0x33, 0x1e, 0x27, 0x72, 0x5d,
+ 0x87, 0x87, 0xe1, 0x0d, 0x33, 0x72, 0x21, 0xea, 0x30, 0x9c, 0x82, 0xdd, 0xec, 0x4c, 0xfe, 0x98,
+ 0xa9, 0xbe, 0xcb, 0x09, 0xb3, 0x33, 0x59, 0x5e, 0x78, 0x8f, 0xf3, 0x4e, 0x18, 0xb2, 0xef, 0xa0,
+ 0x29, 0x91, 0x4c, 0x43, 0x6e, 0x61, 0x3a, 0x5e, 0x02, 0xf2, 0x7e, 0x80, 0xb0, 0x5f, 0x20, 0x51,
+ 0x7f, 0x6f, 0x7e, 0xbf, 0x4a, 0xe8, 0x8f, 0xa1, 0x3f, 0xc4, 0x74, 0x5d, 0x68, 0xe4, 0x7e, 0xc8,
+ 0x62, 0xbb, 0x27, 0x6d, 0xd3, 0xcc, 0xdd, 0xcb, 0x58, 0x8c, 0x93, 0xe4, 0x88, 0x55, 0xc8, 0x0b,
+ 0xe5, 0xb5, 0x70, 0x64, 0xa5, 0x44, 0x9a, 0xd9, 0xa6, 0x6c, 0xa0, 0xd7, 0xb2, 0x67, 0x49, 0x2a,
+ 0xb4, 0xac, 0xb9, 0x21, 0xfd, 0xb0, 0x6d, 0xa0, 0x4d, 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x97, 0xd7,
+ 0xcc, 0x94, 0xcf, 0xe7, 0x19, 0xd3, 0xd0, 0x29, 0x8b, 0xd5, 0xb7, 0x20, 0x77, 0xda, 0xb6, 0x50,
+ 0x90, 0x98, 0xcb, 0x83, 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0xcd, 0xb6,
+ 0x19, 0x0f, 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xef, 0xbd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc,
+ 0xd8, 0x94, 0x54, 0x76, 0xc4, 0xc4, 0x7b, 0x6f, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xd3, 0xf5,
+ 0x41, 0x02, 0xf7, 0x09, 0x50, 0x5f, 0x32, 0xc4, 0x3e, 0x81, 0x62, 0xfd, 0xae, 0x33, 0xe7, 0x5e,
+ 0x87, 0x71, 0x65, 0x2b, 0x87, 0x74, 0x1d, 0x0a, 0x86, 0xba, 0x8e, 0x52, 0xf0, 0x9b, 0xd4, 0x3d,
+ 0x5a, 0x43, 0x9a, 0x14, 0x3b, 0x57, 0xdb, 0xe8, 0xc2, 0x6c, 0xee, 0x5f, 0x0b, 0x4f, 0x59, 0x9c,
+ 0x98, 0x8a, 0x21, 0xba, 0xae, 0x9c, 0xc8, 0xfd, 0x31, 0x4e, 0x3b, 0xf9, 0x9d, 0x68, 0xa8, 0xaa,
+ 0x51, 0xba, 0x6e, 0x6e, 0x61, 0x45, 0xac, 0x09, 0x62, 0xa2, 0xf2, 0x09, 0x27, 0x71, 0xf3, 0xba,
+ 0x68, 0xca, 0xb5, 0x03, 0xfd, 0x5e, 0x66, 0x05, 0x12, 0x37, 0xbf, 0xd9, 0x5b, 0x34, 0x91, 0xb8,
+ 0x75, 0x6b, 0xd9, 0x79, 0xde, 0xec, 0xcf, 0xe5, 0x15, 0x30, 0xfc, 0x47, 0x35, 0x94, 0x90, 0x98,
+ 0xe7, 0x5b, 0x90, 0xb2, 0xfd, 0xf4, 0xfd, 0xff, 0xf8, 0xea, 0xc6, 0xe0, 0x67, 0x5f, 0xdd, 0x18,
+ 0xfc, 0xf7, 0x57, 0x37, 0x06, 0x3f, 0xfd, 0xfa, 0xc6, 0x1b, 0x3f, 0xfb, 0xfa, 0xc6, 0x1b, 0xff,
+ 0xf5, 0xf5, 0x8d, 0x37, 0xbe, 0x7c, 0x53, 0xff, 0x68, 0xf8, 0xf9, 0xff, 0x93, 0x3f, 0xfd, 0xfd,
+ 0xe4, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x14, 0xc2, 0x04, 0x4c, 0x58, 0x7c, 0x00, 0x00,
}
// This is a compile-time assertion to ensure that this generated file
@@ -494,6 +494,7 @@ type ClientCommandsHandler interface {
ObjectUndo(context.Context, *pb.RpcObjectUndoRequest) *pb.RpcObjectUndoResponse
ObjectRedo(context.Context, *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse
ObjectListExport(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse
+ ObjectExport(context.Context, *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse
ObjectBookmarkFetch(context.Context, *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse
ObjectToBookmark(context.Context, *pb.RpcObjectToBookmarkRequest) *pb.RpcObjectToBookmarkResponse
ObjectImport(context.Context, *pb.RpcObjectImportRequest) *pb.RpcObjectImportResponse
@@ -2617,6 +2618,26 @@ func ObjectListExport(b []byte) (resp []byte) {
return resp
}
+func ObjectExport(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcObjectExportResponse{Error: &pb.RpcObjectExportResponseError{Code: pb.RpcObjectExportResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcObjectExportRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcObjectExportResponse{Error: &pb.RpcObjectExportResponseError{Code: pb.RpcObjectExportResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.ObjectExport(context.Background(), in).Marshal()
+ return resp
+}
+
func ObjectBookmarkFetch(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
@@ -6591,6 +6612,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = ObjectRedo(data)
case "ObjectListExport":
cd = ObjectListExport(data)
+ case "ObjectExport":
+ cd = ObjectExport(data)
case "ObjectBookmarkFetch":
cd = ObjectBookmarkFetch(data)
case "ObjectToBookmark":
@@ -8307,6 +8330,20 @@ func (h *ClientCommandsHandlerProxy) ObjectListExport(ctx context.Context, req *
call, _ := actualCall(ctx, req)
return call.(*pb.RpcObjectListExportResponse)
}
+func (h *ClientCommandsHandlerProxy) ObjectExport(ctx context.Context, req *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.ObjectExport(ctx, req.(*pb.RpcObjectExportRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "ObjectExport", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcObjectExportResponse)
+}
func (h *ClientCommandsHandlerProxy) ObjectBookmarkFetch(ctx context.Context, req *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse {
actualCall := func(ctx context.Context, req any) (any, error) {
return h.client.ObjectBookmarkFetch(ctx, req.(*pb.RpcObjectBookmarkFetchRequest)), nil
diff --git a/core/block/export/export.go b/core/block/export/export.go
index 5d87faff1..cb0bdb64b 100644
--- a/core/block/export/export.go
+++ b/core/block/export/export.go
@@ -3,8 +3,10 @@ package export
import (
"bytes"
"context"
+ "encoding/base64"
"fmt"
"math/rand"
+ "net/url"
"os"
"path/filepath"
"slices"
@@ -70,7 +72,7 @@ var log = logging.Logger("anytype-mw-export")
type Export interface {
Export(ctx context.Context, req pb.RpcObjectListExportRequest) (path string, succeed int, err error)
- ExportInMemory(ctx context.Context, spaceId string, objectIds []string, format model.ExportFormat, includeRelations bool) (res map[string][]byte, err error)
+ ExportSingleInMemory(ctx context.Context, spaceId string, objectId string, format model.ExportFormat) (res string, err error)
app.Component
}
@@ -122,26 +124,18 @@ func (e *export) Export(ctx context.Context, req pb.RpcObjectListExportRequest)
return exportCtx.exportObjects(ctx, queue)
}
-func (e *export) ExportInMemory(ctx context.Context, spaceId string, objectIds []string, format model.ExportFormat, includeRelations bool) (res map[string][]byte, err error) {
+func (e *export) ExportSingleInMemory(ctx context.Context, spaceId string, objectId string, format model.ExportFormat) (res string, err error) {
req := pb.RpcObjectListExportRequest{
- SpaceId: spaceId,
- ObjectIds: objectIds,
- IncludeFiles: false,
- Format: format,
- IncludeNested: true,
+ SpaceId: spaceId,
+ ObjectIds: []string{objectId},
+ IncludeFiles: true,
+ Format: format,
+ IncludeNested: true,
+ IncludeArchived: true,
}
- res = make(map[string][]byte)
exportCtx := newExportContext(e, req)
- for _, objectId := range objectIds {
- b, err := exportCtx.exportObject(ctx, objectId)
- if err != nil {
- return nil, err
- }
- res[objectId] = b
- }
-
- return res, nil
+ return exportCtx.exportObject(ctx, objectId)
}
func (e *export) finishWithNotification(spaceId string, exportFormat model.ExportFormat, queue process.Queue, err error) {
@@ -251,31 +245,38 @@ func (e *exportContext) getStateFilters(id string) *state.Filters {
}
// exportObject synchronously exports a single object and return the bytes slice
-func (e *exportContext) exportObject(ctx context.Context, objectId string) ([]byte, error) {
+func (e *exportContext) exportObject(ctx context.Context, objectId string) (string, error) {
e.reqIds = []string{objectId}
e.includeArchive = true
err := e.docsForExport(ctx)
if err != nil {
- return nil, err
+ return "", err
}
var docNamer Namer
- if e.format == model.Export_Markdown {
- docNamer = &deepLinkNamer{gatewayUrl: e.gatewayUrl}
+ if e.format == model.Export_Markdown && e.gatewayUrl != "" {
+ u, err := url.Parse(e.gatewayUrl)
+ if err != nil {
+ return "", err
+ }
+ docNamer = &deepLinkNamer{gatewayUrl: *u}
} else {
docNamer = newNamer()
}
inMemoryWriter := &InMemoryWriter{fn: docNamer}
err = e.writeDoc(ctx, inMemoryWriter, objectId, e.docs.transformToDetailsMap())
if err != nil {
- return nil, err
+ return "", err
}
for _, v := range inMemoryWriter.data {
- return v, nil
+ if e.format == model.Export_Protobuf {
+ return base64.StdEncoding.EncodeToString(v), nil
+ }
+ return string(v), nil
}
- return nil, fmt.Errorf("failed to find data in writer")
+ return "", fmt.Errorf("failed to find data in writer")
}
func (e *exportContext) exportObjects(ctx context.Context, queue process.Queue) (string, int, error) {
diff --git a/core/block/export/writer.go b/core/block/export/writer.go
index 87541154b..742ae07b4 100644
--- a/core/block/export/writer.go
+++ b/core/block/export/writer.go
@@ -196,7 +196,7 @@ func (d *InMemoryWriter) GetData(id string) []byte {
// deepLinkNamer used to render a single-object export, in md format
type deepLinkNamer struct {
- gatewayUrl string
+ gatewayUrl url.URL
}
func (fn *deepLinkNamer) Get(path, hash, title, ext string) (name string) {
@@ -206,10 +206,10 @@ func (fn *deepLinkNamer) Get(path, hash, title, ext string) (name string) {
}
// files links via gateway
- u, err := url.Parse(fn.gatewayUrl)
- if err != nil {
+ if fn.gatewayUrl.Host == "" {
return "anytype://object?objectId=" + hash
}
+ u := fn.gatewayUrl
if mill.IsImageExt(ext) {
u.Path = "image/" + hash
} else {
diff --git a/core/block/import/markdown/anymark/anyblocks.go b/core/block/import/markdown/anymark/anyblocks.go
index aa43abd81..729b9855f 100644
--- a/core/block/import/markdown/anymark/anyblocks.go
+++ b/core/block/import/markdown/anymark/anyblocks.go
@@ -6,6 +6,7 @@ import (
"github.com/gogo/protobuf/types"
+ "github.com/anyproto/anytype-heart/pkg/lib/mill"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
)
@@ -98,7 +99,6 @@ func ConvertTextToFile(filePath string) *model.BlockContentOfFile {
return nil
}
- imageFormats := []string{"jpg", "jpeg", "png", "gif", "webp", "heic", "heif", "bmp", "tiff", "psd", "ico"}
videoFormats := []string{"mp4", "m4v", "mov"}
audioFormats := []string{"mp3", "ogg", "wav", "m4a", "flac"}
pdfFormat := "pdf"
@@ -107,11 +107,8 @@ func ConvertTextToFile(filePath string) *model.BlockContentOfFile {
fileExt := filepath.Ext(filePath)
if fileExt != "" {
fileExt = fileExt[1:]
- for _, ext := range imageFormats {
- if strings.EqualFold(fileExt, ext) {
- fileType = model.BlockContentFile_Image
- break
- }
+ if mill.IsImageExt(fileExt) {
+ fileType = model.BlockContentFile_Image
}
for _, ext := range videoFormats {
diff --git a/core/export.go b/core/export.go
index 641e04c12..c5ee4a36e 100644
--- a/core/export.go
+++ b/core/export.go
@@ -37,3 +37,31 @@ func (mw *Middleware) ObjectListExport(cctx context.Context, req *pb.RpcObjectLi
})
return response(path, succeed, err)
}
+
+func (mw *Middleware) ObjectExport(cctx context.Context, req *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse {
+ response := func(result string, err error) (res *pb.RpcObjectExportResponse) {
+ res = &pb.RpcObjectExportResponse{
+ Error: &pb.RpcObjectExportResponseError{
+ Code: pb.RpcObjectExportResponseError_NULL,
+ },
+ }
+ if err != nil {
+ res.Error.Code = pb.RpcObjectExportResponseError_UNKNOWN_ERROR
+ res.Error.Description = getErrorDescription(err)
+ return
+ } else {
+ res.Result = result
+ }
+ return res
+ }
+ var (
+ result string
+ err error
+ )
+ err = mw.doBlockService(func(_ *block.Service) error {
+ es := mw.applicationService.GetApp().MustComponent(export.CName).(export.Export)
+ result, err = es.ExportSingleInMemory(cctx, req.SpaceId, req.ObjectId, req.Format)
+ return err
+ })
+ return response(result, err)
+}
diff --git a/docs/proto.md b/docs/proto.md
index bbd1169bf..85d6fde58 100644
--- a/docs/proto.md
+++ b/docs/proto.md
@@ -883,6 +883,10 @@
- [Rpc.Object.Duplicate.Request](#anytype-Rpc-Object-Duplicate-Request)
- [Rpc.Object.Duplicate.Response](#anytype-Rpc-Object-Duplicate-Response)
- [Rpc.Object.Duplicate.Response.Error](#anytype-Rpc-Object-Duplicate-Response-Error)
+ - [Rpc.Object.Export](#anytype-Rpc-Object-Export)
+ - [Rpc.Object.Export.Request](#anytype-Rpc-Object-Export-Request)
+ - [Rpc.Object.Export.Response](#anytype-Rpc-Object-Export-Response)
+ - [Rpc.Object.Export.Response.Error](#anytype-Rpc-Object-Export-Response-Error)
- [Rpc.Object.Graph](#anytype-Rpc-Object-Graph)
- [Rpc.Object.Graph.Edge](#anytype-Rpc-Object-Graph-Edge)
- [Rpc.Object.Graph.Request](#anytype-Rpc-Object-Graph-Request)
@@ -1512,6 +1516,7 @@
- [Rpc.Object.CrossSpaceSearchUnsubscribe.Response.Error.Code](#anytype-Rpc-Object-CrossSpaceSearchUnsubscribe-Response-Error-Code)
- [Rpc.Object.DateByTimestamp.Response.Error.Code](#anytype-Rpc-Object-DateByTimestamp-Response-Error-Code)
- [Rpc.Object.Duplicate.Response.Error.Code](#anytype-Rpc-Object-Duplicate-Response-Error-Code)
+ - [Rpc.Object.Export.Response.Error.Code](#anytype-Rpc-Object-Export-Response-Error-Code)
- [Rpc.Object.Graph.Edge.Type](#anytype-Rpc-Object-Graph-Edge-Type)
- [Rpc.Object.Graph.Response.Error.Code](#anytype-Rpc-Object-Graph-Response-Error-Code)
- [Rpc.Object.GroupsSubscribe.Response.Error.Code](#anytype-Rpc-Object-GroupsSubscribe-Response-Error-Code)
@@ -2137,6 +2142,7 @@
| ObjectUndo | [Rpc.Object.Undo.Request](#anytype-Rpc-Object-Undo-Request) | [Rpc.Object.Undo.Response](#anytype-Rpc-Object-Undo-Response) | |
| ObjectRedo | [Rpc.Object.Redo.Request](#anytype-Rpc-Object-Redo-Request) | [Rpc.Object.Redo.Response](#anytype-Rpc-Object-Redo-Response) | |
| ObjectListExport | [Rpc.Object.ListExport.Request](#anytype-Rpc-Object-ListExport-Request) | [Rpc.Object.ListExport.Response](#anytype-Rpc-Object-ListExport-Response) | |
+| ObjectExport | [Rpc.Object.Export.Request](#anytype-Rpc-Object-Export-Request) | [Rpc.Object.Export.Response](#anytype-Rpc-Object-Export-Response) | |
| ObjectBookmarkFetch | [Rpc.Object.BookmarkFetch.Request](#anytype-Rpc-Object-BookmarkFetch-Request) | [Rpc.Object.BookmarkFetch.Response](#anytype-Rpc-Object-BookmarkFetch-Response) | |
| ObjectToBookmark | [Rpc.Object.ToBookmark.Request](#anytype-Rpc-Object-ToBookmark-Request) | [Rpc.Object.ToBookmark.Response](#anytype-Rpc-Object-ToBookmark-Response) | |
| ObjectImport | [Rpc.Object.Import.Request](#anytype-Rpc-Object-Import-Request) | [Rpc.Object.Import.Response](#anytype-Rpc-Object-Import-Response) | |
@@ -15099,6 +15105,66 @@ Get the info for page alongside with info for all inbound and outbound links fro
+
+
+### Rpc.Object.Export
+
+
+
+
+
+
+
+
+
+### Rpc.Object.Export.Request
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| spaceId | [string](#string) | | |
+| objectId | [string](#string) | | ids of documents for export, when empty - will export all available docs |
+| format | [model.Export.Format](#anytype-model-Export-Format) | | export format |
+
+
+
+
+
+
+
+
+### Rpc.Object.Export.Response
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| error | [Rpc.Object.Export.Response.Error](#anytype-Rpc-Object-Export-Response-Error) | | |
+| result | [string](#string) | | |
+| event | [ResponseEvent](#anytype-ResponseEvent) | | |
+
+
+
+
+
+
+
+
+### Rpc.Object.Export.Response.Error
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| code | [Rpc.Object.Export.Response.Error.Code](#anytype-Rpc-Object-Export-Response-Error-Code) | | |
+| description | [string](#string) | | |
+
+
+
+
+
+
### Rpc.Object.Graph
@@ -24073,6 +24139,19 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er
+
+
+### Rpc.Object.Export.Response.Error.Code
+
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| NULL | 0 | |
+| UNKNOWN_ERROR | 1 | |
+| BAD_INPUT | 2 | ... |
+
+
+
### Rpc.Object.Graph.Edge.Type
diff --git a/pb/commands.pb.go b/pb/commands.pb.go
index e13583afa..fcd0b71ea 100644
--- a/pb/commands.pb.go
+++ b/pb/commands.pb.go
@@ -3539,6 +3539,34 @@ func (RpcObjectListExportResponseErrorCode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 47, 3, 0, 0}
}
+type RpcObjectExportResponseErrorCode int32
+
+const (
+ RpcObjectExportResponseError_NULL RpcObjectExportResponseErrorCode = 0
+ RpcObjectExportResponseError_UNKNOWN_ERROR RpcObjectExportResponseErrorCode = 1
+ RpcObjectExportResponseError_BAD_INPUT RpcObjectExportResponseErrorCode = 2
+)
+
+var RpcObjectExportResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+}
+
+var RpcObjectExportResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+}
+
+func (x RpcObjectExportResponseErrorCode) String() string {
+ return proto.EnumName(RpcObjectExportResponseErrorCode_name, int32(x))
+}
+
+func (RpcObjectExportResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 1, 0, 0}
+}
+
type RpcObjectImportRequestMode int32
const (
@@ -3561,7 +3589,7 @@ func (x RpcObjectImportRequestMode) String() string {
}
func (RpcObjectImportRequestMode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 0}
}
type RpcObjectImportRequestPbParamsType int32
@@ -3586,7 +3614,7 @@ func (x RpcObjectImportRequestPbParamsType) String() string {
}
func (RpcObjectImportRequestPbParamsType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 5, 0}
}
type RpcObjectImportRequestCsvParamsMode int32
@@ -3611,7 +3639,7 @@ func (x RpcObjectImportRequestCsvParamsMode) String() string {
}
func (RpcObjectImportRequestCsvParamsMode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 6, 0}
}
type RpcObjectImportResponseErrorCode int32
@@ -3657,7 +3685,7 @@ func (x RpcObjectImportResponseErrorCode) String() string {
}
func (RpcObjectImportResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 1, 0, 0}
}
type RpcObjectImportNotionValidateTokenResponseErrorCode int32
@@ -3700,7 +3728,7 @@ func (x RpcObjectImportNotionValidateTokenResponseErrorCode) String() string {
}
func (RpcObjectImportNotionValidateTokenResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 2, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2, 0, 1, 0, 0}
}
type RpcObjectImportListResponseErrorCode int32
@@ -3731,7 +3759,7 @@ func (x RpcObjectImportListResponseErrorCode) String() string {
}
func (RpcObjectImportListResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 1, 0, 0}
}
type RpcObjectImportListImportResponseType int32
@@ -3762,7 +3790,7 @@ func (x RpcObjectImportListImportResponseType) String() string {
}
func (RpcObjectImportListImportResponseType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 2, 0}
}
type RpcObjectImportUseCaseRequestUseCase int32
@@ -3790,7 +3818,7 @@ func (x RpcObjectImportUseCaseRequestUseCase) String() string {
}
func (RpcObjectImportUseCaseRequestUseCase) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 0, 0}
}
type RpcObjectImportUseCaseResponseErrorCode int32
@@ -3818,7 +3846,7 @@ func (x RpcObjectImportUseCaseResponseErrorCode) String() string {
}
func (RpcObjectImportUseCaseResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 1, 0, 0}
}
type RpcObjectImportExperienceResponseErrorCode int32
@@ -3849,7 +3877,7 @@ func (x RpcObjectImportExperienceResponseErrorCode) String() string {
}
func (RpcObjectImportExperienceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 1, 0, 0}
}
type RpcObjectDateByTimestampResponseErrorCode int32
@@ -3877,7 +3905,7 @@ func (x RpcObjectDateByTimestampResponseErrorCode) String() string {
}
func (RpcObjectDateByTimestampResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 53, 1, 0, 0}
}
type RpcObjectCollectionAddResponseErrorCode int32
@@ -30838,6 +30866,216 @@ func (m *RpcObjectListExportResponseError) GetDescription() string {
return ""
}
+type RpcObjectExport struct {
+}
+
+func (m *RpcObjectExport) Reset() { *m = RpcObjectExport{} }
+func (m *RpcObjectExport) String() string { return proto.CompactTextString(m) }
+func (*RpcObjectExport) ProtoMessage() {}
+func (*RpcObjectExport) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48}
+}
+func (m *RpcObjectExport) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcObjectExport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcObjectExport.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcObjectExport) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcObjectExport.Merge(m, src)
+}
+func (m *RpcObjectExport) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcObjectExport) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcObjectExport.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcObjectExport proto.InternalMessageInfo
+
+type RpcObjectExportRequest struct {
+ SpaceId string `protobuf:"bytes,10,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ // ids of documents for export, when empty - will export all available docs
+ ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
+ // export format
+ Format model.ExportFormat `protobuf:"varint,3,opt,name=format,proto3,enum=anytype.model.ExportFormat" json:"format,omitempty"`
+}
+
+func (m *RpcObjectExportRequest) Reset() { *m = RpcObjectExportRequest{} }
+func (m *RpcObjectExportRequest) String() string { return proto.CompactTextString(m) }
+func (*RpcObjectExportRequest) ProtoMessage() {}
+func (*RpcObjectExportRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0}
+}
+func (m *RpcObjectExportRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcObjectExportRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcObjectExportRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcObjectExportRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcObjectExportRequest.Merge(m, src)
+}
+func (m *RpcObjectExportRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcObjectExportRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcObjectExportRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcObjectExportRequest proto.InternalMessageInfo
+
+func (m *RpcObjectExportRequest) GetSpaceId() string {
+ if m != nil {
+ return m.SpaceId
+ }
+ return ""
+}
+
+func (m *RpcObjectExportRequest) GetObjectId() string {
+ if m != nil {
+ return m.ObjectId
+ }
+ return ""
+}
+
+func (m *RpcObjectExportRequest) GetFormat() model.ExportFormat {
+ if m != nil {
+ return m.Format
+ }
+ return model.Export_Markdown
+}
+
+type RpcObjectExportResponse struct {
+ Error *RpcObjectExportResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ Result string `protobuf:"bytes,2,opt,name=result,proto3" json:"result,omitempty"`
+ Event *ResponseEvent `protobuf:"bytes,3,opt,name=event,proto3" json:"event,omitempty"`
+}
+
+func (m *RpcObjectExportResponse) Reset() { *m = RpcObjectExportResponse{} }
+func (m *RpcObjectExportResponse) String() string { return proto.CompactTextString(m) }
+func (*RpcObjectExportResponse) ProtoMessage() {}
+func (*RpcObjectExportResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 1}
+}
+func (m *RpcObjectExportResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcObjectExportResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcObjectExportResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcObjectExportResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcObjectExportResponse.Merge(m, src)
+}
+func (m *RpcObjectExportResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcObjectExportResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcObjectExportResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcObjectExportResponse proto.InternalMessageInfo
+
+func (m *RpcObjectExportResponse) GetError() *RpcObjectExportResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+func (m *RpcObjectExportResponse) GetResult() string {
+ if m != nil {
+ return m.Result
+ }
+ return ""
+}
+
+func (m *RpcObjectExportResponse) GetEvent() *ResponseEvent {
+ if m != nil {
+ return m.Event
+ }
+ return nil
+}
+
+type RpcObjectExportResponseError struct {
+ Code RpcObjectExportResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcObjectExportResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcObjectExportResponseError) Reset() { *m = RpcObjectExportResponseError{} }
+func (m *RpcObjectExportResponseError) String() string { return proto.CompactTextString(m) }
+func (*RpcObjectExportResponseError) ProtoMessage() {}
+func (*RpcObjectExportResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 1, 0}
+}
+func (m *RpcObjectExportResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcObjectExportResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcObjectExportResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcObjectExportResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcObjectExportResponseError.Merge(m, src)
+}
+func (m *RpcObjectExportResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcObjectExportResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcObjectExportResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcObjectExportResponseError proto.InternalMessageInfo
+
+func (m *RpcObjectExportResponseError) GetCode() RpcObjectExportResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcObjectExportResponseError_NULL
+}
+
+func (m *RpcObjectExportResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
type RpcObjectImport struct {
}
@@ -30845,7 +31083,7 @@ func (m *RpcObjectImport) Reset() { *m = RpcObjectImport{} }
func (m *RpcObjectImport) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImport) ProtoMessage() {}
func (*RpcObjectImport) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49}
}
func (m *RpcObjectImport) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -30899,7 +31137,7 @@ func (m *RpcObjectImportRequest) Reset() { *m = RpcObjectImportRequest{}
func (m *RpcObjectImportRequest) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequest) ProtoMessage() {}
func (*RpcObjectImportRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0}
}
func (m *RpcObjectImportRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31097,7 +31335,7 @@ func (m *RpcObjectImportRequestNotionParams) Reset() { *m = RpcObjectImp
func (m *RpcObjectImportRequestNotionParams) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestNotionParams) ProtoMessage() {}
func (*RpcObjectImportRequestNotionParams) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 0}
}
func (m *RpcObjectImportRequestNotionParams) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31141,7 +31379,7 @@ func (m *RpcObjectImportRequestMarkdownParams) Reset() { *m = RpcObjectI
func (m *RpcObjectImportRequestMarkdownParams) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestMarkdownParams) ProtoMessage() {}
func (*RpcObjectImportRequestMarkdownParams) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 1}
}
func (m *RpcObjectImportRequestMarkdownParams) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31185,7 +31423,7 @@ func (m *RpcObjectImportRequestBookmarksParams) Reset() { *m = RpcObject
func (m *RpcObjectImportRequestBookmarksParams) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestBookmarksParams) ProtoMessage() {}
func (*RpcObjectImportRequestBookmarksParams) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 2}
}
func (m *RpcObjectImportRequestBookmarksParams) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31229,7 +31467,7 @@ func (m *RpcObjectImportRequestHtmlParams) Reset() { *m = RpcObjectImpor
func (m *RpcObjectImportRequestHtmlParams) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestHtmlParams) ProtoMessage() {}
func (*RpcObjectImportRequestHtmlParams) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 3}
}
func (m *RpcObjectImportRequestHtmlParams) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31273,7 +31511,7 @@ func (m *RpcObjectImportRequestTxtParams) Reset() { *m = RpcObjectImport
func (m *RpcObjectImportRequestTxtParams) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestTxtParams) ProtoMessage() {}
func (*RpcObjectImportRequestTxtParams) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 4}
}
func (m *RpcObjectImportRequestTxtParams) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31320,7 +31558,7 @@ func (m *RpcObjectImportRequestPbParams) Reset() { *m = RpcObjectImportR
func (m *RpcObjectImportRequestPbParams) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestPbParams) ProtoMessage() {}
func (*RpcObjectImportRequestPbParams) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 5}
}
func (m *RpcObjectImportRequestPbParams) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31389,7 +31627,7 @@ func (m *RpcObjectImportRequestCsvParams) Reset() { *m = RpcObjectImport
func (m *RpcObjectImportRequestCsvParams) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestCsvParams) ProtoMessage() {}
func (*RpcObjectImportRequestCsvParams) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 6}
}
func (m *RpcObjectImportRequestCsvParams) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31462,7 +31700,7 @@ func (m *RpcObjectImportRequestSnapshot) Reset() { *m = RpcObjectImportR
func (m *RpcObjectImportRequestSnapshot) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportRequestSnapshot) ProtoMessage() {}
func (*RpcObjectImportRequestSnapshot) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 0, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0, 7}
}
func (m *RpcObjectImportRequestSnapshot) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31515,7 +31753,7 @@ func (m *RpcObjectImportResponse) Reset() { *m = RpcObjectImportResponse
func (m *RpcObjectImportResponse) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportResponse) ProtoMessage() {}
func (*RpcObjectImportResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 1}
}
func (m *RpcObjectImportResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31574,7 +31812,7 @@ func (m *RpcObjectImportResponseError) Reset() { *m = RpcObjectImportRes
func (m *RpcObjectImportResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportResponseError) ProtoMessage() {}
func (*RpcObjectImportResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 1, 0}
}
func (m *RpcObjectImportResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31624,7 +31862,7 @@ func (m *RpcObjectImportNotion) Reset() { *m = RpcObjectImportNotion{} }
func (m *RpcObjectImportNotion) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportNotion) ProtoMessage() {}
func (*RpcObjectImportNotion) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2}
}
func (m *RpcObjectImportNotion) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31660,7 +31898,7 @@ func (m *RpcObjectImportNotionValidateToken) Reset() { *m = RpcObjectImp
func (m *RpcObjectImportNotionValidateToken) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportNotionValidateToken) ProtoMessage() {}
func (*RpcObjectImportNotionValidateToken) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2, 0}
}
func (m *RpcObjectImportNotionValidateToken) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31701,7 +31939,7 @@ func (m *RpcObjectImportNotionValidateTokenRequest) String() string {
}
func (*RpcObjectImportNotionValidateTokenRequest) ProtoMessage() {}
func (*RpcObjectImportNotionValidateTokenRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 2, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2, 0, 0}
}
func (m *RpcObjectImportNotionValidateTokenRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31749,7 +31987,7 @@ func (m *RpcObjectImportNotionValidateTokenResponse) String() string {
}
func (*RpcObjectImportNotionValidateTokenResponse) ProtoMessage() {}
func (*RpcObjectImportNotionValidateTokenResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 2, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2, 0, 1}
}
func (m *RpcObjectImportNotionValidateTokenResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31798,7 +32036,7 @@ func (m *RpcObjectImportNotionValidateTokenResponseError) String() string {
}
func (*RpcObjectImportNotionValidateTokenResponseError) ProtoMessage() {}
func (*RpcObjectImportNotionValidateTokenResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 48, 2, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2, 0, 1, 0}
}
func (m *RpcObjectImportNotionValidateTokenResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31848,7 +32086,7 @@ func (m *RpcObjectImportList) Reset() { *m = RpcObjectImportList{} }
func (m *RpcObjectImportList) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportList) ProtoMessage() {}
func (*RpcObjectImportList) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50}
}
func (m *RpcObjectImportList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31884,7 +32122,7 @@ func (m *RpcObjectImportListRequest) Reset() { *m = RpcObjectImportListR
func (m *RpcObjectImportListRequest) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportListRequest) ProtoMessage() {}
func (*RpcObjectImportListRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 0}
}
func (m *RpcObjectImportListRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31922,7 +32160,7 @@ func (m *RpcObjectImportListResponse) Reset() { *m = RpcObjectImportList
func (m *RpcObjectImportListResponse) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportListResponse) ProtoMessage() {}
func (*RpcObjectImportListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 1}
}
func (m *RpcObjectImportListResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -31974,7 +32212,7 @@ func (m *RpcObjectImportListResponseError) Reset() { *m = RpcObjectImpor
func (m *RpcObjectImportListResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportListResponseError) ProtoMessage() {}
func (*RpcObjectImportListResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 1, 0}
}
func (m *RpcObjectImportListResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32025,7 +32263,7 @@ func (m *RpcObjectImportListImportResponse) Reset() { *m = RpcObjectImpo
func (m *RpcObjectImportListImportResponse) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportListImportResponse) ProtoMessage() {}
func (*RpcObjectImportListImportResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 49, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 2}
}
func (m *RpcObjectImportListImportResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32068,7 +32306,7 @@ func (m *RpcObjectImportUseCase) Reset() { *m = RpcObjectImportUseCase{}
func (m *RpcObjectImportUseCase) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportUseCase) ProtoMessage() {}
func (*RpcObjectImportUseCase) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51}
}
func (m *RpcObjectImportUseCase) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32106,7 +32344,7 @@ func (m *RpcObjectImportUseCaseRequest) Reset() { *m = RpcObjectImportUs
func (m *RpcObjectImportUseCaseRequest) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportUseCaseRequest) ProtoMessage() {}
func (*RpcObjectImportUseCaseRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 0}
}
func (m *RpcObjectImportUseCaseRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32158,7 +32396,7 @@ func (m *RpcObjectImportUseCaseResponse) Reset() { *m = RpcObjectImportU
func (m *RpcObjectImportUseCaseResponse) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportUseCaseResponse) ProtoMessage() {}
func (*RpcObjectImportUseCaseResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 1}
}
func (m *RpcObjectImportUseCaseResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32210,7 +32448,7 @@ func (m *RpcObjectImportUseCaseResponseError) Reset() { *m = RpcObjectIm
func (m *RpcObjectImportUseCaseResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportUseCaseResponseError) ProtoMessage() {}
func (*RpcObjectImportUseCaseResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 50, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 1, 0}
}
func (m *RpcObjectImportUseCaseResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32260,7 +32498,7 @@ func (m *RpcObjectImportExperience) Reset() { *m = RpcObjectImportExperi
func (m *RpcObjectImportExperience) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportExperience) ProtoMessage() {}
func (*RpcObjectImportExperience) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52}
}
func (m *RpcObjectImportExperience) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32300,7 +32538,7 @@ func (m *RpcObjectImportExperienceRequest) Reset() { *m = RpcObjectImpor
func (m *RpcObjectImportExperienceRequest) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportExperienceRequest) ProtoMessage() {}
func (*RpcObjectImportExperienceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 0}
}
func (m *RpcObjectImportExperienceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32366,7 +32604,7 @@ func (m *RpcObjectImportExperienceResponse) Reset() { *m = RpcObjectImpo
func (m *RpcObjectImportExperienceResponse) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportExperienceResponse) ProtoMessage() {}
func (*RpcObjectImportExperienceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 1}
}
func (m *RpcObjectImportExperienceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32420,7 +32658,7 @@ func (m *RpcObjectImportExperienceResponseError) Reset() {
func (m *RpcObjectImportExperienceResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcObjectImportExperienceResponseError) ProtoMessage() {}
func (*RpcObjectImportExperienceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 51, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 1, 0}
}
func (m *RpcObjectImportExperienceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32470,7 +32708,7 @@ func (m *RpcObjectDateByTimestamp) Reset() { *m = RpcObjectDateByTimesta
func (m *RpcObjectDateByTimestamp) String() string { return proto.CompactTextString(m) }
func (*RpcObjectDateByTimestamp) ProtoMessage() {}
func (*RpcObjectDateByTimestamp) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 53}
}
func (m *RpcObjectDateByTimestamp) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32508,7 +32746,7 @@ func (m *RpcObjectDateByTimestampRequest) Reset() { *m = RpcObjectDateBy
func (m *RpcObjectDateByTimestampRequest) String() string { return proto.CompactTextString(m) }
func (*RpcObjectDateByTimestampRequest) ProtoMessage() {}
func (*RpcObjectDateByTimestampRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 53, 0}
}
func (m *RpcObjectDateByTimestampRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32560,7 +32798,7 @@ func (m *RpcObjectDateByTimestampResponse) Reset() { *m = RpcObjectDateB
func (m *RpcObjectDateByTimestampResponse) String() string { return proto.CompactTextString(m) }
func (*RpcObjectDateByTimestampResponse) ProtoMessage() {}
func (*RpcObjectDateByTimestampResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 53, 1}
}
func (m *RpcObjectDateByTimestampResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -32612,7 +32850,7 @@ func (m *RpcObjectDateByTimestampResponseError) Reset() { *m = RpcObject
func (m *RpcObjectDateByTimestampResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcObjectDateByTimestampResponseError) ProtoMessage() {}
func (*RpcObjectDateByTimestampResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 52, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 6, 53, 1, 0}
}
func (m *RpcObjectDateByTimestampResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72787,6 +73025,7 @@ func init() {
proto.RegisterEnum("anytype.RpcObjectListModifyDetailValuesResponseErrorCode", RpcObjectListModifyDetailValuesResponseErrorCode_name, RpcObjectListModifyDetailValuesResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcObjectApplyTemplateResponseErrorCode", RpcObjectApplyTemplateResponseErrorCode_name, RpcObjectApplyTemplateResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcObjectListExportResponseErrorCode", RpcObjectListExportResponseErrorCode_name, RpcObjectListExportResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcObjectExportResponseErrorCode", RpcObjectExportResponseErrorCode_name, RpcObjectExportResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcObjectImportRequestMode", RpcObjectImportRequestMode_name, RpcObjectImportRequestMode_value)
proto.RegisterEnum("anytype.RpcObjectImportRequestPbParamsType", RpcObjectImportRequestPbParamsType_name, RpcObjectImportRequestPbParamsType_value)
proto.RegisterEnum("anytype.RpcObjectImportRequestCsvParamsMode", RpcObjectImportRequestCsvParamsMode_name, RpcObjectImportRequestCsvParamsMode_value)
@@ -73416,6 +73655,10 @@ func init() {
proto.RegisterType((*RpcObjectListExportRelationsWhiteList)(nil), "anytype.Rpc.Object.ListExport.RelationsWhiteList")
proto.RegisterType((*RpcObjectListExportResponse)(nil), "anytype.Rpc.Object.ListExport.Response")
proto.RegisterType((*RpcObjectListExportResponseError)(nil), "anytype.Rpc.Object.ListExport.Response.Error")
+ proto.RegisterType((*RpcObjectExport)(nil), "anytype.Rpc.Object.Export")
+ proto.RegisterType((*RpcObjectExportRequest)(nil), "anytype.Rpc.Object.Export.Request")
+ proto.RegisterType((*RpcObjectExportResponse)(nil), "anytype.Rpc.Object.Export.Response")
+ proto.RegisterType((*RpcObjectExportResponseError)(nil), "anytype.Rpc.Object.Export.Response.Error")
proto.RegisterType((*RpcObjectImport)(nil), "anytype.Rpc.Object.Import")
proto.RegisterType((*RpcObjectImportRequest)(nil), "anytype.Rpc.Object.Import.Request")
proto.RegisterType((*RpcObjectImportRequestNotionParams)(nil), "anytype.Rpc.Object.Import.Request.NotionParams")
@@ -74255,1288 +74498,1291 @@ func init() {
func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) }
var fileDescriptor_8261c968b2e6f45c = []byte{
- // 20495 bytes of a gzipped FileDescriptorProto
+ // 20537 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x98, 0x24, 0x49,
- 0x55, 0x37, 0x3a, 0x95, 0x59, 0x55, 0xdd, 0x7d, 0xfa, 0x63, 0x6a, 0x72, 0x67, 0x67, 0x67, 0x63,
- 0x97, 0xdd, 0x75, 0x58, 0x96, 0x75, 0x59, 0x7a, 0x61, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xea,
- 0xea, 0xee, 0xda, 0xed, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xdf, 0xeb, 0x6d, 0x73, 0xaa, 0xa2,
- 0xbb, 0x73, 0xa7, 0x3a, 0xb3, 0xc8, 0xcc, 0x9e, 0xd9, 0xe1, 0x3e, 0xef, 0x7d, 0x45, 0x44, 0x50,
- 0x44, 0x44, 0x45, 0x45, 0x05, 0x04, 0x44, 0x04, 0x45, 0x64, 0xf9, 0x7a, 0x41, 0xf9, 0x50, 0x41,
- 0x10, 0xbf, 0x50, 0xfc, 0x00, 0x94, 0x2b, 0xf8, 0x89, 0xef, 0xa3, 0xd7, 0xab, 0x57, 0x41, 0x7c,
- 0xf5, 0xf5, 0x3e, 0x19, 0x11, 0x99, 0x19, 0x51, 0x5d, 0x99, 0x15, 0x59, 0x5d, 0x59, 0xbd, 0xea,
- 0xfd, 0x2f, 0x33, 0x32, 0xf2, 0xc4, 0x89, 0xf3, 0x3b, 0x11, 0x71, 0x22, 0xe2, 0xc4, 0x09, 0x38,
- 0xdb, 0xbb, 0x78, 0x57, 0xcf, 0xb1, 0x3d, 0xdb, 0xbd, 0xab, 0x6d, 0xef, 0xef, 0x1b, 0x56, 0xc7,
- 0x5d, 0x24, 0xef, 0xda, 0x94, 0x61, 0x5d, 0xf5, 0xae, 0xf6, 0x30, 0xba, 0xb5, 0x77, 0x69, 0xf7,
- 0xae, 0xae, 0x79, 0xf1, 0xae, 0xde, 0xc5, 0xbb, 0xf6, 0xed, 0x0e, 0xee, 0x06, 0x3f, 0x90, 0x17,
- 0x96, 0x1d, 0xdd, 0x1e, 0x97, 0xab, 0x6b, 0xb7, 0x8d, 0xae, 0xeb, 0xd9, 0x0e, 0x66, 0x39, 0xcf,
- 0x44, 0x45, 0xe2, 0xcb, 0xd8, 0xf2, 0x02, 0x0a, 0x37, 0xee, 0xda, 0xf6, 0x6e, 0x17, 0xd3, 0x6f,
- 0x17, 0x0f, 0x76, 0xee, 0x72, 0x3d, 0xe7, 0xa0, 0xed, 0xb1, 0xaf, 0xb7, 0xf4, 0x7f, 0xed, 0x60,
- 0xb7, 0xed, 0x98, 0x3d, 0xcf, 0x76, 0x68, 0x8e, 0x73, 0x8f, 0x3d, 0x36, 0x0d, 0xaa, 0xde, 0x6b,
- 0xa3, 0xaf, 0x4c, 0x81, 0x5a, 0xee, 0xf5, 0xd0, 0xc7, 0x15, 0x80, 0x55, 0xec, 0x9d, 0xc7, 0x8e,
- 0x6b, 0xda, 0x16, 0x3a, 0x09, 0x53, 0x3a, 0x7e, 0xe1, 0x01, 0x76, 0xbd, 0x7b, 0xf3, 0x2f, 0xff,
- 0x0b, 0x35, 0x87, 0xde, 0xa2, 0xc0, 0xb4, 0x8e, 0xdd, 0x9e, 0x6d, 0xb9, 0x58, 0x7b, 0x1e, 0x14,
- 0xb0, 0xe3, 0xd8, 0xce, 0xd9, 0xdc, 0x2d, 0xb9, 0xdb, 0x67, 0xef, 0xbe, 0x63, 0x91, 0x55, 0x7f,
- 0x51, 0xef, 0xb5, 0x17, 0xcb, 0xbd, 0xde, 0x62, 0x44, 0x69, 0x31, 0xf8, 0x69, 0xb1, 0xea, 0xff,
- 0xa1, 0xd3, 0x1f, 0xb5, 0xb3, 0x30, 0x75, 0x99, 0x66, 0x38, 0xab, 0xdc, 0x92, 0xbb, 0x7d, 0x46,
- 0x0f, 0x5e, 0xfd, 0x2f, 0x1d, 0xec, 0x19, 0x66, 0xd7, 0x3d, 0xab, 0xd2, 0x2f, 0xec, 0x15, 0xbd,
- 0x29, 0x07, 0x05, 0x42, 0x44, 0xab, 0x40, 0xbe, 0x6d, 0x77, 0x30, 0x29, 0x7e, 0xe1, 0xee, 0xbb,
- 0xe4, 0x8b, 0x5f, 0xac, 0xd8, 0x1d, 0xac, 0x93, 0x9f, 0xb5, 0x5b, 0x60, 0x36, 0x10, 0x4b, 0xc4,
- 0x06, 0x9f, 0x74, 0xee, 0x6e, 0xc8, 0xfb, 0xf9, 0xb5, 0x69, 0xc8, 0xd7, 0xb7, 0xd6, 0xd7, 0x4b,
- 0x27, 0xb4, 0x53, 0x30, 0xbf, 0x55, 0x7f, 0xa8, 0xde, 0xb8, 0x50, 0xdf, 0xae, 0xea, 0x7a, 0x43,
- 0x2f, 0xe5, 0xb4, 0x79, 0x98, 0x59, 0x2a, 0x2f, 0x6f, 0xd7, 0xea, 0x9b, 0x5b, 0xad, 0x92, 0x82,
- 0x5e, 0xaf, 0xc2, 0x42, 0x13, 0x7b, 0xcb, 0xf8, 0xb2, 0xd9, 0xc6, 0x4d, 0xcf, 0xf0, 0x30, 0x7a,
- 0x55, 0x2e, 0x14, 0xa6, 0xb6, 0xe5, 0x17, 0x1a, 0x7e, 0x62, 0x15, 0x78, 0xc6, 0xa1, 0x0a, 0x88,
- 0x14, 0x16, 0xd9, 0xdf, 0x8b, 0x5c, 0x9a, 0xce, 0xd3, 0x39, 0xf7, 0x54, 0x98, 0xe5, 0xbe, 0x69,
- 0x0b, 0x00, 0x4b, 0xe5, 0xca, 0x43, 0xab, 0x7a, 0x63, 0xab, 0xbe, 0x5c, 0x3a, 0xe1, 0xbf, 0xaf,
- 0x34, 0xf4, 0x2a, 0x7b, 0xcf, 0xa1, 0xaf, 0xe5, 0x38, 0x30, 0x97, 0x45, 0x30, 0x17, 0x87, 0x33,
- 0x33, 0x00, 0x50, 0xf4, 0x93, 0x21, 0x38, 0xab, 0x02, 0x38, 0xcf, 0x48, 0x47, 0x2e, 0x7b, 0x80,
- 0x5e, 0xaa, 0xc0, 0x74, 0x73, 0xef, 0xc0, 0xeb, 0xd8, 0x57, 0x2c, 0x34, 0x13, 0x22, 0x83, 0xfe,
- 0x86, 0x97, 0xc9, 0x73, 0x45, 0x99, 0xdc, 0x7e, 0xb8, 0x12, 0x8c, 0x42, 0x8c, 0x34, 0x7e, 0x3c,
- 0x94, 0x46, 0x59, 0x90, 0xc6, 0x53, 0x65, 0x09, 0x65, 0x2f, 0x87, 0x1f, 0x79, 0x36, 0x14, 0x9a,
- 0x3d, 0xa3, 0x8d, 0xd1, 0xaf, 0xab, 0x30, 0xb7, 0x8e, 0x8d, 0xcb, 0xb8, 0xdc, 0xeb, 0x39, 0xf6,
- 0x65, 0x8c, 0x2a, 0x91, 0xbe, 0x9e, 0x85, 0x29, 0xd7, 0xcf, 0x54, 0xeb, 0x90, 0x1a, 0xcc, 0xe8,
- 0xc1, 0xab, 0x76, 0x13, 0x80, 0xd9, 0xc1, 0x96, 0x67, 0x7a, 0x26, 0x76, 0xcf, 0x2a, 0xb7, 0xa8,
- 0xb7, 0xcf, 0xe8, 0x5c, 0x0a, 0xfa, 0x8a, 0x22, 0xab, 0x63, 0x84, 0x8b, 0x45, 0x9e, 0x83, 0x18,
- 0xa9, 0xbe, 0x59, 0x91, 0xd1, 0xb1, 0xa1, 0xe4, 0xd2, 0xc9, 0xf6, 0x67, 0x73, 0xe9, 0x85, 0xeb,
- 0xe7, 0xa8, 0x37, 0xb6, 0x9b, 0x5b, 0x95, 0xb5, 0xed, 0xe6, 0x66, 0xb9, 0x52, 0x2d, 0x61, 0xed,
- 0x34, 0x94, 0xc8, 0xe3, 0x76, 0xad, 0xb9, 0xbd, 0x5c, 0x5d, 0xaf, 0xb6, 0xaa, 0xcb, 0xa5, 0x1d,
- 0x4d, 0x83, 0x05, 0xbd, 0xfa, 0xfc, 0xad, 0x6a, 0xb3, 0xb5, 0xbd, 0x52, 0xae, 0xad, 0x57, 0x97,
- 0x4b, 0xbb, 0xfe, 0xcf, 0xeb, 0xb5, 0x8d, 0x5a, 0x6b, 0x5b, 0xaf, 0x96, 0x2b, 0x6b, 0xd5, 0xe5,
- 0xd2, 0x9e, 0x76, 0x1d, 0x5c, 0x53, 0x6f, 0x6c, 0x97, 0x37, 0x37, 0xf5, 0xc6, 0xf9, 0xea, 0x36,
- 0xfb, 0xa3, 0x59, 0x32, 0x69, 0x41, 0xad, 0xed, 0xe6, 0x5a, 0x59, 0xaf, 0x96, 0x97, 0xd6, 0xab,
- 0xa5, 0x47, 0xd0, 0x4b, 0x54, 0x98, 0xdf, 0x30, 0x2e, 0xe1, 0xe6, 0x9e, 0xe1, 0x60, 0xe3, 0x62,
- 0x17, 0xa3, 0x27, 0x4a, 0xe0, 0x89, 0x7e, 0x9d, 0xc7, 0xab, 0x2a, 0xe2, 0x75, 0xd7, 0x00, 0x01,
- 0x0b, 0x45, 0xc4, 0x00, 0xf6, 0x4f, 0x61, 0x33, 0x58, 0x13, 0x00, 0x7b, 0x66, 0x4a, 0x7a, 0xe9,
- 0x10, 0xfb, 0xb6, 0xc7, 0x01, 0x62, 0xe8, 0x0b, 0x2a, 0x2c, 0xd4, 0xac, 0xcb, 0xa6, 0x87, 0x57,
- 0xb1, 0x85, 0x1d, 0x7f, 0x1c, 0x90, 0x82, 0xe1, 0x2d, 0x2a, 0x07, 0xc3, 0x8a, 0x08, 0xc3, 0xd3,
- 0x06, 0x88, 0x4d, 0x2c, 0x23, 0x66, 0xb4, 0xbd, 0x11, 0x66, 0x4c, 0x92, 0xaf, 0x62, 0x76, 0x98,
- 0xc4, 0xa2, 0x04, 0xed, 0x56, 0x98, 0xa7, 0x2f, 0x2b, 0x66, 0x17, 0x3f, 0x84, 0xaf, 0xb2, 0x71,
- 0x57, 0x4c, 0x44, 0xdf, 0x1d, 0x36, 0xbe, 0x9a, 0x80, 0xe5, 0x37, 0xa4, 0x65, 0x2a, 0x1d, 0x98,
- 0xaf, 0x79, 0x3c, 0x34, 0xbf, 0x43, 0xad, 0xcc, 0x44, 0xff, 0xaa, 0xc0, 0x6c, 0xd3, 0xb3, 0x7b,
- 0xbe, 0xca, 0x9a, 0xd6, 0xae, 0x1c, 0xb8, 0x9f, 0xe4, 0xdb, 0x58, 0x45, 0x04, 0xf7, 0xa9, 0x03,
- 0xe4, 0xc8, 0x15, 0x10, 0xd3, 0xc2, 0xbe, 0x12, 0xb6, 0xb0, 0x15, 0x01, 0x95, 0xbb, 0x53, 0x51,
- 0xfb, 0x77, 0xd8, 0xbe, 0x5e, 0xa3, 0x42, 0x29, 0x50, 0x33, 0xaf, 0x72, 0xe0, 0x38, 0xd8, 0xf2,
- 0xe4, 0x40, 0xf8, 0x43, 0x1e, 0x84, 0x35, 0x11, 0x84, 0xbb, 0x13, 0x94, 0x39, 0x28, 0x25, 0xc3,
- 0x36, 0xf6, 0xd1, 0x10, 0xcd, 0x87, 0x04, 0x34, 0xbf, 0x31, 0x3d, 0x5b, 0xe9, 0x20, 0x5d, 0x1b,
- 0x01, 0xd1, 0xd3, 0x50, 0xf2, 0xc7, 0xa4, 0x4a, 0xab, 0x76, 0xbe, 0xba, 0x5d, 0xab, 0x9f, 0xaf,
- 0xb5, 0xaa, 0x25, 0x8c, 0xbe, 0x5f, 0x85, 0x39, 0xca, 0x9a, 0x8e, 0x2f, 0xdb, 0x97, 0x24, 0x7b,
- 0xbd, 0x2f, 0xa4, 0x34, 0x16, 0xf8, 0x12, 0x62, 0x5a, 0xc6, 0x77, 0xa5, 0x30, 0x16, 0x12, 0xc8,
- 0x3d, 0x9e, 0x7a, 0xab, 0x43, 0xcd, 0x60, 0x77, 0x40, 0x6b, 0x19, 0xd8, 0x5b, 0xbd, 0x26, 0x0f,
- 0x40, 0x2b, 0x79, 0xde, 0xc4, 0x57, 0xd0, 0x46, 0x84, 0x89, 0xa0, 0xb6, 0xb9, 0xa1, 0x6a, 0xab,
- 0x0c, 0x52, 0xdb, 0xf7, 0xf3, 0x63, 0xd6, 0x92, 0x88, 0xde, 0x9d, 0xb1, 0xe2, 0xf6, 0x39, 0x89,
- 0x9f, 0x1d, 0x06, 0x8a, 0xa2, 0x88, 0x56, 0xe7, 0x8d, 0x30, 0x43, 0x1e, 0xeb, 0xc6, 0x3e, 0x66,
- 0x6d, 0x28, 0x4a, 0xd0, 0xce, 0xc1, 0x1c, 0xcd, 0xd8, 0xb6, 0x2d, 0xbf, 0x3e, 0x79, 0x92, 0x41,
- 0x48, 0xf3, 0x41, 0x6c, 0x3b, 0xd8, 0xf0, 0x6c, 0x87, 0xd0, 0x28, 0x50, 0x10, 0xb9, 0x24, 0xf4,
- 0xe5, 0xb0, 0x15, 0x56, 0x05, 0xcd, 0x79, 0x7a, 0x9a, 0xaa, 0xa4, 0xd3, 0x9b, 0xcb, 0xa3, 0xb5,
- 0x3f, 0xda, 0xea, 0xb6, 0x7d, 0xb4, 0x57, 0xc8, 0xd4, 0x0e, 0x6b, 0x67, 0x40, 0x63, 0xa9, 0x7e,
- 0xde, 0x4a, 0xa3, 0xde, 0xaa, 0xd6, 0x5b, 0xa5, 0x9d, 0x81, 0x1a, 0xb5, 0x8b, 0xde, 0x9c, 0x87,
- 0xfc, 0x83, 0xb6, 0x69, 0xa1, 0x97, 0xe6, 0x04, 0x95, 0xb0, 0xb0, 0x77, 0xc5, 0x76, 0x2e, 0x85,
- 0x0d, 0x35, 0x4a, 0x48, 0xc6, 0x26, 0x52, 0x25, 0x75, 0xa8, 0x2a, 0xe5, 0x07, 0xa9, 0xd2, 0xf7,
- 0xf1, 0xaa, 0x74, 0x9f, 0xa8, 0x4a, 0xb7, 0x0d, 0x90, 0xbf, 0xcf, 0x7c, 0x4c, 0x07, 0xf0, 0x89,
- 0xb0, 0x03, 0x78, 0x40, 0x80, 0xf1, 0x29, 0x72, 0x64, 0xd2, 0x01, 0xf8, 0xf9, 0x4c, 0x1b, 0xfe,
- 0x20, 0xa8, 0x77, 0x63, 0xa0, 0xde, 0x1b, 0xd0, 0x27, 0x98, 0x87, 0xbb, 0x8e, 0x47, 0x0e, 0x77,
- 0x13, 0x97, 0xb4, 0x6b, 0xe1, 0xd4, 0x72, 0x6d, 0x65, 0xa5, 0xaa, 0x57, 0xeb, 0xad, 0xed, 0x7a,
- 0xb5, 0x75, 0xa1, 0xa1, 0x3f, 0x54, 0xea, 0xa2, 0x37, 0xa9, 0x00, 0xbe, 0x84, 0x2a, 0x86, 0xd5,
- 0xc6, 0x5d, 0xb9, 0x1e, 0xfd, 0xff, 0x56, 0xd2, 0xf5, 0x09, 0x11, 0xfd, 0x18, 0x38, 0x5f, 0xa7,
- 0xc8, 0xb7, 0xca, 0x58, 0x62, 0xe9, 0x40, 0x7d, 0xfb, 0xe3, 0xc1, 0xf6, 0xbc, 0x06, 0x4e, 0x06,
- 0xf4, 0x58, 0xf6, 0xc1, 0xd3, 0xbe, 0x77, 0xe6, 0x61, 0x81, 0xc1, 0x12, 0xcc, 0xe3, 0x5f, 0x9e,
- 0x93, 0x99, 0xc8, 0x23, 0x98, 0x66, 0xd3, 0xf6, 0xa0, 0x7b, 0x0f, 0xdf, 0xb5, 0x55, 0x98, 0xed,
- 0x61, 0x67, 0xdf, 0x74, 0x5d, 0xd3, 0xb6, 0xe8, 0x82, 0xdc, 0xc2, 0xdd, 0x4f, 0x0a, 0x25, 0x4e,
- 0xd6, 0x2e, 0x17, 0x37, 0x0d, 0xc7, 0x33, 0xdb, 0x66, 0xcf, 0xb0, 0xbc, 0xcd, 0x28, 0xb3, 0xce,
- 0xff, 0x89, 0x5e, 0x9d, 0x72, 0x5a, 0x23, 0xd6, 0x24, 0x46, 0x25, 0x7e, 0x21, 0xc5, 0x94, 0x24,
- 0x91, 0x60, 0x3a, 0xb5, 0xf8, 0x78, 0xa6, 0x6a, 0x31, 0x00, 0xef, 0x5d, 0xed, 0x7a, 0xb8, 0xb6,
- 0x56, 0xaf, 0x34, 0x74, 0xbd, 0x5a, 0x69, 0x6d, 0x6f, 0x56, 0xf5, 0x8d, 0x5a, 0xb3, 0x59, 0x6b,
- 0xd4, 0x9b, 0x47, 0x69, 0xed, 0xe8, 0x53, 0x6a, 0xa8, 0x31, 0xcb, 0xb8, 0xdd, 0x35, 0x2d, 0x8c,
- 0x1e, 0x38, 0xa2, 0xc2, 0x88, 0xab, 0x3e, 0xf2, 0x38, 0xb3, 0xf2, 0x63, 0x70, 0x7e, 0x63, 0x7a,
- 0x9c, 0x07, 0x13, 0xfc, 0x0f, 0xdc, 0xfc, 0xbf, 0xa0, 0xc2, 0x29, 0xae, 0x21, 0xea, 0x78, 0x7f,
- 0x6c, 0x2b, 0x79, 0xdf, 0xc6, 0xb7, 0xdd, 0x9a, 0x88, 0xe9, 0x20, 0x6b, 0xfa, 0x10, 0x1b, 0x31,
- 0xb0, 0xbe, 0x3d, 0x84, 0x75, 0x5d, 0x80, 0xf5, 0xd9, 0x23, 0xd0, 0x4c, 0x87, 0xec, 0xcf, 0x65,
- 0x8a, 0xec, 0xf5, 0x70, 0xed, 0x66, 0x59, 0x6f, 0xd5, 0x2a, 0xb5, 0xcd, 0xb2, 0x3f, 0x8e, 0x72,
- 0x43, 0x76, 0x8c, 0xb9, 0x2e, 0x82, 0x3e, 0x10, 0xdf, 0x8f, 0xe4, 0xe1, 0xc6, 0xc1, 0x1d, 0x6d,
- 0x65, 0xcf, 0xb0, 0x76, 0x31, 0x32, 0x65, 0xa0, 0x5e, 0x86, 0xa9, 0x36, 0xc9, 0x4e, 0x71, 0xe6,
- 0xb7, 0x6e, 0x12, 0xfa, 0x72, 0x5a, 0x82, 0x1e, 0xfc, 0x8a, 0xde, 0xcd, 0x2b, 0x44, 0x4b, 0x54,
- 0x88, 0xe7, 0x26, 0x83, 0x77, 0x88, 0xef, 0x18, 0xdd, 0xf8, 0x74, 0xa8, 0x1b, 0x17, 0x04, 0xdd,
- 0xa8, 0x1c, 0x8d, 0x7c, 0x3a, 0x35, 0xf9, 0xb5, 0xc7, 0x43, 0x07, 0x10, 0xab, 0x4d, 0x66, 0xfc,
- 0xa8, 0x30, 0xb0, 0xbb, 0x7f, 0x83, 0x0a, 0xc5, 0x65, 0xdc, 0xc5, 0xb2, 0x2b, 0x91, 0x7f, 0xab,
- 0xc8, 0x6e, 0x88, 0x50, 0x18, 0x28, 0xed, 0xf8, 0xd5, 0x11, 0xcf, 0xdc, 0xc7, 0xae, 0x67, 0xec,
- 0xf7, 0x88, 0xa8, 0x55, 0x3d, 0x4a, 0x40, 0xdf, 0xae, 0xc8, 0x6c, 0x97, 0x24, 0x14, 0xf3, 0x1f,
- 0x63, 0x4d, 0xf1, 0x33, 0x0a, 0x4c, 0x37, 0xb1, 0xd7, 0x70, 0x3a, 0xd8, 0x41, 0xcd, 0x08, 0xa3,
- 0x5b, 0x60, 0x96, 0x80, 0xe2, 0x4f, 0x33, 0x43, 0x9c, 0xf8, 0x24, 0xed, 0x36, 0x58, 0x08, 0x5f,
- 0xc9, 0xef, 0xac, 0x1b, 0xef, 0x4b, 0x45, 0x7f, 0x97, 0x93, 0xdd, 0xc5, 0x65, 0x4b, 0x86, 0x8c,
- 0x9b, 0x98, 0x56, 0x2a, 0xb7, 0x23, 0x9b, 0x48, 0x2a, 0xfb, 0x8d, 0xae, 0x77, 0x29, 0x00, 0x5b,
- 0x96, 0x1b, 0xc8, 0xf5, 0x29, 0x29, 0xe4, 0x8a, 0xfe, 0x31, 0x97, 0x6e, 0x16, 0x13, 0x95, 0x13,
- 0x23, 0xb1, 0x9f, 0x48, 0xb1, 0xb6, 0x10, 0x4b, 0x2c, 0x7b, 0x99, 0x7d, 0xf6, 0x24, 0x14, 0x2f,
- 0x18, 0xdd, 0x2e, 0xf6, 0xd0, 0xeb, 0x55, 0x28, 0x56, 0x1c, 0x6c, 0x78, 0x18, 0xe1, 0x48, 0x74,
- 0x08, 0xa6, 0x1d, 0xdb, 0xf6, 0x36, 0x0d, 0x6f, 0x8f, 0xc9, 0x2d, 0x7c, 0xd7, 0x9e, 0x0d, 0xd7,
- 0xed, 0x1c, 0x74, 0xbb, 0x1e, 0x7e, 0xd4, 0xdb, 0x74, 0xcc, 0x7d, 0xc3, 0xb9, 0xba, 0x6e, 0x58,
- 0xbb, 0x07, 0xc6, 0x2e, 0x66, 0xec, 0xc5, 0x7d, 0x66, 0xae, 0x06, 0x3f, 0xc3, 0x77, 0x3c, 0x0f,
- 0x88, 0x42, 0xff, 0x7a, 0x41, 0x4e, 0x94, 0xc5, 0x45, 0xca, 0x5e, 0x4c, 0xcf, 0x83, 0x60, 0x7a,
- 0xdf, 0xc2, 0xfb, 0xb6, 0x65, 0xb6, 0x03, 0x6b, 0x35, 0x78, 0x47, 0xbf, 0x14, 0xa2, 0xb1, 0x24,
- 0xa0, 0xb1, 0x28, 0x5d, 0x4a, 0x3a, 0x28, 0x9a, 0x23, 0xf4, 0x3b, 0x37, 0xc3, 0x0d, 0xb4, 0x1b,
- 0xd9, 0x6e, 0x35, 0xb6, 0x2b, 0x7a, 0xb5, 0xdc, 0xaa, 0x6e, 0xaf, 0x37, 0x2a, 0xe5, 0xf5, 0x6d,
- 0xbd, 0xba, 0xd9, 0x28, 0x61, 0x7f, 0x76, 0x3e, 0xa5, 0xe3, 0xb6, 0x7d, 0x19, 0x3b, 0xe8, 0xc5,
- 0x39, 0x39, 0x88, 0x12, 0x84, 0x92, 0x04, 0x9f, 0x2a, 0x03, 0xdf, 0xf7, 0x49, 0x7b, 0x8a, 0x30,
- 0xc1, 0x32, 0xe6, 0x63, 0x5a, 0xcc, 0x2f, 0x4b, 0xf5, 0x31, 0x89, 0xa4, 0x1e, 0x07, 0x20, 0xfd,
- 0x83, 0x02, 0x53, 0x15, 0xdb, 0xba, 0x8c, 0x1d, 0x8f, 0x9f, 0x64, 0xf1, 0x38, 0xe4, 0xfa, 0x70,
- 0x38, 0x0b, 0x53, 0xd8, 0xf2, 0x1c, 0xbb, 0x17, 0xcc, 0xb2, 0x82, 0x57, 0xf4, 0xd6, 0xb4, 0x12,
- 0x66, 0x25, 0xc7, 0xaf, 0xb6, 0x0e, 0x2e, 0x48, 0x60, 0x4f, 0xed, 0x6b, 0x3b, 0x6f, 0x4a, 0x83,
- 0xcb, 0x60, 0x06, 0xb2, 0xef, 0xc7, 0xbe, 0xa8, 0xc2, 0x3c, 0x6d, 0xb7, 0x4d, 0x4c, 0xcc, 0x42,
- 0xd4, 0xe0, 0xd7, 0x39, 0xfb, 0x84, 0xbf, 0x76, 0x42, 0x10, 0x7f, 0xd1, 0xe8, 0xf5, 0xc2, 0x35,
- 0xef, 0xb5, 0x13, 0x3a, 0x7b, 0xa7, 0x6a, 0xbe, 0x54, 0x84, 0xbc, 0x71, 0xe0, 0xed, 0xa1, 0x7f,
- 0x95, 0x9e, 0xf1, 0x0a, 0xfd, 0x08, 0xe3, 0x27, 0x06, 0x92, 0xd3, 0x50, 0xf0, 0xec, 0x4b, 0x38,
- 0x90, 0x03, 0x7d, 0xf1, 0xe1, 0x30, 0x7a, 0xbd, 0x16, 0xf9, 0xc0, 0xe0, 0x08, 0xde, 0x7d, 0x03,
- 0xcb, 0x68, 0xb7, 0xed, 0x03, 0xcb, 0xab, 0x05, 0xeb, 0xde, 0x51, 0x02, 0xfa, 0x6c, 0x4e, 0x66,
- 0x06, 0x2d, 0xc1, 0x60, 0x3a, 0xc8, 0x2e, 0x8e, 0xd0, 0x94, 0x16, 0xe1, 0x8e, 0xf2, 0xe6, 0xe6,
- 0x76, 0xab, 0xf1, 0x50, 0xb5, 0x1e, 0x59, 0xbb, 0xdb, 0xb5, 0xfa, 0x76, 0x6b, 0xad, 0xba, 0x5d,
- 0xd9, 0xd2, 0xc9, 0xe2, 0x64, 0xb9, 0x52, 0x69, 0x6c, 0xd5, 0x5b, 0x25, 0x8c, 0xde, 0xa1, 0xc0,
- 0x5c, 0xa5, 0x6b, 0xbb, 0x21, 0xc2, 0x37, 0x47, 0x08, 0x87, 0x62, 0xcc, 0x71, 0x62, 0x44, 0xff,
- 0x33, 0x27, 0xeb, 0xe9, 0x10, 0x08, 0x84, 0x23, 0x1f, 0xd3, 0x4b, 0xbd, 0x55, 0xca, 0xd3, 0x61,
- 0x38, 0xbd, 0xec, 0x9b, 0xc4, 0xe7, 0xab, 0x30, 0x55, 0xa6, 0x8a, 0x81, 0xfe, 0x38, 0x07, 0xc5,
- 0x8a, 0x6d, 0xed, 0x98, 0xbb, 0xbe, 0x05, 0x89, 0x2d, 0xe3, 0x62, 0x17, 0x2f, 0x1b, 0x9e, 0x71,
- 0xd9, 0xc4, 0x57, 0x48, 0x05, 0xa6, 0xf5, 0xbe, 0x54, 0x9f, 0x29, 0x96, 0x82, 0x2f, 0x1e, 0xec,
- 0x12, 0xa6, 0xa6, 0x75, 0x3e, 0xc9, 0x1f, 0x3f, 0xe8, 0xeb, 0xa6, 0x83, 0x1d, 0xdc, 0xc5, 0x86,
- 0x8b, 0xfd, 0xb9, 0x98, 0x85, 0xbb, 0x44, 0x69, 0xa7, 0xf5, 0xb8, 0xcf, 0xda, 0x39, 0x98, 0xa3,
- 0x9f, 0x88, 0xfd, 0xe3, 0x12, 0x35, 0x9e, 0xd6, 0x85, 0x34, 0xed, 0xa9, 0x50, 0xc0, 0x8f, 0x7a,
- 0x8e, 0x71, 0xb6, 0x43, 0xf0, 0xba, 0x6e, 0x91, 0xba, 0x3a, 0x2e, 0x06, 0xae, 0x8e, 0x8b, 0x4d,
- 0xe2, 0x08, 0xa9, 0xd3, 0x5c, 0xe8, 0x53, 0xd3, 0xa1, 0xf5, 0xf2, 0x0e, 0x35, 0x52, 0x0c, 0x0d,
- 0xf2, 0x96, 0xb1, 0x8f, 0x99, 0x5e, 0x90, 0x67, 0xed, 0x0e, 0x38, 0x69, 0x5c, 0x36, 0x3c, 0xc3,
- 0x59, 0xb7, 0xdb, 0x46, 0x97, 0x0c, 0x9b, 0x41, 0xcb, 0xef, 0xff, 0x40, 0xb6, 0xa1, 0x3c, 0xdb,
- 0xc1, 0x24, 0x57, 0xb0, 0x0d, 0x15, 0x24, 0xf8, 0xd4, 0xcd, 0xb6, 0x6d, 0x11, 0xfe, 0x55, 0x9d,
- 0x3c, 0xfb, 0x52, 0xe9, 0x98, 0xae, 0x5f, 0x11, 0x42, 0xa5, 0x4e, 0xf7, 0x53, 0x9a, 0x57, 0xad,
- 0x36, 0xd9, 0x82, 0x9a, 0xd6, 0xe3, 0x3e, 0x6b, 0x4b, 0x30, 0xcb, 0x76, 0x5f, 0x36, 0x7c, 0xbd,
- 0x2a, 0x12, 0xbd, 0xba, 0x45, 0x74, 0x24, 0xa3, 0x78, 0x2e, 0xd6, 0xa3, 0x7c, 0x3a, 0xff, 0x93,
- 0xf6, 0x3c, 0xb8, 0x81, 0xbd, 0x56, 0x0e, 0x5c, 0xcf, 0xde, 0xa7, 0xa0, 0xaf, 0x98, 0x5d, 0x5a,
- 0x83, 0x29, 0x52, 0x83, 0xa4, 0x2c, 0xda, 0xdd, 0x70, 0xba, 0xe7, 0xe0, 0x1d, 0xec, 0x3c, 0x6c,
- 0xec, 0x1f, 0x3c, 0xda, 0x72, 0x0c, 0xcb, 0xed, 0xd9, 0x8e, 0x77, 0x76, 0x9a, 0x30, 0x3f, 0xf0,
- 0x9b, 0x76, 0x27, 0x9c, 0x7a, 0xc4, 0xb5, 0xad, 0x72, 0xcf, 0x5c, 0x37, 0x5d, 0x0f, 0x5b, 0xe5,
- 0x4e, 0xc7, 0x39, 0x3b, 0x43, 0xca, 0x3a, 0xfc, 0x81, 0x75, 0xab, 0xd3, 0x50, 0xa4, 0xc2, 0x46,
- 0xaf, 0x2a, 0x48, 0x7b, 0x9c, 0xb2, 0xea, 0x27, 0xda, 0x81, 0x4f, 0x83, 0x29, 0xd6, 0x1f, 0x12,
- 0x58, 0x67, 0xef, 0x3e, 0xd3, 0xb7, 0xf4, 0xc1, 0xa8, 0xe8, 0x41, 0x36, 0xed, 0x19, 0x50, 0x6c,
- 0x13, 0x21, 0x10, 0x84, 0x67, 0xef, 0xbe, 0x61, 0x70, 0xa1, 0x24, 0x8b, 0xce, 0xb2, 0xa2, 0xcf,
- 0xa9, 0x52, 0x4e, 0xaa, 0x49, 0x1c, 0xa7, 0xeb, 0x03, 0xbe, 0xac, 0x8c, 0xd0, 0xc9, 0xde, 0x09,
- 0xb7, 0xb3, 0x1e, 0x94, 0x59, 0x2b, 0xcb, 0xdb, 0x4b, 0x5b, 0xc1, 0x7c, 0xd5, 0xb7, 0x61, 0x9a,
- 0xad, 0xb2, 0xde, 0xda, 0xae, 0x37, 0x96, 0xfd, 0x79, 0xee, 0x1d, 0x70, 0xdb, 0x90, 0xdc, 0xd5,
- 0xd6, 0x76, 0xbd, 0xbc, 0x51, 0x2d, 0xed, 0x88, 0x96, 0x50, 0xb3, 0xd5, 0xd8, 0xdc, 0xd6, 0xb7,
- 0xea, 0xf5, 0x5a, 0x7d, 0x95, 0x12, 0xf3, 0x4d, 0xcf, 0x33, 0x51, 0x86, 0x0b, 0x7a, 0xad, 0x55,
- 0xdd, 0xae, 0x34, 0xea, 0x2b, 0xb5, 0xd5, 0x92, 0x39, 0xcc, 0x8c, 0x7a, 0x44, 0xbb, 0x05, 0x6e,
- 0x14, 0x38, 0xa9, 0x35, 0xea, 0xfe, 0xe4, 0xbb, 0x52, 0xae, 0x57, 0xaa, 0xfe, 0x4c, 0xfb, 0x92,
- 0x86, 0xe0, 0x5a, 0x4a, 0x6e, 0x7b, 0xa5, 0xb6, 0xce, 0xef, 0x97, 0x7d, 0x32, 0xa7, 0x9d, 0x85,
- 0x6b, 0xf8, 0x6f, 0xb5, 0xfa, 0xf9, 0xf2, 0x7a, 0x6d, 0xb9, 0xf4, 0xab, 0x39, 0xed, 0x56, 0xb8,
- 0x59, 0xf8, 0x8b, 0x6e, 0x7d, 0x6d, 0xd7, 0x96, 0xb7, 0x37, 0x6a, 0xcd, 0x8d, 0x72, 0xab, 0xb2,
- 0x56, 0xfa, 0x14, 0x99, 0x98, 0x84, 0x96, 0x36, 0xe7, 0x39, 0xfa, 0x1a, 0xde, 0x02, 0x28, 0x8b,
- 0x8a, 0xfa, 0x94, 0x81, 0xb0, 0x27, 0x5b, 0xbc, 0x1f, 0x0f, 0xc7, 0x92, 0x65, 0x41, 0x85, 0x9e,
- 0x96, 0x82, 0x56, 0x3a, 0x1d, 0x6a, 0x8d, 0xa0, 0x42, 0xb7, 0xc0, 0x8d, 0xf5, 0x2a, 0x45, 0x4a,
- 0xaf, 0x56, 0x1a, 0xe7, 0xab, 0xfa, 0xf6, 0x85, 0xf2, 0xfa, 0x7a, 0xb5, 0xb5, 0xbd, 0x52, 0xd3,
- 0x9b, 0xad, 0xd2, 0x0e, 0xfa, 0x47, 0x25, 0x5c, 0x70, 0xe2, 0xa4, 0xf5, 0xc7, 0x4a, 0xda, 0x66,
- 0x9d, 0xb8, 0xb0, 0xf4, 0x0d, 0x50, 0x74, 0x3d, 0xc3, 0x3b, 0x70, 0x59, 0xab, 0x7e, 0xc2, 0xe0,
- 0x56, 0xbd, 0xd8, 0x24, 0x99, 0x74, 0x96, 0x19, 0x7d, 0x2e, 0x97, 0xa6, 0x99, 0x8e, 0x61, 0xcd,
- 0xc9, 0x1c, 0x41, 0xc4, 0x37, 0x01, 0x0a, 0xb4, 0xbd, 0xd6, 0xdc, 0x2e, 0xaf, 0xeb, 0xd5, 0xf2,
- 0xf2, 0xc3, 0xe1, 0x4a, 0x13, 0xd6, 0xae, 0x85, 0x53, 0x5b, 0xf5, 0xf2, 0xd2, 0x7a, 0x95, 0x34,
- 0x97, 0x46, 0xbd, 0x5e, 0xad, 0xf8, 0x72, 0xff, 0x76, 0xb2, 0xaf, 0xe3, 0xdb, 0xdb, 0x84, 0x6f,
- 0xdf, 0x26, 0xe2, 0xe4, 0xff, 0x17, 0xd2, 0xee, 0x4f, 0x91, 0x86, 0xf1, 0xb4, 0xc6, 0x8b, 0xc3,
- 0x67, 0xa5, 0x3c, 0x9e, 0xa4, 0x38, 0x49, 0x87, 0xc7, 0xb7, 0x8c, 0x80, 0xc7, 0xb5, 0x70, 0x8a,
- 0xc7, 0x83, 0x78, 0x3e, 0xc5, 0xc3, 0xf0, 0x3e, 0x15, 0xa6, 0x36, 0xcc, 0x5d, 0xe2, 0xfa, 0x79,
- 0x10, 0x99, 0x1e, 0x0b, 0xa0, 0x84, 0x9e, 0x36, 0x8a, 0xd9, 0x11, 0xa6, 0xe9, 0x8a, 0xfc, 0x4a,
- 0x8a, 0xd4, 0x54, 0xfc, 0xdd, 0xa9, 0x7b, 0x26, 0xc6, 0x70, 0x4c, 0xcf, 0xf4, 0xa7, 0xa9, 0x7a,
- 0xa6, 0xc1, 0xb4, 0xd2, 0xc1, 0xe4, 0x1c, 0x0d, 0x26, 0xde, 0x33, 0x66, 0x0e, 0xa6, 0xc3, 0x71,
- 0x82, 0x6c, 0xd2, 0xf8, 0x1f, 0xab, 0xf5, 0xc6, 0xd6, 0xea, 0xda, 0xf6, 0x8a, 0x5e, 0xad, 0xb2,
- 0x65, 0xdd, 0x5d, 0xf4, 0x98, 0x02, 0xf3, 0x8c, 0x77, 0xe6, 0xf1, 0x70, 0x73, 0x2c, 0x7c, 0x4c,
- 0xd0, 0xff, 0xc6, 0x4f, 0x29, 0x56, 0x45, 0x41, 0x3f, 0x3d, 0x49, 0x38, 0x89, 0x2e, 0x0f, 0x6f,
- 0x0b, 0xc5, 0xfd, 0xa0, 0x20, 0xee, 0x67, 0xa5, 0xa6, 0x98, 0xfd, 0xb4, 0xe2, 0xaf, 0x66, 0xa0,
- 0xd8, 0xc4, 0x5d, 0xdc, 0xf6, 0xd0, 0x0f, 0xa9, 0x23, 0x6b, 0x7b, 0x9c, 0x89, 0xac, 0xa6, 0x32,
- 0x91, 0xf3, 0x19, 0x98, 0xc8, 0x85, 0xd1, 0x4d, 0xe4, 0x62, 0x5a, 0x13, 0x79, 0x2a, 0xc6, 0x44,
- 0x4e, 0xea, 0x0f, 0xa6, 0x65, 0xfa, 0x83, 0x8f, 0x15, 0xd3, 0x8e, 0xbd, 0x14, 0xd2, 0xe3, 0x35,
- 0xa9, 0xbf, 0xa7, 0x90, 0x66, 0xac, 0x1e, 0xc8, 0x71, 0x3a, 0xfd, 0x7f, 0x5d, 0x3e, 0x83, 0x25,
- 0x40, 0xed, 0x89, 0x70, 0x73, 0xf4, 0xbe, 0x5d, 0x7d, 0x41, 0xad, 0xd9, 0x6a, 0x12, 0x3b, 0xba,
- 0xd2, 0xd0, 0xf5, 0xad, 0x4d, 0xba, 0x79, 0x74, 0x06, 0xb4, 0x88, 0x8a, 0xbe, 0x55, 0xa7, 0x56,
- 0xf3, 0xae, 0x48, 0x7d, 0xa5, 0x56, 0x5f, 0xde, 0x0e, 0x47, 0xa2, 0xfa, 0x4a, 0xa3, 0xb4, 0xa7,
- 0x2d, 0xc2, 0x1d, 0x1c, 0x75, 0xd2, 0xb5, 0xd1, 0x12, 0xca, 0xf5, 0xe5, 0xed, 0x8d, 0x7a, 0x75,
- 0xa3, 0x51, 0xaf, 0x55, 0x48, 0x7a, 0xb3, 0xda, 0x2a, 0x99, 0xbe, 0xf9, 0xd6, 0x67, 0xa7, 0x37,
- 0xab, 0x65, 0xbd, 0xb2, 0x56, 0xd5, 0x69, 0x91, 0x8f, 0x68, 0xb7, 0xc1, 0xb9, 0x72, 0xbd, 0xd1,
- 0xf2, 0x53, 0xca, 0xf5, 0x87, 0x5b, 0x0f, 0x6f, 0x56, 0xb7, 0x37, 0xf5, 0x46, 0xa5, 0xda, 0x6c,
- 0xfa, 0xa3, 0x1f, 0xb3, 0xea, 0x4b, 0x5d, 0xed, 0xb9, 0x70, 0x2f, 0xc7, 0x5a, 0xb5, 0x45, 0x3c,
- 0x15, 0x36, 0x1a, 0xc4, 0x59, 0x6d, 0xb9, 0xba, 0xbd, 0x56, 0x6e, 0x6e, 0xd7, 0xea, 0x95, 0xc6,
- 0xc6, 0x66, 0xb9, 0x55, 0xf3, 0x07, 0xc9, 0x4d, 0xbd, 0xd1, 0x6a, 0x6c, 0x9f, 0xaf, 0xea, 0xcd,
- 0x5a, 0xa3, 0x5e, 0xb2, 0xfc, 0x2a, 0x73, 0xa3, 0x6a, 0x60, 0xdd, 0xd8, 0xda, 0x8d, 0x70, 0x36,
- 0x48, 0x5f, 0x6f, 0xf8, 0x82, 0xe6, 0xec, 0xfc, 0x1e, 0x6f, 0x1b, 0x35, 0x5b, 0x0d, 0x9d, 0x5a,
- 0xfa, 0x1b, 0xb5, 0x55, 0xdd, 0x9f, 0x9e, 0x94, 0x5e, 0x98, 0xe9, 0x3c, 0xe0, 0x9f, 0x15, 0xc8,
- 0x37, 0x3d, 0xbb, 0x87, 0xbe, 0x3e, 0xea, 0xe8, 0x6e, 0x02, 0x70, 0x88, 0x63, 0xc2, 0xb2, 0xe1,
- 0x19, 0x6c, 0xed, 0x84, 0x4b, 0x41, 0xbf, 0x22, 0xbd, 0x9b, 0x1a, 0x59, 0x4a, 0x76, 0x2f, 0x66,
- 0x60, 0xf8, 0x9a, 0xdc, 0xf1, 0xb2, 0x78, 0x42, 0xe9, 0xda, 0xc3, 0x77, 0x8d, 0xb2, 0x5f, 0x8a,
- 0xe0, 0x0c, 0x07, 0xab, 0x2f, 0xff, 0x40, 0x65, 0xb0, 0x76, 0x1d, 0x5c, 0xd3, 0xa7, 0x7c, 0x44,
- 0xe7, 0x76, 0xb4, 0xaf, 0x83, 0x27, 0x70, 0xea, 0x5f, 0xdd, 0x68, 0x9c, 0xaf, 0x86, 0x8a, 0xbe,
- 0x5c, 0x6e, 0x95, 0x4b, 0xbb, 0xe8, 0x33, 0x2a, 0xe4, 0x37, 0xec, 0xcb, 0xfd, 0x9b, 0xd8, 0x16,
- 0xbe, 0xc2, 0xed, 0x74, 0x04, 0xaf, 0xe2, 0x71, 0x1a, 0x29, 0xb1, 0x6f, 0xc4, 0x3b, 0xac, 0x7c,
- 0x56, 0x49, 0x23, 0xf6, 0x8d, 0xa3, 0x7a, 0xa9, 0xfc, 0xd5, 0x28, 0x62, 0x8f, 0x11, 0x2d, 0xd6,
- 0xce, 0xc1, 0x4d, 0xd1, 0x87, 0xda, 0x72, 0xb5, 0xde, 0xaa, 0xad, 0x3c, 0x1c, 0x09, 0xb7, 0xa6,
- 0x4b, 0x89, 0x7f, 0x58, 0x37, 0x97, 0x3c, 0xbf, 0x3f, 0x0b, 0xa7, 0xa3, 0x6f, 0xab, 0xd5, 0x56,
- 0xf0, 0xe5, 0x11, 0xf4, 0xd2, 0x02, 0xcc, 0xd1, 0x6e, 0x7f, 0xab, 0xd7, 0xf1, 0x2d, 0xe6, 0x67,
- 0x44, 0xe8, 0xde, 0x0e, 0x27, 0x6b, 0x9b, 0x2b, 0xcd, 0xa6, 0x67, 0x3b, 0xc6, 0x2e, 0x26, 0x23,
- 0x24, 0x95, 0x56, 0x7f, 0x32, 0x7a, 0xaf, 0xf4, 0x5a, 0xbc, 0x38, 0xd4, 0xd0, 0x32, 0x63, 0x50,
- 0xff, 0xa2, 0xd4, 0xda, 0xb9, 0x04, 0xc1, 0x74, 0xe8, 0x3f, 0x32, 0xe6, 0x36, 0x17, 0x8f, 0xcb,
- 0xce, 0xb9, 0x97, 0x29, 0x30, 0xd3, 0x32, 0xf7, 0xf1, 0x8b, 0x6c, 0x0b, 0xbb, 0xda, 0x14, 0xa8,
- 0xab, 0x1b, 0xad, 0xd2, 0x09, 0xff, 0xc1, 0x9f, 0xca, 0xe4, 0xc8, 0x43, 0xd5, 0x2f, 0xc0, 0x7f,
- 0x28, 0xb7, 0x4a, 0xaa, 0xff, 0xb0, 0x51, 0x6d, 0x95, 0xf2, 0xfe, 0x43, 0xbd, 0xda, 0x2a, 0x15,
- 0xfc, 0x87, 0xcd, 0xf5, 0x56, 0xa9, 0xe8, 0x3f, 0xd4, 0x9a, 0xad, 0xd2, 0x94, 0xff, 0xb0, 0xd4,
- 0x6c, 0x95, 0xa6, 0xfd, 0x87, 0xf3, 0xcd, 0x56, 0x69, 0xc6, 0x7f, 0xa8, 0xb4, 0x5a, 0x25, 0xf0,
- 0x1f, 0x1e, 0x6c, 0xb6, 0x4a, 0xb3, 0xfe, 0x43, 0xb9, 0xd2, 0x2a, 0xcd, 0x91, 0x87, 0x6a, 0xab,
- 0x34, 0xef, 0x3f, 0x34, 0x9b, 0xad, 0xd2, 0x02, 0xa1, 0xdc, 0x6c, 0x95, 0x4e, 0x92, 0xb2, 0x6a,
- 0xad, 0x52, 0xc9, 0x7f, 0x58, 0x6b, 0xb6, 0x4a, 0xa7, 0x48, 0xe6, 0x66, 0xab, 0xa4, 0x91, 0x42,
- 0x9b, 0xad, 0xd2, 0x35, 0x24, 0x4f, 0xb3, 0x55, 0x3a, 0x4d, 0x8a, 0x68, 0xb6, 0x4a, 0xd7, 0x12,
- 0x36, 0xaa, 0xad, 0xd2, 0x19, 0x92, 0x47, 0x6f, 0x95, 0xae, 0x23, 0x9f, 0xea, 0xad, 0xd2, 0x59,
- 0xc2, 0x58, 0xb5, 0x55, 0xba, 0x9e, 0x3c, 0xe8, 0xad, 0x12, 0x22, 0x9f, 0xca, 0xad, 0xd2, 0x0d,
- 0xe8, 0x09, 0x30, 0xb3, 0x8a, 0x3d, 0x0a, 0x22, 0x2a, 0x81, 0xba, 0x8a, 0x3d, 0x7e, 0xf2, 0xfc,
- 0xfa, 0x3c, 0x5c, 0xc7, 0x16, 0x5c, 0x56, 0x1c, 0x7b, 0x7f, 0x1d, 0xef, 0x1a, 0xed, 0xab, 0xd5,
- 0x47, 0x7d, 0x53, 0x0e, 0xbd, 0x32, 0x27, 0xac, 0x2f, 0xf7, 0xa2, 0xde, 0x88, 0x3c, 0x27, 0x9a,
- 0xbe, 0xc1, 0x8a, 0xb1, 0x2a, 0xae, 0x18, 0xc7, 0x19, 0x7b, 0x79, 0x19, 0x63, 0xef, 0xef, 0xf9,
- 0xc6, 0x20, 0x6c, 0x0f, 0xe5, 0xfa, 0xb6, 0x87, 0xfc, 0x16, 0xd6, 0xc3, 0x8e, 0x6b, 0x5b, 0x46,
- 0xb7, 0xc9, 0x9c, 0x81, 0xe8, 0xfc, 0xb2, 0x3f, 0x59, 0x7b, 0x7e, 0xd0, 0xa8, 0xa8, 0xc1, 0xf7,
- 0x9c, 0xa4, 0x25, 0xa9, 0x7e, 0x09, 0xc5, 0xb4, 0xaf, 0x4f, 0x85, 0xed, 0xab, 0x25, 0xb4, 0xaf,
- 0xe7, 0x1d, 0x81, 0x76, 0xba, 0xa6, 0x56, 0x1b, 0x6d, 0x92, 0x19, 0xb9, 0xca, 0x07, 0xbb, 0x51,
- 0x2a, 0xfa, 0x8c, 0x02, 0x67, 0xaa, 0xd6, 0xa0, 0x49, 0x0a, 0xaf, 0x46, 0xef, 0xe0, 0xa1, 0xd9,
- 0x14, 0x45, 0x7a, 0xef, 0xc0, 0x6a, 0x0f, 0xa6, 0x19, 0x23, 0xd1, 0xdf, 0x0c, 0x25, 0xda, 0x14,
- 0x24, 0xfa, 0xc0, 0xe8, 0xa4, 0xd3, 0x09, 0xb4, 0x3e, 0xd6, 0xbe, 0x2b, 0x8f, 0xfe, 0x4c, 0x81,
- 0x53, 0xd4, 0x9f, 0xef, 0x41, 0x3a, 0x27, 0x22, 0xbd, 0xbd, 0x68, 0x7d, 0x75, 0xa3, 0xf9, 0x13,
- 0xd5, 0x6f, 0x2e, 0x05, 0xbd, 0x99, 0x17, 0xf8, 0x43, 0xa2, 0xc0, 0x63, 0xfa, 0xf1, 0xfe, 0xe2,
- 0x62, 0x64, 0xfd, 0xab, 0xa1, 0xac, 0xeb, 0x82, 0xac, 0xef, 0x1d, 0x89, 0xea, 0xf1, 0x8a, 0xf9,
- 0xcb, 0x79, 0x78, 0x02, 0xe5, 0x90, 0x29, 0x02, 0xed, 0x07, 0xcb, 0x56, 0x47, 0xc7, 0xae, 0x67,
- 0x38, 0x9e, 0x10, 0xca, 0xa2, 0x6f, 0xd2, 0x9d, 0xcb, 0x60, 0xd2, 0xad, 0x0c, 0x9d, 0x74, 0xa3,
- 0xf7, 0xf0, 0x06, 0xde, 0x05, 0x11, 0xd9, 0x72, 0x02, 0x06, 0x31, 0x35, 0x8c, 0x6b, 0x51, 0xa1,
- 0xe5, 0xf7, 0x4d, 0x02, 0xca, 0x2b, 0x47, 0x2e, 0x21, 0x1d, 0xe2, 0xbf, 0x32, 0x5e, 0x4b, 0x3c,
- 0xcf, 0x7f, 0x13, 0xcd, 0xc6, 0x52, 0x27, 0xd3, 0x29, 0xd4, 0xab, 0xa7, 0x61, 0x86, 0x74, 0x39,
- 0xeb, 0xa6, 0x75, 0x09, 0xfd, 0xa9, 0x0a, 0x73, 0x75, 0x7c, 0xa5, 0xb2, 0x67, 0x74, 0xbb, 0xd8,
- 0xda, 0xc5, 0xe8, 0x11, 0xc1, 0xb6, 0x37, 0x7a, 0xbd, 0x7a, 0xb4, 0x5b, 0x1b, 0xbc, 0x6a, 0x0f,
- 0x40, 0xc1, 0x6d, 0xdb, 0x3d, 0xea, 0x55, 0xb6, 0xc0, 0xb9, 0x86, 0x89, 0x2b, 0xce, 0xe5, 0x03,
- 0x6f, 0x6f, 0x91, 0x94, 0x55, 0xee, 0x99, 0x4d, 0xff, 0x07, 0x9d, 0xfe, 0xc7, 0xc6, 0xc9, 0xbf,
- 0x18, 0xd8, 0x19, 0xe7, 0x12, 0x3a, 0xe3, 0x90, 0xf1, 0x45, 0x9e, 0xe9, 0x98, 0x45, 0x92, 0x5b,
- 0x60, 0xb6, 0x1d, 0x64, 0x09, 0xcf, 0xcc, 0xf1, 0x49, 0xe8, 0xcf, 0x53, 0x75, 0xd7, 0x52, 0x85,
- 0xa7, 0xd3, 0x2a, 0x3c, 0x66, 0x53, 0xf3, 0x5a, 0x38, 0xd5, 0x6a, 0x34, 0xb6, 0x37, 0xca, 0xf5,
- 0x87, 0xa3, 0x58, 0x15, 0x3b, 0xe8, 0x75, 0x79, 0x58, 0x68, 0xda, 0xdd, 0xcb, 0x38, 0xc2, 0xb9,
- 0x26, 0x38, 0x63, 0xf2, 0x72, 0xca, 0x1d, 0x92, 0x93, 0x76, 0x06, 0x8a, 0x86, 0xe5, 0x5e, 0xc1,
- 0x81, 0xf9, 0xcf, 0xde, 0x18, 0x8c, 0x1f, 0xe1, 0x3b, 0x02, 0x5d, 0x84, 0xf1, 0xbe, 0x21, 0x92,
- 0x14, 0xb9, 0x8a, 0x01, 0xf2, 0x1c, 0xcc, 0xb9, 0xd4, 0x67, 0xa3, 0xc5, 0xb9, 0xe6, 0x08, 0x69,
- 0x84, 0x45, 0xea, 0x34, 0xa4, 0x32, 0x16, 0xc9, 0x1b, 0x7a, 0x53, 0xd8, 0x7f, 0x6c, 0x09, 0x10,
- 0x97, 0x8f, 0xc2, 0x58, 0x3a, 0x90, 0xdf, 0x30, 0xee, 0x49, 0xfc, 0x59, 0x38, 0xcd, 0x9a, 0xfd,
- 0x76, 0x65, 0xad, 0xbc, 0xbe, 0x5e, 0xad, 0xaf, 0x56, 0xb7, 0x6b, 0xcb, 0x74, 0x0f, 0x38, 0x4a,
- 0x29, 0xb7, 0x5a, 0xd5, 0x8d, 0xcd, 0x56, 0x73, 0xbb, 0xfa, 0x82, 0x4a, 0xb5, 0xba, 0x4c, 0xdc,
- 0xa1, 0xc9, 0x79, 0xc6, 0xc0, 0x71, 0xbd, 0x5c, 0x6f, 0x5e, 0xa8, 0xea, 0xa5, 0xbd, 0x73, 0x65,
- 0x98, 0xe5, 0x06, 0x0a, 0x9f, 0xbb, 0x65, 0xbc, 0x63, 0x1c, 0x74, 0x99, 0x39, 0x5e, 0x3a, 0xe1,
- 0x73, 0x47, 0x64, 0xd3, 0xb0, 0xba, 0x57, 0x4b, 0x39, 0xad, 0x04, 0x73, 0xfc, 0x98, 0x50, 0x52,
- 0xd0, 0xbb, 0x6e, 0x84, 0x99, 0x0b, 0xb6, 0x73, 0x89, 0xf8, 0xf0, 0xa2, 0x0f, 0xd0, 0x98, 0x56,
- 0x41, 0x74, 0x00, 0xce, 0x00, 0x7b, 0x83, 0xbc, 0xd3, 0x56, 0x40, 0x6d, 0x71, 0x68, 0x04, 0x80,
- 0x5b, 0x60, 0xf6, 0x4a, 0x90, 0x3b, 0x6a, 0xe9, 0x5c, 0x12, 0xfa, 0x29, 0x39, 0x37, 0xac, 0xe1,
- 0x45, 0x66, 0xbf, 0x9e, 0xff, 0x4e, 0x05, 0x8a, 0xab, 0xd8, 0x2b, 0x77, 0xbb, 0xbc, 0xdc, 0x5e,
- 0x2b, 0x7d, 0xaa, 0x53, 0xa8, 0x44, 0xb9, 0xdb, 0x8d, 0x6f, 0x54, 0x9c, 0x80, 0x82, 0xd3, 0x47,
- 0x42, 0x9a, 0xa4, 0xcf, 0xf4, 0x90, 0x02, 0xb3, 0x97, 0xd8, 0x2f, 0x45, 0x8e, 0xd2, 0x6f, 0xe1,
- 0xcc, 0xa4, 0xa7, 0x47, 0xf1, 0xcc, 0x72, 0xc9, 0x2e, 0x4b, 0x41, 0x3e, 0xed, 0x21, 0x98, 0x3a,
- 0x70, 0x71, 0xc5, 0x70, 0x83, 0xa1, 0x4d, 0xac, 0x69, 0xe3, 0xe2, 0x23, 0xb8, 0xed, 0x2d, 0xd6,
- 0xf6, 0xfd, 0x89, 0xcf, 0x16, 0xcd, 0x18, 0x86, 0x08, 0x63, 0xef, 0x7a, 0x40, 0xc1, 0x9f, 0x76,
- 0x5e, 0x31, 0xbd, 0xbd, 0xca, 0x9e, 0xe1, 0xb1, 0x6d, 0x94, 0xf0, 0x1d, 0xbd, 0x6a, 0x04, 0x38,
- 0x13, 0x9d, 0x6c, 0x62, 0x0f, 0x87, 0xa7, 0x06, 0x71, 0x0c, 0x9e, 0x31, 0xa3, 0x80, 0xf8, 0xd7,
- 0x0a, 0xe4, 0x1b, 0x3d, 0x6c, 0x49, 0x9f, 0x84, 0x0c, 0x65, 0xab, 0xf4, 0xc9, 0xf6, 0x4d, 0xf2,
- 0x4e, 0xba, 0x61, 0xa5, 0xfd, 0x92, 0x63, 0x24, 0x7b, 0x17, 0xe4, 0x4d, 0x6b, 0xc7, 0x66, 0x96,
- 0xed, 0x0d, 0x31, 0xb6, 0x4e, 0xcd, 0xda, 0xb1, 0x75, 0x92, 0x51, 0xd6, 0x3f, 0x37, 0xa9, 0xec,
- 0xec, 0xc5, 0xfd, 0x37, 0xd3, 0x50, 0xa4, 0xea, 0x8c, 0x5e, 0xa3, 0x82, 0x5a, 0xee, 0x74, 0x62,
- 0x04, 0xaf, 0x1c, 0x12, 0xbc, 0x4d, 0x7e, 0x0b, 0x31, 0x09, 0xdf, 0xc5, 0x40, 0x56, 0x92, 0x7d,
- 0x3b, 0x6b, 0x52, 0xe5, 0x4e, 0x27, 0xfe, 0x14, 0x41, 0x58, 0xa0, 0x22, 0x16, 0xc8, 0xb7, 0x70,
- 0x55, 0xae, 0x85, 0xa7, 0x1e, 0x08, 0x62, 0xf9, 0xcb, 0x1e, 0xa2, 0xbf, 0x57, 0x60, 0x6a, 0xdd,
- 0x74, 0x3d, 0x1f, 0x9b, 0xb2, 0x0c, 0x36, 0x37, 0xc2, 0x4c, 0x20, 0x1a, 0xbf, 0xcb, 0xf3, 0xfb,
- 0xf3, 0x28, 0x41, 0x9c, 0x89, 0x3f, 0x28, 0xa2, 0xf3, 0xcc, 0xe4, 0xda, 0x33, 0x2e, 0xe2, 0x4f,
- 0x98, 0x45, 0xc5, 0x2a, 0xfd, 0xc5, 0xfe, 0x4c, 0x28, 0xf0, 0x0d, 0x41, 0xe0, 0xf7, 0x8c, 0x52,
- 0x64, 0xf6, 0x42, 0xff, 0x3d, 0x05, 0xc0, 0x2f, 0x9b, 0x1d, 0xe3, 0x7d, 0xb2, 0x10, 0x9c, 0x23,
- 0x41, 0xba, 0xaf, 0xe3, 0xa5, 0xbb, 0x21, 0x4a, 0xf7, 0x1b, 0x87, 0x57, 0x35, 0xe9, 0xb8, 0xae,
- 0x56, 0x02, 0xd5, 0x0c, 0x45, 0xeb, 0x3f, 0xa2, 0x77, 0x86, 0x42, 0xdd, 0x14, 0x84, 0x7a, 0xdf,
- 0x88, 0x25, 0x65, 0x2f, 0xd7, 0x3f, 0x54, 0x60, 0xaa, 0x89, 0x3d, 0xbf, 0x9b, 0x44, 0xe7, 0x65,
- 0x7a, 0x78, 0xae, 0x6d, 0x2b, 0x92, 0x6d, 0xfb, 0xab, 0x39, 0xd9, 0x20, 0x5f, 0x91, 0x64, 0x18,
- 0x4f, 0x31, 0xab, 0x0f, 0x6f, 0x91, 0x0a, 0xf2, 0x35, 0x8c, 0x5a, 0xf6, 0xd2, 0x7d, 0x87, 0x12,
- 0xfa, 0x80, 0x88, 0xa7, 0xec, 0x78, 0xb3, 0x38, 0x77, 0xd8, 0x2c, 0x96, 0x3f, 0x65, 0xc7, 0xd7,
- 0x31, 0xde, 0x31, 0x21, 0xb5, 0xb1, 0x31, 0x06, 0x9f, 0x81, 0x51, 0xe4, 0xf5, 0x12, 0x15, 0x8a,
- 0x6c, 0xf3, 0xe0, 0x81, 0xe4, 0xbd, 0x83, 0xe1, 0x53, 0x8b, 0xf7, 0x8f, 0x60, 0xca, 0x25, 0x2d,
- 0xcb, 0x87, 0x6c, 0x28, 0x1c, 0x1b, 0x77, 0x42, 0x81, 0x44, 0x21, 0x66, 0xe3, 0x5c, 0xe4, 0xee,
- 0x11, 0x90, 0xa8, 0xfa, 0x5f, 0x75, 0x9a, 0x29, 0x35, 0x0a, 0x63, 0x58, 0xc9, 0x1f, 0x05, 0x85,
- 0x2f, 0x6b, 0x00, 0x9b, 0x07, 0x17, 0xbb, 0xa6, 0xbb, 0x67, 0x5a, 0xc4, 0xfb, 0x6b, 0x8e, 0xbd,
- 0xd2, 0x60, 0xba, 0x89, 0xe6, 0x5f, 0xac, 0x51, 0x50, 0x02, 0xf5, 0xc0, 0x31, 0xd9, 0x32, 0x80,
- 0xff, 0xa8, 0xdd, 0x1f, 0x7a, 0x48, 0xe6, 0xfb, 0xc2, 0xa8, 0xf8, 0x62, 0x88, 0x38, 0x58, 0xe4,
- 0x4a, 0x8f, 0x3c, 0x25, 0xf9, 0x88, 0xc9, 0x05, 0x31, 0x62, 0xb2, 0x70, 0xb6, 0xba, 0xd8, 0x77,
- 0xb6, 0xda, 0xc7, 0xd1, 0x35, 0x5f, 0x84, 0x89, 0x53, 0x91, 0xaa, 0x93, 0x67, 0xff, 0x8f, 0x47,
- 0x6c, 0xd3, 0x22, 0x9b, 0x3a, 0xcc, 0x83, 0x3f, 0x4a, 0xe0, 0xfb, 0xbc, 0x19, 0xc9, 0x3e, 0xef,
- 0xa3, 0xd1, 0xdc, 0xc7, 0x96, 0x34, 0x9c, 0x53, 0x48, 0x4e, 0x60, 0x37, 0xdf, 0xc7, 0x2e, 0xfa,
- 0x98, 0x74, 0x50, 0x45, 0x4e, 0xc6, 0x89, 0xb3, 0x18, 0xc6, 0x81, 0x12, 0x72, 0xc0, 0xed, 0x01,
- 0x27, 0xf5, 0xc0, 0xc3, 0xe8, 0xa7, 0xd3, 0xe5, 0xfd, 0x11, 0xd6, 0x6b, 0x34, 0x58, 0x08, 0x0e,
- 0xa9, 0x37, 0x96, 0x1e, 0xac, 0x56, 0x5a, 0x25, 0x7c, 0xf8, 0xe0, 0x3a, 0x39, 0xa2, 0x4e, 0x8f,
- 0xa3, 0x47, 0x6b, 0x32, 0xe8, 0x7f, 0x28, 0x50, 0x64, 0xe6, 0xc6, 0x03, 0x47, 0x84, 0x10, 0xbd,
- 0x7e, 0x14, 0x48, 0x12, 0x63, 0x85, 0xfc, 0x7a, 0x5a, 0x00, 0xc6, 0x60, 0x60, 0x3c, 0x9c, 0x19,
- 0x00, 0xe8, 0x9f, 0x14, 0xc8, 0xfb, 0x66, 0x90, 0x5c, 0x24, 0x86, 0x4f, 0x49, 0xbb, 0xf1, 0x72,
- 0x02, 0xf0, 0xc9, 0xc7, 0xe8, 0xf7, 0x12, 0xcc, 0xf4, 0x68, 0xc6, 0x30, 0x0e, 0xc8, 0xad, 0x12,
- 0x9d, 0x11, 0xd6, 0xa3, 0xdf, 0xd0, 0xfb, 0xa4, 0x5c, 0x81, 0x93, 0xf9, 0x49, 0x07, 0x47, 0x75,
- 0x1c, 0x41, 0x1b, 0x76, 0xd0, 0xbf, 0x28, 0x00, 0x3a, 0x76, 0xed, 0xee, 0x65, 0xbc, 0xe5, 0x98,
- 0xe8, 0x86, 0x08, 0x00, 0xd6, 0xec, 0x73, 0x51, 0xb3, 0xff, 0xb4, 0x22, 0xeb, 0xd6, 0x2b, 0x68,
- 0x5e, 0x40, 0x3c, 0x46, 0xfc, 0xcf, 0x85, 0x29, 0x26, 0x47, 0x66, 0x53, 0xca, 0x09, 0x3f, 0xf8,
- 0x09, 0x7d, 0x50, 0xca, 0x2d, 0x58, 0x86, 0xa3, 0x74, 0x00, 0x54, 0x46, 0x00, 0xe0, 0x24, 0xcc,
- 0x06, 0x00, 0x6c, 0xe9, 0xb5, 0x12, 0x46, 0xef, 0x56, 0x89, 0x87, 0x05, 0x1d, 0xdc, 0x8e, 0xde,
- 0xd3, 0xfc, 0x99, 0xf4, 0x64, 0x9f, 0x93, 0x47, 0x58, 0x7e, 0x46, 0x00, 0xfd, 0x96, 0xd4, 0xec,
- 0x5e, 0x82, 0xa1, 0xc7, 0x4b, 0x7f, 0x75, 0xae, 0x0a, 0xf3, 0x82, 0x55, 0xa2, 0x9d, 0x85, 0xd3,
- 0x42, 0x02, 0x1d, 0xef, 0x3a, 0xa5, 0x13, 0x1a, 0x82, 0x33, 0xc2, 0x17, 0xf6, 0x82, 0x3b, 0xa5,
- 0x1c, 0xfa, 0xbe, 0xcf, 0xe6, 0xc2, 0xf5, 0x9e, 0xf7, 0xe7, 0xd9, 0x4a, 0xdb, 0x27, 0xc4, 0xd0,
- 0x93, 0x6d, 0xdb, 0xf2, 0xf0, 0xa3, 0x9c, 0x9b, 0x4a, 0x98, 0x90, 0x68, 0x35, 0x9c, 0x85, 0x29,
- 0xcf, 0xe1, 0x5d, 0x57, 0x82, 0x57, 0x5e, 0xb1, 0x0a, 0xa2, 0x62, 0xd5, 0xe1, 0x9c, 0x69, 0xb5,
- 0xbb, 0x07, 0x1d, 0xac, 0xe3, 0xae, 0xe1, 0xcb, 0xd0, 0x2d, 0xbb, 0xcb, 0xb8, 0x87, 0xad, 0x0e,
- 0xb6, 0x3c, 0xca, 0x67, 0x70, 0x0a, 0x55, 0x22, 0xa7, 0xa8, 0x8c, 0xf7, 0x8b, 0xca, 0xf8, 0xe4,
- 0x41, 0x4b, 0xb8, 0x09, 0xeb, 0x7d, 0xf7, 0x00, 0xd0, 0xba, 0x9d, 0x37, 0xf1, 0x15, 0xa6, 0x86,
- 0xd7, 0xf7, 0xad, 0xfa, 0x35, 0xc2, 0x0c, 0x3a, 0x97, 0x19, 0x7d, 0x21, 0x54, 0xbf, 0xe7, 0x09,
- 0xea, 0x77, 0xa7, 0x24, 0x0b, 0xe9, 0xb4, 0xae, 0x37, 0x82, 0xd6, 0xcd, 0xc3, 0x4c, 0xb4, 0x9b,
- 0xac, 0x6a, 0xd7, 0xc3, 0xb5, 0x81, 0x87, 0x71, 0xbd, 0x5a, 0x5d, 0x6e, 0x6e, 0x6f, 0x6d, 0xae,
- 0xea, 0xe5, 0xe5, 0x6a, 0x09, 0x7c, 0xfd, 0xa4, 0x7a, 0x19, 0x3a, 0x06, 0xe7, 0xd1, 0xef, 0x2b,
- 0x50, 0x20, 0x47, 0xa8, 0xd1, 0x37, 0x8f, 0x49, 0x73, 0x5c, 0xc1, 0xe9, 0x29, 0x1c, 0x77, 0xe5,
- 0xaf, 0x84, 0x60, 0xc2, 0x24, 0x5c, 0x1d, 0xe9, 0x4a, 0x88, 0x04, 0x42, 0xd9, 0xcf, 0x84, 0xfc,
- 0x26, 0xd9, 0xdc, 0xb3, 0xaf, 0xfc, 0x67, 0x6e, 0x92, 0x7e, 0xfd, 0x8f, 0xb9, 0x49, 0x0e, 0x60,
- 0x61, 0xe2, 0x4d, 0x72, 0x40, 0xbb, 0x4b, 0x68, 0xa6, 0xe8, 0x23, 0x85, 0x70, 0xfe, 0xf7, 0x71,
- 0xe5, 0x48, 0x7b, 0x5f, 0x65, 0x98, 0x37, 0x2d, 0x0f, 0x3b, 0x96, 0xd1, 0x5d, 0xe9, 0x1a, 0xbb,
- 0x81, 0x7d, 0xda, 0xbf, 0xe1, 0x51, 0xe3, 0xf2, 0xe8, 0xe2, 0x1f, 0xda, 0x4d, 0x00, 0x1e, 0xde,
- 0xef, 0x75, 0x0d, 0x2f, 0x52, 0x3d, 0x2e, 0x85, 0xd7, 0xbe, 0xbc, 0xa8, 0x7d, 0x4f, 0x83, 0x6b,
- 0x28, 0x68, 0xad, 0xab, 0x3d, 0xbc, 0x65, 0x99, 0x2f, 0x3c, 0x20, 0x91, 0x8a, 0xa9, 0x8e, 0x0e,
- 0xfa, 0x24, 0xec, 0x00, 0x15, 0xc5, 0x1d, 0x20, 0xed, 0x3e, 0xb8, 0x9e, 0x84, 0x95, 0xc6, 0xfe,
- 0x2f, 0x17, 0xcc, 0xce, 0x2e, 0xf6, 0x6a, 0x3b, 0x1b, 0xa6, 0xeb, 0x9a, 0xd6, 0x2e, 0x99, 0x8e,
- 0x4f, 0xeb, 0xf1, 0x19, 0xd0, 0x5f, 0x4b, 0x47, 0x41, 0x0a, 0xfa, 0x8c, 0x21, 0x51, 0x90, 0xc2,
- 0x76, 0xaa, 0xf6, 0xb5, 0xd3, 0x70, 0x55, 0x27, 0x2f, 0xb1, 0xaa, 0xc3, 0x63, 0x5a, 0x90, 0x5c,
- 0x1d, 0x78, 0xa3, 0x54, 0x98, 0xa5, 0xa4, 0x6a, 0x64, 0xdf, 0xf7, 0x7d, 0x45, 0x85, 0x05, 0x5a,
- 0xf4, 0x92, 0x6d, 0x5f, 0xda, 0x37, 0x9c, 0x4b, 0xe8, 0xfb, 0x8e, 0xb6, 0x8b, 0x9b, 0xb8, 0x7b,
- 0x15, 0xb7, 0x25, 0xdb, 0xa7, 0xbc, 0xf9, 0x7e, 0xe5, 0x45, 0xbf, 0x29, 0x3d, 0x25, 0x11, 0xe4,
- 0x19, 0x54, 0x6a, 0x32, 0xdb, 0x5b, 0x72, 0x07, 0x17, 0x65, 0x18, 0xcc, 0x1e, 0xf8, 0x5f, 0x0b,
- 0x81, 0x0f, 0xc6, 0x11, 0x7e, 0x67, 0x60, 0x9c, 0xb8, 0xa3, 0x2f, 0x8e, 0x86, 0x5d, 0xc0, 0xd7,
- 0x08, 0xd8, 0x95, 0x40, 0xbd, 0x14, 0x3a, 0x23, 0xf9, 0x8f, 0x7c, 0x85, 0xf2, 0xd9, 0xa1, 0x19,
- 0xc3, 0xf2, 0x44, 0xd0, 0x3c, 0x2d, 0xb2, 0xd0, 0xe8, 0x65, 0x8a, 0xe9, 0xe7, 0xa5, 0x77, 0xdc,
- 0x06, 0x0a, 0x88, 0x72, 0x37, 0x99, 0x56, 0x29, 0xb7, 0x5d, 0x27, 0xcf, 0x66, 0xf6, 0x68, 0xbe,
- 0xb2, 0x00, 0x33, 0x41, 0x34, 0x2a, 0x72, 0x43, 0x5b, 0x88, 0xe1, 0x19, 0x28, 0xba, 0xf6, 0x81,
- 0xd3, 0xc6, 0x6c, 0x0f, 0x94, 0xbd, 0x8d, 0xb0, 0x5f, 0x37, 0xd4, 0x5c, 0x38, 0x64, 0x91, 0xe4,
- 0x53, 0x5b, 0x24, 0xf1, 0xf6, 0x6e, 0x82, 0xfd, 0x80, 0x5e, 0x25, 0x7d, 0xad, 0x86, 0x80, 0x59,
- 0x13, 0x7b, 0x8f, 0x47, 0x23, 0xe0, 0x17, 0xa5, 0x76, 0x83, 0x86, 0xd4, 0x24, 0x9d, 0xca, 0x35,
- 0x46, 0xb0, 0x83, 0x6f, 0x80, 0xeb, 0x82, 0x1c, 0xcc, 0x00, 0x26, 0x06, 0xef, 0x96, 0xbe, 0x5e,
- 0x52, 0xd1, 0x4b, 0xf2, 0x50, 0xa2, 0xac, 0x35, 0x42, 0x5b, 0x10, 0xbd, 0x36, 0x77, 0xdc, 0x06,
- 0x6f, 0xfc, 0x0c, 0xf6, 0x77, 0x14, 0xd9, 0xd0, 0xdd, 0x82, 0xe0, 0xa3, 0xda, 0xc5, 0x68, 0xd2,
- 0x08, 0xcd, 0x2c, 0x41, 0xf9, 0xd0, 0x4f, 0xe7, 0x64, 0x22, 0x81, 0xcb, 0xb1, 0x98, 0x7d, 0xaf,
- 0xf4, 0xd5, 0x7c, 0x10, 0x54, 0x70, 0xc5, 0xb1, 0xf7, 0xb7, 0x9c, 0x2e, 0xfa, 0x5f, 0x52, 0x17,
- 0x2d, 0xc4, 0xcc, 0x2e, 0x94, 0xf8, 0xd9, 0x05, 0x59, 0x91, 0xee, 0x46, 0x5b, 0x61, 0xdd, 0x11,
- 0x86, 0x6f, 0xed, 0x36, 0x58, 0x30, 0x3a, 0x9d, 0x4d, 0x63, 0x17, 0x57, 0xfc, 0x69, 0xbb, 0xe5,
- 0xb1, 0x80, 0x63, 0x7d, 0xa9, 0x89, 0x53, 0x19, 0xb1, 0x8f, 0x9c, 0x3a, 0x64, 0x95, 0xca, 0x2f,
- 0xc3, 0x0a, 0x20, 0x32, 0xf9, 0x4d, 0x64, 0xf8, 0xf3, 0x87, 0x8c, 0xf6, 0x9e, 0x11, 0x85, 0x47,
- 0x64, 0x6f, 0x92, 0xbe, 0x58, 0x12, 0x7c, 0x67, 0xaf, 0x79, 0xbf, 0xa0, 0xc0, 0x94, 0x8f, 0x47,
- 0xb9, 0xd3, 0x41, 0x4f, 0x12, 0xa2, 0x88, 0xc6, 0x7a, 0xc3, 0x7d, 0xa7, 0xb4, 0x1b, 0x62, 0x50,
- 0x43, 0x4a, 0x3f, 0x06, 0x93, 0x48, 0x88, 0x8a, 0x20, 0x44, 0x39, 0x6f, 0xc3, 0xc4, 0x22, 0xb2,
- 0x17, 0xdf, 0xa7, 0x14, 0x98, 0x0f, 0xe6, 0x19, 0x2b, 0xd8, 0x6b, 0xef, 0xa1, 0x7b, 0x64, 0xd7,
- 0xb9, 0x58, 0x4b, 0x0c, 0xb7, 0x84, 0xbb, 0xe8, 0x5f, 0x73, 0x29, 0x55, 0x5e, 0x28, 0x39, 0x66,
- 0x91, 0x30, 0x95, 0x2e, 0x26, 0x11, 0xcc, 0x5e, 0x98, 0x5f, 0x50, 0x00, 0x5a, 0x76, 0x38, 0x59,
- 0x3e, 0x82, 0x24, 0xbf, 0x5f, 0x7a, 0xb7, 0x98, 0x55, 0x3c, 0x2a, 0x36, 0x7d, 0xcf, 0x21, 0xe9,
- 0x4c, 0x35, 0xac, 0xa4, 0x89, 0xb4, 0xf5, 0x99, 0xe5, 0x83, 0x5e, 0xd7, 0x6c, 0x1b, 0x5e, 0xbf,
- 0x07, 0x60, 0xbc, 0x78, 0xc9, 0xf5, 0xc6, 0xa9, 0x8c, 0xc6, 0xb0, 0x8c, 0x18, 0x59, 0xd2, 0x08,
- 0x3e, 0x4a, 0x10, 0xc1, 0x47, 0xd2, 0xab, 0x67, 0x08, 0xf1, 0x09, 0xa8, 0xa7, 0x0a, 0x27, 0x1b,
- 0x3d, 0x6c, 0x2d, 0x39, 0xd8, 0xe8, 0xb4, 0x9d, 0x83, 0xfd, 0x8b, 0x2e, 0xef, 0xbe, 0x9a, 0xac,
- 0xa3, 0xdc, 0xca, 0xb5, 0x22, 0xac, 0x5c, 0xa3, 0xef, 0x50, 0x65, 0xa3, 0xa7, 0x71, 0xfb, 0x2b,
- 0x1c, 0x0f, 0x23, 0x0c, 0x75, 0xa9, 0x9c, 0xae, 0xfa, 0x16, 0xa9, 0xf3, 0x69, 0x16, 0xa9, 0xdf,
- 0x2e, 0x15, 0x8b, 0x4d, 0xaa, 0x5e, 0x13, 0xf1, 0x9d, 0x5b, 0x68, 0x62, 0x2f, 0x06, 0xde, 0x5b,
- 0x61, 0xfe, 0x62, 0xf4, 0x25, 0x84, 0x58, 0x4c, 0x1c, 0xe0, 0xd1, 0xfa, 0x8e, 0xb4, 0x2b, 0x34,
- 0x22, 0x0b, 0x31, 0xe8, 0x86, 0x08, 0x2a, 0x32, 0x6e, 0x73, 0xa9, 0x96, 0x5b, 0x12, 0xcb, 0xcf,
- 0x1e, 0x85, 0x8f, 0x29, 0x30, 0x4b, 0x2e, 0x6d, 0x5e, 0xba, 0x4a, 0x0e, 0x72, 0x4a, 0x1a, 0x25,
- 0xaf, 0xe4, 0xc5, 0xac, 0x41, 0xbe, 0x6b, 0x5a, 0x97, 0x02, 0x7f, 0x47, 0xff, 0x39, 0xba, 0x02,
- 0x54, 0x19, 0x70, 0x05, 0x68, 0xb8, 0x4d, 0x12, 0x96, 0x7b, 0xa4, 0x3b, 0xe9, 0x87, 0x92, 0xcb,
- 0x5e, 0x8c, 0x7f, 0x99, 0x87, 0x62, 0x13, 0x1b, 0x4e, 0x7b, 0x0f, 0xbd, 0x5f, 0x19, 0x38, 0x95,
- 0x98, 0x16, 0xa7, 0x12, 0x2b, 0x30, 0xb5, 0x63, 0x76, 0x3d, 0xec, 0x50, 0x1f, 0x70, 0xbe, 0x6b,
- 0xa7, 0x4d, 0x7c, 0xa9, 0x6b, 0xb7, 0x2f, 0x2d, 0x32, 0xd3, 0x7e, 0x31, 0x88, 0xde, 0xbc, 0xb8,
- 0x42, 0x7e, 0xd2, 0x83, 0x9f, 0x7d, 0x83, 0xd0, 0xb5, 0x1d, 0x2f, 0xee, 0x36, 0xa0, 0x18, 0x2a,
- 0x4d, 0xdb, 0xf1, 0x74, 0xfa, 0xa3, 0x0f, 0xf3, 0xce, 0x41, 0xb7, 0xdb, 0xc2, 0x8f, 0x7a, 0xc1,
- 0xb4, 0x2e, 0x78, 0xf7, 0x8d, 0x45, 0x7b, 0x67, 0xc7, 0xc5, 0x74, 0x51, 0xa1, 0xa0, 0xb3, 0x37,
- 0xed, 0x34, 0x14, 0xba, 0xe6, 0xbe, 0x49, 0x27, 0x22, 0x05, 0x9d, 0xbe, 0x68, 0x77, 0x40, 0x29,
- 0x9a, 0x03, 0x51, 0x46, 0xcf, 0x16, 0x49, 0xd3, 0x3c, 0x94, 0xee, 0xeb, 0xcc, 0x25, 0x7c, 0xd5,
- 0x3d, 0x3b, 0x45, 0xbe, 0x93, 0x67, 0xf1, 0xc0, 0x8d, 0xcc, 0x86, 0x09, 0x95, 0x78, 0xfc, 0x0c,
- 0xd7, 0xc1, 0x6d, 0xdb, 0xe9, 0x04, 0xb2, 0x89, 0x9f, 0x60, 0xb0, 0x7c, 0xe9, 0xb6, 0x39, 0x06,
- 0x16, 0x9e, 0xbd, 0xa6, 0xbd, 0xa7, 0xe8, 0x77, 0x9b, 0x7e, 0xd1, 0x17, 0x4c, 0x6f, 0x6f, 0x03,
- 0x7b, 0x06, 0xfa, 0x4b, 0x75, 0xa0, 0xc6, 0xcd, 0xfe, 0xff, 0x1a, 0x37, 0x44, 0xe3, 0x68, 0xcc,
- 0x2f, 0xef, 0xc0, 0xb1, 0x7c, 0x39, 0x32, 0x3f, 0x5a, 0x2e, 0x45, 0xbb, 0x0f, 0xae, 0x8f, 0xde,
- 0x82, 0xa5, 0xd4, 0x65, 0xce, 0xb5, 0x76, 0x5a, 0x8f, 0xcf, 0xa0, 0x6d, 0xc2, 0x13, 0xe9, 0xc7,
- 0xb5, 0xd6, 0xc6, 0xfa, 0x9a, 0xb9, 0xbb, 0xd7, 0x35, 0x77, 0xf7, 0x3c, 0xb7, 0x66, 0xb9, 0x1e,
- 0x36, 0x3a, 0x8d, 0x1d, 0x9d, 0xde, 0xe3, 0x05, 0x84, 0x8e, 0x4c, 0x56, 0xd1, 0x47, 0x5c, 0x6e,
- 0x74, 0xe3, 0x35, 0x25, 0xa6, 0xa5, 0x3c, 0xcb, 0x6f, 0x29, 0xee, 0x41, 0x37, 0xc4, 0xf4, 0xc6,
- 0x3e, 0x4c, 0x23, 0x55, 0x3f, 0xe8, 0x92, 0xe6, 0x42, 0x32, 0xa7, 0x1d, 0xe7, 0x12, 0x38, 0xc9,
- 0xbe, 0xd9, 0xfc, 0xaf, 0x22, 0x14, 0x56, 0x1d, 0xa3, 0xb7, 0x87, 0x5e, 0xc2, 0xf5, 0xcf, 0xe3,
- 0x6a, 0x13, 0xa1, 0x76, 0x2a, 0xc3, 0xb4, 0x53, 0x1d, 0xa2, 0x9d, 0x79, 0x4e, 0x3b, 0xe3, 0x17,
- 0x9d, 0xcf, 0xc1, 0x5c, 0xdb, 0xee, 0x76, 0x71, 0xdb, 0x97, 0x47, 0xad, 0x43, 0x56, 0x7b, 0x66,
- 0x74, 0x21, 0x8d, 0x44, 0xb8, 0xc7, 0x5e, 0x93, 0xae, 0xb1, 0x53, 0xa5, 0x8f, 0x12, 0xd0, 0x6b,
- 0x15, 0xc8, 0x57, 0x3b, 0xbb, 0x58, 0x58, 0x87, 0xcf, 0x71, 0xeb, 0xf0, 0x67, 0xa0, 0xe8, 0x19,
- 0xce, 0x2e, 0xf6, 0x82, 0x75, 0x02, 0xfa, 0x16, 0x06, 0xde, 0x57, 0xb9, 0xc0, 0xfb, 0xdf, 0x08,
- 0x79, 0x5f, 0x66, 0xcc, 0x2d, 0xfe, 0x89, 0x83, 0xe0, 0x27, 0xb2, 0x5f, 0xf4, 0x4b, 0x5c, 0xf4,
- 0x6b, 0xad, 0x93, 0x1f, 0xfa, 0xb1, 0x2e, 0x1c, 0xc2, 0x9a, 0x5c, 0x49, 0xdc, 0xb6, 0xad, 0xda,
- 0xbe, 0xb1, 0x8b, 0x59, 0x35, 0xa3, 0x84, 0xe0, 0x6b, 0x75, 0xdf, 0x7e, 0xc4, 0x64, 0x8b, 0x5a,
- 0x51, 0x82, 0x5f, 0x85, 0x3d, 0xb3, 0xd3, 0xc1, 0x16, 0x6b, 0xd9, 0xec, 0xed, 0xdc, 0x4d, 0x90,
- 0xf7, 0x79, 0xf0, 0xf5, 0xc7, 0x37, 0x16, 0x4a, 0x27, 0xb4, 0x39, 0xbf, 0x59, 0xd1, 0xc6, 0x5b,
- 0xca, 0x89, 0x6b, 0xae, 0x32, 0x5e, 0x43, 0xb4, 0x72, 0x83, 0x1b, 0xd7, 0x53, 0xa1, 0x60, 0xd9,
- 0x1d, 0x3c, 0x74, 0x10, 0xa2, 0xb9, 0xb4, 0x67, 0x42, 0x01, 0x77, 0xfc, 0x5e, 0x41, 0x25, 0xd9,
- 0x6f, 0x4a, 0x96, 0xa5, 0x4e, 0x33, 0xa7, 0x73, 0x4d, 0x1a, 0xc4, 0x6d, 0xf6, 0x0d, 0xf0, 0xbb,
- 0xa7, 0xe0, 0x24, 0xed, 0x03, 0x9a, 0x07, 0x17, 0x7d, 0x52, 0x17, 0x31, 0x7a, 0xcb, 0xe0, 0x81,
- 0xeb, 0xa4, 0xa8, 0xec, 0xa7, 0xa1, 0xe0, 0x1e, 0x5c, 0x0c, 0x8d, 0x50, 0xfa, 0xc2, 0x37, 0x5d,
- 0x65, 0x2c, 0xc3, 0x99, 0x3a, 0xea, 0x70, 0x26, 0x0c, 0x4d, 0x6a, 0xd0, 0xf8, 0xa3, 0x81, 0x8c,
- 0x1e, 0xe8, 0x08, 0x06, 0xb2, 0x41, 0xc3, 0xd0, 0x59, 0x98, 0x32, 0x76, 0x3c, 0xec, 0x44, 0x66,
- 0x22, 0x7b, 0xf5, 0x87, 0xca, 0x8b, 0x78, 0xc7, 0x76, 0x7c, 0xb1, 0xd0, 0x7b, 0x17, 0xc2, 0x77,
- 0xae, 0xe5, 0x82, 0xb0, 0x83, 0x76, 0x27, 0x9c, 0xb2, 0xec, 0x65, 0xdc, 0x63, 0x72, 0xa6, 0x28,
- 0xce, 0x93, 0x16, 0x70, 0xf8, 0xc3, 0xa1, 0xae, 0x64, 0xe1, 0x70, 0x57, 0x82, 0x3e, 0x9d, 0x76,
- 0xce, 0xdc, 0x07, 0xf4, 0xd8, 0x2c, 0x34, 0xed, 0x39, 0x30, 0xd7, 0x61, 0x1e, 0x62, 0x6d, 0x33,
- 0x6c, 0x25, 0xb1, 0xff, 0x09, 0x99, 0x23, 0x45, 0xca, 0xf3, 0x8a, 0xb4, 0x0a, 0xd3, 0xe4, 0xe8,
- 0xb5, 0xaf, 0x49, 0x85, 0x3e, 0x8f, 0x7c, 0x32, 0xad, 0x0b, 0x2b, 0xc5, 0x89, 0x6d, 0xb1, 0xc2,
- 0x7e, 0xd1, 0xc3, 0x9f, 0xd3, 0xcd, 0xbe, 0x93, 0x25, 0x94, 0x7d, 0x73, 0xfc, 0x99, 0x22, 0x5c,
- 0x5f, 0x71, 0x6c, 0xd7, 0x25, 0x47, 0x70, 0xfa, 0x1b, 0xe6, 0x5b, 0x15, 0xe1, 0x0a, 0x9e, 0xc7,
- 0x75, 0xf3, 0x1b, 0xd4, 0xa0, 0x26, 0xd7, 0x34, 0xfe, 0x4c, 0x3a, 0x68, 0x4d, 0xb8, 0xff, 0x10,
- 0x23, 0xf4, 0xff, 0x1c, 0x8d, 0xe4, 0x3d, 0x39, 0x99, 0x38, 0x3a, 0x29, 0x65, 0x35, 0x81, 0x3b,
- 0x97, 0x14, 0xb8, 0xa1, 0x9f, 0x9b, 0x2d, 0xcb, 0x0d, 0x1b, 0xcc, 0xcd, 0x43, 0xda, 0x8b, 0x18,
- 0x77, 0x25, 0xf1, 0xc6, 0xdd, 0x98, 0xba, 0x73, 0xa5, 0xc5, 0x2c, 0x96, 0x44, 0x07, 0x7a, 0x92,
- 0x6e, 0xdc, 0x4d, 0x4d, 0x3e, 0x7b, 0xe1, 0xfe, 0x4e, 0x1e, 0x4e, 0xae, 0x3a, 0xf6, 0x41, 0xcf,
- 0x8d, 0x7a, 0xa0, 0x3f, 0x1e, 0xbc, 0x21, 0x5b, 0x94, 0x31, 0x0d, 0x6e, 0x81, 0x59, 0x87, 0x59,
- 0x73, 0xd1, 0xf6, 0x2c, 0x9f, 0xc4, 0xf7, 0x5e, 0xea, 0x51, 0x7a, 0xaf, 0xa8, 0x9f, 0xc9, 0x0b,
- 0xfd, 0x4c, 0x7f, 0xcf, 0x51, 0x18, 0xd0, 0x73, 0xfc, 0x91, 0x92, 0x72, 0x50, 0xed, 0x13, 0x51,
- 0x4c, 0x7f, 0x51, 0x81, 0xe2, 0x2e, 0xc9, 0xc8, 0xba, 0x8b, 0xa7, 0xc8, 0xd5, 0x8c, 0x10, 0xd7,
- 0xd9, 0xaf, 0x91, 0x5c, 0x55, 0x5e, 0x87, 0x53, 0x0d, 0x70, 0xc9, 0xdc, 0x66, 0xaf, 0x54, 0x6f,
- 0xca, 0xc3, 0x5c, 0x58, 0x7a, 0xad, 0xe3, 0x0a, 0xd1, 0x5d, 0x39, 0x8d, 0x9a, 0x97, 0xd1, 0xa8,
- 0x43, 0xeb, 0xcc, 0xe1, 0xa8, 0xa3, 0x72, 0xa3, 0xce, 0xc0, 0xd1, 0x65, 0x2e, 0x66, 0x74, 0x41,
- 0x2f, 0x56, 0x65, 0x2f, 0xb1, 0x13, 0xbb, 0x56, 0x52, 0x9b, 0xc7, 0xf3, 0x60, 0x21, 0x79, 0x95,
- 0xde, 0xf0, 0x5a, 0x65, 0xaf, 0x24, 0x1f, 0x56, 0xe0, 0xd4, 0xe1, 0xce, 0xfc, 0xeb, 0x44, 0x2f,
- 0x35, 0xbf, 0x4e, 0x6e, 0xe8, 0xa5, 0x46, 0xde, 0xc4, 0x4d, 0xba, 0xc4, 0x20, 0x28, 0x82, 0xbd,
- 0x37, 0xbc, 0x13, 0x97, 0x0b, 0x73, 0x22, 0x49, 0x34, 0x7b, 0x01, 0xfe, 0x80, 0x0a, 0x33, 0x4d,
- 0xec, 0xad, 0x1b, 0x57, 0xed, 0x03, 0x0f, 0x19, 0xb2, 0xdb, 0x73, 0xcf, 0x86, 0x62, 0x97, 0xfc,
- 0x42, 0x3a, 0x18, 0x3e, 0xe8, 0x28, 0xbf, 0xbf, 0x45, 0x7c, 0x83, 0x28, 0x69, 0x9d, 0xe5, 0x17,
- 0xa3, 0xcf, 0xc8, 0xec, 0x8e, 0x86, 0xdc, 0x8d, 0x65, 0x6b, 0x27, 0xd5, 0xde, 0x69, 0x5c, 0xd1,
- 0xd9, 0xc3, 0xf2, 0x1d, 0x2a, 0xcc, 0x37, 0xb1, 0x57, 0x73, 0x57, 0x8c, 0xcb, 0xb6, 0x63, 0x7a,
- 0x18, 0xad, 0xca, 0x42, 0x73, 0x13, 0x80, 0x19, 0xfe, 0xc6, 0x62, 0x62, 0x71, 0x29, 0xe8, 0xa7,
- 0xd3, 0x3a, 0x0a, 0x09, 0x7c, 0x8c, 0x05, 0x84, 0x54, 0x3e, 0x16, 0x49, 0xc5, 0x4f, 0xe0, 0x1a,
- 0x6e, 0x85, 0x01, 0x51, 0x76, 0xda, 0x7b, 0xe6, 0x65, 0xdc, 0x49, 0x09, 0x44, 0xf0, 0x5b, 0x04,
- 0x44, 0x48, 0x28, 0xb5, 0xfb, 0x8a, 0xc0, 0xc7, 0x38, 0xdc, 0x57, 0x92, 0x08, 0x4e, 0x24, 0xac,
- 0x95, 0xdf, 0xf5, 0xb0, 0xf5, 0xcc, 0x07, 0x64, 0xc5, 0x1a, 0x99, 0x6c, 0x0a, 0x6f, 0xb2, 0x8d,
- 0xd4, 0xb1, 0xd0, 0xb2, 0x87, 0xe9, 0x74, 0x3e, 0x8b, 0x8e, 0x65, 0x60, 0xd1, 0xd9, 0x0b, 0xfd,
- 0x7d, 0x2a, 0x5c, 0x1b, 0xc6, 0x7b, 0x69, 0x62, 0x6f, 0xd9, 0x70, 0xf7, 0x2e, 0xda, 0x86, 0xd3,
- 0x41, 0x95, 0x31, 0x1c, 0x38, 0x44, 0x7f, 0xc0, 0x83, 0x50, 0x17, 0x41, 0x18, 0xe8, 0x4a, 0x3a,
- 0x90, 0x97, 0x71, 0x74, 0x32, 0x89, 0xde, 0xae, 0x3f, 0x17, 0x82, 0xf5, 0x7c, 0x01, 0xac, 0xfb,
- 0x47, 0x65, 0x31, 0x7b, 0xe0, 0x7e, 0x98, 0x8e, 0x08, 0x9c, 0xd7, 0xf3, 0xc3, 0xb2, 0x80, 0xc5,
- 0x78, 0xbd, 0xaa, 0xb1, 0x5e, 0xaf, 0x23, 0x8d, 0x11, 0x43, 0x3d, 0x96, 0xb3, 0x1d, 0x23, 0x8e,
- 0xd1, 0x1b, 0xf9, 0x31, 0x15, 0x4a, 0x24, 0xe0, 0x17, 0xe7, 0x11, 0xce, 0xc7, 0xcf, 0x4e, 0x46,
- 0xe7, 0x90, 0xf7, 0xf9, 0x54, 0x5a, 0xef, 0x73, 0xf4, 0xae, 0xb4, 0x3e, 0xe6, 0xfd, 0xdc, 0x8e,
- 0x05, 0xb1, 0x54, 0x2e, 0xe4, 0x43, 0x38, 0xc8, 0x1e, 0xb4, 0xef, 0x51, 0x01, 0xfc, 0x06, 0xcd,
- 0xce, 0x46, 0xbc, 0x40, 0x16, 0xae, 0xbb, 0x78, 0xbf, 0x7b, 0x1f, 0xa8, 0x6b, 0xfb, 0x80, 0xa2,
- 0x14, 0xa3, 0x53, 0x17, 0x6f, 0x49, 0xeb, 0x5b, 0x19, 0x71, 0x35, 0x16, 0x58, 0x52, 0x79, 0x5b,
- 0xc6, 0x96, 0x9d, 0x3d, 0x20, 0xff, 0x5d, 0x81, 0x42, 0xcb, 0x6e, 0x62, 0xef, 0xe8, 0xa6, 0x40,
- 0xea, 0xa8, 0x01, 0xa4, 0xdc, 0x71, 0x44, 0x0d, 0x18, 0x44, 0x28, 0x7b, 0xd1, 0xbd, 0x57, 0x81,
- 0xb9, 0x96, 0x5d, 0x09, 0x17, 0xa7, 0xe4, 0x7d, 0x55, 0xe5, 0x2f, 0xe2, 0x0f, 0x2b, 0x18, 0x15,
- 0x73, 0xa4, 0x8b, 0xf8, 0x87, 0xd3, 0xcb, 0x5e, 0x6e, 0xf7, 0xc0, 0xc9, 0x2d, 0xab, 0x63, 0xeb,
- 0xb8, 0x63, 0xb3, 0x95, 0x6e, 0x4d, 0x83, 0xfc, 0x81, 0xd5, 0xb1, 0x09, 0xcb, 0x05, 0x9d, 0x3c,
- 0xfb, 0x69, 0x0e, 0xee, 0xd8, 0xcc, 0x37, 0x80, 0x3c, 0xa3, 0x3f, 0x53, 0x21, 0xef, 0xff, 0x2b,
- 0x2f, 0xea, 0xc7, 0xd4, 0x94, 0x71, 0x10, 0x7c, 0xf2, 0x63, 0xb1, 0x84, 0x1e, 0xe0, 0xd6, 0xfe,
- 0xa9, 0x07, 0xeb, 0x13, 0xe3, 0xca, 0xe3, 0x44, 0x11, 0xad, 0xf9, 0x6b, 0x67, 0x61, 0xea, 0x62,
- 0xd7, 0x6e, 0x5f, 0x8a, 0x8e, 0xeb, 0xb3, 0x57, 0xed, 0x0e, 0x28, 0x38, 0x86, 0xb5, 0x8b, 0xd9,
- 0x9e, 0xc2, 0xe9, 0xbe, 0xbe, 0x90, 0x78, 0xbd, 0xe8, 0x34, 0x0b, 0x7a, 0x57, 0x9a, 0x08, 0x0c,
- 0x03, 0x2a, 0x9f, 0x4e, 0x1f, 0x96, 0x47, 0x38, 0x79, 0x56, 0x82, 0xb9, 0x4a, 0xb9, 0x4e, 0xef,
- 0x31, 0x6c, 0x9c, 0xaf, 0x96, 0x54, 0x02, 0xb3, 0x2f, 0x93, 0x0c, 0x61, 0xf6, 0xc9, 0xff, 0xa7,
- 0x85, 0x79, 0x40, 0xe5, 0x8f, 0x03, 0xe6, 0x4f, 0x29, 0x30, 0xbf, 0x6e, 0xba, 0x5e, 0x9c, 0xb7,
- 0x7f, 0x42, 0xbc, 0xdf, 0x57, 0xa5, 0x35, 0x95, 0x85, 0x72, 0xa4, 0x03, 0xfd, 0xa6, 0x32, 0x87,
- 0x93, 0x8a, 0x98, 0xcc, 0xb1, 0x14, 0xc2, 0x01, 0xbd, 0x78, 0x5e, 0x5a, 0x92, 0xa9, 0x0d, 0xa5,
- 0xa8, 0x90, 0xc9, 0x1b, 0x4a, 0xb1, 0x65, 0x67, 0x2f, 0xdf, 0x3f, 0x53, 0xe0, 0x94, 0x5f, 0x7c,
- 0xd2, 0xb2, 0x54, 0xbc, 0x98, 0x87, 0x2e, 0x4b, 0xa5, 0x5e, 0x19, 0x3f, 0xc4, 0xcb, 0x38, 0x56,
- 0xc6, 0x87, 0x11, 0x9d, 0xb0, 0x98, 0x63, 0x96, 0x61, 0x87, 0x89, 0x39, 0x61, 0x19, 0x76, 0x74,
- 0x31, 0x27, 0x2f, 0xc5, 0x8e, 0x28, 0xe6, 0x63, 0x5b, 0x60, 0xfd, 0x09, 0x35, 0x14, 0x73, 0xec,
- 0xda, 0x46, 0x82, 0x98, 0x53, 0x9f, 0xe8, 0x15, 0x6f, 0xe4, 0x4f, 0x21, 0xf8, 0x31, 0xaf, 0x6f,
- 0x8c, 0x02, 0xd3, 0x31, 0xae, 0x71, 0xfc, 0x88, 0x0a, 0x0b, 0x8c, 0x8b, 0xc1, 0x53, 0xe6, 0x04,
- 0x8c, 0x52, 0x4f, 0x99, 0x53, 0x9f, 0x01, 0x12, 0x39, 0x9b, 0xfc, 0x19, 0xa0, 0xc4, 0xf2, 0xb3,
- 0x07, 0xe7, 0x2f, 0xf2, 0x70, 0xc6, 0x67, 0x61, 0xc3, 0xee, 0x98, 0x3b, 0x57, 0x29, 0x17, 0xe7,
- 0x8d, 0xee, 0x01, 0x76, 0xd1, 0x07, 0x14, 0x59, 0x94, 0xfe, 0x37, 0x00, 0xbb, 0x87, 0x1d, 0x1a,
- 0xc7, 0x8d, 0x01, 0x75, 0x5f, 0x5c, 0x65, 0x0f, 0x97, 0x14, 0x5e, 0x7f, 0xd3, 0x08, 0x88, 0xe8,
- 0x1c, 0x3d, 0xdf, 0x2a, 0x9c, 0x09, 0xbf, 0xf4, 0x3b, 0x78, 0xe4, 0x0e, 0x3b, 0x78, 0xdc, 0x0e,
- 0xaa, 0xd1, 0xe9, 0x84, 0x50, 0xf5, 0x6f, 0x66, 0x93, 0x32, 0x75, 0x3f, 0x8b, 0x9f, 0xd3, 0xc5,
- 0xd1, 0xd1, 0xbc, 0x98, 0x9c, 0x2e, 0xf6, 0xb4, 0x45, 0x28, 0xd2, 0xeb, 0xc0, 0xc3, 0x15, 0xfd,
- 0xc1, 0x99, 0x59, 0x2e, 0xd1, 0xb4, 0x6b, 0x88, 0x6a, 0x78, 0x4f, 0x2a, 0xc9, 0x0c, 0xea, 0xa7,
- 0x23, 0x3b, 0x59, 0x17, 0x14, 0xec, 0xb9, 0x23, 0x53, 0x9e, 0xcc, 0x6e, 0x58, 0xb9, 0xd7, 0xeb,
- 0x5e, 0x6d, 0xb1, 0xc0, 0x03, 0xa9, 0x76, 0xc3, 0xb8, 0xf8, 0x05, 0xca, 0xa1, 0xf8, 0x05, 0xa9,
- 0x77, 0xc3, 0x04, 0x3e, 0xc6, 0xb1, 0x1b, 0x96, 0x44, 0x70, 0x22, 0xf7, 0xf0, 0x10, 0xab, 0x99,
- 0xdd, 0x46, 0xf0, 0x0f, 0x83, 0x3d, 0xab, 0x41, 0x74, 0x76, 0x19, 0x74, 0x51, 0x41, 0xe2, 0x2d,
- 0x2c, 0xda, 0x33, 0xa1, 0xb8, 0x63, 0x3b, 0xfb, 0x46, 0xb0, 0x71, 0xdf, 0x7f, 0x52, 0x84, 0xdd,
- 0x00, 0xb0, 0x42, 0xf2, 0xe8, 0x2c, 0xaf, 0x3f, 0x1f, 0x79, 0x91, 0xd9, 0x63, 0x41, 0x1f, 0xfd,
- 0x47, 0xed, 0x56, 0x98, 0x67, 0xb1, 0x1f, 0xeb, 0xd8, 0xf5, 0x70, 0x87, 0x45, 0xb4, 0x10, 0x13,
- 0xb5, 0x73, 0x30, 0xc7, 0x12, 0x56, 0xcc, 0x2e, 0x76, 0x59, 0x50, 0x0b, 0x21, 0x4d, 0x3b, 0x03,
- 0x45, 0xd3, 0x7d, 0xd0, 0xb5, 0x2d, 0x16, 0x90, 0x8f, 0xbd, 0x69, 0xb7, 0xc3, 0x49, 0x96, 0x2f,
- 0x34, 0x56, 0xe9, 0x81, 0x9d, 0xfe, 0x64, 0x5f, 0xb5, 0x2c, 0x7b, 0xd3, 0xb1, 0x77, 0x1d, 0xec,
- 0xba, 0xe4, 0xd4, 0xd4, 0xb4, 0xce, 0xa5, 0x68, 0x0f, 0xc3, 0xa9, 0xae, 0x69, 0x5d, 0x72, 0x49,
- 0x8c, 0xe0, 0x15, 0xe6, 0x36, 0x36, 0x37, 0x20, 0x76, 0x37, 0xd7, 0xd8, 0x98, 0x1c, 0xf8, 0x5f,
- 0xf4, 0xc3, 0x54, 0xb4, 0x3b, 0xa0, 0xc4, 0xb8, 0x59, 0x32, 0xda, 0x97, 0xc8, 0x77, 0xe6, 0x8e,
- 0x7a, 0x28, 0x9d, 0x13, 0x06, 0x0d, 0xa3, 0xbf, 0x20, 0x08, 0x83, 0x46, 0xd2, 0x7f, 0x4d, 0x0e,
- 0xe6, 0x84, 0x02, 0x0c, 0xd0, 0x82, 0x6e, 0xd1, 0xbd, 0xb0, 0x67, 0x7a, 0xd8, 0x67, 0x8e, 0x9d,
- 0x75, 0x79, 0xfa, 0x10, 0xe6, 0xf5, 0x43, 0x3f, 0xea, 0x03, 0x88, 0xf9, 0x7c, 0xd1, 0x0e, 0x8f,
- 0x78, 0x96, 0xb9, 0xcc, 0x56, 0x15, 0xd2, 0xd0, 0x8b, 0x40, 0x3b, 0x4c, 0x8d, 0xf3, 0x02, 0xc9,
- 0xa5, 0xf3, 0x02, 0xf1, 0xe5, 0x66, 0x74, 0xbb, 0xf6, 0x15, 0xdc, 0x09, 0xc9, 0x32, 0x5d, 0x3d,
- 0x94, 0x8e, 0x3e, 0x33, 0xca, 0xbc, 0x30, 0xf5, 0xc5, 0x1a, 0x7e, 0x23, 0x3b, 0x68, 0xb7, 0x31,
- 0xee, 0xb0, 0x83, 0x6b, 0xc1, 0x6b, 0xca, 0x2b, 0x37, 0x52, 0xcf, 0x22, 0x8f, 0xe9, 0xce, 0x8d,
- 0x5f, 0xba, 0x16, 0x8a, 0xf4, 0xfe, 0x3a, 0xf4, 0x9a, 0x85, 0x81, 0x7d, 0xcd, 0x82, 0xd8, 0xd7,
- 0x6c, 0xc1, 0x9c, 0x65, 0xfb, 0xc5, 0x6d, 0x1a, 0x8e, 0xb1, 0xef, 0x26, 0x2d, 0x12, 0x53, 0xba,
- 0xa1, 0x45, 0x50, 0xe7, 0x7e, 0x5b, 0x3b, 0xa1, 0x0b, 0x64, 0xb4, 0xff, 0x1d, 0x4e, 0x5e, 0x64,
- 0x01, 0x1e, 0x5c, 0x46, 0x59, 0x89, 0x77, 0xa1, 0xec, 0xa3, 0xbc, 0x24, 0xfe, 0xb9, 0x76, 0x42,
- 0xef, 0x27, 0xa6, 0xfd, 0x17, 0x58, 0xf0, 0x5f, 0x3b, 0xf6, 0x95, 0x80, 0x71, 0x35, 0xde, 0x8e,
- 0xec, 0x23, 0xbf, 0x21, 0xfc, 0xb8, 0x76, 0x42, 0xef, 0x23, 0xa5, 0x35, 0x00, 0xf6, 0xbc, 0xfd,
- 0x2e, 0x23, 0x9c, 0x8f, 0x57, 0xc9, 0x3e, 0xc2, 0x6b, 0xe1, 0x4f, 0x6b, 0x27, 0x74, 0x8e, 0x84,
- 0xb6, 0x0e, 0x33, 0xde, 0xa3, 0x1e, 0xa3, 0x57, 0x88, 0xf7, 0x5d, 0xe8, 0xa3, 0xd7, 0x0a, 0xfe,
- 0x59, 0x3b, 0xa1, 0x47, 0x04, 0xb4, 0x1a, 0x4c, 0xf7, 0x2e, 0x32, 0x62, 0xc5, 0xf8, 0xfe, 0xae,
- 0x8f, 0xd8, 0xe6, 0xc5, 0x90, 0x56, 0xf8, 0xbb, 0xcf, 0x58, 0xdb, 0xbd, 0xcc, 0x68, 0x4d, 0x49,
- 0x33, 0x56, 0x09, 0xfe, 0xf1, 0x19, 0x0b, 0x09, 0x68, 0x35, 0x98, 0x71, 0x2d, 0xa3, 0xe7, 0xee,
- 0xd9, 0x9e, 0x7b, 0x76, 0xba, 0xcf, 0xcd, 0x35, 0x9e, 0x5a, 0x93, 0xfd, 0xa3, 0x47, 0x7f, 0x6b,
- 0xcf, 0x84, 0x6b, 0x0f, 0x7a, 0x1d, 0xc3, 0xc3, 0xd5, 0x47, 0x4d, 0xd7, 0x33, 0xad, 0xdd, 0x20,
- 0x42, 0x31, 0x1d, 0x2c, 0x06, 0x7f, 0xd4, 0x16, 0xd9, 0x81, 0x37, 0x20, 0x6d, 0x13, 0xf5, 0xef,
- 0xb5, 0xd2, 0x62, 0xb9, 0x73, 0x6e, 0xcf, 0x81, 0xbc, 0xff, 0x89, 0x0c, 0x2e, 0x0b, 0x83, 0xd7,
- 0x71, 0xfb, 0x75, 0x87, 0x34, 0x60, 0xff, 0xa7, 0xbe, 0xf1, 0x69, 0xee, 0xd0, 0xf8, 0x74, 0x0b,
- 0xcc, 0x9a, 0xee, 0x86, 0xb9, 0x4b, 0x8d, 0x63, 0x36, 0x7e, 0xf0, 0x49, 0x74, 0x31, 0xa1, 0x8e,
- 0xaf, 0xd0, 0x81, 0xe3, 0x64, 0xb0, 0x98, 0x10, 0xa4, 0xa0, 0xdb, 0x60, 0x8e, 0x6f, 0x64, 0xf4,
- 0x12, 0x5c, 0x33, 0x32, 0xad, 0xd9, 0x1b, 0xba, 0x15, 0x16, 0x44, 0x9d, 0xe6, 0x2c, 0x08, 0x35,
- 0xe8, 0x0a, 0xd1, 0x13, 0xe1, 0x64, 0x5f, 0xc3, 0x0a, 0x42, 0xc6, 0xe4, 0xa2, 0x90, 0x31, 0xb7,
- 0x00, 0x44, 0x5a, 0x3c, 0x90, 0xcc, 0xcd, 0x30, 0x13, 0xea, 0xe5, 0xc0, 0x0c, 0x5f, 0xca, 0xc1,
- 0x74, 0xa0, 0x6c, 0x83, 0x32, 0xf8, 0x23, 0x93, 0xc5, 0xed, 0x0f, 0x05, 0x23, 0x13, 0x9f, 0xe6,
- 0x9b, 0x09, 0x91, 0x57, 0x76, 0xcb, 0xf4, 0xba, 0xc1, 0xc9, 0xc6, 0xfe, 0x64, 0x6d, 0x13, 0xc0,
- 0x24, 0x18, 0xb5, 0xa2, 0xa3, 0x8e, 0x4f, 0x4b, 0xd1, 0x1e, 0xa8, 0x3e, 0x70, 0x34, 0xce, 0x7d,
- 0x1d, 0x3b, 0x87, 0x38, 0x03, 0x05, 0x1a, 0xa6, 0xff, 0x84, 0xb6, 0x00, 0x50, 0x7d, 0xc1, 0x66,
- 0x55, 0xaf, 0x55, 0xeb, 0x95, 0x6a, 0x29, 0x87, 0x7e, 0x54, 0x81, 0x99, 0xb0, 0x11, 0x0c, 0xac,
- 0x64, 0x95, 0xa9, 0xd6, 0xd0, 0x7b, 0x46, 0x0f, 0x37, 0x2a, 0x5e, 0xc9, 0x9e, 0x0d, 0xd7, 0x1d,
- 0xb8, 0x78, 0xc5, 0x74, 0x5c, 0x4f, 0xb7, 0xaf, 0xac, 0xd8, 0x4e, 0x34, 0xb0, 0xd2, 0x00, 0xb7,
- 0x71, 0x9f, 0x7d, 0x83, 0xb1, 0x83, 0xc9, 0x99, 0x37, 0xec, 0xb0, 0x85, 0xff, 0x28, 0xc1, 0xa7,
- 0xeb, 0x39, 0x86, 0xe5, 0xf6, 0x6c, 0x17, 0xeb, 0xf6, 0x15, 0xb7, 0x6c, 0x75, 0x2a, 0x76, 0xf7,
- 0x60, 0xdf, 0x72, 0x99, 0xc9, 0x17, 0xf7, 0xd9, 0x97, 0x0e, 0xb9, 0x45, 0x78, 0x01, 0xa0, 0xd2,
- 0x58, 0x5f, 0xaf, 0x56, 0x5a, 0xb5, 0x46, 0xbd, 0x74, 0xc2, 0x97, 0x56, 0xab, 0xbc, 0xb4, 0xee,
- 0x4b, 0xe7, 0x9b, 0x61, 0x3a, 0x68, 0xd3, 0x2c, 0xca, 0x4d, 0x2e, 0x88, 0x72, 0xa3, 0x95, 0x61,
- 0x3a, 0x68, 0xe5, 0x6c, 0x44, 0x78, 0x52, 0xff, 0xa9, 0xe6, 0x7d, 0xc3, 0xf1, 0x88, 0x81, 0x12,
- 0x10, 0x59, 0x32, 0x5c, 0xac, 0x87, 0xbf, 0x9d, 0x7b, 0x2a, 0xe3, 0x40, 0x83, 0x85, 0xf2, 0xfa,
- 0xfa, 0x76, 0x43, 0xdf, 0xae, 0x37, 0x5a, 0x6b, 0xb5, 0xfa, 0x2a, 0x1d, 0x21, 0x6b, 0xab, 0xf5,
- 0x86, 0x5e, 0xa5, 0x03, 0x64, 0xb3, 0x94, 0xa3, 0xb7, 0x58, 0x2f, 0x4d, 0x43, 0xb1, 0x47, 0xa4,
- 0x8b, 0x3e, 0xaf, 0xa6, 0x0c, 0x67, 0x10, 0xe2, 0x14, 0x73, 0xcf, 0xae, 0x70, 0xa4, 0x40, 0x19,
- 0x70, 0xe4, 0xf7, 0x1c, 0xcc, 0x51, 0x53, 0xdd, 0x25, 0xbb, 0x33, 0x04, 0x39, 0x55, 0x17, 0xd2,
- 0xd0, 0xc7, 0x94, 0x14, 0x31, 0x0e, 0x06, 0x72, 0x94, 0xce, 0xb8, 0xf8, 0xdd, 0xdc, 0x68, 0x97,
- 0x5a, 0xd4, 0xea, 0xad, 0xaa, 0x5e, 0x2f, 0xaf, 0xb3, 0x2c, 0xaa, 0x76, 0x16, 0x4e, 0xd7, 0x1b,
- 0x2c, 0xa4, 0x63, 0x73, 0xbb, 0xd5, 0xd8, 0xae, 0x6d, 0x6c, 0x36, 0xf4, 0x56, 0xa9, 0xa0, 0x9d,
- 0x01, 0x8d, 0x3e, 0x6f, 0xd7, 0x9a, 0xdb, 0x95, 0x72, 0xbd, 0x52, 0x5d, 0xaf, 0x2e, 0x97, 0x8a,
- 0xda, 0x93, 0xe1, 0x89, 0xf4, 0x92, 0xa4, 0xc6, 0xca, 0xb6, 0xde, 0xb8, 0xd0, 0xf4, 0x11, 0xd4,
- 0xab, 0xeb, 0x65, 0x5f, 0x91, 0xb8, 0xdb, 0xac, 0xa7, 0xb4, 0x6b, 0xe0, 0x24, 0xb9, 0xea, 0x7e,
- 0xbd, 0x51, 0x5e, 0x66, 0xe5, 0x4d, 0x6b, 0x37, 0xc2, 0xd9, 0x5a, 0xbd, 0xb9, 0xb5, 0xb2, 0x52,
- 0xab, 0xd4, 0xaa, 0xf5, 0xd6, 0xf6, 0x66, 0x55, 0xdf, 0xa8, 0x35, 0x9b, 0xfe, 0xbf, 0xa5, 0x19,
- 0x72, 0x57, 0x30, 0xed, 0x33, 0xd1, 0xfb, 0x55, 0x98, 0x3f, 0x6f, 0x74, 0x4d, 0x7f, 0xa0, 0x20,
- 0x97, 0x88, 0xf7, 0x9d, 0x06, 0xf2, 0xc8, 0x65, 0xe3, 0xec, 0x3c, 0x01, 0x79, 0x41, 0xdf, 0xae,
- 0xa6, 0x3c, 0x0d, 0xc4, 0x80, 0xa0, 0x25, 0x2e, 0x0a, 0xa5, 0xc5, 0xcc, 0x5d, 0xdf, 0xa8, 0xa4,
- 0x38, 0x0d, 0x24, 0x4f, 0x3e, 0x1d, 0xf8, 0x3f, 0x36, 0x2e, 0xf0, 0x4b, 0x30, 0xb7, 0x55, 0x2f,
- 0x6f, 0xb5, 0xd6, 0x1a, 0x7a, 0xed, 0x9b, 0x48, 0x2c, 0xfb, 0x79, 0x98, 0x59, 0x69, 0xe8, 0x4b,
- 0xb5, 0xe5, 0xe5, 0x6a, 0xbd, 0x54, 0xd0, 0xae, 0x83, 0x6b, 0x9a, 0x55, 0xfd, 0x7c, 0xad, 0x52,
- 0xdd, 0xde, 0xaa, 0x97, 0xcf, 0x97, 0x6b, 0xeb, 0xa4, 0x8f, 0x28, 0x26, 0x5c, 0x80, 0x3e, 0x85,
- 0xbe, 0x35, 0x0f, 0x40, 0xab, 0x4e, 0xae, 0x72, 0xe2, 0xae, 0xc9, 0xfe, 0xfd, 0xb4, 0x93, 0x86,
- 0x88, 0x4c, 0x4c, 0xfb, 0xad, 0xc1, 0xb4, 0xc3, 0x3e, 0xb0, 0xd5, 0xb1, 0x61, 0x74, 0xe8, 0x63,
- 0x40, 0x4d, 0x0f, 0x7f, 0x47, 0x1f, 0x48, 0x33, 0x47, 0x88, 0x65, 0x2c, 0x1d, 0x92, 0x2b, 0xe3,
- 0x01, 0x12, 0xbd, 0x32, 0x07, 0x0b, 0x62, 0xc5, 0xfc, 0x4a, 0x10, 0x63, 0x4a, 0xae, 0x12, 0xe2,
- 0xcf, 0x9c, 0x91, 0x75, 0xee, 0x19, 0x6c, 0x38, 0x85, 0xa0, 0x65, 0xd2, 0x83, 0xfd, 0x81, 0xc5,
- 0x52, 0xca, 0xf9, 0xcc, 0xfb, 0x46, 0x47, 0x49, 0xd1, 0xa6, 0x40, 0x6d, 0x3d, 0xea, 0x95, 0x54,
- 0xf4, 0x25, 0x15, 0xe6, 0x85, 0x7b, 0xb8, 0xd1, 0x1b, 0x73, 0x32, 0x77, 0xe4, 0x72, 0x37, 0x7c,
- 0xe7, 0x8e, 0x7a, 0xc3, 0xf7, 0xb9, 0xbb, 0x60, 0x8a, 0xa5, 0x11, 0xf9, 0x36, 0xea, 0xbe, 0x29,
- 0x70, 0x12, 0x66, 0x57, 0xab, 0xad, 0xed, 0x66, 0xab, 0xac, 0xb7, 0xaa, 0xcb, 0xa5, 0x9c, 0x3f,
- 0xf0, 0x55, 0x37, 0x36, 0x5b, 0x0f, 0x97, 0x94, 0xf4, 0x0e, 0x96, 0xfd, 0x8c, 0x4c, 0xd8, 0xc1,
- 0x32, 0xa9, 0xf8, 0xec, 0xe7, 0xaa, 0x9f, 0x56, 0xa1, 0x44, 0x39, 0xa8, 0x3e, 0xda, 0xc3, 0x8e,
- 0x89, 0xad, 0x36, 0x46, 0x97, 0x64, 0x02, 0xbe, 0x1e, 0x0a, 0x75, 0x48, 0xfa, 0x73, 0xce, 0x4a,
- 0xa4, 0x2f, 0x7d, 0x06, 0x76, 0xfe, 0x90, 0x81, 0xfd, 0x9b, 0x69, 0x3d, 0x2c, 0xfb, 0xd9, 0x1d,
- 0x0b, 0x64, 0x9f, 0x4c, 0xe3, 0x61, 0x39, 0x84, 0x83, 0x89, 0xc4, 0x71, 0x8e, 0x19, 0x7f, 0x4b,
- 0x2a, 0x7a, 0x85, 0x0a, 0x27, 0x97, 0x0d, 0x0f, 0x2f, 0x5d, 0x6d, 0x05, 0xf7, 0x64, 0xc6, 0xdc,
- 0x6d, 0x9d, 0x3b, 0x74, 0xb7, 0x75, 0x74, 0xd5, 0xa6, 0xd2, 0x77, 0xd5, 0x26, 0x7a, 0x4f, 0xda,
- 0x33, 0x99, 0x7d, 0x3c, 0x8c, 0x2d, 0xd8, 0x72, 0xba, 0xb3, 0x96, 0xc9, 0x5c, 0x64, 0xdf, 0xc0,
- 0xde, 0x39, 0x03, 0x25, 0xca, 0x0a, 0xe7, 0x44, 0xf8, 0x03, 0xec, 0x3a, 0xf8, 0xed, 0x14, 0x31,
- 0x1b, 0x83, 0x28, 0x18, 0x8a, 0x18, 0x05, 0x43, 0x58, 0x93, 0x56, 0xfb, 0x1d, 0x3f, 0xd2, 0x76,
- 0x86, 0x9c, 0xc7, 0x60, 0x7c, 0x98, 0xdc, 0xec, 0x3a, 0xc3, 0xc4, 0xe2, 0x27, 0x73, 0x65, 0x31,
- 0xbb, 0x25, 0xb4, 0x2a, 0x8b, 0x4c, 0xf2, 0xcd, 0xec, 0x69, 0xdd, 0xc7, 0x05, 0x8f, 0xcd, 0x84,
- 0xeb, 0xca, 0xb3, 0x73, 0x1f, 0x1f, 0xc6, 0x41, 0xf6, 0x28, 0xfc, 0xab, 0x02, 0xf9, 0xa6, 0xed,
- 0x78, 0xe3, 0xc2, 0x20, 0xed, 0x96, 0x37, 0x27, 0x81, 0x66, 0xfc, 0x9c, 0x33, 0xbb, 0x2d, 0xef,
- 0xe4, 0xf2, 0x27, 0x10, 0xf6, 0xf2, 0x24, 0x2c, 0x50, 0x4e, 0xc2, 0x3b, 0x63, 0xfe, 0x45, 0xa1,
- 0xfd, 0xd5, 0x43, 0xb2, 0x88, 0x90, 0x8d, 0x8f, 0x70, 0xcb, 0x39, 0x00, 0x45, 0x48, 0x43, 0x6f,
- 0xe5, 0x71, 0x59, 0x16, 0x71, 0x19, 0x34, 0xe3, 0x0e, 0xaf, 0x5d, 0x19, 0x57, 0xcf, 0x94, 0x26,
- 0x82, 0x66, 0x42, 0xe1, 0xd9, 0x23, 0xf2, 0x52, 0x15, 0x8a, 0xcc, 0xe5, 0x6f, 0xac, 0x08, 0xa4,
- 0x6d, 0x19, 0xa1, 0x10, 0xe4, 0x5c, 0x03, 0xd5, 0x71, 0xb7, 0x8c, 0xe4, 0xf2, 0xb3, 0xc7, 0xe1,
- 0xdf, 0x98, 0x2f, 0x6b, 0xf9, 0xb2, 0x61, 0x76, 0x8d, 0x8b, 0xdd, 0x14, 0x91, 0xab, 0x3f, 0x96,
- 0xf2, 0xf4, 0x5e, 0x58, 0x55, 0xa1, 0xbc, 0x18, 0x89, 0x7f, 0x03, 0xcc, 0x38, 0xc2, 0x5e, 0x9f,
- 0x6f, 0x45, 0xf5, 0xf9, 0x11, 0xb3, 0xef, 0x7a, 0x94, 0x33, 0xd5, 0x51, 0x3d, 0x29, 0x7e, 0x26,
- 0x72, 0xb4, 0x68, 0xb6, 0xdc, 0xe9, 0xac, 0x60, 0xc3, 0x3b, 0x70, 0x70, 0x27, 0xd5, 0x10, 0xe1,
- 0xf4, 0x6d, 0x87, 0x72, 0x92, 0x10, 0x62, 0x47, 0xae, 0x8b, 0xe8, 0x3c, 0x6b, 0x48, 0x6f, 0x10,
- 0xf0, 0x32, 0x96, 0x2e, 0xe9, 0x67, 0x43, 0x48, 0x1a, 0x02, 0x24, 0xcf, 0x19, 0x8d, 0x89, 0xec,
- 0x01, 0xf9, 0x21, 0x15, 0x16, 0xa8, 0x9d, 0x30, 0x6e, 0x4c, 0x3e, 0x94, 0xd2, 0x45, 0x88, 0xbb,
- 0x95, 0x8b, 0x67, 0x67, 0x2c, 0xb0, 0xa4, 0x71, 0x28, 0x92, 0xe3, 0x23, 0x7b, 0x64, 0x5e, 0x76,
- 0x0a, 0x80, 0x73, 0xfb, 0xfc, 0x58, 0x31, 0x8a, 0xe3, 0x88, 0xde, 0xc5, 0xe6, 0x1f, 0x4d, 0x21,
- 0xa8, 0x38, 0xe7, 0xd2, 0x19, 0x6e, 0x48, 0x89, 0x89, 0x52, 0xa3, 0xca, 0xef, 0xa6, 0xb4, 0x79,
- 0x99, 0xd3, 0xe5, 0xd0, 0xc1, 0x7d, 0xc4, 0x5e, 0xee, 0xe3, 0x29, 0x8c, 0xdf, 0x61, 0xac, 0xa4,
- 0x43, 0x6d, 0x7d, 0x84, 0x99, 0xfd, 0x59, 0x38, 0xad, 0x57, 0xcb, 0xcb, 0x8d, 0xfa, 0xfa, 0xc3,
- 0xfc, 0x15, 0x4d, 0x25, 0x95, 0x9f, 0x9c, 0x64, 0x02, 0xdb, 0x9b, 0x53, 0xf6, 0x81, 0xa2, 0xac,
- 0x92, 0x66, 0x2b, 0xdc, 0xe2, 0xca, 0xf0, 0x5e, 0x4d, 0x82, 0xec, 0x71, 0xa2, 0xf0, 0x77, 0x45,
- 0x98, 0xd5, 0x71, 0xdb, 0xde, 0xdf, 0xc7, 0x56, 0x07, 0x77, 0xd0, 0x9b, 0x55, 0x98, 0x0b, 0xf7,
- 0xfb, 0x9a, 0xd8, 0x43, 0xff, 0x25, 0xc2, 0xe6, 0x1c, 0xcc, 0xf9, 0x95, 0x6b, 0x88, 0x81, 0xe2,
- 0x85, 0x34, 0xed, 0x4e, 0x38, 0x15, 0xa0, 0xd0, 0xe8, 0x9b, 0xc2, 0x1c, 0xfe, 0x80, 0xde, 0xcb,
- 0x63, 0xb4, 0x25, 0x62, 0xf4, 0x40, 0xbc, 0x30, 0x43, 0x76, 0x17, 0x79, 0x56, 0x63, 0xc0, 0xfa,
- 0xed, 0x10, 0xac, 0x17, 0x08, 0x60, 0x2d, 0x1f, 0x91, 0xfe, 0x71, 0xa2, 0xf6, 0xf3, 0x2a, 0x9c,
- 0x0e, 0x3a, 0xe2, 0xc9, 0xa1, 0xf5, 0x71, 0x1e, 0xad, 0x6f, 0x16, 0xd1, 0x5a, 0x95, 0x91, 0xe6,
- 0x20, 0x96, 0x63, 0x50, 0xfb, 0x5c, 0x88, 0xda, 0xb7, 0x08, 0xa8, 0xad, 0x8f, 0xa9, 0x9c, 0xe3,
- 0x44, 0xef, 0x43, 0x2a, 0x9c, 0xf5, 0xcd, 0xce, 0x8a, 0x6d, 0xed, 0x74, 0xcd, 0xb6, 0x67, 0x5a,
- 0xbb, 0x91, 0x0b, 0xdb, 0xaa, 0xcc, 0xca, 0x66, 0x3f, 0xb6, 0xca, 0x61, 0x6c, 0xc5, 0xf8, 0x1a,
- 0xb2, 0x6d, 0x2b, 0x8e, 0xad, 0x98, 0x21, 0x8c, 0x73, 0xce, 0x8e, 0x34, 0x87, 0x4f, 0x4a, 0xdf,
- 0xfa, 0x24, 0x39, 0x38, 0x4e, 0xfc, 0x5e, 0x0a, 0x9c, 0xe9, 0xf1, 0x9d, 0x2a, 0x94, 0x88, 0xbf,
- 0x24, 0xe9, 0xd9, 0xd9, 0xfd, 0xa5, 0x0d, 0xd1, 0x93, 0xbe, 0x17, 0x08, 0x28, 0xf0, 0xa4, 0x0f,
- 0x12, 0xb4, 0xdb, 0x60, 0xa1, 0xbd, 0x87, 0xdb, 0x97, 0x6a, 0x56, 0xe0, 0x8b, 0x44, 0x1d, 0x57,
- 0xfa, 0x52, 0xc5, 0xc1, 0xec, 0x21, 0x11, 0x4c, 0x71, 0xe1, 0x51, 0x98, 0xd8, 0xf0, 0x4c, 0xc5,
- 0x34, 0xb4, 0x5f, 0x0d, 0x01, 0xaa, 0x0b, 0x00, 0xdd, 0x3b, 0x12, 0xd5, 0x74, 0xb0, 0xd4, 0x47,
- 0x80, 0x05, 0xc1, 0x99, 0xc6, 0x66, 0xab, 0xd6, 0xa8, 0x6f, 0x6f, 0x35, 0xab, 0xcb, 0xdb, 0x4b,
- 0x01, 0x38, 0xcd, 0x92, 0x8a, 0xbe, 0xac, 0xc0, 0x14, 0x65, 0xcb, 0x45, 0x4f, 0x89, 0x20, 0x18,
- 0x7a, 0x84, 0x00, 0xbd, 0x53, 0x3a, 0x20, 0x50, 0x28, 0x08, 0x56, 0x4e, 0x4c, 0xc3, 0x78, 0x36,
- 0x4c, 0x51, 0x90, 0x83, 0x5d, 0x80, 0x9b, 0x62, 0x2c, 0x3b, 0x46, 0x46, 0x0f, 0xb2, 0x4b, 0x06,
- 0x07, 0x1a, 0xc2, 0x46, 0xf6, 0xd6, 0xf8, 0x8b, 0xf3, 0x74, 0xe9, 0xe0, 0x82, 0xe9, 0xed, 0x91,
- 0x13, 0x06, 0xe8, 0xf9, 0x32, 0x1d, 0xd7, 0x9d, 0x50, 0xb8, 0xec, 0xe7, 0x1e, 0x72, 0x5a, 0x83,
- 0x66, 0x42, 0x3f, 0x26, 0x1d, 0x8b, 0x5a, 0xd0, 0xcf, 0x90, 0xa7, 0x18, 0x70, 0x36, 0x20, 0xdf,
- 0x35, 0x5d, 0x8f, 0xd9, 0xdc, 0xf7, 0xa4, 0x22, 0x14, 0x3c, 0xd4, 0x3c, 0xbc, 0xaf, 0x13, 0x32,
- 0xe8, 0x41, 0xdf, 0x62, 0x8a, 0x52, 0x25, 0x4e, 0xac, 0x9c, 0x85, 0x29, 0x76, 0x92, 0x9a, 0x6d,
- 0x4b, 0x05, 0xaf, 0x92, 0x5b, 0x41, 0x52, 0xb5, 0xcd, 0x5e, 0x07, 0xfe, 0xdf, 0x93, 0x30, 0xb5,
- 0x66, 0xba, 0x9e, 0xed, 0x5c, 0x45, 0x6f, 0xc9, 0xc1, 0xd4, 0x79, 0xec, 0xb8, 0xa6, 0x6d, 0x1d,
- 0x72, 0xcf, 0xba, 0x05, 0x66, 0x7b, 0x0e, 0xbe, 0x6c, 0xda, 0x07, 0x2e, 0x37, 0x4a, 0x70, 0x49,
- 0x1a, 0x82, 0x69, 0xe3, 0xc0, 0xdb, 0xb3, 0x9d, 0x28, 0x00, 0x53, 0xf0, 0xae, 0xdd, 0x04, 0x40,
- 0x9f, 0xeb, 0xc6, 0x3e, 0x0e, 0xee, 0x58, 0x8f, 0x52, 0x34, 0x0d, 0xf2, 0x9e, 0xb9, 0x8f, 0x59,
- 0x44, 0x76, 0xf2, 0xec, 0x0b, 0x98, 0x44, 0x37, 0x65, 0x51, 0x64, 0x55, 0x3d, 0x78, 0x45, 0x7f,
- 0xa0, 0xc2, 0xec, 0x2a, 0xf6, 0x18, 0xab, 0x2e, 0x7a, 0x55, 0x4e, 0xea, 0x12, 0x24, 0x7f, 0x5e,
- 0xd2, 0x35, 0xdc, 0xe0, 0xbf, 0x70, 0xc8, 0x15, 0x13, 0xa3, 0xf0, 0xf0, 0x2a, 0x7f, 0x37, 0x04,
- 0x89, 0x15, 0xea, 0xd5, 0xa8, 0xf3, 0x3e, 0xcb, 0xcc, 0x36, 0x8e, 0x0f, 0x7f, 0x10, 0x6d, 0xe2,
- 0xc4, 0x38, 0x1b, 0x4c, 0xf6, 0x8b, 0x5c, 0x7d, 0x62, 0xbb, 0xa3, 0xe9, 0xcb, 0x2c, 0xc7, 0xa1,
- 0x6b, 0x3f, 0x78, 0x4a, 0x8c, 0x8c, 0x1e, 0xe6, 0x96, 0x8c, 0xd0, 0x31, 0x9c, 0x93, 0x09, 0x5c,
- 0xf4, 0xaa, 0xc2, 0x6c, 0x73, 0xcf, 0xbe, 0x12, 0xc8, 0xf1, 0x9b, 0xe5, 0x80, 0xbd, 0x11, 0x66,
- 0x2e, 0xf7, 0x81, 0x1a, 0x25, 0xf0, 0x77, 0xcb, 0xa9, 0xe2, 0xdd, 0x72, 0x2f, 0x57, 0xd3, 0xc2,
- 0xc4, 0x31, 0x17, 0x03, 0x93, 0x78, 0x1d, 0x9c, 0x92, 0xe2, 0x3a, 0x38, 0xed, 0x59, 0x30, 0xc5,
- 0xb8, 0x66, 0xcb, 0xd4, 0xc9, 0x00, 0x07, 0x99, 0xf9, 0x0a, 0xe6, 0xc5, 0x0a, 0xa6, 0x43, 0x3e,
- 0xbe, 0x72, 0xd9, 0x23, 0xff, 0x1b, 0x0a, 0x89, 0xcf, 0x14, 0x00, 0x5f, 0x19, 0x03, 0xf0, 0xe8,
- 0x6b, 0x39, 0xd9, 0xcd, 0x9c, 0x50, 0x02, 0x21, 0x07, 0x47, 0xba, 0xe0, 0x6c, 0x28, 0xb9, 0xec,
- 0xe5, 0xf9, 0xa3, 0x79, 0x98, 0x5b, 0x36, 0x77, 0x76, 0xc2, 0x4e, 0xf2, 0xd5, 0x92, 0x9d, 0x64,
- 0xbc, 0x0b, 0x95, 0x6f, 0xe7, 0x1e, 0x38, 0x0e, 0xb6, 0x82, 0x4a, 0xb1, 0xe6, 0xd4, 0x97, 0xaa,
- 0xdd, 0x0e, 0x27, 0x83, 0x71, 0x81, 0xef, 0x28, 0x67, 0xf4, 0xfe, 0x64, 0xf4, 0x15, 0x69, 0x4f,
- 0x80, 0x40, 0xa2, 0x7c, 0x95, 0x62, 0x1a, 0xe0, 0x7d, 0x30, 0xbf, 0x47, 0x73, 0x93, 0xe5, 0xd2,
- 0xa0, 0xb3, 0x3c, 0xd3, 0x17, 0xff, 0x7e, 0x03, 0xbb, 0xae, 0xb1, 0x8b, 0x75, 0x31, 0x73, 0x5f,
- 0xf3, 0x55, 0xd3, 0xdc, 0xe6, 0x28, 0xe7, 0x54, 0x20, 0x51, 0x93, 0xec, 0xb5, 0xe3, 0x73, 0xe7,
- 0x20, 0xbf, 0x62, 0x76, 0x31, 0xfa, 0x2e, 0x05, 0x66, 0xfc, 0x59, 0xb7, 0xd5, 0xf6, 0xdf, 0x38,
- 0x87, 0xca, 0xbf, 0xcb, 0xc9, 0xde, 0x62, 0xec, 0xd3, 0x59, 0x0c, 0x69, 0xc4, 0xb4, 0x1b, 0xb9,
- 0xdb, 0x8a, 0x13, 0x49, 0x4d, 0xe0, 0xce, 0x29, 0x7f, 0xea, 0xb1, 0xb3, 0xd3, 0xb5, 0x0d, 0x61,
- 0xc3, 0xa0, 0xdf, 0x14, 0x8a, 0x0e, 0x01, 0xd6, 0x6d, 0x6f, 0xd3, 0xb4, 0xac, 0x30, 0xae, 0xc6,
- 0xa1, 0x74, 0xd1, 0xd7, 0x25, 0x31, 0x34, 0x19, 0xa9, 0x3b, 0x2b, 0x3d, 0x46, 0xb3, 0x6f, 0x83,
- 0x85, 0x8b, 0x57, 0x3d, 0xec, 0xb2, 0x5c, 0xac, 0xd8, 0xbc, 0xde, 0x97, 0xca, 0x5d, 0x2c, 0x90,
- 0x14, 0xc2, 0x2c, 0xa1, 0xc0, 0x74, 0xa2, 0x5e, 0x1b, 0x61, 0x06, 0x78, 0x1a, 0x4a, 0xf5, 0xc6,
- 0x72, 0x95, 0xf8, 0xf7, 0x06, 0x1e, 0x93, 0xbb, 0xe8, 0xfb, 0x55, 0x98, 0x23, 0x0e, 0x78, 0x01,
- 0x0a, 0x4f, 0x94, 0x98, 0x8f, 0xa0, 0x2f, 0x48, 0xfb, 0xfe, 0x92, 0x2a, 0xf3, 0x05, 0xc4, 0x0b,
- 0x7a, 0xc7, 0xec, 0xf6, 0x0b, 0xba, 0xa0, 0xf7, 0xa5, 0x0e, 0x00, 0x44, 0x1d, 0x08, 0xc8, 0xcf,
- 0x4b, 0x39, 0x00, 0x0f, 0xe3, 0xee, 0xb8, 0x50, 0xf9, 0x05, 0x15, 0x66, 0xfd, 0x49, 0x4a, 0x00,
- 0x4a, 0x43, 0x00, 0xc5, 0xb6, 0xba, 0x57, 0xa3, 0x65, 0x91, 0xe0, 0x35, 0x55, 0x23, 0xf9, 0x43,
- 0xe9, 0x99, 0x3b, 0x11, 0x11, 0xc7, 0xcb, 0x84, 0xf0, 0xfb, 0xa0, 0xd4, 0x7c, 0x7e, 0x08, 0x73,
- 0xc7, 0x05, 0xdf, 0x9b, 0x8a, 0x50, 0xdc, 0xea, 0x11, 0xe4, 0x3e, 0xaf, 0xca, 0x5c, 0xd2, 0x71,
- 0xe8, 0xf0, 0x97, 0x6f, 0x66, 0x75, 0xed, 0xb6, 0xd1, 0xdd, 0x8c, 0x4e, 0xd1, 0x46, 0x09, 0xda,
- 0xbd, 0xcc, 0x1f, 0x9c, 0x9e, 0x30, 0xbf, 0x2d, 0xf1, 0xfe, 0x0a, 0x22, 0x23, 0xee, 0xa0, 0xdd,
- 0x9d, 0x70, 0xaa, 0x63, 0xba, 0xc6, 0xc5, 0x2e, 0xae, 0x5a, 0x6d, 0xe7, 0x2a, 0x15, 0x07, 0x9b,
- 0x56, 0x1d, 0xfa, 0xa0, 0xdd, 0x0f, 0x05, 0xd7, 0xbb, 0xda, 0xa5, 0xf3, 0x44, 0xfe, 0x5c, 0x5e,
- 0x6c, 0x51, 0x4d, 0x3f, 0xbb, 0x4e, 0xff, 0xe2, 0xdd, 0x3a, 0xa7, 0xe4, 0xdc, 0x3a, 0xb5, 0x67,
- 0x40, 0xd1, 0x76, 0xcc, 0x5d, 0x93, 0x5e, 0x49, 0xb7, 0x70, 0x28, 0x4c, 0x2b, 0x35, 0x05, 0x1a,
- 0x24, 0x8b, 0xce, 0xb2, 0x6a, 0xcf, 0x82, 0x19, 0x73, 0xdf, 0xd8, 0xc5, 0x0f, 0x99, 0x16, 0x3d,
- 0xc4, 0xbe, 0x70, 0xf7, 0xd9, 0x43, 0x47, 0x0e, 0xd9, 0x77, 0x3d, 0xca, 0xaa, 0xdd, 0x07, 0xd7,
- 0xb7, 0x1d, 0x6c, 0x78, 0xd8, 0x17, 0xd0, 0x05, 0xb3, 0xb3, 0x8b, 0xbd, 0xda, 0xce, 0x86, 0xe9,
- 0xba, 0xa6, 0xb5, 0xcb, 0x6e, 0x9d, 0x8c, 0xcf, 0x80, 0x3e, 0xa8, 0xc8, 0x46, 0xa2, 0x23, 0x92,
- 0xa1, 0x2a, 0x31, 0xc2, 0xed, 0xd8, 0x9c, 0x14, 0x55, 0x49, 0xe7, 0xd8, 0x37, 0x48, 0xc5, 0x88,
- 0x8b, 0x67, 0x2b, 0xfb, 0xa1, 0xff, 0xf7, 0x14, 0x98, 0x5e, 0xb6, 0xaf, 0x58, 0xa4, 0x99, 0xdc,
- 0x23, 0x67, 0x29, 0x0f, 0x38, 0x56, 0x2e, 0xde, 0xb3, 0x9c, 0x78, 0x86, 0x8c, 0xd4, 0x36, 0x28,
- 0x32, 0x06, 0x86, 0xc4, 0x76, 0x27, 0x79, 0xfb, 0x6d, 0x52, 0x39, 0xd9, 0xcb, 0xf5, 0xb7, 0x54,
- 0xc8, 0x2f, 0x3b, 0x76, 0x0f, 0xfd, 0x6c, 0x2e, 0x85, 0x93, 0x58, 0xc7, 0xb1, 0x7b, 0x2d, 0x72,
- 0x7d, 0x65, 0xb4, 0x2f, 0xc2, 0xa7, 0x69, 0xf7, 0xc0, 0x74, 0xcf, 0x76, 0x4d, 0x2f, 0x98, 0x84,
- 0x2c, 0xdc, 0xfd, 0x84, 0x81, 0x7d, 0xc1, 0x26, 0xcb, 0xa4, 0x87, 0xd9, 0xfd, 0x3e, 0x9f, 0x88,
- 0xd0, 0x97, 0x8b, 0x2f, 0xc6, 0xe0, 0x0a, 0xcf, 0xbe, 0x54, 0xf4, 0x1a, 0x1e, 0xc9, 0xe7, 0x88,
- 0x48, 0x3e, 0x69, 0x80, 0x84, 0x1d, 0xbb, 0x37, 0x16, 0xb7, 0x8e, 0xd7, 0x85, 0xa8, 0x3e, 0x57,
- 0x40, 0xf5, 0x0e, 0xa9, 0x32, 0xb3, 0x47, 0xf4, 0x83, 0x79, 0x00, 0x62, 0xa4, 0x6c, 0xf9, 0xd3,
- 0x27, 0x39, 0x0b, 0xed, 0x3b, 0xf2, 0x9c, 0x2c, 0xcb, 0xa2, 0x2c, 0x9f, 0x12, 0x63, 0x03, 0x11,
- 0xf2, 0x31, 0x12, 0x2d, 0x43, 0xe1, 0xc0, 0xff, 0xcc, 0x24, 0x2a, 0x49, 0x82, 0xbc, 0xea, 0xf4,
- 0x4f, 0xf4, 0x1b, 0x39, 0x28, 0x90, 0x04, 0xed, 0x26, 0x00, 0x62, 0x16, 0xd0, 0x23, 0x98, 0x39,
- 0x62, 0x00, 0x70, 0x29, 0x44, 0x5b, 0xcd, 0x0e, 0xfb, 0x4c, 0x0d, 0xee, 0x28, 0xc1, 0xff, 0x9b,
- 0x18, 0x0b, 0x84, 0x16, 0x33, 0x1f, 0xb8, 0x14, 0xff, 0x6f, 0xf2, 0xb6, 0x8e, 0x77, 0xe8, 0xcd,
- 0x02, 0x79, 0x3d, 0x4a, 0x08, 0xff, 0x5e, 0x0f, 0xef, 0xa3, 0x0c, 0xfe, 0x26, 0x29, 0xfe, 0x54,
- 0x9a, 0xa8, 0xe5, 0x52, 0x54, 0x44, 0x91, 0x64, 0xea, 0x4f, 0x46, 0x6f, 0x0e, 0xd5, 0x66, 0x59,
- 0x50, 0x9b, 0xa7, 0xa5, 0x10, 0x6f, 0xf6, 0xca, 0xf3, 0xa5, 0x02, 0xcc, 0xd4, 0xed, 0x0e, 0xd3,
- 0x1d, 0x6e, 0xba, 0xf9, 0xc9, 0x42, 0xaa, 0xe9, 0x66, 0x48, 0x23, 0x46, 0x41, 0x9e, 0x27, 0x2a,
- 0x88, 0x1c, 0x05, 0x5e, 0x3f, 0xb4, 0x25, 0x28, 0x12, 0xed, 0x3d, 0x7c, 0xd1, 0x61, 0x12, 0x09,
- 0x22, 0x5a, 0x9d, 0xfd, 0xf9, 0x1f, 0x4e, 0xc7, 0xfe, 0x1b, 0x14, 0x48, 0x05, 0x13, 0xf6, 0x86,
- 0xc4, 0x8a, 0x2a, 0xc9, 0x15, 0x55, 0x93, 0x2b, 0x9a, 0xef, 0xaf, 0x68, 0x9a, 0x55, 0x84, 0x38,
- 0x0d, 0xc9, 0x5e, 0xc7, 0xff, 0x7a, 0x0a, 0xa0, 0x6e, 0x5c, 0x36, 0x77, 0xe9, 0xde, 0xf2, 0x1f,
- 0x04, 0xb3, 0x27, 0xb6, 0x0b, 0xfc, 0x3d, 0xdc, 0x40, 0x78, 0x0f, 0x4c, 0xb1, 0x71, 0x8f, 0x55,
- 0xe4, 0x66, 0xa1, 0x22, 0x11, 0x15, 0x6a, 0xd4, 0x3e, 0xea, 0xe9, 0x41, 0x7e, 0xe1, 0x4e, 0x76,
- 0xa5, 0xef, 0x4e, 0xf6, 0xc1, 0x3b, 0x18, 0x31, 0x37, 0xb5, 0xa3, 0xf7, 0x49, 0x9f, 0xa1, 0xe2,
- 0xf8, 0xe1, 0x6a, 0x14, 0xd3, 0x04, 0x9f, 0x01, 0x53, 0x76, 0xb8, 0x1d, 0xae, 0xc6, 0xae, 0xa2,
- 0xd5, 0xac, 0x1d, 0x5b, 0x0f, 0x72, 0x4a, 0x6e, 0x9d, 0x49, 0xf1, 0x31, 0x91, 0x63, 0x8a, 0x67,
- 0x56, 0x83, 0x28, 0x8d, 0x7e, 0x3d, 0x2e, 0x98, 0xde, 0xde, 0xba, 0x69, 0x5d, 0x72, 0xd1, 0xb7,
- 0xc8, 0x59, 0x90, 0x1c, 0xfe, 0x4a, 0x3a, 0xfc, 0xc5, 0x28, 0x49, 0x4d, 0x11, 0xb5, 0xfb, 0xe3,
- 0xa8, 0x0c, 0xe6, 0x36, 0x06, 0xc0, 0x7b, 0xa1, 0x48, 0x19, 0x65, 0x9d, 0xe8, 0xb9, 0x58, 0xfc,
- 0x42, 0x4a, 0x3a, 0xfb, 0x03, 0xbd, 0x37, 0xc4, 0xf1, 0xbc, 0x80, 0xe3, 0xd2, 0x91, 0x38, 0xcb,
- 0x1c, 0xd2, 0x73, 0x4f, 0x87, 0x29, 0x26, 0x69, 0x6d, 0x81, 0x6f, 0xc5, 0xa5, 0x13, 0x1a, 0x40,
- 0x71, 0xc3, 0xbe, 0x8c, 0x5b, 0x76, 0x29, 0xe7, 0x3f, 0xfb, 0xfc, 0xb5, 0xec, 0x92, 0x82, 0x5e,
- 0x3f, 0x0d, 0xd3, 0x61, 0x78, 0xbc, 0xdf, 0x53, 0xa0, 0x54, 0x21, 0x33, 0xb4, 0x15, 0xc7, 0xde,
- 0xa7, 0x35, 0x92, 0xf7, 0xc7, 0xff, 0x21, 0x69, 0x07, 0x91, 0x30, 0x6c, 0x5d, 0x7f, 0x61, 0x31,
- 0x58, 0xd2, 0x25, 0x4c, 0x25, 0x58, 0xc2, 0x44, 0xef, 0x90, 0x72, 0x18, 0x91, 0x2d, 0x25, 0xfb,
- 0xa6, 0xf6, 0x9b, 0x0a, 0x14, 0x2a, 0x5d, 0xdb, 0xc2, 0xfc, 0xa1, 0xd1, 0xa1, 0xa7, 0x13, 0x07,
- 0xef, 0x63, 0xa0, 0x17, 0x2b, 0xb2, 0xb6, 0x46, 0x24, 0x00, 0xbf, 0x6c, 0x49, 0xd9, 0xca, 0x0d,
- 0x52, 0x89, 0xa4, 0xb3, 0x17, 0xe8, 0x97, 0x15, 0x98, 0xa1, 0x91, 0xc8, 0xca, 0xdd, 0x2e, 0x7a,
- 0x42, 0x24, 0xd4, 0x01, 0x21, 0x06, 0xd1, 0xcf, 0x4b, 0x1f, 0x8a, 0x0a, 0x6b, 0x15, 0xd2, 0x4e,
- 0x11, 0x92, 0x2d, 0xdd, 0x19, 0x1d, 0xb9, 0x9d, 0xb8, 0xa1, 0x0c, 0x65, 0x2f, 0xea, 0xdf, 0x57,
- 0x7c, 0x03, 0xc0, 0xba, 0xb4, 0xe9, 0xe0, 0xcb, 0x26, 0xbe, 0x82, 0x6e, 0x88, 0x84, 0x7d, 0x38,
- 0xcc, 0xd2, 0xdb, 0xa4, 0x17, 0x71, 0x38, 0x92, 0xb1, 0x1b, 0x61, 0xb3, 0xdd, 0x28, 0x13, 0xeb,
- 0xc5, 0xfb, 0x63, 0x5f, 0x71, 0x64, 0x74, 0x3e, 0xbb, 0xe4, 0x9a, 0x4d, 0x3c, 0x17, 0xd9, 0x0b,
- 0xf6, 0xa3, 0x53, 0x30, 0xbd, 0x65, 0xb9, 0xbd, 0xae, 0xe1, 0xee, 0xa1, 0x7f, 0x51, 0xa1, 0x48,
- 0xaf, 0xd7, 0x44, 0xdf, 0x20, 0x44, 0x73, 0x79, 0xe1, 0x01, 0x76, 0x02, 0x07, 0x1e, 0xfa, 0x12,
- 0xd9, 0x47, 0x0a, 0x67, 0x1f, 0xa1, 0x0f, 0xaa, 0xb2, 0x93, 0xd4, 0xa0, 0x50, 0x76, 0x9f, 0x67,
- 0x7c, 0x00, 0x91, 0x9e, 0xd9, 0xf6, 0x0e, 0x1c, 0xec, 0x0e, 0x0c, 0x20, 0x12, 0x4b, 0x65, 0x93,
- 0xfe, 0xa5, 0x87, 0xbf, 0x23, 0x03, 0xa6, 0x58, 0xe2, 0xa1, 0xcd, 0xa8, 0xc3, 0x11, 0x0f, 0xce,
- 0x40, 0xd1, 0x70, 0x3c, 0xd3, 0xf5, 0xd8, 0xf6, 0x2c, 0x7b, 0xf3, 0xbb, 0x4b, 0xfa, 0xb4, 0xe5,
- 0x74, 0x83, 0xb8, 0x4f, 0x61, 0x02, 0xfa, 0x05, 0xa9, 0xf9, 0x63, 0x72, 0xcd, 0xd3, 0x41, 0xfe,
- 0xd0, 0x08, 0x2b, 0xdc, 0xd7, 0xc1, 0x35, 0x7a, 0xb9, 0x55, 0xdd, 0xa6, 0x61, 0x82, 0xc2, 0x88,
- 0x40, 0x1d, 0xf4, 0x1e, 0x95, 0x5b, 0xbf, 0xbb, 0x2a, 0x8c, 0x11, 0x4c, 0x8a, 0xd1, 0x18, 0x11,
- 0x26, 0x24, 0xec, 0x75, 0x0b, 0x4b, 0xb8, 0xaa, 0xf4, 0x12, 0x2e, 0xfa, 0x19, 0xe9, 0xbd, 0xa8,
- 0x50, 0x94, 0x43, 0xd6, 0x00, 0x93, 0xae, 0xdf, 0xfb, 0xb0, 0xd4, 0xbe, 0xd2, 0xb0, 0x92, 0x8e,
- 0x11, 0xb6, 0xb7, 0x4e, 0xc1, 0xd4, 0xaa, 0xd1, 0xed, 0x62, 0xe7, 0xaa, 0x3f, 0x24, 0x95, 0x02,
- 0x0e, 0x37, 0x0c, 0xcb, 0xdc, 0xc1, 0xae, 0x97, 0xdc, 0x59, 0xbe, 0x4f, 0x3a, 0xb4, 0x3b, 0x2b,
- 0x63, 0xb1, 0x9f, 0x7e, 0x8c, 0xcc, 0xef, 0x82, 0xbc, 0x69, 0xed, 0xd8, 0xac, 0xcb, 0xec, 0x5f,
- 0xf3, 0x0f, 0x7e, 0x26, 0x53, 0x17, 0x92, 0x51, 0x32, 0xba, 0xbb, 0x24, 0x17, 0xd9, 0xf7, 0x9c,
- 0x3f, 0x97, 0x87, 0xf9, 0x80, 0x89, 0x9a, 0xd5, 0xc1, 0x8f, 0xf2, 0x4b, 0x31, 0xdf, 0x9f, 0x97,
- 0x3d, 0x80, 0xdb, 0x5f, 0x1f, 0x42, 0x2a, 0x46, 0xa4, 0x2d, 0x80, 0xb6, 0xe1, 0xe1, 0x5d, 0xdb,
- 0x31, 0xc3, 0xfe, 0xf0, 0x99, 0x69, 0xa8, 0x55, 0xe8, 0xdf, 0x57, 0x75, 0x8e, 0x8e, 0x76, 0x3f,
- 0xcc, 0xe2, 0x30, 0xe2, 0x49, 0xb0, 0x54, 0x93, 0x88, 0x17, 0x9f, 0x1f, 0xfd, 0xbe, 0xd4, 0x39,
- 0x5f, 0x99, 0x6a, 0xa6, 0xc3, 0x6c, 0x7b, 0xb4, 0x36, 0xb4, 0x55, 0xdf, 0x28, 0xeb, 0xcd, 0xb5,
- 0xf2, 0xfa, 0x7a, 0xad, 0xbe, 0x1a, 0x86, 0xda, 0xd2, 0x60, 0x61, 0xb9, 0x71, 0xa1, 0xce, 0xc5,
- 0x42, 0xcb, 0xa3, 0x4d, 0x98, 0x0e, 0xe4, 0x35, 0xc8, 0x93, 0x93, 0x97, 0x19, 0xf3, 0xe4, 0xe4,
- 0x92, 0x7c, 0xe3, 0xcc, 0x6c, 0x87, 0xee, 0x3d, 0xe4, 0x19, 0xfd, 0x9a, 0x01, 0x05, 0xb2, 0xa6,
- 0x8e, 0x1e, 0x23, 0x9b, 0x88, 0xbd, 0xae, 0xd1, 0xc6, 0x68, 0x3f, 0x85, 0x35, 0x1e, 0xdc, 0x35,
- 0xa4, 0x1c, 0xba, 0x6b, 0x88, 0x3c, 0x32, 0xab, 0xef, 0xf4, 0xa0, 0x75, 0x7c, 0x9d, 0x66, 0x11,
- 0x8f, 0xc4, 0x26, 0xee, 0xae, 0xd0, 0xe5, 0x7f, 0xc6, 0x66, 0x8c, 0x4a, 0xc6, 0xf3, 0x94, 0xce,
- 0x12, 0x95, 0xdb, 0x87, 0x49, 0xe2, 0x28, 0xfb, 0x16, 0xff, 0xf9, 0x3c, 0x14, 0x9a, 0xbd, 0xae,
- 0xe9, 0xa1, 0x1f, 0x51, 0xc6, 0x82, 0x19, 0xbd, 0x1f, 0x4a, 0x1d, 0x7a, 0x3f, 0x54, 0xb4, 0x67,
- 0x9b, 0x97, 0xd8, 0xb3, 0x6d, 0xe1, 0x47, 0x3d, 0x71, 0xcf, 0xf6, 0x1e, 0x16, 0x2e, 0x93, 0xee,
- 0xf8, 0x3e, 0x69, 0x80, 0x48, 0x49, 0xb5, 0x06, 0xc4, 0x61, 0x3d, 0xf7, 0x74, 0x16, 0x0e, 0x12,
- 0xa0, 0xb8, 0xd4, 0x68, 0xb5, 0x1a, 0x1b, 0xa5, 0x13, 0x24, 0x8e, 0x58, 0x63, 0x93, 0x06, 0xe7,
- 0xaa, 0xd5, 0xeb, 0x55, 0xbd, 0xa4, 0x90, 0x00, 0x95, 0xb5, 0xd6, 0x7a, 0xb5, 0xa4, 0x8a, 0x97,
- 0x85, 0x24, 0x9a, 0xdf, 0x62, 0xd9, 0x59, 0xaa, 0x97, 0x9c, 0x21, 0x1e, 0xcf, 0x4f, 0xf6, 0xca,
- 0xf5, 0x83, 0x2a, 0x14, 0x36, 0xb0, 0xb3, 0x8b, 0xd1, 0x0b, 0x53, 0x6c, 0xf2, 0xed, 0x98, 0x8e,
- 0x4b, 0xc3, 0x79, 0x46, 0x9b, 0x7c, 0x7c, 0x9a, 0x76, 0x2b, 0xcc, 0xbb, 0xb8, 0x6d, 0x5b, 0x9d,
- 0x20, 0x13, 0xed, 0x8f, 0xc4, 0x44, 0xf4, 0xda, 0x94, 0x90, 0x11, 0x46, 0xc7, 0xb2, 0x53, 0x97,
- 0x06, 0x98, 0x41, 0xa5, 0x66, 0x0f, 0xcc, 0x57, 0x54, 0xff, 0xa7, 0xde, 0x55, 0xf4, 0x5a, 0xe9,
- 0xdd, 0xd7, 0x3b, 0xa1, 0x78, 0x31, 0x88, 0x0b, 0xaf, 0xc6, 0xf6, 0xc7, 0x2c, 0x8f, 0xb6, 0x04,
- 0xa7, 0x5c, 0xdc, 0xc5, 0x6d, 0x0f, 0x77, 0xfc, 0xa6, 0xab, 0x0f, 0xed, 0x14, 0x0e, 0x67, 0x47,
- 0xbf, 0xcd, 0x03, 0x78, 0x9f, 0x08, 0xe0, 0x6d, 0x03, 0x44, 0xe9, 0x57, 0x28, 0xde, 0x56, 0xf6,
- 0xab, 0xd1, 0xec, 0xda, 0xe1, 0xa2, 0x78, 0xf0, 0xee, 0x7f, 0xdb, 0xf3, 0xf6, 0xbb, 0xe4, 0x1b,
- 0x3b, 0x9e, 0x10, 0xbc, 0x6b, 0x8b, 0x30, 0x65, 0x58, 0x57, 0xc9, 0xa7, 0x7c, 0x42, 0xad, 0x83,
- 0x4c, 0xe8, 0xf5, 0x21, 0xf2, 0x0f, 0x08, 0xc8, 0x3f, 0x45, 0x8e, 0xdd, 0xec, 0x81, 0xff, 0xf6,
- 0x29, 0x28, 0x6c, 0x1a, 0xae, 0x87, 0xd1, 0xff, 0xa3, 0xca, 0x22, 0x7f, 0x1b, 0x2c, 0xec, 0xd8,
- 0xed, 0x03, 0x17, 0x77, 0xc4, 0x46, 0xd9, 0x97, 0x3a, 0x0e, 0xcc, 0xb5, 0x3b, 0xa0, 0x14, 0x24,
- 0x32, 0xb2, 0xc1, 0x36, 0xfc, 0xa1, 0x74, 0x72, 0xf5, 0x84, 0xbb, 0x69, 0x38, 0x5e, 0x63, 0x87,
- 0xa4, 0x85, 0x57, 0x4f, 0xf0, 0x89, 0x02, 0xf4, 0xc5, 0x04, 0xe8, 0xa7, 0xe2, 0xa1, 0x9f, 0x96,
- 0x80, 0x5e, 0x2b, 0xc3, 0xf4, 0x8e, 0xd9, 0xc5, 0xe4, 0x87, 0x19, 0xf2, 0xc3, 0xa0, 0x31, 0x89,
- 0xc8, 0x3e, 0x1c, 0x93, 0x56, 0xcc, 0x2e, 0xd6, 0xc3, 0xdf, 0x82, 0x89, 0x0c, 0x44, 0x13, 0x99,
- 0x75, 0xea, 0x8d, 0xeb, 0x1b, 0x5e, 0x96, 0xb1, 0x8f, 0x83, 0xc5, 0x37, 0x8b, 0x1d, 0x8d, 0xe9,
- 0x18, 0x9e, 0x41, 0xc0, 0x98, 0xd3, 0xc9, 0xb3, 0xe8, 0x17, 0xa2, 0xf6, 0xfb, 0x85, 0xbc, 0x4c,
- 0x4d, 0xd7, 0x23, 0x06, 0xcc, 0xc6, 0xb4, 0xa8, 0x8b, 0x01, 0x40, 0xd4, 0x52, 0x0c, 0xdf, 0x7d,
- 0x60, 0xda, 0x86, 0x83, 0xbd, 0x4d, 0xde, 0x13, 0xa3, 0xa0, 0x8b, 0x89, 0xc4, 0x11, 0xd0, 0x6d,
- 0x1a, 0xfb, 0xf4, 0x6a, 0x89, 0x8a, 0xff, 0x8d, 0x39, 0x78, 0x1d, 0x4a, 0x8f, 0xfa, 0xdf, 0xc2,
- 0xb8, 0xfb, 0xdf, 0x41, 0x75, 0xcc, 0xbe, 0x19, 0xbe, 0x31, 0x0f, 0x6a, 0xe5, 0xc0, 0x7b, 0x5c,
- 0x77, 0xbf, 0xff, 0x2a, 0xed, 0xe7, 0xc2, 0xfa, 0xb3, 0x03, 0xef, 0x78, 0x7b, 0xdf, 0x94, 0x5a,
- 0x22, 0xe7, 0x4f, 0x13, 0x57, 0xb7, 0xec, 0x75, 0xe4, 0x67, 0xd5, 0xd0, 0x3d, 0xf3, 0xa5, 0xb9,
- 0xa3, 0x9b, 0xe6, 0x88, 0xf6, 0x4f, 0x5c, 0xcf, 0x10, 0xbe, 0x07, 0x1d, 0x4f, 0x5e, 0x88, 0x8e,
- 0x4a, 0xb6, 0xd7, 0x89, 0x28, 0xe7, 0x74, 0xfa, 0x82, 0x7e, 0x54, 0xda, 0x69, 0x9d, 0x8a, 0x2d,
- 0xd1, 0x95, 0x30, 0x9d, 0x4d, 0x25, 0x77, 0xfb, 0x76, 0x42, 0xb1, 0xd9, 0x03, 0xf6, 0xb7, 0xbc,
- 0xab, 0x60, 0xf9, 0xc8, 0x88, 0xa1, 0x37, 0x48, 0x6f, 0x47, 0xd1, 0x6a, 0x0f, 0x59, 0x2f, 0x4c,
- 0x27, 0x6f, 0xb9, 0xcd, 0xaa, 0xc4, 0x82, 0x27, 0x70, 0x57, 0x96, 0x0a, 0x45, 0xba, 0x05, 0x89,
- 0xde, 0x2e, 0xdd, 0x44, 0xfc, 0xde, 0x48, 0x74, 0x21, 0x0c, 0xdf, 0xd3, 0xac, 0x39, 0x08, 0xae,
- 0x86, 0xf9, 0x54, 0xae, 0x86, 0xe2, 0x29, 0x50, 0x89, 0x76, 0x44, 0xeb, 0x98, 0xf1, 0x74, 0x32,
- 0x4d, 0x0b, 0x1b, 0xc8, 0x50, 0xf6, 0x78, 0x7f, 0x67, 0x01, 0xe6, 0x68, 0xd1, 0xd4, 0xc7, 0x19,
- 0xbd, 0x47, 0xf9, 0xf7, 0x83, 0xba, 0x56, 0x87, 0xb9, 0x2b, 0x84, 0x6d, 0x7a, 0x07, 0x16, 0x5b,
- 0xb9, 0xb8, 0x23, 0x71, 0xdd, 0x83, 0xd6, 0x33, 0xb8, 0x35, 0x4b, 0xf8, 0xdf, 0x97, 0x31, 0x5d,
- 0xf0, 0xa7, 0x0e, 0x5c, 0x45, 0x62, 0x64, 0xf1, 0x49, 0xda, 0x19, 0x28, 0x5e, 0x36, 0xf1, 0x95,
- 0x5a, 0x87, 0x59, 0xb7, 0xec, 0x0d, 0xfd, 0xa2, 0xf4, 0xbe, 0x2d, 0x0f, 0x37, 0xe3, 0x25, 0x5b,
- 0x2d, 0x94, 0xdb, 0xbd, 0x1d, 0xca, 0xd6, 0x04, 0x4e, 0x24, 0x8b, 0xb7, 0x5b, 0x57, 0x52, 0x28,
- 0x62, 0x9c, 0xe1, 0x2c, 0x06, 0x02, 0x49, 0x3c, 0xef, 0x42, 0x05, 0x30, 0xe6, 0x8b, 0xaf, 0xe5,
- 0xa2, 0x53, 0x0c, 0x29, 0x3a, 0x7b, 0xc9, 0xbf, 0x59, 0x85, 0x99, 0x26, 0xf6, 0x56, 0x4c, 0xdc,
- 0xed, 0xb8, 0xc8, 0x39, 0xba, 0x69, 0x74, 0x17, 0x14, 0x77, 0x08, 0xb1, 0x61, 0xe7, 0x16, 0x58,
- 0x36, 0xf4, 0x46, 0x45, 0x76, 0x47, 0x98, 0xad, 0xbe, 0x05, 0xdc, 0x8e, 0x05, 0x26, 0x39, 0x8f,
- 0xde, 0xe4, 0x92, 0x27, 0x10, 0x4a, 0x5c, 0x85, 0x39, 0x76, 0x1d, 0x6e, 0xb9, 0x6b, 0xee, 0x5a,
- 0xe8, 0x60, 0x0c, 0x2d, 0x44, 0x7b, 0x1a, 0x14, 0x0c, 0x9f, 0x1a, 0xdb, 0x7a, 0x45, 0x03, 0x3b,
- 0x4f, 0x52, 0x9e, 0x4e, 0x33, 0xa6, 0x08, 0xdc, 0x1b, 0x29, 0x76, 0xc0, 0xf3, 0x04, 0x03, 0xf7,
- 0x0e, 0x2d, 0x3c, 0x7b, 0xc4, 0xbe, 0xa8, 0xc2, 0x69, 0xc6, 0xc0, 0x79, 0xec, 0x78, 0x66, 0xdb,
- 0xe8, 0x52, 0xe4, 0x5e, 0x99, 0x1b, 0x07, 0x74, 0x6b, 0x30, 0x7f, 0x99, 0x27, 0xcb, 0x20, 0x3c,
- 0x37, 0x10, 0x42, 0x81, 0x01, 0x5d, 0xfc, 0x31, 0x45, 0x00, 0x54, 0x41, 0xaa, 0x02, 0xcd, 0x09,
- 0x06, 0x40, 0x95, 0x66, 0x22, 0x7b, 0x88, 0x5f, 0xc3, 0x02, 0xfb, 0x44, 0xdd, 0xe7, 0x1f, 0x48,
- 0x63, 0xbb, 0x05, 0xb3, 0x04, 0x4b, 0xfa, 0x23, 0x5b, 0x86, 0x48, 0x50, 0xe2, 0xb0, 0xdf, 0x61,
- 0x57, 0x34, 0x86, 0xff, 0xea, 0x3c, 0x1d, 0x74, 0x01, 0x20, 0xfa, 0xc4, 0x77, 0xd2, 0xb9, 0xb8,
- 0x4e, 0x5a, 0x91, 0xeb, 0xa4, 0xdf, 0x26, 0x1d, 0x6a, 0x65, 0x30, 0xdb, 0x47, 0x57, 0x0f, 0xb9,
- 0x20, 0x1b, 0xc3, 0x4b, 0xcf, 0x5e, 0x2f, 0x5e, 0xcf, 0xf4, 0x62, 0xf9, 0xa0, 0xd7, 0x35, 0xdb,
- 0xfe, 0x7c, 0xea, 0x63, 0x63, 0x99, 0x4f, 0xf1, 0xfd, 0x81, 0xda, 0xd7, 0x1f, 0x1c, 0xc1, 0x92,
- 0xbe, 0x1d, 0x4e, 0xd2, 0x22, 0x2a, 0x21, 0x5b, 0x05, 0x1a, 0x48, 0xa2, 0x2f, 0x59, 0x8c, 0x6a,
- 0x28, 0xa9, 0x04, 0xa1, 0x10, 0x46, 0x58, 0xfa, 0x4c, 0x67, 0xec, 0xa6, 0x55, 0x90, 0x38, 0xce,
- 0x26, 0xe0, 0x16, 0x9a, 0xa7, 0xd6, 0xee, 0x16, 0xb9, 0x45, 0x13, 0x7d, 0x2e, 0x3f, 0x8e, 0x11,
- 0xe1, 0x79, 0x90, 0x27, 0x2e, 0xee, 0x6a, 0xec, 0x92, 0x46, 0x54, 0x64, 0x74, 0xc5, 0x29, 0x7e,
- 0xd4, 0x5b, 0x3b, 0xa1, 0x93, 0x3f, 0xb5, 0x3b, 0xe0, 0xe4, 0x45, 0xa3, 0x7d, 0x69, 0xd7, 0xb1,
- 0x0f, 0xc8, 0x7d, 0x83, 0x36, 0xbb, 0xb8, 0x90, 0x5c, 0x00, 0x2b, 0x7e, 0xd0, 0xee, 0x0e, 0x4c,
- 0x87, 0xc2, 0x30, 0xd3, 0x61, 0xed, 0x04, 0x33, 0x1e, 0xb4, 0xa7, 0x87, 0x9d, 0x4e, 0x31, 0xb1,
- 0xd3, 0x59, 0x3b, 0x11, 0x74, 0x3b, 0xda, 0x32, 0x4c, 0x77, 0xcc, 0xcb, 0x64, 0xab, 0x9a, 0xcc,
- 0xba, 0x86, 0x1d, 0x7c, 0x5e, 0x36, 0x2f, 0xd3, 0x8d, 0xed, 0xb5, 0x13, 0x7a, 0xf8, 0xa7, 0xb6,
- 0x0a, 0x33, 0x64, 0x5b, 0x80, 0x90, 0x99, 0x4e, 0x75, 0xa8, 0x79, 0xed, 0x84, 0x1e, 0xfd, 0xeb,
- 0x5b, 0x1f, 0x79, 0x72, 0xf6, 0xe3, 0x81, 0x60, 0xbb, 0x3d, 0x97, 0x6a, 0xbb, 0xdd, 0x97, 0x05,
- 0xdd, 0x70, 0x3f, 0x03, 0x85, 0x36, 0x91, 0xb0, 0xc2, 0x24, 0x4c, 0x5f, 0xb5, 0xfb, 0x20, 0xbf,
- 0x6f, 0x38, 0xc1, 0xe4, 0xf9, 0xb6, 0xe1, 0x74, 0x37, 0x0c, 0xe7, 0x92, 0x8f, 0xa0, 0xff, 0xd7,
- 0xd2, 0x14, 0x14, 0x88, 0xe0, 0xc2, 0x07, 0xf4, 0xb3, 0x79, 0x6a, 0x86, 0x54, 0x6c, 0xcb, 0x1f,
- 0xf6, 0x5b, 0x76, 0x70, 0x40, 0xe6, 0x17, 0x73, 0xe3, 0xb1, 0x20, 0xaf, 0xe1, 0xc2, 0x0d, 0x5b,
- 0xe6, 0x0b, 0x0f, 0xf0, 0x43, 0xf8, 0x2a, 0x5b, 0x12, 0x1d, 0xf4, 0xa9, 0xef, 0xc6, 0xfa, 0x7c,
- 0xff, 0x8d, 0xf5, 0xd1, 0xf2, 0x41, 0x61, 0xb8, 0xa3, 0xca, 0x6f, 0x8f, 0x60, 0xba, 0xf4, 0x0b,
- 0x22, 0x7e, 0x06, 0xde, 0x35, 0x2d, 0xae, 0xce, 0xc1, 0x6b, 0xca, 0x4e, 0x29, 0xad, 0x51, 0x33,
- 0x84, 0xbd, 0xec, 0xfb, 0xa6, 0x9f, 0xce, 0xd3, 0x88, 0xab, 0xf4, 0x14, 0x86, 0x78, 0xc3, 0x2f,
- 0xfa, 0xf5, 0xb1, 0x28, 0xcd, 0x80, 0x01, 0x47, 0x1d, 0x38, 0xe0, 0x1c, 0x3a, 0xa4, 0x9c, 0x1f,
- 0x72, 0x48, 0xb9, 0x90, 0x6e, 0xe5, 0xf0, 0x23, 0xbc, 0xfe, 0x6c, 0x8a, 0xfa, 0x73, 0x6f, 0x0c,
- 0x40, 0x83, 0xe4, 0x32, 0x16, 0xfb, 0xe6, 0xb1, 0x50, 0x53, 0x9a, 0x82, 0xa6, 0x3c, 0x30, 0x3a,
- 0x23, 0xd9, 0x6b, 0xcb, 0x87, 0xf2, 0x70, 0x4d, 0xc4, 0x4c, 0x1d, 0x5f, 0x61, 0x8a, 0xf2, 0x7b,
- 0x63, 0x51, 0x94, 0xf4, 0x31, 0x10, 0xb2, 0xd6, 0x98, 0xdf, 0x90, 0x3e, 0x3b, 0xd4, 0x0f, 0x54,
- 0x28, 0x9b, 0x18, 0x65, 0x39, 0x03, 0x45, 0xda, 0xc3, 0x30, 0x68, 0xd8, 0x5b, 0xca, 0xee, 0x46,
- 0xee, 0xc4, 0x91, 0x2c, 0x6f, 0x13, 0xd0, 0x1f, 0xb6, 0xae, 0xd1, 0x3a, 0x70, 0xac, 0x9a, 0xe5,
- 0xd9, 0xe8, 0xdb, 0xc6, 0xa2, 0x38, 0xa1, 0x37, 0x9c, 0x3a, 0x8a, 0x37, 0xdc, 0x48, 0xab, 0x1c,
- 0x41, 0x0d, 0x8e, 0x65, 0x95, 0x23, 0xa6, 0xf0, 0xec, 0xf1, 0x7b, 0x97, 0x0a, 0x67, 0xd8, 0x64,
- 0x6b, 0x49, 0xb4, 0x10, 0xd1, 0xc3, 0xe3, 0x00, 0xf2, 0x74, 0x60, 0x26, 0xb1, 0x7b, 0x25, 0xc9,
- 0x8b, 0x78, 0x52, 0x2a, 0xf1, 0x46, 0x1d, 0x61, 0x3a, 0xd8, 0xc7, 0xe1, 0x58, 0x90, 0x92, 0xbb,
- 0x48, 0x27, 0x05, 0x1b, 0xd9, 0x63, 0xf6, 0x6a, 0x15, 0x8a, 0xf4, 0x9c, 0x16, 0xda, 0xca, 0xc4,
- 0x61, 0x42, 0x8c, 0x11, 0x2d, 0xb1, 0x23, 0x47, 0xb9, 0xc9, 0xec, 0x0c, 0x5b, 0x9a, 0xbd, 0xb8,
- 0x81, 0xac, 0x4c, 0xc0, 0x85, 0x50, 0x81, 0xd9, 0x26, 0xf6, 0x2a, 0x86, 0xe3, 0x98, 0xc6, 0xee,
- 0xb8, 0x3c, 0xbe, 0x65, 0xbd, 0x87, 0xd1, 0x57, 0x73, 0xb2, 0xe7, 0x69, 0xc2, 0x85, 0xf0, 0x80,
- 0xd5, 0x98, 0x48, 0x84, 0x6f, 0x91, 0x3a, 0x33, 0x33, 0x8c, 0xda, 0x04, 0x3c, 0xb6, 0x15, 0x98,
- 0x0a, 0xce, 0xe2, 0xdd, 0x25, 0x9c, 0xcf, 0xdc, 0xf3, 0xf6, 0x83, 0x63, 0x30, 0xe4, 0xf9, 0xf0,
- 0x19, 0x30, 0xf4, 0xba, 0x94, 0x8e, 0xf2, 0xc9, 0x07, 0x09, 0xd3, 0xb5, 0xb1, 0x34, 0xee, 0xf0,
- 0xc7, 0x75, 0x74, 0xf0, 0xe7, 0xa7, 0xd8, 0x72, 0xe4, 0xba, 0xe1, 0xe1, 0x47, 0xd1, 0x1f, 0xa8,
- 0x30, 0xd5, 0xc4, 0x9e, 0x3f, 0xde, 0x0a, 0xd7, 0x49, 0x8f, 0xaa, 0xe1, 0x1a, 0xb7, 0xe2, 0x31,
- 0xc3, 0xd6, 0x30, 0x1e, 0x84, 0x99, 0x9e, 0x63, 0xb7, 0xb1, 0xeb, 0xb2, 0xd5, 0x0b, 0xde, 0x51,
- 0x6d, 0xd0, 0xe8, 0x4f, 0x58, 0x5b, 0xdc, 0x0c, 0xfe, 0xd1, 0xa3, 0xdf, 0xd3, 0x9a, 0x01, 0x94,
- 0x12, 0xab, 0xe0, 0xa4, 0xcd, 0x80, 0xa4, 0xc2, 0xb3, 0x07, 0xfa, 0x77, 0x54, 0x98, 0x6b, 0x62,
- 0x2f, 0x94, 0x62, 0x8a, 0x4d, 0x8e, 0x78, 0x78, 0x05, 0x28, 0xd5, 0xa3, 0x41, 0x29, 0x7f, 0x19,
- 0xab, 0x28, 0xcd, 0x90, 0xd8, 0x04, 0x2f, 0x63, 0x95, 0xe3, 0x60, 0x02, 0xc7, 0xd7, 0x9e, 0x04,
- 0x33, 0x84, 0x17, 0xd2, 0x60, 0xbf, 0x3b, 0x1f, 0x35, 0xde, 0xcf, 0x66, 0xd4, 0x78, 0xef, 0x87,
- 0xc2, 0xbe, 0xe1, 0x5c, 0x72, 0x49, 0xc3, 0x9d, 0x95, 0x31, 0xdb, 0x37, 0xfc, 0xec, 0x3a, 0xfd,
- 0x6b, 0xb0, 0x9f, 0x66, 0x21, 0x9d, 0x9f, 0xe6, 0x5b, 0x94, 0x54, 0x23, 0x21, 0x9d, 0x3b, 0x8c,
- 0xb1, 0xc9, 0xa7, 0x18, 0x37, 0x13, 0xca, 0xce, 0x5e, 0x39, 0x5e, 0xa9, 0xc2, 0xb4, 0x3f, 0x6e,
- 0x13, 0x7b, 0xfc, 0xc2, 0xd1, 0xd5, 0x61, 0xb0, 0xa1, 0x9f, 0xb2, 0x07, 0x0e, 0x24, 0x32, 0x3e,
- 0xf3, 0x3e, 0x45, 0x0f, 0x9c, 0x54, 0x78, 0xf6, 0x78, 0xbc, 0x9b, 0xe2, 0x41, 0xda, 0x03, 0xfa,
- 0x49, 0x15, 0xd4, 0x55, 0xec, 0x4d, 0xda, 0x8a, 0x7c, 0xa7, 0x74, 0x88, 0x23, 0x41, 0x60, 0x84,
- 0xe7, 0xc5, 0x55, 0x3c, 0x9e, 0x06, 0x24, 0x17, 0xdb, 0x48, 0x8a, 0x81, 0xec, 0x51, 0x7b, 0x3f,
- 0x45, 0x8d, 0x6e, 0x2e, 0x7c, 0xeb, 0x18, 0x7a, 0xd5, 0xc9, 0x2e, 0x7c, 0x04, 0x02, 0x24, 0x34,
- 0x8e, 0xab, 0xbd, 0x0d, 0x2a, 0x7c, 0x22, 0x97, 0x9f, 0x82, 0xdf, 0xd8, 0xf7, 0x70, 0xfb, 0x12,
- 0xee, 0xf0, 0x97, 0xc9, 0x8d, 0x0a, 0xdd, 0x59, 0x98, 0x6a, 0x53, 0x6a, 0x04, 0xbc, 0x69, 0x3d,
- 0x78, 0x4d, 0x71, 0x93, 0xbf, 0xd8, 0x11, 0xd1, 0xdf, 0x27, 0x78, 0x93, 0xbf, 0x44, 0xf1, 0x13,
- 0x30, 0x5b, 0xe8, 0x2c, 0xa3, 0xd6, 0xb6, 0x2d, 0xf4, 0x5f, 0x8f, 0x0e, 0xcb, 0x8d, 0x30, 0x63,
- 0xb6, 0x6d, 0x8b, 0x84, 0xa1, 0x08, 0x0e, 0x01, 0x85, 0x09, 0xc1, 0xd7, 0xea, 0xbe, 0xfd, 0x88,
- 0xc9, 0x76, 0xcd, 0xa3, 0x84, 0x51, 0x8d, 0x09, 0x9f, 0xf5, 0xe3, 0x32, 0x26, 0x06, 0x94, 0x9d,
- 0x3d, 0x64, 0x1f, 0x8f, 0xbc, 0xdb, 0x68, 0x57, 0xf8, 0xb8, 0x58, 0x05, 0x1e, 0x65, 0x38, 0xe3,
- 0x6b, 0x71, 0x2c, 0xc3, 0x59, 0x02, 0x03, 0x13, 0xb8, 0x0d, 0x25, 0xc2, 0x31, 0xf3, 0x35, 0xe0,
- 0x23, 0xa0, 0x33, 0x3e, 0xf3, 0x70, 0x44, 0x74, 0x8e, 0xc7, 0x44, 0xfc, 0x30, 0x0b, 0x91, 0xc9,
- 0x2c, 0x1e, 0xf4, 0xdf, 0xc6, 0x01, 0xce, 0xbd, 0xa3, 0xf8, 0x2b, 0x50, 0x6f, 0x05, 0xf4, 0x0e,
- 0x45, 0x36, 0x04, 0xca, 0x21, 0x09, 0xfa, 0x54, 0xc6, 0x82, 0xe0, 0xdb, 0xa4, 0x62, 0x93, 0xc8,
- 0x94, 0x9f, 0x3d, 0x80, 0xaf, 0x50, 0x61, 0x81, 0xf8, 0x08, 0x74, 0xb1, 0xe1, 0xd0, 0x8e, 0x72,
- 0x2c, 0x8e, 0xf2, 0xef, 0x96, 0x0e, 0xf0, 0x23, 0xca, 0x21, 0xe2, 0x63, 0x2c, 0x50, 0xc8, 0x45,
- 0xf7, 0x91, 0x64, 0x61, 0x22, 0xdb, 0x28, 0xa5, 0x90, 0x05, 0xa6, 0xe2, 0xe3, 0xc1, 0x23, 0xa5,
- 0x47, 0xae, 0x28, 0x8c, 0xa0, 0xb1, 0x4d, 0xd8, 0x23, 0x57, 0x86, 0x89, 0xec, 0x31, 0xf9, 0xc9,
- 0xa7, 0xb1, 0x05, 0xe7, 0x96, 0x71, 0xb1, 0x8b, 0xd1, 0x1b, 0xf2, 0xe1, 0x89, 0xb6, 0xdf, 0x19,
- 0x8b, 0x07, 0xe6, 0x11, 0x02, 0xe2, 0x6b, 0x90, 0x77, 0xec, 0x2b, 0x74, 0x69, 0x6b, 0x5e, 0x27,
- 0xcf, 0xf4, 0x72, 0xcb, 0xee, 0xc1, 0xbe, 0x45, 0x4f, 0x86, 0xce, 0xeb, 0xc1, 0xab, 0x76, 0x2b,
- 0xcc, 0x5f, 0x31, 0xbd, 0xbd, 0x35, 0x6c, 0x74, 0xb0, 0xa3, 0xdb, 0x57, 0x88, 0xc7, 0xdc, 0xb4,
- 0x2e, 0x26, 0x8a, 0xfe, 0x2b, 0x12, 0xf6, 0xa5, 0x2f, 0x94, 0xc9, 0x1c, 0x7f, 0x4b, 0x63, 0x79,
- 0xc6, 0x73, 0x95, 0xbd, 0xc2, 0x7c, 0x40, 0x85, 0x19, 0xdd, 0xbe, 0xc2, 0x94, 0xe4, 0xff, 0x3c,
- 0x5e, 0x1d, 0x49, 0x3d, 0xd1, 0x23, 0x92, 0x0b, 0xd9, 0x9f, 0xf8, 0x44, 0x2f, 0xb1, 0xf8, 0x89,
- 0x9c, 0x5c, 0x9a, 0xd3, 0xed, 0x2b, 0x4d, 0xec, 0xd1, 0x16, 0x81, 0xb6, 0xc7, 0xe4, 0x64, 0x6d,
- 0xba, 0x94, 0x20, 0x9b, 0x87, 0x87, 0xef, 0x69, 0x77, 0x11, 0x42, 0x01, 0x85, 0x2c, 0x4e, 0x7a,
- 0x17, 0x61, 0x28, 0x07, 0x13, 0x88, 0x91, 0xa2, 0xc2, 0xac, 0x6e, 0x5f, 0xf1, 0x87, 0x86, 0x15,
- 0xb3, 0xdb, 0x1d, 0xcf, 0x08, 0x99, 0xd6, 0xf8, 0x0f, 0xc4, 0x10, 0x70, 0x31, 0x71, 0xe3, 0x7f,
- 0x08, 0x03, 0xd9, 0xc3, 0xf0, 0x32, 0xda, 0x58, 0x82, 0x11, 0xda, 0x1a, 0x0f, 0x0e, 0xa3, 0x36,
- 0x88, 0x90, 0x8d, 0x63, 0x6b, 0x10, 0x71, 0x1c, 0x4c, 0x64, 0xe7, 0x64, 0xa1, 0x42, 0x86, 0xf9,
- 0xf1, 0xb6, 0x89, 0xf7, 0xa6, 0x73, 0x4d, 0x64, 0xc3, 0xae, 0xc0, 0xc8, 0x58, 0xd0, 0x48, 0xe1,
- 0x82, 0x28, 0xc1, 0x43, 0xf6, 0x78, 0xfc, 0x92, 0x0a, 0x73, 0x94, 0x85, 0xc7, 0x89, 0x15, 0x30,
- 0x52, 0xa3, 0xe2, 0x6b, 0x70, 0x3c, 0x8d, 0x2a, 0x81, 0x83, 0x89, 0xdc, 0x29, 0xea, 0xdb, 0x71,
- 0x23, 0x1c, 0x1f, 0x8f, 0x43, 0x70, 0x64, 0x63, 0x6c, 0x8c, 0x47, 0xc8, 0x47, 0x31, 0xc6, 0x8e,
- 0xe9, 0x18, 0xf9, 0xcb, 0xc2, 0x56, 0x34, 0x4e, 0x0c, 0x8e, 0xd0, 0x14, 0xc6, 0x08, 0xc3, 0x88,
- 0x4d, 0xe1, 0x98, 0x90, 0xf8, 0x92, 0x0a, 0x40, 0x19, 0xd8, 0xb0, 0x2f, 0x93, 0xcb, 0x7c, 0xc6,
- 0xd0, 0x9d, 0xf5, 0xbb, 0xd5, 0xab, 0x43, 0xdc, 0xea, 0x53, 0x86, 0x70, 0x49, 0xbb, 0x12, 0xc8,
- 0x49, 0xd9, 0xaf, 0xe4, 0xc4, 0x57, 0x02, 0x93, 0xcb, 0xcf, 0x1e, 0xe3, 0x2f, 0x50, 0x6b, 0x2e,
- 0x3a, 0x60, 0xfa, 0xc3, 0x63, 0x41, 0x99, 0x9b, 0xfd, 0xab, 0xe2, 0xec, 0xff, 0x08, 0xd8, 0x8e,
- 0x6a, 0x23, 0x0e, 0x3b, 0x38, 0x9a, 0xbd, 0x8d, 0x78, 0x7c, 0x07, 0x44, 0xbf, 0x35, 0x0f, 0x27,
- 0x59, 0x27, 0xf2, 0xef, 0x01, 0xe2, 0x94, 0xe7, 0xf0, 0x84, 0x4e, 0x72, 0x08, 0xca, 0xe3, 0x5a,
- 0x90, 0x4a, 0xb3, 0x94, 0x29, 0xc1, 0xde, 0x44, 0x56, 0x37, 0x8a, 0xd5, 0x47, 0x7b, 0x86, 0xd5,
- 0x91, 0x0f, 0xf7, 0x3b, 0x04, 0xf8, 0x60, 0xad, 0x51, 0x15, 0xd7, 0x1a, 0x07, 0xac, 0x4c, 0xa6,
- 0xde, 0xb9, 0x26, 0x22, 0xa3, 0xec, 0x4e, 0x7c, 0xe7, 0x3a, 0xbe, 0xec, 0xec, 0x51, 0x7a, 0xaf,
- 0x0a, 0xf9, 0xa6, 0xed, 0x78, 0xe8, 0xe5, 0x69, 0x5a, 0x27, 0x95, 0x7c, 0x04, 0x52, 0xf0, 0xae,
- 0x55, 0x84, 0x3b, 0x9e, 0xef, 0x4a, 0x3e, 0xea, 0x6c, 0x78, 0x06, 0xf1, 0xea, 0xf6, 0xcb, 0xe7,
- 0x2e, 0x7b, 0x4e, 0x1b, 0x4f, 0x87, 0xca, 0xaf, 0x19, 0x7f, 0x00, 0x23, 0xb3, 0x78, 0x3a, 0xb1,
- 0x25, 0x67, 0x8f, 0xdb, 0x9b, 0x4e, 0x32, 0xdf, 0xd6, 0x15, 0xb3, 0x8b, 0xd1, 0xcb, 0xa9, 0xcb,
- 0x48, 0xdd, 0xd8, 0xc7, 0xf2, 0x47, 0x62, 0x12, 0x5d, 0x5b, 0x49, 0x7c, 0x59, 0x35, 0x8a, 0x2f,
- 0x9b, 0xb6, 0x41, 0xd1, 0x03, 0xe8, 0x94, 0xa5, 0x49, 0x37, 0xa8, 0x84, 0xb2, 0x27, 0x12, 0xa7,
- 0xf3, 0x54, 0x13, 0x7b, 0xd4, 0xa8, 0x6c, 0x04, 0x37, 0xb0, 0x7c, 0xf3, 0x58, 0x22, 0x76, 0x86,
- 0x17, 0xbc, 0xa8, 0x7d, 0x17, 0xbc, 0x7c, 0x80, 0x07, 0x67, 0x43, 0x04, 0xe7, 0x1b, 0xe3, 0x05,
- 0x24, 0x32, 0x39, 0x16, 0x98, 0xde, 0x19, 0xc2, 0xb4, 0x29, 0xc0, 0x74, 0xdf, 0x88, 0x5c, 0x64,
- 0x0f, 0xd8, 0xf7, 0x16, 0xe0, 0x24, 0x9d, 0xf4, 0x97, 0xad, 0x0e, 0x8b, 0xb0, 0xfa, 0x76, 0xe5,
- 0x98, 0x37, 0xdb, 0x0e, 0x87, 0x60, 0x15, 0x62, 0x39, 0x17, 0xfa, 0xef, 0xd6, 0x5f, 0xa2, 0xe1,
- 0x5c, 0xfd, 0x4e, 0x94, 0xec, 0xb4, 0xc9, 0xdf, 0xaf, 0x1f, 0xfe, 0x27, 0xde, 0x65, 0x34, 0x25,
- 0x7f, 0x97, 0xd1, 0x6f, 0xa5, 0x5b, 0xb7, 0x23, 0x45, 0xf7, 0x09, 0x3c, 0x63, 0xdb, 0x29, 0xc5,
- 0x8a, 0x9e, 0x04, 0x77, 0xff, 0x39, 0xdc, 0xc9, 0xa2, 0x08, 0x22, 0x23, 0xba, 0x93, 0x11, 0x02,
- 0xc7, 0xe9, 0x4e, 0x36, 0x8c, 0x81, 0x09, 0xdc, 0x6a, 0x5f, 0x60, 0xbb, 0xf9, 0xa4, 0xdd, 0xa0,
- 0x3f, 0x52, 0x32, 0x1f, 0xa5, 0xbf, 0x96, 0x4b, 0xe5, 0xff, 0x4c, 0xf8, 0x4a, 0x1e, 0xa6, 0xd3,
- 0x78, 0x34, 0x27, 0x91, 0x9b, 0xc0, 0xba, 0x91, 0x42, 0x7c, 0xd1, 0x2f, 0x98, 0x1d, 0x6f, 0x6f,
- 0x4c, 0x27, 0x3a, 0xae, 0xf8, 0xb4, 0x82, 0xeb, 0x91, 0xc9, 0x0b, 0xfa, 0x9f, 0xb9, 0x54, 0x21,
- 0xa4, 0x42, 0x91, 0x10, 0xb6, 0x62, 0x44, 0x9c, 0x22, 0xf0, 0x53, 0x22, 0xbd, 0x09, 0x6a, 0xf4,
- 0x79, 0xb3, 0x83, 0xed, 0xc7, 0xa1, 0x46, 0x13, 0xbe, 0xc6, 0xa7, 0xd1, 0x49, 0xe4, 0xfe, 0x93,
- 0x6a, 0x74, 0x28, 0x92, 0x31, 0x69, 0x74, 0x22, 0xbd, 0xec, 0x65, 0xfc, 0xba, 0x39, 0x36, 0x91,
- 0x5a, 0x37, 0xad, 0x4b, 0xe8, 0x1f, 0x8b, 0xc1, 0xc5, 0xcc, 0x17, 0x4c, 0x6f, 0x8f, 0xc5, 0x82,
- 0xf9, 0x90, 0xf4, 0xdd, 0x28, 0x23, 0xc4, 0x7b, 0x11, 0xc3, 0x49, 0x15, 0x0e, 0x85, 0x93, 0x2a,
- 0xc3, 0xbc, 0x69, 0x79, 0xd8, 0xb1, 0x8c, 0xee, 0x4a, 0xd7, 0xd8, 0x75, 0xcf, 0x4e, 0x0d, 0xbc,
- 0xbc, 0xae, 0xc6, 0xe5, 0xd1, 0xc5, 0x3f, 0xf8, 0xeb, 0x2b, 0xa7, 0xc5, 0xeb, 0x2b, 0x63, 0xa2,
- 0x5f, 0xcd, 0xc4, 0x47, 0xbf, 0x0a, 0xa3, 0x5b, 0xc1, 0xf0, 0xe0, 0xd8, 0xb2, 0xb6, 0x71, 0xca,
- 0x70, 0x7f, 0x77, 0x49, 0x46, 0x61, 0x0b, 0x43, 0x3f, 0xfe, 0xb8, 0x9a, 0x6a, 0x75, 0xcf, 0x57,
- 0x84, 0xc5, 0x7e, 0x25, 0x48, 0x6d, 0xa1, 0xf2, 0x95, 0x57, 0xfb, 0x2a, 0x1f, 0x9a, 0x3c, 0x79,
- 0x09, 0x93, 0x87, 0x57, 0xaa, 0x82, 0x9c, 0x52, 0xa5, 0x59, 0x2c, 0x94, 0xa9, 0xed, 0x04, 0x4e,
- 0x23, 0x15, 0xe0, 0x54, 0x10, 0xed, 0xb6, 0xd7, 0xc3, 0x86, 0x63, 0x58, 0x6d, 0x8c, 0x3e, 0xae,
- 0x8c, 0xc3, 0xec, 0x5d, 0x81, 0x69, 0xb3, 0x6d, 0x5b, 0x4d, 0xf3, 0x45, 0xc1, 0xe5, 0x72, 0xc9,
- 0x41, 0xd6, 0x89, 0x44, 0x6a, 0xec, 0x0f, 0x3d, 0xfc, 0x57, 0xab, 0xc1, 0x4c, 0xdb, 0x70, 0x3a,
- 0x34, 0x08, 0x5f, 0xa1, 0xef, 0x22, 0xa7, 0x58, 0x42, 0x95, 0xe0, 0x17, 0x3d, 0xfa, 0x5b, 0x6b,
- 0x88, 0x42, 0x2c, 0xf6, 0x45, 0xf3, 0x88, 0x25, 0xb6, 0x1c, 0xfd, 0x24, 0xc8, 0xdc, 0x97, 0x8e,
- 0x83, 0xbb, 0xe4, 0x0e, 0x7a, 0xda, 0x43, 0xcc, 0xe8, 0x51, 0x42, 0xda, 0xe5, 0x01, 0x52, 0xd4,
- 0x21, 0x34, 0x26, 0xbd, 0x3c, 0x20, 0xc5, 0x45, 0xf6, 0x9a, 0xf9, 0x58, 0x11, 0xe6, 0x69, 0xaf,
- 0xc6, 0xc4, 0x89, 0x5e, 0x41, 0xae, 0x90, 0xf6, 0x1e, 0xc2, 0x57, 0x51, 0xf3, 0xe8, 0x63, 0x72,
- 0x09, 0xd4, 0x4b, 0x61, 0xc0, 0x41, 0xff, 0x31, 0xed, 0xbe, 0x7d, 0xc0, 0xd7, 0x22, 0xe5, 0x69,
- 0xd2, 0xfb, 0xf6, 0xc9, 0xc5, 0x67, 0x8f, 0xcf, 0xf7, 0xa9, 0xa0, 0x96, 0x3b, 0x1d, 0xd4, 0x3e,
- 0x3a, 0x14, 0xb7, 0xc0, 0x6c, 0xd0, 0x66, 0xa2, 0x18, 0x90, 0x7c, 0x52, 0xda, 0x45, 0xd0, 0x50,
- 0x36, 0xe5, 0xce, 0xc4, 0x77, 0x15, 0x12, 0xca, 0xce, 0x1e, 0x94, 0xcf, 0x4e, 0xb1, 0x46, 0xb3,
- 0x64, 0xdb, 0x97, 0xc8, 0x51, 0x99, 0x9f, 0x52, 0xa1, 0xb0, 0x82, 0xbd, 0xf6, 0x1e, 0x72, 0xc7,
- 0xd2, 0x66, 0x0e, 0x9c, 0x6e, 0xd0, 0x66, 0x0e, 0x9c, 0xee, 0xb0, 0xa0, 0x9c, 0x69, 0xa3, 0x3f,
- 0x07, 0x6c, 0x2f, 0x12, 0x96, 0x27, 0x1d, 0xfd, 0x39, 0xb1, 0xf4, 0x09, 0x1c, 0x82, 0xcb, 0xc3,
- 0x42, 0xb8, 0x02, 0x46, 0x31, 0xfb, 0xb9, 0xdc, 0xe3, 0x6e, 0x3d, 0x74, 0x88, 0xdd, 0x8c, 0x7e,
- 0x2f, 0x5d, 0x88, 0xb5, 0x50, 0xe6, 0x62, 0xcd, 0x33, 0x5e, 0x98, 0x4c, 0x11, 0x7c, 0x4d, 0x8e,
- 0xc1, 0x09, 0xac, 0x00, 0xa8, 0x30, 0x4d, 0x18, 0x5a, 0x36, 0x2f, 0x13, 0xd7, 0x43, 0x61, 0xa1,
- 0xf2, 0xc5, 0x63, 0x59, 0xa8, 0xbc, 0x4f, 0x5c, 0xa8, 0x94, 0x8c, 0x98, 0x1c, 0xac, 0x53, 0xa6,
- 0xf4, 0xc5, 0xf1, 0xff, 0x1f, 0xfb, 0x32, 0x65, 0x0a, 0x5f, 0x9c, 0x21, 0xe5, 0x4f, 0xc0, 0xf5,
- 0xf0, 0x05, 0xac, 0xb3, 0x0e, 0x36, 0x64, 0xd1, 0xff, 0x38, 0x05, 0xf9, 0xf3, 0xfe, 0xc3, 0x3f,
- 0x44, 0x37, 0x6a, 0xbd, 0x76, 0x0c, 0xc1, 0x1d, 0x9e, 0x0b, 0x79, 0x9f, 0x3e, 0x9b, 0xf6, 0xdc,
- 0x21, 0xb7, 0x3b, 0xec, 0x33, 0xa2, 0x93, 0xff, 0xb4, 0x33, 0x50, 0x74, 0xed, 0x03, 0xa7, 0xed,
- 0x9b, 0xdf, 0xbe, 0xc6, 0xb0, 0xb7, 0xb4, 0x41, 0x4d, 0x05, 0xd2, 0x8b, 0xe3, 0x73, 0x39, 0xe5,
- 0x2e, 0x58, 0x52, 0x85, 0x0b, 0x96, 0x52, 0xec, 0x3f, 0x48, 0xf0, 0x96, 0xbd, 0x46, 0xfc, 0x11,
- 0xb9, 0x6b, 0xb0, 0x33, 0x2e, 0xd8, 0x63, 0xc4, 0x72, 0x54, 0x75, 0x48, 0xeb, 0x30, 0x2e, 0x8a,
- 0x36, 0x8c, 0x23, 0x3f, 0x51, 0x87, 0x71, 0x09, 0x1e, 0x26, 0x72, 0xca, 0xbd, 0xc8, 0x9c, 0x5c,
- 0x1f, 0x1e, 0x27, 0xba, 0x79, 0x41, 0xe9, 0x8f, 0x84, 0xce, 0x18, 0x9d, 0x5f, 0x47, 0x46, 0xe7,
- 0x98, 0xdc, 0x5f, 0x7f, 0x45, 0x25, 0x91, 0x34, 0x03, 0x23, 0x48, 0xfe, 0xa2, 0xa4, 0xd4, 0x10,
- 0xf9, 0x63, 0xb0, 0x10, 0x47, 0x7a, 0x7e, 0xf4, 0xd0, 0xe2, 0xa2, 0xe8, 0x38, 0xfe, 0x27, 0x1d,
- 0x5a, 0x5c, 0x96, 0x91, 0xec, 0x81, 0xfc, 0x09, 0x7a, 0x31, 0x59, 0xb9, 0xed, 0x99, 0x97, 0xc7,
- 0xdc, 0xd2, 0xc4, 0xe1, 0x25, 0x65, 0x34, 0xe1, 0x43, 0x12, 0xa2, 0x1c, 0x4e, 0x3a, 0x9a, 0xb0,
- 0x1c, 0x1b, 0xd9, 0xc3, 0xf4, 0xe7, 0x45, 0x5f, 0x7a, 0x6c, 0x6d, 0xe7, 0x27, 0xd9, 0x6a, 0x02,
- 0x3e, 0x3a, 0x5a, 0xe7, 0x60, 0x8e, 0x5b, 0x3a, 0x08, 0x2e, 0xbc, 0x11, 0xd2, 0xd2, 0x1e, 0x94,
- 0x0f, 0x45, 0x36, 0xf6, 0x85, 0x85, 0x14, 0x0b, 0xc6, 0x32, 0x4c, 0x4c, 0xe4, 0x3e, 0xb9, 0x60,
- 0x0c, 0x9b, 0x10, 0x56, 0x1f, 0xe2, 0xb1, 0x6a, 0x88, 0x58, 0xdd, 0x23, 0x23, 0x26, 0xb9, 0x31,
- 0x4d, 0x6a, 0xde, 0xf8, 0xae, 0x10, 0x2e, 0x5d, 0x80, 0xeb, 0xb9, 0x23, 0xf3, 0x91, 0x3d, 0x62,
- 0x3f, 0x42, 0xbb, 0xc3, 0x26, 0x35, 0xd9, 0xc7, 0xd3, 0x1d, 0xb2, 0xd9, 0x80, 0x2a, 0xcc, 0x06,
- 0x52, 0xfa, 0xeb, 0x47, 0x6e, 0xa8, 0x01, 0x73, 0xc3, 0x20, 0xca, 0x8f, 0xd9, 0x5f, 0x7f, 0x28,
- 0x07, 0xd9, 0x83, 0xf3, 0x77, 0x2a, 0xc0, 0xaa, 0x63, 0x1f, 0xf4, 0x1a, 0x4e, 0x07, 0x3b, 0xe8,
- 0x4f, 0xa2, 0x09, 0xc0, 0xf7, 0x8f, 0x61, 0x02, 0xb0, 0x09, 0xb0, 0x1b, 0x12, 0x67, 0x1a, 0xfe,
- 0x34, 0x39, 0x73, 0x3f, 0x62, 0x4a, 0xe7, 0x68, 0x88, 0x57, 0xd6, 0x3e, 0x5f, 0xc4, 0x38, 0xa9,
- 0xcf, 0x8a, 0xc8, 0x8d, 0x73, 0x02, 0xf0, 0xee, 0x10, 0xeb, 0x96, 0x80, 0xf5, 0xf3, 0x8e, 0xc0,
- 0x49, 0xf6, 0x98, 0xff, 0xfd, 0x14, 0xcc, 0xd2, 0xed, 0x3e, 0x2a, 0xd3, 0xbf, 0x8a, 0x40, 0xff,
- 0xe1, 0x31, 0x80, 0xbe, 0x05, 0x73, 0x76, 0x44, 0x9d, 0xf6, 0xa9, 0xfc, 0x02, 0x4c, 0x22, 0xec,
- 0x1c, 0x5f, 0xba, 0x40, 0x06, 0xfd, 0x32, 0x8f, 0xbc, 0x2e, 0x22, 0x7f, 0x5f, 0x82, 0xbc, 0x39,
- 0x8a, 0xe3, 0x84, 0xfe, 0x3d, 0x21, 0xf4, 0x5b, 0x02, 0xf4, 0xe5, 0xa3, 0xb0, 0x32, 0x81, 0x70,
- 0xfd, 0x2a, 0xe4, 0xc9, 0xe9, 0xba, 0x9f, 0xce, 0x70, 0x7e, 0x7f, 0x16, 0xa6, 0x48, 0x93, 0x0d,
- 0xe7, 0x1d, 0xc1, 0xab, 0xff, 0xc5, 0xd8, 0xf1, 0xb0, 0x13, 0xae, 0xdc, 0x06, 0xaf, 0x3e, 0x0f,
- 0x81, 0x57, 0xb3, 0x7b, 0xb6, 0x48, 0x37, 0x32, 0xc3, 0x84, 0x91, 0x27, 0x25, 0xbc, 0xc4, 0xc7,
- 0x76, 0xde, 0x6e, 0x94, 0x49, 0xc9, 0x10, 0x46, 0xb2, 0x07, 0xfe, 0x73, 0x79, 0x38, 0x4b, 0x57,
- 0x95, 0x56, 0x1c, 0x7b, 0xbf, 0xef, 0x76, 0x2c, 0xf3, 0xe8, 0xba, 0x70, 0x1b, 0x2c, 0x78, 0x82,
- 0x3f, 0x37, 0xd3, 0x89, 0xbe, 0x54, 0xf4, 0xdb, 0xbc, 0x4f, 0xc6, 0x0b, 0x44, 0x24, 0x97, 0x12,
- 0x04, 0x18, 0xc7, 0x7b, 0xea, 0x85, 0x7a, 0x49, 0x46, 0xb9, 0x45, 0x2a, 0x75, 0xa4, 0x35, 0xcb,
- 0x50, 0xa7, 0x0a, 0x32, 0x3a, 0xf5, 0xc1, 0x50, 0xa7, 0xfe, 0x8b, 0xa0, 0x53, 0xab, 0x47, 0x17,
- 0xc9, 0x04, 0x56, 0x2e, 0x16, 0xa0, 0xb8, 0x62, 0x76, 0x3d, 0xec, 0xa0, 0x2f, 0xb0, 0x79, 0xd4,
- 0x1b, 0x32, 0xec, 0x5e, 0x96, 0xa1, 0xb8, 0x43, 0x4a, 0x63, 0x06, 0xd9, 0x9d, 0x72, 0xd8, 0x50,
- 0x0e, 0x75, 0xf6, 0x6f, 0xda, 0xd8, 0x71, 0x7d, 0x64, 0xc6, 0x36, 0x01, 0x4b, 0x11, 0x3b, 0x6e,
- 0x38, 0x0b, 0x13, 0xb9, 0x36, 0xa9, 0xa8, 0xe3, 0x7d, 0x7f, 0x04, 0xb9, 0x94, 0x1d, 0xc2, 0x25,
- 0x50, 0xcd, 0x8e, 0x4b, 0x9a, 0xde, 0x8c, 0xee, 0x3f, 0xa6, 0xf5, 0x64, 0xe9, 0x17, 0x15, 0x65,
- 0x79, 0xd2, 0x9e, 0x2c, 0x52, 0x5c, 0x64, 0x8f, 0xd9, 0xd7, 0x88, 0x1b, 0x63, 0xaf, 0x6b, 0xb4,
- 0xb1, 0xcf, 0x7d, 0x66, 0xa8, 0x2d, 0x80, 0x62, 0x06, 0x23, 0xbe, 0x62, 0xf2, 0xed, 0xb4, 0x70,
- 0x84, 0x76, 0x3a, 0xea, 0x22, 0x57, 0x28, 0x73, 0x52, 0xf1, 0x63, 0x5b, 0xe4, 0x4a, 0x64, 0x63,
- 0x02, 0x97, 0x62, 0x06, 0xc7, 0x3c, 0x27, 0xda, 0x5a, 0x47, 0xdd, 0x02, 0x60, 0xc2, 0x1a, 0xdb,
- 0x91, 0xce, 0x51, 0xb6, 0x00, 0xe2, 0x79, 0x98, 0x00, 0x5a, 0x0b, 0x0c, 0xad, 0xcf, 0xb0, 0x61,
- 0x34, 0xe3, 0x5d, 0x38, 0xd7, 0x76, 0xbc, 0x74, 0xbb, 0x70, 0x3e, 0x77, 0x3a, 0xf9, 0x2f, 0xed,
- 0xb1, 0x20, 0xf1, 0xd4, 0xef, 0xb8, 0x86, 0xcf, 0x14, 0xc7, 0x82, 0x86, 0x31, 0x90, 0x3d, 0xbc,
- 0xef, 0x38, 0xa6, 0xc1, 0x73, 0xd4, 0xe6, 0xc8, 0xda, 0xc0, 0xd8, 0x86, 0xce, 0x51, 0x9a, 0x63,
- 0x3c, 0x0f, 0xd9, 0xe3, 0xf5, 0xb7, 0xdc, 0xc0, 0xf9, 0xb6, 0x09, 0x0e, 0x9c, 0x41, 0xcb, 0x2c,
- 0x8c, 0xd8, 0x32, 0x47, 0xdd, 0x5d, 0x60, 0xb2, 0x1e, 0xdf, 0x80, 0x39, 0xca, 0xee, 0x42, 0x02,
- 0x13, 0xd9, 0x23, 0xfe, 0x76, 0x15, 0x0a, 0xcd, 0xc9, 0x8f, 0x97, 0xa3, 0xce, 0x45, 0x88, 0xac,
- 0x9a, 0x63, 0x1b, 0x2e, 0x47, 0x99, 0x8b, 0xc4, 0xb2, 0x30, 0x81, 0xb0, 0xf0, 0x27, 0x61, 0x8e,
- 0x4c, 0xb8, 0x83, 0x4d, 0xbc, 0xbf, 0x65, 0xa3, 0xe6, 0x5b, 0x32, 0x6c, 0xab, 0x0f, 0xc2, 0x74,
- 0xb0, 0x3b, 0xc4, 0x46, 0xce, 0x45, 0xb9, 0xf6, 0x19, 0x70, 0xa9, 0x87, 0xff, 0x1f, 0x69, 0xab,
- 0x7d, 0xec, 0x3b, 0x81, 0xa3, 0x6e, 0xb5, 0x1f, 0xeb, 0x6e, 0xe0, 0x6f, 0x45, 0x23, 0xea, 0x7f,
- 0xcd, 0x0e, 0xf3, 0xfe, 0x5d, 0xc2, 0xfc, 0x80, 0x5d, 0xc2, 0x8f, 0xf3, 0x58, 0x36, 0x45, 0x2c,
- 0xef, 0x97, 0x15, 0xe1, 0x18, 0xc7, 0xda, 0xf7, 0x86, 0x70, 0x9e, 0x17, 0xe0, 0x5c, 0x3a, 0x12,
- 0x2f, 0x13, 0x38, 0x96, 0x97, 0x8f, 0xc6, 0xdc, 0x4f, 0x64, 0xd8, 0x8e, 0xfb, 0x7c, 0xfe, 0xf3,
- 0x87, 0x7c, 0xfe, 0x85, 0x96, 0x5e, 0x38, 0x62, 0x4b, 0xff, 0x04, 0xaf, 0x1d, 0x2d, 0x51, 0x3b,
- 0x9e, 0x2b, 0x8f, 0xc8, 0xf8, 0x46, 0xe6, 0xf7, 0x85, 0xea, 0x71, 0x41, 0x50, 0x8f, 0xca, 0xd1,
- 0x98, 0xc9, 0x5e, 0x3f, 0x7e, 0x35, 0x98, 0xd0, 0x1e, 0x73, 0x7b, 0x1f, 0x75, 0x23, 0x52, 0x10,
- 0xe2, 0xd8, 0x46, 0xee, 0x51, 0x36, 0x22, 0x87, 0x71, 0x32, 0x81, 0x48, 0x61, 0xf3, 0x30, 0x4b,
- 0x78, 0xba, 0x60, 0x76, 0x76, 0xb1, 0x87, 0x7e, 0x9c, 0x7a, 0xc0, 0x05, 0x71, 0x19, 0xc7, 0x14,
- 0x3c, 0x27, 0xee, 0x34, 0x66, 0x5a, 0x7f, 0x01, 0xca, 0xe4, 0x22, 0xc7, 0xe0, 0xa4, 0xe3, 0xfb,
- 0x0d, 0xe5, 0x20, 0x7b, 0xc8, 0x7e, 0x99, 0x3a, 0x73, 0xac, 0x1b, 0x57, 0xed, 0x03, 0x0f, 0xbd,
- 0x74, 0x0c, 0x1d, 0xf4, 0x12, 0x14, 0xbb, 0x84, 0x1a, 0x73, 0xfa, 0x4f, 0x9e, 0xee, 0x30, 0x11,
- 0xd0, 0xf2, 0x75, 0xf6, 0x67, 0x5a, 0xcf, 0xff, 0x48, 0x8e, 0x94, 0xce, 0xa4, 0x3d, 0xff, 0x87,
- 0x94, 0x3f, 0x91, 0x1b, 0x60, 0xa6, 0xfd, 0xd2, 0xcd, 0x7d, 0xd3, 0x1b, 0x53, 0x7c, 0x81, 0xae,
- 0x4f, 0x2b, 0x88, 0x2f, 0x40, 0x5e, 0xd2, 0x9e, 0x67, 0xe4, 0xa4, 0xe2, 0xff, 0x3e, 0xe9, 0xf3,
- 0x8c, 0xc9, 0xc5, 0x67, 0x8f, 0xc9, 0x0f, 0xd2, 0x96, 0x75, 0x9e, 0xba, 0x76, 0x66, 0xe8, 0x35,
- 0x3a, 0x72, 0x63, 0xa1, 0xac, 0x1d, 0x5f, 0x63, 0x19, 0x58, 0x7e, 0xf6, 0xc0, 0xfc, 0xd4, 0xd7,
- 0x43, 0x61, 0x19, 0x5f, 0x3c, 0xd8, 0x45, 0xf7, 0xc1, 0x74, 0xcb, 0xc1, 0xb8, 0x66, 0xed, 0xd8,
- 0xbe, 0x74, 0x3d, 0xff, 0x39, 0x80, 0x84, 0xbd, 0xf9, 0x78, 0xec, 0x61, 0xa3, 0x13, 0x9d, 0x6e,
- 0x0a, 0x5e, 0xd1, 0x6b, 0x15, 0xc8, 0x37, 0x3d, 0xc3, 0x43, 0x33, 0x21, 0xb6, 0xe8, 0xa5, 0x3c,
- 0x16, 0xf7, 0x89, 0x58, 0xdc, 0x26, 0xc8, 0x82, 0x70, 0xb0, 0xe8, 0xff, 0x1f, 0x03, 0x00, 0x82,
- 0xe9, 0x47, 0x5c, 0xdb, 0xf2, 0x73, 0x04, 0x07, 0xf0, 0x82, 0x77, 0xf4, 0xfa, 0x50, 0xdc, 0x0f,
- 0x08, 0xe2, 0x7e, 0x8a, 0x5c, 0x11, 0x13, 0x58, 0x69, 0x53, 0x60, 0xc6, 0x17, 0xed, 0x1a, 0x36,
- 0x3a, 0x2e, 0xfa, 0xba, 0x48, 0xf9, 0x63, 0xc4, 0x8c, 0x3e, 0x2c, 0x1d, 0x2a, 0x92, 0xd6, 0x2a,
- 0x24, 0x1e, 0xef, 0x2f, 0x10, 0x84, 0xca, 0x50, 0xc4, 0x50, 0x19, 0x77, 0x41, 0xde, 0xb4, 0x76,
- 0x6c, 0xe6, 0xbd, 0x76, 0x43, 0x0c, 0x6d, 0x5f, 0x27, 0x74, 0x92, 0x51, 0x32, 0x8e, 0x64, 0x32,
- 0x5b, 0x13, 0xb9, 0x92, 0x2d, 0xef, 0x97, 0x8e, 0xfe, 0x8f, 0xa1, 0xc2, 0xd6, 0x34, 0xc8, 0xf7,
- 0x0c, 0x6f, 0x8f, 0x15, 0x4d, 0x9e, 0x7d, 0x1b, 0xf9, 0xc0, 0x32, 0x2c, 0xdb, 0xba, 0xba, 0x6f,
- 0xbe, 0x28, 0xbc, 0xf9, 0x55, 0x48, 0xf3, 0x39, 0xdf, 0xc5, 0x16, 0x76, 0x0c, 0x0f, 0x37, 0x2f,
- 0xef, 0x92, 0x39, 0xd6, 0xb4, 0xce, 0x27, 0xa5, 0xd6, 0x7f, 0x9f, 0xe3, 0x78, 0xfd, 0xdf, 0x31,
- 0xbb, 0x98, 0xc4, 0x11, 0x62, 0xfa, 0x1f, 0xbc, 0xa7, 0xd2, 0xff, 0x01, 0x45, 0x64, 0x8f, 0xc6,
- 0xbf, 0x28, 0x30, 0xd7, 0xf4, 0x15, 0xae, 0x79, 0xb0, 0xbf, 0x6f, 0x38, 0x57, 0xd1, 0x13, 0x23,
- 0x54, 0x38, 0xd5, 0xcc, 0x09, 0xaa, 0x89, 0x7e, 0x45, 0xfa, 0xd2, 0x63, 0xd6, 0xb4, 0xb9, 0x12,
- 0x52, 0xb7, 0x83, 0xa7, 0x43, 0xc1, 0x57, 0xef, 0xc0, 0x9f, 0x2f, 0xb1, 0x21, 0xd0, 0x9c, 0x92,
- 0xf1, 0x96, 0x86, 0xf2, 0x36, 0x81, 0x58, 0x0f, 0x0a, 0x9c, 0x6c, 0x7a, 0x46, 0xfb, 0xd2, 0xaa,
- 0xed, 0xd8, 0x07, 0x9e, 0x69, 0x61, 0x17, 0x3d, 0x21, 0x42, 0x20, 0xd0, 0xff, 0x5c, 0xa4, 0xff,
- 0xe8, 0xdf, 0x72, 0xb2, 0xa3, 0x68, 0xd8, 0xad, 0xf2, 0xe4, 0x63, 0xc2, 0x27, 0xc9, 0x8d, 0x8b,
- 0x32, 0x14, 0xb3, 0x17, 0xda, 0xdb, 0x54, 0x28, 0x55, 0x1f, 0xed, 0xd9, 0x8e, 0xb7, 0x6e, 0xb7,
- 0x8d, 0xae, 0xeb, 0xd9, 0x0e, 0x46, 0x8d, 0x44, 0xa9, 0xf9, 0x3d, 0x4c, 0xc7, 0x6e, 0x47, 0x83,
- 0x23, 0x7b, 0xe3, 0xd5, 0x4e, 0x15, 0x75, 0xfc, 0x97, 0xa5, 0x77, 0x19, 0xa9, 0x54, 0xfa, 0x39,
- 0x8a, 0xd1, 0xf3, 0x41, 0x5d, 0x5a, 0x3a, 0x57, 0x7c, 0xb9, 0x9d, 0x47, 0x29, 0xa6, 0x26, 0xb0,
- 0x54, 0xae, 0xc0, 0x7c, 0xf3, 0xe0, 0x62, 0x48, 0xc4, 0xe5, 0x8d, 0x90, 0x37, 0x4a, 0xc7, 0x48,
- 0x60, 0x8a, 0xc7, 0x13, 0x8a, 0x91, 0xef, 0xad, 0x30, 0xef, 0xf2, 0xd9, 0x18, 0xde, 0x62, 0xa2,
- 0x64, 0x6c, 0x84, 0xe1, 0xa5, 0x66, 0x2f, 0xc0, 0xf7, 0x29, 0x30, 0xdf, 0xe8, 0x61, 0x0b, 0x77,
- 0xa8, 0x8f, 0x9d, 0x20, 0xc0, 0xd7, 0xa6, 0x14, 0xa0, 0x40, 0x28, 0x46, 0x80, 0x91, 0x3f, 0xec,
- 0x72, 0x20, 0xbc, 0x28, 0x21, 0x95, 0xe0, 0x92, 0x4a, 0xcb, 0x5e, 0x70, 0x9f, 0x57, 0x60, 0x56,
- 0x3f, 0xb0, 0x36, 0x1d, 0xdb, 0x1f, 0x8d, 0x1d, 0x74, 0x7f, 0xd4, 0x41, 0xdc, 0x09, 0xa7, 0x3a,
- 0x07, 0x0e, 0x59, 0x7f, 0xaa, 0x59, 0x4d, 0xdc, 0xb6, 0xad, 0x8e, 0x4b, 0xea, 0x51, 0xd0, 0x0f,
- 0x7f, 0xb8, 0x37, 0xff, 0xf2, 0xbf, 0x50, 0x73, 0xe8, 0x15, 0xd2, 0x81, 0x58, 0x68, 0xe5, 0xb9,
- 0xa2, 0xe5, 0x7b, 0x02, 0xc9, 0x70, 0x2b, 0xc3, 0x4a, 0xc8, 0x5e, 0xb8, 0x9f, 0x51, 0x40, 0x2b,
- 0xb7, 0xdb, 0xf6, 0x81, 0xe5, 0x35, 0x71, 0x17, 0xb7, 0xbd, 0x96, 0x63, 0xb4, 0x31, 0x6f, 0x3f,
- 0x97, 0x40, 0xed, 0x98, 0x0e, 0xeb, 0x83, 0xfd, 0x47, 0x26, 0xc7, 0xd7, 0x4a, 0xef, 0x38, 0xd2,
- 0x5a, 0x1e, 0x2e, 0x25, 0x85, 0x38, 0xe5, 0xf6, 0x15, 0x25, 0x0b, 0xca, 0x5e, 0xaa, 0x9f, 0x50,
- 0x60, 0x26, 0xe8, 0xb1, 0x77, 0x65, 0x84, 0xf9, 0x83, 0x29, 0x27, 0x23, 0x21, 0xf1, 0x14, 0x32,
- 0x7c, 0x2c, 0xc5, 0xac, 0x22, 0x8e, 0x7e, 0x3a, 0xd1, 0x95, 0xd3, 0x8b, 0xce, 0x7f, 0xad, 0x37,
- 0xb6, 0x57, 0x1a, 0xeb, 0xcb, 0x55, 0xbd, 0xa4, 0xa2, 0x2f, 0x28, 0x90, 0xdf, 0x34, 0xad, 0x5d,
- 0x3e, 0x5e, 0xd6, 0x69, 0xdf, 0x8e, 0xec, 0xe0, 0x47, 0x59, 0x4b, 0xa7, 0x2f, 0xda, 0xdd, 0x70,
- 0xda, 0x3a, 0xd8, 0xbf, 0x88, 0x9d, 0xc6, 0x0e, 0x19, 0x65, 0xdd, 0x96, 0xdd, 0xc4, 0x16, 0x35,
- 0x42, 0x0b, 0xfa, 0xc0, 0x6f, 0xa2, 0x09, 0x26, 0x31, 0x79, 0xf0, 0x39, 0x89, 0x91, 0x78, 0xc8,
- 0x94, 0xc2, 0x31, 0x95, 0x6a, 0xda, 0x30, 0x80, 0x78, 0xf6, 0x9a, 0xfa, 0x6b, 0x05, 0xb8, 0xb6,
- 0x6c, 0x5d, 0x25, 0x36, 0x05, 0xed, 0xe0, 0x2b, 0x7b, 0x86, 0xb5, 0x8b, 0xc9, 0x00, 0x11, 0x4a,
- 0x9c, 0x0f, 0x20, 0x9f, 0x13, 0x03, 0xc8, 0x6b, 0x3a, 0x4c, 0xd9, 0x4e, 0x07, 0x3b, 0x4b, 0x57,
- 0x09, 0x4f, 0xfd, 0xcb, 0xce, 0xac, 0x4d, 0x0e, 0x2a, 0x62, 0x91, 0x91, 0x5f, 0x6c, 0xd0, 0xff,
- 0xf5, 0x80, 0xd0, 0xb9, 0x3b, 0x61, 0x8a, 0xa5, 0x69, 0x73, 0x30, 0xdd, 0xd0, 0x97, 0xab, 0xfa,
- 0x76, 0x6d, 0xb9, 0x74, 0x42, 0xbb, 0x06, 0x4e, 0xd6, 0x5a, 0x55, 0xbd, 0xdc, 0xaa, 0x35, 0xea,
- 0xdb, 0x24, 0xbd, 0x94, 0x43, 0x2f, 0xcb, 0xcb, 0x7a, 0xf6, 0x26, 0x33, 0x33, 0x08, 0x56, 0x1d,
- 0xa6, 0xda, 0x34, 0x03, 0x19, 0x42, 0x67, 0x53, 0xd5, 0x8e, 0x11, 0xa4, 0x09, 0x7a, 0x40, 0x48,
- 0xbb, 0x09, 0xe0, 0x8a, 0x63, 0x5b, 0xbb, 0xd1, 0x99, 0xb6, 0x69, 0x9d, 0x4b, 0x41, 0x2f, 0xcd,
- 0x41, 0x91, 0xfe, 0x43, 0x2e, 0xcc, 0x20, 0x4f, 0x91, 0xe0, 0x83, 0x77, 0xdf, 0xe2, 0x25, 0xf2,
- 0x8a, 0x26, 0x5a, 0xec, 0xd5, 0xd7, 0x45, 0x2a, 0x03, 0x6a, 0x09, 0xb3, 0xaa, 0xdc, 0x05, 0x45,
- 0xfa, 0x2f, 0xf3, 0x3a, 0x88, 0x0f, 0x7e, 0x49, 0xb3, 0x49, 0xfa, 0x29, 0xcb, 0xcb, 0x34, 0x7b,
- 0x6d, 0xfe, 0x88, 0x02, 0xd3, 0x75, 0xec, 0x55, 0xf6, 0x70, 0xfb, 0x12, 0x7a, 0xb2, 0xb8, 0x00,
- 0xda, 0x35, 0xb1, 0xe5, 0x3d, 0xbc, 0xdf, 0x0d, 0x17, 0x40, 0x83, 0x04, 0xf4, 0x9d, 0x7c, 0xe7,
- 0xfb, 0x3c, 0x51, 0x7f, 0xee, 0x18, 0x50, 0xd7, 0xa0, 0x84, 0x18, 0x95, 0x39, 0x03, 0x45, 0x07,
- 0xbb, 0x07, 0xdd, 0x60, 0x11, 0x8d, 0xbd, 0xa1, 0x37, 0x85, 0xe2, 0xac, 0x08, 0xe2, 0xbc, 0x4b,
- 0xbe, 0x88, 0x09, 0x44, 0xd3, 0xcc, 0xc3, 0x54, 0xcd, 0x32, 0x3d, 0xd3, 0xe8, 0xa2, 0x57, 0xe4,
- 0x61, 0xbe, 0x89, 0xbd, 0x4d, 0xc3, 0x31, 0xf6, 0xb1, 0x87, 0x1d, 0x17, 0x7d, 0x55, 0xec, 0x13,
- 0x7a, 0x5d, 0xc3, 0xdb, 0xb1, 0x9d, 0xfd, 0x40, 0x35, 0x83, 0x77, 0x5f, 0x35, 0x2f, 0x63, 0xc7,
- 0x8d, 0xf8, 0x0a, 0x5e, 0xfd, 0x2f, 0x57, 0x6c, 0xe7, 0x92, 0x3f, 0x08, 0xb2, 0x69, 0x1a, 0x7b,
- 0xf5, 0xe9, 0x75, 0xed, 0xdd, 0x75, 0x7c, 0x19, 0x07, 0xc1, 0xba, 0xc2, 0x77, 0x7f, 0x2e, 0xd0,
- 0xb1, 0xeb, 0xb6, 0xe7, 0x77, 0xda, 0xeb, 0xf6, 0x2e, 0x8d, 0x66, 0x3a, 0xad, 0x8b, 0x89, 0x51,
- 0x2e, 0xe3, 0x32, 0x26, 0xb9, 0x8a, 0x7c, 0x2e, 0x96, 0xa8, 0x2d, 0x82, 0x16, 0xfe, 0xd6, 0xc2,
- 0x5d, 0xbc, 0x8f, 0x3d, 0xe7, 0x2a, 0xb9, 0xb4, 0x60, 0x5a, 0x1f, 0xf0, 0x85, 0x0d, 0xd0, 0xf2,
- 0x93, 0x75, 0x26, 0xbd, 0x45, 0x41, 0x72, 0x47, 0x9a, 0xac, 0xcb, 0x50, 0x9c, 0xc8, 0xa5, 0x4c,
- 0xaa, 0x6f, 0xcd, 0xfc, 0xa8, 0x0a, 0x79, 0x32, 0x78, 0xbe, 0x3d, 0x27, 0xac, 0x30, 0xed, 0x63,
- 0xd7, 0x35, 0x76, 0x71, 0xb0, 0xc2, 0xc4, 0x5e, 0xb5, 0x7b, 0xa0, 0xd0, 0x25, 0x98, 0xd2, 0xc1,
- 0xe1, 0x89, 0x42, 0xcd, 0x7c, 0x03, 0xc3, 0xa7, 0x15, 0x8e, 0x04, 0x04, 0x6e, 0x9d, 0xfe, 0x71,
- 0xee, 0x41, 0x28, 0x50, 0xf8, 0x67, 0xa0, 0xb0, 0x5c, 0x5d, 0xda, 0x5a, 0x2d, 0x9d, 0xf0, 0x1f,
- 0x03, 0xfe, 0x66, 0xa0, 0xb0, 0x52, 0x6e, 0x95, 0xd7, 0x4b, 0x8a, 0x5f, 0x8f, 0x5a, 0x7d, 0xa5,
- 0x51, 0x52, 0xfd, 0xc4, 0xcd, 0x72, 0xbd, 0x56, 0x29, 0xe5, 0xb5, 0x59, 0x98, 0xba, 0x50, 0xd6,
- 0xeb, 0xb5, 0xfa, 0x6a, 0xa9, 0x80, 0xfe, 0x9c, 0xc7, 0xef, 0x5e, 0x11, 0xbf, 0x5b, 0xe3, 0x78,
- 0x1a, 0x04, 0xd9, 0x8f, 0x85, 0x90, 0xdd, 0x2f, 0x40, 0xf6, 0xf5, 0x32, 0x44, 0x26, 0xe0, 0xce,
- 0x54, 0x84, 0xa9, 0x4d, 0xc7, 0x6e, 0x63, 0xd7, 0x45, 0x3f, 0xa4, 0x40, 0xb1, 0x62, 0x58, 0x6d,
- 0xdc, 0x45, 0xd7, 0x47, 0x50, 0x51, 0x57, 0xd1, 0x5c, 0xe0, 0x2a, 0x8a, 0xfe, 0x2e, 0x27, 0xdb,
- 0xfb, 0x31, 0xba, 0x8b, 0x94, 0x66, 0x8c, 0x7c, 0xe4, 0x7a, 0xb9, 0x44, 0x52, 0x13, 0xb8, 0xb8,
- 0x45, 0x81, 0x19, 0xb6, 0x1a, 0x70, 0x11, 0xf3, 0xf3, 0xf0, 0xaf, 0xe6, 0x64, 0x27, 0x87, 0x41,
- 0x0d, 0x42, 0x32, 0x31, 0xf2, 0x90, 0x9b, 0x08, 0x0e, 0xa3, 0x36, 0x81, 0xcd, 0x43, 0x05, 0x66,
- 0xb7, 0x2c, 0x77, 0x90, 0x50, 0xe4, 0xa3, 0xbc, 0x07, 0xd5, 0xe0, 0x08, 0x1d, 0x29, 0xca, 0xfb,
- 0x70, 0x7a, 0xd9, 0x0b, 0xe6, 0xab, 0x39, 0x38, 0xbd, 0x8a, 0x2d, 0xec, 0x98, 0x6d, 0x5a, 0x83,
- 0x40, 0x12, 0xf7, 0x8b, 0x92, 0x78, 0xb2, 0xc0, 0xf9, 0xa0, 0x3f, 0x44, 0x09, 0xbc, 0x21, 0x94,
- 0xc0, 0xf3, 0x04, 0x09, 0xdc, 0x29, 0x49, 0x67, 0x02, 0xb7, 0x75, 0xcf, 0xc0, 0x5c, 0xdd, 0xf6,
- 0xcc, 0x1d, 0xb3, 0x4d, 0x7d, 0xd0, 0x7e, 0x44, 0x85, 0xfc, 0xba, 0xe9, 0x7a, 0xa8, 0x1c, 0x75,
- 0x27, 0xb7, 0xc0, 0xac, 0x69, 0xb5, 0xbb, 0x07, 0x1d, 0xac, 0x63, 0x83, 0xf6, 0x2b, 0xd3, 0x3a,
- 0x9f, 0x14, 0x6d, 0xed, 0xfb, 0x6c, 0xa9, 0xc1, 0xd6, 0xfe, 0x6f, 0x4a, 0x2f, 0xc3, 0xf0, 0x2c,
- 0x90, 0x70, 0x87, 0x31, 0x76, 0x57, 0x19, 0xe6, 0x2d, 0x2e, 0x6b, 0x60, 0xb0, 0xf7, 0x87, 0xbb,
- 0xe7, 0xc9, 0xe9, 0xe2, 0x1f, 0xe8, 0x03, 0x52, 0x8d, 0x75, 0x18, 0x43, 0xe9, 0x90, 0x59, 0x19,
- 0x61, 0x92, 0xac, 0xc1, 0x42, 0xad, 0xde, 0xaa, 0xea, 0xf5, 0xf2, 0x3a, 0xcb, 0xa2, 0xa2, 0x7f,
- 0x51, 0xa0, 0xa0, 0xe3, 0x5e, 0xf7, 0x2a, 0x1f, 0xcf, 0x98, 0x39, 0x8a, 0xe7, 0x42, 0x47, 0x71,
- 0x6d, 0x05, 0xc0, 0x68, 0xfb, 0x05, 0x93, 0x0b, 0x9f, 0x94, 0x81, 0x51, 0x32, 0x85, 0x0a, 0x96,
- 0xc3, 0xdc, 0x3a, 0xf7, 0x27, 0x7a, 0xa5, 0xf4, 0xce, 0x91, 0x40, 0x8d, 0x70, 0x18, 0xd3, 0x27,
- 0x7c, 0x50, 0x6a, 0xb3, 0x67, 0x28, 0xb9, 0xe3, 0x11, 0xff, 0x17, 0x15, 0xc8, 0xb7, 0xfc, 0xde,
- 0x92, 0xeb, 0x38, 0x7f, 0x7d, 0x34, 0x1d, 0xf7, 0xc9, 0xc4, 0xe8, 0xf8, 0x03, 0x30, 0xc7, 0x6b,
- 0x2c, 0x73, 0x95, 0x48, 0x54, 0x71, 0xe1, 0x87, 0x51, 0x34, 0x7c, 0x00, 0x3b, 0xc7, 0x23, 0xe2,
- 0x4f, 0x3e, 0x05, 0x60, 0x03, 0xef, 0x5f, 0xc4, 0x8e, 0xbb, 0x67, 0xf6, 0xd0, 0x5f, 0xaa, 0x30,
- 0xb3, 0x8a, 0xbd, 0xa6, 0x67, 0x78, 0x07, 0x6e, 0xdf, 0x76, 0xa7, 0x65, 0x57, 0x8c, 0xf6, 0x1e,
- 0x66, 0xdd, 0x51, 0xf0, 0x8a, 0xde, 0xa3, 0xca, 0xfa, 0x13, 0x45, 0xe5, 0x2c, 0x86, 0x65, 0xc4,
- 0x60, 0xf2, 0x54, 0xc8, 0x77, 0x0c, 0xcf, 0x60, 0x58, 0x5c, 0xdf, 0x87, 0x45, 0x44, 0x48, 0x27,
- 0xd9, 0xd0, 0xcf, 0x29, 0x32, 0x0e, 0x45, 0x12, 0xe5, 0xa7, 0x03, 0xe1, 0x03, 0xb9, 0x11, 0x50,
- 0x38, 0x05, 0xf3, 0xf5, 0x46, 0x6b, 0x7b, 0xbd, 0xb1, 0xba, 0x5a, 0xf5, 0x53, 0x4b, 0xaa, 0x76,
- 0x06, 0xb4, 0xcd, 0xf2, 0xc3, 0x1b, 0xd5, 0x7a, 0x6b, 0xbb, 0xde, 0x58, 0xae, 0xb2, 0x3f, 0xf3,
- 0xda, 0x49, 0x98, 0xad, 0x94, 0x2b, 0x6b, 0x41, 0x42, 0x41, 0x3b, 0x0b, 0xa7, 0x37, 0xaa, 0x1b,
- 0x4b, 0x55, 0xbd, 0xb9, 0x56, 0xdb, 0xdc, 0xf6, 0xc9, 0xac, 0x34, 0xb6, 0xea, 0xcb, 0xa5, 0xa2,
- 0x86, 0xe0, 0x0c, 0xf7, 0xe5, 0x82, 0xde, 0xa8, 0xaf, 0x6e, 0x37, 0x5b, 0xe5, 0x56, 0xb5, 0x34,
- 0xa5, 0x5d, 0x03, 0x27, 0x2b, 0xe5, 0x3a, 0xc9, 0x5e, 0x69, 0xd4, 0xeb, 0xd5, 0x4a, 0xab, 0x34,
- 0x8d, 0xfe, 0x2d, 0x0f, 0xb3, 0x35, 0xb7, 0x6e, 0xec, 0xe3, 0xf3, 0x46, 0xd7, 0xec, 0xa0, 0x57,
- 0x70, 0x33, 0x8f, 0x5b, 0x61, 0xde, 0xa1, 0x8f, 0xb8, 0xd3, 0x32, 0x31, 0x45, 0x73, 0x5e, 0x17,
- 0x13, 0xfd, 0x39, 0xb9, 0x45, 0x08, 0x04, 0x73, 0x72, 0xfa, 0xa6, 0x2d, 0x01, 0xd0, 0xa7, 0x56,
- 0x74, 0xf5, 0xe8, 0xb9, 0xfe, 0xd6, 0x64, 0xec, 0x63, 0x17, 0x3b, 0x97, 0xcd, 0x36, 0x0e, 0x72,
- 0xea, 0xdc, 0x5f, 0xe8, 0x4b, 0xaa, 0xec, 0xfe, 0x22, 0x07, 0x2a, 0x57, 0x9d, 0x98, 0xde, 0xf0,
- 0xbb, 0x54, 0x99, 0xdd, 0x41, 0x29, 0x92, 0xe9, 0x34, 0xe5, 0xd5, 0xca, 0x68, 0xcb, 0xb6, 0xad,
- 0x46, 0x63, 0xbb, 0xb9, 0xd6, 0xd0, 0x5b, 0x25, 0x55, 0x9b, 0x83, 0x69, 0xff, 0x75, 0xbd, 0x51,
- 0x5f, 0x2d, 0xe5, 0xb5, 0x6b, 0xe1, 0xd4, 0x5a, 0xb9, 0xb9, 0x5d, 0xab, 0x9f, 0x2f, 0xaf, 0xd7,
- 0x96, 0xb7, 0x2b, 0x6b, 0x65, 0xbd, 0x59, 0x2a, 0x68, 0xd7, 0xc3, 0xb5, 0xad, 0x5a, 0x55, 0xdf,
- 0x5e, 0xa9, 0x96, 0x5b, 0x5b, 0x7a, 0xb5, 0xb9, 0x5d, 0x6f, 0x6c, 0xd7, 0xcb, 0x1b, 0xd5, 0x52,
- 0xd1, 0x6f, 0xfe, 0xe4, 0x53, 0xa4, 0x36, 0x53, 0x87, 0x95, 0x71, 0x3a, 0x46, 0x19, 0x67, 0xfa,
- 0x95, 0x11, 0x78, 0xb5, 0xd2, 0xab, 0xcd, 0xaa, 0x7e, 0xbe, 0x5a, 0x9a, 0x1d, 0xa4, 0x6b, 0x73,
- 0xda, 0x69, 0x28, 0xf9, 0x3c, 0x6c, 0xd7, 0x9a, 0x41, 0xce, 0xe5, 0xd2, 0x3c, 0xfa, 0x44, 0x11,
- 0xce, 0xe8, 0x78, 0xd7, 0x74, 0x3d, 0xec, 0x6c, 0x1a, 0x57, 0xf7, 0xb1, 0xe5, 0x05, 0x9d, 0xfc,
- 0x3f, 0xa5, 0x56, 0xc6, 0x0d, 0x98, 0xef, 0x51, 0x1a, 0x1b, 0xd8, 0xdb, 0xb3, 0x3b, 0x6c, 0x14,
- 0x7e, 0x72, 0x6c, 0xcf, 0xb1, 0xb8, 0xc9, 0x67, 0xd7, 0xc5, 0xbf, 0x39, 0xdd, 0x56, 0x13, 0x74,
- 0x3b, 0x3f, 0x8a, 0x6e, 0x6b, 0x37, 0xc2, 0xcc, 0x81, 0x8b, 0x9d, 0xea, 0xbe, 0x61, 0x76, 0x83,
- 0xab, 0x23, 0xc3, 0x04, 0xf4, 0xae, 0xbc, 0xec, 0x89, 0x15, 0xae, 0x2e, 0x83, 0xc5, 0x18, 0xd3,
- 0xb7, 0xde, 0x04, 0xc0, 0x2a, 0xbb, 0xe5, 0x74, 0x99, 0xb2, 0x72, 0x29, 0x3e, 0x7f, 0x17, 0xcd,
- 0x6e, 0xd7, 0xb4, 0x76, 0xc3, 0x7d, 0xff, 0x28, 0x01, 0xbd, 0x5a, 0x95, 0x39, 0xc1, 0x92, 0x96,
- 0xb7, 0x74, 0xad, 0xe9, 0x95, 0xca, 0x84, 0xfb, 0xdd, 0xc3, 0x4d, 0xa7, 0xa8, 0x95, 0x60, 0x8e,
- 0xa4, 0xb1, 0x16, 0x58, 0x9a, 0xf2, 0xfb, 0xe0, 0x80, 0xdc, 0x46, 0xb5, 0xb5, 0xd6, 0x58, 0x0e,
- 0xbf, 0x4d, 0xfb, 0x24, 0x7d, 0x66, 0xca, 0xf5, 0x87, 0x49, 0x6b, 0x9c, 0xd1, 0x9e, 0x00, 0xd7,
- 0x73, 0x1d, 0x76, 0x79, 0x5d, 0xaf, 0x96, 0x97, 0x1f, 0xde, 0xae, 0xbe, 0xa0, 0xd6, 0x6c, 0x35,
- 0xc5, 0xc6, 0x15, 0xb4, 0xa3, 0x59, 0x9f, 0xdf, 0xea, 0x46, 0xb9, 0xb6, 0xce, 0xfa, 0xf7, 0x95,
- 0x86, 0xbe, 0x51, 0x6e, 0x95, 0xe6, 0xd0, 0x8f, 0xaa, 0x50, 0x5a, 0xc5, 0xde, 0xa6, 0xed, 0x78,
- 0x46, 0x77, 0xdd, 0xb4, 0x2e, 0x6d, 0x39, 0x5d, 0x61, 0xb2, 0x29, 0x1d, 0xa6, 0x43, 0x1c, 0x22,
- 0x05, 0x82, 0xf1, 0x3b, 0xe2, 0x3d, 0x92, 0x2d, 0x52, 0xa6, 0x28, 0x01, 0xbd, 0x58, 0x91, 0x59,
- 0xee, 0x96, 0x2f, 0x35, 0x9d, 0x9e, 0xbc, 0x64, 0xd2, 0xe3, 0xf3, 0x00, 0xd4, 0x8a, 0xe8, 0xe5,
- 0x79, 0x98, 0x5e, 0x31, 0x2d, 0xa3, 0x6b, 0xbe, 0x48, 0x88, 0x8e, 0x19, 0xf5, 0x31, 0xb9, 0x84,
- 0x3e, 0x46, 0x19, 0x69, 0xfc, 0xfc, 0x01, 0x55, 0x76, 0x79, 0x81, 0x93, 0x7d, 0xc0, 0x64, 0xcc,
- 0xe0, 0xf9, 0x51, 0x45, 0x66, 0x79, 0x61, 0x38, 0xbd, 0x74, 0x18, 0x7e, 0xea, 0xdf, 0x87, 0x8d,
- 0xd5, 0xd7, 0xbe, 0xa7, 0x07, 0xa9, 0xc2, 0x0c, 0xfa, 0x5d, 0x15, 0xd0, 0x2a, 0xf6, 0xce, 0x63,
- 0x27, 0x9c, 0x0a, 0x90, 0x5e, 0x9f, 0xd9, 0xdb, 0x5c, 0x93, 0x7d, 0x3b, 0x0f, 0xe0, 0x05, 0x11,
- 0xc0, 0x72, 0x42, 0xe3, 0x89, 0x21, 0x1d, 0xd3, 0x78, 0x6b, 0x50, 0x74, 0xc9, 0x77, 0xa6, 0x66,
- 0x4f, 0x8f, 0x1f, 0x2e, 0x09, 0x31, 0x9e, 0x3a, 0x25, 0xac, 0x33, 0x02, 0xe8, 0x6b, 0xe1, 0x24,
- 0xe8, 0x9b, 0x04, 0xed, 0x58, 0x39, 0x32, 0xb3, 0xe9, 0xf4, 0xc5, 0xc9, 0x56, 0x5d, 0x06, 0xd9,
- 0x37, 0xe8, 0xa3, 0x05, 0x38, 0x3d, 0xa8, 0x3a, 0xe8, 0xe7, 0x73, 0xc2, 0x0e, 0x3b, 0x26, 0x43,
- 0x7e, 0x8e, 0x6d, 0x20, 0xfa, 0x2f, 0xda, 0x33, 0xe1, 0xda, 0x70, 0x19, 0xae, 0x65, 0xd7, 0xf1,
- 0x15, 0xb7, 0x8b, 0x3d, 0x0f, 0x3b, 0xa4, 0x6a, 0xd3, 0xfa, 0xe0, 0x8f, 0xda, 0xb3, 0xe1, 0x3a,
- 0xd3, 0x72, 0xcd, 0x0e, 0x76, 0x5a, 0x66, 0xcf, 0x2d, 0x5b, 0x9d, 0xd6, 0x81, 0x67, 0x3b, 0xa6,
- 0xc1, 0x2e, 0x3a, 0x9c, 0xd6, 0xe3, 0x3e, 0x6b, 0x77, 0x40, 0xc9, 0x74, 0x1b, 0xd6, 0x45, 0xdb,
- 0x70, 0x3a, 0xa6, 0xb5, 0xbb, 0x6e, 0xba, 0x1e, 0xf3, 0x00, 0x3e, 0x94, 0x8e, 0xfe, 0x4a, 0x95,
- 0x3d, 0x4c, 0x37, 0x04, 0xd6, 0x98, 0x0e, 0xe5, 0x3b, 0x55, 0x99, 0xe3, 0x71, 0xe9, 0x68, 0xa7,
- 0x53, 0x96, 0x97, 0x4d, 0xda, 0x90, 0x18, 0x3c, 0x82, 0x93, 0xae, 0x85, 0xa6, 0x07, 0x86, 0xc0,
- 0xf9, 0xaa, 0x5e, 0x5b, 0xa9, 0x55, 0x7d, 0xb3, 0xe2, 0x5a, 0x38, 0x15, 0x7d, 0x5b, 0x7e, 0x78,
- 0xbb, 0x59, 0xad, 0xb7, 0x4a, 0xd3, 0x7e, 0x3f, 0x45, 0x93, 0x57, 0xca, 0xb5, 0xf5, 0xea, 0xf2,
- 0x76, 0xab, 0xe1, 0x7f, 0x59, 0x1e, 0xcd, 0xb4, 0x40, 0x2f, 0xcd, 0xc3, 0x49, 0x22, 0xdb, 0xab,
- 0x44, 0xaa, 0xbe, 0x50, 0xfa, 0x7c, 0x6d, 0x43, 0x80, 0x66, 0xa8, 0x78, 0xd1, 0xef, 0x48, 0xdf,
- 0xe3, 0xc8, 0x41, 0xd8, 0x57, 0x46, 0x8c, 0x66, 0x7c, 0x55, 0x91, 0x89, 0x50, 0x21, 0x4d, 0x36,
- 0x9d, 0x52, 0xfc, 0xf3, 0xa4, 0x47, 0x9c, 0x78, 0xf0, 0x89, 0x95, 0x59, 0x21, 0x3f, 0xbf, 0x60,
- 0xb3, 0xa6, 0x13, 0x75, 0x58, 0x00, 0x20, 0x29, 0x44, 0x83, 0xa8, 0x1e, 0x0c, 0x1c, 0xaf, 0xe2,
- 0xf4, 0xa0, 0x5c, 0x69, 0xd5, 0xce, 0x57, 0xe3, 0xf4, 0xe0, 0xd3, 0x2a, 0x4c, 0xaf, 0x62, 0xcf,
- 0x9f, 0x53, 0xb9, 0xe8, 0x39, 0x12, 0xeb, 0x3f, 0xbe, 0x19, 0x43, 0x2e, 0xbe, 0x0f, 0x97, 0x01,
- 0xe8, 0x1b, 0xfa, 0x8e, 0x51, 0x4c, 0x90, 0xa0, 0xe8, 0x98, 0xf1, 0xea, 0x1b, 0xa1, 0xe0, 0xf9,
- 0x9f, 0xd9, 0x32, 0xf4, 0xd7, 0xc5, 0x0e, 0x57, 0x3e, 0x91, 0x65, 0xc3, 0x33, 0x74, 0x9a, 0x9f,
- 0x1b, 0x9d, 0x24, 0x6d, 0x97, 0x18, 0x46, 0xfe, 0x3d, 0xda, 0x9f, 0x7f, 0xae, 0xc2, 0xb5, 0xb4,
- 0x7d, 0x94, 0x7b, 0xbd, 0xa6, 0x67, 0x3b, 0x58, 0xc7, 0x6d, 0x6c, 0xf6, 0xbc, 0xbe, 0xf5, 0x3d,
- 0x87, 0xa6, 0x06, 0x9b, 0xcd, 0xec, 0x15, 0xfd, 0xa4, 0x2a, 0x1b, 0xe1, 0xf7, 0x50, 0x7b, 0xec,
- 0x2b, 0x2f, 0xa6, 0xb1, 0x7f, 0x5c, 0x91, 0x89, 0xd9, 0x9b, 0x92, 0x78, 0x3a, 0xa0, 0x7e, 0xe9,
- 0x18, 0x80, 0x0a, 0x56, 0x6e, 0xf4, 0x6a, 0xa5, 0x5a, 0xdb, 0xf4, 0x07, 0x81, 0x9b, 0xe1, 0x86,
- 0xcd, 0x2d, 0xbd, 0xb2, 0x56, 0x6e, 0x56, 0xb7, 0xf5, 0xea, 0x6a, 0xad, 0xd9, 0x62, 0x4e, 0x59,
- 0xf4, 0xaf, 0x29, 0xed, 0x46, 0x38, 0xdb, 0xdc, 0x5a, 0x6a, 0x56, 0xf4, 0xda, 0x26, 0x49, 0xd7,
- 0xab, 0xf5, 0xea, 0x05, 0xf6, 0x75, 0x1a, 0x7d, 0xb8, 0x04, 0xb3, 0xfe, 0x04, 0xa0, 0x49, 0xe7,
- 0x05, 0xe8, 0x6f, 0xf2, 0x30, 0xab, 0x63, 0xd7, 0xee, 0x5e, 0x26, 0x73, 0x84, 0x49, 0x4d, 0x3d,
- 0xbe, 0xa2, 0xca, 0x9e, 0xdf, 0xe6, 0x98, 0x5d, 0xe4, 0x18, 0x8d, 0x9f, 0x68, 0x1a, 0x97, 0x0d,
- 0xb3, 0x6b, 0x5c, 0x64, 0x5d, 0xcd, 0xb4, 0x1e, 0x25, 0x68, 0x8b, 0xa0, 0xd9, 0x57, 0x2c, 0xec,
- 0x34, 0xdb, 0x57, 0xaa, 0xde, 0x5e, 0xb9, 0xd3, 0x71, 0xb0, 0xeb, 0xb2, 0xd5, 0x8b, 0x01, 0x5f,
- 0xb4, 0xdb, 0xe1, 0x24, 0x49, 0xe5, 0x32, 0x53, 0x07, 0x99, 0xfe, 0xe4, 0x30, 0x67, 0xd9, 0xba,
- 0x1a, 0xe4, 0x2c, 0x70, 0x39, 0xa3, 0x64, 0xfe, 0xb8, 0x44, 0x51, 0x3c, 0xa5, 0x73, 0x0b, 0xcc,
- 0x5a, 0xc6, 0x3e, 0xae, 0x3e, 0xda, 0x33, 0x1d, 0xec, 0x12, 0xc7, 0x18, 0x55, 0xe7, 0x93, 0xd0,
- 0x47, 0xa5, 0xce, 0x9b, 0xcb, 0x49, 0x2c, 0x9d, 0xee, 0xaf, 0x8e, 0xa0, 0xfa, 0x03, 0xfa, 0x19,
- 0x15, 0x7d, 0x58, 0x85, 0x39, 0xc6, 0x54, 0xd9, 0xba, 0x5a, 0xeb, 0xa0, 0x9b, 0x05, 0xe3, 0xd7,
- 0xf0, 0xd3, 0x02, 0xe3, 0x97, 0xbc, 0xa0, 0xef, 0x56, 0x65, 0xdd, 0x9d, 0x07, 0x54, 0x9c, 0x94,
- 0x11, 0xef, 0x38, 0xba, 0x63, 0x1f, 0x30, 0x47, 0xd5, 0x69, 0x9d, 0xbe, 0x64, 0xb9, 0xa8, 0x87,
- 0x7e, 0x51, 0xca, 0x99, 0x5a, 0xb2, 0x1a, 0xc7, 0x04, 0xe0, 0x27, 0x55, 0x58, 0x60, 0x5c, 0x35,
- 0xd9, 0x39, 0x1f, 0xa9, 0x03, 0x6f, 0xdf, 0x2b, 0x6d, 0x08, 0x0e, 0xa8, 0x3f, 0x2b, 0xe9, 0x71,
- 0x03, 0xe4, 0x2f, 0x4b, 0x05, 0x47, 0x93, 0xae, 0xc8, 0x31, 0x41, 0xf9, 0x58, 0x1e, 0x66, 0xb7,
- 0x5c, 0xec, 0x30, 0xbf, 0x7d, 0xf4, 0xa6, 0x3c, 0xa8, 0xab, 0x58, 0xd8, 0x48, 0x7d, 0x95, 0xb4,
- 0x87, 0x2f, 0x5f, 0x59, 0x8e, 0xa8, 0x6f, 0x23, 0xc5, 0xc0, 0x76, 0x1b, 0x2c, 0x50, 0x91, 0x96,
- 0x3d, 0xcf, 0x37, 0x12, 0x03, 0x6f, 0xda, 0xbe, 0xd4, 0x71, 0x6c, 0x15, 0x91, 0xb2, 0xfc, 0x2c,
- 0x15, 0x9f, 0xa7, 0x75, 0xbc, 0x43, 0xe7, 0xb3, 0x79, 0xbd, 0x2f, 0x95, 0x5c, 0xae, 0xdf, 0xc3,
- 0xf4, 0xfc, 0x0a, 0x97, 0xb9, 0x40, 0x32, 0x0f, 0xfa, 0x84, 0xfe, 0x46, 0xca, 0x57, 0x57, 0x5e,
- 0x3a, 0xe9, 0x74, 0xa1, 0x37, 0x1e, 0x93, 0xe4, 0x34, 0x94, 0xfc, 0x1c, 0x64, 0xff, 0x45, 0xaf,
- 0x36, 0x1b, 0xeb, 0xe7, 0xab, 0x83, 0x97, 0x31, 0x0a, 0xe8, 0x65, 0x2a, 0xcc, 0x2c, 0x39, 0xb6,
- 0xd1, 0x69, 0x1b, 0xae, 0x87, 0xbe, 0xa6, 0xc0, 0xdc, 0xa6, 0x71, 0xb5, 0x6b, 0x1b, 0x1d, 0xe2,
- 0xdf, 0xdf, 0xd7, 0x17, 0xf4, 0xe8, 0xa7, 0xa0, 0x2f, 0x60, 0xaf, 0xe2, 0xc1, 0xc0, 0xf0, 0xe8,
- 0x5e, 0x4e, 0xe6, 0xba, 0xc6, 0x70, 0x9b, 0x4f, 0x19, 0x14, 0xac, 0x34, 0xe0, 0x6b, 0x91, 0xe7,
- 0x29, 0xc6, 0xa2, 0xfc, 0xb0, 0x5c, 0xf8, 0x51, 0x19, 0x92, 0xc7, 0xb3, 0x2b, 0xff, 0xf2, 0x69,
- 0x28, 0x2e, 0x63, 0x62, 0xc5, 0xfd, 0x77, 0x05, 0xa6, 0x9a, 0xd8, 0x23, 0x16, 0xdc, 0x3d, 0x82,
- 0xa7, 0x70, 0x87, 0x64, 0x88, 0x9c, 0xd8, 0x83, 0x77, 0x7f, 0xb2, 0xce, 0x9d, 0xb7, 0x26, 0xcf,
- 0x29, 0x3c, 0x12, 0x69, 0xb9, 0x8b, 0xac, 0xcc, 0x23, 0x79, 0x24, 0x26, 0x92, 0xca, 0xde, 0xd7,
- 0xea, 0x3d, 0x0a, 0x73, 0xad, 0xe2, 0x7a, 0xbd, 0x1f, 0xe7, 0xf5, 0x33, 0xd1, 0xdb, 0x8c, 0x31,
- 0x9f, 0xe0, 0x1c, 0xf5, 0x0c, 0x98, 0xa2, 0x32, 0x0f, 0xe6, 0xa3, 0xfd, 0x7e, 0x0a, 0x94, 0x04,
- 0x39, 0x7b, 0x1d, 0xe4, 0x94, 0x74, 0x51, 0x8b, 0x2f, 0x7c, 0x22, 0x31, 0x08, 0xe6, 0xea, 0xd8,
- 0xbb, 0x62, 0x3b, 0x97, 0x9a, 0x9e, 0xe1, 0x61, 0xf4, 0xcf, 0x0a, 0xa8, 0x4d, 0xec, 0xf1, 0xd1,
- 0x4f, 0xea, 0x70, 0x8a, 0x56, 0x88, 0x65, 0x24, 0xfd, 0x37, 0xad, 0xc8, 0x2d, 0x03, 0x85, 0xc0,
- 0xe5, 0xd3, 0x0f, 0xff, 0x8a, 0x7e, 0x68, 0x60, 0xd0, 0x27, 0x65, 0xc0, 0xa4, 0x81, 0x49, 0x86,
- 0x67, 0xd0, 0x57, 0xb0, 0x18, 0x3d, 0xfd, 0x88, 0x94, 0x59, 0x2d, 0x47, 0xf3, 0x78, 0xba, 0x82,
- 0xc7, 0x9e, 0x04, 0xf9, 0xca, 0x9e, 0xe1, 0xa1, 0x77, 0xab, 0x00, 0xe5, 0x4e, 0x67, 0x83, 0xfa,
- 0x80, 0xf3, 0x0e, 0x69, 0xe7, 0x60, 0xae, 0xbd, 0x67, 0x44, 0x37, 0x67, 0xd0, 0xfe, 0x40, 0x48,
- 0xd3, 0x9e, 0x19, 0x39, 0x93, 0x53, 0xa9, 0xa2, 0x3e, 0x98, 0xfc, 0x32, 0x18, 0xed, 0xd0, 0xd1,
- 0x5c, 0x0c, 0x85, 0x99, 0x78, 0x84, 0xce, 0xff, 0x7d, 0x31, 0x62, 0x2f, 0x7e, 0x0e, 0xc7, 0x48,
- 0x87, 0x07, 0x6c, 0xa2, 0x84, 0x94, 0x27, 0xbd, 0xe5, 0x02, 0x7a, 0x24, 0xf3, 0x35, 0x91, 0xd0,
- 0xb5, 0x5a, 0xb5, 0x63, 0x06, 0xa2, 0x65, 0x01, 0xb3, 0xd0, 0x2b, 0x73, 0xe9, 0xe0, 0x4b, 0x16,
- 0xdc, 0xf3, 0x60, 0x1e, 0x77, 0x4c, 0x0f, 0x07, 0xb5, 0x64, 0x02, 0x4c, 0x82, 0x58, 0xfc, 0x01,
- 0xbd, 0x44, 0x3a, 0xe8, 0x1a, 0x11, 0xe8, 0xe1, 0x1a, 0xc5, 0xb4, 0x3f, 0xb9, 0x30, 0x6a, 0x72,
- 0x34, 0xb3, 0x07, 0xeb, 0x3b, 0x54, 0xb8, 0xb6, 0x65, 0xef, 0xee, 0x76, 0x71, 0x20, 0x26, 0x4c,
- 0xbd, 0x33, 0x91, 0x31, 0x4e, 0xb8, 0xc8, 0x4e, 0x90, 0xfd, 0x88, 0x19, 0x1e, 0x25, 0xf3, 0x5f,
- 0xc4, 0x13, 0x53, 0x89, 0xb3, 0x28, 0x22, 0xae, 0x81, 0x7c, 0xc6, 0xa0, 0x20, 0x17, 0xf0, 0x59,
- 0x9a, 0x6c, 0xf6, 0x40, 0x7c, 0x56, 0x81, 0x79, 0x7a, 0x2f, 0x62, 0xa0, 0xa0, 0x0f, 0x8d, 0x11,
- 0x00, 0xf4, 0xb5, 0x9c, 0xac, 0x9f, 0x2d, 0x91, 0x89, 0xc0, 0x49, 0x8c, 0x88, 0xe5, 0x82, 0xaa,
- 0x0c, 0x25, 0x37, 0x81, 0x9b, 0x3a, 0xf3, 0x30, 0xbb, 0x8a, 0x83, 0x96, 0xe6, 0xa2, 0xf7, 0xa7,
- 0xec, 0x89, 0xce, 0xc1, 0x1c, 0xb9, 0x1c, 0xac, 0xc1, 0x8e, 0x49, 0xd2, 0x55, 0x33, 0x21, 0x4d,
- 0xbb, 0x15, 0xe6, 0x2f, 0xe2, 0x1d, 0xdb, 0xc1, 0x0d, 0xe1, 0x2c, 0xa5, 0x98, 0x38, 0x38, 0x3c,
- 0x9d, 0x76, 0x3b, 0x9c, 0x64, 0x8e, 0xee, 0x4b, 0xfe, 0x5c, 0xdf, 0x70, 0xae, 0xb2, 0x83, 0x69,
- 0xfd, 0xc9, 0xe8, 0xcf, 0xf9, 0x06, 0xb3, 0x24, 0xa2, 0x78, 0xe7, 0x61, 0xb1, 0x73, 0x95, 0x8e,
- 0x19, 0x9d, 0x9e, 0x05, 0xd3, 0x4c, 0x47, 0x02, 0x83, 0x2e, 0xa9, 0x07, 0x0d, 0xf3, 0x6a, 0xcf,
- 0x82, 0x19, 0x5f, 0x44, 0xc4, 0x6e, 0x60, 0x5d, 0xef, 0xd9, 0x01, 0x3f, 0x92, 0xef, 0x7a, 0x94,
- 0x15, 0xfd, 0x44, 0xa8, 0x33, 0x55, 0x41, 0x67, 0x9e, 0x9e, 0x86, 0xf9, 0x89, 0xdc, 0x4f, 0x5e,
- 0xe2, 0xca, 0x5f, 0xba, 0x5a, 0xeb, 0xb8, 0x68, 0x23, 0x9d, 0xd6, 0xdc, 0x04, 0x10, 0x36, 0xbf,
- 0x20, 0x70, 0x06, 0x97, 0x22, 0xc6, 0xc6, 0x4f, 0x3c, 0x0a, 0xd8, 0x2f, 0x0e, 0xc2, 0xce, 0x78,
- 0x01, 0x95, 0x3c, 0x42, 0x28, 0xc3, 0x49, 0xf6, 0xe8, 0xfc, 0x58, 0x1e, 0xae, 0x0d, 0x4f, 0x38,
- 0xad, 0x1b, 0x6e, 0xd4, 0xb2, 0x1f, 0x4e, 0x07, 0x91, 0x70, 0xa4, 0x24, 0x6c, 0x8e, 0xa7, 0xa1,
- 0xe0, 0x1e, 0x5c, 0x0c, 0x1d, 0x01, 0xe9, 0x0b, 0x7a, 0xab, 0x9a, 0x6a, 0xac, 0x1a, 0xc8, 0xdf,
- 0x98, 0x1b, 0xe1, 0x9d, 0x70, 0xca, 0x3a, 0xd8, 0x0f, 0xb1, 0x20, 0x3d, 0x0d, 0xeb, 0x59, 0x0e,
- 0x7f, 0x10, 0x9b, 0x6c, 0x5e, 0xbe, 0xc9, 0xa6, 0x18, 0x49, 0x65, 0x2a, 0x9d, 0xbd, 0x7a, 0x7c,
- 0xaa, 0xef, 0x08, 0x5a, 0x25, 0xb5, 0x52, 0x50, 0xf8, 0x15, 0x1e, 0xfe, 0x7f, 0xcc, 0xa5, 0xea,
- 0x79, 0x87, 0x9f, 0x5c, 0x4b, 0xd1, 0x13, 0x1e, 0xe7, 0xb1, 0xb5, 0xcf, 0x28, 0x80, 0x9a, 0x91,
- 0x43, 0x0e, 0x03, 0x75, 0xd3, 0xc1, 0x97, 0x4d, 0x7c, 0x45, 0x70, 0xdf, 0x7a, 0x9b, 0x74, 0x1c,
- 0x6a, 0x51, 0x57, 0x0e, 0x11, 0x8d, 0x5f, 0x17, 0x1f, 0x80, 0x8b, 0x5c, 0xbc, 0xe9, 0x74, 0x25,
- 0x66, 0x2f, 0xd5, 0xdf, 0xcf, 0xc3, 0x9c, 0x8e, 0x8d, 0x4e, 0xd8, 0x71, 0xfd, 0x5f, 0x9c, 0x49,
- 0xf2, 0x1c, 0xc8, 0x7b, 0xd1, 0xda, 0xc2, 0x93, 0x0f, 0x57, 0x84, 0xff, 0x93, 0xbc, 0x90, 0x25,
- 0x06, 0xf2, 0xd3, 0x21, 0x0d, 0x57, 0x24, 0xec, 0x19, 0x55, 0xc6, 0x9e, 0xc9, 0x0f, 0xb2, 0x67,
- 0x6e, 0x87, 0x93, 0x5d, 0xc3, 0xf5, 0x96, 0x2f, 0xb6, 0xcc, 0x7d, 0xec, 0x7a, 0xc6, 0x7e, 0x8f,
- 0x58, 0x2e, 0xaa, 0xde, 0x9f, 0x2c, 0xde, 0x5d, 0x9e, 0x78, 0x86, 0x69, 0x50, 0x15, 0x8f, 0x1e,
- 0xe7, 0xf5, 0x43, 0x52, 0x07, 0x96, 0x86, 0x95, 0x9d, 0x4e, 0x33, 0x1e, 0x1c, 0x61, 0x3d, 0xe4,
- 0x0c, 0x68, 0x1b, 0xd5, 0x66, 0xb3, 0xbc, 0x4a, 0xce, 0x31, 0x04, 0x8e, 0x2d, 0x9d, 0x73, 0x4f,
- 0xf2, 0xc5, 0x47, 0x91, 0xd6, 0xe6, 0xa2, 0xf1, 0xa2, 0x74, 0x42, 0x9b, 0x85, 0x29, 0x07, 0xf7,
- 0xba, 0x26, 0x76, 0x4b, 0x39, 0xf4, 0x55, 0x05, 0x8a, 0x5b, 0x96, 0x83, 0x8d, 0x0e, 0x7a, 0x7e,
- 0x7c, 0xb7, 0x37, 0xa2, 0x52, 0x88, 0xb1, 0x9a, 0x12, 0x57, 0x12, 0x59, 0xbf, 0xe5, 0x33, 0x32,
- 0x16, 0xf8, 0xe4, 0x96, 0x10, 0xe3, 0x4b, 0xcd, 0xbc, 0x49, 0x9f, 0x9b, 0x82, 0x42, 0x75, 0xbf,
- 0xe7, 0x5d, 0x3d, 0xf7, 0x24, 0x98, 0x6f, 0x7a, 0x0e, 0x36, 0xf6, 0xb9, 0x8d, 0x60, 0xcf, 0xbe,
- 0x84, 0xad, 0x60, 0x23, 0x98, 0xbc, 0xdc, 0x7b, 0x0f, 0x4c, 0x59, 0xf6, 0xb6, 0x71, 0xe0, 0xed,
- 0x69, 0x37, 0x1f, 0x8a, 0xa0, 0xc2, 0xd4, 0xaf, 0xc1, 0x42, 0xd6, 0x7d, 0xe9, 0x3e, 0x32, 0x1d,
- 0x28, 0x5a, 0x76, 0xf9, 0xc0, 0xdb, 0x5b, 0xba, 0xf1, 0x93, 0x7f, 0x72, 0x53, 0xee, 0xd3, 0x7f,
- 0x72, 0x53, 0xee, 0x8b, 0x7f, 0x72, 0x53, 0xee, 0x7b, 0xff, 0xf4, 0xa6, 0x13, 0x9f, 0xfe, 0xd3,
- 0x9b, 0x4e, 0x7c, 0xf6, 0x4f, 0x6f, 0x3a, 0xf1, 0x4d, 0x4a, 0xef, 0xe2, 0xc5, 0x22, 0xa1, 0xf2,
- 0x8c, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x5f, 0xbf, 0xe6, 0x92, 0x1a, 0x02, 0x00,
+ 0x55, 0x37, 0x3a, 0x55, 0x59, 0x55, 0xdd, 0x7d, 0xfa, 0x63, 0x6a, 0x72, 0x67, 0x66, 0x67, 0x63,
+ 0x97, 0xd9, 0x75, 0x58, 0x96, 0x75, 0x59, 0x7a, 0x61, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xea,
+ 0xea, 0xee, 0xda, 0xed, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xdf, 0xeb, 0x2d, 0x73, 0xaa, 0xa2,
+ 0xbb, 0x73, 0xa7, 0x3a, 0xb3, 0xc8, 0xcc, 0x9e, 0xd9, 0xe6, 0x3e, 0xef, 0x7d, 0x45, 0x44, 0x50,
+ 0x44, 0x44, 0x45, 0x45, 0x05, 0x04, 0x44, 0x04, 0x45, 0xe4, 0xfb, 0x05, 0xe5, 0x43, 0x05, 0x41,
+ 0x44, 0x45, 0xf1, 0x03, 0x50, 0xae, 0xe0, 0x27, 0xbe, 0x8f, 0x5e, 0xaf, 0x5e, 0x05, 0xf1, 0xd5,
+ 0xd7, 0xfb, 0x64, 0x44, 0x64, 0x66, 0x44, 0x75, 0x65, 0x56, 0x64, 0x75, 0x65, 0xf5, 0x2a, 0xf7,
+ 0xbf, 0xcc, 0xc8, 0xc8, 0x13, 0x27, 0xce, 0xef, 0x44, 0xc4, 0x89, 0x88, 0x13, 0x27, 0xe0, 0x5c,
+ 0xef, 0xf2, 0x5d, 0x3d, 0xdb, 0x72, 0x2d, 0xe7, 0xae, 0xb6, 0xb5, 0xb7, 0xa7, 0x9b, 0x1d, 0x67,
+ 0x91, 0xbc, 0xab, 0x53, 0xba, 0x79, 0xe0, 0x1e, 0xf4, 0x30, 0xba, 0xb5, 0x77, 0x65, 0xe7, 0xae,
+ 0xae, 0x71, 0xf9, 0xae, 0xde, 0xe5, 0xbb, 0xf6, 0xac, 0x0e, 0xee, 0xfa, 0x3f, 0x90, 0x17, 0x96,
+ 0x1d, 0xdd, 0x1e, 0x95, 0xab, 0x6b, 0xb5, 0xf5, 0xae, 0xe3, 0x5a, 0x36, 0x66, 0x39, 0xcf, 0x86,
+ 0x45, 0xe2, 0xab, 0xd8, 0x74, 0x7d, 0x0a, 0x37, 0xed, 0x58, 0xd6, 0x4e, 0x17, 0xd3, 0x6f, 0x97,
+ 0xf7, 0xb7, 0xef, 0x72, 0x5c, 0x7b, 0xbf, 0xed, 0xb2, 0xaf, 0xb7, 0xf4, 0x7f, 0xed, 0x60, 0xa7,
+ 0x6d, 0x1b, 0x3d, 0xd7, 0xb2, 0x69, 0x8e, 0x0b, 0x7f, 0xf3, 0x9e, 0x69, 0x50, 0xb4, 0x5e, 0x1b,
+ 0x7d, 0x65, 0x0a, 0x94, 0x52, 0xaf, 0x87, 0x3e, 0x96, 0x05, 0x58, 0xc5, 0xee, 0x45, 0x6c, 0x3b,
+ 0x86, 0x65, 0xa2, 0x93, 0x30, 0xa5, 0xe1, 0xe7, 0xef, 0x63, 0xc7, 0xbd, 0x37, 0xf7, 0xd2, 0xbf,
+ 0x54, 0x32, 0xe8, 0x4d, 0x59, 0x98, 0xd6, 0xb0, 0xd3, 0xb3, 0x4c, 0x07, 0xab, 0xcf, 0x81, 0x3c,
+ 0xb6, 0x6d, 0xcb, 0x3e, 0x97, 0xb9, 0x25, 0x73, 0xfb, 0xec, 0xdd, 0x77, 0x2c, 0xb2, 0xea, 0x2f,
+ 0x6a, 0xbd, 0xf6, 0x62, 0xa9, 0xd7, 0x5b, 0x0c, 0x29, 0x2d, 0xfa, 0x3f, 0x2d, 0x56, 0xbc, 0x3f,
+ 0x34, 0xfa, 0xa3, 0x7a, 0x0e, 0xa6, 0xae, 0xd2, 0x0c, 0xe7, 0xb2, 0xb7, 0x64, 0x6e, 0x9f, 0xd1,
+ 0xfc, 0x57, 0xef, 0x4b, 0x07, 0xbb, 0xba, 0xd1, 0x75, 0xce, 0x29, 0xf4, 0x0b, 0x7b, 0x45, 0x6f,
+ 0xc8, 0x40, 0x9e, 0x10, 0x51, 0xcb, 0x90, 0x6b, 0x5b, 0x1d, 0x4c, 0x8a, 0x5f, 0xb8, 0xfb, 0x2e,
+ 0xf9, 0xe2, 0x17, 0xcb, 0x56, 0x07, 0x6b, 0xe4, 0x67, 0xf5, 0x16, 0x98, 0xf5, 0xc5, 0x12, 0xb2,
+ 0xc1, 0x27, 0x5d, 0xb8, 0x1b, 0x72, 0x5e, 0x7e, 0x75, 0x1a, 0x72, 0xb5, 0xad, 0xf5, 0xf5, 0xe2,
+ 0x09, 0xf5, 0x14, 0xcc, 0x6f, 0xd5, 0x1e, 0xaa, 0xd5, 0x2f, 0xd5, 0x5a, 0x15, 0x4d, 0xab, 0x6b,
+ 0xc5, 0x8c, 0x3a, 0x0f, 0x33, 0x4b, 0xa5, 0xe5, 0x56, 0xb5, 0xb6, 0xb9, 0xd5, 0x2c, 0x66, 0xd1,
+ 0x6b, 0x15, 0x58, 0x68, 0x60, 0x77, 0x19, 0x5f, 0x35, 0xda, 0xb8, 0xe1, 0xea, 0x2e, 0x46, 0xaf,
+ 0xc8, 0x04, 0xc2, 0x54, 0xb7, 0xbc, 0x42, 0x83, 0x4f, 0xac, 0x02, 0x4f, 0x3b, 0x54, 0x01, 0x91,
+ 0xc2, 0x22, 0xfb, 0x7b, 0x91, 0x4b, 0xd3, 0x78, 0x3a, 0x17, 0x9e, 0x0c, 0xb3, 0xdc, 0x37, 0x75,
+ 0x01, 0x60, 0xa9, 0x54, 0x7e, 0x68, 0x55, 0xab, 0x6f, 0xd5, 0x96, 0x8b, 0x27, 0xbc, 0xf7, 0x95,
+ 0xba, 0x56, 0x61, 0xef, 0x19, 0xf4, 0xb5, 0x0c, 0x07, 0xe6, 0xb2, 0x08, 0xe6, 0xe2, 0x70, 0x66,
+ 0x06, 0x00, 0x8a, 0x7e, 0x3a, 0x00, 0x67, 0x55, 0x00, 0xe7, 0x69, 0xc9, 0xc8, 0xa5, 0x0f, 0xd0,
+ 0x8b, 0xb3, 0x30, 0xdd, 0xd8, 0xdd, 0x77, 0x3b, 0xd6, 0x35, 0x13, 0xcd, 0x04, 0xc8, 0xa0, 0xbf,
+ 0xe5, 0x65, 0xf2, 0x6c, 0x51, 0x26, 0xb7, 0x1f, 0xae, 0x04, 0xa3, 0x10, 0x21, 0x8d, 0x9f, 0x0c,
+ 0xa4, 0x51, 0x12, 0xa4, 0xf1, 0x64, 0x59, 0x42, 0xe9, 0xcb, 0xe1, 0xc7, 0x9e, 0x09, 0xf9, 0x46,
+ 0x4f, 0x6f, 0x63, 0xf4, 0x29, 0x05, 0xe6, 0xd6, 0xb1, 0x7e, 0x15, 0x97, 0x7a, 0x3d, 0xdb, 0xba,
+ 0x8a, 0x51, 0x39, 0xd4, 0xd7, 0x73, 0x30, 0xe5, 0x78, 0x99, 0xaa, 0x1d, 0x52, 0x83, 0x19, 0xcd,
+ 0x7f, 0x55, 0xcf, 0x03, 0x18, 0x1d, 0x6c, 0xba, 0x86, 0x6b, 0x60, 0xe7, 0x5c, 0xf6, 0x16, 0xe5,
+ 0xf6, 0x19, 0x8d, 0x4b, 0x41, 0x5f, 0xc9, 0xca, 0xea, 0x18, 0xe1, 0x62, 0x91, 0xe7, 0x20, 0x42,
+ 0xaa, 0x6f, 0xcc, 0xca, 0xe8, 0xd8, 0x50, 0x72, 0xc9, 0x64, 0xfb, 0xf3, 0x99, 0xe4, 0xc2, 0xf5,
+ 0x72, 0xd4, 0xea, 0xad, 0xc6, 0x56, 0x79, 0xad, 0xd5, 0xd8, 0x2c, 0x95, 0x2b, 0x45, 0xac, 0x9e,
+ 0x86, 0x22, 0x79, 0x6c, 0x55, 0x1b, 0xad, 0xe5, 0xca, 0x7a, 0xa5, 0x59, 0x59, 0x2e, 0x6e, 0xab,
+ 0x2a, 0x2c, 0x68, 0x95, 0xe7, 0x6e, 0x55, 0x1a, 0xcd, 0xd6, 0x4a, 0xa9, 0xba, 0x5e, 0x59, 0x2e,
+ 0xee, 0x78, 0x3f, 0xaf, 0x57, 0x37, 0xaa, 0xcd, 0x96, 0x56, 0x29, 0x95, 0xd7, 0x2a, 0xcb, 0xc5,
+ 0x5d, 0xf5, 0x7a, 0xb8, 0xae, 0x56, 0x6f, 0x95, 0x36, 0x37, 0xb5, 0xfa, 0xc5, 0x4a, 0x8b, 0xfd,
+ 0xd1, 0x28, 0x1a, 0xb4, 0xa0, 0x66, 0xab, 0xb1, 0x56, 0xd2, 0x2a, 0xa5, 0xa5, 0xf5, 0x4a, 0xf1,
+ 0x11, 0xf4, 0x22, 0x05, 0xe6, 0x37, 0xf4, 0x2b, 0xb8, 0xb1, 0xab, 0xdb, 0x58, 0xbf, 0xdc, 0xc5,
+ 0xe8, 0xf1, 0x12, 0x78, 0xa2, 0x4f, 0xf1, 0x78, 0x55, 0x44, 0xbc, 0xee, 0x1a, 0x20, 0x60, 0xa1,
+ 0x88, 0x08, 0xc0, 0xfe, 0x39, 0x68, 0x06, 0x6b, 0x02, 0x60, 0x4f, 0x4f, 0x48, 0x2f, 0x19, 0x62,
+ 0xdf, 0xf1, 0x18, 0x40, 0x0c, 0x7d, 0x41, 0x81, 0x85, 0xaa, 0x79, 0xd5, 0x70, 0xf1, 0x2a, 0x36,
+ 0xb1, 0xed, 0x8d, 0x03, 0x52, 0x30, 0xbc, 0x49, 0xe1, 0x60, 0x58, 0x11, 0x61, 0x78, 0xca, 0x00,
+ 0xb1, 0x89, 0x65, 0x44, 0x8c, 0xb6, 0x37, 0xc1, 0x8c, 0x41, 0xf2, 0x95, 0x8d, 0x0e, 0x93, 0x58,
+ 0x98, 0xa0, 0xde, 0x0a, 0xf3, 0xf4, 0x65, 0xc5, 0xe8, 0xe2, 0x87, 0xf0, 0x01, 0x1b, 0x77, 0xc5,
+ 0x44, 0xf4, 0xbd, 0x41, 0xe3, 0xab, 0x0a, 0x58, 0x7e, 0x53, 0x52, 0xa6, 0x92, 0x81, 0xf9, 0xaa,
+ 0xc7, 0x42, 0xf3, 0x3b, 0xd4, 0xca, 0x0c, 0xf4, 0x6f, 0x59, 0x98, 0x6d, 0xb8, 0x56, 0xcf, 0x53,
+ 0x59, 0xc3, 0xdc, 0x91, 0x03, 0xf7, 0x13, 0x7c, 0x1b, 0x2b, 0x8b, 0xe0, 0x3e, 0x79, 0x80, 0x1c,
+ 0xb9, 0x02, 0x22, 0x5a, 0xd8, 0x57, 0x82, 0x16, 0xb6, 0x22, 0xa0, 0x72, 0x77, 0x22, 0x6a, 0xff,
+ 0x01, 0xdb, 0xd7, 0xab, 0x14, 0x28, 0xfa, 0x6a, 0xe6, 0x96, 0xf7, 0x6d, 0x1b, 0x9b, 0xae, 0x1c,
+ 0x08, 0x7f, 0xc4, 0x83, 0xb0, 0x26, 0x82, 0x70, 0x77, 0x8c, 0x32, 0xfb, 0xa5, 0xa4, 0xd8, 0xc6,
+ 0x3e, 0x12, 0xa0, 0xf9, 0x90, 0x80, 0xe6, 0x37, 0x27, 0x67, 0x2b, 0x19, 0xa4, 0x6b, 0x23, 0x20,
+ 0x7a, 0x1a, 0x8a, 0xde, 0x98, 0x54, 0x6e, 0x56, 0x2f, 0x56, 0x5a, 0xd5, 0xda, 0xc5, 0x6a, 0xb3,
+ 0x52, 0xc4, 0xe8, 0x07, 0x15, 0x98, 0xa3, 0xac, 0x69, 0xf8, 0xaa, 0x75, 0x45, 0xb2, 0xd7, 0xfb,
+ 0x42, 0x42, 0x63, 0x81, 0x2f, 0x21, 0xa2, 0x65, 0x7c, 0x4f, 0x02, 0x63, 0x21, 0x86, 0xdc, 0x63,
+ 0xa9, 0xb7, 0x3a, 0xd4, 0x0c, 0x76, 0x06, 0xb4, 0x96, 0x81, 0xbd, 0xd5, 0xab, 0x72, 0x00, 0xb4,
+ 0x92, 0x17, 0x0d, 0x7c, 0x0d, 0x6d, 0x84, 0x98, 0x08, 0x6a, 0x9b, 0x19, 0xaa, 0xb6, 0xd9, 0x41,
+ 0x6a, 0xfb, 0x3e, 0x7e, 0xcc, 0x5a, 0x12, 0xd1, 0xbb, 0x33, 0x52, 0xdc, 0x1e, 0x27, 0xd1, 0xb3,
+ 0x43, 0x5f, 0x51, 0xb2, 0xa2, 0xd5, 0x79, 0x13, 0xcc, 0x90, 0xc7, 0x9a, 0xbe, 0x87, 0x59, 0x1b,
+ 0x0a, 0x13, 0xd4, 0x0b, 0x30, 0x47, 0x33, 0xb6, 0x2d, 0xd3, 0xab, 0x4f, 0x8e, 0x64, 0x10, 0xd2,
+ 0x3c, 0x10, 0xdb, 0x36, 0xd6, 0x5d, 0xcb, 0x26, 0x34, 0xf2, 0x14, 0x44, 0x2e, 0x09, 0x7d, 0x39,
+ 0x68, 0x85, 0x15, 0x41, 0x73, 0x9e, 0x9a, 0xa4, 0x2a, 0xc9, 0xf4, 0xe6, 0xea, 0x68, 0xed, 0x8f,
+ 0xb6, 0xba, 0x96, 0x87, 0xf6, 0x0a, 0x99, 0xda, 0x61, 0xf5, 0x2c, 0xa8, 0x2c, 0xd5, 0xcb, 0x5b,
+ 0xae, 0xd7, 0x9a, 0x95, 0x5a, 0xb3, 0xb8, 0x3d, 0x50, 0xa3, 0x76, 0xd0, 0x1b, 0x73, 0x90, 0x7b,
+ 0xd0, 0x32, 0x4c, 0xf4, 0xe2, 0x8c, 0xa0, 0x12, 0x26, 0x76, 0xaf, 0x59, 0xf6, 0x95, 0xa0, 0xa1,
+ 0x86, 0x09, 0xf1, 0xd8, 0x84, 0xaa, 0xa4, 0x0c, 0x55, 0xa5, 0xdc, 0x20, 0x55, 0xfa, 0x01, 0x5e,
+ 0x95, 0xee, 0x13, 0x55, 0xe9, 0xb6, 0x01, 0xf2, 0xf7, 0x98, 0x8f, 0xe8, 0x00, 0x3e, 0x1e, 0x74,
+ 0x00, 0x0f, 0x08, 0x30, 0x3e, 0x49, 0x8e, 0x4c, 0x32, 0x00, 0x3f, 0x9f, 0x6a, 0xc3, 0x1f, 0x04,
+ 0xf5, 0x4e, 0x04, 0xd4, 0xbb, 0x03, 0xfa, 0x04, 0xe3, 0x70, 0xd7, 0xf1, 0xc8, 0xe1, 0x6e, 0xe2,
+ 0x8a, 0x7a, 0x06, 0x4e, 0x2d, 0x57, 0x57, 0x56, 0x2a, 0x5a, 0xa5, 0xd6, 0x6c, 0xd5, 0x2a, 0xcd,
+ 0x4b, 0x75, 0xed, 0xa1, 0x62, 0x17, 0xbd, 0x41, 0x01, 0xf0, 0x24, 0x54, 0xd6, 0xcd, 0x36, 0xee,
+ 0xca, 0xf5, 0xe8, 0xff, 0x77, 0x36, 0x59, 0x9f, 0x10, 0xd2, 0x8f, 0x80, 0xf3, 0x35, 0x59, 0xf9,
+ 0x56, 0x19, 0x49, 0x2c, 0x19, 0xa8, 0x6f, 0x7d, 0x2c, 0xd8, 0x9e, 0xd7, 0xc1, 0x49, 0x9f, 0x1e,
+ 0xcb, 0x3e, 0x78, 0xda, 0xf7, 0xf6, 0x1c, 0x2c, 0x30, 0x58, 0xfc, 0x79, 0xfc, 0x4b, 0x33, 0x32,
+ 0x13, 0x79, 0x04, 0xd3, 0x6c, 0xda, 0xee, 0x77, 0xef, 0xc1, 0xbb, 0xba, 0x0a, 0xb3, 0x3d, 0x6c,
+ 0xef, 0x19, 0x8e, 0x63, 0x58, 0x26, 0x5d, 0x90, 0x5b, 0xb8, 0xfb, 0x09, 0x81, 0xc4, 0xc9, 0xda,
+ 0xe5, 0xe2, 0xa6, 0x6e, 0xbb, 0x46, 0xdb, 0xe8, 0xe9, 0xa6, 0xbb, 0x19, 0x66, 0xd6, 0xf8, 0x3f,
+ 0xd1, 0x2b, 0x13, 0x4e, 0x6b, 0xc4, 0x9a, 0x44, 0xa8, 0xc4, 0x2f, 0x25, 0x98, 0x92, 0xc4, 0x12,
+ 0x4c, 0xa6, 0x16, 0x1f, 0x4b, 0x55, 0x2d, 0x06, 0xe0, 0xbd, 0xa3, 0xde, 0x00, 0x67, 0xaa, 0xb5,
+ 0x72, 0x5d, 0xd3, 0x2a, 0xe5, 0x66, 0x6b, 0xb3, 0xa2, 0x6d, 0x54, 0x1b, 0x8d, 0x6a, 0xbd, 0xd6,
+ 0x38, 0x4a, 0x6b, 0x47, 0x9f, 0x54, 0x02, 0x8d, 0x59, 0xc6, 0xed, 0xae, 0x61, 0x62, 0xf4, 0xc0,
+ 0x11, 0x15, 0x46, 0x5c, 0xf5, 0x91, 0xc7, 0x99, 0x95, 0x1f, 0x81, 0xf3, 0xeb, 0x93, 0xe3, 0x3c,
+ 0x98, 0xe0, 0x7f, 0xe2, 0xe6, 0xff, 0x05, 0x05, 0x4e, 0x71, 0x0d, 0x51, 0xc3, 0x7b, 0x63, 0x5b,
+ 0xc9, 0xfb, 0x0e, 0xbe, 0xed, 0x56, 0x45, 0x4c, 0x07, 0x59, 0xd3, 0x87, 0xd8, 0x88, 0x80, 0xf5,
+ 0xad, 0x01, 0xac, 0xeb, 0x02, 0xac, 0xcf, 0x1c, 0x81, 0x66, 0x32, 0x64, 0x7f, 0x21, 0x55, 0x64,
+ 0x6f, 0x80, 0x33, 0x9b, 0x25, 0xad, 0x59, 0x2d, 0x57, 0x37, 0x4b, 0xde, 0x38, 0xca, 0x0d, 0xd9,
+ 0x11, 0xe6, 0xba, 0x08, 0xfa, 0x40, 0x7c, 0x3f, 0x9c, 0x83, 0x9b, 0x06, 0x77, 0xb4, 0xe5, 0x5d,
+ 0xdd, 0xdc, 0xc1, 0xc8, 0x90, 0x81, 0x7a, 0x19, 0xa6, 0xda, 0x24, 0x3b, 0xc5, 0x99, 0xdf, 0xba,
+ 0x89, 0xe9, 0xcb, 0x69, 0x09, 0x9a, 0xff, 0x2b, 0x7a, 0x17, 0xaf, 0x10, 0x4d, 0x51, 0x21, 0x9e,
+ 0x1d, 0x0f, 0xde, 0x21, 0xbe, 0x23, 0x74, 0xe3, 0xd3, 0x81, 0x6e, 0x5c, 0x12, 0x74, 0xa3, 0x7c,
+ 0x34, 0xf2, 0xc9, 0xd4, 0xe4, 0x37, 0x1e, 0x0b, 0x1d, 0x40, 0xa4, 0x36, 0x19, 0xd1, 0xa3, 0xc2,
+ 0xc0, 0xee, 0xfe, 0x75, 0x0a, 0x14, 0x96, 0x71, 0x17, 0xcb, 0xae, 0x44, 0xfe, 0x5d, 0x56, 0x76,
+ 0x43, 0x84, 0xc2, 0x40, 0x69, 0x47, 0xaf, 0x8e, 0xb8, 0xc6, 0x1e, 0x76, 0x5c, 0x7d, 0xaf, 0x47,
+ 0x44, 0xad, 0x68, 0x61, 0x02, 0xfa, 0xce, 0xac, 0xcc, 0x76, 0x49, 0x4c, 0x31, 0xff, 0x39, 0xd6,
+ 0x14, 0x3f, 0x93, 0x85, 0xe9, 0x06, 0x76, 0xeb, 0x76, 0x07, 0xdb, 0xa8, 0x11, 0x62, 0x74, 0x0b,
+ 0xcc, 0x12, 0x50, 0xbc, 0x69, 0x66, 0x80, 0x13, 0x9f, 0xa4, 0xde, 0x06, 0x0b, 0xc1, 0x2b, 0xf9,
+ 0x9d, 0x75, 0xe3, 0x7d, 0xa9, 0xe8, 0xef, 0x33, 0xb2, 0xbb, 0xb8, 0x6c, 0xc9, 0x90, 0x71, 0x13,
+ 0xd1, 0x4a, 0xe5, 0x76, 0x64, 0x63, 0x49, 0xa5, 0xbf, 0xd1, 0xf5, 0x8e, 0x2c, 0xc0, 0x96, 0xe9,
+ 0xf8, 0x72, 0x7d, 0x52, 0x02, 0xb9, 0xa2, 0x7f, 0xca, 0x24, 0x9b, 0xc5, 0x84, 0xe5, 0x44, 0x48,
+ 0xec, 0xa7, 0x12, 0xac, 0x2d, 0x44, 0x12, 0x4b, 0x5f, 0x66, 0x9f, 0x3d, 0x09, 0x85, 0x4b, 0x7a,
+ 0xb7, 0x8b, 0x5d, 0xf4, 0x5a, 0x05, 0x0a, 0x65, 0x1b, 0xeb, 0x2e, 0x46, 0x38, 0x14, 0x1d, 0x82,
+ 0x69, 0xdb, 0xb2, 0xdc, 0x4d, 0xdd, 0xdd, 0x65, 0x72, 0x0b, 0xde, 0xd5, 0x67, 0xc2, 0xf5, 0xdb,
+ 0xfb, 0xdd, 0xae, 0x8b, 0x1f, 0x75, 0x37, 0x6d, 0x63, 0x4f, 0xb7, 0x0f, 0xd6, 0x75, 0x73, 0x67,
+ 0x5f, 0xdf, 0xc1, 0x8c, 0xbd, 0xa8, 0xcf, 0xcc, 0xd5, 0xe0, 0xe7, 0xf8, 0x8e, 0xe7, 0x01, 0x51,
+ 0xe8, 0xdf, 0x28, 0xc8, 0x89, 0xb2, 0xb8, 0x48, 0xd9, 0x8b, 0xe8, 0x79, 0x10, 0x4c, 0xef, 0x99,
+ 0x78, 0xcf, 0x32, 0x8d, 0xb6, 0x6f, 0xad, 0xfa, 0xef, 0xe8, 0x57, 0x02, 0x34, 0x96, 0x04, 0x34,
+ 0x16, 0xa5, 0x4b, 0x49, 0x06, 0x45, 0x63, 0x84, 0x7e, 0xe7, 0x66, 0xb8, 0x91, 0x76, 0x23, 0xad,
+ 0x66, 0xbd, 0x55, 0xd6, 0x2a, 0xa5, 0x66, 0xa5, 0xb5, 0x5e, 0x2f, 0x97, 0xd6, 0x5b, 0x5a, 0x65,
+ 0xb3, 0x5e, 0xc4, 0xde, 0xec, 0x7c, 0x4a, 0xc3, 0x6d, 0xeb, 0x2a, 0xb6, 0xd1, 0x0b, 0x33, 0x72,
+ 0x10, 0xc5, 0x08, 0x25, 0x0e, 0x3e, 0x45, 0x06, 0xbe, 0x1f, 0x90, 0xf6, 0x14, 0x61, 0x82, 0x65,
+ 0xcc, 0x47, 0xb4, 0x98, 0x5f, 0x95, 0xea, 0x63, 0x62, 0x49, 0x3d, 0x06, 0x40, 0xfa, 0xc7, 0x2c,
+ 0x4c, 0x95, 0x2d, 0xf3, 0x2a, 0xb6, 0x5d, 0x7e, 0x92, 0xc5, 0xe3, 0x90, 0xe9, 0xc3, 0xe1, 0x1c,
+ 0x4c, 0x61, 0xd3, 0xb5, 0xad, 0x9e, 0x3f, 0xcb, 0xf2, 0x5f, 0xd1, 0x9b, 0x93, 0x4a, 0x98, 0x95,
+ 0x1c, 0xbd, 0xda, 0x3a, 0xb8, 0x20, 0x81, 0x3d, 0xa5, 0xaf, 0xed, 0xbc, 0x21, 0x09, 0x2e, 0x83,
+ 0x19, 0x48, 0xbf, 0x1f, 0xfb, 0xa2, 0x02, 0xf3, 0xb4, 0xdd, 0x36, 0x30, 0x31, 0x0b, 0x51, 0x9d,
+ 0x5f, 0xe7, 0xec, 0x13, 0xfe, 0xda, 0x09, 0x41, 0xfc, 0x05, 0xbd, 0xd7, 0x0b, 0xd6, 0xbc, 0xd7,
+ 0x4e, 0x68, 0xec, 0x9d, 0xaa, 0xf9, 0x52, 0x01, 0x72, 0xfa, 0xbe, 0xbb, 0x8b, 0xfe, 0x4d, 0x7a,
+ 0xc6, 0x2b, 0xf4, 0x23, 0x8c, 0x9f, 0x08, 0x48, 0x4e, 0x43, 0xde, 0xb5, 0xae, 0x60, 0x5f, 0x0e,
+ 0xf4, 0xc5, 0x83, 0x43, 0xef, 0xf5, 0x9a, 0xe4, 0x03, 0x83, 0xc3, 0x7f, 0xf7, 0x0c, 0x2c, 0xbd,
+ 0xdd, 0xb6, 0xf6, 0x4d, 0xb7, 0xea, 0xaf, 0x7b, 0x87, 0x09, 0xe8, 0xb3, 0x19, 0x99, 0x19, 0xb4,
+ 0x04, 0x83, 0xc9, 0x20, 0xbb, 0x3c, 0x42, 0x53, 0x5a, 0x84, 0x3b, 0x4a, 0x9b, 0x9b, 0xad, 0x66,
+ 0xfd, 0xa1, 0x4a, 0x2d, 0xb4, 0x76, 0x5b, 0xd5, 0x5a, 0xab, 0xb9, 0x56, 0x69, 0x95, 0xb7, 0x34,
+ 0xb2, 0x38, 0x59, 0x2a, 0x97, 0xeb, 0x5b, 0xb5, 0x66, 0x11, 0xa3, 0xb7, 0x65, 0x61, 0xae, 0xdc,
+ 0xb5, 0x9c, 0x00, 0xe1, 0x9b, 0x43, 0x84, 0x03, 0x31, 0x66, 0x38, 0x31, 0xa2, 0xff, 0x99, 0x91,
+ 0xf5, 0x74, 0xf0, 0x05, 0xc2, 0x91, 0x8f, 0xe8, 0xa5, 0xde, 0x2c, 0xe5, 0xe9, 0x30, 0x9c, 0x5e,
+ 0xfa, 0x4d, 0xe2, 0xf3, 0x15, 0x98, 0x2a, 0x51, 0xc5, 0x40, 0x7f, 0x92, 0x81, 0x42, 0xd9, 0x32,
+ 0xb7, 0x8d, 0x1d, 0xcf, 0x82, 0xc4, 0xa6, 0x7e, 0xb9, 0x8b, 0x97, 0x75, 0x57, 0xbf, 0x6a, 0xe0,
+ 0x6b, 0xa4, 0x02, 0xd3, 0x5a, 0x5f, 0xaa, 0xc7, 0x14, 0x4b, 0xc1, 0x97, 0xf7, 0x77, 0x08, 0x53,
+ 0xd3, 0x1a, 0x9f, 0xe4, 0x8d, 0x1f, 0xf4, 0x75, 0xd3, 0xc6, 0x36, 0xee, 0x62, 0xdd, 0xc1, 0xde,
+ 0x5c, 0xcc, 0xc4, 0x5d, 0xa2, 0xb4, 0xd3, 0x5a, 0xd4, 0x67, 0xf5, 0x02, 0xcc, 0xd1, 0x4f, 0xc4,
+ 0xfe, 0x71, 0x88, 0x1a, 0x4f, 0x6b, 0x42, 0x9a, 0xfa, 0x64, 0xc8, 0xe3, 0x47, 0x5d, 0x5b, 0x3f,
+ 0xd7, 0x21, 0x78, 0x5d, 0xbf, 0x48, 0x5d, 0x1d, 0x17, 0x7d, 0x57, 0xc7, 0xc5, 0x06, 0x71, 0x84,
+ 0xd4, 0x68, 0x2e, 0xf4, 0xc9, 0xe9, 0xc0, 0x7a, 0x79, 0x9b, 0x12, 0x2a, 0x86, 0x0a, 0x39, 0x53,
+ 0xdf, 0xc3, 0x4c, 0x2f, 0xc8, 0xb3, 0x7a, 0x07, 0x9c, 0xd4, 0xaf, 0xea, 0xae, 0x6e, 0xaf, 0x5b,
+ 0x6d, 0xbd, 0x4b, 0x86, 0x4d, 0xbf, 0xe5, 0xf7, 0x7f, 0x20, 0xdb, 0x50, 0xae, 0x65, 0x63, 0x92,
+ 0xcb, 0xdf, 0x86, 0xf2, 0x13, 0x3c, 0xea, 0x46, 0xdb, 0x32, 0x09, 0xff, 0x8a, 0x46, 0x9e, 0x3d,
+ 0xa9, 0x74, 0x0c, 0xc7, 0xab, 0x08, 0xa1, 0x52, 0xa3, 0xfb, 0x29, 0x8d, 0x03, 0xb3, 0x4d, 0xb6,
+ 0xa0, 0xa6, 0xb5, 0xa8, 0xcf, 0xea, 0x12, 0xcc, 0xb2, 0xdd, 0x97, 0x0d, 0x4f, 0xaf, 0x0a, 0x44,
+ 0xaf, 0x6e, 0x11, 0x1d, 0xc9, 0x28, 0x9e, 0x8b, 0xb5, 0x30, 0x9f, 0xc6, 0xff, 0xa4, 0x3e, 0x07,
+ 0x6e, 0x64, 0xaf, 0xe5, 0x7d, 0xc7, 0xb5, 0xf6, 0x28, 0xe8, 0x2b, 0x46, 0x97, 0xd6, 0x60, 0x8a,
+ 0xd4, 0x20, 0x2e, 0x8b, 0x7a, 0x37, 0x9c, 0xee, 0xd9, 0x78, 0x1b, 0xdb, 0x0f, 0xeb, 0x7b, 0xfb,
+ 0x8f, 0x36, 0x6d, 0xdd, 0x74, 0x7a, 0x96, 0xed, 0x9e, 0x9b, 0x26, 0xcc, 0x0f, 0xfc, 0xa6, 0xde,
+ 0x09, 0xa7, 0x1e, 0x71, 0x2c, 0xb3, 0xd4, 0x33, 0xd6, 0x0d, 0xc7, 0xc5, 0x66, 0xa9, 0xd3, 0xb1,
+ 0xcf, 0xcd, 0x90, 0xb2, 0x0e, 0x7f, 0x60, 0xdd, 0xea, 0x34, 0x14, 0xa8, 0xb0, 0xd1, 0x2b, 0xf2,
+ 0xd2, 0x1e, 0xa7, 0xac, 0xfa, 0xb1, 0x76, 0xe0, 0x53, 0x60, 0x8a, 0xf5, 0x87, 0x04, 0xd6, 0xd9,
+ 0xbb, 0xcf, 0xf6, 0x2d, 0x7d, 0x30, 0x2a, 0x9a, 0x9f, 0x4d, 0x7d, 0x1a, 0x14, 0xda, 0x44, 0x08,
+ 0x04, 0xe1, 0xd9, 0xbb, 0x6f, 0x1c, 0x5c, 0x28, 0xc9, 0xa2, 0xb1, 0xac, 0xe8, 0x73, 0x8a, 0x94,
+ 0x93, 0x6a, 0x1c, 0xc7, 0xc9, 0xfa, 0x80, 0x2f, 0x67, 0x47, 0xe8, 0x64, 0xef, 0x84, 0xdb, 0x59,
+ 0x0f, 0xca, 0xac, 0x95, 0xe5, 0xd6, 0xd2, 0x96, 0x3f, 0x5f, 0xf5, 0x6c, 0x98, 0x46, 0xb3, 0xa4,
+ 0x35, 0x5b, 0xb5, 0xfa, 0xb2, 0x37, 0xcf, 0xbd, 0x03, 0x6e, 0x1b, 0x92, 0xbb, 0xd2, 0x6c, 0xd5,
+ 0x4a, 0x1b, 0x95, 0xe2, 0xb6, 0x68, 0x09, 0x35, 0x9a, 0xf5, 0xcd, 0x96, 0xb6, 0x55, 0xab, 0x55,
+ 0x6b, 0xab, 0x94, 0x98, 0x67, 0x7a, 0x9e, 0x0d, 0x33, 0x5c, 0xd2, 0xaa, 0xcd, 0x4a, 0xab, 0x5c,
+ 0xaf, 0xad, 0x54, 0x57, 0x8b, 0xc6, 0x30, 0x33, 0xea, 0x11, 0xf5, 0x16, 0xb8, 0x49, 0xe0, 0xa4,
+ 0x5a, 0xaf, 0x79, 0x93, 0xef, 0x72, 0xa9, 0x56, 0xae, 0x78, 0x33, 0xed, 0x2b, 0x2a, 0x82, 0x33,
+ 0x94, 0x5c, 0x6b, 0xa5, 0xba, 0xce, 0xef, 0x97, 0x7d, 0x22, 0xa3, 0x9e, 0x83, 0xeb, 0xf8, 0x6f,
+ 0xd5, 0xda, 0xc5, 0xd2, 0x7a, 0x75, 0xb9, 0xf8, 0xeb, 0x19, 0xf5, 0x56, 0xb8, 0x59, 0xf8, 0x8b,
+ 0x6e, 0x7d, 0xb5, 0xaa, 0xcb, 0xad, 0x8d, 0x6a, 0x63, 0xa3, 0xd4, 0x2c, 0xaf, 0x15, 0x3f, 0x49,
+ 0x26, 0x26, 0x81, 0xa5, 0xcd, 0x79, 0x8e, 0xbe, 0x8a, 0xb7, 0x00, 0x4a, 0xa2, 0xa2, 0x3e, 0x69,
+ 0x20, 0xec, 0xf1, 0x16, 0xef, 0xc7, 0x82, 0xb1, 0x64, 0x59, 0x50, 0xa1, 0xa7, 0x24, 0xa0, 0x95,
+ 0x4c, 0x87, 0x9a, 0x23, 0xa8, 0xd0, 0x2d, 0x70, 0x53, 0xad, 0x42, 0x91, 0xd2, 0x2a, 0xe5, 0xfa,
+ 0xc5, 0x8a, 0xd6, 0xba, 0x54, 0x5a, 0x5f, 0xaf, 0x34, 0x5b, 0x2b, 0x55, 0xad, 0xd1, 0x2c, 0x6e,
+ 0xa3, 0x7f, 0xca, 0x06, 0x0b, 0x4e, 0x9c, 0xb4, 0xfe, 0x24, 0x9b, 0xb4, 0x59, 0xc7, 0x2e, 0x2c,
+ 0x7d, 0x13, 0x14, 0x1c, 0x57, 0x77, 0xf7, 0x1d, 0xd6, 0xaa, 0x1f, 0x37, 0xb8, 0x55, 0x2f, 0x36,
+ 0x48, 0x26, 0x8d, 0x65, 0x46, 0x9f, 0xcb, 0x24, 0x69, 0xa6, 0x63, 0x58, 0x73, 0x32, 0x46, 0x10,
+ 0xf1, 0x79, 0x40, 0xbe, 0xb6, 0x57, 0x1b, 0xad, 0xd2, 0xba, 0x56, 0x29, 0x2d, 0x3f, 0x1c, 0xac,
+ 0x34, 0x61, 0xf5, 0x0c, 0x9c, 0xda, 0xaa, 0x95, 0x96, 0xd6, 0x2b, 0xa4, 0xb9, 0xd4, 0x6b, 0xb5,
+ 0x4a, 0xd9, 0x93, 0xfb, 0x77, 0x92, 0x7d, 0x1d, 0xcf, 0xde, 0x26, 0x7c, 0x7b, 0x36, 0x11, 0x27,
+ 0xff, 0xbf, 0x94, 0x76, 0x7f, 0x0a, 0x35, 0x8c, 0xa7, 0x35, 0x5e, 0x1c, 0x3e, 0x2b, 0xe5, 0xf1,
+ 0x24, 0xc5, 0x49, 0x32, 0x3c, 0xbe, 0x6d, 0x04, 0x3c, 0xce, 0xc0, 0x29, 0x1e, 0x0f, 0xe2, 0xf9,
+ 0x14, 0x0d, 0xc3, 0x7b, 0x15, 0x98, 0xda, 0x30, 0x76, 0x88, 0xeb, 0xe7, 0x7e, 0x68, 0x7a, 0x2c,
+ 0x40, 0x36, 0xf0, 0xb4, 0xc9, 0x1a, 0x1d, 0x61, 0x9a, 0x9e, 0x95, 0x5f, 0x49, 0x91, 0x9a, 0x8a,
+ 0xbf, 0x2b, 0x71, 0xcf, 0xc4, 0x18, 0x8e, 0xe8, 0x99, 0xfe, 0x2c, 0x51, 0xcf, 0x34, 0x98, 0x56,
+ 0x32, 0x98, 0xec, 0xa3, 0xc1, 0xc4, 0x7b, 0xc6, 0xcc, 0xc1, 0x74, 0x30, 0x4e, 0x90, 0x4d, 0x1a,
+ 0xef, 0x63, 0xa5, 0x56, 0xdf, 0x5a, 0x5d, 0x6b, 0xad, 0x68, 0x95, 0x0a, 0x5b, 0xd6, 0xdd, 0x41,
+ 0xef, 0xcc, 0xc2, 0x3c, 0xe3, 0x9d, 0x79, 0x3c, 0xdc, 0x1c, 0x09, 0x1f, 0x13, 0xf4, 0xbf, 0xf3,
+ 0x53, 0x8a, 0x55, 0x51, 0xd0, 0x4f, 0x8d, 0x13, 0x4e, 0xac, 0xcb, 0xc3, 0x5b, 0x02, 0x71, 0x3f,
+ 0x28, 0x88, 0xfb, 0x19, 0x89, 0x29, 0xa6, 0x3f, 0xad, 0xf8, 0xeb, 0x19, 0x28, 0x34, 0x70, 0x17,
+ 0xb7, 0x5d, 0xf4, 0x23, 0xca, 0xc8, 0xda, 0x1e, 0x65, 0x22, 0x2b, 0x89, 0x4c, 0xe4, 0x5c, 0x0a,
+ 0x26, 0x72, 0x7e, 0x74, 0x13, 0xb9, 0x90, 0xd4, 0x44, 0x9e, 0x8a, 0x30, 0x91, 0xe3, 0xfa, 0x83,
+ 0x69, 0x99, 0xfe, 0xe0, 0xa3, 0x85, 0xa4, 0x63, 0x2f, 0x85, 0xf4, 0x78, 0x4d, 0xea, 0xef, 0xcb,
+ 0x27, 0x19, 0xab, 0x07, 0x72, 0x9c, 0x4c, 0xff, 0x5f, 0x93, 0x4b, 0x61, 0x09, 0x50, 0x7d, 0x3c,
+ 0xdc, 0x1c, 0xbe, 0xb7, 0x2a, 0xcf, 0xab, 0x36, 0x9a, 0x0d, 0x62, 0x47, 0x97, 0xeb, 0x9a, 0xb6,
+ 0xb5, 0x49, 0x37, 0x8f, 0xce, 0x82, 0x1a, 0x52, 0xd1, 0xb6, 0x6a, 0xd4, 0x6a, 0xde, 0x11, 0xa9,
+ 0xaf, 0x54, 0x6b, 0xcb, 0xad, 0x60, 0x24, 0xaa, 0xad, 0xd4, 0x8b, 0xbb, 0xea, 0x22, 0xdc, 0xc1,
+ 0x51, 0x27, 0x5d, 0x1b, 0x2d, 0xa1, 0x54, 0x5b, 0x6e, 0x6d, 0xd4, 0x2a, 0x1b, 0xf5, 0x5a, 0xb5,
+ 0x4c, 0xd2, 0x1b, 0x95, 0x66, 0xd1, 0xf0, 0xcc, 0xb7, 0x3e, 0x3b, 0xbd, 0x51, 0x29, 0x69, 0xe5,
+ 0xb5, 0x8a, 0x46, 0x8b, 0x7c, 0x44, 0xbd, 0x0d, 0x2e, 0x94, 0x6a, 0xf5, 0xa6, 0x97, 0x52, 0xaa,
+ 0x3d, 0xdc, 0x7c, 0x78, 0xb3, 0xd2, 0xda, 0xd4, 0xea, 0xe5, 0x4a, 0xa3, 0xe1, 0x8d, 0x7e, 0xcc,
+ 0xaa, 0x2f, 0x76, 0xd5, 0x67, 0xc3, 0xbd, 0x1c, 0x6b, 0x95, 0x26, 0xf1, 0x54, 0xd8, 0xa8, 0x13,
+ 0x67, 0xb5, 0xe5, 0x4a, 0x6b, 0xad, 0xd4, 0x68, 0x55, 0x6b, 0xe5, 0xfa, 0xc6, 0x66, 0xa9, 0x59,
+ 0xf5, 0x06, 0xc9, 0x4d, 0xad, 0xde, 0xac, 0xb7, 0x2e, 0x56, 0xb4, 0x46, 0xb5, 0x5e, 0x2b, 0x9a,
+ 0x5e, 0x95, 0xb9, 0x51, 0xd5, 0xb7, 0x6e, 0x2c, 0xf5, 0x26, 0x38, 0xe7, 0xa7, 0xaf, 0xd7, 0x3d,
+ 0x41, 0x73, 0x76, 0x7e, 0x8f, 0xb7, 0x8d, 0x1a, 0xcd, 0xba, 0x46, 0x2d, 0xfd, 0x8d, 0xea, 0xaa,
+ 0xe6, 0x4d, 0x4f, 0x8a, 0xcf, 0x4f, 0x75, 0x1e, 0xf0, 0x2f, 0x59, 0xc8, 0x35, 0x5c, 0xab, 0x87,
+ 0xbe, 0x31, 0xec, 0xe8, 0xce, 0x03, 0xd8, 0xc4, 0x31, 0x61, 0x59, 0x77, 0x75, 0xb6, 0x76, 0xc2,
+ 0xa5, 0xa0, 0x5f, 0x93, 0xde, 0x4d, 0x0d, 0x2d, 0x25, 0xab, 0x17, 0x31, 0x30, 0x7c, 0x4d, 0xee,
+ 0x78, 0x59, 0x34, 0xa1, 0x64, 0xed, 0xe1, 0x7b, 0x46, 0xd9, 0x2f, 0x45, 0x70, 0x96, 0x83, 0xd5,
+ 0x93, 0xbf, 0xaf, 0x32, 0x58, 0xbd, 0x1e, 0xae, 0xeb, 0x53, 0x3e, 0xa2, 0x73, 0xdb, 0xea, 0x37,
+ 0xc0, 0xe3, 0x38, 0xf5, 0xaf, 0x6c, 0xd4, 0x2f, 0x56, 0x02, 0x45, 0x5f, 0x2e, 0x35, 0x4b, 0xc5,
+ 0x1d, 0xf4, 0x19, 0x05, 0x72, 0x1b, 0xd6, 0xd5, 0xfe, 0x4d, 0x6c, 0x13, 0x5f, 0xe3, 0x76, 0x3a,
+ 0xfc, 0x57, 0xf1, 0x38, 0x8d, 0x94, 0xd8, 0x37, 0xa2, 0x1d, 0x56, 0x3e, 0x9b, 0x4d, 0x22, 0xf6,
+ 0x8d, 0xa3, 0x7a, 0xa9, 0xfc, 0xf5, 0x28, 0x62, 0x8f, 0x10, 0x2d, 0x56, 0x2f, 0xc0, 0xf9, 0xf0,
+ 0x43, 0x75, 0xb9, 0x52, 0x6b, 0x56, 0x57, 0x1e, 0x0e, 0x85, 0x5b, 0xd5, 0xa4, 0xc4, 0x3f, 0xac,
+ 0x9b, 0x8b, 0x9f, 0xdf, 0x9f, 0x83, 0xd3, 0xe1, 0xb7, 0xd5, 0x4a, 0xd3, 0xff, 0xf2, 0x08, 0x7a,
+ 0x71, 0x1e, 0xe6, 0x68, 0xb7, 0xbf, 0xd5, 0xeb, 0x78, 0x16, 0xf3, 0xd3, 0x42, 0x74, 0x6f, 0x87,
+ 0x93, 0xd5, 0xcd, 0x95, 0x46, 0xc3, 0xb5, 0x6c, 0x7d, 0x07, 0x93, 0x11, 0x92, 0x4a, 0xab, 0x3f,
+ 0x19, 0xbd, 0x47, 0x7a, 0x2d, 0x5e, 0x1c, 0x6a, 0x68, 0x99, 0x11, 0xa8, 0x7f, 0x51, 0x6a, 0xed,
+ 0x5c, 0x82, 0x60, 0x32, 0xf4, 0x1f, 0x19, 0x73, 0x9b, 0x8b, 0xc6, 0x65, 0xfb, 0xc2, 0x4b, 0xb2,
+ 0x30, 0xd3, 0x34, 0xf6, 0xf0, 0x0b, 0x2c, 0x13, 0x3b, 0xea, 0x14, 0x28, 0xab, 0x1b, 0xcd, 0xe2,
+ 0x09, 0xef, 0xc1, 0x9b, 0xca, 0x64, 0xc8, 0x43, 0xc5, 0x2b, 0xc0, 0x7b, 0x28, 0x35, 0x8b, 0x8a,
+ 0xf7, 0xb0, 0x51, 0x69, 0x16, 0x73, 0xde, 0x43, 0xad, 0xd2, 0x2c, 0xe6, 0xbd, 0x87, 0xcd, 0xf5,
+ 0x66, 0xb1, 0xe0, 0x3d, 0x54, 0x1b, 0xcd, 0xe2, 0x94, 0xf7, 0xb0, 0xd4, 0x68, 0x16, 0xa7, 0xbd,
+ 0x87, 0x8b, 0x8d, 0x66, 0x71, 0xc6, 0x7b, 0x28, 0x37, 0x9b, 0x45, 0xf0, 0x1e, 0x1e, 0x6c, 0x34,
+ 0x8b, 0xb3, 0xde, 0x43, 0xa9, 0xdc, 0x2c, 0xce, 0x91, 0x87, 0x4a, 0xb3, 0x38, 0xef, 0x3d, 0x34,
+ 0x1a, 0xcd, 0xe2, 0x02, 0xa1, 0xdc, 0x68, 0x16, 0x4f, 0x92, 0xb2, 0xaa, 0xcd, 0x62, 0xd1, 0x7b,
+ 0x58, 0x6b, 0x34, 0x8b, 0xa7, 0x48, 0xe6, 0x46, 0xb3, 0xa8, 0x92, 0x42, 0x1b, 0xcd, 0xe2, 0x75,
+ 0x24, 0x4f, 0xa3, 0x59, 0x3c, 0x4d, 0x8a, 0x68, 0x34, 0x8b, 0x67, 0x08, 0x1b, 0x95, 0x66, 0xf1,
+ 0x2c, 0xc9, 0xa3, 0x35, 0x8b, 0xd7, 0x93, 0x4f, 0xb5, 0x66, 0xf1, 0x1c, 0x61, 0xac, 0xd2, 0x2c,
+ 0xde, 0x40, 0x1e, 0xb4, 0x66, 0x11, 0x91, 0x4f, 0xa5, 0x66, 0xf1, 0x46, 0xf4, 0x38, 0x98, 0x59,
+ 0xc5, 0x2e, 0x05, 0x11, 0x15, 0x41, 0x59, 0xc5, 0x2e, 0x3f, 0x79, 0x7e, 0x6d, 0x0e, 0xae, 0x67,
+ 0x0b, 0x2e, 0x2b, 0xb6, 0xb5, 0xb7, 0x8e, 0x77, 0xf4, 0xf6, 0x41, 0xe5, 0x51, 0xcf, 0x94, 0x43,
+ 0x2f, 0xcf, 0x08, 0xeb, 0xcb, 0xbd, 0xb0, 0x37, 0x22, 0xcf, 0xb1, 0xa6, 0xaf, 0xbf, 0x62, 0xac,
+ 0x88, 0x2b, 0xc6, 0x51, 0xc6, 0x5e, 0x4e, 0xc6, 0xd8, 0xfb, 0x07, 0xbe, 0x31, 0x08, 0xdb, 0x43,
+ 0x99, 0xbe, 0xed, 0x21, 0xaf, 0x85, 0xf5, 0xb0, 0xed, 0x58, 0xa6, 0xde, 0x6d, 0x30, 0x67, 0x20,
+ 0x3a, 0xbf, 0xec, 0x4f, 0x56, 0x9f, 0xeb, 0x37, 0x2a, 0x6a, 0xf0, 0x3d, 0x2b, 0x6e, 0x49, 0xaa,
+ 0x5f, 0x42, 0x11, 0xed, 0xeb, 0x93, 0x41, 0xfb, 0x6a, 0x0a, 0xed, 0xeb, 0x39, 0x47, 0xa0, 0x9d,
+ 0xac, 0xa9, 0x55, 0x47, 0x9b, 0x64, 0x86, 0xae, 0xf2, 0xfe, 0x6e, 0x94, 0x82, 0x3e, 0x93, 0x85,
+ 0xb3, 0x15, 0x73, 0xd0, 0x24, 0x85, 0x57, 0xa3, 0xb7, 0xf1, 0xd0, 0x6c, 0x8a, 0x22, 0xbd, 0x77,
+ 0x60, 0xb5, 0x07, 0xd3, 0x8c, 0x90, 0xe8, 0x6f, 0x05, 0x12, 0x6d, 0x08, 0x12, 0x7d, 0x60, 0x74,
+ 0xd2, 0xc9, 0x04, 0x5a, 0x1b, 0x6b, 0xdf, 0x95, 0x43, 0x7f, 0x9e, 0x85, 0x53, 0xd4, 0x9f, 0xef,
+ 0x41, 0x3a, 0x27, 0x22, 0xbd, 0xbd, 0x68, 0x7d, 0x75, 0xc3, 0xf9, 0x13, 0xd5, 0x6f, 0x2e, 0x05,
+ 0xbd, 0x91, 0x17, 0xf8, 0x43, 0xa2, 0xc0, 0x23, 0xfa, 0xf1, 0xfe, 0xe2, 0x22, 0x64, 0xfd, 0xeb,
+ 0x81, 0xac, 0x6b, 0x82, 0xac, 0xef, 0x1d, 0x89, 0xea, 0xf1, 0x8a, 0xf9, 0xcb, 0x39, 0x78, 0x1c,
+ 0xe5, 0x90, 0x29, 0x02, 0xed, 0x07, 0x4b, 0x66, 0x47, 0xc3, 0x8e, 0xab, 0xdb, 0xae, 0x10, 0xca,
+ 0xa2, 0x6f, 0xd2, 0x9d, 0x49, 0x61, 0xd2, 0x9d, 0x1d, 0x3a, 0xe9, 0x46, 0xef, 0xe6, 0x0d, 0xbc,
+ 0x4b, 0x22, 0xb2, 0xa5, 0x18, 0x0c, 0x22, 0x6a, 0x18, 0xd5, 0xa2, 0x02, 0xcb, 0xef, 0x5b, 0x04,
+ 0x94, 0x57, 0x8e, 0x5c, 0x42, 0x32, 0xc4, 0x7f, 0x6d, 0xbc, 0x96, 0x78, 0x8e, 0xff, 0x26, 0x9a,
+ 0x8d, 0xc5, 0x4e, 0xaa, 0x53, 0xa8, 0x57, 0x4e, 0xc3, 0x0c, 0xe9, 0x72, 0xd6, 0x0d, 0xf3, 0x0a,
+ 0xfa, 0x33, 0x05, 0xe6, 0x6a, 0xf8, 0x5a, 0x79, 0x57, 0xef, 0x76, 0xb1, 0xb9, 0x83, 0xd1, 0x23,
+ 0x82, 0x6d, 0xaf, 0xf7, 0x7a, 0xb5, 0x70, 0xb7, 0xd6, 0x7f, 0x55, 0x1f, 0x80, 0xbc, 0xd3, 0xb6,
+ 0x7a, 0xd4, 0xab, 0x6c, 0x81, 0x73, 0x0d, 0x13, 0x57, 0x9c, 0x4b, 0xfb, 0xee, 0xee, 0x22, 0x29,
+ 0xab, 0xd4, 0x33, 0x1a, 0xde, 0x0f, 0x1a, 0xfd, 0x8f, 0x8d, 0x93, 0x7f, 0x39, 0xb0, 0x33, 0xce,
+ 0xc4, 0x74, 0xc6, 0x01, 0xe3, 0x8b, 0x3c, 0xd3, 0x11, 0x8b, 0x24, 0xb7, 0xc0, 0x6c, 0xdb, 0xcf,
+ 0x12, 0x9c, 0x99, 0xe3, 0x93, 0xd0, 0x5f, 0x24, 0xea, 0xae, 0xa5, 0x0a, 0x4f, 0xa6, 0x55, 0x78,
+ 0xcc, 0xa6, 0xe6, 0x19, 0x38, 0xd5, 0xac, 0xd7, 0x5b, 0x1b, 0xa5, 0xda, 0xc3, 0x61, 0xac, 0x8a,
+ 0x6d, 0xf4, 0x9a, 0x1c, 0x2c, 0x34, 0xac, 0xee, 0x55, 0x1c, 0xe2, 0x5c, 0x15, 0x9c, 0x31, 0x79,
+ 0x39, 0x65, 0x0e, 0xc9, 0x49, 0x3d, 0x0b, 0x05, 0xdd, 0x74, 0xae, 0x61, 0xdf, 0xfc, 0x67, 0x6f,
+ 0x0c, 0xc6, 0x0f, 0xf3, 0x1d, 0x81, 0x26, 0xc2, 0x78, 0xdf, 0x10, 0x49, 0x8a, 0x5c, 0x45, 0x00,
+ 0x79, 0x01, 0xe6, 0x1c, 0xea, 0xb3, 0xd1, 0xe4, 0x5c, 0x73, 0x84, 0x34, 0xc2, 0x22, 0x75, 0x1a,
+ 0x52, 0x18, 0x8b, 0xe4, 0x0d, 0xbd, 0x21, 0xe8, 0x3f, 0xb6, 0x04, 0x88, 0x4b, 0x47, 0x61, 0x2c,
+ 0x19, 0xc8, 0xaf, 0x1b, 0xf7, 0x24, 0xfe, 0x1c, 0x9c, 0x66, 0xcd, 0xbe, 0x55, 0x5e, 0x2b, 0xad,
+ 0xaf, 0x57, 0x6a, 0xab, 0x95, 0x56, 0x75, 0x99, 0xee, 0x01, 0x87, 0x29, 0xa5, 0x66, 0xb3, 0xb2,
+ 0xb1, 0xd9, 0x6c, 0xb4, 0x2a, 0xcf, 0x2b, 0x57, 0x2a, 0xcb, 0xc4, 0x1d, 0x9a, 0x9c, 0x67, 0xf4,
+ 0x1d, 0xd7, 0x4b, 0xb5, 0xc6, 0xa5, 0x8a, 0x56, 0xdc, 0xbd, 0x50, 0x82, 0x59, 0x6e, 0xa0, 0xf0,
+ 0xb8, 0x5b, 0xc6, 0xdb, 0xfa, 0x7e, 0x97, 0x99, 0xe3, 0xc5, 0x13, 0x1e, 0x77, 0x44, 0x36, 0x75,
+ 0xb3, 0x7b, 0x50, 0xcc, 0xa8, 0x45, 0x98, 0xe3, 0xc7, 0x84, 0x62, 0x16, 0xbd, 0xe3, 0x26, 0x98,
+ 0xb9, 0x64, 0xd9, 0x57, 0x88, 0x0f, 0x2f, 0x7a, 0x3f, 0x8d, 0x69, 0xe5, 0x47, 0x07, 0xe0, 0x0c,
+ 0xb0, 0xd7, 0xc9, 0x3b, 0x6d, 0xf9, 0xd4, 0x16, 0x87, 0x46, 0x00, 0xb8, 0x05, 0x66, 0xaf, 0xf9,
+ 0xb9, 0xc3, 0x96, 0xce, 0x25, 0xa1, 0x9f, 0x91, 0x73, 0xc3, 0x1a, 0x5e, 0x64, 0xfa, 0xeb, 0xf9,
+ 0x6f, 0xcf, 0x42, 0x61, 0x15, 0xbb, 0xa5, 0x6e, 0x97, 0x97, 0xdb, 0xab, 0xa5, 0x4f, 0x75, 0x0a,
+ 0x95, 0x28, 0x75, 0xbb, 0xd1, 0x8d, 0x8a, 0x13, 0x90, 0x7f, 0xfa, 0x48, 0x48, 0x93, 0xf4, 0x99,
+ 0x1e, 0x52, 0x60, 0xfa, 0x12, 0xfb, 0x95, 0xd0, 0x51, 0xfa, 0x4d, 0x9c, 0x99, 0xf4, 0xd4, 0x30,
+ 0x9e, 0x59, 0x26, 0xde, 0x65, 0xc9, 0xcf, 0xa7, 0x3e, 0x04, 0x53, 0xfb, 0x0e, 0x2e, 0xeb, 0x8e,
+ 0x3f, 0xb4, 0x89, 0x35, 0xad, 0x5f, 0x7e, 0x04, 0xb7, 0xdd, 0xc5, 0xea, 0x9e, 0x37, 0xf1, 0xd9,
+ 0xa2, 0x19, 0x83, 0x10, 0x61, 0xec, 0x5d, 0xf3, 0x29, 0x78, 0xd3, 0xce, 0x6b, 0x86, 0xbb, 0x5b,
+ 0xde, 0xd5, 0x5d, 0xb6, 0x8d, 0x12, 0xbc, 0xa3, 0x57, 0x8c, 0x00, 0x67, 0xac, 0x93, 0x4d, 0xe4,
+ 0xe1, 0xf0, 0xc4, 0x20, 0x8e, 0xc1, 0x33, 0x66, 0x14, 0x10, 0xff, 0x26, 0x0b, 0xb9, 0x7a, 0x0f,
+ 0x9b, 0xd2, 0x27, 0x21, 0x03, 0xd9, 0x66, 0xfb, 0x64, 0xfb, 0x06, 0x79, 0x27, 0xdd, 0xa0, 0xd2,
+ 0x5e, 0xc9, 0x11, 0x92, 0xbd, 0x0b, 0x72, 0x86, 0xb9, 0x6d, 0x31, 0xcb, 0xf6, 0xc6, 0x08, 0x5b,
+ 0xa7, 0x6a, 0x6e, 0x5b, 0x1a, 0xc9, 0x28, 0xeb, 0x9f, 0x1b, 0x57, 0x76, 0xfa, 0xe2, 0xfe, 0xdb,
+ 0x69, 0x28, 0x50, 0x75, 0x46, 0xaf, 0x52, 0x40, 0x29, 0x75, 0x3a, 0x11, 0x82, 0xcf, 0x1e, 0x12,
+ 0xbc, 0x45, 0x7e, 0x0b, 0x30, 0x09, 0xde, 0xc5, 0x40, 0x56, 0x92, 0x7d, 0x3b, 0x6b, 0x52, 0xa5,
+ 0x4e, 0x27, 0xfa, 0x14, 0x41, 0x50, 0x60, 0x56, 0x2c, 0x90, 0x6f, 0xe1, 0x8a, 0x5c, 0x0b, 0x4f,
+ 0x3c, 0x10, 0x44, 0xf2, 0x97, 0x3e, 0x44, 0xff, 0x90, 0x85, 0xa9, 0x75, 0xc3, 0x71, 0x3d, 0x6c,
+ 0x4a, 0x32, 0xd8, 0xdc, 0x04, 0x33, 0xbe, 0x68, 0xbc, 0x2e, 0xcf, 0xeb, 0xcf, 0xc3, 0x04, 0x71,
+ 0x26, 0xfe, 0xa0, 0x88, 0xce, 0xd3, 0xe3, 0x6b, 0xcf, 0xb8, 0x88, 0x3e, 0x61, 0x16, 0x16, 0x9b,
+ 0xed, 0x2f, 0xf6, 0xe7, 0x02, 0x81, 0x6f, 0x08, 0x02, 0xbf, 0x67, 0x94, 0x22, 0xd3, 0x17, 0xfa,
+ 0xef, 0x67, 0x01, 0xbc, 0xb2, 0xd9, 0x31, 0xde, 0x27, 0x0a, 0xc1, 0x39, 0x62, 0xa4, 0xfb, 0x1a,
+ 0x5e, 0xba, 0x1b, 0xa2, 0x74, 0xbf, 0x79, 0x78, 0x55, 0xe3, 0x8e, 0xeb, 0xaa, 0x45, 0x50, 0x8c,
+ 0x40, 0xb4, 0xde, 0x23, 0x7a, 0x7b, 0x20, 0xd4, 0x4d, 0x41, 0xa8, 0xf7, 0x8d, 0x58, 0x52, 0xfa,
+ 0x72, 0xfd, 0xa3, 0x2c, 0x4c, 0x35, 0xb0, 0xeb, 0x75, 0x93, 0xe8, 0xa2, 0x4c, 0x0f, 0xcf, 0xb5,
+ 0xed, 0xac, 0x64, 0xdb, 0xfe, 0x6a, 0x46, 0x36, 0xc8, 0x57, 0x28, 0x19, 0xc6, 0x53, 0xc4, 0xea,
+ 0xc3, 0x9b, 0xa4, 0x82, 0x7c, 0x0d, 0xa3, 0x96, 0xbe, 0x74, 0xdf, 0x96, 0x0d, 0x7c, 0x40, 0xc4,
+ 0x53, 0x76, 0xbc, 0x59, 0x9c, 0x39, 0x6c, 0x16, 0xcb, 0x9f, 0xb2, 0xe3, 0xeb, 0x18, 0xed, 0x98,
+ 0x90, 0xd8, 0xd8, 0x18, 0x83, 0xcf, 0xc0, 0x28, 0xf2, 0x7a, 0x91, 0x02, 0x05, 0xb6, 0x79, 0xf0,
+ 0x40, 0xfc, 0xde, 0xc1, 0xf0, 0xa9, 0xc5, 0xfb, 0x46, 0x30, 0xe5, 0xe2, 0x96, 0xe5, 0x03, 0x36,
+ 0xb2, 0x1c, 0x1b, 0x77, 0x42, 0x9e, 0x44, 0x21, 0x66, 0xe3, 0x5c, 0xe8, 0xee, 0xe1, 0x93, 0xa8,
+ 0x78, 0x5f, 0x35, 0x9a, 0x29, 0x31, 0x0a, 0x63, 0x58, 0xc9, 0x1f, 0x05, 0x85, 0x2f, 0xab, 0x00,
+ 0x9b, 0xfb, 0x97, 0xbb, 0x86, 0xb3, 0x6b, 0x98, 0xc4, 0xfb, 0x6b, 0x8e, 0xbd, 0xd2, 0x60, 0xba,
+ 0xb1, 0xe6, 0x5f, 0xa4, 0x51, 0x50, 0x04, 0x65, 0xdf, 0x36, 0xd8, 0x32, 0x80, 0xf7, 0xa8, 0xde,
+ 0x1f, 0x78, 0x48, 0xe6, 0xfa, 0xc2, 0xa8, 0x78, 0x62, 0x08, 0x39, 0x58, 0xe4, 0x4a, 0x0f, 0x3d,
+ 0x25, 0xf9, 0x88, 0xc9, 0x79, 0x31, 0x62, 0xb2, 0x70, 0xb6, 0xba, 0xd0, 0x77, 0xb6, 0xda, 0xc3,
+ 0xd1, 0x31, 0x5e, 0x80, 0x89, 0x53, 0x91, 0xa2, 0x91, 0x67, 0xef, 0x8f, 0x47, 0x2c, 0xc3, 0x24,
+ 0x9b, 0x3a, 0xcc, 0x83, 0x3f, 0x4c, 0xe0, 0xfb, 0xbc, 0x19, 0xc9, 0x3e, 0xef, 0x23, 0xe1, 0xdc,
+ 0xc7, 0x92, 0x34, 0x9c, 0x13, 0x48, 0x4e, 0x60, 0x37, 0xd7, 0xc7, 0x2e, 0xfa, 0xa8, 0x74, 0x50,
+ 0x45, 0x4e, 0xc6, 0xb1, 0xb3, 0x18, 0xc6, 0x41, 0x36, 0xe0, 0x80, 0xdb, 0x03, 0x8e, 0xeb, 0x81,
+ 0x87, 0xd1, 0x4f, 0xa6, 0xcb, 0x7b, 0x23, 0xac, 0xd7, 0xa8, 0xb0, 0xe0, 0x1f, 0x52, 0xaf, 0x2f,
+ 0x3d, 0x58, 0x29, 0x37, 0x8b, 0xf8, 0xf0, 0xc1, 0x75, 0x72, 0x44, 0x9d, 0x1e, 0x47, 0x0f, 0xd7,
+ 0x64, 0xd0, 0xff, 0xc8, 0x42, 0x81, 0x99, 0x1b, 0x0f, 0x1c, 0x11, 0x42, 0xf4, 0xda, 0x51, 0x20,
+ 0x89, 0x8d, 0x15, 0xf2, 0xa9, 0xa4, 0x00, 0x8c, 0xc1, 0xc0, 0x78, 0x38, 0x35, 0x00, 0xd0, 0x3f,
+ 0x67, 0x21, 0xe7, 0x99, 0x41, 0x72, 0x91, 0x18, 0x3e, 0x29, 0xed, 0xc6, 0xcb, 0x09, 0xc0, 0x23,
+ 0x1f, 0xa1, 0xdf, 0x4b, 0x30, 0xd3, 0xa3, 0x19, 0x83, 0x38, 0x20, 0xb7, 0x4a, 0x74, 0x46, 0x58,
+ 0x0b, 0x7f, 0x43, 0xef, 0x95, 0x72, 0x05, 0x8e, 0xe7, 0x27, 0x19, 0x1c, 0x95, 0x71, 0x04, 0x6d,
+ 0xd8, 0x46, 0xff, 0x9a, 0x05, 0xd0, 0xb0, 0x63, 0x75, 0xaf, 0xe2, 0x2d, 0xdb, 0x40, 0x37, 0x86,
+ 0x00, 0xb0, 0x66, 0x9f, 0x09, 0x9b, 0xfd, 0xa7, 0xb3, 0xb2, 0x6e, 0xbd, 0x82, 0xe6, 0xf9, 0xc4,
+ 0x23, 0xc4, 0xff, 0x6c, 0x98, 0x62, 0x72, 0x64, 0x36, 0xa5, 0x9c, 0xf0, 0xfd, 0x9f, 0xd0, 0x07,
+ 0xa4, 0xdc, 0x82, 0x65, 0x38, 0x4a, 0x06, 0x40, 0x79, 0x04, 0x00, 0x4e, 0xc2, 0xac, 0x0f, 0xc0,
+ 0x96, 0x56, 0x2d, 0x62, 0xf4, 0x2e, 0x85, 0x78, 0x58, 0xd0, 0xc1, 0xed, 0xe8, 0x3d, 0xcd, 0x9f,
+ 0x4b, 0x4f, 0xf6, 0x39, 0x79, 0x04, 0xe5, 0xa7, 0x04, 0xd0, 0x6f, 0x4b, 0xcd, 0xee, 0x25, 0x18,
+ 0x7a, 0xac, 0xf4, 0x57, 0x17, 0x2a, 0x30, 0x2f, 0x58, 0x25, 0xea, 0x39, 0x38, 0x2d, 0x24, 0xd0,
+ 0xf1, 0xae, 0x53, 0x3c, 0xa1, 0x22, 0x38, 0x2b, 0x7c, 0x61, 0x2f, 0xb8, 0x53, 0xcc, 0xa0, 0x4f,
+ 0xfd, 0x51, 0x26, 0x58, 0xef, 0x79, 0x5f, 0x8e, 0xad, 0xb4, 0x7d, 0x5c, 0x0c, 0x3d, 0xd9, 0xb6,
+ 0x4c, 0x17, 0x3f, 0xca, 0xb9, 0xa9, 0x04, 0x09, 0xb1, 0x56, 0xc3, 0x39, 0x98, 0x72, 0x6d, 0xde,
+ 0x75, 0xc5, 0x7f, 0xe5, 0x15, 0x2b, 0x2f, 0x2a, 0x56, 0x0d, 0x2e, 0x18, 0x66, 0xbb, 0xbb, 0xdf,
+ 0xc1, 0x1a, 0xee, 0xea, 0x9e, 0x0c, 0x9d, 0x92, 0xb3, 0x8c, 0x7b, 0xd8, 0xec, 0x60, 0xd3, 0xa5,
+ 0x7c, 0xfa, 0xa7, 0x50, 0x25, 0x72, 0x8a, 0xca, 0x78, 0xbf, 0xa8, 0x8c, 0x4f, 0x1c, 0xb4, 0x84,
+ 0x1b, 0xb3, 0xde, 0x77, 0x0f, 0x00, 0xad, 0xdb, 0x45, 0x03, 0x5f, 0x63, 0x6a, 0x78, 0x43, 0xdf,
+ 0xaa, 0x5f, 0x3d, 0xc8, 0xa0, 0x71, 0x99, 0xd1, 0x17, 0x02, 0xf5, 0x7b, 0x8e, 0xa0, 0x7e, 0x77,
+ 0x4a, 0xb2, 0x90, 0x4c, 0xeb, 0x7a, 0x23, 0x68, 0xdd, 0x3c, 0xcc, 0x84, 0xbb, 0xc9, 0x8a, 0x7a,
+ 0x03, 0x9c, 0xf1, 0x3d, 0x8c, 0x6b, 0x95, 0xca, 0x72, 0xa3, 0xb5, 0xb5, 0xb9, 0xaa, 0x95, 0x96,
+ 0x2b, 0x45, 0xf0, 0xf4, 0x93, 0xea, 0x65, 0xe0, 0x18, 0x9c, 0x43, 0x7f, 0x90, 0x85, 0x3c, 0x39,
+ 0x42, 0x8d, 0xbe, 0x75, 0x4c, 0x9a, 0xe3, 0x08, 0x4e, 0x4f, 0xc1, 0xb8, 0x2b, 0x7f, 0x25, 0x04,
+ 0x13, 0x26, 0xe1, 0xea, 0x48, 0x57, 0x42, 0xc4, 0x10, 0x4a, 0x7f, 0x26, 0xe4, 0x35, 0xc9, 0xc6,
+ 0xae, 0x75, 0xed, 0xeb, 0xb9, 0x49, 0x7a, 0xf5, 0x3f, 0xe6, 0x26, 0x39, 0x80, 0x85, 0x89, 0x37,
+ 0xc9, 0x01, 0xed, 0x2e, 0xa6, 0x99, 0xa2, 0x0f, 0xe7, 0x83, 0xf9, 0xdf, 0xc7, 0xb2, 0x47, 0xda,
+ 0xfb, 0x2a, 0xc1, 0xbc, 0x61, 0xba, 0xd8, 0x36, 0xf5, 0xee, 0x4a, 0x57, 0xdf, 0xf1, 0xed, 0xd3,
+ 0xfe, 0x0d, 0x8f, 0x2a, 0x97, 0x47, 0x13, 0xff, 0x50, 0xcf, 0x03, 0xb8, 0x78, 0xaf, 0xd7, 0xd5,
+ 0xdd, 0x50, 0xf5, 0xb8, 0x14, 0x5e, 0xfb, 0x72, 0xa2, 0xf6, 0x3d, 0x05, 0xae, 0xa3, 0xa0, 0x35,
+ 0x0f, 0x7a, 0x78, 0xcb, 0x34, 0x9e, 0xbf, 0x4f, 0x22, 0x15, 0x53, 0x1d, 0x1d, 0xf4, 0x49, 0xd8,
+ 0x01, 0x2a, 0x88, 0x3b, 0x40, 0xea, 0x7d, 0x70, 0x03, 0x09, 0x2b, 0x8d, 0xbd, 0x5f, 0x2e, 0x19,
+ 0x9d, 0x1d, 0xec, 0x56, 0xb7, 0x37, 0x0c, 0xc7, 0x31, 0xcc, 0x1d, 0x32, 0x1d, 0x9f, 0xd6, 0xa2,
+ 0x33, 0xa0, 0xbf, 0x91, 0x8e, 0x82, 0xe4, 0xf7, 0x19, 0x43, 0xa2, 0x20, 0x05, 0xed, 0x54, 0xe9,
+ 0x6b, 0xa7, 0xc1, 0xaa, 0x4e, 0x4e, 0x62, 0x55, 0x87, 0xc7, 0x34, 0x2f, 0xb9, 0x3a, 0xf0, 0x7a,
+ 0xa9, 0x30, 0x4b, 0x71, 0xd5, 0x48, 0xbf, 0xef, 0xfb, 0x8a, 0x02, 0x0b, 0xb4, 0xe8, 0x25, 0xcb,
+ 0xba, 0xb2, 0xa7, 0xdb, 0x57, 0xd0, 0x0f, 0x1c, 0x6d, 0x17, 0x37, 0x76, 0xf7, 0x2a, 0x6a, 0x4b,
+ 0xb6, 0x4f, 0x79, 0x73, 0xfd, 0xca, 0x8b, 0x7e, 0x4b, 0x7a, 0x4a, 0x22, 0xc8, 0xd3, 0xaf, 0xd4,
+ 0x64, 0xb6, 0xb7, 0xe4, 0x0e, 0x2e, 0xca, 0x30, 0x98, 0x3e, 0xf0, 0xbf, 0x11, 0x00, 0xef, 0x8f,
+ 0x23, 0xfc, 0xce, 0xc0, 0x38, 0x71, 0x47, 0x5f, 0x1c, 0x0d, 0x3b, 0x9f, 0xaf, 0x11, 0xb0, 0x2b,
+ 0x82, 0x72, 0x25, 0x70, 0x46, 0xf2, 0x1e, 0xf9, 0x0a, 0xe5, 0xd2, 0x43, 0x33, 0x82, 0xe5, 0x89,
+ 0xa0, 0x79, 0x5a, 0x64, 0xa1, 0xde, 0x4b, 0x15, 0xd3, 0xcf, 0x4b, 0xef, 0xb8, 0x0d, 0x14, 0x10,
+ 0xe5, 0x6e, 0x32, 0xad, 0x52, 0x6e, 0xbb, 0x4e, 0x9e, 0xcd, 0xf4, 0xd1, 0x7c, 0x79, 0x1e, 0x66,
+ 0xfc, 0x68, 0x54, 0xe4, 0x86, 0xb6, 0x00, 0xc3, 0xb3, 0x50, 0x70, 0xac, 0x7d, 0xbb, 0x8d, 0xd9,
+ 0x1e, 0x28, 0x7b, 0x1b, 0x61, 0xbf, 0x6e, 0xa8, 0xb9, 0x70, 0xc8, 0x22, 0xc9, 0x25, 0xb6, 0x48,
+ 0xa2, 0xed, 0xdd, 0x18, 0xfb, 0x01, 0xbd, 0x42, 0xfa, 0x5a, 0x0d, 0x01, 0xb3, 0x06, 0x76, 0x1f,
+ 0x8b, 0x46, 0xc0, 0x2f, 0x4b, 0xed, 0x06, 0x0d, 0xa9, 0x49, 0x32, 0x95, 0xab, 0x8f, 0x60, 0x07,
+ 0xdf, 0x08, 0xd7, 0xfb, 0x39, 0x98, 0x01, 0x4c, 0x0c, 0xde, 0x2d, 0x6d, 0xbd, 0xa8, 0xa0, 0x17,
+ 0xe5, 0xa0, 0x48, 0x59, 0xab, 0x07, 0xb6, 0x20, 0x7a, 0x75, 0xe6, 0xb8, 0x0d, 0xde, 0xe8, 0x19,
+ 0xec, 0xef, 0x66, 0x65, 0x43, 0x77, 0x0b, 0x82, 0x0f, 0x6b, 0x17, 0xa1, 0x49, 0x23, 0x34, 0xb3,
+ 0x18, 0xe5, 0x43, 0x3f, 0x9b, 0x91, 0x89, 0x04, 0x2e, 0xc7, 0x62, 0xfa, 0xbd, 0xd2, 0x57, 0x73,
+ 0x7e, 0x50, 0xc1, 0x15, 0xdb, 0xda, 0xdb, 0xb2, 0xbb, 0xe8, 0x7f, 0x49, 0x5d, 0xb4, 0x10, 0x31,
+ 0xbb, 0xc8, 0x46, 0xcf, 0x2e, 0xc8, 0x8a, 0x74, 0x37, 0xdc, 0x0a, 0xeb, 0x8e, 0x30, 0x7c, 0xab,
+ 0xb7, 0xc1, 0x82, 0xde, 0xe9, 0x6c, 0xea, 0x3b, 0xb8, 0xec, 0x4d, 0xdb, 0x4d, 0x97, 0x05, 0x1c,
+ 0xeb, 0x4b, 0x8d, 0x9d, 0xca, 0x88, 0x7d, 0xe4, 0xd4, 0x21, 0xab, 0x54, 0x7e, 0x19, 0x56, 0x00,
+ 0x91, 0xc9, 0x6f, 0x22, 0xc3, 0x9f, 0x37, 0x64, 0xb4, 0x77, 0xf5, 0x30, 0x3c, 0x22, 0x7b, 0x93,
+ 0xf4, 0xc5, 0x92, 0xe0, 0x3b, 0x7d, 0xcd, 0xfb, 0xa5, 0x2c, 0x4c, 0x79, 0x78, 0x94, 0x3a, 0x1d,
+ 0xf4, 0x04, 0x21, 0x8a, 0x68, 0xa4, 0x37, 0xdc, 0x77, 0x4b, 0xbb, 0x21, 0xfa, 0x35, 0xa4, 0xf4,
+ 0x23, 0x30, 0x09, 0x85, 0x98, 0x15, 0x84, 0x28, 0xe7, 0x6d, 0x18, 0x5b, 0x44, 0xfa, 0xe2, 0xfb,
+ 0x64, 0x16, 0xe6, 0xfd, 0x79, 0xc6, 0x0a, 0x76, 0xdb, 0xbb, 0xe8, 0x1e, 0xd9, 0x75, 0x2e, 0xd6,
+ 0x12, 0x83, 0x2d, 0xe1, 0x2e, 0xfa, 0xb7, 0x4c, 0x42, 0x95, 0x17, 0x4a, 0x8e, 0x58, 0x24, 0x4c,
+ 0xa4, 0x8b, 0x71, 0x04, 0xd3, 0x17, 0xe6, 0x17, 0xb2, 0x00, 0x4d, 0x2b, 0x98, 0x2c, 0x1f, 0x41,
+ 0x92, 0x3f, 0x28, 0xbd, 0x5b, 0xcc, 0x2a, 0x1e, 0x16, 0x9b, 0xbc, 0xe7, 0x90, 0x74, 0xa6, 0x1a,
+ 0x56, 0xd2, 0x44, 0xda, 0xfa, 0xcc, 0xf2, 0x7e, 0xaf, 0x6b, 0xb4, 0x75, 0xb7, 0xdf, 0x03, 0x30,
+ 0x5a, 0xbc, 0xe4, 0x7a, 0xe3, 0x44, 0x46, 0x63, 0x50, 0x46, 0x84, 0x2c, 0x69, 0x04, 0x9f, 0xac,
+ 0x1f, 0xc1, 0x47, 0xd2, 0xab, 0x67, 0x08, 0xf1, 0x09, 0xa8, 0xa7, 0x02, 0x27, 0xeb, 0x3d, 0x6c,
+ 0x2e, 0xd9, 0x58, 0xef, 0xb4, 0xed, 0xfd, 0xbd, 0xcb, 0x0e, 0xef, 0xbe, 0x1a, 0xaf, 0xa3, 0xdc,
+ 0xca, 0x75, 0x56, 0x58, 0xb9, 0x46, 0xdf, 0xa5, 0xc8, 0x46, 0x4f, 0xe3, 0xf6, 0x57, 0x38, 0x1e,
+ 0x46, 0x18, 0xea, 0x12, 0x39, 0x5d, 0xf5, 0x2d, 0x52, 0xe7, 0x92, 0x2c, 0x52, 0xbf, 0x55, 0x2a,
+ 0x16, 0x9b, 0x54, 0xbd, 0x26, 0xe2, 0x3b, 0xb7, 0xd0, 0xc0, 0x6e, 0x04, 0xbc, 0xb7, 0xc2, 0xfc,
+ 0xe5, 0xf0, 0x4b, 0x00, 0xb1, 0x98, 0x38, 0xc0, 0xa3, 0xf5, 0x6d, 0x49, 0x57, 0x68, 0x44, 0x16,
+ 0x22, 0xd0, 0x0d, 0x10, 0xcc, 0xca, 0xb8, 0xcd, 0x25, 0x5a, 0x6e, 0x89, 0x2d, 0x3f, 0x7d, 0x14,
+ 0x3e, 0x9a, 0x85, 0x59, 0x72, 0x69, 0xf3, 0xd2, 0x01, 0x39, 0xc8, 0x29, 0x69, 0x94, 0xbc, 0x9c,
+ 0x17, 0xb3, 0x0a, 0xb9, 0xae, 0x61, 0x5e, 0xf1, 0xfd, 0x1d, 0xbd, 0xe7, 0xf0, 0x0a, 0xd0, 0xec,
+ 0x80, 0x2b, 0x40, 0x83, 0x6d, 0x92, 0xa0, 0xdc, 0x23, 0xdd, 0x49, 0x3f, 0x94, 0x5c, 0xfa, 0x62,
+ 0xfc, 0xab, 0x1c, 0x14, 0x1a, 0x58, 0xb7, 0xdb, 0xbb, 0xe8, 0x7d, 0xd9, 0x81, 0x53, 0x89, 0x69,
+ 0x71, 0x2a, 0xb1, 0x02, 0x53, 0xdb, 0x46, 0xd7, 0xc5, 0x36, 0xf5, 0x01, 0xe7, 0xbb, 0x76, 0xda,
+ 0xc4, 0x97, 0xba, 0x56, 0xfb, 0xca, 0x22, 0x33, 0xed, 0x17, 0xfd, 0xe8, 0xcd, 0x8b, 0x2b, 0xe4,
+ 0x27, 0xcd, 0xff, 0xd9, 0x33, 0x08, 0x1d, 0xcb, 0x76, 0xa3, 0x6e, 0x03, 0x8a, 0xa0, 0xd2, 0xb0,
+ 0x6c, 0x57, 0xa3, 0x3f, 0x7a, 0x30, 0x6f, 0xef, 0x77, 0xbb, 0x4d, 0xfc, 0xa8, 0xeb, 0x4f, 0xeb,
+ 0xfc, 0x77, 0xcf, 0x58, 0xb4, 0xb6, 0xb7, 0x1d, 0x4c, 0x17, 0x15, 0xf2, 0x1a, 0x7b, 0x53, 0x4f,
+ 0x43, 0xbe, 0x6b, 0xec, 0x19, 0x74, 0x22, 0x92, 0xd7, 0xe8, 0x8b, 0x7a, 0x07, 0x14, 0xc3, 0x39,
+ 0x10, 0x65, 0xf4, 0x5c, 0x81, 0x34, 0xcd, 0x43, 0xe9, 0x9e, 0xce, 0x5c, 0xc1, 0x07, 0xce, 0xb9,
+ 0x29, 0xf2, 0x9d, 0x3c, 0x8b, 0x07, 0x6e, 0x64, 0x36, 0x4c, 0xa8, 0xc4, 0xa3, 0x67, 0xb8, 0x36,
+ 0x6e, 0x5b, 0x76, 0xc7, 0x97, 0x4d, 0xf4, 0x04, 0x83, 0xe5, 0x4b, 0xb6, 0xcd, 0x31, 0xb0, 0xf0,
+ 0xf4, 0x35, 0xed, 0xdd, 0x05, 0xaf, 0xdb, 0xf4, 0x8a, 0xbe, 0x64, 0xb8, 0xbb, 0x1b, 0xd8, 0xd5,
+ 0xd1, 0x5f, 0x29, 0x03, 0x35, 0x6e, 0xf6, 0xff, 0xd7, 0xb8, 0x21, 0x1a, 0x47, 0x63, 0x7e, 0xb9,
+ 0xfb, 0xb6, 0xe9, 0xc9, 0x91, 0xf9, 0xd1, 0x72, 0x29, 0xea, 0x7d, 0x70, 0x43, 0xf8, 0xe6, 0x2f,
+ 0xa5, 0x2e, 0x73, 0xae, 0xb5, 0xd3, 0x5a, 0x74, 0x06, 0x75, 0x13, 0x1e, 0x4f, 0x3f, 0xae, 0x35,
+ 0x37, 0xd6, 0xd7, 0x8c, 0x9d, 0xdd, 0xae, 0xb1, 0xb3, 0xeb, 0x3a, 0x55, 0xd3, 0x71, 0xb1, 0xde,
+ 0xa9, 0x6f, 0x6b, 0xf4, 0x1e, 0x2f, 0x20, 0x74, 0x64, 0xb2, 0x8a, 0x3e, 0xe2, 0x72, 0xa3, 0x1b,
+ 0xaf, 0x29, 0x11, 0x2d, 0xe5, 0x19, 0x5e, 0x4b, 0x71, 0xf6, 0xbb, 0x01, 0xa6, 0x37, 0xf5, 0x61,
+ 0x1a, 0xaa, 0xfa, 0x7e, 0x97, 0x34, 0x17, 0x92, 0x39, 0xe9, 0x38, 0x17, 0xc3, 0x49, 0xfa, 0xcd,
+ 0xe6, 0x7f, 0x15, 0x20, 0xbf, 0x6a, 0xeb, 0xbd, 0x5d, 0xf4, 0x22, 0xae, 0x7f, 0x1e, 0x57, 0x9b,
+ 0x08, 0xb4, 0x33, 0x3b, 0x4c, 0x3b, 0x95, 0x21, 0xda, 0x99, 0xe3, 0xb4, 0x33, 0x7a, 0xd1, 0xf9,
+ 0x02, 0xcc, 0xb5, 0xad, 0x6e, 0x17, 0xb7, 0x3d, 0x79, 0x54, 0x3b, 0x64, 0xb5, 0x67, 0x46, 0x13,
+ 0xd2, 0x48, 0x84, 0x7b, 0xec, 0x36, 0xe8, 0x1a, 0x3b, 0x55, 0xfa, 0x30, 0x01, 0xbd, 0x3a, 0x0b,
+ 0xb9, 0x4a, 0x67, 0x07, 0x0b, 0xeb, 0xf0, 0x19, 0x6e, 0x1d, 0xfe, 0x2c, 0x14, 0x5c, 0xdd, 0xde,
+ 0xc1, 0xae, 0xbf, 0x4e, 0x40, 0xdf, 0x82, 0xc0, 0xfb, 0x0a, 0x17, 0x78, 0xff, 0x9b, 0x21, 0xe7,
+ 0xc9, 0x8c, 0xb9, 0xc5, 0x3f, 0x7e, 0x10, 0xfc, 0x44, 0xf6, 0x8b, 0x5e, 0x89, 0x8b, 0x5e, 0xad,
+ 0x35, 0xf2, 0x43, 0x3f, 0xd6, 0xf9, 0x43, 0x58, 0x93, 0x2b, 0x89, 0xdb, 0x96, 0x59, 0xdd, 0xd3,
+ 0x77, 0x30, 0xab, 0x66, 0x98, 0xe0, 0x7f, 0xad, 0xec, 0x59, 0x8f, 0x18, 0x6c, 0x51, 0x2b, 0x4c,
+ 0xf0, 0xaa, 0xb0, 0x6b, 0x74, 0x3a, 0xd8, 0x64, 0x2d, 0x9b, 0xbd, 0x5d, 0x38, 0x0f, 0x39, 0x8f,
+ 0x07, 0x4f, 0x7f, 0x3c, 0x63, 0xa1, 0x78, 0x42, 0x9d, 0xf3, 0x9a, 0x15, 0x6d, 0xbc, 0xc5, 0x8c,
+ 0xb8, 0xe6, 0x2a, 0xe3, 0x35, 0x44, 0x2b, 0x37, 0xb8, 0x71, 0x3d, 0x19, 0xf2, 0xa6, 0xd5, 0xc1,
+ 0x43, 0x07, 0x21, 0x9a, 0x4b, 0x7d, 0x3a, 0xe4, 0x71, 0xc7, 0xeb, 0x15, 0x14, 0x92, 0xfd, 0x7c,
+ 0xbc, 0x2c, 0x35, 0x9a, 0x39, 0x99, 0x6b, 0xd2, 0x20, 0x6e, 0xd3, 0x6f, 0x80, 0xdf, 0x3b, 0x05,
+ 0x27, 0x69, 0x1f, 0xd0, 0xd8, 0xbf, 0xec, 0x91, 0xba, 0x8c, 0xd1, 0x9b, 0x06, 0x0f, 0x5c, 0x27,
+ 0x45, 0x65, 0x3f, 0x0d, 0x79, 0x67, 0xff, 0x72, 0x60, 0x84, 0xd2, 0x17, 0xbe, 0xe9, 0x66, 0xc7,
+ 0x32, 0x9c, 0x29, 0xa3, 0x0e, 0x67, 0xc2, 0xd0, 0xa4, 0xf8, 0x8d, 0x3f, 0x1c, 0xc8, 0xe8, 0x81,
+ 0x0e, 0x7f, 0x20, 0x1b, 0x34, 0x0c, 0x9d, 0x83, 0x29, 0x7d, 0xdb, 0xc5, 0x76, 0x68, 0x26, 0xb2,
+ 0x57, 0x6f, 0xa8, 0xbc, 0x8c, 0xb7, 0x2d, 0xdb, 0x13, 0x0b, 0xbd, 0x77, 0x21, 0x78, 0xe7, 0x5a,
+ 0x2e, 0x08, 0x3b, 0x68, 0x77, 0xc2, 0x29, 0xd3, 0x5a, 0xc6, 0x3d, 0x26, 0x67, 0x8a, 0xe2, 0x3c,
+ 0x69, 0x01, 0x87, 0x3f, 0x1c, 0xea, 0x4a, 0x16, 0x0e, 0x77, 0x25, 0xe8, 0xd3, 0x49, 0xe7, 0xcc,
+ 0x7d, 0x40, 0x8f, 0xcd, 0x42, 0x53, 0x9f, 0x05, 0x73, 0x1d, 0xe6, 0x21, 0xd6, 0x36, 0x82, 0x56,
+ 0x12, 0xf9, 0x9f, 0x90, 0x39, 0x54, 0xa4, 0x1c, 0xaf, 0x48, 0xab, 0x30, 0x4d, 0x8e, 0x5e, 0x7b,
+ 0x9a, 0x94, 0xef, 0xf3, 0xc8, 0x27, 0xd3, 0xba, 0xa0, 0x52, 0x9c, 0xd8, 0x16, 0xcb, 0xec, 0x17,
+ 0x2d, 0xf8, 0x39, 0xd9, 0xec, 0x3b, 0x5e, 0x42, 0xe9, 0x37, 0xc7, 0x9f, 0x2b, 0xc0, 0x0d, 0x65,
+ 0xdb, 0x72, 0x1c, 0x72, 0x04, 0xa7, 0xbf, 0x61, 0xbe, 0x39, 0x2b, 0x5c, 0xc1, 0xf3, 0x98, 0x6e,
+ 0x7e, 0x83, 0x1a, 0xd4, 0xe4, 0x9a, 0xc6, 0x9f, 0x4b, 0x07, 0xad, 0x09, 0xf6, 0x1f, 0x22, 0x84,
+ 0xfe, 0xf5, 0xd1, 0x48, 0xde, 0x9d, 0x91, 0x89, 0xa3, 0x93, 0x50, 0x56, 0x13, 0xb8, 0x73, 0x29,
+ 0x0b, 0x37, 0xf6, 0x73, 0xb3, 0x65, 0x3a, 0x41, 0x83, 0xb9, 0x79, 0x48, 0x7b, 0x11, 0xe3, 0xae,
+ 0xc4, 0xde, 0xb8, 0x1b, 0x51, 0x77, 0xae, 0xb4, 0x88, 0xc5, 0x92, 0xf0, 0x40, 0x4f, 0xdc, 0x8d,
+ 0xbb, 0x89, 0xc9, 0xa7, 0x2f, 0xdc, 0xdf, 0xcd, 0xc1, 0xc9, 0x55, 0xdb, 0xda, 0xef, 0x39, 0x61,
+ 0x0f, 0xf4, 0x27, 0x83, 0x37, 0x64, 0x0b, 0x32, 0xa6, 0xc1, 0x2d, 0x30, 0x6b, 0x33, 0x6b, 0x2e,
+ 0xdc, 0x9e, 0xe5, 0x93, 0xf8, 0xde, 0x4b, 0x39, 0x4a, 0xef, 0x15, 0xf6, 0x33, 0x39, 0xa1, 0x9f,
+ 0xe9, 0xef, 0x39, 0xf2, 0x03, 0x7a, 0x8e, 0x3f, 0xce, 0x26, 0x1c, 0x54, 0xfb, 0x44, 0x14, 0xd1,
+ 0x5f, 0x94, 0xa1, 0xb0, 0x43, 0x32, 0xb2, 0xee, 0xe2, 0x49, 0x72, 0x35, 0x23, 0xc4, 0x35, 0xf6,
+ 0x6b, 0x28, 0x57, 0x85, 0xd7, 0xe1, 0x44, 0x03, 0x5c, 0x3c, 0xb7, 0xe9, 0x2b, 0xd5, 0x1b, 0x72,
+ 0x30, 0x17, 0x94, 0x5e, 0xed, 0x38, 0x42, 0x74, 0x57, 0x4e, 0xa3, 0xe6, 0x65, 0x34, 0xea, 0xd0,
+ 0x3a, 0x73, 0x30, 0xea, 0x28, 0xdc, 0xa8, 0x33, 0x70, 0x74, 0x99, 0x8b, 0x18, 0x5d, 0xd0, 0x0b,
+ 0x15, 0xd9, 0x4b, 0xec, 0xc4, 0xae, 0x95, 0xd4, 0xe6, 0xb1, 0x3c, 0x58, 0x48, 0x5e, 0xa5, 0x37,
+ 0xbc, 0x56, 0xe9, 0x2b, 0xc9, 0x87, 0xb2, 0x70, 0xea, 0x70, 0x67, 0xfe, 0x0d, 0xa2, 0x97, 0x9a,
+ 0x57, 0x27, 0x27, 0xf0, 0x52, 0x23, 0x6f, 0xe2, 0x26, 0x5d, 0x6c, 0x10, 0x14, 0xc1, 0xde, 0x1b,
+ 0xde, 0x89, 0xcb, 0x85, 0x39, 0x91, 0x24, 0x9a, 0xbe, 0x00, 0x7f, 0x48, 0x81, 0x99, 0x06, 0x76,
+ 0xd7, 0xf5, 0x03, 0x6b, 0xdf, 0x45, 0xba, 0xec, 0xf6, 0xdc, 0x33, 0xa1, 0xd0, 0x25, 0xbf, 0x90,
+ 0x0e, 0x86, 0x0f, 0x3a, 0xca, 0xef, 0x6f, 0x11, 0xdf, 0x20, 0x4a, 0x5a, 0x63, 0xf9, 0xc5, 0xe8,
+ 0x33, 0x32, 0xbb, 0xa3, 0x01, 0x77, 0x63, 0xd9, 0xda, 0x49, 0xb4, 0x77, 0x1a, 0x55, 0x74, 0xfa,
+ 0xb0, 0x7c, 0x97, 0x02, 0xf3, 0x0d, 0xec, 0x56, 0x9d, 0x15, 0xfd, 0xaa, 0x65, 0x1b, 0x2e, 0x46,
+ 0xab, 0xb2, 0xd0, 0x9c, 0x07, 0x30, 0x82, 0xdf, 0x58, 0x4c, 0x2c, 0x2e, 0x05, 0xfd, 0x6c, 0x52,
+ 0x47, 0x21, 0x81, 0x8f, 0xb1, 0x80, 0x90, 0xc8, 0xc7, 0x22, 0xae, 0xf8, 0x09, 0x5c, 0xc3, 0x9d,
+ 0x65, 0x40, 0x94, 0xec, 0xf6, 0xae, 0x71, 0x15, 0x77, 0x12, 0x02, 0xe1, 0xff, 0x16, 0x02, 0x11,
+ 0x10, 0x4a, 0xec, 0xbe, 0x22, 0xf0, 0x31, 0x0e, 0xf7, 0x95, 0x38, 0x82, 0x13, 0x09, 0x6b, 0xe5,
+ 0x75, 0x3d, 0x6c, 0x3d, 0xf3, 0x01, 0x59, 0xb1, 0x86, 0x26, 0x5b, 0x96, 0x37, 0xd9, 0x46, 0xea,
+ 0x58, 0x68, 0xd9, 0xc3, 0x74, 0x3a, 0x97, 0x46, 0xc7, 0x32, 0xb0, 0xe8, 0xf4, 0x85, 0xfe, 0x5e,
+ 0x05, 0xce, 0x04, 0xf1, 0x5e, 0x1a, 0xd8, 0x5d, 0xd6, 0x9d, 0xdd, 0xcb, 0x96, 0x6e, 0x77, 0x50,
+ 0x79, 0x0c, 0x07, 0x0e, 0xd1, 0x1f, 0xf2, 0x20, 0xd4, 0x44, 0x10, 0x06, 0xba, 0x92, 0x0e, 0xe4,
+ 0x65, 0x1c, 0x9d, 0x4c, 0xac, 0xb7, 0xeb, 0x2f, 0x04, 0x60, 0x3d, 0x57, 0x00, 0xeb, 0xfe, 0x51,
+ 0x59, 0x4c, 0x1f, 0xb8, 0x1f, 0xa5, 0x23, 0x02, 0xe7, 0xf5, 0xfc, 0xb0, 0x2c, 0x60, 0x11, 0x5e,
+ 0xaf, 0x4a, 0xa4, 0xd7, 0xeb, 0x48, 0x63, 0xc4, 0x50, 0x8f, 0xe5, 0x74, 0xc7, 0x88, 0x63, 0xf4,
+ 0x46, 0x7e, 0xa7, 0x02, 0x45, 0x12, 0xf0, 0x8b, 0xf3, 0x08, 0xe7, 0xe3, 0x67, 0xc7, 0xa3, 0x73,
+ 0xc8, 0xfb, 0x7c, 0x2a, 0xa9, 0xf7, 0x39, 0x7a, 0x47, 0x52, 0x1f, 0xf3, 0x7e, 0x6e, 0xc7, 0x82,
+ 0x58, 0x22, 0x17, 0xf2, 0x21, 0x1c, 0xa4, 0x0f, 0xda, 0xf7, 0x29, 0x00, 0x5e, 0x83, 0x66, 0x67,
+ 0x23, 0x9e, 0x27, 0x0b, 0xd7, 0x5d, 0xbc, 0xdf, 0xbd, 0x07, 0xd4, 0x99, 0x3e, 0xa0, 0x28, 0xc5,
+ 0xf0, 0xd4, 0xc5, 0x9b, 0x92, 0xfa, 0x56, 0x86, 0x5c, 0x8d, 0x05, 0x96, 0x44, 0xde, 0x96, 0x91,
+ 0x65, 0xa7, 0x0f, 0xc8, 0x7f, 0xcf, 0x42, 0xbe, 0x69, 0x35, 0xb0, 0x7b, 0x74, 0x53, 0x20, 0x71,
+ 0xd4, 0x00, 0x52, 0xee, 0x38, 0xa2, 0x06, 0x0c, 0x22, 0x94, 0xbe, 0xe8, 0xde, 0x93, 0x85, 0xb9,
+ 0xa6, 0x55, 0x0e, 0x16, 0xa7, 0xe4, 0x7d, 0x55, 0xe5, 0x2f, 0xe2, 0x0f, 0x2a, 0x18, 0x16, 0x73,
+ 0xa4, 0x8b, 0xf8, 0x87, 0xd3, 0x4b, 0x5f, 0x6e, 0xf7, 0xc0, 0xc9, 0x2d, 0xb3, 0x63, 0x69, 0xb8,
+ 0x63, 0xb1, 0x95, 0x6e, 0x55, 0x85, 0xdc, 0xbe, 0xd9, 0xb1, 0x08, 0xcb, 0x79, 0x8d, 0x3c, 0x7b,
+ 0x69, 0x36, 0xee, 0x58, 0xcc, 0x37, 0x80, 0x3c, 0xa3, 0x3f, 0x57, 0x20, 0xe7, 0xfd, 0x2b, 0x2f,
+ 0xea, 0x77, 0x2a, 0x09, 0xe3, 0x20, 0x78, 0xe4, 0xc7, 0x62, 0x09, 0x3d, 0xc0, 0xad, 0xfd, 0x53,
+ 0x0f, 0xd6, 0xc7, 0x47, 0x95, 0xc7, 0x89, 0x22, 0x5c, 0xf3, 0x57, 0xcf, 0xc1, 0xd4, 0xe5, 0xae,
+ 0xd5, 0xbe, 0x12, 0x1e, 0xd7, 0x67, 0xaf, 0xea, 0x1d, 0x90, 0xb7, 0x75, 0x73, 0x07, 0xb3, 0x3d,
+ 0x85, 0xd3, 0x7d, 0x7d, 0x21, 0xf1, 0x7a, 0xd1, 0x68, 0x16, 0xf4, 0x8e, 0x24, 0x11, 0x18, 0x06,
+ 0x54, 0x3e, 0x99, 0x3e, 0x2c, 0x8f, 0x70, 0xf2, 0xac, 0x08, 0x73, 0xe5, 0x52, 0x8d, 0xde, 0x63,
+ 0x58, 0xbf, 0x58, 0x29, 0x2a, 0x04, 0x66, 0x4f, 0x26, 0x29, 0xc2, 0xec, 0x91, 0xff, 0xba, 0x85,
+ 0x79, 0x40, 0xe5, 0x8f, 0x03, 0xe6, 0x4f, 0x66, 0x61, 0x7e, 0xdd, 0x70, 0xdc, 0x28, 0x6f, 0xff,
+ 0x98, 0x78, 0xbf, 0xaf, 0x48, 0x6a, 0x2a, 0x0b, 0xe5, 0x48, 0x07, 0xfa, 0x4d, 0x64, 0x0e, 0xc7,
+ 0x15, 0x31, 0x99, 0x63, 0x29, 0x84, 0x03, 0x7a, 0xf1, 0xbc, 0xb4, 0x24, 0x13, 0x1b, 0x4a, 0x61,
+ 0x21, 0x93, 0x37, 0x94, 0x22, 0xcb, 0x4e, 0x5f, 0xbe, 0x7f, 0x9e, 0x85, 0x53, 0x5e, 0xf1, 0x71,
+ 0xcb, 0x52, 0xd1, 0x62, 0x1e, 0xba, 0x2c, 0x95, 0x78, 0x65, 0xfc, 0x10, 0x2f, 0xe3, 0x58, 0x19,
+ 0x1f, 0x46, 0x74, 0xc2, 0x62, 0x8e, 0x58, 0x86, 0x1d, 0x26, 0xe6, 0x98, 0x65, 0xd8, 0xd1, 0xc5,
+ 0x1c, 0xbf, 0x14, 0x3b, 0xa2, 0x98, 0x8f, 0x6d, 0x81, 0xf5, 0xa7, 0x94, 0x40, 0xcc, 0x91, 0x6b,
+ 0x1b, 0x31, 0x62, 0x4e, 0x7c, 0xa2, 0x57, 0xbc, 0x91, 0x3f, 0x81, 0xe0, 0xc7, 0xbc, 0xbe, 0x31,
+ 0x0a, 0x4c, 0xc7, 0xb8, 0xc6, 0xf1, 0x63, 0x0a, 0x2c, 0x30, 0x2e, 0x06, 0x4f, 0x99, 0x63, 0x30,
+ 0x4a, 0x3c, 0x65, 0x4e, 0x7c, 0x06, 0x48, 0xe4, 0x6c, 0xf2, 0x67, 0x80, 0x62, 0xcb, 0x4f, 0x1f,
+ 0x9c, 0xbf, 0xcc, 0xc1, 0x59, 0x8f, 0x85, 0x0d, 0xab, 0x63, 0x6c, 0x1f, 0x50, 0x2e, 0x2e, 0xea,
+ 0xdd, 0x7d, 0xec, 0xa0, 0xf7, 0x67, 0x65, 0x51, 0xfa, 0xdf, 0x00, 0xac, 0x1e, 0xb6, 0x69, 0x1c,
+ 0x37, 0x06, 0xd4, 0x7d, 0x51, 0x95, 0x3d, 0x5c, 0x52, 0x70, 0xfd, 0x4d, 0xdd, 0x27, 0xa2, 0x71,
+ 0xf4, 0x3c, 0xab, 0x70, 0x26, 0xf8, 0xd2, 0xef, 0xe0, 0x91, 0x39, 0xec, 0xe0, 0x71, 0x3b, 0x28,
+ 0x7a, 0xa7, 0x13, 0x40, 0xd5, 0xbf, 0x99, 0x4d, 0xca, 0xd4, 0xbc, 0x2c, 0x5e, 0x4e, 0x07, 0x87,
+ 0x47, 0xf3, 0x22, 0x72, 0x3a, 0xd8, 0x55, 0x17, 0xa1, 0x40, 0xaf, 0x03, 0x0f, 0x56, 0xf4, 0x07,
+ 0x67, 0x66, 0xb9, 0x44, 0xd3, 0xae, 0x2e, 0xaa, 0xe1, 0x3d, 0x89, 0x24, 0x33, 0xa8, 0x9f, 0x0e,
+ 0xed, 0x64, 0x4d, 0x50, 0xb0, 0x67, 0x8f, 0x4c, 0x79, 0x32, 0xbb, 0x61, 0xa5, 0x5e, 0xaf, 0x7b,
+ 0xd0, 0x64, 0x81, 0x07, 0x12, 0xed, 0x86, 0x71, 0xf1, 0x0b, 0xb2, 0x87, 0xe2, 0x17, 0x24, 0xde,
+ 0x0d, 0x13, 0xf8, 0x18, 0xc7, 0x6e, 0x58, 0x1c, 0xc1, 0x89, 0xdc, 0xc3, 0x43, 0xac, 0x66, 0x76,
+ 0x1b, 0xc1, 0x3f, 0x0e, 0xf6, 0xac, 0x06, 0xd1, 0xd9, 0x65, 0xd0, 0x45, 0x05, 0xb1, 0xb7, 0xb0,
+ 0xa8, 0x4f, 0x87, 0xc2, 0xb6, 0x65, 0xef, 0xe9, 0xfe, 0xc6, 0x7d, 0xff, 0x49, 0x11, 0x76, 0x03,
+ 0xc0, 0x0a, 0xc9, 0xa3, 0xb1, 0xbc, 0xde, 0x7c, 0xe4, 0x05, 0x46, 0x8f, 0x05, 0x7d, 0xf4, 0x1e,
+ 0xd5, 0x5b, 0x61, 0x9e, 0xc5, 0x7e, 0xac, 0x61, 0xc7, 0xc5, 0x1d, 0x16, 0xd1, 0x42, 0x4c, 0x54,
+ 0x2f, 0xc0, 0x1c, 0x4b, 0x58, 0x31, 0xba, 0xd8, 0x61, 0x41, 0x2d, 0x84, 0x34, 0xf5, 0x2c, 0x14,
+ 0x0c, 0xe7, 0x41, 0xc7, 0x32, 0x59, 0x40, 0x3e, 0xf6, 0xa6, 0xde, 0x0e, 0x27, 0x59, 0xbe, 0xc0,
+ 0x58, 0xa5, 0x07, 0x76, 0xfa, 0x93, 0x3d, 0xd5, 0x32, 0xad, 0x4d, 0xdb, 0xda, 0xb1, 0xb1, 0xe3,
+ 0x90, 0x53, 0x53, 0xd3, 0x1a, 0x97, 0xa2, 0x3e, 0x0c, 0xa7, 0xba, 0x86, 0x79, 0xc5, 0x21, 0x31,
+ 0x82, 0x57, 0x98, 0xdb, 0xd8, 0xdc, 0x80, 0xd8, 0xdd, 0x5c, 0x63, 0x63, 0x72, 0xe0, 0x7f, 0xd1,
+ 0x0e, 0x53, 0x51, 0xef, 0x80, 0x22, 0xe3, 0x66, 0x49, 0x6f, 0x5f, 0x21, 0xdf, 0x99, 0x3b, 0xea,
+ 0xa1, 0x74, 0x4e, 0x18, 0x34, 0x8c, 0xfe, 0x82, 0x20, 0x0c, 0x1a, 0x49, 0xff, 0x55, 0x19, 0x98,
+ 0x13, 0x0a, 0xd0, 0x41, 0xf5, 0xbb, 0x45, 0xe7, 0xd2, 0xae, 0xe1, 0x62, 0x8f, 0x39, 0x76, 0xd6,
+ 0xe5, 0xa9, 0x43, 0x98, 0xd7, 0x0e, 0xfd, 0xa8, 0x0d, 0x20, 0xe6, 0xf1, 0x45, 0x3b, 0x3c, 0xe2,
+ 0x59, 0xe6, 0x30, 0x5b, 0x55, 0x48, 0x43, 0x2f, 0x00, 0xf5, 0x30, 0x35, 0xce, 0x0b, 0x24, 0x93,
+ 0xcc, 0x0b, 0xc4, 0x93, 0x9b, 0xde, 0xed, 0x5a, 0xd7, 0x70, 0x27, 0x20, 0xcb, 0x74, 0xf5, 0x50,
+ 0x3a, 0xfa, 0xcc, 0x28, 0xf3, 0xc2, 0xc4, 0x17, 0x6b, 0x78, 0x8d, 0x6c, 0xbf, 0xdd, 0xc6, 0xb8,
+ 0xc3, 0x0e, 0xae, 0xf9, 0xaf, 0x09, 0xaf, 0xdc, 0x48, 0x3c, 0x8b, 0x3c, 0xa6, 0x3b, 0x37, 0xde,
+ 0x17, 0xde, 0x7c, 0xb2, 0x2f, 0xd3, 0xd5, 0xc4, 0x9d, 0x8f, 0x1f, 0xa9, 0x53, 0x41, 0xef, 0x49,
+ 0x7a, 0x5a, 0x34, 0x16, 0xd3, 0xb3, 0xde, 0xe0, 0xee, 0xec, 0x77, 0x83, 0xe3, 0x4e, 0xf4, 0x2d,
+ 0x21, 0x7a, 0x89, 0x0e, 0x90, 0x1e, 0x13, 0x72, 0xbf, 0x72, 0x06, 0x0a, 0xf4, 0xe6, 0x41, 0xf4,
+ 0xaa, 0x85, 0x81, 0xd0, 0x2d, 0x88, 0xd0, 0x6d, 0xc1, 0x9c, 0x69, 0x79, 0xc5, 0x6d, 0xea, 0xb6,
+ 0xbe, 0xe7, 0xc4, 0x2d, 0xef, 0x53, 0xba, 0x81, 0x2d, 0x57, 0xe3, 0x7e, 0x5b, 0x3b, 0xa1, 0x09,
+ 0x64, 0xd4, 0xff, 0x1d, 0x4e, 0x5e, 0x66, 0xa1, 0x39, 0x1c, 0x46, 0x39, 0x1b, 0xed, 0xfc, 0xda,
+ 0x47, 0x79, 0x49, 0xfc, 0x73, 0xed, 0x84, 0xd6, 0x4f, 0x4c, 0xfd, 0x2f, 0xb0, 0xe0, 0xbd, 0x76,
+ 0xac, 0x6b, 0x3e, 0xe3, 0x4a, 0xf4, 0x0c, 0xa0, 0x8f, 0xfc, 0x86, 0xf0, 0xe3, 0xda, 0x09, 0xad,
+ 0x8f, 0x94, 0x5a, 0x07, 0xd8, 0x75, 0xf7, 0xba, 0x8c, 0x70, 0x2e, 0xba, 0x33, 0xe9, 0x23, 0xbc,
+ 0x16, 0xfc, 0xb4, 0x76, 0x42, 0xe3, 0x48, 0xa8, 0xeb, 0x30, 0xe3, 0x3e, 0xea, 0x32, 0x7a, 0xf9,
+ 0x68, 0xaf, 0x93, 0x3e, 0x7a, 0x4d, 0xff, 0x9f, 0xb5, 0x13, 0x5a, 0x48, 0x40, 0xad, 0xc2, 0x74,
+ 0xef, 0x32, 0x23, 0x56, 0x88, 0x1e, 0xa9, 0xfa, 0x88, 0x6d, 0x5e, 0x0e, 0x68, 0x05, 0xbf, 0x7b,
+ 0x8c, 0xb5, 0x9d, 0xab, 0x8c, 0xd6, 0x94, 0x34, 0x63, 0x65, 0xff, 0x1f, 0x8f, 0xb1, 0x80, 0x80,
+ 0x5a, 0x85, 0x19, 0xc7, 0xd4, 0x7b, 0xce, 0xae, 0xe5, 0x3a, 0xe7, 0xa6, 0xfb, 0x1c, 0x94, 0xa3,
+ 0xa9, 0x35, 0xd8, 0x3f, 0x5a, 0xf8, 0xb7, 0xfa, 0x74, 0x38, 0xb3, 0xdf, 0xeb, 0xe8, 0x2e, 0xae,
+ 0x3c, 0x6a, 0x38, 0xae, 0x61, 0xee, 0xf8, 0xb1, 0xa5, 0xe9, 0x30, 0x3f, 0xf8, 0xa3, 0xba, 0xc8,
+ 0x8e, 0x2a, 0x02, 0x69, 0x97, 0xa8, 0x7f, 0x97, 0x9c, 0x16, 0xcb, 0x9d, 0x50, 0x7c, 0x16, 0xe4,
+ 0xbc, 0x4f, 0xc4, 0x2c, 0x58, 0x18, 0xbc, 0x02, 0xdf, 0xaf, 0x3b, 0xa4, 0x01, 0x7b, 0x3f, 0xf5,
+ 0x59, 0x16, 0x73, 0x87, 0x2c, 0x8b, 0x5b, 0x60, 0xd6, 0x70, 0x36, 0x8c, 0x1d, 0x3a, 0xad, 0x61,
+ 0x23, 0x3f, 0x9f, 0x44, 0x97, 0x81, 0x6a, 0xf8, 0x1a, 0x1d, 0xf2, 0x4f, 0xfa, 0xcb, 0x40, 0x7e,
+ 0x0a, 0xba, 0x0d, 0xe6, 0xf8, 0x46, 0x46, 0xaf, 0x2f, 0x36, 0xc2, 0x49, 0x11, 0x7b, 0x43, 0xb7,
+ 0xc2, 0x82, 0xa8, 0xd3, 0x9c, 0xed, 0xa7, 0xf8, 0x83, 0x18, 0x7a, 0x3c, 0x9c, 0xec, 0x6b, 0x58,
+ 0x7e, 0xb0, 0x9f, 0x4c, 0x18, 0xec, 0xe7, 0x16, 0x80, 0x50, 0x8b, 0x07, 0x92, 0xb9, 0x19, 0x66,
+ 0x02, 0xbd, 0x1c, 0x98, 0xe1, 0x4b, 0x19, 0x98, 0xf6, 0x95, 0x6d, 0x50, 0x06, 0xcf, 0xa6, 0x30,
+ 0xb9, 0x9d, 0x3d, 0xdf, 0xa6, 0xe0, 0xd3, 0x3c, 0x03, 0x2f, 0xf4, 0xa7, 0x6f, 0x1a, 0x6e, 0xd7,
+ 0x3f, 0x93, 0xda, 0x9f, 0xac, 0x6e, 0x02, 0x18, 0x04, 0xa3, 0x66, 0x78, 0x48, 0xf5, 0x29, 0x09,
+ 0xda, 0x03, 0xd5, 0x07, 0x8e, 0xc6, 0x85, 0x6f, 0x60, 0x27, 0x48, 0x67, 0x20, 0x4f, 0x2f, 0x58,
+ 0x38, 0xa1, 0x2e, 0x00, 0x54, 0x9e, 0xb7, 0x59, 0xd1, 0xaa, 0x95, 0x5a, 0xb9, 0x52, 0xcc, 0xa0,
+ 0x1f, 0xcf, 0xc2, 0x4c, 0xd0, 0x08, 0x06, 0x56, 0xb2, 0xc2, 0x54, 0x6b, 0xe8, 0x0d, 0xb1, 0x87,
+ 0x1b, 0x15, 0xaf, 0x64, 0xcf, 0x84, 0xeb, 0xf7, 0x1d, 0xbc, 0x62, 0xd8, 0x8e, 0xab, 0x59, 0xd7,
+ 0x56, 0x2c, 0x3b, 0x34, 0x89, 0x68, 0x68, 0xe2, 0xa8, 0xcf, 0x9e, 0xa9, 0xdf, 0xc1, 0xe4, 0xb4,
+ 0x22, 0xb6, 0xd9, 0x96, 0x4d, 0x98, 0xe0, 0xd1, 0x75, 0x6d, 0xdd, 0x74, 0x7a, 0x96, 0x83, 0x35,
+ 0xeb, 0x9a, 0x53, 0x32, 0x3b, 0x65, 0xab, 0xbb, 0xbf, 0x67, 0x3a, 0xcc, 0x58, 0x8f, 0xfa, 0xec,
+ 0x49, 0x87, 0xdc, 0xff, 0xbc, 0x00, 0x50, 0xae, 0xaf, 0xaf, 0x57, 0xca, 0xcd, 0x6a, 0xbd, 0x56,
+ 0x3c, 0xe1, 0x49, 0xab, 0x59, 0x5a, 0x5a, 0xf7, 0xa4, 0xf3, 0xad, 0x30, 0xed, 0xb7, 0x69, 0x16,
+ 0x9f, 0x28, 0xe3, 0xc7, 0x27, 0x52, 0x4b, 0x30, 0xed, 0xb7, 0x72, 0x36, 0x22, 0x3c, 0xa1, 0xff,
+ 0x3c, 0xfa, 0x9e, 0x6e, 0xbb, 0xc4, 0xb4, 0xf4, 0x89, 0x2c, 0xe9, 0x0e, 0xd6, 0x82, 0xdf, 0x2e,
+ 0x3c, 0x99, 0x71, 0xa0, 0xc2, 0x42, 0x69, 0x7d, 0xbd, 0x55, 0xd7, 0x5a, 0xb5, 0x7a, 0x73, 0xad,
+ 0x5a, 0x5b, 0xa5, 0x23, 0x64, 0x75, 0xb5, 0x56, 0xd7, 0x2a, 0x74, 0x80, 0x6c, 0x14, 0x33, 0xf4,
+ 0xfe, 0xf1, 0xa5, 0x69, 0x28, 0xf4, 0x88, 0x74, 0xd1, 0xe7, 0x95, 0x84, 0xa6, 0x45, 0x80, 0x53,
+ 0xc4, 0x0d, 0xc9, 0xc2, 0x61, 0x90, 0xec, 0x80, 0xc3, 0xda, 0x17, 0x60, 0x8e, 0x9a, 0x43, 0x0e,
+ 0xd9, 0x57, 0x23, 0xc8, 0x29, 0x9a, 0x90, 0x86, 0x3e, 0x9a, 0x4d, 0x60, 0x5c, 0x0c, 0xe4, 0x28,
+ 0x99, 0x71, 0xf1, 0x7b, 0x99, 0xd1, 0xae, 0x23, 0xa9, 0xd6, 0x9a, 0x15, 0xad, 0x56, 0x5a, 0x67,
+ 0x59, 0x14, 0xf5, 0x1c, 0x9c, 0xae, 0xd5, 0x59, 0x30, 0xce, 0x46, 0xab, 0x59, 0x6f, 0x55, 0x37,
+ 0x36, 0xeb, 0x5a, 0xb3, 0x98, 0x57, 0xcf, 0x82, 0x4a, 0x9f, 0x5b, 0xd5, 0x46, 0xab, 0x5c, 0xaa,
+ 0x95, 0x2b, 0xeb, 0x95, 0xe5, 0x62, 0x41, 0x7d, 0x22, 0x3c, 0x9e, 0x5e, 0x6f, 0x55, 0x5f, 0x69,
+ 0x69, 0xf5, 0x4b, 0x0d, 0x0f, 0x41, 0xad, 0xb2, 0x5e, 0xf2, 0x14, 0x89, 0xbb, 0x87, 0x7c, 0x4a,
+ 0xbd, 0x0e, 0x4e, 0xae, 0x54, 0xd7, 0x2b, 0xad, 0xf5, 0x7a, 0x69, 0x99, 0x95, 0x37, 0xad, 0xde,
+ 0x04, 0xe7, 0xaa, 0xb5, 0xc6, 0xd6, 0xca, 0x4a, 0xb5, 0x5c, 0xad, 0xd4, 0x9a, 0xad, 0xcd, 0x8a,
+ 0xb6, 0x51, 0x6d, 0x34, 0xbc, 0x7f, 0x8b, 0x33, 0xe4, 0x96, 0x67, 0xda, 0x67, 0x7a, 0x46, 0xec,
+ 0xfc, 0x45, 0xbd, 0x6b, 0x78, 0x03, 0x05, 0xb9, 0xfe, 0xbd, 0xef, 0x1c, 0x97, 0x4b, 0xae, 0x89,
+ 0x67, 0x27, 0x41, 0xc8, 0x0b, 0xfa, 0x4e, 0x25, 0xe1, 0x39, 0x2e, 0x06, 0x04, 0x2d, 0x71, 0x51,
+ 0x28, 0x2d, 0x62, 0xd5, 0xe1, 0xf5, 0xd9, 0x04, 0xe7, 0xb8, 0xe4, 0xc9, 0x27, 0x03, 0xff, 0x27,
+ 0xc6, 0x05, 0x7e, 0x11, 0xe6, 0xb6, 0x6a, 0xa5, 0xad, 0xe6, 0x5a, 0x5d, 0xab, 0x7e, 0x0b, 0xb9,
+ 0x85, 0x60, 0x1e, 0x66, 0x56, 0xea, 0xda, 0x52, 0x75, 0x79, 0xb9, 0x52, 0x2b, 0xe6, 0xd5, 0xeb,
+ 0xe1, 0xba, 0x46, 0x45, 0xbb, 0x58, 0x2d, 0x57, 0x5a, 0x5b, 0xb5, 0xd2, 0xc5, 0x52, 0x75, 0x9d,
+ 0xf4, 0x11, 0x85, 0x98, 0xab, 0xeb, 0xa7, 0xd0, 0xb7, 0xe7, 0x00, 0x68, 0xd5, 0xc9, 0x25, 0x5c,
+ 0xdc, 0x05, 0xe7, 0x7f, 0x90, 0x74, 0xba, 0x17, 0x92, 0x89, 0x68, 0xbf, 0x55, 0x98, 0xb6, 0xd9,
+ 0x07, 0xb6, 0xae, 0x39, 0x8c, 0x0e, 0x7d, 0xf4, 0xa9, 0x69, 0xc1, 0xef, 0xe8, 0xfd, 0x49, 0x66,
+ 0x77, 0x91, 0x8c, 0x25, 0x43, 0x72, 0x65, 0x3c, 0x40, 0xa2, 0x97, 0x67, 0x60, 0x41, 0xac, 0x98,
+ 0x57, 0x09, 0x62, 0x4c, 0xc9, 0x55, 0x42, 0xfc, 0x99, 0x33, 0xb2, 0x2e, 0x3c, 0x8d, 0x0d, 0xa7,
+ 0xe0, 0xb7, 0x4c, 0x1a, 0x92, 0xc1, 0xb7, 0x58, 0x8a, 0x19, 0x8f, 0x79, 0xcf, 0xe8, 0x28, 0x66,
+ 0xd5, 0x29, 0x50, 0x9a, 0x8f, 0xba, 0x45, 0x05, 0x7d, 0x49, 0x81, 0x79, 0xe1, 0x06, 0x75, 0x6f,
+ 0xf6, 0x25, 0x71, 0xbb, 0x31, 0x77, 0x37, 0x7b, 0xe6, 0xa8, 0x77, 0xb3, 0x5f, 0xb8, 0x0b, 0xa6,
+ 0x58, 0x1a, 0x91, 0x6f, 0xbd, 0xe6, 0x99, 0x02, 0x27, 0x61, 0x76, 0xb5, 0xd2, 0x6c, 0x35, 0x9a,
+ 0x25, 0xad, 0x59, 0x59, 0x2e, 0x66, 0xbc, 0x81, 0xaf, 0xb2, 0xb1, 0xd9, 0x7c, 0xb8, 0x98, 0x4d,
+ 0xee, 0x1a, 0xdb, 0xcf, 0xc8, 0x84, 0x5d, 0x63, 0xe3, 0x8a, 0x4f, 0x7f, 0xae, 0xfa, 0x69, 0x05,
+ 0x8a, 0x94, 0x83, 0xca, 0xa3, 0x3d, 0x6c, 0x1b, 0xd8, 0x6c, 0x63, 0x74, 0x45, 0x26, 0x54, 0xef,
+ 0xa1, 0x20, 0x95, 0xa4, 0x3f, 0xe7, 0xac, 0x44, 0xfa, 0xd2, 0x67, 0x60, 0xe7, 0x0e, 0x19, 0xd8,
+ 0xbf, 0x95, 0xd4, 0x37, 0xb6, 0x9f, 0xdd, 0xb1, 0x40, 0xf6, 0x89, 0x24, 0xbe, 0xb1, 0x43, 0x38,
+ 0x98, 0x48, 0x04, 0xee, 0x88, 0xf1, 0xb7, 0xa8, 0xa0, 0x97, 0x29, 0x70, 0x72, 0x59, 0x77, 0xf1,
+ 0xd2, 0x41, 0xd3, 0xbf, 0xe1, 0x34, 0xe2, 0x56, 0xf2, 0xcc, 0xa1, 0x5b, 0xc9, 0xc3, 0x4b, 0x52,
+ 0xb3, 0x7d, 0x97, 0xa4, 0xa2, 0x77, 0x27, 0x3d, 0x4d, 0xdb, 0xc7, 0xc3, 0xd8, 0xc2, 0x64, 0x27,
+ 0x3b, 0x25, 0x1b, 0xcf, 0x45, 0xfa, 0x0d, 0xec, 0xed, 0x33, 0x50, 0xa4, 0xac, 0x70, 0xee, 0x9f,
+ 0x3f, 0xc4, 0x2e, 0xf2, 0x6f, 0x25, 0x88, 0xb6, 0xe9, 0xc7, 0x2f, 0xc9, 0x8a, 0xf1, 0x4b, 0x84,
+ 0xdd, 0x04, 0xa5, 0xdf, 0x65, 0x27, 0x69, 0x67, 0xc8, 0xf9, 0x7a, 0x46, 0x07, 0x38, 0x4e, 0xaf,
+ 0x33, 0x8c, 0x2d, 0x7e, 0x32, 0x97, 0x4d, 0xb3, 0xfb, 0x5d, 0x2b, 0xb2, 0xc8, 0xc4, 0xdf, 0xa9,
+ 0x9f, 0xd4, 0xf1, 0x5f, 0xf0, 0xb5, 0x8d, 0xb9, 0x68, 0x3e, 0x3d, 0xc7, 0xff, 0x61, 0x1c, 0xa4,
+ 0x8f, 0xc2, 0xbf, 0x65, 0x21, 0xd7, 0xb0, 0x6c, 0x77, 0x5c, 0x18, 0x24, 0x75, 0x56, 0xe0, 0x24,
+ 0xd0, 0x88, 0x9e, 0x73, 0xa6, 0xe7, 0xac, 0x10, 0x5f, 0xfe, 0x04, 0x02, 0x96, 0x9e, 0x84, 0x05,
+ 0xca, 0x49, 0x70, 0xdb, 0xcf, 0xbf, 0x66, 0x69, 0x7f, 0xf5, 0x90, 0x2c, 0x22, 0x64, 0xcb, 0x2a,
+ 0x70, 0x16, 0xf0, 0x41, 0x11, 0xd2, 0xd0, 0x9b, 0x79, 0x5c, 0x96, 0x45, 0x5c, 0x06, 0xcd, 0xb8,
+ 0x83, 0x0b, 0x73, 0xc6, 0xd5, 0x33, 0x25, 0x89, 0x7d, 0x1a, 0x53, 0x78, 0xfa, 0x88, 0xbc, 0x58,
+ 0x81, 0x02, 0x73, 0xd6, 0x1c, 0x2b, 0x02, 0x49, 0x5b, 0x46, 0x20, 0x04, 0x39, 0xa7, 0x4e, 0x65,
+ 0xdc, 0x2d, 0x23, 0xbe, 0xfc, 0xf4, 0x71, 0xf8, 0x77, 0xe6, 0x85, 0x5c, 0xba, 0xaa, 0x1b, 0x5d,
+ 0xfd, 0x72, 0x37, 0x41, 0xcc, 0xf1, 0x8f, 0x26, 0x3c, 0x77, 0x19, 0x54, 0x55, 0x28, 0x2f, 0x42,
+ 0xe2, 0xdf, 0x04, 0x33, 0xb6, 0xb0, 0x4b, 0xeb, 0x59, 0x51, 0x7d, 0x1e, 0xe0, 0xec, 0xbb, 0x16,
+ 0xe6, 0x4c, 0x74, 0xc8, 0x52, 0x8a, 0x9f, 0x89, 0x1c, 0x0a, 0x9b, 0x2d, 0x75, 0x3a, 0x2b, 0x58,
+ 0x77, 0xf7, 0x6d, 0xdc, 0x49, 0x34, 0x44, 0xd8, 0x7d, 0x1b, 0xd9, 0x9c, 0x24, 0x84, 0xa8, 0x9f,
+ 0xeb, 0x22, 0x3a, 0xcf, 0x18, 0xd2, 0x1b, 0xf8, 0xbc, 0x8c, 0xa5, 0x4b, 0xfa, 0xf9, 0x00, 0x92,
+ 0xba, 0x00, 0xc9, 0xb3, 0x46, 0x63, 0x22, 0x7d, 0x40, 0x7e, 0x44, 0x81, 0x05, 0x6a, 0x27, 0x8c,
+ 0x1b, 0x93, 0x0f, 0x26, 0x74, 0xee, 0xe2, 0xee, 0x53, 0xe3, 0xd9, 0x19, 0x0b, 0x2c, 0x49, 0x5c,
+ 0xc1, 0xe4, 0xf8, 0x48, 0x1f, 0x99, 0x97, 0x9c, 0x02, 0xe0, 0x1c, 0x76, 0x3f, 0x5a, 0x08, 0x23,
+ 0x70, 0xa2, 0x77, 0xb0, 0xf9, 0x47, 0x43, 0x08, 0x07, 0xcf, 0x39, 0xe3, 0x06, 0x1b, 0x52, 0x62,
+ 0xa2, 0xd4, 0xa8, 0xf2, 0x7b, 0x09, 0x6d, 0x5e, 0xe6, 0x2e, 0x3b, 0x74, 0x70, 0x1f, 0xb1, 0x97,
+ 0xfb, 0x58, 0x02, 0xe3, 0x77, 0x18, 0x2b, 0xc9, 0x50, 0x5b, 0x1f, 0x61, 0x66, 0x7f, 0x0e, 0x4e,
+ 0x6b, 0x95, 0xd2, 0x72, 0xbd, 0xb6, 0xfe, 0x30, 0x7f, 0xb9, 0x56, 0x51, 0xe1, 0x27, 0x27, 0xa9,
+ 0xc0, 0xf6, 0xc6, 0x84, 0x7d, 0xa0, 0x28, 0xab, 0xb8, 0xd9, 0x0a, 0xb7, 0xb8, 0x32, 0xbc, 0x57,
+ 0x93, 0x20, 0x7b, 0x9c, 0x28, 0xfc, 0x7d, 0x01, 0x66, 0x35, 0xdc, 0xb6, 0xf6, 0xf6, 0xb0, 0xd9,
+ 0xc1, 0x1d, 0xf4, 0x46, 0x05, 0xe6, 0x82, 0xfd, 0xbe, 0x06, 0x76, 0xd1, 0x7f, 0x09, 0xb1, 0xb9,
+ 0x00, 0x73, 0x5e, 0xe5, 0xea, 0x62, 0x88, 0x7f, 0x21, 0x4d, 0xbd, 0x13, 0x4e, 0xf9, 0x28, 0xd4,
+ 0xfb, 0xa6, 0x30, 0x87, 0x3f, 0x88, 0x1e, 0x39, 0x5b, 0x22, 0x46, 0x0f, 0x44, 0x0b, 0x33, 0x60,
+ 0x77, 0x91, 0x67, 0x35, 0x02, 0xac, 0xdf, 0x09, 0xc0, 0x7a, 0x9e, 0x00, 0xd6, 0xf2, 0x11, 0xe9,
+ 0x1f, 0x27, 0x6a, 0xbf, 0xa8, 0xc0, 0x69, 0xbf, 0x23, 0x9e, 0x1c, 0x5a, 0x1f, 0xe3, 0xd1, 0xfa,
+ 0x56, 0x11, 0xad, 0x55, 0x19, 0x69, 0x0e, 0x62, 0x39, 0x02, 0xb5, 0xcf, 0x05, 0xa8, 0x7d, 0x9b,
+ 0x80, 0xda, 0xfa, 0x98, 0xca, 0x39, 0x4e, 0xf4, 0x3e, 0xa8, 0xc0, 0x39, 0xcf, 0xec, 0x2c, 0x5b,
+ 0xe6, 0x76, 0xd7, 0x68, 0xbb, 0x86, 0xb9, 0x13, 0x3a, 0x1f, 0xae, 0xca, 0xac, 0x6c, 0xf6, 0x63,
+ 0x9b, 0x3d, 0x8c, 0xad, 0x18, 0x19, 0x45, 0xb6, 0x6d, 0x45, 0xb1, 0x15, 0x31, 0x84, 0x71, 0x6e,
+ 0xf5, 0xa1, 0xe6, 0xf0, 0x49, 0xc9, 0x5b, 0x9f, 0x24, 0x07, 0xc7, 0x89, 0xdf, 0x8b, 0x81, 0x33,
+ 0x3d, 0xbe, 0x5b, 0x81, 0x22, 0xf1, 0x74, 0x25, 0x3d, 0x3b, 0xbb, 0x79, 0xb6, 0x2e, 0x9e, 0x81,
+ 0xe8, 0xf9, 0x02, 0xf2, 0xcf, 0x40, 0xf8, 0x09, 0xea, 0x6d, 0xb0, 0xd0, 0xde, 0xc5, 0xed, 0x2b,
+ 0x55, 0xd3, 0xf7, 0x45, 0xa2, 0x8e, 0x2b, 0x7d, 0xa9, 0xe2, 0x60, 0xf6, 0x90, 0x08, 0xa6, 0xb8,
+ 0xf0, 0x28, 0x4c, 0x6c, 0x78, 0xa6, 0x22, 0x1a, 0xda, 0xaf, 0x07, 0x00, 0xd5, 0x04, 0x80, 0xee,
+ 0x1d, 0x89, 0x6a, 0x32, 0x58, 0x6a, 0x23, 0xc0, 0x82, 0xe0, 0x6c, 0x7d, 0xb3, 0x59, 0xad, 0xd7,
+ 0x5a, 0x5b, 0x8d, 0xca, 0x72, 0x6b, 0xc9, 0x07, 0xa7, 0x51, 0x54, 0xd0, 0x97, 0xb3, 0x30, 0x45,
+ 0xd9, 0x72, 0xd0, 0x93, 0x42, 0x08, 0x86, 0x1e, 0xfe, 0x40, 0x6f, 0x97, 0x0e, 0xe5, 0x14, 0x08,
+ 0x82, 0x95, 0x13, 0xd1, 0x30, 0x9e, 0x09, 0x53, 0x14, 0x64, 0x7f, 0x17, 0xe0, 0x7c, 0x84, 0x65,
+ 0xc7, 0xc8, 0x68, 0x7e, 0x76, 0xc9, 0xb0, 0x4e, 0x43, 0xd8, 0x48, 0xdf, 0x1a, 0x7f, 0x61, 0x8e,
+ 0x2e, 0x1d, 0x5c, 0x32, 0xdc, 0x5d, 0x72, 0x36, 0x04, 0x3d, 0x57, 0xa6, 0xe3, 0xba, 0x13, 0xf2,
+ 0x57, 0xbd, 0xdc, 0x43, 0xce, 0xd9, 0xd0, 0x4c, 0xe8, 0x27, 0xa4, 0xa3, 0x88, 0x0b, 0xfa, 0x19,
+ 0xf0, 0x14, 0x01, 0xce, 0x06, 0xe4, 0xba, 0x86, 0xe3, 0x32, 0x9b, 0xfb, 0x9e, 0x44, 0x84, 0xfc,
+ 0x87, 0xaa, 0x8b, 0xf7, 0x34, 0x42, 0x06, 0x3d, 0xe8, 0x59, 0x4c, 0x61, 0xaa, 0xc4, 0x59, 0xa3,
+ 0x73, 0x30, 0xc5, 0xce, 0xc0, 0xb3, 0x6d, 0x29, 0xff, 0x55, 0x72, 0x2b, 0x48, 0xaa, 0xb6, 0xe9,
+ 0xeb, 0xc0, 0xff, 0x7b, 0x12, 0xa6, 0xd6, 0x0c, 0xc7, 0xb5, 0xec, 0x03, 0xf4, 0xa6, 0x0c, 0x4c,
+ 0x5d, 0xc4, 0xb6, 0x63, 0x58, 0xe6, 0x21, 0xf7, 0xac, 0x5b, 0x60, 0xb6, 0x67, 0xe3, 0xab, 0x86,
+ 0xb5, 0xef, 0x70, 0xa3, 0x04, 0x97, 0xa4, 0x22, 0x98, 0xd6, 0xf7, 0xdd, 0x5d, 0xcb, 0x0e, 0x43,
+ 0x67, 0xf9, 0xef, 0xea, 0x79, 0x00, 0xfa, 0x5c, 0xd3, 0xf7, 0xb0, 0x7f, 0x3b, 0x7e, 0x98, 0xa2,
+ 0xaa, 0x90, 0x73, 0x8d, 0x3d, 0xcc, 0x62, 0xe9, 0x93, 0x67, 0x4f, 0xc0, 0x24, 0x2e, 0x2d, 0x8b,
+ 0xff, 0xab, 0x68, 0xfe, 0x2b, 0xfa, 0x43, 0x05, 0x66, 0x57, 0xb1, 0xcb, 0x58, 0x75, 0xd0, 0x2b,
+ 0x32, 0x52, 0xd7, 0x57, 0x79, 0xf3, 0x92, 0xae, 0xee, 0xf8, 0xff, 0x05, 0x43, 0xae, 0x98, 0x18,
+ 0x06, 0xf6, 0x57, 0xf8, 0x5b, 0x3d, 0x48, 0x94, 0x57, 0xb7, 0x4a, 0x8f, 0x5d, 0xb0, 0xcc, 0x6c,
+ 0xe3, 0xf8, 0xf0, 0x07, 0xd1, 0x26, 0x8e, 0x8d, 0x90, 0xc2, 0x64, 0xbf, 0xc8, 0xd5, 0x27, 0xb2,
+ 0x3b, 0x9a, 0xbe, 0xca, 0x72, 0x1c, 0xba, 0xb0, 0x85, 0xa7, 0xc4, 0xc8, 0x68, 0x41, 0x6e, 0xc9,
+ 0xd8, 0x2a, 0xc3, 0x39, 0x99, 0xc0, 0x15, 0xbd, 0x0a, 0xcc, 0x36, 0x76, 0xad, 0x6b, 0xbe, 0x1c,
+ 0xbf, 0x55, 0x0e, 0xd8, 0x9b, 0x60, 0xe6, 0x6a, 0x1f, 0xa8, 0x61, 0x02, 0x7f, 0x2b, 0xa0, 0x22,
+ 0xde, 0x0a, 0xf8, 0x52, 0x25, 0x29, 0x4c, 0x1c, 0x73, 0x11, 0x30, 0x89, 0x17, 0xf9, 0x65, 0x13,
+ 0x5c, 0xe4, 0xa7, 0x3e, 0x03, 0xa6, 0x18, 0xd7, 0x6c, 0x99, 0x3a, 0x1e, 0x60, 0x3f, 0x33, 0x5f,
+ 0xc1, 0x9c, 0x58, 0xc1, 0x64, 0xc8, 0x47, 0x57, 0x2e, 0x7d, 0xe4, 0x7f, 0x33, 0x4b, 0x22, 0x6b,
+ 0xf9, 0xc0, 0x97, 0xc7, 0x00, 0x3c, 0xfa, 0x5a, 0x46, 0x76, 0x33, 0x27, 0x90, 0x40, 0xc0, 0xc1,
+ 0x91, 0xae, 0xa6, 0x1b, 0x4a, 0x2e, 0x7d, 0x79, 0xfe, 0x78, 0x0e, 0xe6, 0x96, 0x8d, 0xed, 0xed,
+ 0xa0, 0x93, 0x7c, 0xa5, 0x64, 0x27, 0x19, 0xed, 0x42, 0xe5, 0xd9, 0xb9, 0xfb, 0xb6, 0x8d, 0x4d,
+ 0xbf, 0x52, 0xac, 0x39, 0xf5, 0xa5, 0xaa, 0xb7, 0xc3, 0x49, 0x7f, 0x5c, 0xe0, 0x3b, 0xca, 0x19,
+ 0xad, 0x3f, 0x19, 0x7d, 0x45, 0xda, 0x13, 0xc0, 0x97, 0x28, 0x5f, 0xa5, 0x88, 0x06, 0x78, 0x1f,
+ 0xcc, 0xef, 0xd2, 0xdc, 0x64, 0xb9, 0xd4, 0xef, 0x2c, 0xcf, 0xf6, 0xdd, 0x5c, 0xb0, 0x81, 0x1d,
+ 0x47, 0xdf, 0xc1, 0x9a, 0x98, 0xb9, 0xaf, 0xf9, 0x2a, 0x49, 0xee, 0xe1, 0x94, 0x73, 0x2a, 0x90,
+ 0xa8, 0x49, 0xfa, 0xda, 0xf1, 0xb9, 0x0b, 0x90, 0x5b, 0x31, 0xba, 0x18, 0x7d, 0x4f, 0x16, 0x66,
+ 0xbc, 0x59, 0xb7, 0xd9, 0xf6, 0xde, 0x38, 0x87, 0xca, 0xbf, 0xcf, 0xc8, 0xde, 0x3f, 0xed, 0xd1,
+ 0x59, 0x0c, 0x68, 0x44, 0xb4, 0x1b, 0xb9, 0x7b, 0xa6, 0x63, 0x49, 0x4d, 0xe0, 0xb6, 0x30, 0x6f,
+ 0xea, 0xb1, 0xbd, 0xdd, 0xb5, 0x74, 0x61, 0xc3, 0xa0, 0xdf, 0x14, 0x0a, 0x8f, 0x6f, 0xd6, 0x2c,
+ 0x77, 0xd3, 0x30, 0xcd, 0x20, 0x22, 0xca, 0xa1, 0x74, 0xd1, 0xd7, 0x25, 0x36, 0xa8, 0x1c, 0xa9,
+ 0x3b, 0x2b, 0x3d, 0x42, 0xb3, 0x6f, 0x83, 0x85, 0xcb, 0x07, 0x2e, 0x76, 0x58, 0x2e, 0x56, 0x6c,
+ 0x4e, 0xeb, 0x4b, 0xe5, 0xae, 0x84, 0x88, 0x0b, 0x3e, 0x17, 0x53, 0x60, 0x32, 0x51, 0xaf, 0x8d,
+ 0x30, 0x03, 0x3c, 0x0d, 0xc5, 0x5a, 0x7d, 0xb9, 0x42, 0xfc, 0x7b, 0x7d, 0x8f, 0xc9, 0x1d, 0xf4,
+ 0x83, 0x0a, 0xcc, 0x11, 0x07, 0x3c, 0x1f, 0x85, 0xc7, 0x4b, 0xcc, 0x47, 0xd0, 0x17, 0xa4, 0x7d,
+ 0x7f, 0x49, 0x95, 0xf9, 0x02, 0xa2, 0x05, 0xbd, 0x6d, 0x74, 0xfb, 0x05, 0x9d, 0xd7, 0xfa, 0x52,
+ 0x07, 0x00, 0xa2, 0x0c, 0x04, 0xe4, 0x17, 0xa5, 0x1c, 0x80, 0x87, 0x71, 0x77, 0x5c, 0xa8, 0xfc,
+ 0x92, 0x02, 0xb3, 0xde, 0x24, 0xc5, 0x07, 0xa5, 0x2e, 0x80, 0x62, 0x99, 0xdd, 0x83, 0x70, 0x59,
+ 0xc4, 0x7f, 0x4d, 0xd4, 0x48, 0xfe, 0x48, 0x7a, 0xe6, 0x4e, 0x44, 0xc4, 0xf1, 0x32, 0x21, 0xfc,
+ 0x3e, 0x20, 0x35, 0x9f, 0x1f, 0xc2, 0xdc, 0x71, 0xc1, 0xf7, 0x86, 0x02, 0x14, 0xb6, 0x7a, 0x04,
+ 0xb9, 0xcf, 0x2b, 0x32, 0xd7, 0xab, 0x1c, 0x3a, 0xfc, 0xe5, 0x99, 0x59, 0x5d, 0xab, 0xad, 0x77,
+ 0x37, 0xc3, 0xf3, 0xcf, 0x61, 0x82, 0x7a, 0x2f, 0xf3, 0x07, 0xa7, 0xc7, 0x78, 0x6f, 0x8b, 0xbd,
+ 0x79, 0x84, 0xc8, 0x88, 0x3b, 0x68, 0x77, 0x27, 0x9c, 0xea, 0x18, 0x8e, 0x7e, 0xb9, 0x8b, 0x2b,
+ 0x66, 0xdb, 0x3e, 0xa0, 0xe2, 0x60, 0xd3, 0xaa, 0x43, 0x1f, 0xd4, 0xfb, 0x21, 0xef, 0xb8, 0x07,
+ 0x5d, 0x3a, 0x4f, 0xe4, 0xcf, 0xe5, 0x45, 0x16, 0xd5, 0xf0, 0xb2, 0x6b, 0xf4, 0x2f, 0xde, 0xad,
+ 0x73, 0x4a, 0xce, 0xad, 0x53, 0x7d, 0x1a, 0x14, 0x2c, 0xdb, 0xd8, 0x31, 0xe8, 0x65, 0x82, 0x0b,
+ 0x87, 0x02, 0xec, 0x52, 0x53, 0xa0, 0x4e, 0xb2, 0x68, 0x2c, 0xab, 0xfa, 0x0c, 0x98, 0x31, 0xf6,
+ 0xf4, 0x1d, 0xfc, 0x90, 0x61, 0xd2, 0xf0, 0x03, 0x0b, 0x77, 0x9f, 0x3b, 0x74, 0xe4, 0x90, 0x7d,
+ 0xd7, 0xc2, 0xac, 0xea, 0x7d, 0x70, 0x43, 0xdb, 0xc6, 0xba, 0x8b, 0x3d, 0x01, 0x5d, 0x32, 0x3a,
+ 0x3b, 0xd8, 0xad, 0x6e, 0x6f, 0x18, 0x8e, 0x63, 0x98, 0x3b, 0xec, 0xbe, 0xd0, 0xe8, 0x0c, 0xe8,
+ 0x03, 0x59, 0xd9, 0x18, 0x82, 0x44, 0x32, 0x54, 0x25, 0x46, 0xb8, 0xd7, 0x9c, 0x93, 0xa2, 0x22,
+ 0xe9, 0x1c, 0xfb, 0x3a, 0xa9, 0xe8, 0x7e, 0xd1, 0x6c, 0xa5, 0x3f, 0xf4, 0xff, 0x7e, 0x16, 0xa6,
+ 0x97, 0xad, 0x6b, 0x26, 0x69, 0x26, 0xf7, 0xc8, 0x59, 0xca, 0x03, 0x02, 0x02, 0x88, 0x37, 0x64,
+ 0xc7, 0x9e, 0x21, 0x23, 0xb5, 0xf5, 0x8b, 0x8c, 0x80, 0x21, 0xb6, 0xdd, 0x49, 0x1e, 0x3b, 0x8f,
+ 0x2b, 0x27, 0x7d, 0xb9, 0xfe, 0xb6, 0x02, 0xb9, 0x65, 0xdb, 0xea, 0xa1, 0x9f, 0xcf, 0x24, 0x70,
+ 0x12, 0xeb, 0xd8, 0x56, 0xaf, 0x49, 0x2e, 0x1e, 0x0d, 0xf7, 0x45, 0xf8, 0x34, 0xf5, 0x1e, 0x98,
+ 0xee, 0x59, 0x8e, 0xe1, 0xfa, 0x93, 0x90, 0x85, 0xbb, 0x1f, 0x37, 0xb0, 0x2f, 0xd8, 0x64, 0x99,
+ 0xb4, 0x20, 0xbb, 0xd7, 0xe7, 0x13, 0x11, 0x7a, 0x72, 0xf1, 0xc4, 0xe8, 0x5f, 0xbe, 0xda, 0x97,
+ 0x8a, 0x5e, 0xc5, 0x23, 0xf9, 0x2c, 0x11, 0xc9, 0x27, 0x0c, 0x90, 0xb0, 0x6d, 0xf5, 0xc6, 0xe2,
+ 0xd6, 0xf1, 0x9a, 0x00, 0xd5, 0x67, 0x0b, 0xa8, 0xde, 0x21, 0x55, 0x66, 0xfa, 0x88, 0x7e, 0x20,
+ 0x07, 0x40, 0x8c, 0x94, 0x2d, 0x6f, 0xfa, 0x24, 0x67, 0xa1, 0x7d, 0x57, 0x8e, 0x93, 0x65, 0x49,
+ 0x94, 0xe5, 0x93, 0x22, 0x6c, 0x20, 0x42, 0x3e, 0x42, 0xa2, 0x25, 0xc8, 0xef, 0x7b, 0x9f, 0x99,
+ 0x44, 0x25, 0x49, 0x90, 0x57, 0x8d, 0xfe, 0x89, 0x7e, 0x33, 0x03, 0x79, 0x92, 0xa0, 0x9e, 0x07,
+ 0x20, 0x66, 0x01, 0x3d, 0x82, 0x99, 0x21, 0x06, 0x00, 0x97, 0x42, 0xb4, 0xd5, 0xe8, 0xb0, 0xcf,
+ 0xd4, 0xe0, 0x0e, 0x13, 0xbc, 0xbf, 0x89, 0xb1, 0x40, 0x68, 0x31, 0xf3, 0x81, 0x4b, 0xf1, 0xfe,
+ 0x26, 0x6f, 0xeb, 0x78, 0x9b, 0xde, 0x09, 0x91, 0xd3, 0xc2, 0x84, 0xe0, 0xef, 0xf5, 0xe0, 0x26,
+ 0x51, 0xff, 0x6f, 0x92, 0xe2, 0x4d, 0xa5, 0x89, 0x5a, 0x2e, 0x85, 0x45, 0x14, 0x48, 0xa6, 0xfe,
+ 0x64, 0xf4, 0xc6, 0x40, 0x6d, 0x96, 0x05, 0xb5, 0x79, 0x4a, 0x02, 0xf1, 0xa6, 0xaf, 0x3c, 0x5f,
+ 0xca, 0xc3, 0x4c, 0xcd, 0xea, 0x30, 0xdd, 0xe1, 0xa6, 0x9b, 0x9f, 0xc8, 0x27, 0x9a, 0x6e, 0x06,
+ 0x34, 0x22, 0x14, 0xe4, 0x39, 0xa2, 0x82, 0xc8, 0x51, 0xe0, 0xf5, 0x43, 0x5d, 0x82, 0x02, 0xd1,
+ 0xde, 0xc3, 0x57, 0x54, 0xc6, 0x91, 0x20, 0xa2, 0xd5, 0xd8, 0x9f, 0xff, 0xe9, 0x74, 0xec, 0xbf,
+ 0x41, 0x9e, 0x54, 0x30, 0x66, 0x6f, 0x48, 0xac, 0x68, 0x36, 0xbe, 0xa2, 0x4a, 0x7c, 0x45, 0x73,
+ 0xfd, 0x15, 0x4d, 0xb2, 0x8a, 0x10, 0xa5, 0x21, 0xe9, 0xeb, 0xf8, 0xdf, 0x4c, 0x01, 0xd4, 0xf4,
+ 0xab, 0xc6, 0x0e, 0xdd, 0x5b, 0xfe, 0x43, 0x7f, 0xf6, 0xc4, 0x76, 0x81, 0xbf, 0x8f, 0x1b, 0x08,
+ 0xef, 0x81, 0x29, 0x36, 0xee, 0xb1, 0x8a, 0xdc, 0x2c, 0x54, 0x24, 0xa4, 0x42, 0x8d, 0xda, 0x47,
+ 0x5d, 0xcd, 0xcf, 0x2f, 0xdc, 0xa6, 0x9f, 0xed, 0xbb, 0x4d, 0x7f, 0xf0, 0x0e, 0x46, 0xc4, 0x1d,
+ 0xfb, 0xe8, 0xbd, 0xd2, 0x67, 0xa8, 0x38, 0x7e, 0xb8, 0x1a, 0x45, 0x34, 0xc1, 0xa7, 0xc1, 0x94,
+ 0x15, 0x6c, 0x87, 0x2b, 0x91, 0xab, 0x68, 0x55, 0x73, 0xdb, 0xd2, 0xfc, 0x9c, 0x92, 0x5b, 0x67,
+ 0x52, 0x7c, 0x4c, 0xe4, 0x98, 0xe2, 0xd9, 0x55, 0x3f, 0xbe, 0xa6, 0x57, 0x8f, 0x4b, 0x86, 0xbb,
+ 0xbb, 0x6e, 0x98, 0x57, 0x1c, 0xf4, 0x6d, 0x72, 0x16, 0x24, 0x87, 0x7f, 0x36, 0x19, 0xfe, 0x62,
+ 0x7c, 0xab, 0x86, 0x88, 0xda, 0xfd, 0x51, 0x54, 0x06, 0x73, 0x1b, 0x01, 0xe0, 0xbd, 0x50, 0xa0,
+ 0x8c, 0xb2, 0x4e, 0xf4, 0x42, 0x24, 0x7e, 0x01, 0x25, 0x8d, 0xfd, 0x81, 0xde, 0x13, 0xe0, 0x78,
+ 0x51, 0xc0, 0x71, 0xe9, 0x48, 0x9c, 0xa5, 0x0e, 0xe9, 0x85, 0xa7, 0xc2, 0x14, 0x93, 0xb4, 0xba,
+ 0xc0, 0xb7, 0xe2, 0xe2, 0x09, 0x15, 0xa0, 0xb0, 0x61, 0x5d, 0xc5, 0x4d, 0xab, 0x98, 0xf1, 0x9e,
+ 0x3d, 0xfe, 0x9a, 0x56, 0x31, 0x8b, 0x5e, 0x3b, 0x0d, 0xd3, 0x41, 0x60, 0xc3, 0xdf, 0xcf, 0x42,
+ 0xb1, 0x4c, 0x66, 0x68, 0x2b, 0xb6, 0xb5, 0x47, 0x6b, 0x24, 0xef, 0x8f, 0xff, 0x23, 0xd2, 0x0e,
+ 0x22, 0x41, 0xc0, 0xc1, 0xfe, 0xc2, 0x22, 0xb0, 0xa4, 0x4b, 0x98, 0x59, 0x7f, 0x09, 0x13, 0xbd,
+ 0x4d, 0xca, 0x61, 0x44, 0xb6, 0x94, 0xf4, 0x9b, 0xda, 0x6f, 0x65, 0x21, 0x5f, 0xee, 0x5a, 0x26,
+ 0xe6, 0x0f, 0x8d, 0x0e, 0x3d, 0x9d, 0x38, 0x78, 0x1f, 0x03, 0xbd, 0x30, 0x2b, 0x6b, 0x6b, 0x84,
+ 0x02, 0xf0, 0xca, 0x96, 0x94, 0xad, 0xdc, 0x20, 0x15, 0x4b, 0x3a, 0x7d, 0x81, 0x7e, 0x39, 0x0b,
+ 0x33, 0x34, 0x12, 0x59, 0xa9, 0xdb, 0x45, 0x8f, 0x0b, 0x85, 0x3a, 0x20, 0x38, 0x24, 0xfa, 0x45,
+ 0xe9, 0x43, 0x51, 0x41, 0xad, 0x02, 0xda, 0x09, 0x82, 0xe9, 0x25, 0x3b, 0xa3, 0x23, 0xb7, 0x13,
+ 0x37, 0x94, 0xa1, 0xf4, 0x45, 0xfd, 0x07, 0x59, 0xcf, 0x00, 0x30, 0xaf, 0x6c, 0xda, 0xf8, 0xaa,
+ 0x81, 0xaf, 0xa1, 0x1b, 0x43, 0x61, 0x1f, 0x0e, 0xb3, 0xf4, 0x16, 0xe9, 0x45, 0x1c, 0x8e, 0x64,
+ 0xe4, 0x46, 0xd8, 0x6c, 0x37, 0xcc, 0xc4, 0x7a, 0xf1, 0xfe, 0xd8, 0x57, 0x1c, 0x19, 0x8d, 0xcf,
+ 0x2e, 0xb9, 0x66, 0x13, 0xcd, 0x45, 0xfa, 0x82, 0xfd, 0xc8, 0x14, 0x4c, 0x6f, 0x99, 0x4e, 0xaf,
+ 0xab, 0x3b, 0xbb, 0xe8, 0x5f, 0x15, 0x28, 0xd0, 0x8b, 0x51, 0xd1, 0x37, 0x09, 0xd1, 0x5c, 0x9e,
+ 0xbf, 0x8f, 0x6d, 0xdf, 0x81, 0x87, 0xbe, 0x84, 0xf6, 0x51, 0x96, 0xb3, 0x8f, 0xd0, 0x07, 0x14,
+ 0xd9, 0x49, 0xaa, 0x5f, 0x28, 0xbb, 0x89, 0x35, 0x3a, 0x80, 0x48, 0xcf, 0x68, 0xbb, 0xfb, 0x36,
+ 0x76, 0x06, 0x06, 0x10, 0x89, 0xa4, 0xb2, 0x49, 0xff, 0xd2, 0x82, 0xdf, 0x91, 0x0e, 0x53, 0x2c,
+ 0xf1, 0xd0, 0x66, 0xd4, 0xe1, 0x88, 0x07, 0x67, 0xa1, 0xa0, 0xdb, 0xae, 0xe1, 0xb8, 0x6c, 0x7b,
+ 0x96, 0xbd, 0x79, 0xdd, 0x25, 0x7d, 0xda, 0xb2, 0xbb, 0x7e, 0xdc, 0xa7, 0x20, 0x01, 0xfd, 0x92,
+ 0xd4, 0xfc, 0x31, 0xbe, 0xe6, 0xc9, 0x20, 0x7f, 0x68, 0x84, 0x15, 0xee, 0xeb, 0xe1, 0x3a, 0xad,
+ 0xd4, 0xac, 0xb4, 0x68, 0x98, 0xa0, 0x20, 0x22, 0x50, 0x07, 0xbd, 0x5b, 0xe1, 0xd6, 0xef, 0x0e,
+ 0x84, 0x31, 0x82, 0x49, 0x31, 0x1c, 0x23, 0x82, 0x84, 0x98, 0xbd, 0x6e, 0x61, 0x09, 0x57, 0x91,
+ 0x5e, 0xc2, 0x45, 0x3f, 0x27, 0xbd, 0x17, 0x15, 0x88, 0x72, 0xc8, 0x1a, 0x60, 0xdc, 0xc5, 0x89,
+ 0x1f, 0x92, 0xda, 0x57, 0x1a, 0x56, 0xd2, 0x31, 0xc2, 0xf6, 0xe6, 0x29, 0x98, 0x5a, 0xd5, 0xbb,
+ 0x5d, 0x6c, 0x1f, 0x78, 0x43, 0x52, 0xd1, 0xe7, 0x70, 0x43, 0x37, 0x8d, 0x6d, 0xec, 0xb8, 0xf1,
+ 0x9d, 0xe5, 0x7b, 0xa5, 0x83, 0xf2, 0xb3, 0x32, 0x16, 0xfb, 0xe9, 0x47, 0xc8, 0xfc, 0x2e, 0xc8,
+ 0x19, 0xe6, 0xb6, 0xc5, 0xba, 0xcc, 0xfe, 0x35, 0x7f, 0xff, 0x67, 0x32, 0x75, 0x21, 0x19, 0x25,
+ 0xe3, 0xf2, 0x4b, 0x72, 0x91, 0x7e, 0xcf, 0xf9, 0x0b, 0x39, 0x98, 0xf7, 0x99, 0xa8, 0x9a, 0x1d,
+ 0xfc, 0x28, 0xbf, 0x14, 0xf3, 0x83, 0x39, 0xd9, 0x03, 0xb8, 0xfd, 0xf5, 0x21, 0xa4, 0x22, 0x44,
+ 0xda, 0x04, 0x68, 0xeb, 0x2e, 0xde, 0xb1, 0x6c, 0x23, 0xe8, 0x0f, 0x9f, 0x9e, 0x84, 0x5a, 0x99,
+ 0xfe, 0x7d, 0xa0, 0x71, 0x74, 0xd4, 0xfb, 0x61, 0x16, 0x07, 0x11, 0x4f, 0xfc, 0xa5, 0x9a, 0x58,
+ 0xbc, 0xf8, 0xfc, 0xe8, 0x0f, 0xa4, 0xce, 0xf9, 0xca, 0x54, 0x33, 0x19, 0x66, 0xad, 0xd1, 0xda,
+ 0xd0, 0x56, 0x6d, 0xa3, 0xa4, 0x35, 0xd6, 0x4a, 0xeb, 0xeb, 0xd5, 0xda, 0x6a, 0x10, 0x6a, 0x4b,
+ 0x85, 0x85, 0xe5, 0xfa, 0xa5, 0x1a, 0x17, 0x0b, 0x2d, 0x87, 0x36, 0x61, 0xda, 0x97, 0xd7, 0x20,
+ 0x4f, 0x4e, 0x5e, 0x66, 0xcc, 0x93, 0x93, 0x4b, 0xf2, 0x8c, 0x33, 0xa3, 0x1d, 0xb8, 0xf7, 0x90,
+ 0x67, 0xf4, 0x1b, 0x3a, 0xe4, 0xc9, 0x9a, 0x3a, 0x7a, 0x27, 0xd9, 0x44, 0xec, 0x75, 0xf5, 0x36,
+ 0x46, 0x7b, 0x09, 0xac, 0x71, 0xff, 0x96, 0xa8, 0xec, 0xa1, 0x5b, 0xa2, 0xc8, 0x23, 0xb3, 0xfa,
+ 0x4e, 0x0f, 0x5a, 0xc7, 0xd7, 0x68, 0x16, 0xf1, 0x48, 0x6c, 0xec, 0xee, 0x0a, 0x5d, 0xfe, 0x67,
+ 0x6c, 0x46, 0xa8, 0x64, 0x34, 0x4f, 0x69, 0x84, 0xff, 0x8d, 0xe3, 0x28, 0xfd, 0x16, 0xff, 0xf9,
+ 0x1c, 0xe4, 0x1b, 0xbd, 0xae, 0xe1, 0xa2, 0x1f, 0xcb, 0x8e, 0x05, 0x33, 0x7a, 0xb3, 0x97, 0x32,
+ 0xf4, 0x66, 0xaf, 0x70, 0xcf, 0x36, 0x27, 0xb1, 0x67, 0xdb, 0xc4, 0x8f, 0xba, 0xe2, 0x9e, 0xed,
+ 0x3d, 0x2c, 0x5c, 0x26, 0xdd, 0xf1, 0x7d, 0xc2, 0x00, 0x91, 0x92, 0x6a, 0x0d, 0x88, 0xc3, 0x7a,
+ 0xe1, 0xa9, 0x2c, 0x1c, 0x24, 0x40, 0x61, 0xa9, 0xde, 0x6c, 0xd6, 0x37, 0x8a, 0x27, 0x48, 0x1c,
+ 0xb1, 0xfa, 0x26, 0x0d, 0xce, 0x55, 0xad, 0xd5, 0x2a, 0x5a, 0x31, 0x4b, 0x02, 0x54, 0x56, 0x9b,
+ 0xeb, 0x95, 0xa2, 0x22, 0x5e, 0xf3, 0x12, 0x6b, 0x7e, 0x8b, 0x65, 0xa7, 0xa9, 0x5e, 0x72, 0x86,
+ 0x78, 0x34, 0x3f, 0xe9, 0x2b, 0xd7, 0x0f, 0x2b, 0x90, 0xdf, 0xc0, 0xf6, 0x0e, 0x46, 0xcf, 0x4f,
+ 0xb0, 0xc9, 0xb7, 0x6d, 0xd8, 0x0e, 0x0d, 0xe7, 0x19, 0x6e, 0xf2, 0xf1, 0x69, 0xea, 0xad, 0x30,
+ 0xef, 0xe0, 0xb6, 0x65, 0x76, 0xfc, 0x4c, 0xb4, 0x3f, 0x12, 0x13, 0xd1, 0xab, 0x13, 0x42, 0x46,
+ 0x18, 0x1d, 0xcb, 0x4e, 0x5d, 0x12, 0x60, 0x06, 0x95, 0x9a, 0x3e, 0x30, 0x5f, 0x51, 0xbc, 0x9f,
+ 0x7a, 0x07, 0xe8, 0xd5, 0xd2, 0xbb, 0xaf, 0x77, 0x42, 0xe1, 0xb2, 0x1f, 0xd1, 0x5f, 0x89, 0xec,
+ 0x8f, 0x59, 0x1e, 0x75, 0x09, 0x4e, 0x39, 0xb8, 0x8b, 0xdb, 0x2e, 0xee, 0x78, 0x4d, 0x57, 0x1b,
+ 0xda, 0x29, 0x1c, 0xce, 0x8e, 0x7e, 0x87, 0x07, 0xf0, 0x3e, 0x11, 0xc0, 0xdb, 0x06, 0x88, 0xd2,
+ 0xab, 0x50, 0xb4, 0xad, 0xec, 0x55, 0xa3, 0xd1, 0xb5, 0x82, 0x45, 0x71, 0xff, 0xdd, 0xfb, 0xb6,
+ 0xeb, 0xee, 0x75, 0xc9, 0x37, 0x76, 0x3c, 0xc1, 0x7f, 0x57, 0x17, 0x61, 0x4a, 0x37, 0x0f, 0xc8,
+ 0xa7, 0x5c, 0x4c, 0xad, 0xfd, 0x4c, 0xe8, 0xb5, 0x01, 0xf2, 0x0f, 0x08, 0xc8, 0x3f, 0x49, 0x8e,
+ 0xdd, 0xf4, 0x81, 0xff, 0xce, 0x29, 0xc8, 0x6f, 0xea, 0x8e, 0x8b, 0xd1, 0xff, 0xa3, 0xc8, 0x22,
+ 0x7f, 0x1b, 0x2c, 0x6c, 0x5b, 0xed, 0x7d, 0x07, 0x77, 0xc4, 0x46, 0xd9, 0x97, 0x3a, 0x0e, 0xcc,
+ 0xd5, 0x3b, 0xa0, 0xe8, 0x27, 0x32, 0xb2, 0xfe, 0x36, 0xfc, 0xa1, 0x74, 0x72, 0x69, 0x88, 0xb3,
+ 0xa9, 0xdb, 0x6e, 0x7d, 0x9b, 0xa4, 0x05, 0x97, 0x86, 0xf0, 0x89, 0x02, 0xf4, 0x85, 0x18, 0xe8,
+ 0xa7, 0xa2, 0xa1, 0x9f, 0x96, 0x80, 0x5e, 0x2d, 0xc1, 0xf4, 0xb6, 0xd1, 0xc5, 0xe4, 0x87, 0x19,
+ 0xf2, 0xc3, 0xa0, 0x31, 0x89, 0xc8, 0x3e, 0x18, 0x93, 0x56, 0x8c, 0x2e, 0xd6, 0x82, 0xdf, 0xfc,
+ 0x89, 0x0c, 0x84, 0x13, 0x99, 0x75, 0xea, 0x8d, 0xeb, 0x19, 0x5e, 0xa6, 0xbe, 0x87, 0xfd, 0xc5,
+ 0x37, 0x93, 0x1d, 0x8d, 0xe9, 0xe8, 0xae, 0x4e, 0xc0, 0x98, 0xd3, 0xc8, 0xb3, 0xe8, 0x17, 0xa2,
+ 0xf4, 0xfb, 0x85, 0xbc, 0x44, 0x49, 0xd6, 0x23, 0xfa, 0xcc, 0x46, 0xb4, 0xa8, 0xcb, 0x3e, 0x40,
+ 0xd4, 0x52, 0x0c, 0xde, 0x3d, 0x60, 0xda, 0xba, 0x8d, 0xdd, 0x4d, 0xde, 0x13, 0x23, 0xaf, 0x89,
+ 0x89, 0xc4, 0x11, 0xd0, 0x69, 0xe8, 0x7b, 0xf4, 0x52, 0x90, 0xb2, 0xf7, 0x8d, 0x39, 0x78, 0x1d,
+ 0x4a, 0x0f, 0xfb, 0xdf, 0xfc, 0xb8, 0xfb, 0xdf, 0x41, 0x75, 0x4c, 0xbf, 0x19, 0xbe, 0x3e, 0x07,
+ 0x4a, 0x79, 0xdf, 0x7d, 0x4c, 0x77, 0xbf, 0xff, 0x26, 0xed, 0xe7, 0xc2, 0xfa, 0xb3, 0x7d, 0xf7,
+ 0x78, 0x7b, 0xdf, 0x84, 0x5a, 0x22, 0xe7, 0x4f, 0x13, 0x55, 0xb7, 0xf4, 0x75, 0xe4, 0xe7, 0x95,
+ 0xc0, 0x3d, 0xf3, 0xc5, 0x99, 0xa3, 0x9b, 0xe6, 0x88, 0xf6, 0x4f, 0x5c, 0xcf, 0x10, 0xbc, 0xfb,
+ 0x1d, 0x4f, 0x4e, 0x88, 0x8e, 0x4a, 0xb6, 0xd7, 0x89, 0x28, 0xe7, 0x34, 0xfa, 0x82, 0x7e, 0x5c,
+ 0xda, 0x69, 0x9d, 0x8a, 0x2d, 0xd6, 0x95, 0x30, 0x99, 0x4d, 0x25, 0x77, 0x6f, 0x7a, 0x4c, 0xb1,
+ 0xe9, 0x03, 0xf6, 0x77, 0xbc, 0xab, 0x60, 0xe9, 0xc8, 0x88, 0xa1, 0xd7, 0x49, 0x6f, 0x47, 0xd1,
+ 0x6a, 0x0f, 0x59, 0x2f, 0x4c, 0x26, 0x6f, 0xb9, 0xcd, 0xaa, 0xd8, 0x82, 0x27, 0x70, 0xcb, 0x99,
+ 0x02, 0x05, 0xba, 0x05, 0x89, 0xde, 0x2a, 0xdd, 0x44, 0xbc, 0xde, 0x48, 0x74, 0x21, 0x0c, 0xde,
+ 0x93, 0xac, 0x39, 0x08, 0xae, 0x86, 0xb9, 0x44, 0xae, 0x86, 0xe2, 0x29, 0x50, 0x89, 0x76, 0x44,
+ 0xeb, 0x98, 0xf2, 0x74, 0x32, 0x49, 0x0b, 0x1b, 0xc8, 0x50, 0xfa, 0x78, 0x7f, 0x77, 0x1e, 0xe6,
+ 0x68, 0xd1, 0xd4, 0xc7, 0x19, 0xbd, 0x3b, 0xfb, 0x1f, 0x07, 0x75, 0xb5, 0x06, 0x73, 0xd7, 0x08,
+ 0xdb, 0xf4, 0xf6, 0x32, 0xb6, 0x72, 0x71, 0x47, 0xec, 0xba, 0x07, 0xad, 0xa7, 0x7f, 0xdf, 0x99,
+ 0xf0, 0xbf, 0x27, 0x63, 0xba, 0xe0, 0x4f, 0x1d, 0xb8, 0x0a, 0xc4, 0xc8, 0xe2, 0x93, 0xd4, 0xb3,
+ 0x50, 0xb8, 0x6a, 0xe0, 0x6b, 0xd5, 0x0e, 0xb3, 0x6e, 0xd9, 0x1b, 0xfa, 0x65, 0xe9, 0x7d, 0x5b,
+ 0x1e, 0x6e, 0xc6, 0x4b, 0xba, 0x5a, 0x28, 0xb7, 0x7b, 0x3b, 0x94, 0xad, 0x09, 0x9c, 0x48, 0x16,
+ 0xef, 0x25, 0x2f, 0x27, 0x50, 0xc4, 0x28, 0xc3, 0x59, 0x0c, 0x04, 0x12, 0x7b, 0xde, 0x85, 0x0a,
+ 0x60, 0xcc, 0x57, 0x96, 0xcb, 0x45, 0xa7, 0x18, 0x52, 0x74, 0xfa, 0x92, 0x7f, 0xa3, 0x02, 0x33,
+ 0x0d, 0xec, 0xae, 0x18, 0xb8, 0xdb, 0x71, 0x90, 0x7d, 0x74, 0xd3, 0xe8, 0x2e, 0x28, 0x6c, 0x13,
+ 0x62, 0xc3, 0xce, 0x2d, 0xb0, 0x6c, 0xe8, 0xf5, 0x59, 0xd9, 0x1d, 0x61, 0xb6, 0xfa, 0xe6, 0x73,
+ 0x3b, 0x16, 0x98, 0xe4, 0x3c, 0x7a, 0xe3, 0x4b, 0x9e, 0x40, 0x28, 0x71, 0x05, 0xe6, 0xd8, 0x45,
+ 0xc6, 0xa5, 0xae, 0xb1, 0x63, 0xf2, 0xf7, 0x02, 0x8e, 0xdc, 0x42, 0xd4, 0xa7, 0x40, 0x5e, 0xf7,
+ 0xa8, 0xb1, 0xad, 0x57, 0x34, 0xb0, 0xf3, 0x24, 0xe5, 0x69, 0x34, 0x63, 0x82, 0xc0, 0xbd, 0xa1,
+ 0x62, 0xfb, 0x3c, 0x4f, 0x30, 0x70, 0xef, 0xd0, 0xc2, 0xd3, 0x47, 0xec, 0x8b, 0x0a, 0x9c, 0x66,
+ 0x0c, 0x5c, 0xc4, 0xb6, 0x6b, 0xb4, 0xf5, 0x2e, 0x45, 0xee, 0xe5, 0x99, 0x71, 0x40, 0xb7, 0x06,
+ 0xf3, 0x57, 0x79, 0xb2, 0x0c, 0xc2, 0x0b, 0x03, 0x21, 0x14, 0x18, 0xd0, 0xc4, 0x1f, 0x13, 0x04,
+ 0x40, 0x15, 0xa4, 0x2a, 0xd0, 0x9c, 0x60, 0x00, 0x54, 0x69, 0x26, 0xd2, 0x87, 0xf8, 0x55, 0x2c,
+ 0xb0, 0x4f, 0xd8, 0x7d, 0xfe, 0xa1, 0x34, 0xb6, 0x5b, 0x30, 0x4b, 0xb0, 0xa4, 0x3f, 0xb2, 0x65,
+ 0x88, 0x18, 0x25, 0x0e, 0xfa, 0x1d, 0x76, 0x45, 0x63, 0xf0, 0xaf, 0xc6, 0xd3, 0x41, 0x97, 0x00,
+ 0xc2, 0x4f, 0x7c, 0x27, 0x9d, 0x89, 0xea, 0xa4, 0xb3, 0x72, 0x9d, 0xf4, 0x5b, 0xa4, 0x43, 0xad,
+ 0x0c, 0x66, 0xfb, 0xe8, 0xea, 0x21, 0x17, 0x64, 0x63, 0x78, 0xe9, 0xe9, 0xeb, 0xc5, 0x6b, 0x99,
+ 0x5e, 0x2c, 0xef, 0xf7, 0xba, 0x46, 0xdb, 0x9b, 0x4f, 0x7d, 0x74, 0x2c, 0xf3, 0x29, 0xbe, 0x3f,
+ 0x50, 0xfa, 0xfa, 0x83, 0x23, 0x58, 0xd2, 0xb7, 0xc3, 0x49, 0x5a, 0x44, 0x39, 0x60, 0x2b, 0x4f,
+ 0x03, 0x49, 0xf4, 0x25, 0x8b, 0x51, 0x0d, 0x25, 0x95, 0x20, 0x10, 0xc2, 0x08, 0x4b, 0x9f, 0xc9,
+ 0x8c, 0xdd, 0xa4, 0x0a, 0x12, 0xc5, 0xd9, 0x04, 0xdc, 0x42, 0x73, 0xd4, 0xda, 0xdd, 0x22, 0xb7,
+ 0x68, 0xa2, 0xcf, 0xe5, 0xc6, 0x31, 0x22, 0x3c, 0x07, 0x72, 0xc4, 0xc5, 0x5d, 0x89, 0x5c, 0xd2,
+ 0x08, 0x8b, 0x0c, 0xaf, 0x38, 0xc5, 0x8f, 0xba, 0x6b, 0x27, 0x34, 0xf2, 0xa7, 0x7a, 0x07, 0x9c,
+ 0xbc, 0xac, 0xb7, 0xaf, 0xec, 0xd8, 0xd6, 0x3e, 0xb9, 0x6f, 0xd0, 0x62, 0x17, 0x17, 0x92, 0x0b,
+ 0x60, 0xc5, 0x0f, 0xea, 0xdd, 0xbe, 0xe9, 0x90, 0x1f, 0x66, 0x3a, 0xac, 0x9d, 0x60, 0xc6, 0x83,
+ 0xfa, 0xd4, 0xa0, 0xd3, 0x29, 0xc4, 0x76, 0x3a, 0x6b, 0x27, 0xfc, 0x6e, 0x47, 0x5d, 0x86, 0xe9,
+ 0x8e, 0x71, 0x95, 0x6c, 0x55, 0x93, 0x59, 0xd7, 0xb0, 0x83, 0xcf, 0xcb, 0xc6, 0x55, 0xba, 0xb1,
+ 0xbd, 0x76, 0x42, 0x0b, 0xfe, 0x54, 0x57, 0x61, 0x86, 0x6c, 0x0b, 0x10, 0x32, 0xd3, 0x89, 0x0e,
+ 0x35, 0xaf, 0x9d, 0xd0, 0xc2, 0x7f, 0x3d, 0xeb, 0x23, 0x47, 0xce, 0x7e, 0x3c, 0xe0, 0x6f, 0xb7,
+ 0x67, 0x12, 0x6d, 0xb7, 0x7b, 0xb2, 0xa0, 0x1b, 0xee, 0x67, 0x21, 0xdf, 0x26, 0x12, 0xce, 0x32,
+ 0x09, 0xd3, 0x57, 0xf5, 0x3e, 0xc8, 0xed, 0xe9, 0xb6, 0x3f, 0x79, 0xbe, 0x6d, 0x38, 0xdd, 0x0d,
+ 0xdd, 0xbe, 0xe2, 0x21, 0xe8, 0xfd, 0xb5, 0x34, 0x05, 0x79, 0x22, 0xb8, 0xe0, 0x01, 0xfd, 0x7c,
+ 0x8e, 0x9a, 0x21, 0x65, 0xcb, 0xf4, 0x86, 0xfd, 0xa6, 0xe5, 0x1f, 0x90, 0xf9, 0xe5, 0xcc, 0x78,
+ 0x2c, 0xc8, 0xeb, 0xb8, 0x70, 0xc3, 0xa6, 0xf1, 0xfc, 0x7d, 0xfc, 0x10, 0x3e, 0x60, 0x4b, 0xa2,
+ 0x83, 0x3e, 0xa9, 0xe7, 0x01, 0x5c, 0xe6, 0x2d, 0x1c, 0x04, 0x52, 0xe2, 0x52, 0xc2, 0xe5, 0x83,
+ 0xfc, 0x70, 0x47, 0x95, 0xdf, 0x19, 0xc1, 0x74, 0xe9, 0x17, 0x44, 0xf4, 0x0c, 0xbc, 0x6b, 0x98,
+ 0x5c, 0x9d, 0xfd, 0xd7, 0x84, 0x9d, 0x52, 0x52, 0xa3, 0x66, 0x08, 0x7b, 0xe9, 0xf7, 0x4d, 0x3f,
+ 0x9b, 0xa3, 0x11, 0x57, 0xe9, 0x29, 0x0c, 0xf1, 0x86, 0x5f, 0xf4, 0xa9, 0xb1, 0x28, 0xcd, 0x80,
+ 0x01, 0x47, 0x19, 0x38, 0xe0, 0x1c, 0x3a, 0xa4, 0x9c, 0x1b, 0x72, 0x48, 0x39, 0x9f, 0x6c, 0xe5,
+ 0xf0, 0xc3, 0xbc, 0xfe, 0x6c, 0x8a, 0xfa, 0x73, 0x6f, 0x04, 0x40, 0x83, 0xe4, 0x32, 0x16, 0xfb,
+ 0xe6, 0x9d, 0x81, 0xa6, 0x34, 0x04, 0x4d, 0x79, 0x60, 0x74, 0x46, 0xd2, 0xd7, 0x96, 0x0f, 0xe6,
+ 0xe0, 0xba, 0x90, 0x99, 0x1a, 0xbe, 0xc6, 0x14, 0xe5, 0xf7, 0xc7, 0xa2, 0x28, 0xc9, 0x63, 0x20,
+ 0xa4, 0xad, 0x31, 0xbf, 0x29, 0x7d, 0x76, 0xa8, 0x1f, 0xa8, 0x40, 0x36, 0xd1, 0x77, 0xe4, 0xd3,
+ 0x1e, 0xc6, 0xbf, 0x23, 0x9f, 0xbe, 0x25, 0xec, 0x6e, 0xe4, 0x4e, 0x1c, 0xc9, 0xf2, 0x36, 0x01,
+ 0xfd, 0x61, 0xeb, 0x1a, 0xcd, 0x7d, 0xdb, 0xac, 0x9a, 0xae, 0x85, 0xbe, 0x63, 0x2c, 0x8a, 0x13,
+ 0x78, 0xc3, 0x29, 0xa3, 0x78, 0xc3, 0x8d, 0xb4, 0xca, 0xe1, 0xd7, 0xe0, 0x58, 0x56, 0x39, 0x22,
+ 0x0a, 0x4f, 0x1f, 0xbf, 0x77, 0x28, 0x70, 0x96, 0x4d, 0xb6, 0x96, 0x44, 0x0b, 0x11, 0x3d, 0x3c,
+ 0x0e, 0x20, 0x4f, 0xfb, 0x66, 0x12, 0xbb, 0x57, 0x92, 0xbc, 0x88, 0x27, 0xa5, 0x62, 0x6f, 0xd4,
+ 0x11, 0xa6, 0x83, 0x7d, 0x1c, 0x8e, 0x05, 0x29, 0xb9, 0x8b, 0x74, 0x12, 0xb0, 0x91, 0x3e, 0x66,
+ 0xaf, 0x54, 0xa0, 0x40, 0xcf, 0x69, 0xa1, 0xad, 0x54, 0x1c, 0x26, 0xc4, 0x18, 0xd1, 0x12, 0x3b,
+ 0x72, 0x94, 0x9b, 0xd4, 0xce, 0xb0, 0x25, 0xd9, 0x8b, 0x1b, 0xc8, 0xca, 0x04, 0x5c, 0x08, 0xb3,
+ 0x30, 0xdb, 0xc0, 0x6e, 0x59, 0xb7, 0x6d, 0x43, 0xdf, 0x19, 0x97, 0xc7, 0xb7, 0xac, 0xf7, 0x30,
+ 0xfa, 0x6a, 0x46, 0xf6, 0x3c, 0x4d, 0xb0, 0x10, 0xee, 0xb3, 0x1a, 0x11, 0x89, 0xf0, 0x4d, 0x52,
+ 0x67, 0x66, 0x86, 0x51, 0x9b, 0x80, 0xc7, 0x76, 0x16, 0xa6, 0xfc, 0xb3, 0x78, 0x77, 0x09, 0xe7,
+ 0x33, 0x77, 0xdd, 0x3d, 0xff, 0x18, 0x0c, 0x79, 0x3e, 0x7c, 0x06, 0x0c, 0xbd, 0x26, 0xa1, 0xa3,
+ 0x7c, 0xfc, 0x41, 0xc2, 0x64, 0x6d, 0x2c, 0x89, 0x3b, 0xfc, 0x71, 0x1d, 0x1d, 0xfc, 0xc5, 0x29,
+ 0xb6, 0x1c, 0xb9, 0xae, 0xbb, 0xf8, 0x51, 0xf4, 0x87, 0x0a, 0x4c, 0x35, 0xb0, 0xeb, 0x8d, 0xb7,
+ 0xc2, 0x75, 0xd2, 0xa3, 0x6a, 0xb8, 0xca, 0xad, 0x78, 0xcc, 0xb0, 0x35, 0x8c, 0x07, 0x61, 0xa6,
+ 0x67, 0x5b, 0x6d, 0xec, 0x38, 0x6c, 0xf5, 0x82, 0x77, 0x54, 0x1b, 0x34, 0xfa, 0x13, 0xd6, 0x16,
+ 0x37, 0xfd, 0x7f, 0xb4, 0xf0, 0xf7, 0xa4, 0x66, 0x00, 0xa5, 0xc4, 0x2a, 0x38, 0x69, 0x33, 0x20,
+ 0xae, 0xf0, 0xf4, 0x81, 0xfe, 0x5d, 0x05, 0xe6, 0x1a, 0xd8, 0x0d, 0xa4, 0x98, 0x60, 0x93, 0x23,
+ 0x1a, 0x5e, 0x01, 0x4a, 0xe5, 0x68, 0x50, 0xca, 0x5f, 0xc6, 0x2a, 0x4a, 0x33, 0x20, 0x36, 0xc1,
+ 0xcb, 0x58, 0xe5, 0x38, 0x98, 0xc0, 0xf1, 0xb5, 0x27, 0xc0, 0x0c, 0xe1, 0x85, 0x34, 0xd8, 0xef,
+ 0xcd, 0x85, 0x8d, 0xf7, 0xb3, 0x29, 0x35, 0xde, 0xfb, 0x21, 0xbf, 0xa7, 0xdb, 0x57, 0x1c, 0xd2,
+ 0x70, 0x67, 0x65, 0xcc, 0xf6, 0x0d, 0x2f, 0xbb, 0x46, 0xff, 0x1a, 0xec, 0xa7, 0x99, 0x4f, 0xe6,
+ 0xa7, 0xf9, 0xa6, 0x6c, 0xa2, 0x91, 0x90, 0xce, 0x1d, 0xc6, 0xd8, 0xe4, 0x13, 0x8c, 0x9b, 0x31,
+ 0x65, 0xa7, 0xaf, 0x1c, 0x2f, 0x57, 0x60, 0xda, 0x1b, 0xb7, 0x89, 0x3d, 0x7e, 0xe9, 0xe8, 0xea,
+ 0x30, 0xd8, 0xd0, 0x4f, 0xd8, 0x03, 0xfb, 0x12, 0x19, 0x9f, 0x79, 0x9f, 0xa0, 0x07, 0x8e, 0x2b,
+ 0x3c, 0x7d, 0x3c, 0xde, 0x45, 0xf1, 0x20, 0xed, 0x01, 0xfd, 0xb4, 0x02, 0xca, 0x2a, 0x76, 0x27,
+ 0x6d, 0x45, 0xbe, 0x5d, 0x3a, 0xc4, 0x91, 0x20, 0x30, 0xc2, 0xf3, 0xe2, 0x2a, 0x1e, 0x4f, 0x03,
+ 0x92, 0x8b, 0x6d, 0x24, 0xc5, 0x40, 0xfa, 0xa8, 0xbd, 0x8f, 0xa2, 0x46, 0x37, 0x17, 0xbe, 0x7d,
+ 0x0c, 0xbd, 0xea, 0x64, 0x17, 0x3e, 0x7c, 0x01, 0x12, 0x1a, 0xc7, 0xd5, 0xde, 0x06, 0x15, 0x3e,
+ 0x91, 0xcb, 0x4f, 0xc1, 0x6b, 0xec, 0xbb, 0xb8, 0x7d, 0x05, 0x77, 0xf8, 0xcb, 0xe4, 0x46, 0x85,
+ 0xee, 0x1c, 0x4c, 0xb5, 0x29, 0x35, 0x02, 0xde, 0xb4, 0xe6, 0xbf, 0x26, 0xb8, 0xc9, 0x5f, 0xec,
+ 0x88, 0xe8, 0xef, 0x13, 0xbc, 0xc9, 0x5f, 0xa2, 0xf8, 0x09, 0x98, 0x2d, 0x74, 0x96, 0x51, 0x6d,
+ 0x5b, 0x26, 0xfa, 0xaf, 0x47, 0x87, 0xe5, 0x26, 0x98, 0x31, 0xda, 0x96, 0x49, 0xc2, 0x50, 0xf8,
+ 0x87, 0x80, 0x82, 0x04, 0xff, 0x6b, 0x65, 0xcf, 0x7a, 0xc4, 0x60, 0xbb, 0xe6, 0x61, 0xc2, 0xa8,
+ 0xc6, 0x84, 0xc7, 0xfa, 0x71, 0x19, 0x13, 0x03, 0xca, 0x4e, 0x1f, 0xb2, 0x8f, 0x85, 0xde, 0x6d,
+ 0xb4, 0x2b, 0x7c, 0x4c, 0xac, 0x02, 0x8f, 0x32, 0x9c, 0xf1, 0xb5, 0x38, 0x96, 0xe1, 0x2c, 0x86,
+ 0x81, 0x09, 0xdc, 0x86, 0x12, 0xe2, 0x98, 0xfa, 0x1a, 0xf0, 0x11, 0xd0, 0x19, 0x9f, 0x79, 0x38,
+ 0x22, 0x3a, 0xc7, 0x63, 0x22, 0x7e, 0x88, 0x85, 0xc8, 0x64, 0x16, 0x0f, 0xfa, 0x6f, 0xe3, 0x00,
+ 0xe7, 0xde, 0x51, 0xfc, 0x15, 0xa8, 0xb7, 0x02, 0x7a, 0x5b, 0x56, 0x36, 0x04, 0xca, 0x21, 0x09,
+ 0x7a, 0x54, 0xc6, 0x82, 0xe0, 0x5b, 0xa4, 0x62, 0x93, 0xc8, 0x94, 0x9f, 0x3e, 0x80, 0x2f, 0x53,
+ 0x60, 0x81, 0xf8, 0x08, 0x74, 0xb1, 0x6e, 0xd3, 0x8e, 0x72, 0x2c, 0x8e, 0xf2, 0xef, 0x92, 0x0e,
+ 0xf0, 0x23, 0xca, 0x21, 0xe4, 0x63, 0x2c, 0x50, 0xc8, 0x45, 0xf7, 0x91, 0x64, 0x61, 0x22, 0xdb,
+ 0x28, 0xc5, 0x80, 0x05, 0xa6, 0xe2, 0xe3, 0xc1, 0x23, 0xa1, 0x47, 0xae, 0x28, 0x0c, 0xbf, 0xb1,
+ 0x4d, 0xd8, 0x23, 0x57, 0x86, 0x89, 0xf4, 0x31, 0xf9, 0xe9, 0xa7, 0xb0, 0x05, 0xe7, 0xa6, 0x7e,
+ 0xb9, 0x8b, 0xd1, 0xeb, 0x72, 0xc1, 0x89, 0xb6, 0xdf, 0x1d, 0x8b, 0x07, 0xe6, 0x11, 0x02, 0xe2,
+ 0xab, 0x90, 0xb3, 0xad, 0x6b, 0x74, 0x69, 0x6b, 0x5e, 0x23, 0xcf, 0xf4, 0x72, 0xcb, 0xee, 0xfe,
+ 0x9e, 0x49, 0x4f, 0x86, 0xce, 0x6b, 0xfe, 0xab, 0x7a, 0x2b, 0xcc, 0x5f, 0x33, 0xdc, 0xdd, 0x35,
+ 0xac, 0x77, 0xb0, 0xad, 0x59, 0xd7, 0x88, 0xc7, 0xdc, 0xb4, 0x26, 0x26, 0x8a, 0xfe, 0x2b, 0x12,
+ 0xf6, 0xa5, 0x27, 0x94, 0xc9, 0x1c, 0x7f, 0x4b, 0x62, 0x79, 0x46, 0x73, 0x95, 0xbe, 0xc2, 0xbc,
+ 0x5f, 0x81, 0x19, 0xcd, 0xba, 0xc6, 0x94, 0xe4, 0xff, 0x3c, 0x5e, 0x1d, 0x49, 0x3c, 0xd1, 0x23,
+ 0x92, 0x0b, 0xd8, 0x9f, 0xf8, 0x44, 0x2f, 0xb6, 0xf8, 0x89, 0x9c, 0x5c, 0x9a, 0xd3, 0xac, 0x6b,
+ 0x0d, 0xec, 0xd2, 0x16, 0x81, 0x5a, 0x63, 0x72, 0xb2, 0x36, 0x1c, 0x4a, 0x90, 0xcd, 0xc3, 0x83,
+ 0xf7, 0xa4, 0xbb, 0x08, 0x81, 0x80, 0x02, 0x16, 0x27, 0xbd, 0x8b, 0x30, 0x94, 0x83, 0x09, 0xc4,
+ 0x48, 0x51, 0x60, 0x56, 0xb3, 0xae, 0x79, 0x43, 0xc3, 0x8a, 0xd1, 0xed, 0x8e, 0x67, 0x84, 0x4c,
+ 0x6a, 0xfc, 0xfb, 0x62, 0xf0, 0xb9, 0x98, 0xb8, 0xf1, 0x3f, 0x84, 0x81, 0xf4, 0x61, 0x78, 0x09,
+ 0x6d, 0x2c, 0xfe, 0x08, 0x6d, 0x8e, 0x07, 0x87, 0x51, 0x1b, 0x44, 0xc0, 0xc6, 0xb1, 0x35, 0x88,
+ 0x28, 0x0e, 0x26, 0xb2, 0x73, 0xb2, 0x50, 0x26, 0xc3, 0xfc, 0x78, 0xdb, 0xc4, 0x7b, 0x92, 0xb9,
+ 0x26, 0xb2, 0x61, 0x57, 0x60, 0x64, 0x2c, 0x68, 0x24, 0x70, 0x41, 0x94, 0xe0, 0x21, 0x7d, 0x3c,
+ 0x7e, 0x45, 0x81, 0x39, 0xca, 0xc2, 0x63, 0xc4, 0x0a, 0x18, 0xa9, 0x51, 0xf1, 0x35, 0x38, 0x9e,
+ 0x46, 0x15, 0xc3, 0xc1, 0x44, 0xee, 0x14, 0xf5, 0xec, 0xb8, 0x11, 0x8e, 0x8f, 0x47, 0x21, 0x38,
+ 0xb2, 0x31, 0x36, 0xc6, 0x23, 0xe4, 0xa3, 0x18, 0x63, 0xc7, 0x74, 0x8c, 0xfc, 0x25, 0x41, 0x2b,
+ 0x1a, 0x27, 0x06, 0x47, 0x68, 0x0a, 0x63, 0x84, 0x61, 0xc4, 0xa6, 0x70, 0x4c, 0x48, 0x7c, 0x49,
+ 0x01, 0xa0, 0x0c, 0x6c, 0x58, 0x57, 0xc9, 0x65, 0x3e, 0x63, 0xe8, 0xce, 0xfa, 0xdd, 0xea, 0x95,
+ 0x21, 0x6e, 0xf5, 0x09, 0x43, 0xb8, 0x24, 0x5d, 0x09, 0xe4, 0xa4, 0xec, 0x55, 0x72, 0xe2, 0x2b,
+ 0x81, 0xf1, 0xe5, 0xa7, 0x8f, 0xf1, 0x17, 0xa8, 0x35, 0x17, 0x1e, 0x30, 0xfd, 0xd1, 0xb1, 0xa0,
+ 0xcc, 0xcd, 0xfe, 0x15, 0x71, 0xf6, 0x7f, 0x04, 0x6c, 0x47, 0xb5, 0x11, 0x87, 0x1d, 0x1c, 0x4d,
+ 0xdf, 0x46, 0x3c, 0xbe, 0x03, 0xa2, 0xdf, 0x9e, 0x83, 0x93, 0xac, 0x13, 0xf9, 0x8f, 0x00, 0x71,
+ 0xc2, 0x73, 0x78, 0x42, 0x27, 0x39, 0x04, 0xe5, 0x71, 0x2d, 0x48, 0x25, 0x59, 0xca, 0x94, 0x60,
+ 0x6f, 0x22, 0xab, 0x1b, 0x85, 0xca, 0xa3, 0x3d, 0xdd, 0xec, 0xc8, 0x87, 0xfb, 0x1d, 0x02, 0xbc,
+ 0xbf, 0xd6, 0xa8, 0x88, 0x6b, 0x8d, 0x03, 0x56, 0x26, 0x13, 0xef, 0x5c, 0x13, 0x91, 0x51, 0x76,
+ 0x27, 0xbe, 0x73, 0x1d, 0x5d, 0x76, 0xfa, 0x28, 0xbd, 0x47, 0x81, 0x5c, 0xc3, 0xb2, 0x5d, 0xf4,
+ 0xd2, 0x24, 0xad, 0x93, 0x4a, 0x3e, 0x04, 0xc9, 0x7f, 0x57, 0xcb, 0xc2, 0x1d, 0xcf, 0x77, 0xc5,
+ 0x1f, 0x75, 0xd6, 0x5d, 0x9d, 0x78, 0x75, 0x7b, 0xe5, 0x73, 0x97, 0x3d, 0x27, 0x8d, 0xa7, 0x43,
+ 0xe5, 0xd7, 0x88, 0x3e, 0x80, 0x91, 0x5a, 0x3c, 0x9d, 0xc8, 0x92, 0xd3, 0xc7, 0xed, 0x0d, 0x27,
+ 0x99, 0x6f, 0xeb, 0x8a, 0xd1, 0xc5, 0xe8, 0xa5, 0xd4, 0x65, 0xa4, 0xa6, 0xef, 0x61, 0xf9, 0x23,
+ 0x31, 0xb1, 0xae, 0xad, 0x24, 0xbe, 0xac, 0x12, 0xc6, 0x97, 0x4d, 0xda, 0xa0, 0xe8, 0x01, 0x74,
+ 0xca, 0xd2, 0xa4, 0x1b, 0x54, 0x4c, 0xd9, 0x13, 0x89, 0xd3, 0x79, 0xaa, 0x81, 0x5d, 0x6a, 0x54,
+ 0xd6, 0xfd, 0x1b, 0x58, 0xbe, 0x75, 0x2c, 0x11, 0x3b, 0x83, 0x0b, 0x5e, 0x94, 0xbe, 0x0b, 0x5e,
+ 0xde, 0xcf, 0x83, 0xb3, 0x21, 0x82, 0xf3, 0xcd, 0xd1, 0x02, 0x12, 0x99, 0x1c, 0x0b, 0x4c, 0x6f,
+ 0x0f, 0x60, 0xda, 0x14, 0x60, 0xba, 0x6f, 0x44, 0x2e, 0xd2, 0x07, 0xec, 0xfb, 0xf3, 0x70, 0x92,
+ 0x4e, 0xfa, 0x4b, 0x66, 0x87, 0x45, 0x58, 0x7d, 0x6b, 0xf6, 0x98, 0x37, 0xdb, 0x0e, 0x87, 0x60,
+ 0x15, 0x62, 0x39, 0xe7, 0xfb, 0xef, 0xd6, 0x5f, 0xa2, 0xe1, 0x5c, 0xbd, 0x4e, 0x94, 0xec, 0xb4,
+ 0xc9, 0xdf, 0xaf, 0x1f, 0xfc, 0x27, 0xde, 0x65, 0x34, 0x25, 0x7f, 0x97, 0xd1, 0x6f, 0x27, 0x5b,
+ 0xb7, 0x23, 0x45, 0xf7, 0x09, 0x3c, 0x65, 0xdb, 0x29, 0xc1, 0x8a, 0x9e, 0x04, 0x77, 0x5f, 0x1f,
+ 0xee, 0x64, 0x61, 0x04, 0x91, 0x11, 0xdd, 0xc9, 0x08, 0x81, 0xe3, 0x74, 0x27, 0x1b, 0xc6, 0xc0,
+ 0x04, 0x6e, 0xb5, 0xcf, 0xb3, 0xdd, 0x7c, 0xd2, 0x6e, 0xd0, 0x1f, 0x67, 0x53, 0x1f, 0xa5, 0xbf,
+ 0x96, 0x49, 0xe4, 0xff, 0x4c, 0xf8, 0x8a, 0x1f, 0xa6, 0x93, 0x78, 0x34, 0xc7, 0x91, 0x9b, 0xc0,
+ 0xba, 0x51, 0x96, 0xf8, 0xa2, 0x5f, 0x32, 0x3a, 0xee, 0xee, 0x98, 0x4e, 0x74, 0x5c, 0xf3, 0x68,
+ 0xf9, 0xd7, 0x23, 0x93, 0x17, 0xf4, 0x3f, 0x33, 0x89, 0x42, 0x48, 0x05, 0x22, 0x21, 0x6c, 0x45,
+ 0x88, 0x38, 0x41, 0xe0, 0xa7, 0x58, 0x7a, 0x13, 0xd4, 0xe8, 0x8b, 0x46, 0x07, 0x5b, 0x8f, 0x41,
+ 0x8d, 0x26, 0x7c, 0x8d, 0x4f, 0xa3, 0xe3, 0xc8, 0x7d, 0x9d, 0x6a, 0x74, 0x20, 0x92, 0x31, 0x69,
+ 0x74, 0x2c, 0xbd, 0xf4, 0x65, 0xfc, 0x9a, 0x39, 0x36, 0x91, 0x5a, 0x37, 0xcc, 0x2b, 0xe8, 0x9f,
+ 0x0a, 0xfe, 0xc5, 0xcc, 0x97, 0x0c, 0x77, 0x97, 0xc5, 0x82, 0xf9, 0xa0, 0xf4, 0xdd, 0x28, 0x23,
+ 0xc4, 0x7b, 0x11, 0xc3, 0x49, 0xe5, 0x0f, 0x85, 0x93, 0x2a, 0xc1, 0xbc, 0x61, 0xba, 0xd8, 0x36,
+ 0xf5, 0xee, 0x4a, 0x57, 0xdf, 0x71, 0xce, 0x4d, 0x0d, 0xbc, 0xbc, 0xae, 0xca, 0xe5, 0xd1, 0xc4,
+ 0x3f, 0xf8, 0xeb, 0x2b, 0xa7, 0xc5, 0xeb, 0x2b, 0x23, 0xa2, 0x5f, 0xcd, 0x44, 0x47, 0xbf, 0x0a,
+ 0xa2, 0x5b, 0xc1, 0xf0, 0xe0, 0xd8, 0xb2, 0xb6, 0x71, 0xc2, 0x70, 0x7f, 0x77, 0x49, 0x46, 0x61,
+ 0x0b, 0x42, 0x3f, 0xfe, 0xa4, 0x92, 0x68, 0x75, 0xcf, 0x53, 0x84, 0xc5, 0x7e, 0x25, 0x48, 0x6c,
+ 0xa1, 0xf2, 0x95, 0x57, 0xfa, 0x2a, 0x1f, 0x98, 0x3c, 0x39, 0x09, 0x93, 0x87, 0x57, 0xaa, 0xbc,
+ 0x9c, 0x52, 0x25, 0x59, 0x2c, 0x94, 0xa9, 0xed, 0x04, 0x4e, 0x23, 0xe5, 0xe1, 0x94, 0x1f, 0xed,
+ 0xb6, 0xd7, 0xc3, 0xba, 0xad, 0x9b, 0x6d, 0x8c, 0x3e, 0x96, 0x1d, 0x87, 0xd9, 0xbb, 0x02, 0xd3,
+ 0x46, 0xdb, 0x32, 0x1b, 0xc6, 0x0b, 0xfc, 0xcb, 0xe5, 0xe2, 0x83, 0xac, 0x13, 0x89, 0x54, 0xd9,
+ 0x1f, 0x5a, 0xf0, 0xaf, 0x5a, 0x85, 0x99, 0xb6, 0x6e, 0x77, 0x68, 0x10, 0xbe, 0x7c, 0xdf, 0x45,
+ 0x4e, 0x91, 0x84, 0xca, 0xfe, 0x2f, 0x5a, 0xf8, 0xb7, 0x5a, 0x17, 0x85, 0x58, 0xe8, 0x8b, 0xe6,
+ 0x11, 0x49, 0x6c, 0x39, 0xfc, 0x49, 0x90, 0xb9, 0x27, 0x1d, 0x1b, 0x77, 0xc9, 0x1d, 0xf4, 0xb4,
+ 0x87, 0x98, 0xd1, 0xc2, 0x84, 0xa4, 0xcb, 0x03, 0xa4, 0xa8, 0x43, 0x68, 0x4c, 0x7a, 0x79, 0x40,
+ 0x8a, 0x8b, 0xf4, 0x35, 0xf3, 0x9d, 0x05, 0x98, 0xa7, 0xbd, 0x1a, 0x13, 0x27, 0x7a, 0x19, 0xb9,
+ 0x42, 0xda, 0x7d, 0x08, 0x1f, 0xa0, 0xc6, 0xd1, 0xc7, 0xe4, 0x22, 0x28, 0x57, 0x82, 0x80, 0x83,
+ 0xde, 0x63, 0xd2, 0x7d, 0x7b, 0x9f, 0xaf, 0x45, 0xca, 0xd3, 0xa4, 0xf7, 0xed, 0xe3, 0x8b, 0x4f,
+ 0x1f, 0x9f, 0x1f, 0x50, 0x40, 0x29, 0x75, 0x3a, 0xa8, 0x7d, 0x74, 0x28, 0x6e, 0x81, 0x59, 0xbf,
+ 0xcd, 0x84, 0x31, 0x20, 0xf9, 0xa4, 0xa4, 0x8b, 0xa0, 0x81, 0x6c, 0x4a, 0x9d, 0x89, 0xef, 0x2a,
+ 0xc4, 0x94, 0x9d, 0x3e, 0x28, 0x9f, 0x9d, 0x62, 0x8d, 0x66, 0xc9, 0xb2, 0xae, 0x90, 0xa3, 0x32,
+ 0x3f, 0xa3, 0x40, 0x7e, 0x05, 0xbb, 0xed, 0x5d, 0xe4, 0x8c, 0xa5, 0xcd, 0xec, 0xdb, 0x5d, 0xbf,
+ 0xcd, 0xec, 0xdb, 0xdd, 0x61, 0x41, 0x39, 0x93, 0x46, 0x7f, 0xf6, 0xd9, 0x5e, 0x24, 0x2c, 0x4f,
+ 0x3a, 0xfa, 0x73, 0x6c, 0xe9, 0x13, 0x38, 0x04, 0x97, 0x83, 0x85, 0x60, 0x05, 0x8c, 0x62, 0xf6,
+ 0x0b, 0x99, 0xc7, 0xdc, 0x7a, 0xe8, 0x10, 0xbb, 0x19, 0xfd, 0x7e, 0xb2, 0x10, 0x6b, 0x81, 0xcc,
+ 0xc5, 0x9a, 0xa7, 0xbc, 0x30, 0x99, 0x20, 0xf8, 0x9a, 0x1c, 0x83, 0x13, 0x58, 0x01, 0x50, 0x60,
+ 0x9a, 0x30, 0xb4, 0x6c, 0x5c, 0x25, 0xae, 0x87, 0xc2, 0x42, 0xe5, 0x0b, 0xc7, 0xb2, 0x50, 0x79,
+ 0x9f, 0xb8, 0x50, 0x29, 0x19, 0x31, 0xd9, 0x5f, 0xa7, 0x4c, 0xe8, 0x8b, 0xe3, 0xfd, 0x3f, 0xf6,
+ 0x65, 0xca, 0x04, 0xbe, 0x38, 0x43, 0xca, 0x9f, 0x80, 0xeb, 0xe1, 0xf3, 0x58, 0x67, 0xed, 0x6f,
+ 0xc8, 0xa2, 0xff, 0x71, 0x0a, 0x72, 0x17, 0xbd, 0x87, 0x7f, 0x0c, 0x6f, 0xd4, 0x7a, 0xf5, 0x18,
+ 0x82, 0x3b, 0x3c, 0x1b, 0x72, 0x1e, 0x7d, 0x36, 0xed, 0xb9, 0x43, 0x6e, 0x77, 0xd8, 0x63, 0x44,
+ 0x23, 0xff, 0xa9, 0x67, 0xa1, 0xe0, 0x58, 0xfb, 0x76, 0xdb, 0x33, 0xbf, 0x3d, 0x8d, 0x61, 0x6f,
+ 0x49, 0x83, 0x9a, 0x0a, 0xa4, 0x17, 0xc7, 0xe7, 0x72, 0xca, 0x5d, 0xb0, 0xa4, 0x08, 0x17, 0x2c,
+ 0x25, 0xd8, 0x7f, 0x90, 0xe0, 0x2d, 0x7d, 0x8d, 0xf8, 0x63, 0x72, 0xd7, 0x60, 0x67, 0x5c, 0xb0,
+ 0x47, 0x88, 0xe5, 0xa8, 0xea, 0x90, 0xd4, 0x61, 0x5c, 0x14, 0x6d, 0x10, 0x47, 0x7e, 0xa2, 0x0e,
+ 0xe3, 0x12, 0x3c, 0x4c, 0xe4, 0x94, 0x7b, 0x81, 0x39, 0xb9, 0x3e, 0x3c, 0x4e, 0x74, 0x73, 0x82,
+ 0xd2, 0x1f, 0x09, 0x9d, 0x31, 0x3a, 0xbf, 0x8e, 0x8c, 0xce, 0x31, 0xb9, 0xbf, 0xfe, 0x9a, 0x42,
+ 0x22, 0x69, 0xfa, 0x46, 0x90, 0xfc, 0x45, 0x49, 0x89, 0x21, 0xf2, 0xc6, 0x60, 0x21, 0x8e, 0xf4,
+ 0xfc, 0xe8, 0xa1, 0xc5, 0x45, 0xd1, 0x71, 0xfc, 0x4f, 0x3a, 0xb4, 0xb8, 0x2c, 0x23, 0xe9, 0x03,
+ 0xf9, 0x53, 0xf4, 0x62, 0xb2, 0x52, 0xdb, 0x35, 0xae, 0x8e, 0xb9, 0xa5, 0x89, 0xc3, 0x4b, 0xc2,
+ 0x68, 0xc2, 0x87, 0x24, 0x44, 0x39, 0x9c, 0x74, 0x34, 0x61, 0x39, 0x36, 0xd2, 0x87, 0xe9, 0x2f,
+ 0x0a, 0x9e, 0xf4, 0xd8, 0xda, 0xce, 0x4f, 0xb3, 0xd5, 0x04, 0x7c, 0x74, 0xb4, 0x2e, 0xc0, 0x1c,
+ 0xb7, 0x74, 0xe0, 0x5f, 0x78, 0x23, 0xa4, 0x25, 0x3d, 0x28, 0x1f, 0x88, 0x6c, 0xec, 0x0b, 0x0b,
+ 0x09, 0x16, 0x8c, 0x65, 0x98, 0x98, 0xc8, 0x7d, 0x72, 0xfe, 0x18, 0x36, 0x21, 0xac, 0x3e, 0xc8,
+ 0x63, 0x55, 0x17, 0xb1, 0xba, 0x47, 0x46, 0x4c, 0x72, 0x63, 0x9a, 0xd4, 0xbc, 0xf1, 0x1d, 0x01,
+ 0x5c, 0x9a, 0x00, 0xd7, 0xb3, 0x47, 0xe6, 0x23, 0x7d, 0xc4, 0x7e, 0x8c, 0x76, 0x87, 0x0d, 0x6a,
+ 0xb2, 0x8f, 0xa7, 0x3b, 0x64, 0xb3, 0x01, 0x45, 0x98, 0x0d, 0x24, 0xf4, 0xd7, 0x0f, 0xdd, 0x50,
+ 0x7d, 0xe6, 0x86, 0x41, 0x94, 0x1b, 0xb3, 0xbf, 0xfe, 0x50, 0x0e, 0xd2, 0x07, 0xe7, 0xef, 0x15,
+ 0x80, 0x55, 0xdb, 0xda, 0xef, 0xd5, 0xed, 0x0e, 0xb6, 0xd1, 0x9f, 0x86, 0x13, 0x80, 0x1f, 0x1c,
+ 0xc3, 0x04, 0x60, 0x13, 0x60, 0x27, 0x20, 0xce, 0x34, 0xfc, 0x29, 0x72, 0xe6, 0x7e, 0xc8, 0x94,
+ 0xc6, 0xd1, 0x10, 0xaf, 0xac, 0x7d, 0xae, 0x88, 0x71, 0x5c, 0x9f, 0x15, 0x92, 0x1b, 0xe7, 0x04,
+ 0xe0, 0x5d, 0x01, 0xd6, 0x4d, 0x01, 0xeb, 0xe7, 0x1c, 0x81, 0x93, 0xf4, 0x31, 0xff, 0x87, 0x29,
+ 0x98, 0xa5, 0xdb, 0x7d, 0x54, 0xa6, 0x7f, 0x1d, 0x82, 0xfe, 0xa3, 0x63, 0x00, 0x7d, 0x0b, 0xe6,
+ 0xac, 0x90, 0x3a, 0xed, 0x53, 0xf9, 0x05, 0x98, 0x58, 0xd8, 0x39, 0xbe, 0x34, 0x81, 0x0c, 0xfa,
+ 0x55, 0x1e, 0x79, 0x4d, 0x44, 0xfe, 0xbe, 0x18, 0x79, 0x73, 0x14, 0xc7, 0x09, 0xfd, 0xbb, 0x03,
+ 0xe8, 0xb7, 0x04, 0xe8, 0x4b, 0x47, 0x61, 0x65, 0x02, 0xe1, 0xfa, 0x15, 0xc8, 0x91, 0xd3, 0x75,
+ 0x3f, 0x9b, 0xe2, 0xfc, 0xfe, 0x1c, 0x4c, 0x91, 0x26, 0x1b, 0xcc, 0x3b, 0xfc, 0x57, 0xef, 0x8b,
+ 0xbe, 0xed, 0x62, 0x3b, 0x58, 0xb9, 0xf5, 0x5f, 0x3d, 0x1e, 0x7c, 0xaf, 0x66, 0xe7, 0x5c, 0x81,
+ 0x6e, 0x64, 0x06, 0x09, 0x23, 0x4f, 0x4a, 0x78, 0x89, 0x8f, 0xed, 0xbc, 0xdd, 0x28, 0x93, 0x92,
+ 0x21, 0x8c, 0xa4, 0x0f, 0xfc, 0xe7, 0x72, 0x70, 0x8e, 0xae, 0x2a, 0xad, 0xd8, 0xd6, 0x5e, 0xdf,
+ 0xed, 0x58, 0xc6, 0xd1, 0x75, 0xe1, 0x36, 0x58, 0x70, 0x05, 0x7f, 0x6e, 0xa6, 0x13, 0x7d, 0xa9,
+ 0xe8, 0x77, 0x78, 0x9f, 0x8c, 0xe7, 0x89, 0x48, 0x2e, 0xc5, 0x08, 0x30, 0x8a, 0xf7, 0xc4, 0x0b,
+ 0xf5, 0x92, 0x8c, 0x72, 0x8b, 0x54, 0xca, 0x48, 0x6b, 0x96, 0x81, 0x4e, 0xe5, 0x65, 0x74, 0xea,
+ 0x03, 0x81, 0x4e, 0xfd, 0x17, 0x41, 0xa7, 0x56, 0x8f, 0x2e, 0x92, 0x09, 0xac, 0x5c, 0x2c, 0x40,
+ 0x61, 0xc5, 0xe8, 0xba, 0xd8, 0x46, 0x5f, 0x60, 0xf3, 0xa8, 0xd7, 0xa5, 0xd8, 0xbd, 0x2c, 0x43,
+ 0x61, 0x9b, 0x94, 0xc6, 0x0c, 0xb2, 0x3b, 0xe5, 0xb0, 0xa1, 0x1c, 0x6a, 0xec, 0xdf, 0xa4, 0xb1,
+ 0xe3, 0xfa, 0xc8, 0x8c, 0x6d, 0x02, 0x96, 0x20, 0x76, 0xdc, 0x70, 0x16, 0x26, 0x72, 0x6d, 0x52,
+ 0x41, 0xc3, 0x7b, 0xde, 0x08, 0x72, 0x25, 0x3d, 0x84, 0x8b, 0xa0, 0x18, 0x1d, 0x87, 0x34, 0xbd,
+ 0x19, 0xcd, 0x7b, 0x4c, 0xea, 0xc9, 0xd2, 0x2f, 0x2a, 0xca, 0xf2, 0xa4, 0x3d, 0x59, 0xa4, 0xb8,
+ 0x48, 0x1f, 0xb3, 0xaf, 0x11, 0x37, 0xc6, 0x5e, 0x57, 0x6f, 0x63, 0x8f, 0xfb, 0xd4, 0x50, 0x5b,
+ 0x80, 0xac, 0xe1, 0x8f, 0xf8, 0x59, 0x83, 0x6f, 0xa7, 0xf9, 0x23, 0xb4, 0xd3, 0x51, 0x17, 0xb9,
+ 0x02, 0x99, 0x93, 0x8a, 0x1f, 0xdb, 0x22, 0x57, 0x2c, 0x1b, 0x13, 0xb8, 0x14, 0xd3, 0x3f, 0xe6,
+ 0x39, 0xd1, 0xd6, 0x3a, 0xea, 0x16, 0x00, 0x13, 0xd6, 0xd8, 0x8e, 0x74, 0x8e, 0xb2, 0x05, 0x10,
+ 0xcd, 0xc3, 0x04, 0xd0, 0x5a, 0x60, 0x68, 0x7d, 0x86, 0x0d, 0xa3, 0x29, 0xef, 0xc2, 0x39, 0x96,
+ 0xed, 0x26, 0xdb, 0x85, 0xf3, 0xb8, 0xd3, 0xc8, 0x7f, 0x49, 0x8f, 0x05, 0x89, 0xa7, 0x7e, 0xc7,
+ 0x35, 0x7c, 0x26, 0x38, 0x16, 0x34, 0x8c, 0x81, 0xf4, 0xe1, 0x7d, 0xdb, 0x31, 0x0d, 0x9e, 0xa3,
+ 0x36, 0x47, 0xd6, 0x06, 0xc6, 0x36, 0x74, 0x8e, 0xd2, 0x1c, 0xa3, 0x79, 0x48, 0x1f, 0xaf, 0xbf,
+ 0xe3, 0x06, 0xce, 0xb7, 0x4c, 0x70, 0xe0, 0xf4, 0x5b, 0x66, 0x7e, 0xc4, 0x96, 0x39, 0xea, 0xee,
+ 0x02, 0x93, 0xf5, 0xf8, 0x06, 0xcc, 0x51, 0x76, 0x17, 0x62, 0x98, 0x48, 0x1f, 0xf1, 0xb7, 0x2a,
+ 0x90, 0x6f, 0x4c, 0x7e, 0xbc, 0x1c, 0x75, 0x2e, 0x42, 0x64, 0xd5, 0x18, 0xdb, 0x70, 0x39, 0xca,
+ 0x5c, 0x24, 0x92, 0x85, 0x09, 0x84, 0x85, 0x3f, 0x09, 0x73, 0x64, 0xc2, 0xed, 0x6f, 0xe2, 0xfd,
+ 0x1d, 0x1b, 0x35, 0xdf, 0x94, 0x62, 0x5b, 0x7d, 0x10, 0xa6, 0xfd, 0xdd, 0x21, 0x36, 0x72, 0x2e,
+ 0xca, 0xb5, 0x4f, 0x9f, 0x4b, 0x2d, 0xf8, 0xff, 0x48, 0x5b, 0xed, 0x63, 0xdf, 0x09, 0x1c, 0x75,
+ 0xab, 0xfd, 0x58, 0x77, 0x03, 0x7f, 0x3b, 0x1c, 0x51, 0xff, 0x6b, 0x7a, 0x98, 0xf7, 0xef, 0x12,
+ 0xe6, 0x06, 0xec, 0x12, 0x7e, 0x8c, 0xc7, 0xb2, 0x21, 0x62, 0x79, 0xbf, 0xac, 0x08, 0xc7, 0x38,
+ 0xd6, 0xbe, 0x27, 0x80, 0xf3, 0xa2, 0x00, 0xe7, 0xd2, 0x91, 0x78, 0x99, 0xc0, 0xb1, 0xbc, 0x5c,
+ 0x38, 0xe6, 0x7e, 0x3c, 0xc5, 0x76, 0xdc, 0xe7, 0xf3, 0x9f, 0x3b, 0xe4, 0xf3, 0x2f, 0xb4, 0xf4,
+ 0xfc, 0x11, 0x5b, 0xfa, 0xc7, 0x79, 0xed, 0x68, 0x8a, 0xda, 0xf1, 0x6c, 0x79, 0x44, 0xc6, 0x37,
+ 0x32, 0xbf, 0x37, 0x50, 0x8f, 0x4b, 0x82, 0x7a, 0x94, 0x8f, 0xc6, 0x4c, 0xfa, 0xfa, 0xf1, 0xeb,
+ 0xfe, 0x84, 0xf6, 0x98, 0xdb, 0xfb, 0xa8, 0x1b, 0x91, 0x82, 0x10, 0xc7, 0x36, 0x72, 0x8f, 0xb2,
+ 0x11, 0x39, 0x8c, 0x93, 0x09, 0x44, 0x0a, 0x9b, 0x87, 0x59, 0xc2, 0xd3, 0x25, 0xa3, 0xb3, 0x83,
+ 0x5d, 0xf4, 0x93, 0xd4, 0x03, 0xce, 0x8f, 0xcb, 0x38, 0xa6, 0xe0, 0x39, 0x51, 0xa7, 0x31, 0x93,
+ 0xfa, 0x0b, 0x50, 0x26, 0x17, 0x39, 0x06, 0x27, 0x1d, 0xdf, 0x6f, 0x28, 0x07, 0xe9, 0x43, 0xf6,
+ 0xab, 0xd4, 0x99, 0x63, 0x5d, 0x3f, 0xb0, 0xf6, 0x5d, 0xf4, 0xe2, 0x31, 0x74, 0xd0, 0x4b, 0x50,
+ 0xe8, 0x12, 0x6a, 0xcc, 0xe9, 0x3f, 0x7e, 0xba, 0xc3, 0x44, 0x40, 0xcb, 0xd7, 0xd8, 0x9f, 0x49,
+ 0x3d, 0xff, 0x43, 0x39, 0x52, 0x3a, 0x93, 0xf6, 0xfc, 0x1f, 0x52, 0xfe, 0x44, 0x6e, 0x80, 0x99,
+ 0xf6, 0x4a, 0x37, 0xf6, 0x0c, 0x77, 0x4c, 0xf1, 0x05, 0xba, 0x1e, 0x2d, 0x3f, 0xbe, 0x00, 0x79,
+ 0x49, 0x7a, 0x9e, 0x91, 0x93, 0x8a, 0xf7, 0xfb, 0xa4, 0xcf, 0x33, 0xc6, 0x17, 0x9f, 0x3e, 0x26,
+ 0x3f, 0x4c, 0x5b, 0xd6, 0x45, 0xea, 0xda, 0x99, 0xa2, 0xd7, 0xe8, 0xc8, 0x8d, 0x85, 0xb2, 0x76,
+ 0x7c, 0x8d, 0x65, 0x60, 0xf9, 0xe9, 0x03, 0xf3, 0x33, 0xdf, 0x08, 0xf9, 0x65, 0x7c, 0x79, 0x7f,
+ 0x07, 0xdd, 0x07, 0xd3, 0x4d, 0x1b, 0xe3, 0xaa, 0xb9, 0x6d, 0x79, 0xd2, 0x75, 0xbd, 0x67, 0x1f,
+ 0x12, 0xf6, 0xe6, 0xe1, 0xb1, 0x8b, 0xf5, 0x4e, 0x78, 0xba, 0xc9, 0x7f, 0x45, 0xaf, 0xce, 0x42,
+ 0xae, 0xe1, 0xea, 0x2e, 0x9a, 0x09, 0xb0, 0x45, 0x2f, 0xe6, 0xb1, 0xb8, 0x4f, 0xc4, 0xe2, 0x36,
+ 0x41, 0x16, 0x84, 0x83, 0x45, 0xef, 0xff, 0x08, 0x00, 0x10, 0x4c, 0x3f, 0xe2, 0x58, 0xa6, 0x97,
+ 0xc3, 0x3f, 0x80, 0xe7, 0xbf, 0xa3, 0xd7, 0x06, 0xe2, 0x7e, 0x40, 0x10, 0xf7, 0x93, 0xe4, 0x8a,
+ 0x98, 0xc0, 0x4a, 0x5b, 0x16, 0x66, 0x3c, 0xd1, 0xae, 0x61, 0xbd, 0xe3, 0xa0, 0x6f, 0x08, 0x95,
+ 0x3f, 0x42, 0xcc, 0xe8, 0x43, 0xd2, 0xa1, 0x22, 0x69, 0xad, 0x02, 0xe2, 0xd1, 0xfe, 0x02, 0x7e,
+ 0xa8, 0x8c, 0xac, 0x18, 0x2a, 0xe3, 0x2e, 0xc8, 0x19, 0xe6, 0xb6, 0xc5, 0xbc, 0xd7, 0x6e, 0x8c,
+ 0xa0, 0xed, 0xe9, 0x84, 0x46, 0x32, 0x4a, 0xc6, 0x91, 0x8c, 0x67, 0x6b, 0x22, 0x57, 0xb2, 0xe5,
+ 0xbc, 0xd2, 0xd1, 0xff, 0x31, 0x54, 0xd8, 0xaa, 0x0a, 0xb9, 0x9e, 0xee, 0xee, 0xb2, 0xa2, 0xc9,
+ 0xb3, 0x67, 0x23, 0xef, 0x9b, 0xba, 0x69, 0x99, 0x07, 0x7b, 0xc6, 0x0b, 0x82, 0x9b, 0x5f, 0x85,
+ 0x34, 0x8f, 0xf3, 0x1d, 0x6c, 0x62, 0x5b, 0x77, 0x71, 0xe3, 0xea, 0x0e, 0x99, 0x63, 0x4d, 0x6b,
+ 0x7c, 0x52, 0x62, 0xfd, 0xf7, 0x38, 0x8e, 0xd6, 0xff, 0x6d, 0xa3, 0x8b, 0x49, 0x1c, 0x21, 0xa6,
+ 0xff, 0xfe, 0x7b, 0x22, 0xfd, 0x1f, 0x50, 0x44, 0xfa, 0x68, 0xfc, 0x6b, 0x16, 0xe6, 0x1a, 0x9e,
+ 0xc2, 0x35, 0xf6, 0xf7, 0xf6, 0x74, 0xfb, 0x00, 0x3d, 0x3e, 0x44, 0x85, 0x53, 0xcd, 0x8c, 0xa0,
+ 0x9a, 0xe8, 0xd7, 0xa4, 0x2f, 0x3d, 0x66, 0x4d, 0x9b, 0x2b, 0x21, 0x71, 0x3b, 0x78, 0x2a, 0xe4,
+ 0x3d, 0xf5, 0xf6, 0xfd, 0xf9, 0x62, 0x1b, 0x02, 0xcd, 0x29, 0x19, 0x6f, 0x69, 0x28, 0x6f, 0x13,
+ 0x88, 0xf5, 0x90, 0x85, 0x93, 0x0d, 0x57, 0x6f, 0x5f, 0x59, 0xb5, 0x6c, 0x6b, 0xdf, 0x35, 0x4c,
+ 0xec, 0xa0, 0xc7, 0x85, 0x08, 0xf8, 0xfa, 0x9f, 0x09, 0xf5, 0x1f, 0xfd, 0x7b, 0x46, 0x76, 0x14,
+ 0x0d, 0xba, 0x55, 0x9e, 0x7c, 0x44, 0xf8, 0x24, 0xb9, 0x71, 0x51, 0x86, 0x62, 0xfa, 0x42, 0x7b,
+ 0x8b, 0x02, 0xc5, 0xca, 0xa3, 0x3d, 0xcb, 0x76, 0xd7, 0xad, 0xb6, 0xde, 0x75, 0x5c, 0xcb, 0xc6,
+ 0xa8, 0x1e, 0x2b, 0x35, 0xaf, 0x87, 0xe9, 0x58, 0xed, 0x70, 0x70, 0x64, 0x6f, 0xbc, 0xda, 0x29,
+ 0xa2, 0x8e, 0xff, 0xaa, 0xf4, 0x2e, 0x23, 0x95, 0x4a, 0x3f, 0x47, 0x11, 0x7a, 0x3e, 0xa8, 0x4b,
+ 0x4b, 0xe6, 0x8a, 0x2f, 0xb7, 0xf3, 0x28, 0xc5, 0xd4, 0x04, 0x96, 0xca, 0xb3, 0x30, 0xdf, 0xd8,
+ 0xbf, 0x1c, 0x10, 0x71, 0x78, 0x23, 0xe4, 0xf5, 0xd2, 0x31, 0x12, 0x98, 0xe2, 0xf1, 0x84, 0x22,
+ 0xe4, 0x7b, 0x2b, 0xcc, 0x3b, 0x7c, 0x36, 0x86, 0xb7, 0x98, 0x28, 0x19, 0x1b, 0x61, 0x78, 0xa9,
+ 0xe9, 0x0b, 0xf0, 0xbd, 0x59, 0x98, 0xaf, 0xf7, 0xb0, 0x89, 0x3b, 0xd4, 0xc7, 0x4e, 0x10, 0xe0,
+ 0xab, 0x13, 0x0a, 0x50, 0x20, 0x14, 0x21, 0xc0, 0xd0, 0x1f, 0x76, 0xd9, 0x17, 0x5e, 0x98, 0x90,
+ 0x48, 0x70, 0x71, 0xa5, 0xa5, 0x2f, 0xb8, 0xcf, 0x67, 0x61, 0x56, 0xdb, 0x37, 0x37, 0x6d, 0xcb,
+ 0x1b, 0x8d, 0x6d, 0x74, 0x7f, 0xd8, 0x41, 0xdc, 0x09, 0xa7, 0x3a, 0xfb, 0x36, 0x59, 0x7f, 0xaa,
+ 0x9a, 0x0d, 0xdc, 0xb6, 0xcc, 0x8e, 0x43, 0xea, 0x91, 0xd7, 0x0e, 0x7f, 0xb8, 0x37, 0xf7, 0xd2,
+ 0xbf, 0x54, 0x32, 0xe8, 0x65, 0xd2, 0x81, 0x58, 0x68, 0xe5, 0xb9, 0xa2, 0xe5, 0x7b, 0x02, 0xc9,
+ 0x70, 0x2b, 0xc3, 0x4a, 0x48, 0x5f, 0xb8, 0x9f, 0xc9, 0x82, 0x5a, 0x6a, 0xb7, 0xad, 0x7d, 0xd3,
+ 0x6d, 0xe0, 0x2e, 0x6e, 0xbb, 0x4d, 0x5b, 0x6f, 0x63, 0xde, 0x7e, 0x2e, 0x82, 0xd2, 0x31, 0x6c,
+ 0xd6, 0x07, 0x7b, 0x8f, 0x4c, 0x8e, 0xaf, 0x96, 0xde, 0x71, 0xa4, 0xb5, 0x3c, 0x5c, 0x4a, 0x02,
+ 0x71, 0xca, 0xed, 0x2b, 0x4a, 0x16, 0x94, 0xbe, 0x54, 0x3f, 0x9e, 0x85, 0x19, 0xbf, 0xc7, 0xde,
+ 0x91, 0x11, 0xe6, 0x0f, 0x27, 0x9c, 0x8c, 0x04, 0xc4, 0x13, 0xc8, 0xf0, 0x9d, 0x09, 0x66, 0x15,
+ 0x51, 0xf4, 0x93, 0x89, 0xae, 0x94, 0x5c, 0x74, 0xde, 0x6b, 0xad, 0xde, 0x5a, 0xa9, 0xaf, 0x2f,
+ 0x57, 0xb4, 0xa2, 0x82, 0xbe, 0x90, 0x85, 0xdc, 0xa6, 0x61, 0xee, 0xf0, 0xf1, 0xb2, 0x4e, 0x7b,
+ 0x76, 0x64, 0x07, 0x3f, 0xca, 0x5a, 0x3a, 0x7d, 0x51, 0xef, 0x86, 0xd3, 0xe6, 0xfe, 0xde, 0x65,
+ 0x6c, 0xd7, 0xb7, 0xc9, 0x28, 0xeb, 0x34, 0xad, 0x06, 0x36, 0xa9, 0x11, 0x9a, 0xd7, 0x06, 0x7e,
+ 0x13, 0x4d, 0x30, 0x89, 0xc9, 0x83, 0xc7, 0x49, 0x84, 0xc4, 0x03, 0xa6, 0xb2, 0x1c, 0x53, 0x89,
+ 0xa6, 0x0d, 0x03, 0x88, 0xa7, 0xaf, 0xa9, 0xbf, 0x91, 0x87, 0x33, 0x25, 0xf3, 0x80, 0xd8, 0x14,
+ 0xb4, 0x83, 0x2f, 0xef, 0xea, 0xe6, 0x0e, 0x26, 0x03, 0x44, 0x20, 0x71, 0x3e, 0x80, 0x7c, 0x46,
+ 0x0c, 0x20, 0xaf, 0x6a, 0x30, 0x65, 0xd9, 0x1d, 0x6c, 0x2f, 0x1d, 0x10, 0x9e, 0xfa, 0x97, 0x9d,
+ 0x59, 0x9b, 0x1c, 0x54, 0xc4, 0x22, 0x23, 0xbf, 0x58, 0xa7, 0xff, 0x6b, 0x3e, 0xa1, 0x0b, 0x77,
+ 0xc2, 0x14, 0x4b, 0x53, 0xe7, 0x60, 0xba, 0xae, 0x2d, 0x57, 0xb4, 0x56, 0x75, 0xb9, 0x78, 0x42,
+ 0xbd, 0x0e, 0x4e, 0x56, 0x9b, 0x15, 0xad, 0xd4, 0xac, 0xd6, 0x6b, 0x2d, 0x92, 0x5e, 0xcc, 0xa0,
+ 0x97, 0xe4, 0x64, 0x3d, 0x7b, 0xe3, 0x99, 0x19, 0x04, 0xab, 0x06, 0x53, 0x6d, 0x9a, 0x81, 0x0c,
+ 0xa1, 0xb3, 0x89, 0x6a, 0xc7, 0x08, 0xd2, 0x04, 0xcd, 0x27, 0xa4, 0x9e, 0x07, 0xb8, 0x66, 0x5b,
+ 0xe6, 0x4e, 0x78, 0xa6, 0x6d, 0x5a, 0xe3, 0x52, 0xd0, 0x8b, 0x33, 0x50, 0xa0, 0xff, 0x90, 0x0b,
+ 0x33, 0xc8, 0x53, 0x28, 0x78, 0xff, 0xdd, 0xb3, 0x78, 0x89, 0xbc, 0xc2, 0x89, 0x16, 0x7b, 0xf5,
+ 0x74, 0x91, 0xca, 0x80, 0x5a, 0xc2, 0xac, 0x2a, 0x77, 0x41, 0x81, 0xfe, 0xcb, 0xbc, 0x0e, 0xa2,
+ 0x83, 0x5f, 0xd2, 0x6c, 0x92, 0x7e, 0xca, 0xf2, 0x32, 0x4d, 0x5f, 0x9b, 0x3f, 0x9c, 0x85, 0xe9,
+ 0x1a, 0x76, 0xcb, 0xbb, 0xb8, 0x7d, 0x05, 0x3d, 0x51, 0x5c, 0x00, 0xed, 0x1a, 0xd8, 0x74, 0x1f,
+ 0xde, 0xeb, 0x06, 0x0b, 0xa0, 0x7e, 0x02, 0xfa, 0x6e, 0xbe, 0xf3, 0x7d, 0x8e, 0xa8, 0x3f, 0x77,
+ 0x0c, 0xa8, 0xab, 0x5f, 0x42, 0x84, 0xca, 0x9c, 0x85, 0x82, 0x8d, 0x9d, 0xfd, 0xae, 0xbf, 0x88,
+ 0xc6, 0xde, 0xd0, 0x1b, 0x02, 0x71, 0x96, 0x05, 0x71, 0xde, 0x25, 0x5f, 0xc4, 0x04, 0xa2, 0x69,
+ 0xe6, 0x60, 0xaa, 0x6a, 0x1a, 0xae, 0xa1, 0x77, 0xd1, 0xcb, 0x72, 0x30, 0xdf, 0xc0, 0xee, 0xa6,
+ 0x6e, 0xeb, 0x7b, 0xd8, 0xc5, 0xb6, 0x83, 0xbe, 0x2a, 0xf6, 0x09, 0xbd, 0xae, 0xee, 0x6e, 0x5b,
+ 0xf6, 0x9e, 0xaf, 0x9a, 0xfe, 0xbb, 0xa7, 0x9a, 0x57, 0xb1, 0xed, 0x84, 0x7c, 0xf9, 0xaf, 0xde,
+ 0x97, 0x6b, 0x96, 0x7d, 0xc5, 0x1b, 0x04, 0xd9, 0x34, 0x8d, 0xbd, 0x7a, 0xf4, 0xba, 0xd6, 0xce,
+ 0x3a, 0xbe, 0x8a, 0xfd, 0x60, 0x5d, 0xc1, 0xbb, 0x37, 0x17, 0xe8, 0x58, 0x35, 0xcb, 0xf5, 0x3a,
+ 0xed, 0x75, 0x6b, 0x87, 0x46, 0x33, 0x9d, 0xd6, 0xc4, 0xc4, 0x30, 0x97, 0x7e, 0x15, 0x93, 0x5c,
+ 0x05, 0x3e, 0x17, 0x4b, 0x54, 0x17, 0x41, 0x0d, 0x7e, 0x6b, 0xe2, 0x2e, 0xde, 0xc3, 0xae, 0x7d,
+ 0x40, 0x2e, 0x2d, 0x98, 0xd6, 0x06, 0x7c, 0x61, 0x03, 0xb4, 0xfc, 0x64, 0x9d, 0x49, 0x6f, 0x51,
+ 0x90, 0xdc, 0x91, 0x26, 0xeb, 0x32, 0x14, 0x27, 0x72, 0x29, 0x93, 0xe2, 0x59, 0x33, 0x3f, 0xae,
+ 0x40, 0x8e, 0x0c, 0x9e, 0x6f, 0xcd, 0x08, 0x2b, 0x4c, 0x7b, 0xd8, 0x71, 0xf4, 0x1d, 0xec, 0xaf,
+ 0x30, 0xb1, 0x57, 0xf5, 0x1e, 0xc8, 0x77, 0x09, 0xa6, 0x74, 0x70, 0x78, 0xbc, 0x50, 0x33, 0xcf,
+ 0xc0, 0xf0, 0x68, 0x05, 0x23, 0x01, 0x81, 0x5b, 0xa3, 0x7f, 0x5c, 0x78, 0x10, 0xf2, 0x14, 0xfe,
+ 0x19, 0xc8, 0x2f, 0x57, 0x96, 0xb6, 0x56, 0x8b, 0x27, 0xbc, 0x47, 0x9f, 0xbf, 0x19, 0xc8, 0xaf,
+ 0x94, 0x9a, 0xa5, 0xf5, 0x62, 0xd6, 0xab, 0x47, 0xb5, 0xb6, 0x52, 0x2f, 0x2a, 0x5e, 0xe2, 0x66,
+ 0xa9, 0x56, 0x2d, 0x17, 0x73, 0xea, 0x2c, 0x4c, 0x5d, 0x2a, 0x69, 0xb5, 0x6a, 0x6d, 0xb5, 0x98,
+ 0x47, 0x7f, 0xc1, 0xe3, 0x77, 0xaf, 0x88, 0xdf, 0xad, 0x51, 0x3c, 0x0d, 0x82, 0xec, 0x27, 0x02,
+ 0xc8, 0xee, 0x17, 0x20, 0xfb, 0x46, 0x19, 0x22, 0x13, 0x70, 0x67, 0x2a, 0xc0, 0xd4, 0xa6, 0x6d,
+ 0xb5, 0xb1, 0xe3, 0xa0, 0x1f, 0xc9, 0x42, 0xa1, 0xac, 0x9b, 0x6d, 0xdc, 0x45, 0x37, 0x84, 0x50,
+ 0x51, 0x57, 0xd1, 0x8c, 0xef, 0x2a, 0x8a, 0xfe, 0x3e, 0x23, 0xdb, 0xfb, 0x31, 0xba, 0x8b, 0x94,
+ 0x66, 0x84, 0x7c, 0xe4, 0x7a, 0xb9, 0x58, 0x52, 0x13, 0xb8, 0xb8, 0x25, 0x0b, 0x33, 0x6c, 0x35,
+ 0xe0, 0x32, 0xe6, 0xe7, 0xe1, 0x5f, 0xcd, 0xc8, 0x4e, 0x0e, 0xfd, 0x1a, 0x04, 0x64, 0x22, 0xe4,
+ 0x21, 0x37, 0x11, 0x1c, 0x46, 0x6d, 0x02, 0x9b, 0x87, 0x59, 0x98, 0xdd, 0x32, 0x9d, 0x41, 0x42,
+ 0x91, 0x8f, 0xf2, 0xee, 0x57, 0x83, 0x23, 0x74, 0xa4, 0x28, 0xef, 0xc3, 0xe9, 0xa5, 0x2f, 0x98,
+ 0xaf, 0x66, 0xe0, 0xf4, 0x2a, 0x36, 0xb1, 0x6d, 0xb4, 0x69, 0x0d, 0x7c, 0x49, 0xdc, 0x2f, 0x4a,
+ 0xe2, 0x89, 0x02, 0xe7, 0x83, 0xfe, 0x10, 0x25, 0xf0, 0xba, 0x40, 0x02, 0xcf, 0x11, 0x24, 0x70,
+ 0xa7, 0x24, 0x9d, 0x09, 0xdc, 0xd6, 0x3d, 0x03, 0x73, 0x35, 0xcb, 0x35, 0xb6, 0x8d, 0x36, 0xf5,
+ 0x41, 0xfb, 0x31, 0x05, 0x72, 0xeb, 0x86, 0xe3, 0xa2, 0x52, 0xd8, 0x9d, 0xdc, 0x02, 0xb3, 0x86,
+ 0xd9, 0xee, 0xee, 0x77, 0xb0, 0x86, 0x75, 0xda, 0xaf, 0x4c, 0x6b, 0x7c, 0x52, 0xb8, 0xb5, 0xef,
+ 0xb1, 0xa5, 0xf8, 0x5b, 0xfb, 0xbf, 0x25, 0xbd, 0x0c, 0xc3, 0xb3, 0x40, 0xc2, 0x1d, 0x46, 0xd8,
+ 0x5d, 0x25, 0x98, 0x37, 0xb9, 0xac, 0xbe, 0xc1, 0xde, 0x1f, 0xee, 0x9e, 0x27, 0xa7, 0x89, 0x7f,
+ 0xa0, 0xf7, 0x4b, 0x35, 0xd6, 0x61, 0x0c, 0x25, 0x43, 0x66, 0x65, 0x84, 0x49, 0xb2, 0x0a, 0x0b,
+ 0xd5, 0x5a, 0xb3, 0xa2, 0xd5, 0x4a, 0xeb, 0x2c, 0x8b, 0x82, 0xfe, 0x35, 0x0b, 0x79, 0x0d, 0xf7,
+ 0xba, 0x07, 0x7c, 0x3c, 0x63, 0xe6, 0x28, 0x9e, 0x09, 0x1c, 0xc5, 0xd5, 0x15, 0x00, 0xbd, 0xed,
+ 0x15, 0x4c, 0x2e, 0x7c, 0xca, 0x0e, 0x8c, 0x92, 0x29, 0x54, 0xb0, 0x14, 0xe4, 0xd6, 0xb8, 0x3f,
+ 0xd1, 0xcb, 0xa5, 0x77, 0x8e, 0x04, 0x6a, 0x84, 0xc3, 0x88, 0x3e, 0xe1, 0x03, 0x52, 0x9b, 0x3d,
+ 0x43, 0xc9, 0x1d, 0x8f, 0xf8, 0xbf, 0x98, 0x85, 0x5c, 0xd3, 0xeb, 0x2d, 0xb9, 0x8e, 0xf3, 0x53,
+ 0xa3, 0xe9, 0xb8, 0x47, 0x26, 0x42, 0xc7, 0x1f, 0x80, 0x39, 0x5e, 0x63, 0x99, 0xab, 0x44, 0xac,
+ 0x8a, 0x0b, 0x3f, 0x8c, 0xa2, 0xe1, 0x03, 0xd8, 0x39, 0x1e, 0x11, 0x7f, 0xe2, 0x49, 0x00, 0x1b,
+ 0x78, 0xef, 0x32, 0xb6, 0x9d, 0x5d, 0xa3, 0x87, 0xfe, 0x4a, 0x81, 0x99, 0x55, 0xec, 0x36, 0x5c,
+ 0xdd, 0xdd, 0x77, 0xfa, 0xb6, 0x3b, 0x4d, 0xab, 0xac, 0xb7, 0x77, 0x31, 0xeb, 0x8e, 0xfc, 0x57,
+ 0xf4, 0x6e, 0x45, 0xd6, 0x9f, 0x28, 0x2c, 0x67, 0x31, 0x28, 0x23, 0x02, 0x93, 0x27, 0x43, 0xae,
+ 0xa3, 0xbb, 0x3a, 0xc3, 0xe2, 0x86, 0x3e, 0x2c, 0x42, 0x42, 0x1a, 0xc9, 0x86, 0x7e, 0x21, 0x2b,
+ 0xe3, 0x50, 0x24, 0x51, 0x7e, 0x32, 0x10, 0xde, 0x9f, 0x19, 0x01, 0x85, 0x53, 0x30, 0x5f, 0xab,
+ 0x37, 0x5b, 0xeb, 0xf5, 0xd5, 0xd5, 0x8a, 0x97, 0x5a, 0x54, 0xd4, 0xb3, 0xa0, 0x6e, 0x96, 0x1e,
+ 0xde, 0xa8, 0xd4, 0x9a, 0xad, 0x5a, 0x7d, 0xb9, 0xc2, 0xfe, 0xcc, 0xa9, 0x27, 0x61, 0xb6, 0x5c,
+ 0x2a, 0xaf, 0xf9, 0x09, 0x79, 0xf5, 0x1c, 0x9c, 0xde, 0xa8, 0x6c, 0x2c, 0x55, 0xb4, 0xc6, 0x5a,
+ 0x75, 0xb3, 0xe5, 0x91, 0x59, 0xa9, 0x6f, 0xd5, 0x96, 0x8b, 0x05, 0x15, 0xc1, 0x59, 0xee, 0xcb,
+ 0x25, 0xad, 0x5e, 0x5b, 0x6d, 0x35, 0x9a, 0xa5, 0x66, 0xa5, 0x38, 0xa5, 0x5e, 0x07, 0x27, 0xcb,
+ 0xa5, 0x1a, 0xc9, 0x5e, 0xae, 0xd7, 0x6a, 0x95, 0x72, 0xb3, 0x38, 0x8d, 0xfe, 0x3d, 0x07, 0xb3,
+ 0x55, 0xa7, 0xa6, 0xef, 0xe1, 0x8b, 0x7a, 0xd7, 0xe8, 0xa0, 0x97, 0x71, 0x33, 0x8f, 0x5b, 0x61,
+ 0xde, 0xa6, 0x8f, 0xb8, 0xd3, 0x34, 0x30, 0x45, 0x73, 0x5e, 0x13, 0x13, 0xbd, 0x39, 0xb9, 0x49,
+ 0x08, 0xf8, 0x73, 0x72, 0xfa, 0xa6, 0x2e, 0x01, 0xd0, 0xa7, 0x66, 0x78, 0xf5, 0xe8, 0x85, 0xfe,
+ 0xd6, 0xa4, 0xef, 0x61, 0x07, 0xdb, 0x57, 0x8d, 0x36, 0xf6, 0x73, 0x6a, 0xdc, 0x5f, 0xe8, 0x4b,
+ 0x8a, 0xec, 0xfe, 0x22, 0x07, 0x2a, 0x57, 0x9d, 0x88, 0xde, 0xf0, 0x7b, 0x14, 0x99, 0xdd, 0x41,
+ 0x29, 0x92, 0xc9, 0x34, 0xe5, 0x95, 0xd9, 0xd1, 0x96, 0x6d, 0x9b, 0xf5, 0x7a, 0xab, 0xb1, 0x56,
+ 0xd7, 0x9a, 0x45, 0x45, 0x9d, 0x83, 0x69, 0xef, 0x75, 0xbd, 0x5e, 0x5b, 0x2d, 0xe6, 0xd4, 0x33,
+ 0x70, 0x6a, 0xad, 0xd4, 0x68, 0x55, 0x6b, 0x17, 0x4b, 0xeb, 0xd5, 0xe5, 0x56, 0x79, 0xad, 0xa4,
+ 0x35, 0x8a, 0x79, 0xf5, 0x06, 0x38, 0xd3, 0xac, 0x56, 0xb4, 0xd6, 0x4a, 0xa5, 0xd4, 0xdc, 0xd2,
+ 0x2a, 0x8d, 0x56, 0xad, 0xde, 0xaa, 0x95, 0x36, 0x2a, 0xc5, 0x82, 0xd7, 0xfc, 0xc9, 0xa7, 0x50,
+ 0x6d, 0xa6, 0x0e, 0x2b, 0xe3, 0x74, 0x84, 0x32, 0xce, 0xf4, 0x2b, 0x23, 0xf0, 0x6a, 0xa5, 0x55,
+ 0x1a, 0x15, 0xed, 0x62, 0xa5, 0x38, 0x3b, 0x48, 0xd7, 0xe6, 0xd4, 0xd3, 0x50, 0xf4, 0x78, 0x68,
+ 0x55, 0x1b, 0x7e, 0xce, 0xe5, 0xe2, 0x3c, 0xfa, 0x78, 0x01, 0xce, 0x6a, 0x78, 0xc7, 0x70, 0x5c,
+ 0x6c, 0x6f, 0xea, 0x07, 0x7b, 0xd8, 0x74, 0xfd, 0x4e, 0xfe, 0x9f, 0x13, 0x2b, 0xe3, 0x06, 0xcc,
+ 0xf7, 0x28, 0x8d, 0x0d, 0xec, 0xee, 0x5a, 0x1d, 0x36, 0x0a, 0x3f, 0x31, 0xb2, 0xe7, 0x58, 0xdc,
+ 0xe4, 0xb3, 0x6b, 0xe2, 0xdf, 0x9c, 0x6e, 0x2b, 0x31, 0xba, 0x9d, 0x1b, 0x45, 0xb7, 0xd5, 0x9b,
+ 0x60, 0x66, 0xdf, 0xc1, 0x76, 0x65, 0x4f, 0x37, 0xba, 0xfe, 0xd5, 0x91, 0x41, 0x02, 0x7a, 0x47,
+ 0x4e, 0xf6, 0xc4, 0x0a, 0x57, 0x97, 0xc1, 0x62, 0x8c, 0xe8, 0x5b, 0xcf, 0x03, 0xb0, 0xca, 0x6e,
+ 0xd9, 0x5d, 0xa6, 0xac, 0x5c, 0x8a, 0xc7, 0xdf, 0x65, 0xa3, 0xdb, 0x35, 0xcc, 0x9d, 0x60, 0xdf,
+ 0x3f, 0x4c, 0x40, 0xaf, 0x54, 0x64, 0x4e, 0xb0, 0x24, 0xe5, 0x2d, 0x59, 0x6b, 0x7a, 0x79, 0x76,
+ 0xc2, 0xfd, 0xee, 0xe1, 0xa6, 0x53, 0x50, 0x8b, 0x30, 0x47, 0xd2, 0x58, 0x0b, 0x2c, 0x4e, 0x79,
+ 0x7d, 0xb0, 0x4f, 0x6e, 0xa3, 0xd2, 0x5c, 0xab, 0x2f, 0x07, 0xdf, 0xa6, 0x3d, 0x92, 0x1e, 0x33,
+ 0xa5, 0xda, 0xc3, 0xa4, 0x35, 0xce, 0xa8, 0x8f, 0x83, 0x1b, 0xb8, 0x0e, 0xbb, 0xb4, 0xae, 0x55,
+ 0x4a, 0xcb, 0x0f, 0xb7, 0x2a, 0xcf, 0xab, 0x36, 0x9a, 0x0d, 0xb1, 0x71, 0xf9, 0xed, 0x68, 0xd6,
+ 0xe3, 0xb7, 0xb2, 0x51, 0xaa, 0xae, 0xb3, 0xfe, 0x7d, 0xa5, 0xae, 0x6d, 0x94, 0x9a, 0xc5, 0x39,
+ 0xf4, 0xe3, 0x0a, 0x14, 0x57, 0xb1, 0xbb, 0x69, 0xd9, 0xae, 0xde, 0x5d, 0x37, 0xcc, 0x2b, 0x5b,
+ 0x76, 0x57, 0x98, 0x6c, 0x4a, 0x87, 0xe9, 0x10, 0x87, 0x48, 0x81, 0x60, 0xf4, 0x8e, 0x78, 0x8f,
+ 0x64, 0x0b, 0x95, 0x29, 0x4c, 0x40, 0x2f, 0xcc, 0xca, 0x2c, 0x77, 0xcb, 0x97, 0x9a, 0x4c, 0x4f,
+ 0x5e, 0x34, 0xe9, 0xf1, 0x79, 0x00, 0x6a, 0x05, 0xf4, 0xd2, 0x1c, 0x4c, 0xaf, 0x18, 0xa6, 0xde,
+ 0x35, 0x5e, 0x20, 0x44, 0xc7, 0x0c, 0xfb, 0x98, 0x4c, 0x4c, 0x1f, 0x93, 0x1d, 0x69, 0xfc, 0xfc,
+ 0x21, 0x45, 0x76, 0x79, 0x81, 0x93, 0xbd, 0xcf, 0x64, 0xc4, 0xe0, 0xf9, 0x91, 0xac, 0xcc, 0xf2,
+ 0xc2, 0x70, 0x7a, 0xc9, 0x30, 0xfc, 0xe4, 0x7f, 0x0c, 0x1b, 0xab, 0xaf, 0x7d, 0x4f, 0x0f, 0x52,
+ 0x85, 0x19, 0xf4, 0x7b, 0x0a, 0xa0, 0x55, 0xec, 0x5e, 0xc4, 0x76, 0x30, 0x15, 0x20, 0xbd, 0x3e,
+ 0xb3, 0xb7, 0xb9, 0x26, 0xfb, 0x56, 0x1e, 0xc0, 0x4b, 0x22, 0x80, 0xa5, 0x98, 0xc6, 0x13, 0x41,
+ 0x3a, 0xa2, 0xf1, 0x56, 0xa1, 0xe0, 0x90, 0xef, 0x4c, 0xcd, 0x9e, 0x1a, 0x3d, 0x5c, 0x12, 0x62,
+ 0x3c, 0x75, 0x4a, 0x58, 0x63, 0x04, 0xd0, 0xd7, 0x82, 0x49, 0xd0, 0xb7, 0x08, 0xda, 0xb1, 0x72,
+ 0x64, 0x66, 0x93, 0xe9, 0x8b, 0x9d, 0xae, 0xba, 0x0c, 0xb2, 0x6f, 0xd0, 0x47, 0xf2, 0x70, 0x7a,
+ 0x50, 0x75, 0xd0, 0x2f, 0x66, 0x84, 0x1d, 0x76, 0x4c, 0x86, 0xfc, 0x0c, 0xdb, 0x40, 0xf4, 0x5e,
+ 0xd4, 0xa7, 0xc3, 0x99, 0x60, 0x19, 0xae, 0x69, 0xd5, 0xf0, 0x35, 0xa7, 0x8b, 0x5d, 0x17, 0xdb,
+ 0xa4, 0x6a, 0xd3, 0xda, 0xe0, 0x8f, 0xea, 0x33, 0xe1, 0x7a, 0xc3, 0x74, 0x8c, 0x0e, 0xb6, 0x9b,
+ 0x46, 0xcf, 0x29, 0x99, 0x9d, 0xe6, 0xbe, 0x6b, 0xd9, 0x86, 0xce, 0x2e, 0x3a, 0x9c, 0xd6, 0xa2,
+ 0x3e, 0xab, 0x77, 0x40, 0xd1, 0x70, 0xea, 0xe6, 0x65, 0x4b, 0xb7, 0x3b, 0x86, 0xb9, 0xb3, 0x6e,
+ 0x38, 0x2e, 0xf3, 0x00, 0x3e, 0x94, 0x8e, 0xfe, 0x5a, 0x91, 0x3d, 0x4c, 0x37, 0x04, 0xd6, 0x88,
+ 0x0e, 0xe5, 0xbb, 0x15, 0x99, 0xe3, 0x71, 0xc9, 0x68, 0x27, 0x53, 0x96, 0x97, 0x4c, 0xda, 0x90,
+ 0x18, 0x3c, 0x82, 0x93, 0xae, 0x85, 0xa6, 0xfb, 0x86, 0xc0, 0xc5, 0x8a, 0x56, 0x5d, 0xa9, 0x56,
+ 0x3c, 0xb3, 0xe2, 0x0c, 0x9c, 0x0a, 0xbf, 0x2d, 0x3f, 0xdc, 0x6a, 0x54, 0x6a, 0xcd, 0xe2, 0xb4,
+ 0xd7, 0x4f, 0xd1, 0xe4, 0x95, 0x52, 0x75, 0xbd, 0xb2, 0xdc, 0x6a, 0xd6, 0xbd, 0x2f, 0xcb, 0xa3,
+ 0x99, 0x16, 0xe8, 0xc5, 0x39, 0x38, 0x49, 0x64, 0x7b, 0x40, 0xa4, 0xea, 0x09, 0xa5, 0xcf, 0xd7,
+ 0x36, 0x00, 0x68, 0x86, 0x8a, 0x17, 0xfd, 0xae, 0xf4, 0x3d, 0x8e, 0x1c, 0x84, 0x7d, 0x65, 0x44,
+ 0x68, 0xc6, 0x57, 0xb3, 0x32, 0x11, 0x2a, 0xa4, 0xc9, 0x26, 0x53, 0x8a, 0x7f, 0x99, 0xf4, 0x88,
+ 0x13, 0x0d, 0x3e, 0xb1, 0x32, 0xcb, 0xe4, 0xe7, 0xe7, 0x6d, 0x56, 0x35, 0xa2, 0x0e, 0x0b, 0x00,
+ 0x24, 0x85, 0x68, 0x10, 0xd5, 0x83, 0x81, 0xe3, 0x55, 0x94, 0x1e, 0x94, 0xca, 0xcd, 0xea, 0xc5,
+ 0x4a, 0x94, 0x1e, 0x7c, 0x5a, 0x81, 0xe9, 0x55, 0xec, 0x7a, 0x73, 0x2a, 0x07, 0x3d, 0x4b, 0x62,
+ 0xfd, 0xc7, 0x33, 0x63, 0xc8, 0xc5, 0xf7, 0xc1, 0x32, 0x00, 0x7d, 0x43, 0xdf, 0x35, 0x8a, 0x09,
+ 0xe2, 0x17, 0x1d, 0x31, 0x5e, 0x7d, 0x33, 0xe4, 0x5d, 0xef, 0x33, 0x5b, 0x86, 0xfe, 0x86, 0xc8,
+ 0xe1, 0xca, 0x23, 0xb2, 0xac, 0xbb, 0xba, 0x46, 0xf3, 0x73, 0xa3, 0x93, 0xa4, 0xed, 0x12, 0xc1,
+ 0xc8, 0x7f, 0x44, 0xfb, 0xf3, 0x2f, 0x14, 0x38, 0x43, 0xdb, 0x47, 0xa9, 0xd7, 0x6b, 0xb8, 0x96,
+ 0x8d, 0x35, 0xdc, 0xc6, 0x46, 0xcf, 0xed, 0x5b, 0xdf, 0xb3, 0x69, 0xaa, 0xbf, 0xd9, 0xcc, 0x5e,
+ 0xd1, 0x4f, 0x2b, 0xb2, 0x11, 0x7e, 0x0f, 0xb5, 0xc7, 0xbe, 0xf2, 0x22, 0x1a, 0xfb, 0xc7, 0xb2,
+ 0x32, 0x31, 0x7b, 0x13, 0x12, 0x4f, 0x06, 0xd4, 0xaf, 0x1c, 0x03, 0x50, 0xfe, 0xca, 0x8d, 0x56,
+ 0x29, 0x57, 0xaa, 0x9b, 0xde, 0x20, 0x70, 0x33, 0xdc, 0xb8, 0xb9, 0xa5, 0x95, 0xd7, 0x4a, 0x8d,
+ 0x4a, 0x4b, 0xab, 0xac, 0x56, 0x1b, 0x4d, 0xe6, 0x94, 0x45, 0xff, 0x9a, 0x52, 0x6f, 0x82, 0x73,
+ 0x8d, 0xad, 0xa5, 0x46, 0x59, 0xab, 0x6e, 0x92, 0x74, 0xad, 0x52, 0xab, 0x5c, 0x62, 0x5f, 0xa7,
+ 0xd1, 0x87, 0x8a, 0x30, 0xeb, 0x4d, 0x00, 0x1a, 0x74, 0x5e, 0x80, 0xfe, 0x36, 0x07, 0xb3, 0x1a,
+ 0x76, 0xac, 0xee, 0x55, 0x32, 0x47, 0x98, 0xd4, 0xd4, 0xe3, 0x2b, 0x8a, 0xec, 0xf9, 0x6d, 0x8e,
+ 0xd9, 0x45, 0x8e, 0xd1, 0xe8, 0x89, 0xa6, 0x7e, 0x55, 0x37, 0xba, 0xfa, 0x65, 0xd6, 0xd5, 0x4c,
+ 0x6b, 0x61, 0x82, 0xba, 0x08, 0xaa, 0x75, 0xcd, 0xc4, 0x76, 0xa3, 0x7d, 0xad, 0xe2, 0xee, 0x96,
+ 0x3a, 0x1d, 0x1b, 0x3b, 0x0e, 0x5b, 0xbd, 0x18, 0xf0, 0x45, 0xbd, 0x1d, 0x4e, 0x92, 0x54, 0x2e,
+ 0x33, 0x75, 0x90, 0xe9, 0x4f, 0x0e, 0x72, 0x96, 0xcc, 0x03, 0x3f, 0x67, 0x9e, 0xcb, 0x19, 0x26,
+ 0xf3, 0xc7, 0x25, 0x0a, 0xe2, 0x29, 0x9d, 0x5b, 0x60, 0xd6, 0xd4, 0xf7, 0x70, 0xe5, 0xd1, 0x9e,
+ 0x61, 0x63, 0x87, 0x38, 0xc6, 0x28, 0x1a, 0x9f, 0x84, 0x3e, 0x22, 0x75, 0xde, 0x5c, 0x4e, 0x62,
+ 0xc9, 0x74, 0x7f, 0x75, 0x04, 0xd5, 0x1f, 0xd0, 0xcf, 0x28, 0xe8, 0x43, 0x0a, 0xcc, 0x31, 0xa6,
+ 0x4a, 0xe6, 0x41, 0xb5, 0x83, 0x6e, 0x16, 0x8c, 0x5f, 0xdd, 0x4b, 0xf3, 0x8d, 0x5f, 0xf2, 0x82,
+ 0xbe, 0x57, 0x91, 0x75, 0x77, 0x1e, 0x50, 0x71, 0x52, 0x46, 0xb4, 0xe3, 0xe8, 0xb6, 0xb5, 0xcf,
+ 0x1c, 0x55, 0xa7, 0x35, 0xfa, 0x92, 0xe6, 0xa2, 0x1e, 0xfa, 0x65, 0x29, 0x67, 0x6a, 0xc9, 0x6a,
+ 0x1c, 0x13, 0x80, 0x9f, 0x50, 0x60, 0x81, 0x71, 0xd5, 0x60, 0xe7, 0x7c, 0xa4, 0x0e, 0xbc, 0x7d,
+ 0xbf, 0xb4, 0x21, 0x38, 0xa0, 0xfe, 0xac, 0xa4, 0xc7, 0x0c, 0x90, 0xbf, 0x2a, 0x15, 0x1c, 0x4d,
+ 0xba, 0x22, 0xc7, 0x04, 0xe5, 0x3b, 0x73, 0x30, 0xbb, 0xe5, 0x60, 0x9b, 0xf9, 0xed, 0xa3, 0x37,
+ 0xe4, 0x40, 0x59, 0xc5, 0xc2, 0x46, 0xea, 0x2b, 0xa4, 0x3d, 0x7c, 0xf9, 0xca, 0x72, 0x44, 0x3d,
+ 0x1b, 0x29, 0x02, 0xb6, 0xdb, 0x60, 0x81, 0x8a, 0xb4, 0xe4, 0xba, 0x9e, 0x91, 0xe8, 0x7b, 0xd3,
+ 0xf6, 0xa5, 0x8e, 0x63, 0xab, 0x88, 0x94, 0xe5, 0x65, 0x29, 0x7b, 0x3c, 0xad, 0xe3, 0x6d, 0x3a,
+ 0x9f, 0xcd, 0x69, 0x7d, 0xa9, 0xe4, 0x72, 0xfd, 0x1e, 0xa6, 0xe7, 0x57, 0xb8, 0xcc, 0x79, 0x92,
+ 0x79, 0xd0, 0x27, 0xf4, 0xb7, 0x52, 0xbe, 0xba, 0xf2, 0xd2, 0x49, 0xa6, 0x0b, 0xbd, 0xf1, 0x98,
+ 0x24, 0xa7, 0xa1, 0xe8, 0xe5, 0x20, 0xfb, 0x2f, 0x5a, 0xa5, 0x51, 0x5f, 0xbf, 0x58, 0x19, 0xbc,
+ 0x8c, 0x91, 0x47, 0x2f, 0x51, 0x60, 0x66, 0xc9, 0xb6, 0xf4, 0x4e, 0x5b, 0x77, 0x5c, 0xf4, 0xb5,
+ 0x2c, 0xcc, 0x6d, 0xea, 0x07, 0x5d, 0x4b, 0xef, 0x10, 0xff, 0xfe, 0xbe, 0xbe, 0xa0, 0x47, 0x3f,
+ 0xf9, 0x7d, 0x01, 0x7b, 0x15, 0x0f, 0x06, 0x06, 0x47, 0xf7, 0x32, 0x32, 0xd7, 0x35, 0x06, 0xdb,
+ 0x7c, 0xd9, 0x41, 0xc1, 0x4a, 0x7d, 0xbe, 0x16, 0x79, 0x9e, 0x22, 0x2c, 0xca, 0x0f, 0xc9, 0x85,
+ 0x1f, 0x95, 0x21, 0x79, 0x3c, 0xbb, 0xf2, 0x2f, 0x9d, 0x86, 0xc2, 0x32, 0x26, 0x56, 0xdc, 0x7f,
+ 0xcf, 0xc2, 0x54, 0x03, 0xbb, 0xc4, 0x82, 0xbb, 0x47, 0xf0, 0x14, 0xee, 0x90, 0x0c, 0xa1, 0x13,
+ 0xbb, 0xff, 0xee, 0x4d, 0xd6, 0xb9, 0xf3, 0xd6, 0xe4, 0x39, 0x81, 0x47, 0x22, 0x2d, 0x77, 0x91,
+ 0x95, 0x79, 0x24, 0x8f, 0xc4, 0x58, 0x52, 0xe9, 0xfb, 0x5a, 0xbd, 0x3b, 0xcb, 0x5c, 0xab, 0xb8,
+ 0x5e, 0xef, 0x27, 0x79, 0xfd, 0x8c, 0xf5, 0x36, 0x63, 0xcc, 0xc7, 0x38, 0x47, 0x3d, 0x0d, 0xa6,
+ 0xa8, 0xcc, 0xfd, 0xf9, 0x68, 0xbf, 0x9f, 0x02, 0x25, 0x41, 0xce, 0x5e, 0xfb, 0x39, 0x25, 0x5d,
+ 0xd4, 0xa2, 0x0b, 0x9f, 0x48, 0x0c, 0x82, 0xb9, 0x1a, 0x76, 0xaf, 0x59, 0xf6, 0x95, 0x86, 0xab,
+ 0xbb, 0x18, 0xfd, 0x4b, 0x16, 0x94, 0x06, 0x76, 0xf9, 0xe8, 0x27, 0x35, 0x38, 0x45, 0x2b, 0xc4,
+ 0x32, 0x92, 0xfe, 0x9b, 0x56, 0xe4, 0x96, 0x81, 0x42, 0xe0, 0xf2, 0x69, 0x87, 0x7f, 0x45, 0x3f,
+ 0x32, 0x30, 0xe8, 0x53, 0x76, 0xc0, 0xa4, 0x81, 0x49, 0x86, 0x67, 0xd0, 0x53, 0xb0, 0x08, 0x3d,
+ 0xfd, 0xb0, 0x94, 0x59, 0x2d, 0x47, 0xf3, 0x78, 0xba, 0x82, 0x77, 0x3e, 0x01, 0x72, 0xe5, 0x5d,
+ 0xdd, 0x45, 0xef, 0x52, 0x00, 0x4a, 0x9d, 0xce, 0x06, 0xf5, 0x01, 0xe7, 0x1d, 0xd2, 0x2e, 0xc0,
+ 0x5c, 0x7b, 0x57, 0x0f, 0x6f, 0xce, 0xa0, 0xfd, 0x81, 0x90, 0xa6, 0x3e, 0x3d, 0x74, 0x26, 0xa7,
+ 0x52, 0x45, 0x7d, 0x30, 0x79, 0x65, 0x30, 0xda, 0x81, 0xa3, 0xb9, 0x18, 0x0a, 0x33, 0xf6, 0x08,
+ 0x9d, 0xf7, 0xfb, 0x62, 0xc8, 0x5e, 0xf4, 0x1c, 0x8e, 0x91, 0x0e, 0x0e, 0xd8, 0x84, 0x09, 0x09,
+ 0x4f, 0x7a, 0xcb, 0x05, 0xf4, 0x88, 0xe7, 0x6b, 0x22, 0xa1, 0x6b, 0xd5, 0x4a, 0xc7, 0xf0, 0x45,
+ 0xcb, 0x02, 0x66, 0xa1, 0x97, 0x67, 0x92, 0xc1, 0x17, 0x2f, 0xb8, 0xe7, 0xc0, 0x3c, 0xee, 0x18,
+ 0x2e, 0xf6, 0x6b, 0xc9, 0x04, 0x18, 0x07, 0xb1, 0xf8, 0x03, 0x7a, 0x91, 0x74, 0xd0, 0x35, 0x22,
+ 0xd0, 0xc3, 0x35, 0x8a, 0x68, 0x7f, 0x72, 0x61, 0xd4, 0xe4, 0x68, 0xa6, 0x0f, 0xd6, 0x77, 0x29,
+ 0x70, 0xa6, 0x69, 0xed, 0xec, 0x74, 0xb1, 0x2f, 0x26, 0x4c, 0xbd, 0x33, 0x91, 0x3e, 0x4e, 0xb8,
+ 0xc8, 0x4e, 0x90, 0xf5, 0x88, 0x11, 0x1c, 0x25, 0xf3, 0x5e, 0xc4, 0x13, 0x53, 0xb1, 0xb3, 0x28,
+ 0x22, 0xae, 0x81, 0x7c, 0x46, 0xa0, 0x20, 0x17, 0xf0, 0x59, 0x9a, 0x6c, 0xfa, 0x40, 0x7c, 0x36,
+ 0x0b, 0xf3, 0xf4, 0x5e, 0x44, 0x5f, 0x41, 0x1f, 0x1a, 0x23, 0x00, 0xe8, 0x6b, 0x19, 0x59, 0x3f,
+ 0x5b, 0x22, 0x13, 0x81, 0x93, 0x08, 0x11, 0xcb, 0x05, 0x55, 0x19, 0x4a, 0x6e, 0x02, 0x37, 0x75,
+ 0xe6, 0x60, 0x76, 0x15, 0xfb, 0x2d, 0xcd, 0x41, 0xef, 0x4b, 0xd8, 0x13, 0x5d, 0x80, 0x39, 0x72,
+ 0x39, 0x58, 0x9d, 0x1d, 0x93, 0xa4, 0xab, 0x66, 0x42, 0x9a, 0x7a, 0x2b, 0xcc, 0x5f, 0xc6, 0xdb,
+ 0x96, 0x8d, 0xeb, 0xc2, 0x59, 0x4a, 0x31, 0x71, 0x70, 0x78, 0x3a, 0xf5, 0x76, 0x38, 0xc9, 0x1c,
+ 0xdd, 0x97, 0xbc, 0xb9, 0xbe, 0x6e, 0x1f, 0xb0, 0x83, 0x69, 0xfd, 0xc9, 0xe8, 0x2f, 0xf8, 0x06,
+ 0xb3, 0x24, 0xa2, 0x78, 0xe7, 0x61, 0xb1, 0x73, 0x95, 0x8e, 0x18, 0x9d, 0x9e, 0x01, 0xd3, 0x4c,
+ 0x47, 0x7c, 0x83, 0x2e, 0xae, 0x07, 0x0d, 0xf2, 0xaa, 0xcf, 0x80, 0x19, 0x4f, 0x44, 0xc4, 0x6e,
+ 0x60, 0x5d, 0xef, 0xb9, 0x01, 0x3f, 0x92, 0xef, 0x5a, 0x98, 0x15, 0xfd, 0x54, 0xa0, 0x33, 0x15,
+ 0x41, 0x67, 0x9e, 0x9a, 0x84, 0xf9, 0x89, 0xdc, 0x4f, 0x5e, 0xe4, 0xca, 0x5f, 0x3a, 0xa8, 0x76,
+ 0x1c, 0xb4, 0x91, 0x4c, 0x6b, 0xce, 0x03, 0x04, 0xcd, 0xcf, 0x0f, 0x9c, 0xc1, 0xa5, 0x88, 0xb1,
+ 0xf1, 0x63, 0x8f, 0x02, 0xf6, 0x8b, 0x83, 0xb0, 0x33, 0x5e, 0x40, 0x25, 0x8f, 0x10, 0xca, 0x70,
+ 0x92, 0x3e, 0x3a, 0x3f, 0x91, 0x83, 0x33, 0xc1, 0x09, 0xa7, 0x75, 0xdd, 0x09, 0x5b, 0xf6, 0xc3,
+ 0xc9, 0x20, 0x12, 0x8e, 0x94, 0x04, 0xcd, 0xf1, 0x34, 0xe4, 0x9d, 0xfd, 0xcb, 0x81, 0x23, 0x20,
+ 0x7d, 0x41, 0x6f, 0x56, 0x12, 0x8d, 0x55, 0x03, 0xf9, 0x1b, 0x73, 0x23, 0xbc, 0x13, 0x4e, 0x99,
+ 0xfb, 0x7b, 0x01, 0x16, 0xa4, 0xa7, 0x61, 0x3d, 0xcb, 0xe1, 0x0f, 0x62, 0x93, 0xcd, 0xc9, 0x37,
+ 0xd9, 0x04, 0x23, 0xa9, 0x4c, 0xa5, 0xd3, 0x57, 0x8f, 0x4f, 0xf6, 0x1d, 0x41, 0x2b, 0x27, 0x56,
+ 0x0a, 0x0a, 0x7f, 0x96, 0x87, 0xff, 0x9f, 0x32, 0x89, 0x7a, 0xde, 0xe1, 0x27, 0xd7, 0x12, 0xf4,
+ 0x84, 0xc7, 0x79, 0x6c, 0xed, 0x33, 0x59, 0x40, 0x8d, 0xd0, 0x21, 0x87, 0x81, 0xba, 0x69, 0xe3,
+ 0xab, 0x06, 0xbe, 0x26, 0xb8, 0x6f, 0xbd, 0x45, 0x3a, 0x0e, 0xb5, 0xa8, 0x2b, 0x87, 0x88, 0x46,
+ 0xaf, 0x8b, 0x0f, 0xc0, 0x45, 0x2e, 0xde, 0x74, 0xb2, 0x12, 0xd3, 0x97, 0xea, 0x1f, 0xe4, 0x60,
+ 0x4e, 0xc3, 0x7a, 0x27, 0xe8, 0xb8, 0xfe, 0x2f, 0xce, 0x24, 0x79, 0x16, 0xe4, 0xdc, 0x70, 0x6d,
+ 0xe1, 0x89, 0x87, 0x2b, 0xc2, 0xff, 0x49, 0x5e, 0xc8, 0x12, 0x03, 0xf9, 0xe9, 0x90, 0x86, 0x67,
+ 0x25, 0xec, 0x19, 0x45, 0xc6, 0x9e, 0xc9, 0x0d, 0xb2, 0x67, 0x6e, 0x87, 0x93, 0x5d, 0xdd, 0x71,
+ 0x97, 0x2f, 0x37, 0x8d, 0x3d, 0xec, 0xb8, 0xfa, 0x5e, 0x8f, 0x58, 0x2e, 0x8a, 0xd6, 0x9f, 0x2c,
+ 0xde, 0x5d, 0x1e, 0x7b, 0x86, 0x69, 0x50, 0x15, 0x8f, 0x1e, 0xe7, 0xf5, 0x83, 0x52, 0x07, 0x96,
+ 0x86, 0x95, 0x9d, 0x4c, 0x33, 0x1e, 0x1c, 0x61, 0x3d, 0xe4, 0x2c, 0xa8, 0x1b, 0x95, 0x46, 0xa3,
+ 0xb4, 0x4a, 0xce, 0x31, 0xf8, 0x8e, 0x2d, 0x9d, 0x0b, 0x4f, 0xf0, 0xc4, 0x47, 0x91, 0x56, 0xe7,
+ 0xc2, 0xf1, 0xa2, 0x78, 0x42, 0x9d, 0x85, 0x29, 0x1b, 0xf7, 0xba, 0x06, 0x76, 0x8a, 0x19, 0xf4,
+ 0xd5, 0x2c, 0x14, 0xb6, 0x4c, 0x1b, 0xeb, 0x1d, 0xf4, 0xdc, 0xe8, 0x6e, 0x6f, 0x44, 0xa5, 0x10,
+ 0x63, 0x35, 0xc5, 0xae, 0x24, 0xb2, 0x7e, 0xcb, 0x63, 0x64, 0x2c, 0xf0, 0xc9, 0x2d, 0x21, 0x46,
+ 0x97, 0x9a, 0x7a, 0x93, 0xbe, 0x30, 0x05, 0xf9, 0xca, 0x5e, 0xcf, 0x3d, 0xb8, 0xf0, 0x04, 0x98,
+ 0x6f, 0xb8, 0x36, 0xd6, 0xf7, 0xb8, 0x8d, 0x60, 0xd7, 0xba, 0x82, 0x4d, 0x7f, 0x23, 0x98, 0xbc,
+ 0xdc, 0x7b, 0x0f, 0x4c, 0x99, 0x56, 0x4b, 0xdf, 0x77, 0x77, 0xd5, 0x9b, 0x0f, 0x45, 0x50, 0x61,
+ 0xea, 0x57, 0x67, 0x21, 0xeb, 0xbe, 0x74, 0x1f, 0x99, 0x0e, 0x14, 0x4c, 0xab, 0xb4, 0xef, 0xee,
+ 0x2e, 0xdd, 0xf4, 0x89, 0x3f, 0x3d, 0x9f, 0xf9, 0xf4, 0x9f, 0x9e, 0xcf, 0x7c, 0xf1, 0x4f, 0xcf,
+ 0x67, 0xbe, 0xff, 0xcf, 0xce, 0x9f, 0xf8, 0xf4, 0x9f, 0x9d, 0x3f, 0xf1, 0xd9, 0x3f, 0x3b, 0x7f,
+ 0xe2, 0x5b, 0xb2, 0xbd, 0xcb, 0x97, 0x0b, 0x84, 0xca, 0xd3, 0xfe, 0xbf, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x1c, 0x26, 0x7f, 0xb9, 0x4c, 0x1c, 0x02, 0x00,
}
func (m *Rpc) Marshal() (dAtA []byte, err error) {
@@ -91334,6 +91580,160 @@ func (m *RpcObjectListExportResponseError) MarshalToSizedBuffer(dAtA []byte) (in
return len(dAtA) - i, nil
}
+func (m *RpcObjectExport) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcObjectExport) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcObjectExport) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcObjectExportRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcObjectExportRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcObjectExportRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.SpaceId) > 0 {
+ i -= len(m.SpaceId)
+ copy(dAtA[i:], m.SpaceId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.SpaceId)))
+ i--
+ dAtA[i] = 0x52
+ }
+ if m.Format != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Format))
+ i--
+ dAtA[i] = 0x18
+ }
+ if len(m.ObjectId) > 0 {
+ i -= len(m.ObjectId)
+ copy(dAtA[i:], m.ObjectId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.ObjectId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcObjectExportResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcObjectExportResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcObjectExportResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Event != nil {
+ {
+ size, err := m.Event.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Result) > 0 {
+ i -= len(m.Result)
+ copy(dAtA[i:], m.Result)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Result)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcObjectExportResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcObjectExportResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcObjectExportResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *RpcObjectImport) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -128749,6 +129149,72 @@ func (m *RpcObjectListExportResponseError) Size() (n int) {
return n
}
+func (m *RpcObjectExport) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcObjectExportRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ObjectId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Format != 0 {
+ n += 1 + sovCommands(uint64(m.Format))
+ }
+ l = len(m.SpaceId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcObjectExportResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.Result)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Event != nil {
+ l = m.Event.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcObjectExportResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
func (m *RpcObjectImport) Size() (n int) {
if m == nil {
return 0
@@ -184388,6 +184854,444 @@ func (m *RpcObjectListExportResponseError) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *RpcObjectExport) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Export: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Export: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcObjectExportRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ObjectId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Format", wireType)
+ }
+ m.Format = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Format |= model.ExportFormat(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 10:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.SpaceId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcObjectExportResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcObjectExportResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Result = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Event", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Event == nil {
+ m.Event = &ResponseEvent{}
+ }
+ if err := m.Event.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcObjectExportResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcObjectExportResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *RpcObjectImport) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto
index 30d5ca172..7d6bab320 100644
--- a/pb/protos/commands.proto
+++ b/pb/protos/commands.proto
@@ -2873,6 +2873,35 @@ message Rpc {
}
+ message Export {
+ message Request {
+ string spaceId = 10;
+ // ids of documents for export, when empty - will export all available docs
+ string objectId = 2;
+ // export format
+ anytype.model.Export.Format format = 3;
+ }
+
+ message Response {
+ Error error = 1;
+ string result = 2;
+ ResponseEvent event = 3;
+
+ message Error {
+ Code code = 1;
+ string description = 2;
+
+ enum Code {
+ NULL = 0;
+ UNKNOWN_ERROR = 1;
+ BAD_INPUT = 2;
+ // ...
+ }
+ }
+ }
+
+ }
+
message Import {
message Request {
option (no_auth) = true;
diff --git a/pb/protos/service/service.proto b/pb/protos/service/service.proto
index af0d7b498..eee645148 100644
--- a/pb/protos/service/service.proto
+++ b/pb/protos/service/service.proto
@@ -126,6 +126,7 @@ service ClientCommands {
rpc ObjectUndo (anytype.Rpc.Object.Undo.Request) returns (anytype.Rpc.Object.Undo.Response);
rpc ObjectRedo (anytype.Rpc.Object.Redo.Request) returns (anytype.Rpc.Object.Redo.Response);
rpc ObjectListExport (anytype.Rpc.Object.ListExport.Request) returns (anytype.Rpc.Object.ListExport.Response);
+ rpc ObjectExport (anytype.Rpc.Object.Export.Request) returns (anytype.Rpc.Object.Export.Response);
rpc ObjectBookmarkFetch (anytype.Rpc.Object.BookmarkFetch.Request) returns (anytype.Rpc.Object.BookmarkFetch.Response);
rpc ObjectToBookmark (anytype.Rpc.Object.ToBookmark.Request) returns (anytype.Rpc.Object.ToBookmark.Response);
rpc ObjectImport (anytype.Rpc.Object.Import.Request) returns (anytype.Rpc.Object.Import.Response);
diff --git a/pb/service/service.pb.go b/pb/service/service.pb.go
index 94803f037..de05a45aa 100644
--- a/pb/service/service.pb.go
+++ b/pb/service/service.pb.go
@@ -26,356 +26,356 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
- // 5574 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdf, 0x8f, 0x1c, 0x49,
- 0x52, 0xf8, 0xb7, 0x5f, 0xbe, 0xfb, 0xa5, 0x8e, 0x5b, 0xa0, 0x17, 0x96, 0xbd, 0xe5, 0xce, 0xf6,
- 0x7a, 0xed, 0x19, 0xdb, 0xe3, 0xe9, 0xf1, 0xda, 0xfb, 0x8b, 0x3b, 0x24, 0x68, 0xcf, 0xd8, 0xb3,
- 0x73, 0x37, 0x33, 0x3b, 0x4c, 0xf7, 0xd8, 0x62, 0x25, 0x24, 0x6a, 0xba, 0x72, 0x7a, 0x8a, 0xa9,
- 0xae, 0xac, 0xab, 0xca, 0x6e, 0xbb, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x5f, 0x82,
- 0x27, 0x24, 0xfe, 0x02, 0xfe, 0x0c, 0x1e, 0xef, 0x91, 0x47, 0xb4, 0xfb, 0x2f, 0x20, 0x9e, 0x51,
- 0x65, 0x66, 0xe5, 0x8f, 0xa8, 0x88, 0xac, 0x9a, 0xe5, 0xc9, 0xd6, 0xc4, 0x27, 0x22, 0x32, 0x2b,
- 0x23, 0x33, 0x23, 0xb3, 0xb2, 0xb2, 0xa3, 0x9b, 0xc5, 0xf9, 0x4e, 0x51, 0x72, 0xc1, 0xab, 0x9d,
- 0x8a, 0x95, 0xab, 0x74, 0xc6, 0x9a, 0x7f, 0x47, 0xf2, 0xcf, 0xc3, 0x37, 0xe3, 0x7c, 0x2d, 0xd6,
- 0x05, 0x7b, 0xef, 0x5d, 0x4b, 0xce, 0xf8, 0x62, 0x11, 0xe7, 0x49, 0xa5, 0x90, 0xf7, 0xde, 0xb1,
- 0x12, 0xb6, 0x62, 0xb9, 0xd0, 0x7f, 0x7f, 0xfc, 0xdf, 0xff, 0x33, 0x88, 0xde, 0xda, 0xcd, 0x52,
- 0x96, 0x8b, 0x5d, 0xad, 0x31, 0xfc, 0x32, 0xfa, 0xf6, 0xb8, 0x28, 0xf6, 0x99, 0x78, 0xc1, 0xca,
- 0x2a, 0xe5, 0xf9, 0xf0, 0x83, 0x91, 0x76, 0x30, 0x3a, 0x2d, 0x66, 0xa3, 0x71, 0x51, 0x8c, 0xac,
- 0x70, 0x74, 0xca, 0x7e, 0xbc, 0x64, 0x95, 0x78, 0xef, 0x4e, 0x18, 0xaa, 0x0a, 0x9e, 0x57, 0x6c,
- 0x78, 0x11, 0xfd, 0xd2, 0xb8, 0x28, 0x26, 0x4c, 0xec, 0xb1, 0xba, 0x02, 0x13, 0x11, 0x0b, 0x36,
- 0xdc, 0x6c, 0xa9, 0xfa, 0x80, 0xf1, 0x71, 0xaf, 0x1b, 0xd4, 0x7e, 0xa6, 0xd1, 0xb7, 0x6a, 0x3f,
- 0x97, 0x4b, 0x91, 0xf0, 0x57, 0xf9, 0xf0, 0xfd, 0xb6, 0xa2, 0x16, 0x19, 0xdb, 0xb7, 0x43, 0x88,
- 0xb6, 0xfa, 0x32, 0xfa, 0xf9, 0x97, 0x71, 0x96, 0x31, 0xb1, 0x5b, 0xb2, 0xba, 0xe0, 0xbe, 0x8e,
- 0x12, 0x8d, 0x94, 0xcc, 0xd8, 0xfd, 0x20, 0xc8, 0x68, 0xc3, 0x5f, 0x46, 0xdf, 0x56, 0x92, 0x53,
- 0x36, 0xe3, 0x2b, 0x56, 0x0e, 0x51, 0x2d, 0x2d, 0x24, 0x1e, 0x79, 0x0b, 0x82, 0xb6, 0x77, 0x79,
- 0xbe, 0x62, 0xa5, 0xc0, 0x6d, 0x6b, 0x61, 0xd8, 0xb6, 0x85, 0xb4, 0xed, 0xbf, 0x1c, 0x44, 0xdf,
- 0x1d, 0xcf, 0x66, 0x7c, 0x99, 0x8b, 0x43, 0x3e, 0x8b, 0xb3, 0xc3, 0x34, 0xbf, 0x3a, 0x66, 0xaf,
- 0x76, 0x2f, 0x6b, 0x3e, 0x9f, 0xb3, 0xe1, 0x13, 0xff, 0xa9, 0x2a, 0x74, 0x64, 0xd8, 0x91, 0x0b,
- 0x1b, 0xdf, 0x1f, 0x5d, 0x4f, 0x49, 0x97, 0xe5, 0x6f, 0x07, 0xd1, 0x0d, 0x58, 0x96, 0x09, 0xcf,
- 0x56, 0xcc, 0x96, 0xe6, 0xe3, 0x0e, 0xc3, 0x3e, 0x6e, 0xca, 0xf3, 0xc9, 0x75, 0xd5, 0x74, 0x89,
- 0xb2, 0xe8, 0x6d, 0x37, 0x5c, 0x26, 0xac, 0x92, 0xdd, 0xe9, 0x3e, 0x1d, 0x11, 0x1a, 0x31, 0x9e,
- 0x1f, 0xf4, 0x41, 0xb5, 0xb7, 0x34, 0x1a, 0x6a, 0x6f, 0x19, 0xaf, 0x8c, 0xb3, 0x7b, 0xa8, 0x05,
- 0x87, 0x30, 0xbe, 0xee, 0xf7, 0x20, 0xb5, 0xab, 0xdf, 0x8b, 0x7e, 0xe1, 0x25, 0x2f, 0xaf, 0xaa,
- 0x22, 0x9e, 0x31, 0xdd, 0x15, 0xee, 0xfa, 0xda, 0x8d, 0x14, 0xf6, 0x86, 0x8d, 0x2e, 0xcc, 0x09,
- 0xda, 0x46, 0xf8, 0x45, 0xc1, 0xe0, 0x18, 0x64, 0x15, 0x6b, 0x21, 0x15, 0xb4, 0x10, 0xd2, 0xb6,
- 0xaf, 0xa2, 0xa1, 0xb5, 0x7d, 0xfe, 0xfb, 0x6c, 0x26, 0xc6, 0x49, 0x02, 0x5b, 0xc5, 0xea, 0x4a,
- 0x62, 0x34, 0x4e, 0x12, 0xaa, 0x55, 0x70, 0x54, 0x3b, 0x7b, 0x15, 0xbd, 0x03, 0x9c, 0x1d, 0xa6,
- 0x95, 0x74, 0xb8, 0x1d, 0xb6, 0xa2, 0x31, 0xe3, 0x74, 0xd4, 0x17, 0xd7, 0x8e, 0xff, 0x78, 0x10,
- 0x7d, 0x07, 0xf1, 0x7c, 0xca, 0x16, 0x7c, 0xc5, 0x86, 0x8f, 0xba, 0xad, 0x29, 0xd2, 0xf8, 0xff,
- 0xf0, 0x1a, 0x1a, 0x48, 0x98, 0x4c, 0x58, 0xc6, 0x66, 0x82, 0x0c, 0x13, 0x25, 0xee, 0x0c, 0x13,
- 0x83, 0x39, 0x3d, 0xac, 0x11, 0xee, 0x33, 0xb1, 0xbb, 0x2c, 0x4b, 0x96, 0x0b, 0xb2, 0x2d, 0x2d,
- 0xd2, 0xd9, 0x96, 0x1e, 0x8a, 0xd4, 0x67, 0x9f, 0x89, 0x71, 0x96, 0x91, 0xf5, 0x51, 0xe2, 0xce,
- 0xfa, 0x18, 0x4c, 0x7b, 0x98, 0x45, 0xbf, 0xe8, 0x3c, 0x31, 0x71, 0x90, 0x5f, 0xf0, 0x21, 0xfd,
- 0x2c, 0xa4, 0xdc, 0xf8, 0xd8, 0xec, 0xe4, 0x90, 0x6a, 0x3c, 0x7b, 0x5d, 0xf0, 0x92, 0x6e, 0x16,
- 0x25, 0xee, 0xac, 0x86, 0xc1, 0xb4, 0x87, 0xdf, 0x8d, 0xde, 0xd2, 0xa3, 0x64, 0x33, 0x9f, 0xdd,
- 0x41, 0x87, 0x50, 0x38, 0xa1, 0xdd, 0xed, 0xa0, 0x5a, 0xe6, 0x8f, 0xd2, 0x79, 0x59, 0x8f, 0x3e,
- 0xb8, 0x79, 0x2d, 0xed, 0x30, 0x6f, 0x29, 0x6d, 0x9e, 0x47, 0xbf, 0xec, 0x9b, 0xdf, 0x8d, 0xf3,
- 0x19, 0xcb, 0x86, 0x0f, 0x42, 0xea, 0x8a, 0x31, 0xae, 0xb6, 0x7a, 0xb1, 0x76, 0xb0, 0xd3, 0x84,
- 0x1e, 0x4c, 0x3f, 0x40, 0xb5, 0xc1, 0x50, 0x7a, 0x27, 0x0c, 0xb5, 0x6c, 0xef, 0xb1, 0x8c, 0x91,
- 0xb6, 0x95, 0xb0, 0xc3, 0xb6, 0x81, 0xb4, 0xed, 0x32, 0xfa, 0x15, 0xd3, 0xcc, 0x75, 0x5e, 0x20,
- 0xe5, 0xf5, 0xa4, 0xb3, 0x45, 0xb4, 0xa3, 0x0b, 0x19, 0x5f, 0x0f, 0xfb, 0xc1, 0xad, 0xfa, 0xe8,
- 0x11, 0x05, 0xaf, 0x0f, 0x18, 0x4f, 0xee, 0x84, 0x21, 0x6d, 0xfb, 0xaf, 0x06, 0xd1, 0xf7, 0xb4,
- 0xec, 0x59, 0x1e, 0x9f, 0x67, 0x4c, 0x4e, 0xf1, 0xc7, 0x4c, 0xbc, 0xe2, 0xe5, 0xd5, 0x64, 0x9d,
- 0xcf, 0x88, 0x74, 0x06, 0x87, 0x3b, 0xd2, 0x19, 0x52, 0x49, 0x17, 0xe6, 0x0f, 0xa2, 0x77, 0x9b,
- 0xa0, 0xb8, 0x8c, 0xf3, 0x39, 0xfb, 0x61, 0xc5, 0xf3, 0x71, 0x91, 0x8e, 0x93, 0xa4, 0x1c, 0x8e,
- 0xf0, 0xa6, 0x87, 0x9c, 0x29, 0xc1, 0x4e, 0x6f, 0xde, 0x49, 0x9f, 0xf5, 0x53, 0x16, 0xbc, 0x80,
- 0xe9, 0x73, 0xf3, 0xf8, 0x04, 0x2f, 0xa8, 0xf4, 0xd9, 0x47, 0x5a, 0x56, 0x8f, 0xea, 0x39, 0x08,
- 0xb7, 0x7a, 0xe4, 0x4e, 0x3a, 0xb7, 0x43, 0x88, 0x9d, 0x03, 0x9a, 0x07, 0xc5, 0xf3, 0x8b, 0x74,
- 0x7e, 0x56, 0x24, 0x75, 0x1f, 0xba, 0x8f, 0xd7, 0xd9, 0x41, 0x88, 0x39, 0x80, 0x40, 0xb5, 0xb7,
- 0xbf, 0xb1, 0x59, 0xa6, 0x1e, 0x97, 0x9e, 0x97, 0x7c, 0x71, 0xc8, 0xe6, 0xf1, 0x6c, 0xad, 0x07,
- 0xd3, 0x8f, 0x42, 0xa3, 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xbe, 0xa6, 0x96, 0x2e, 0xcf, 0xbf, 0x0e,
- 0xa2, 0x3b, 0x5e, 0x9c, 0xe8, 0x60, 0x52, 0xa5, 0x1f, 0xe7, 0xc9, 0x29, 0xab, 0x44, 0x5c, 0x8a,
- 0xe1, 0xf7, 0x03, 0x31, 0x40, 0xe8, 0x98, 0xb2, 0xfd, 0xe0, 0x1b, 0xe9, 0xda, 0x56, 0x9f, 0xd4,
- 0xb3, 0x84, 0x1e, 0x7f, 0xfc, 0x56, 0x97, 0x12, 0x38, 0xfa, 0xdc, 0x0e, 0x21, 0xb6, 0xd5, 0xa5,
- 0xe0, 0x20, 0x5f, 0xa5, 0x82, 0xed, 0xb3, 0x9c, 0x95, 0xed, 0x56, 0x57, 0xaa, 0x3e, 0x42, 0xb4,
- 0x3a, 0x81, 0xda, 0x91, 0xce, 0xf3, 0x66, 0x32, 0x8d, 0xad, 0x80, 0x91, 0x56, 0xae, 0xf1, 0xb0,
- 0x1f, 0x6c, 0x97, 0xca, 0x8e, 0xcf, 0x53, 0xb6, 0xe2, 0x57, 0x70, 0xa9, 0xec, 0x9a, 0x50, 0x00,
- 0xb1, 0x54, 0x46, 0x41, 0x9b, 0x0e, 0x38, 0x7e, 0x5e, 0xa4, 0xec, 0x15, 0x48, 0x07, 0x5c, 0xe5,
- 0x5a, 0x4c, 0xa4, 0x03, 0x08, 0xa6, 0x3d, 0x1c, 0x47, 0x3f, 0x27, 0x85, 0x3f, 0xe4, 0x69, 0x3e,
- 0xbc, 0x89, 0x28, 0xd5, 0x02, 0x63, 0xf5, 0x16, 0x0d, 0x80, 0x12, 0xd7, 0x7f, 0xd5, 0x73, 0xf3,
- 0x5d, 0x42, 0x09, 0x4c, 0xcb, 0x1b, 0x5d, 0x98, 0xcd, 0xc3, 0xa4, 0xb0, 0x1e, 0xbf, 0x26, 0x97,
- 0x71, 0x99, 0xe6, 0xf3, 0x21, 0xa6, 0xeb, 0xc8, 0x89, 0x3c, 0x0c, 0xe3, 0x40, 0x08, 0x6b, 0xc5,
- 0x71, 0x51, 0x94, 0xf5, 0xb0, 0x88, 0x85, 0xb0, 0x8f, 0x04, 0x43, 0xb8, 0x85, 0xe2, 0xde, 0xf6,
- 0xd8, 0x2c, 0x4b, 0xf3, 0xa0, 0x37, 0x8d, 0xf4, 0xf1, 0x66, 0x51, 0x10, 0xbc, 0x87, 0x2c, 0x5e,
- 0xb1, 0xa6, 0x66, 0xd8, 0x93, 0x71, 0x81, 0x60, 0xf0, 0x02, 0xd0, 0x2e, 0x7a, 0xa5, 0xf8, 0x28,
- 0xbe, 0x62, 0xf5, 0x03, 0x66, 0xf5, 0xa4, 0x3a, 0xc4, 0xf4, 0x3d, 0x82, 0x58, 0xf4, 0xe2, 0xa4,
- 0x76, 0xb5, 0x8c, 0xde, 0x91, 0xf2, 0x93, 0xb8, 0x14, 0xe9, 0x2c, 0x2d, 0xe2, 0xbc, 0x59, 0x4c,
- 0x61, 0xfd, 0xba, 0x45, 0x19, 0x97, 0xdb, 0x3d, 0x69, 0xed, 0xf6, 0x9f, 0x06, 0xd1, 0xfb, 0xd0,
- 0xef, 0x09, 0x2b, 0x17, 0xa9, 0x5c, 0x93, 0x57, 0x6a, 0x10, 0x1e, 0x7e, 0x1a, 0x36, 0xda, 0x52,
- 0x30, 0xa5, 0xf9, 0xec, 0xfa, 0x8a, 0x36, 0x13, 0x9b, 0xe8, 0x75, 0xca, 0x17, 0x65, 0xd2, 0xda,
- 0xb3, 0x9a, 0x34, 0x8b, 0x0f, 0x29, 0x24, 0x32, 0xb1, 0x16, 0x04, 0x7a, 0xf8, 0x59, 0x5e, 0x35,
- 0xd6, 0xb1, 0x1e, 0x6e, 0xc5, 0xc1, 0x1e, 0xee, 0x61, 0xb6, 0x87, 0x9f, 0x2c, 0xcf, 0xb3, 0xb4,
- 0xba, 0x4c, 0xf3, 0xb9, 0x4e, 0xbb, 0x7d, 0x5d, 0x2b, 0x86, 0x99, 0xf7, 0x66, 0x27, 0x87, 0x39,
- 0xd1, 0xc1, 0x42, 0x3a, 0x01, 0x61, 0xb2, 0xd9, 0xc9, 0xd9, 0xd5, 0x90, 0x95, 0xd6, 0xcb, 0x70,
- 0xb0, 0x1a, 0x72, 0x54, 0x6b, 0x29, 0xb1, 0x1a, 0x6a, 0x53, 0x76, 0x35, 0xe4, 0xd6, 0xa1, 0xe2,
- 0xd9, 0x8a, 0x9d, 0x95, 0x29, 0x58, 0x0d, 0x79, 0xe5, 0x6b, 0x18, 0x62, 0x35, 0x44, 0xb1, 0x76,
- 0xa0, 0xb2, 0xc4, 0x3e, 0x13, 0x13, 0x11, 0x8b, 0x65, 0x05, 0x06, 0x2a, 0xc7, 0x86, 0x41, 0x88,
- 0x81, 0x8a, 0x40, 0xb5, 0xb7, 0xdf, 0x8e, 0x22, 0xb5, 0x83, 0x21, 0x77, 0x99, 0xfc, 0xb9, 0x47,
- 0x6f, 0x6d, 0x78, 0x5b, 0x4c, 0xef, 0x07, 0x08, 0x9b, 0xf0, 0xa8, 0xbf, 0xcb, 0xcd, 0xb3, 0x21,
- 0xaa, 0x21, 0x45, 0x44, 0xc2, 0x03, 0x10, 0x58, 0xd0, 0xc9, 0x25, 0x7f, 0x85, 0x17, 0xb4, 0x96,
- 0x84, 0x0b, 0xaa, 0x09, 0xbb, 0x9d, 0xad, 0x0b, 0x8a, 0x6d, 0x67, 0x37, 0xc5, 0x08, 0x6d, 0x67,
- 0x43, 0xc6, 0xc6, 0x8c, 0x6b, 0xf8, 0x29, 0xe7, 0x57, 0x8b, 0xb8, 0xbc, 0x02, 0x31, 0xe3, 0x29,
- 0x37, 0x0c, 0x11, 0x33, 0x14, 0x6b, 0x63, 0xc6, 0x75, 0x58, 0xa7, 0xcb, 0x67, 0x65, 0x06, 0x62,
- 0xc6, 0xb3, 0xa1, 0x11, 0x22, 0x66, 0x08, 0xd4, 0x8e, 0x4e, 0xae, 0xb7, 0x09, 0x83, 0x1b, 0x28,
- 0x9e, 0xfa, 0x84, 0x51, 0x1b, 0x28, 0x08, 0x06, 0x43, 0x68, 0xbf, 0x8c, 0x8b, 0x4b, 0x3c, 0x84,
- 0xa4, 0x28, 0x1c, 0x42, 0x0d, 0x02, 0xdb, 0x7b, 0xc2, 0xe2, 0x72, 0x76, 0x89, 0xb7, 0xb7, 0x92,
- 0x85, 0xdb, 0xdb, 0x30, 0xb0, 0xbd, 0x95, 0xe0, 0x65, 0x2a, 0x2e, 0x8f, 0x98, 0x88, 0xf1, 0xf6,
- 0xf6, 0x99, 0x70, 0x7b, 0xb7, 0x58, 0x9b, 0x8f, 0xbb, 0x0e, 0x27, 0xcb, 0xf3, 0x6a, 0x56, 0xa6,
- 0xe7, 0x6c, 0x18, 0xb0, 0x62, 0x20, 0x22, 0x1f, 0x27, 0x61, 0xed, 0xf3, 0xa7, 0x83, 0xe8, 0x66,
- 0xd3, 0xec, 0xbc, 0xaa, 0xf4, 0xdc, 0xe7, 0xbb, 0xff, 0x18, 0x6f, 0x5f, 0x02, 0x27, 0x5e, 0x30,
- 0xf4, 0x50, 0x73, 0x72, 0x03, 0xbc, 0x48, 0x67, 0x79, 0x65, 0x0a, 0xf5, 0x69, 0x1f, 0xeb, 0x8e,
- 0x02, 0x91, 0x1b, 0xf4, 0x52, 0xb4, 0x69, 0x99, 0x6e, 0x9f, 0x46, 0x76, 0x90, 0x54, 0x20, 0x2d,
- 0x6b, 0x9e, 0xb7, 0x43, 0x10, 0x69, 0x19, 0x4e, 0xc2, 0x50, 0xd8, 0x2f, 0xf9, 0xb2, 0xa8, 0x3a,
- 0x42, 0x01, 0x40, 0xe1, 0x50, 0x68, 0xc3, 0xda, 0xe7, 0xeb, 0xe8, 0x57, 0xdd, 0xf0, 0x73, 0x1f,
- 0xf6, 0x36, 0x1d, 0x53, 0xd8, 0x23, 0x1e, 0xf5, 0xc5, 0x6d, 0x46, 0xd1, 0x78, 0x16, 0x7b, 0x4c,
- 0xc4, 0x69, 0x56, 0x0d, 0x37, 0x70, 0x1b, 0x8d, 0x9c, 0xc8, 0x28, 0x30, 0x0e, 0x8e, 0x6f, 0x7b,
- 0xcb, 0x22, 0x4b, 0x67, 0xed, 0xd7, 0x3b, 0x5a, 0xd7, 0x88, 0xc3, 0xe3, 0x9b, 0x8b, 0xc1, 0xf1,
- 0xba, 0x4e, 0xfd, 0xe4, 0x7f, 0xa6, 0xeb, 0x82, 0xe1, 0xe3, 0xb5, 0x87, 0x84, 0xc7, 0x6b, 0x88,
- 0xc2, 0xfa, 0x4c, 0x98, 0x38, 0x8c, 0xd7, 0x7c, 0x49, 0x8c, 0xd7, 0x46, 0x1c, 0xae, 0x8f, 0x8b,
- 0xd9, 0xb5, 0x81, 0xf1, 0x70, 0x90, 0x0b, 0x56, 0xe6, 0x71, 0xf6, 0x3c, 0x8b, 0xe7, 0xd5, 0x90,
- 0x18, 0x63, 0x7c, 0x8a, 0x58, 0x1b, 0xd0, 0x34, 0xf2, 0x18, 0x0f, 0xaa, 0xe7, 0xf1, 0x8a, 0x97,
- 0xa9, 0xa0, 0x1f, 0xa3, 0x45, 0x3a, 0x1f, 0xa3, 0x87, 0xa2, 0xde, 0xc6, 0xe5, 0xec, 0x32, 0x5d,
- 0xb1, 0x24, 0xe0, 0xad, 0x41, 0x7a, 0x78, 0x73, 0x50, 0xa4, 0xd1, 0x26, 0x7c, 0x59, 0xce, 0x18,
- 0xd9, 0x68, 0x4a, 0xdc, 0xd9, 0x68, 0x06, 0xd3, 0x1e, 0xfe, 0x6c, 0x10, 0xfd, 0x9a, 0x92, 0xba,
- 0xef, 0x5c, 0xf6, 0xe2, 0xea, 0xf2, 0x9c, 0xc7, 0x65, 0x32, 0xfc, 0x10, 0xb3, 0x83, 0xa2, 0xc6,
- 0xf5, 0xe3, 0xeb, 0xa8, 0xc0, 0xc7, 0x5a, 0xe7, 0xdd, 0xb6, 0xc7, 0xa1, 0x8f, 0xd5, 0x43, 0xc2,
- 0x8f, 0x15, 0xa2, 0x70, 0x00, 0x91, 0x72, 0xb5, 0x25, 0xb7, 0x41, 0xea, 0xfb, 0xfb, 0x72, 0x9b,
- 0x9d, 0x1c, 0x1c, 0x1f, 0x6b, 0xa1, 0x1f, 0x2d, 0xdb, 0x94, 0x0d, 0x3c, 0x62, 0x46, 0x7d, 0x71,
- 0xd2, 0xb3, 0xe9, 0x15, 0x61, 0xcf, 0xad, 0x9e, 0x31, 0xea, 0x8b, 0x13, 0x9e, 0x9d, 0x61, 0x2d,
- 0xe4, 0x19, 0x19, 0xda, 0x46, 0x7d, 0x71, 0x98, 0x7d, 0x69, 0xa6, 0x99, 0x17, 0x1e, 0x04, 0xec,
- 0xc0, 0xb9, 0x61, 0xab, 0x17, 0xab, 0x1d, 0xfe, 0xc5, 0x20, 0xfa, 0xae, 0xf5, 0x78, 0xc4, 0x93,
- 0xf4, 0x62, 0xad, 0xa0, 0x17, 0x71, 0xb6, 0x64, 0xd5, 0xf0, 0x31, 0x65, 0xad, 0xcd, 0x9a, 0x12,
- 0x3c, 0xb9, 0x96, 0x0e, 0xec, 0x3b, 0xe3, 0xa2, 0xc8, 0xd6, 0x53, 0xb6, 0x28, 0x32, 0xb2, 0xef,
- 0x78, 0x48, 0xb8, 0xef, 0x40, 0x14, 0x66, 0xe5, 0x53, 0x5e, 0xe7, 0xfc, 0x68, 0x56, 0x2e, 0x45,
- 0xe1, 0xac, 0xbc, 0x41, 0x60, 0xae, 0x34, 0xe5, 0xbb, 0x3c, 0xcb, 0xd8, 0x4c, 0xb4, 0xcf, 0x6d,
- 0x18, 0x4d, 0x4b, 0x84, 0x73, 0x25, 0x40, 0xda, 0x5d, 0xb9, 0x66, 0x0d, 0x19, 0x97, 0xec, 0xe9,
- 0xfa, 0x30, 0xcd, 0xaf, 0x86, 0x78, 0x5a, 0x60, 0x01, 0x62, 0x57, 0x0e, 0x05, 0xe1, 0x5a, 0xf5,
- 0x2c, 0x4f, 0x38, 0xbe, 0x56, 0xad, 0x25, 0xe1, 0xb5, 0xaa, 0x26, 0xa0, 0xc9, 0x53, 0x46, 0x99,
- 0xac, 0x25, 0x61, 0x93, 0x9a, 0xc0, 0x86, 0x42, 0xfd, 0xee, 0x86, 0x1c, 0x0a, 0xc1, 0xdb, 0x9a,
- 0xcd, 0x4e, 0x0e, 0x46, 0x68, 0xb3, 0x68, 0x7d, 0xce, 0xc4, 0xec, 0x12, 0x8f, 0x50, 0x0f, 0x09,
- 0x47, 0x28, 0x44, 0x61, 0x95, 0xa6, 0xdc, 0x2c, 0xba, 0x37, 0xf0, 0xf8, 0x68, 0x2d, 0xb8, 0x37,
- 0x3b, 0x39, 0xb8, 0x8c, 0x3c, 0x58, 0xc8, 0x67, 0x86, 0x06, 0xb9, 0x92, 0x85, 0x97, 0x91, 0x86,
- 0x81, 0xa5, 0x57, 0x02, 0xb9, 0x97, 0xb5, 0x41, 0x2b, 0x7a, 0xbb, 0x59, 0x9b, 0x9d, 0x9c, 0x76,
- 0xf2, 0x0f, 0x66, 0x19, 0xa7, 0xa4, 0xc7, 0xbc, 0xee, 0x23, 0x2f, 0xe2, 0x2c, 0x4d, 0x62, 0xc1,
- 0xa6, 0xfc, 0x8a, 0xe5, 0xf8, 0x8a, 0x49, 0x97, 0x56, 0xf1, 0x23, 0x4f, 0x21, 0xbc, 0x62, 0x0a,
- 0x2b, 0xc2, 0x38, 0x51, 0xf4, 0x59, 0xc5, 0x76, 0xe3, 0x8a, 0x18, 0xc9, 0x3c, 0x24, 0x1c, 0x27,
- 0x10, 0x85, 0xf9, 0xaa, 0x92, 0x3f, 0x7b, 0x5d, 0xb0, 0x32, 0x65, 0xf9, 0x8c, 0xe1, 0xf9, 0x2a,
- 0xa4, 0xc2, 0xf9, 0x2a, 0x42, 0xc3, 0xb5, 0xda, 0x5e, 0x2c, 0xd8, 0xd3, 0xf5, 0x34, 0x5d, 0xb0,
- 0x4a, 0xc4, 0x8b, 0x02, 0x5f, 0xab, 0x01, 0x28, 0xbc, 0x56, 0x6b, 0xc3, 0xad, 0xad, 0x21, 0x33,
- 0x20, 0xb6, 0x8f, 0x7b, 0x41, 0x22, 0x70, 0xdc, 0x8b, 0x40, 0xe1, 0x83, 0xb5, 0x00, 0xfa, 0x92,
- 0xa0, 0x65, 0x25, 0xf8, 0x92, 0x80, 0xa6, 0x5b, 0x1b, 0x6e, 0x86, 0x99, 0xd4, 0x5d, 0xb3, 0xa3,
- 0xe8, 0x13, 0xb7, 0x8b, 0x6e, 0xf5, 0x62, 0xf1, 0x1d, 0xbe, 0x53, 0x96, 0xc5, 0x72, 0xda, 0x0a,
- 0x6c, 0xa3, 0x35, 0x4c, 0x9f, 0x1d, 0x3e, 0x87, 0xd5, 0x0e, 0xff, 0x64, 0x10, 0xbd, 0x87, 0x79,
- 0xfc, 0xa2, 0x90, 0x7e, 0x1f, 0x75, 0xdb, 0x52, 0x24, 0x71, 0x9e, 0x2d, 0xac, 0x61, 0x8f, 0x64,
- 0x34, 0x22, 0x7b, 0xdc, 0x4d, 0x17, 0xc0, 0x4f, 0xda, 0x4c, 0xf9, 0x21, 0x47, 0x1c, 0xc9, 0x08,
- 0xf1, 0x76, 0x3d, 0xe4, 0x97, 0xab, 0x02, 0xeb, 0x21, 0x63, 0x43, 0x8b, 0x89, 0xf5, 0x10, 0x82,
- 0xd9, 0xde, 0xe9, 0x56, 0xef, 0x65, 0x2a, 0x2e, 0x65, 0xbe, 0x05, 0x7a, 0xa7, 0x57, 0x56, 0x03,
- 0x11, 0xbd, 0x93, 0x84, 0x61, 0x46, 0xd2, 0x80, 0x75, 0xdf, 0xc4, 0xc6, 0x72, 0x63, 0xc8, 0xed,
- 0x99, 0xf7, 0xba, 0x41, 0x18, 0xaf, 0x8d, 0x58, 0x2f, 0x7d, 0x1e, 0x84, 0x2c, 0x80, 0xe5, 0xcf,
- 0x56, 0x2f, 0x56, 0x3b, 0xfc, 0xa3, 0xe8, 0x3b, 0xad, 0x8a, 0x3d, 0x67, 0xb1, 0x58, 0x96, 0x2c,
- 0x19, 0xee, 0x74, 0x94, 0xbb, 0x01, 0x8d, 0xeb, 0x47, 0xfd, 0x15, 0x5a, 0x39, 0x7a, 0xc3, 0xa9,
- 0xb0, 0x32, 0x65, 0x78, 0x1c, 0x32, 0xe9, 0xb3, 0xc1, 0x1c, 0x9d, 0xd6, 0x69, 0x2d, 0xb3, 0xdd,
- 0xe8, 0x1a, 0xaf, 0xe2, 0x34, 0x93, 0x2f, 0x6b, 0x3f, 0x0c, 0x19, 0xf5, 0xd0, 0xe0, 0x32, 0x9b,
- 0x54, 0x69, 0x8d, 0xcc, 0xb2, 0x8f, 0x3b, 0xcb, 0xb3, 0x87, 0xf4, 0x48, 0x80, 0xac, 0xce, 0xb6,
- 0x7b, 0xd2, 0xda, 0xad, 0x68, 0xa6, 0xbc, 0xfa, 0xcf, 0x6e, 0x90, 0x63, 0x5e, 0xb5, 0x2a, 0x12,
- 0xe9, 0xdb, 0x3d, 0x69, 0xed, 0xf5, 0x0f, 0xa3, 0x77, 0xdb, 0x5e, 0xf5, 0x44, 0xb4, 0xd3, 0x69,
- 0x0a, 0xcc, 0x45, 0x8f, 0xfa, 0x2b, 0x68, 0xf7, 0xff, 0x6c, 0xf6, 0xa5, 0x95, 0xff, 0x19, 0x5f,
- 0x2c, 0x58, 0x9e, 0xb0, 0xa4, 0xd1, 0xa8, 0xea, 0xf5, 0xd3, 0x67, 0xb4, 0x5d, 0xa3, 0x30, 0x72,
- 0x35, 0x4c, 0x89, 0x7e, 0xfd, 0x1b, 0x68, 0xea, 0xa2, 0xfd, 0xfb, 0x20, 0xba, 0x8f, 0x16, 0xad,
- 0x09, 0x5c, 0xaf, 0x88, 0xbf, 0xd5, 0xc7, 0x11, 0xa6, 0x69, 0x8a, 0x3a, 0xfe, 0x3f, 0x58, 0xd0,
- 0x45, 0xfe, 0x97, 0x41, 0x74, 0xdb, 0x2a, 0xd6, 0xe1, 0xbd, 0xcb, 0xf3, 0x8b, 0x2c, 0x9d, 0x09,
- 0xf9, 0x46, 0x56, 0xab, 0xd0, 0x8f, 0x93, 0xd2, 0xe8, 0x7e, 0x9c, 0x01, 0x4d, 0xbb, 0x78, 0xfd,
- 0x3c, 0xad, 0x04, 0x2f, 0xd7, 0x93, 0x4b, 0xfe, 0xaa, 0xf9, 0x60, 0xc8, 0x1f, 0x97, 0x35, 0x30,
- 0x72, 0x08, 0x62, 0xf1, 0x8a, 0x93, 0x2d, 0x57, 0xf6, 0xc3, 0xa2, 0x8a, 0x70, 0xe5, 0x10, 0x1d,
- 0xae, 0x7c, 0xd2, 0xce, 0x4a, 0x4d, 0xad, 0xec, 0x57, 0x50, 0x9b, 0x78, 0x51, 0xdb, 0x5f, 0x42,
- 0xdd, 0xeb, 0x06, 0x6d, 0x6e, 0xaa, 0xc5, 0x7b, 0xe9, 0xc5, 0x85, 0xa9, 0x13, 0x5e, 0x52, 0x17,
- 0x21, 0x72, 0x53, 0x02, 0xb5, 0xcb, 0xab, 0xe7, 0x69, 0xc6, 0xe4, 0xbb, 0x9b, 0x2f, 0x2e, 0x2e,
- 0x32, 0x1e, 0x27, 0x60, 0x79, 0x55, 0x8b, 0x47, 0xae, 0x9c, 0x58, 0x5e, 0x61, 0x9c, 0x3d, 0x15,
- 0x52, 0x4b, 0xeb, 0xe8, 0xce, 0x67, 0x69, 0x06, 0xcf, 0x1b, 0x4b, 0x4d, 0x23, 0x24, 0x4e, 0x85,
- 0xb4, 0x20, 0x9b, 0x02, 0xd5, 0xa2, 0x3a, 0x2a, 0x9b, 0xf2, 0xdf, 0x6d, 0x2b, 0x3a, 0x62, 0x22,
- 0x05, 0x42, 0x30, 0xbb, 0xcb, 0x50, 0x0b, 0xcf, 0x0a, 0x69, 0xfc, 0x56, 0x5b, 0x4b, 0x49, 0x88,
- 0x5d, 0x06, 0x9f, 0xb0, 0xab, 0xe5, 0xfa, 0xef, 0x7b, 0xfc, 0x55, 0x2e, 0x8d, 0xde, 0x6e, 0xab,
- 0x34, 0x32, 0x62, 0xb5, 0x0c, 0x19, 0x6d, 0xf8, 0x47, 0xd1, 0xff, 0x97, 0x86, 0x4b, 0x5e, 0x0c,
- 0x6f, 0x20, 0x0a, 0xa5, 0x73, 0x3a, 0xf7, 0x26, 0x29, 0xb7, 0x87, 0x48, 0x4c, 0x6c, 0x9c, 0x55,
- 0xf1, 0x1c, 0x1e, 0xa9, 0xb7, 0x2d, 0x2e, 0xa5, 0xc4, 0x21, 0x92, 0x36, 0xe5, 0x47, 0xc5, 0x31,
- 0x4f, 0xb4, 0x75, 0xa4, 0x86, 0x46, 0x18, 0x8a, 0x0a, 0x17, 0xb2, 0x69, 0xeb, 0x71, 0xbc, 0x4a,
- 0xe7, 0x26, 0xb5, 0x50, 0x03, 0x58, 0x05, 0xd2, 0x56, 0xcb, 0x8c, 0x1c, 0x88, 0x48, 0x5b, 0x49,
- 0x58, 0xfb, 0xfc, 0xfb, 0x41, 0x74, 0xcb, 0x32, 0xfb, 0xcd, 0xbe, 0xec, 0x41, 0x7e, 0xc1, 0xeb,
- 0x24, 0xf7, 0x30, 0xcd, 0xaf, 0xaa, 0xe1, 0x27, 0x94, 0x49, 0x9c, 0x37, 0x45, 0xf9, 0xf4, 0xda,
- 0x7a, 0x76, 0x7d, 0xd2, 0x6c, 0x5a, 0xda, 0x93, 0x0b, 0x4a, 0x03, 0xac, 0x4f, 0xcc, 0xde, 0x26,
- 0xe4, 0x88, 0xf5, 0x49, 0x88, 0xb7, 0x4d, 0x6c, 0x9c, 0x67, 0x3c, 0x87, 0x4d, 0x6c, 0x2d, 0xd4,
- 0x42, 0xa2, 0x89, 0x5b, 0x90, 0x1d, 0x8f, 0x1b, 0x91, 0xda, 0x5f, 0x1b, 0x67, 0x19, 0x18, 0x8f,
- 0x8d, 0xaa, 0x01, 0x88, 0xf1, 0x18, 0x05, 0xb5, 0x9f, 0xd3, 0xe8, 0x5b, 0xf5, 0x23, 0x3d, 0x29,
- 0xd9, 0x2a, 0x65, 0xf0, 0x90, 0x8d, 0x23, 0x21, 0xfa, 0xbf, 0x4f, 0xd8, 0x9e, 0x75, 0x96, 0x57,
- 0x45, 0x16, 0x57, 0x97, 0xfa, 0xd8, 0x85, 0x5f, 0xe7, 0x46, 0x08, 0x0f, 0x5e, 0xdc, 0xed, 0xa0,
- 0xec, 0xa0, 0xde, 0xc8, 0xcc, 0x10, 0xb3, 0x81, 0xab, 0xb6, 0x86, 0x99, 0xcd, 0x4e, 0xce, 0xbe,
- 0xdb, 0xd8, 0x8f, 0xb3, 0x8c, 0x95, 0xeb, 0x46, 0x76, 0x14, 0xe7, 0xe9, 0x05, 0xab, 0x04, 0x78,
- 0xb7, 0xa1, 0xa9, 0x11, 0xc4, 0x88, 0x77, 0x1b, 0x01, 0xdc, 0xae, 0xdb, 0x80, 0xe7, 0x83, 0x3c,
- 0x61, 0xaf, 0xc1, 0xba, 0x0d, 0xda, 0x91, 0x0c, 0xb1, 0x6e, 0xa3, 0x58, 0xbb, 0xc7, 0xff, 0x34,
- 0xe3, 0xb3, 0x2b, 0x3d, 0x05, 0xf8, 0x0d, 0x2c, 0x25, 0x70, 0x0e, 0xb8, 0x1d, 0x42, 0xec, 0x24,
- 0x20, 0x05, 0xa7, 0xac, 0xc8, 0xe2, 0x19, 0x3c, 0x69, 0xa5, 0x74, 0xb4, 0x8c, 0x98, 0x04, 0x20,
- 0x03, 0x8a, 0xab, 0x4f, 0x70, 0x61, 0xc5, 0x05, 0x07, 0xb8, 0x6e, 0x87, 0x10, 0x3b, 0x0d, 0x4a,
- 0xc1, 0xa4, 0xc8, 0x52, 0x01, 0xba, 0x81, 0xd2, 0x90, 0x12, 0xa2, 0x1b, 0xf8, 0x04, 0x30, 0x79,
- 0xc4, 0xca, 0x39, 0x43, 0x4d, 0x4a, 0x49, 0xd0, 0x64, 0x43, 0xd8, 0x63, 0xe5, 0xaa, 0xee, 0xbc,
- 0x58, 0x83, 0x63, 0xe5, 0xba, 0x5a, 0xbc, 0x58, 0x13, 0xc7, 0xca, 0x3d, 0x00, 0x14, 0xf1, 0x24,
- 0xae, 0x04, 0x5e, 0x44, 0x29, 0x09, 0x16, 0xb1, 0x21, 0xec, 0x1c, 0xad, 0x8a, 0xb8, 0x14, 0x60,
- 0x8e, 0xd6, 0x05, 0x70, 0xce, 0x1a, 0xdc, 0x24, 0xe5, 0x76, 0x24, 0x51, 0xad, 0xc2, 0xc4, 0xf3,
- 0x94, 0x65, 0x49, 0x05, 0x46, 0x12, 0xfd, 0xdc, 0x1b, 0x29, 0x31, 0x92, 0xb4, 0x29, 0x10, 0x4a,
- 0xfa, 0x4d, 0x08, 0x56, 0x3b, 0xf0, 0x12, 0xe4, 0x76, 0x08, 0xb1, 0xe3, 0x53, 0x53, 0xe8, 0xdd,
- 0xb8, 0x2c, 0xd3, 0x7a, 0xf2, 0xdf, 0xc0, 0x0b, 0xd4, 0xc8, 0x89, 0xf1, 0x09, 0xe3, 0x40, 0xf7,
- 0x6a, 0x06, 0x6e, 0xac, 0x60, 0x70, 0xe8, 0xfe, 0x20, 0xc8, 0xd8, 0x8c, 0x53, 0x4a, 0x9c, 0x97,
- 0xe5, 0xd8, 0xd3, 0x44, 0xde, 0x95, 0x6f, 0x74, 0x61, 0xce, 0x37, 0x67, 0xc6, 0xc5, 0x11, 0x5f,
- 0xb1, 0x29, 0x7f, 0xf6, 0x3a, 0xad, 0xea, 0xe5, 0x96, 0x9e, 0xb9, 0x9f, 0x10, 0x96, 0x30, 0x98,
- 0xf8, 0xe6, 0xac, 0x53, 0xc9, 0x26, 0x10, 0xa0, 0x2c, 0xc7, 0xec, 0x15, 0x9a, 0x40, 0x40, 0x8b,
- 0x86, 0x23, 0x12, 0x88, 0x10, 0x6f, 0x77, 0xcc, 0x8c, 0x73, 0x7d, 0xd1, 0xc0, 0x94, 0x37, 0xb9,
- 0x1c, 0x65, 0x0d, 0x82, 0xc4, 0xa6, 0x45, 0x50, 0xc1, 0xae, 0x2f, 0x8d, 0x7f, 0xdb, 0xc5, 0xee,
- 0x11, 0x76, 0xda, 0xdd, 0xec, 0x7e, 0x0f, 0x12, 0x71, 0x65, 0x4f, 0x7c, 0x50, 0xae, 0xda, 0x07,
- 0x3e, 0xee, 0xf7, 0x20, 0x9d, 0xdd, 0x37, 0xb7, 0x5a, 0x4f, 0xe3, 0xd9, 0xd5, 0xbc, 0xe4, 0xcb,
- 0x3c, 0xd9, 0xe5, 0x19, 0x2f, 0xc1, 0xee, 0x9b, 0x57, 0x6a, 0x80, 0x12, 0xbb, 0x6f, 0x1d, 0x2a,
- 0x36, 0x83, 0x73, 0x4b, 0x31, 0xce, 0xd2, 0x39, 0x5c, 0x51, 0x7b, 0x86, 0x24, 0x40, 0x64, 0x70,
- 0x28, 0x88, 0x04, 0x91, 0x5a, 0x71, 0x8b, 0x74, 0x16, 0x67, 0xca, 0xdf, 0x0e, 0x6d, 0xc6, 0x03,
- 0x3b, 0x83, 0x08, 0x51, 0x40, 0xea, 0x39, 0x5d, 0x96, 0xf9, 0x41, 0x2e, 0x38, 0x59, 0xcf, 0x06,
- 0xe8, 0xac, 0xa7, 0x03, 0x82, 0x61, 0x75, 0xca, 0x5e, 0xd7, 0xa5, 0xa9, 0xff, 0xc1, 0x86, 0xd5,
- 0xfa, 0xef, 0x23, 0x2d, 0x0f, 0x0d, 0xab, 0x80, 0x03, 0x95, 0xd1, 0x4e, 0x54, 0xc0, 0x04, 0xb4,
- 0xfd, 0x30, 0xb9, 0xd7, 0x0d, 0xe2, 0x7e, 0x26, 0x62, 0x9d, 0xb1, 0x90, 0x1f, 0x09, 0xf4, 0xf1,
- 0xd3, 0x80, 0x76, 0xbb, 0xc5, 0xab, 0xcf, 0x25, 0x9b, 0x5d, 0xb5, 0x0e, 0xb0, 0xf9, 0x05, 0x55,
- 0x08, 0xb1, 0xdd, 0x42, 0xa0, 0x78, 0x13, 0x1d, 0xcc, 0x78, 0x1e, 0x6a, 0xa2, 0x5a, 0xde, 0xa7,
- 0x89, 0x34, 0x67, 0x17, 0xbf, 0x46, 0xaa, 0x23, 0x53, 0x35, 0xd3, 0x16, 0x61, 0xc1, 0x85, 0x88,
- 0xc5, 0x2f, 0x09, 0xdb, 0x9c, 0x1c, 0xfa, 0x3c, 0x6a, 0x9f, 0xee, 0x6f, 0x59, 0x39, 0xa2, 0x4f,
- 0xf7, 0x53, 0x2c, 0x5d, 0x49, 0x15, 0x23, 0x1d, 0x56, 0xfc, 0x38, 0x79, 0xd8, 0x0f, 0xb6, 0x4b,
- 0x1e, 0xcf, 0xe7, 0x6e, 0xc6, 0xe2, 0x52, 0x79, 0xdd, 0x0e, 0x18, 0xb2, 0x18, 0xb1, 0xe4, 0x09,
- 0xe0, 0x60, 0x08, 0xf3, 0x3c, 0xef, 0xf2, 0x5c, 0xb0, 0x5c, 0x60, 0x43, 0x98, 0x6f, 0x4c, 0x83,
- 0xa1, 0x21, 0x8c, 0x52, 0x00, 0x71, 0x2b, 0xf7, 0x83, 0x98, 0x38, 0x8e, 0x17, 0x68, 0xc6, 0xa6,
- 0xf6, 0x7a, 0x94, 0x3c, 0x14, 0xb7, 0x80, 0x73, 0x5e, 0xe7, 0xba, 0x5e, 0xa6, 0x71, 0x39, 0x37,
- 0xbb, 0x1b, 0xc9, 0xf0, 0x11, 0x6d, 0xc7, 0x27, 0x89, 0xd7, 0xb9, 0x61, 0x0d, 0x30, 0xec, 0x1c,
- 0x2c, 0xe2, 0xb9, 0xa9, 0x29, 0x52, 0x03, 0x29, 0x6f, 0x55, 0xf5, 0x5e, 0x37, 0x08, 0xfc, 0xbc,
- 0x48, 0x13, 0xc6, 0x03, 0x7e, 0xa4, 0xbc, 0x8f, 0x1f, 0x08, 0x82, 0xec, 0xad, 0xae, 0xb7, 0x5a,
- 0xd1, 0x8d, 0xf3, 0x44, 0xaf, 0x63, 0x47, 0xc4, 0xe3, 0x01, 0x5c, 0x28, 0x7b, 0x23, 0x78, 0xd0,
- 0x47, 0x9b, 0x0d, 0xda, 0x50, 0x1f, 0x35, 0xfb, 0xaf, 0x7d, 0xfa, 0x28, 0x06, 0x6b, 0x9f, 0x3f,
- 0xd1, 0x7d, 0x74, 0x2f, 0x16, 0x71, 0x9d, 0xb7, 0xbf, 0x48, 0xd9, 0x2b, 0xbd, 0x10, 0x46, 0xea,
- 0xdb, 0x50, 0x23, 0xf9, 0x71, 0x32, 0x58, 0x15, 0xef, 0xf4, 0xe6, 0x03, 0xbe, 0xf5, 0x0a, 0xa1,
- 0xd3, 0x37, 0x58, 0x2a, 0xec, 0xf4, 0xe6, 0x03, 0xbe, 0xf5, 0xad, 0x07, 0x9d, 0xbe, 0xc1, 0xd5,
- 0x07, 0x3b, 0xbd, 0x79, 0xed, 0xfb, 0x4f, 0x9b, 0x8e, 0xeb, 0x3a, 0xaf, 0xf3, 0xb0, 0x99, 0x48,
- 0x57, 0x0c, 0x4b, 0x27, 0x7d, 0x7b, 0x06, 0x0d, 0xa5, 0x93, 0xb4, 0x8a, 0x73, 0xef, 0x18, 0x56,
- 0x8a, 0x13, 0x5e, 0xa5, 0xf2, 0x38, 0xc6, 0x93, 0x1e, 0x46, 0x1b, 0x38, 0xb4, 0x68, 0x0a, 0x29,
- 0xd9, 0x17, 0xcb, 0x1e, 0x6a, 0xcf, 0xab, 0x3f, 0x0c, 0xd8, 0x6b, 0x1f, 0x5b, 0xdf, 0xee, 0x49,
- 0xdb, 0x57, 0xbc, 0x1e, 0xe3, 0xbe, 0x5b, 0x0e, 0xb5, 0x2a, 0xfa, 0x7a, 0xf9, 0x51, 0x7f, 0x05,
- 0xed, 0xfe, 0xcf, 0x9b, 0x75, 0x05, 0xf4, 0xaf, 0x3b, 0xc1, 0xe3, 0x3e, 0x16, 0x41, 0x47, 0x78,
- 0x72, 0x2d, 0x1d, 0x5d, 0x90, 0xbf, 0x6e, 0x16, 0xd0, 0x0d, 0x2a, 0xbf, 0xda, 0x91, 0x5f, 0xfb,
- 0xea, 0x3e, 0x11, 0x6a, 0x56, 0x0b, 0xc3, 0x9e, 0xf1, 0xf1, 0x35, 0xb5, 0x9c, 0x5b, 0xe8, 0x3c,
- 0x58, 0x7f, 0x5d, 0xea, 0x94, 0x27, 0x64, 0xd9, 0xa1, 0x61, 0x81, 0x3e, 0xb9, 0xae, 0x1a, 0xd5,
- 0x57, 0x1c, 0x58, 0xde, 0xc3, 0xf2, 0xa4, 0xa7, 0x61, 0xef, 0x66, 0x96, 0x8f, 0xae, 0xa7, 0xa4,
- 0xcb, 0xf2, 0x6f, 0x83, 0xe8, 0xae, 0xc7, 0xda, 0xf7, 0x09, 0x60, 0xd7, 0xe3, 0x07, 0x01, 0xfb,
- 0x94, 0x92, 0x29, 0xdc, 0x6f, 0x7c, 0x33, 0x65, 0x7b, 0x65, 0x9b, 0xa7, 0xf2, 0x3c, 0xcd, 0x04,
- 0x2b, 0xdb, 0x57, 0xb6, 0xf9, 0x76, 0x15, 0x35, 0xa2, 0xaf, 0x6c, 0x0b, 0xe0, 0xce, 0x95, 0x6d,
- 0x88, 0x67, 0xf4, 0xca, 0x36, 0xd4, 0x5a, 0xf0, 0xca, 0xb6, 0xb0, 0x06, 0x35, 0xbc, 0x37, 0x45,
- 0x50, 0xfb, 0xd6, 0xbd, 0x2c, 0xfa, 0xdb, 0xd8, 0x8f, 0xaf, 0xa3, 0x42, 0x4c, 0x70, 0x8a, 0x93,
- 0x27, 0x1a, 0x7b, 0x3c, 0x53, 0xef, 0x54, 0xe3, 0x4e, 0x6f, 0x5e, 0xfb, 0xfe, 0xb1, 0x5e, 0xdd,
- 0x98, 0xe1, 0x9c, 0x97, 0xf2, 0xba, 0xbe, 0xad, 0xd0, 0xf0, 0x5c, 0x5b, 0x70, 0x5b, 0xfe, 0x61,
- 0x3f, 0x98, 0xa8, 0x6e, 0x4d, 0xe8, 0x46, 0x1f, 0x75, 0x19, 0x02, 0x4d, 0xbe, 0xd3, 0x9b, 0x27,
- 0xa6, 0x11, 0xe5, 0x5b, 0xb5, 0x76, 0x0f, 0x63, 0x7e, 0x5b, 0x3f, 0xea, 0xaf, 0xa0, 0xdd, 0xaf,
- 0x74, 0xda, 0xe8, 0xba, 0x97, 0xed, 0xbc, 0xdd, 0x65, 0x6a, 0xe2, 0x35, 0xf3, 0xa8, 0x2f, 0x1e,
- 0x4a, 0x20, 0xdc, 0x29, 0xb4, 0x2b, 0x81, 0x40, 0xa7, 0xd1, 0x8f, 0xae, 0xa7, 0xa4, 0xcb, 0xf2,
- 0x77, 0x83, 0xe8, 0x26, 0x59, 0x16, 0x1d, 0x07, 0x9f, 0xf4, 0xb5, 0x0c, 0xe2, 0xe1, 0xd3, 0x6b,
- 0xeb, 0xe9, 0x42, 0xfd, 0xe3, 0x20, 0xba, 0x15, 0x28, 0x94, 0x0a, 0x90, 0x6b, 0x58, 0xf7, 0x03,
- 0xe5, 0xb3, 0xeb, 0x2b, 0x52, 0xd3, 0xbd, 0x8b, 0x4f, 0xda, 0xd7, 0x6f, 0x05, 0x6c, 0x4f, 0xe8,
- 0xeb, 0xb7, 0xba, 0xb5, 0xe0, 0x26, 0x4f, 0x7c, 0xde, 0x2c, 0xba, 0xd0, 0x4d, 0x1e, 0x79, 0x16,
- 0x31, 0x78, 0x8d, 0x08, 0xc6, 0x61, 0x4e, 0x9e, 0xbd, 0x2e, 0xe2, 0x3c, 0xa1, 0x9d, 0x28, 0x79,
- 0xb7, 0x13, 0xc3, 0xc1, 0xcd, 0xb1, 0x5a, 0x7a, 0xca, 0x9b, 0x85, 0xd4, 0x7d, 0x4a, 0xdf, 0x20,
- 0xc1, 0xcd, 0xb1, 0x16, 0x4a, 0x78, 0xd3, 0x59, 0x63, 0xc8, 0x1b, 0x48, 0x16, 0x1f, 0xf4, 0x41,
- 0x41, 0x8a, 0x6e, 0xbc, 0x99, 0x3d, 0xf7, 0x87, 0x21, 0x2b, 0xad, 0x7d, 0xf7, 0xed, 0x9e, 0x34,
- 0xe1, 0x76, 0xc2, 0xc4, 0xe7, 0x2c, 0x4e, 0x58, 0x19, 0x74, 0x6b, 0xa8, 0x5e, 0x6e, 0x5d, 0x1a,
- 0x73, 0xbb, 0xcb, 0xb3, 0xe5, 0x22, 0xd7, 0x8d, 0x49, 0xba, 0x75, 0xa9, 0x6e, 0xb7, 0x80, 0x86,
- 0xdb, 0x82, 0xd6, 0xad, 0x4c, 0x2f, 0x1f, 0x84, 0xcd, 0x78, 0x59, 0xe5, 0x56, 0x2f, 0x96, 0xae,
- 0xa7, 0x0e, 0xa3, 0x8e, 0x7a, 0x82, 0x48, 0xda, 0xee, 0x49, 0xc3, 0xfd, 0x39, 0xc7, 0xad, 0x89,
- 0xa7, 0x9d, 0x0e, 0x5b, 0xad, 0x90, 0x7a, 0xd4, 0x5f, 0x01, 0xee, 0x86, 0xea, 0xa8, 0x3a, 0x4c,
- 0x2b, 0xf1, 0x3c, 0xcd, 0xb2, 0xe1, 0x56, 0x20, 0x4c, 0x1a, 0x28, 0xb8, 0x1b, 0x8a, 0xc0, 0x44,
- 0x24, 0x37, 0xbb, 0x87, 0xf9, 0xb0, 0xcb, 0x8e, 0xa4, 0x7a, 0x45, 0xb2, 0x4b, 0x83, 0x1d, 0x2d,
- 0xe7, 0x51, 0x9b, 0xda, 0x8e, 0xc2, 0x0f, 0xae, 0x55, 0xe1, 0x9d, 0xde, 0x3c, 0x78, 0xdd, 0x2e,
- 0x29, 0x39, 0xb3, 0xdc, 0xa1, 0x4c, 0x78, 0x33, 0xc9, 0xdd, 0x0e, 0x0a, 0xec, 0x0a, 0xaa, 0x6e,
- 0xf4, 0x32, 0x4d, 0xe6, 0x4c, 0xa0, 0x6f, 0x8a, 0x5c, 0x20, 0xf8, 0xa6, 0x08, 0x80, 0xa0, 0xe9,
- 0xd4, 0xdf, 0xcd, 0x76, 0xe8, 0x41, 0x82, 0x35, 0x9d, 0x56, 0x76, 0xa8, 0x50, 0xd3, 0xa1, 0x34,
- 0x18, 0x0d, 0x8c, 0x5b, 0x7d, 0xf1, 0xc2, 0x83, 0x90, 0x19, 0x70, 0xfb, 0xc2, 0x56, 0x2f, 0x16,
- 0xcc, 0x28, 0xd6, 0x61, 0xba, 0x48, 0x05, 0x36, 0xa3, 0x38, 0x36, 0x6a, 0x24, 0x34, 0xa3, 0xb4,
- 0x51, 0xaa, 0x7a, 0x75, 0x8e, 0x70, 0x90, 0x84, 0xab, 0xa7, 0x98, 0x7e, 0xd5, 0x33, 0x6c, 0xeb,
- 0xc5, 0x66, 0x6e, 0x42, 0x46, 0x5c, 0xea, 0xc5, 0x32, 0x12, 0xdb, 0xf2, 0x83, 0x5c, 0x08, 0x86,
- 0x46, 0x1d, 0x4a, 0x01, 0x6e, 0xd8, 0xd7, 0x5c, 0xf3, 0xee, 0xb5, 0x28, 0x58, 0x5c, 0xc6, 0xf9,
- 0x0c, 0x5d, 0x9c, 0x4a, 0x83, 0x2d, 0x32, 0xb4, 0x38, 0x25, 0x35, 0xc0, 0x6b, 0x73, 0xff, 0x53,
- 0x5a, 0xa4, 0x2b, 0x98, 0x6f, 0x56, 0xfd, 0x2f, 0x69, 0xef, 0xf7, 0x20, 0xe1, 0x6b, 0xf3, 0x06,
- 0x30, 0x1b, 0xdf, 0xca, 0xe9, 0x87, 0x01, 0x53, 0x3e, 0x1a, 0x5a, 0x08, 0xd3, 0x2a, 0x20, 0xa8,
- 0x4d, 0x82, 0xcb, 0xc4, 0x8f, 0xd8, 0x1a, 0x0b, 0x6a, 0x9b, 0x9f, 0x4a, 0x24, 0x14, 0xd4, 0x6d,
- 0x14, 0xe4, 0x99, 0xee, 0x3a, 0x68, 0x23, 0xa0, 0xef, 0x2e, 0x7d, 0x36, 0x3b, 0x39, 0xd0, 0x73,
- 0xf6, 0xd2, 0x95, 0xf7, 0x9e, 0x00, 0x29, 0xe8, 0x5e, 0xba, 0xc2, 0x5f, 0x13, 0x6c, 0xf5, 0x62,
- 0xe1, 0x2b, 0xf9, 0x58, 0xb0, 0xd7, 0xcd, 0xbb, 0x72, 0xa4, 0xb8, 0x52, 0xde, 0x7a, 0x59, 0x7e,
- 0xaf, 0x1b, 0xb4, 0x07, 0x60, 0x4f, 0x4a, 0x3e, 0x63, 0x55, 0xa5, 0xef, 0x24, 0xf5, 0x4f, 0x18,
- 0x69, 0xd9, 0x08, 0xdc, 0x48, 0x7a, 0x27, 0x0c, 0x39, 0x17, 0x09, 0x2a, 0x91, 0xbd, 0xdf, 0x68,
- 0x03, 0xd5, 0x6c, 0x5f, 0x6d, 0xb4, 0xd9, 0xc9, 0xd9, 0xee, 0xa5, 0xa5, 0xee, 0x85, 0x46, 0xf7,
- 0x50, 0x75, 0xec, 0x2e, 0xa3, 0xfb, 0x3d, 0x48, 0xed, 0xea, 0xf3, 0xe8, 0xcd, 0x43, 0x3e, 0x9f,
- 0xb0, 0x3c, 0x19, 0x7e, 0xcf, 0x3f, 0x42, 0xcb, 0xe7, 0xa3, 0xfa, 0xcf, 0xc6, 0xe8, 0x0d, 0x4a,
- 0x6c, 0x0f, 0x01, 0xee, 0xb1, 0xf3, 0xe5, 0x7c, 0x22, 0x62, 0x01, 0x0e, 0x01, 0xca, 0xbf, 0x8f,
- 0x6a, 0x01, 0x71, 0x08, 0xd0, 0x03, 0x80, 0xbd, 0x69, 0xc9, 0x18, 0x6a, 0xaf, 0x16, 0x04, 0xed,
- 0x69, 0xc0, 0x66, 0x11, 0xc6, 0x5e, 0x9d, 0xa8, 0xc3, 0x43, 0x7b, 0x56, 0x47, 0x4a, 0x89, 0x2c,
- 0xa2, 0x4d, 0xd9, 0xe0, 0x56, 0xd5, 0x97, 0xf7, 0xcb, 0x2c, 0x17, 0x8b, 0xb8, 0x5c, 0x83, 0xe0,
- 0xd6, 0xb5, 0x74, 0x00, 0x22, 0xb8, 0x51, 0xd0, 0xf6, 0xda, 0xe6, 0x31, 0xcf, 0xae, 0xf6, 0x79,
- 0xc9, 0x97, 0x22, 0xcd, 0x19, 0xbc, 0x63, 0xc4, 0x3c, 0x50, 0x97, 0x21, 0x7a, 0x2d, 0xc5, 0xda,
- 0x2c, 0x57, 0x12, 0xea, 0x3c, 0xa1, 0xbc, 0x26, 0xbd, 0x12, 0xbc, 0x84, 0xef, 0x13, 0x95, 0x15,
- 0x08, 0x11, 0x59, 0x2e, 0x09, 0x83, 0xb6, 0x3f, 0x49, 0xf3, 0x39, 0xda, 0xf6, 0x27, 0xee, 0x3d,
- 0xbf, 0xb7, 0x68, 0xc0, 0x76, 0x28, 0xf5, 0xd0, 0x54, 0x07, 0xd0, 0x5f, 0xed, 0xa2, 0x0f, 0xdd,
- 0x25, 0x88, 0x0e, 0x85, 0x93, 0xc0, 0xd5, 0x17, 0x05, 0xcb, 0x59, 0xd2, 0x9c, 0x9a, 0xc3, 0x5c,
- 0x79, 0x44, 0xd0, 0x15, 0x24, 0xed, 0x58, 0x24, 0xe5, 0xa7, 0xcb, 0xfc, 0xa4, 0xe4, 0x17, 0x69,
- 0xc6, 0x4a, 0x30, 0x16, 0x29, 0x75, 0x47, 0x4e, 0x8c, 0x45, 0x18, 0x67, 0x8f, 0x5f, 0x48, 0xa9,
- 0x77, 0xd7, 0xff, 0xb4, 0x8c, 0x67, 0xf0, 0xf8, 0x85, 0xb2, 0xd1, 0xc6, 0x88, 0x9d, 0xc1, 0x00,
- 0xee, 0x24, 0x3a, 0xca, 0x75, 0xbe, 0x96, 0xf1, 0xa1, 0xbf, 0x1a, 0x95, 0xb7, 0xdf, 0x56, 0x20,
- 0xd1, 0xd1, 0xe6, 0x30, 0x92, 0x48, 0x74, 0xc2, 0x1a, 0x76, 0x2a, 0x91, 0xdc, 0xb1, 0x3e, 0x56,
- 0x04, 0xa6, 0x12, 0x65, 0xa3, 0x11, 0x12, 0x53, 0x49, 0x0b, 0x02, 0x03, 0x52, 0xd3, 0x0d, 0xe6,
- 0xe8, 0x80, 0x64, 0xa4, 0xc1, 0x01, 0xc9, 0xa5, 0xec, 0x40, 0x71, 0x90, 0xa7, 0x22, 0x8d, 0xb3,
- 0x09, 0x13, 0x27, 0x71, 0x19, 0x2f, 0x98, 0x60, 0x25, 0x1c, 0x28, 0x34, 0x32, 0xf2, 0x18, 0x62,
- 0xa0, 0xa0, 0x58, 0xed, 0xf0, 0x37, 0xa3, 0xb7, 0xeb, 0x79, 0x9f, 0xe5, 0xfa, 0x57, 0x8a, 0x9e,
- 0xc9, 0x9f, 0x37, 0x1b, 0xbe, 0x63, 0x6c, 0x4c, 0x44, 0xc9, 0xe2, 0x45, 0x63, 0xfb, 0x2d, 0xf3,
- 0x77, 0x09, 0x3e, 0x1a, 0xd4, 0xf1, 0x7c, 0xcc, 0x45, 0x7a, 0x51, 0x2f, 0xb3, 0xf5, 0x17, 0x44,
- 0x20, 0x9e, 0x5d, 0xf1, 0x28, 0x70, 0xeb, 0x08, 0xc6, 0xd9, 0x71, 0xda, 0x95, 0x9e, 0xb2, 0x22,
- 0x83, 0xe3, 0xb4, 0xa7, 0x2d, 0x01, 0x62, 0x9c, 0x46, 0x41, 0xdb, 0x39, 0x5d, 0xf1, 0x94, 0x85,
- 0x2b, 0x33, 0x65, 0xfd, 0x2a, 0x33, 0xf5, 0x3e, 0xca, 0xc8, 0xa2, 0xb7, 0x8f, 0xd8, 0xe2, 0x9c,
- 0x95, 0xd5, 0x65, 0x5a, 0x50, 0x37, 0xf4, 0x5a, 0xa2, 0xf3, 0x86, 0x5e, 0x02, 0xb5, 0x33, 0x81,
- 0x05, 0x0e, 0xaa, 0xe3, 0x78, 0xc1, 0xe4, 0x1d, 0x2a, 0x60, 0x26, 0x70, 0x8c, 0x38, 0x10, 0x31,
- 0x13, 0x90, 0xb0, 0xf3, 0x7d, 0x97, 0x65, 0x4e, 0xd9, 0xbc, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0x2f,
- 0x58, 0x2e, 0xb4, 0x49, 0xb0, 0x27, 0xef, 0x98, 0xc4, 0x79, 0x62, 0x4f, 0xbe, 0x8f, 0x9e, 0x33,
- 0x34, 0x79, 0x0f, 0xfe, 0x84, 0x97, 0x42, 0xfd, 0x06, 0xd9, 0x59, 0x99, 0x81, 0xa1, 0xc9, 0x7f,
- 0xa8, 0x1e, 0x49, 0x0c, 0x4d, 0x61, 0x0d, 0xe7, 0xf7, 0x26, 0xbc, 0x32, 0xbc, 0x60, 0xa5, 0x89,
- 0x93, 0x67, 0x8b, 0x38, 0xcd, 0x74, 0x34, 0x7c, 0x3f, 0x60, 0x9b, 0xd0, 0x21, 0x7e, 0x6f, 0xa2,
- 0xaf, 0xae, 0xf3, 0x0b, 0x1d, 0xe1, 0x12, 0x82, 0x57, 0x04, 0x1d, 0xf6, 0x89, 0x57, 0x04, 0xdd,
- 0x5a, 0x76, 0xe5, 0x6e, 0x59, 0xc9, 0xad, 0x25, 0xb1, 0xcb, 0x13, 0xb8, 0x5f, 0xe8, 0xd8, 0x04,
- 0x20, 0xb1, 0x72, 0x0f, 0x2a, 0xd8, 0xd4, 0xc0, 0x62, 0xcf, 0xd3, 0x3c, 0xce, 0xd2, 0x9f, 0xc0,
- 0xb4, 0xde, 0xb1, 0xd3, 0x10, 0x44, 0x6a, 0x80, 0x93, 0x98, 0xab, 0x7d, 0x26, 0xa6, 0x69, 0x3d,
- 0xf4, 0xdf, 0x0b, 0x3c, 0x37, 0x49, 0x74, 0xbb, 0x72, 0x48, 0xe7, 0x36, 0x5e, 0xf8, 0x58, 0xc7,
- 0x45, 0x31, 0xa9, 0x67, 0xd5, 0x53, 0x36, 0x63, 0x69, 0x21, 0x86, 0x1f, 0x87, 0x9f, 0x15, 0xc0,
- 0x89, 0x83, 0x16, 0x3d, 0xd4, 0x9c, 0xd7, 0xf7, 0xf5, 0x58, 0x32, 0x51, 0x3f, 0xce, 0x79, 0x56,
- 0xb1, 0x52, 0x27, 0x1a, 0xfb, 0x4c, 0x80, 0xde, 0xe9, 0x70, 0x23, 0x07, 0xac, 0x2b, 0x4a, 0xf4,
- 0xce, 0xb0, 0x86, 0xdd, 0xec, 0x73, 0x38, 0x7d, 0xbb, 0xba, 0x3c, 0x6f, 0xf8, 0x90, 0x34, 0xe6,
- 0x50, 0xc4, 0x66, 0x1f, 0x4d, 0xdb, 0x6c, 0xad, 0xed, 0x76, 0x9c, 0xaf, 0x0f, 0xe0, 0x91, 0x09,
- 0xc4, 0x92, 0xc4, 0x88, 0x6c, 0x2d, 0x80, 0x3b, 0x9b, 0xe1, 0x25, 0x8f, 0x93, 0x59, 0x5c, 0x89,
- 0x93, 0x78, 0x9d, 0xf1, 0x38, 0x91, 0xf3, 0x3a, 0xdc, 0x0c, 0x6f, 0x98, 0x91, 0x0b, 0x51, 0x9b,
- 0xe1, 0x14, 0xec, 0x66, 0x67, 0xf2, 0x37, 0x47, 0xf5, 0x59, 0x4e, 0x98, 0x9d, 0xc9, 0xf2, 0xc2,
- 0x73, 0x9c, 0x77, 0xc2, 0x90, 0xfd, 0x06, 0x4d, 0x89, 0x64, 0x1a, 0x72, 0x0b, 0xd3, 0xf1, 0x12,
- 0x90, 0xf7, 0x03, 0x84, 0xbd, 0x81, 0x44, 0xfd, 0xbd, 0xf9, 0x99, 0x29, 0xa1, 0xef, 0x2c, 0x7f,
- 0x88, 0xe9, 0xba, 0xd0, 0xc8, 0xbd, 0xc8, 0x62, 0xbb, 0x27, 0x6d, 0xd3, 0xcc, 0xdd, 0xcb, 0x58,
- 0x8c, 0x93, 0xe4, 0x88, 0x55, 0xc8, 0x07, 0xe5, 0xb5, 0x70, 0x64, 0xa5, 0x44, 0x9a, 0xd9, 0xa6,
- 0x6c, 0xa0, 0xd7, 0xb2, 0x67, 0x49, 0x2a, 0xb4, 0xac, 0x39, 0x21, 0xfd, 0xb0, 0x6d, 0xa0, 0x4d,
- 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x96, 0xd7, 0xcc, 0x94, 0xcf, 0xe7, 0x19, 0xd3, 0xd0, 0x29, 0x8b,
- 0xd5, 0x95, 0x8d, 0x3b, 0x6d, 0x5b, 0x28, 0x48, 0x8c, 0xe5, 0x41, 0x05, 0x9b, 0x46, 0xd6, 0x98,
- 0x7a, 0x25, 0xd5, 0x3c, 0xd8, 0xcd, 0xb6, 0x19, 0x0f, 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xdf, 0xbd,
- 0xd5, 0xe2, 0x7d, 0xd6, 0x3c, 0x09, 0x78, 0xd9, 0x94, 0x54, 0x76, 0xc4, 0xc4, 0x77, 0x6f, 0x08,
- 0x66, 0xd7, 0x09, 0xc0, 0xc3, 0xd3, 0xf5, 0x41, 0x02, 0xd7, 0x09, 0x50, 0x5f, 0x32, 0xc4, 0x3a,
- 0x81, 0x62, 0xfd, 0xa6, 0x33, 0xfb, 0x5e, 0x87, 0x71, 0x65, 0x2b, 0x87, 0x34, 0x1d, 0x0a, 0x86,
- 0x9a, 0x8e, 0x52, 0xf0, 0x1f, 0xa9, 0xbb, 0xb5, 0x86, 0x3c, 0x52, 0x6c, 0x5f, 0x6d, 0xa3, 0x0b,
- 0xb3, 0xb9, 0x7f, 0x2d, 0x3c, 0x65, 0x71, 0x62, 0x2a, 0x86, 0xe8, 0xba, 0x72, 0x22, 0xf7, 0xc7,
- 0x38, 0xed, 0xe4, 0x77, 0xa2, 0xa1, 0xaa, 0x46, 0xe9, 0xba, 0xb9, 0x85, 0x15, 0xb1, 0x26, 0x88,
- 0x81, 0xca, 0x27, 0x9c, 0xc4, 0xcd, 0x6b, 0xa2, 0x29, 0xd7, 0x0e, 0xf4, 0x77, 0x99, 0x15, 0x48,
- 0xdc, 0xfc, 0xc7, 0xde, 0xa2, 0x89, 0xc4, 0xad, 0x5b, 0xcb, 0x8e, 0xf3, 0x66, 0x7d, 0x2e, 0x8f,
- 0x80, 0xe1, 0xbf, 0x7d, 0xa1, 0x84, 0xc4, 0x38, 0xdf, 0x82, 0x94, 0xed, 0xa7, 0xef, 0xff, 0xc7,
- 0x57, 0x37, 0x06, 0x3f, 0xfb, 0xea, 0xc6, 0xe0, 0xbf, 0xbe, 0xba, 0x31, 0xf8, 0xe9, 0xd7, 0x37,
- 0xde, 0xf8, 0xd9, 0xd7, 0x37, 0xde, 0xf8, 0xcf, 0xaf, 0x6f, 0xbc, 0xf1, 0xe5, 0x9b, 0xfa, 0xb7,
- 0xbd, 0xcf, 0xff, 0x9f, 0xfc, 0x85, 0xee, 0x27, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x49, 0x2e,
- 0xb9, 0x13, 0xff, 0x7b, 0x00, 0x00,
+ // 5583 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0x5b, 0x8f, 0x1c, 0x49,
+ 0x56, 0xf8, 0xa7, 0x5e, 0xfe, 0xf3, 0x27, 0x97, 0x1d, 0xa0, 0x06, 0x86, 0xd9, 0x61, 0xd7, 0xf6,
+ 0x78, 0xec, 0x6e, 0xdb, 0xed, 0xae, 0xf6, 0xd8, 0x73, 0x63, 0x17, 0x09, 0xca, 0xdd, 0x76, 0x4f,
+ 0xef, 0x76, 0xf7, 0x34, 0x5d, 0xd5, 0xb6, 0x18, 0x09, 0x89, 0xec, 0xca, 0xe8, 0xea, 0xa4, 0xb3,
+ 0x32, 0x72, 0x33, 0xa3, 0xca, 0xae, 0x45, 0x20, 0x10, 0x08, 0x04, 0x02, 0xb1, 0xe2, 0x26, 0x78,
+ 0x42, 0xe2, 0x13, 0xf0, 0x31, 0x78, 0x41, 0xda, 0x47, 0x1e, 0xd1, 0xcc, 0x87, 0xe0, 0x15, 0x65,
+ 0x44, 0x64, 0x5c, 0x4e, 0x9e, 0x13, 0x99, 0x3d, 0x3c, 0xd9, 0xea, 0xf3, 0x3b, 0xe7, 0xc4, 0xe5,
+ 0x44, 0xc4, 0x89, 0xc8, 0xc8, 0xac, 0xe8, 0x66, 0x71, 0xbe, 0x53, 0x94, 0x5c, 0xf0, 0x6a, 0xa7,
+ 0x62, 0xe5, 0x2a, 0x9d, 0xb1, 0xe6, 0xdf, 0x91, 0xfc, 0xf3, 0xf0, 0xcd, 0x38, 0x5f, 0x8b, 0x75,
+ 0xc1, 0xde, 0x7b, 0xd7, 0x92, 0x33, 0xbe, 0x58, 0xc4, 0x79, 0x52, 0x29, 0xe4, 0xbd, 0x77, 0xac,
+ 0x84, 0xad, 0x58, 0x2e, 0xf4, 0xdf, 0x1f, 0xff, 0xe7, 0xff, 0x0c, 0xa2, 0xb7, 0x76, 0xb3, 0x94,
+ 0xe5, 0x62, 0x57, 0x6b, 0x0c, 0xbf, 0x8c, 0xbe, 0x3d, 0x2e, 0x8a, 0x7d, 0x26, 0x5e, 0xb0, 0xb2,
+ 0x4a, 0x79, 0x3e, 0xfc, 0x60, 0xa4, 0x1d, 0x8c, 0x4e, 0x8b, 0xd9, 0x68, 0x5c, 0x14, 0x23, 0x2b,
+ 0x1c, 0x9d, 0xb2, 0x1f, 0x2f, 0x59, 0x25, 0xde, 0xbb, 0x13, 0x86, 0xaa, 0x82, 0xe7, 0x15, 0x1b,
+ 0x5e, 0x44, 0xbf, 0x34, 0x2e, 0x8a, 0x09, 0x13, 0x7b, 0xac, 0xae, 0xc0, 0x44, 0xc4, 0x82, 0x0d,
+ 0x37, 0x5b, 0xaa, 0x3e, 0x60, 0x7c, 0xdc, 0xeb, 0x06, 0xb5, 0x9f, 0x69, 0xf4, 0xad, 0xda, 0xcf,
+ 0xe5, 0x52, 0x24, 0xfc, 0x55, 0x3e, 0x7c, 0xbf, 0xad, 0xa8, 0x45, 0xc6, 0xf6, 0xed, 0x10, 0xa2,
+ 0xad, 0xbe, 0x8c, 0x7e, 0xfe, 0x65, 0x9c, 0x65, 0x4c, 0xec, 0x96, 0xac, 0x2e, 0xb8, 0xaf, 0xa3,
+ 0x44, 0x23, 0x25, 0x33, 0x76, 0x3f, 0x08, 0x32, 0xda, 0xf0, 0x97, 0xd1, 0xb7, 0x95, 0xe4, 0x94,
+ 0xcd, 0xf8, 0x8a, 0x95, 0x43, 0x54, 0x4b, 0x0b, 0x89, 0x26, 0x6f, 0x41, 0xd0, 0xf6, 0x2e, 0xcf,
+ 0x57, 0xac, 0x14, 0xb8, 0x6d, 0x2d, 0x0c, 0xdb, 0xb6, 0x90, 0xb6, 0xfd, 0x97, 0x83, 0xe8, 0xbb,
+ 0xe3, 0xd9, 0x8c, 0x2f, 0x73, 0x71, 0xc8, 0x67, 0x71, 0x76, 0x98, 0xe6, 0x57, 0xc7, 0xec, 0xd5,
+ 0xee, 0x65, 0xcd, 0xe7, 0x73, 0x36, 0x7c, 0xe2, 0xb7, 0xaa, 0x42, 0x47, 0x86, 0x1d, 0xb9, 0xb0,
+ 0xf1, 0xfd, 0xd1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x76, 0x10, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0x6c,
+ 0xc5, 0x6c, 0x69, 0x3e, 0xee, 0x30, 0xec, 0xe3, 0xa6, 0x3c, 0x9f, 0x5c, 0x57, 0x4d, 0x97, 0x28,
+ 0x8b, 0xde, 0x76, 0xc3, 0x65, 0xc2, 0x2a, 0x39, 0x9c, 0xee, 0xd3, 0x11, 0xa1, 0x11, 0xe3, 0xf9,
+ 0x41, 0x1f, 0x54, 0x7b, 0x4b, 0xa3, 0xa1, 0xf6, 0x96, 0xf1, 0xca, 0x38, 0xbb, 0x87, 0x5a, 0x70,
+ 0x08, 0xe3, 0xeb, 0x7e, 0x0f, 0x52, 0xbb, 0xfa, 0xbd, 0xe8, 0x17, 0x5e, 0xf2, 0xf2, 0xaa, 0x2a,
+ 0xe2, 0x19, 0xd3, 0x43, 0xe1, 0xae, 0xaf, 0xdd, 0x48, 0xe1, 0x68, 0xd8, 0xe8, 0xc2, 0x9c, 0xa0,
+ 0x6d, 0x84, 0x5f, 0x14, 0x0c, 0xce, 0x41, 0x56, 0xb1, 0x16, 0x52, 0x41, 0x0b, 0x21, 0x6d, 0xfb,
+ 0x2a, 0x1a, 0x5a, 0xdb, 0xe7, 0xbf, 0xcf, 0x66, 0x62, 0x9c, 0x24, 0xb0, 0x57, 0xac, 0xae, 0x24,
+ 0x46, 0xe3, 0x24, 0xa1, 0x7a, 0x05, 0x47, 0xb5, 0xb3, 0x57, 0xd1, 0x3b, 0xc0, 0xd9, 0x61, 0x5a,
+ 0x49, 0x87, 0xdb, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x47, 0x7d, 0x71, 0xed, 0xf8, 0x8f, 0x07, 0xd1,
+ 0x77, 0x10, 0xcf, 0xa7, 0x6c, 0xc1, 0x57, 0x6c, 0xf8, 0xa8, 0xdb, 0x9a, 0x22, 0x8d, 0xff, 0x0f,
+ 0xaf, 0xa1, 0x81, 0x84, 0xc9, 0x84, 0x65, 0x6c, 0x26, 0xc8, 0x30, 0x51, 0xe2, 0xce, 0x30, 0x31,
+ 0x98, 0x33, 0xc2, 0x1a, 0xe1, 0x3e, 0x13, 0xbb, 0xcb, 0xb2, 0x64, 0xb9, 0x20, 0xfb, 0xd2, 0x22,
+ 0x9d, 0x7d, 0xe9, 0xa1, 0x48, 0x7d, 0xf6, 0x99, 0x18, 0x67, 0x19, 0x59, 0x1f, 0x25, 0xee, 0xac,
+ 0x8f, 0xc1, 0xb4, 0x87, 0x59, 0xf4, 0x8b, 0x4e, 0x8b, 0x89, 0x83, 0xfc, 0x82, 0x0f, 0xe9, 0xb6,
+ 0x90, 0x72, 0xe3, 0x63, 0xb3, 0x93, 0x43, 0xaa, 0xf1, 0xec, 0x75, 0xc1, 0x4b, 0xba, 0x5b, 0x94,
+ 0xb8, 0xb3, 0x1a, 0x06, 0xd3, 0x1e, 0x7e, 0x37, 0x7a, 0x4b, 0xcf, 0x92, 0xcd, 0x7a, 0x76, 0x07,
+ 0x9d, 0x42, 0xe1, 0x82, 0x76, 0xb7, 0x83, 0x6a, 0x99, 0x3f, 0x4a, 0xe7, 0x65, 0x3d, 0xfb, 0xe0,
+ 0xe6, 0xb5, 0xb4, 0xc3, 0xbc, 0xa5, 0xb4, 0x79, 0x1e, 0xfd, 0xb2, 0x6f, 0x7e, 0x37, 0xce, 0x67,
+ 0x2c, 0x1b, 0x3e, 0x08, 0xa9, 0x2b, 0xc6, 0xb8, 0xda, 0xea, 0xc5, 0xda, 0xc9, 0x4e, 0x13, 0x7a,
+ 0x32, 0xfd, 0x00, 0xd5, 0x06, 0x53, 0xe9, 0x9d, 0x30, 0xd4, 0xb2, 0xbd, 0xc7, 0x32, 0x46, 0xda,
+ 0x56, 0xc2, 0x0e, 0xdb, 0x06, 0xd2, 0xb6, 0xcb, 0xe8, 0x57, 0x4c, 0x37, 0xd7, 0x79, 0x81, 0x94,
+ 0xd7, 0x8b, 0xce, 0x16, 0xd1, 0x8f, 0x2e, 0x64, 0x7c, 0x3d, 0xec, 0x07, 0xb7, 0xea, 0xa3, 0x67,
+ 0x14, 0xbc, 0x3e, 0x60, 0x3e, 0xb9, 0x13, 0x86, 0xb4, 0xed, 0xbf, 0x1a, 0x44, 0xdf, 0xd3, 0xb2,
+ 0x67, 0x79, 0x7c, 0x9e, 0x31, 0xb9, 0xc4, 0x1f, 0x33, 0xf1, 0x8a, 0x97, 0x57, 0x93, 0x75, 0x3e,
+ 0x23, 0xd2, 0x19, 0x1c, 0xee, 0x48, 0x67, 0x48, 0x25, 0x5d, 0x98, 0x3f, 0x88, 0xde, 0x6d, 0x82,
+ 0xe2, 0x32, 0xce, 0xe7, 0xec, 0x87, 0x15, 0xcf, 0xc7, 0x45, 0x3a, 0x4e, 0x92, 0x72, 0x38, 0xc2,
+ 0xbb, 0x1e, 0x72, 0xa6, 0x04, 0x3b, 0xbd, 0x79, 0x27, 0x7d, 0xd6, 0xad, 0x2c, 0x78, 0x01, 0xd3,
+ 0xe7, 0xa6, 0xf9, 0x04, 0x2f, 0xa8, 0xf4, 0xd9, 0x47, 0x5a, 0x56, 0x8f, 0xea, 0x35, 0x08, 0xb7,
+ 0x7a, 0xe4, 0x2e, 0x3a, 0xb7, 0x43, 0x88, 0x5d, 0x03, 0x9a, 0x86, 0xe2, 0xf9, 0x45, 0x3a, 0x3f,
+ 0x2b, 0x92, 0x7a, 0x0c, 0xdd, 0xc7, 0xeb, 0xec, 0x20, 0xc4, 0x1a, 0x40, 0xa0, 0xda, 0xdb, 0xdf,
+ 0xd8, 0x2c, 0x53, 0xcf, 0x4b, 0xcf, 0x4b, 0xbe, 0x38, 0x64, 0xf3, 0x78, 0xb6, 0xd6, 0x93, 0xe9,
+ 0x47, 0xa1, 0x59, 0x0c, 0xd2, 0xa6, 0x10, 0x1f, 0x5f, 0x53, 0x4b, 0x97, 0xe7, 0x5f, 0x07, 0xd1,
+ 0x1d, 0x2f, 0x4e, 0x74, 0x30, 0xa9, 0xd2, 0x8f, 0xf3, 0xe4, 0x94, 0x55, 0x22, 0x2e, 0xc5, 0xf0,
+ 0xfb, 0x81, 0x18, 0x20, 0x74, 0x4c, 0xd9, 0x7e, 0xf0, 0x8d, 0x74, 0x6d, 0xaf, 0x4f, 0xea, 0x55,
+ 0x42, 0xcf, 0x3f, 0x7e, 0xaf, 0x4b, 0x09, 0x9c, 0x7d, 0x6e, 0x87, 0x10, 0xdb, 0xeb, 0x52, 0x70,
+ 0x90, 0xaf, 0x52, 0xc1, 0xf6, 0x59, 0xce, 0xca, 0x76, 0xaf, 0x2b, 0x55, 0x1f, 0x21, 0x7a, 0x9d,
+ 0x40, 0xed, 0x4c, 0xe7, 0x79, 0x33, 0x99, 0xc6, 0x56, 0xc0, 0x48, 0x2b, 0xd7, 0x78, 0xd8, 0x0f,
+ 0xb6, 0x5b, 0x65, 0xc7, 0xe7, 0x29, 0x5b, 0xf1, 0x2b, 0xb8, 0x55, 0x76, 0x4d, 0x28, 0x80, 0xd8,
+ 0x2a, 0xa3, 0xa0, 0x4d, 0x07, 0x1c, 0x3f, 0x2f, 0x52, 0xf6, 0x0a, 0xa4, 0x03, 0xae, 0x72, 0x2d,
+ 0x26, 0xd2, 0x01, 0x04, 0xd3, 0x1e, 0x8e, 0xa3, 0x9f, 0x93, 0xc2, 0x1f, 0xf2, 0x34, 0x1f, 0xde,
+ 0x44, 0x94, 0x6a, 0x81, 0xb1, 0x7a, 0x8b, 0x06, 0x40, 0x89, 0xeb, 0xbf, 0xea, 0xb5, 0xf9, 0x2e,
+ 0xa1, 0x04, 0x96, 0xe5, 0x8d, 0x2e, 0xcc, 0xe6, 0x61, 0x52, 0x58, 0xcf, 0x5f, 0x93, 0xcb, 0xb8,
+ 0x4c, 0xf3, 0xf9, 0x10, 0xd3, 0x75, 0xe4, 0x44, 0x1e, 0x86, 0x71, 0x20, 0x84, 0xb5, 0xe2, 0xb8,
+ 0x28, 0xca, 0x7a, 0x5a, 0xc4, 0x42, 0xd8, 0x47, 0x82, 0x21, 0xdc, 0x42, 0x71, 0x6f, 0x7b, 0x6c,
+ 0x96, 0xa5, 0x79, 0xd0, 0x9b, 0x46, 0xfa, 0x78, 0xb3, 0x28, 0x08, 0xde, 0x43, 0x16, 0xaf, 0x58,
+ 0x53, 0x33, 0xac, 0x65, 0x5c, 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x9b, 0x5e, 0x29, 0x3e, 0x8a, 0xaf,
+ 0x58, 0xdd, 0xc0, 0xac, 0x5e, 0x54, 0x87, 0x98, 0xbe, 0x47, 0x10, 0x9b, 0x5e, 0x9c, 0xd4, 0xae,
+ 0x96, 0xd1, 0x3b, 0x52, 0x7e, 0x12, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0x37, 0x9b, 0x29, 0x6c,
+ 0x5c, 0xb7, 0x28, 0xe3, 0x72, 0xbb, 0x27, 0xad, 0xdd, 0xfe, 0xd3, 0x20, 0x7a, 0x1f, 0xfa, 0x3d,
+ 0x61, 0xe5, 0x22, 0x95, 0x7b, 0xf2, 0x4a, 0x4d, 0xc2, 0xc3, 0x4f, 0xc3, 0x46, 0x5b, 0x0a, 0xa6,
+ 0x34, 0x9f, 0x5d, 0x5f, 0xd1, 0x66, 0x62, 0x13, 0xbd, 0x4f, 0xf9, 0xa2, 0x4c, 0x5a, 0x67, 0x56,
+ 0x93, 0x66, 0xf3, 0x21, 0x85, 0x44, 0x26, 0xd6, 0x82, 0xc0, 0x08, 0x3f, 0xcb, 0xab, 0xc6, 0x3a,
+ 0x36, 0xc2, 0xad, 0x38, 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0x93, 0xe5, 0x79, 0x96, 0x56, 0x97,
+ 0x69, 0x3e, 0xd7, 0x69, 0xb7, 0xaf, 0x6b, 0xc5, 0x30, 0xf3, 0xde, 0xec, 0xe4, 0x30, 0x27, 0x3a,
+ 0x58, 0x48, 0x27, 0x20, 0x4c, 0x36, 0x3b, 0x39, 0xbb, 0x1b, 0xb2, 0xd2, 0x7a, 0x1b, 0x0e, 0x76,
+ 0x43, 0x8e, 0x6a, 0x2d, 0x25, 0x76, 0x43, 0x6d, 0xca, 0xee, 0x86, 0xdc, 0x3a, 0x54, 0x3c, 0x5b,
+ 0xb1, 0xb3, 0x32, 0x05, 0xbb, 0x21, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0x86, 0x28, 0xd6, 0x4e, 0x54,
+ 0x96, 0xd8, 0x67, 0x62, 0x22, 0x62, 0xb1, 0xac, 0xc0, 0x44, 0xe5, 0xd8, 0x30, 0x08, 0x31, 0x51,
+ 0x11, 0xa8, 0xf6, 0xf6, 0xdb, 0x51, 0xa4, 0x4e, 0x30, 0xe4, 0x29, 0x93, 0xbf, 0xf6, 0xe8, 0xa3,
+ 0x0d, 0xef, 0x88, 0xe9, 0xfd, 0x00, 0x61, 0x13, 0x1e, 0xf5, 0x77, 0x79, 0x78, 0x36, 0x44, 0x35,
+ 0xa4, 0x88, 0x48, 0x78, 0x00, 0x02, 0x0b, 0x3a, 0xb9, 0xe4, 0xaf, 0xf0, 0x82, 0xd6, 0x92, 0x70,
+ 0x41, 0x35, 0x61, 0x8f, 0xb3, 0x75, 0x41, 0xb1, 0xe3, 0xec, 0xa6, 0x18, 0xa1, 0xe3, 0x6c, 0xc8,
+ 0xd8, 0x98, 0x71, 0x0d, 0x3f, 0xe5, 0xfc, 0x6a, 0x11, 0x97, 0x57, 0x20, 0x66, 0x3c, 0xe5, 0x86,
+ 0x21, 0x62, 0x86, 0x62, 0x6d, 0xcc, 0xb8, 0x0e, 0xeb, 0x74, 0xf9, 0xac, 0xcc, 0x40, 0xcc, 0x78,
+ 0x36, 0x34, 0x42, 0xc4, 0x0c, 0x81, 0xda, 0xd9, 0xc9, 0xf5, 0x36, 0x61, 0xf0, 0x00, 0xc5, 0x53,
+ 0x9f, 0x30, 0xea, 0x00, 0x05, 0xc1, 0x60, 0x08, 0xed, 0x97, 0x71, 0x71, 0x89, 0x87, 0x90, 0x14,
+ 0x85, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf1, 0xfe, 0x56, 0xb2, 0x70,
+ 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4c, 0xc5, 0xe5, 0x11, 0x13, 0x31, 0xde, 0xdf, 0x3e,
+ 0x13, 0xee, 0xef, 0x16, 0x6b, 0xf3, 0x71, 0xd7, 0xe1, 0x64, 0x79, 0x5e, 0xcd, 0xca, 0xf4, 0x9c,
+ 0x0d, 0x03, 0x56, 0x0c, 0x44, 0xe4, 0xe3, 0x24, 0xac, 0x7d, 0xfe, 0x74, 0x10, 0xdd, 0x6c, 0xba,
+ 0x9d, 0x57, 0x95, 0x5e, 0xfb, 0x7c, 0xf7, 0x1f, 0xe3, 0xfd, 0x4b, 0xe0, 0xc4, 0x03, 0x86, 0x1e,
+ 0x6a, 0x4e, 0x6e, 0x80, 0x17, 0xe9, 0x2c, 0xaf, 0x4c, 0xa1, 0x3e, 0xed, 0x63, 0xdd, 0x51, 0x20,
+ 0x72, 0x83, 0x5e, 0x8a, 0x36, 0x2d, 0xd3, 0xfd, 0xd3, 0xc8, 0x0e, 0x92, 0x0a, 0xa4, 0x65, 0x4d,
+ 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x0c, 0x85, 0xfd, 0x92, 0x2f, 0x8b, 0xaa, 0x23, 0x14,
+ 0x00, 0x14, 0x0e, 0x85, 0x36, 0xac, 0x7d, 0xbe, 0x8e, 0x7e, 0xd5, 0x0d, 0x3f, 0xb7, 0xb1, 0xb7,
+ 0xe9, 0x98, 0xc2, 0x9a, 0x78, 0xd4, 0x17, 0xb7, 0x19, 0x45, 0xe3, 0x59, 0xec, 0x31, 0x11, 0xa7,
+ 0x59, 0x35, 0xdc, 0xc0, 0x6d, 0x34, 0x72, 0x22, 0xa3, 0xc0, 0x38, 0x38, 0xbf, 0xed, 0x2d, 0x8b,
+ 0x2c, 0x9d, 0xb5, 0x1f, 0xef, 0x68, 0x5d, 0x23, 0x0e, 0xcf, 0x6f, 0x2e, 0x06, 0xe7, 0xeb, 0x3a,
+ 0xf5, 0x93, 0xff, 0x99, 0xae, 0x0b, 0x86, 0xcf, 0xd7, 0x1e, 0x12, 0x9e, 0xaf, 0x21, 0x0a, 0xeb,
+ 0x33, 0x61, 0xe2, 0x30, 0x5e, 0xf3, 0x25, 0x31, 0x5f, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, 0x66, 0xf7,
+ 0x06, 0xc6, 0xc3, 0x41, 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0xf3, 0x2c, 0x9e, 0x57, 0x43, 0x62, 0x8e,
+ 0xf1, 0x29, 0x62, 0x6f, 0x40, 0xd3, 0x48, 0x33, 0x1e, 0x54, 0xcf, 0xe3, 0x15, 0x2f, 0x53, 0x41,
+ 0x37, 0xa3, 0x45, 0x3a, 0x9b, 0xd1, 0x43, 0x51, 0x6f, 0xe3, 0x72, 0x76, 0x99, 0xae, 0x58, 0x12,
+ 0xf0, 0xd6, 0x20, 0x3d, 0xbc, 0x39, 0x28, 0xd2, 0x69, 0x13, 0xbe, 0x2c, 0x67, 0x8c, 0xec, 0x34,
+ 0x25, 0xee, 0xec, 0x34, 0x83, 0x69, 0x0f, 0x7f, 0x36, 0x88, 0x7e, 0x4d, 0x49, 0xdd, 0x67, 0x2e,
+ 0x7b, 0x71, 0x75, 0x79, 0xce, 0xe3, 0x32, 0x19, 0x7e, 0x88, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xf1,
+ 0x75, 0x54, 0x60, 0xb3, 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21,
+ 0x0a, 0x27, 0x10, 0x29, 0x57, 0x47, 0x72, 0x1b, 0xa4, 0xbe, 0x7f, 0x2e, 0xb7, 0xd9, 0xc9, 0xc1,
+ 0xf9, 0xb1, 0x16, 0xfa, 0xd1, 0xb2, 0x4d, 0xd9, 0xc0, 0x23, 0x66, 0xd4, 0x17, 0x27, 0x3d, 0x9b,
+ 0x51, 0x11, 0xf6, 0xdc, 0x1a, 0x19, 0xa3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91,
+ 0xa9, 0x6d, 0xd4, 0x17, 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x41, 0xc0, 0x0e, 0x5c, 0x1b,
+ 0xb6, 0x7a, 0xb1, 0xda, 0xe1, 0x5f, 0x0c, 0xa2, 0xef, 0x5a, 0x8f, 0x47, 0x3c, 0x49, 0x2f, 0xd6,
+ 0x0a, 0x7a, 0x11, 0x67, 0x4b, 0x56, 0x0d, 0x1f, 0x53, 0xd6, 0xda, 0xac, 0x29, 0xc1, 0x93, 0x6b,
+ 0xe9, 0xc0, 0xb1, 0x33, 0x2e, 0x8a, 0x6c, 0x3d, 0x65, 0x8b, 0x22, 0x23, 0xc7, 0x8e, 0x87, 0x84,
+ 0xc7, 0x0e, 0x44, 0x61, 0x56, 0x3e, 0xe5, 0x75, 0xce, 0x8f, 0x66, 0xe5, 0x52, 0x14, 0xce, 0xca,
+ 0x1b, 0x04, 0xe6, 0x4a, 0x53, 0xbe, 0xcb, 0xb3, 0x8c, 0xcd, 0x44, 0xfb, 0xde, 0x86, 0xd1, 0xb4,
+ 0x44, 0x38, 0x57, 0x02, 0xa4, 0x3d, 0x95, 0x6b, 0xf6, 0x90, 0x71, 0xc9, 0x9e, 0xae, 0x0f, 0xd3,
+ 0xfc, 0x6a, 0x88, 0xa7, 0x05, 0x16, 0x20, 0x4e, 0xe5, 0x50, 0x10, 0xee, 0x55, 0xcf, 0xf2, 0x84,
+ 0xe3, 0x7b, 0xd5, 0x5a, 0x12, 0xde, 0xab, 0x6a, 0x02, 0x9a, 0x3c, 0x65, 0x94, 0xc9, 0x5a, 0x12,
+ 0x36, 0xa9, 0x09, 0x6c, 0x2a, 0xd4, 0xcf, 0x6e, 0xc8, 0xa9, 0x10, 0x3c, 0xad, 0xd9, 0xec, 0xe4,
+ 0xe0, 0x9e, 0x4b, 0x3b, 0x40, 0x23, 0x02, 0x18, 0xff, 0x20, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3,
+ 0xcf, 0x99, 0x98, 0x5d, 0xe2, 0xa1, 0xef, 0x21, 0xe1, 0xd0, 0x87, 0x28, 0x6c, 0xab, 0x29, 0x37,
+ 0xbb, 0xf9, 0x0d, 0x3c, 0xf0, 0x5a, 0x3b, 0xf9, 0xcd, 0x4e, 0x0e, 0xb6, 0xd5, 0xc1, 0x82, 0x6e,
+ 0x2b, 0x25, 0x0b, 0xb7, 0x95, 0x61, 0x60, 0xe9, 0x95, 0x40, 0x1e, 0x92, 0x6d, 0xd0, 0x8a, 0xde,
+ 0x31, 0xd9, 0x66, 0x27, 0xa7, 0x9d, 0xfc, 0x83, 0xd9, 0x1f, 0x2a, 0xe9, 0x31, 0xaf, 0x07, 0xdf,
+ 0x8b, 0x38, 0x4b, 0x93, 0x58, 0xb0, 0x29, 0xbf, 0x62, 0x39, 0xbe, 0x15, 0xd3, 0xa5, 0x55, 0xfc,
+ 0xc8, 0x53, 0x08, 0x6f, 0xc5, 0xc2, 0x8a, 0x30, 0x4e, 0x14, 0x7d, 0x56, 0xb1, 0xdd, 0xb8, 0x22,
+ 0xa6, 0x48, 0x0f, 0x09, 0xc7, 0x09, 0x44, 0x61, 0x22, 0xac, 0xe4, 0xcf, 0x5e, 0x17, 0xac, 0x4c,
+ 0x59, 0x3e, 0x63, 0x78, 0x22, 0x0c, 0xa9, 0x70, 0x22, 0x8c, 0xd0, 0x70, 0x13, 0xb8, 0x17, 0x0b,
+ 0xf6, 0x74, 0x3d, 0x4d, 0x17, 0xac, 0x12, 0xf1, 0xa2, 0xc0, 0x37, 0x81, 0x00, 0x0a, 0x6f, 0x02,
+ 0xdb, 0x70, 0xeb, 0xcc, 0xc9, 0xcc, 0xb4, 0xed, 0x7b, 0x64, 0x90, 0x08, 0xdc, 0x23, 0x23, 0x50,
+ 0xd8, 0xb0, 0x16, 0x40, 0x9f, 0x3e, 0xb4, 0xac, 0x04, 0x9f, 0x3e, 0xd0, 0x74, 0xeb, 0x24, 0xcf,
+ 0x30, 0x93, 0x7a, 0x68, 0x76, 0x14, 0x7d, 0xe2, 0x0e, 0xd1, 0xad, 0x5e, 0x2c, 0x7e, 0x74, 0x78,
+ 0xca, 0xb2, 0x58, 0xae, 0x87, 0x81, 0xf3, 0xb9, 0x86, 0xe9, 0x73, 0x74, 0xe8, 0xb0, 0xda, 0xe1,
+ 0x9f, 0x0c, 0xa2, 0xf7, 0x30, 0x8f, 0x5f, 0x14, 0xd2, 0xef, 0xa3, 0x6e, 0x5b, 0x8a, 0x24, 0x2e,
+ 0xca, 0x85, 0x35, 0xec, 0x5d, 0x8f, 0x46, 0x64, 0xef, 0xd1, 0xe9, 0x02, 0xf8, 0xd9, 0xa0, 0x29,
+ 0x3f, 0xe4, 0x88, 0xbb, 0x1e, 0x21, 0xde, 0x6e, 0xb4, 0xfc, 0x72, 0x55, 0x60, 0xa3, 0x65, 0x6c,
+ 0x68, 0x31, 0xb1, 0xd1, 0x42, 0x30, 0x3b, 0x3a, 0xdd, 0xea, 0xbd, 0x4c, 0xc5, 0xa5, 0x4c, 0xe4,
+ 0xc0, 0xe8, 0xf4, 0xca, 0x6a, 0x20, 0x62, 0x74, 0x92, 0x30, 0x4c, 0x75, 0x1a, 0xb0, 0x1e, 0x9b,
+ 0xd8, 0x5c, 0x6e, 0x0c, 0xb9, 0x23, 0xf3, 0x5e, 0x37, 0x08, 0xe3, 0xb5, 0x11, 0xeb, 0x3d, 0xd5,
+ 0x83, 0x90, 0x05, 0xb0, 0xaf, 0xda, 0xea, 0xc5, 0x6a, 0x87, 0x7f, 0x14, 0x7d, 0xa7, 0x55, 0xb1,
+ 0xe7, 0x2c, 0x16, 0xcb, 0x92, 0x25, 0xc3, 0x9d, 0x8e, 0x72, 0x37, 0xa0, 0x71, 0xfd, 0xa8, 0xbf,
+ 0x42, 0x2b, 0xf9, 0x6f, 0x38, 0x15, 0x56, 0xa6, 0x0c, 0x8f, 0x43, 0x26, 0x7d, 0x36, 0x98, 0xfc,
+ 0xd3, 0x3a, 0xad, 0xfd, 0xbb, 0x1b, 0x5d, 0xe3, 0x55, 0x9c, 0x66, 0xf2, 0x29, 0xf0, 0x87, 0x21,
+ 0xa3, 0x1e, 0x1a, 0xdc, 0xbf, 0x93, 0x2a, 0xad, 0x99, 0x59, 0x8e, 0x71, 0x67, 0xdf, 0xf7, 0x90,
+ 0x9e, 0x09, 0x90, 0x6d, 0xdf, 0x76, 0x4f, 0x5a, 0xbb, 0x15, 0xcd, 0x92, 0x57, 0xff, 0xd9, 0x0d,
+ 0x72, 0xcc, 0xab, 0x56, 0x45, 0x22, 0x7d, 0xbb, 0x27, 0xad, 0xbd, 0xfe, 0x61, 0xf4, 0x6e, 0xdb,
+ 0xab, 0x5e, 0x88, 0x76, 0x3a, 0x4d, 0x81, 0xb5, 0xe8, 0x51, 0x7f, 0x05, 0xed, 0xfe, 0x9f, 0xcd,
+ 0x81, 0xb7, 0xf2, 0x3f, 0xe3, 0x8b, 0x05, 0xcb, 0x13, 0x96, 0x34, 0x1a, 0x55, 0xbd, 0x31, 0xfb,
+ 0x8c, 0xb6, 0x6b, 0x14, 0x46, 0xae, 0x86, 0x29, 0xd1, 0xaf, 0x7f, 0x03, 0x4d, 0x5d, 0xb4, 0x7f,
+ 0x1f, 0x44, 0xf7, 0xd1, 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0xb7, 0xfa, 0x38, 0xc2, 0x34, 0x4d,
+ 0x51, 0xc7, 0xff, 0x07, 0x0b, 0xba, 0xc8, 0xff, 0x32, 0x88, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77,
+ 0x79, 0x7e, 0x91, 0xa5, 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6,
+ 0x0c, 0x68, 0xda, 0x5d, 0xf1, 0xe7, 0x69, 0x25, 0x78, 0xb9, 0x9e, 0x5c, 0xf2, 0x57, 0xcd, 0x9b,
+ 0x48, 0xfe, 0xbc, 0xac, 0x81, 0x91, 0x43, 0x10, 0xbb, 0x62, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x2c,
+ 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, 0x76, 0x55, 0x6a, 0x6a, 0x65, 0x5f, 0xaf, 0xda,
+ 0xc4, 0x8b, 0xda, 0x7e, 0xc5, 0xea, 0x5e, 0x37, 0x68, 0x73, 0x53, 0x2d, 0xde, 0x4b, 0x2f, 0x2e,
+ 0x4c, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x9b, 0x12, 0xa8, 0xdd, 0x5e, 0x3d, 0x4f, 0x33, 0x26,
+ 0x1f, 0x0a, 0x7d, 0x71, 0x71, 0x91, 0xf1, 0x38, 0x01, 0xdb, 0xab, 0x5a, 0x3c, 0x72, 0xe5, 0xc4,
+ 0xf6, 0x0a, 0xe3, 0xec, 0x75, 0x93, 0x5a, 0x5a, 0x47, 0x77, 0x3e, 0x4b, 0x33, 0x78, 0x91, 0x59,
+ 0x6a, 0x1a, 0x21, 0x71, 0xdd, 0xa4, 0x05, 0xd9, 0x14, 0xa8, 0x16, 0xd5, 0x51, 0xd9, 0x94, 0xff,
+ 0x6e, 0x5b, 0xd1, 0x11, 0x13, 0x29, 0x10, 0x82, 0xd9, 0xe3, 0x8b, 0x5a, 0x78, 0x56, 0x48, 0xe3,
+ 0xb7, 0xda, 0x5a, 0x4a, 0x42, 0x1c, 0x5f, 0xf8, 0x84, 0xdd, 0x2d, 0xd7, 0x7f, 0xdf, 0xe3, 0xaf,
+ 0x72, 0x69, 0xf4, 0x76, 0x5b, 0xa5, 0x91, 0x11, 0xbb, 0x65, 0xc8, 0x68, 0xc3, 0x3f, 0x8a, 0xfe,
+ 0xbf, 0x34, 0x5c, 0xf2, 0x62, 0x78, 0x03, 0x51, 0x28, 0x9d, 0x6b, 0xbf, 0x37, 0x49, 0xb9, 0xbd,
+ 0x9d, 0x62, 0x62, 0xe3, 0xac, 0x8a, 0xe7, 0xf0, 0xae, 0xbe, 0xed, 0x71, 0x29, 0x25, 0x6e, 0xa7,
+ 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x79, 0xa2, 0xad, 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90,
+ 0x4d, 0x5b, 0x8f, 0xe3, 0x55, 0x3a, 0x37, 0xa9, 0x85, 0x9a, 0xc0, 0x2a, 0x90, 0xb6, 0x5a, 0x66,
+ 0xe4, 0x40, 0x44, 0xda, 0x4a, 0xc2, 0xda, 0xe7, 0xdf, 0x0f, 0xa2, 0x5b, 0x96, 0xd9, 0x6f, 0x0e,
+ 0x7c, 0x0f, 0xf2, 0x0b, 0x5e, 0x27, 0xb9, 0x87, 0x69, 0x7e, 0x55, 0x0d, 0x3f, 0xa1, 0x4c, 0xe2,
+ 0xbc, 0x29, 0xca, 0xa7, 0xd7, 0xd6, 0xb3, 0xfb, 0x93, 0xe6, 0x34, 0xd4, 0x5e, 0x89, 0x50, 0x1a,
+ 0x60, 0x7f, 0x62, 0x0e, 0x4d, 0x21, 0x47, 0xec, 0x4f, 0x42, 0xbc, 0xed, 0x62, 0xe3, 0x3c, 0xe3,
+ 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, 0x88, 0xd4, 0xf9,
+ 0xda, 0x38, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, 0xfd, 0x9c, 0x46,
+ 0xdf, 0xaa, 0x9b, 0xf4, 0xa4, 0x64, 0xab, 0x94, 0xc1, 0xdb, 0x3b, 0x8e, 0x84, 0x18, 0xff, 0x3e,
+ 0x61, 0x47, 0xd6, 0x59, 0x5e, 0x15, 0x59, 0x5c, 0x5d, 0xea, 0xfb, 0x1c, 0x7e, 0x9d, 0x1b, 0x21,
+ 0xbc, 0xd1, 0x71, 0xb7, 0x83, 0xb2, 0x93, 0x7a, 0x23, 0x33, 0x53, 0xcc, 0x06, 0xae, 0xda, 0x9a,
+ 0x66, 0x36, 0x3b, 0x39, 0xfb, 0xd0, 0x64, 0x3f, 0xce, 0x32, 0x56, 0xae, 0x1b, 0xd9, 0x51, 0x9c,
+ 0xa7, 0x17, 0xac, 0x12, 0xe0, 0xa1, 0x89, 0xa6, 0x46, 0x10, 0x23, 0x1e, 0x9a, 0x04, 0x70, 0xbb,
+ 0x6f, 0x03, 0x9e, 0x0f, 0xf2, 0x84, 0xbd, 0x06, 0xfb, 0x36, 0x68, 0x47, 0x32, 0xc4, 0xbe, 0x8d,
+ 0x62, 0xed, 0xc3, 0x83, 0xa7, 0x19, 0x9f, 0x5d, 0xe9, 0x25, 0xc0, 0xef, 0x60, 0x29, 0x81, 0x6b,
+ 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x65, 0x45, 0x16, 0xcf, 0xe0, 0x15, 0x2e, 0xa5,
+ 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x35, 0x0c, 0x2b, 0x2e, 0xb8, 0x19, 0x76,
+ 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, 0x86, 0x94, 0x10,
+ 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x23, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, 0x26, 0x1b, 0xc2,
+ 0xde, 0x57, 0x57, 0x75, 0xe7, 0xc5, 0x1a, 0xdc, 0x57, 0xd7, 0xd5, 0xe2, 0xc5, 0x9a, 0xb8, 0xaf,
+ 0xee, 0x01, 0xa0, 0x88, 0x27, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, 0x0d, 0x61, 0xd7,
+ 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0x89, 0xe1, 0x26, 0x29, 0xb7, 0x33,
+ 0x89, 0xea, 0x15, 0x26, 0x9e, 0xa7, 0x2c, 0x4b, 0x2a, 0x30, 0x93, 0xe8, 0x76, 0x6f, 0xa4, 0xc4,
+ 0x4c, 0xd2, 0xa6, 0x40, 0x28, 0xe9, 0x27, 0x20, 0x58, 0xed, 0xc0, 0x03, 0x90, 0xdb, 0x21, 0xc4,
+ 0xce, 0x4f, 0x4d, 0xa1, 0x77, 0xe3, 0xb2, 0x4c, 0xeb, 0xc5, 0x7f, 0x03, 0x2f, 0x50, 0x23, 0x27,
+ 0xe6, 0x27, 0x8c, 0x03, 0xc3, 0xab, 0x99, 0xb8, 0xb1, 0x82, 0xc1, 0xa9, 0xfb, 0x83, 0x20, 0x63,
+ 0x33, 0x4e, 0x29, 0x71, 0x9e, 0xc2, 0x63, 0xad, 0x89, 0x3c, 0x84, 0xdf, 0xe8, 0xc2, 0x9c, 0x97,
+ 0xd9, 0x8c, 0x8b, 0x23, 0xbe, 0x62, 0x53, 0xfe, 0xec, 0x75, 0x5a, 0xd5, 0xdb, 0x2d, 0xbd, 0x72,
+ 0x3f, 0x21, 0x2c, 0x61, 0x30, 0xf1, 0x32, 0x5b, 0xa7, 0x92, 0x4d, 0x20, 0x40, 0x59, 0x8e, 0xd9,
+ 0x2b, 0x34, 0x81, 0x80, 0x16, 0x0d, 0x47, 0x24, 0x10, 0x21, 0xde, 0x9e, 0x98, 0x19, 0xe7, 0xfa,
+ 0x0b, 0x06, 0x53, 0xde, 0xe4, 0x72, 0x94, 0x35, 0x08, 0x12, 0x87, 0x16, 0x41, 0x05, 0xbb, 0xbf,
+ 0x34, 0xfe, 0xed, 0x10, 0xbb, 0x47, 0xd8, 0x69, 0x0f, 0xb3, 0xfb, 0x3d, 0x48, 0xc4, 0x95, 0xbd,
+ 0x4a, 0x42, 0xb9, 0x6a, 0xdf, 0x24, 0xb9, 0xdf, 0x83, 0x74, 0x4e, 0xdf, 0xdc, 0x6a, 0x3d, 0x8d,
+ 0x67, 0x57, 0xf3, 0x92, 0x2f, 0xf3, 0x64, 0x97, 0x67, 0xbc, 0x04, 0xa7, 0x6f, 0x5e, 0xa9, 0x01,
+ 0x4a, 0x9c, 0xbe, 0x75, 0xa8, 0xd8, 0x0c, 0xce, 0x2d, 0xc5, 0x38, 0x4b, 0xe7, 0x70, 0x47, 0xed,
+ 0x19, 0x92, 0x00, 0x91, 0xc1, 0xa1, 0x20, 0x12, 0x44, 0x6a, 0xc7, 0x2d, 0xd2, 0x59, 0x9c, 0x29,
+ 0x7f, 0x3b, 0xb4, 0x19, 0x0f, 0xec, 0x0c, 0x22, 0x44, 0x01, 0xa9, 0xe7, 0x74, 0x59, 0xe6, 0x07,
+ 0xb9, 0xe0, 0x64, 0x3d, 0x1b, 0xa0, 0xb3, 0x9e, 0x0e, 0x08, 0xa6, 0xd5, 0x29, 0x7b, 0x5d, 0x97,
+ 0xa6, 0xfe, 0x07, 0x9b, 0x56, 0xeb, 0xbf, 0x8f, 0xb4, 0x3c, 0x34, 0xad, 0x02, 0x0e, 0x54, 0x46,
+ 0x3b, 0x51, 0x01, 0x13, 0xd0, 0xf6, 0xc3, 0xe4, 0x5e, 0x37, 0x88, 0xfb, 0x99, 0x88, 0x75, 0xc6,
+ 0x42, 0x7e, 0x24, 0xd0, 0xc7, 0x4f, 0x03, 0xda, 0xe3, 0x16, 0xaf, 0x3e, 0x97, 0x6c, 0x76, 0xd5,
+ 0xba, 0x19, 0xe7, 0x17, 0x54, 0x21, 0xc4, 0x71, 0x0b, 0x81, 0xe2, 0x5d, 0x74, 0x30, 0xe3, 0x79,
+ 0xa8, 0x8b, 0x6a, 0x79, 0x9f, 0x2e, 0xd2, 0x9c, 0xdd, 0xfc, 0x1a, 0xa9, 0x8e, 0x4c, 0xd5, 0x4d,
+ 0x5b, 0x84, 0x05, 0x17, 0x22, 0x36, 0xbf, 0x24, 0x6c, 0x73, 0x72, 0xe8, 0xf3, 0xa8, 0xfd, 0xda,
+ 0x40, 0xcb, 0xca, 0x11, 0xfd, 0xda, 0x00, 0xc5, 0xd2, 0x95, 0x54, 0x31, 0xd2, 0x61, 0xc5, 0x8f,
+ 0x93, 0x87, 0xfd, 0x60, 0xbb, 0xe5, 0xf1, 0x7c, 0xee, 0x66, 0x2c, 0x2e, 0x95, 0xd7, 0xed, 0x80,
+ 0x21, 0x8b, 0x11, 0x5b, 0x9e, 0x00, 0x0e, 0xa6, 0x30, 0xcf, 0xf3, 0x2e, 0xcf, 0x05, 0xcb, 0x05,
+ 0x36, 0x85, 0xf9, 0xc6, 0x34, 0x18, 0x9a, 0xc2, 0x28, 0x05, 0x10, 0xb7, 0xf2, 0x3c, 0x88, 0x89,
+ 0xe3, 0x78, 0x81, 0x66, 0x6c, 0xea, 0xac, 0x47, 0xc9, 0x43, 0x71, 0x0b, 0x38, 0xe7, 0x71, 0xae,
+ 0xeb, 0x65, 0x1a, 0x97, 0x73, 0x73, 0xba, 0x91, 0x0c, 0x1f, 0xd1, 0x76, 0x7c, 0x92, 0x78, 0x9c,
+ 0x1b, 0xd6, 0x00, 0xd3, 0xce, 0xc1, 0x22, 0x9e, 0x9b, 0x9a, 0x22, 0x35, 0x90, 0xf2, 0x56, 0x55,
+ 0xef, 0x75, 0x83, 0xc0, 0xcf, 0x8b, 0x34, 0x61, 0x3c, 0xe0, 0x47, 0xca, 0xfb, 0xf8, 0x81, 0x20,
+ 0xc8, 0xde, 0xea, 0x7a, 0xab, 0x1d, 0xdd, 0x38, 0x4f, 0xf4, 0x3e, 0x76, 0x44, 0x34, 0x0f, 0xe0,
+ 0x42, 0xd9, 0x1b, 0xc1, 0x83, 0x31, 0xda, 0x1c, 0xd0, 0x86, 0xc6, 0xa8, 0x39, 0x7f, 0xed, 0x33,
+ 0x46, 0x31, 0x58, 0xfb, 0xfc, 0x89, 0x1e, 0xa3, 0x7b, 0xb1, 0x88, 0xeb, 0xbc, 0xfd, 0x45, 0xca,
+ 0x5e, 0xe9, 0x8d, 0x30, 0x52, 0xdf, 0x86, 0x1a, 0xc9, 0xb7, 0x9e, 0xc1, 0xae, 0x78, 0xa7, 0x37,
+ 0x1f, 0xf0, 0xad, 0x77, 0x08, 0x9d, 0xbe, 0xc1, 0x56, 0x61, 0xa7, 0x37, 0x1f, 0xf0, 0xad, 0x3f,
+ 0xa7, 0xd0, 0xe9, 0x1b, 0x7c, 0x53, 0x61, 0xa7, 0x37, 0xaf, 0x7d, 0xff, 0x69, 0x33, 0x70, 0x5d,
+ 0xe7, 0x75, 0x1e, 0x36, 0x13, 0xe9, 0x8a, 0x61, 0xe9, 0xa4, 0x6f, 0xcf, 0xa0, 0xa1, 0x74, 0x92,
+ 0x56, 0x71, 0x3e, 0x68, 0x86, 0x95, 0xe2, 0x84, 0x57, 0xa9, 0xbc, 0x8e, 0xf1, 0xa4, 0x87, 0xd1,
+ 0x06, 0x0e, 0x6d, 0x9a, 0x42, 0x4a, 0xf6, 0xc1, 0xb2, 0x87, 0xda, 0x8b, 0xf0, 0x0f, 0x03, 0xf6,
+ 0xda, 0xf7, 0xe1, 0xb7, 0x7b, 0xd2, 0xf6, 0x11, 0xaf, 0xc7, 0xb8, 0xcf, 0x96, 0x43, 0xbd, 0x8a,
+ 0x3e, 0x5e, 0x7e, 0xd4, 0x5f, 0x41, 0xbb, 0xff, 0xf3, 0x66, 0x5f, 0x01, 0xfd, 0xeb, 0x41, 0xf0,
+ 0xb8, 0x8f, 0x45, 0x30, 0x10, 0x9e, 0x5c, 0x4b, 0x47, 0x17, 0xe4, 0xaf, 0x9b, 0x0d, 0x74, 0x83,
+ 0xca, 0xd7, 0x81, 0xe4, 0x6b, 0xc4, 0x7a, 0x4c, 0x84, 0xba, 0xd5, 0xc2, 0x70, 0x64, 0x7c, 0x7c,
+ 0x4d, 0x2d, 0xe7, 0xf3, 0x76, 0x1e, 0xac, 0x5f, 0x5b, 0x75, 0xca, 0x13, 0xb2, 0xec, 0xd0, 0xb0,
+ 0x40, 0x9f, 0x5c, 0x57, 0x8d, 0x1a, 0x2b, 0x0e, 0x2c, 0x3f, 0xf0, 0xf2, 0xa4, 0xa7, 0x61, 0xef,
+ 0x93, 0x2f, 0x1f, 0x5d, 0x4f, 0x49, 0x97, 0xe5, 0xdf, 0x06, 0xd1, 0x5d, 0x8f, 0xb5, 0xcf, 0x13,
+ 0xc0, 0xa9, 0xc7, 0x0f, 0x02, 0xf6, 0x29, 0x25, 0x53, 0xb8, 0xdf, 0xf8, 0x66, 0xca, 0xf6, 0x5b,
+ 0x70, 0x9e, 0xca, 0xf3, 0x34, 0x13, 0xac, 0x6c, 0x7f, 0x0b, 0xce, 0xb7, 0xab, 0xa8, 0x11, 0xfd,
+ 0x2d, 0xb8, 0x00, 0xee, 0x7c, 0x0b, 0x0e, 0xf1, 0x8c, 0x7e, 0x0b, 0x0e, 0xb5, 0x16, 0xfc, 0x16,
+ 0x5c, 0x58, 0x83, 0x9a, 0xde, 0x9b, 0x22, 0xa8, 0x73, 0xeb, 0x5e, 0x16, 0xfd, 0x63, 0xec, 0xc7,
+ 0xd7, 0x51, 0x21, 0x16, 0x38, 0xc5, 0xc9, 0x1b, 0x8d, 0x3d, 0xda, 0xd4, 0xbb, 0xd5, 0xb8, 0xd3,
+ 0x9b, 0xd7, 0xbe, 0x7f, 0xac, 0x77, 0x37, 0x66, 0x3a, 0xe7, 0xa5, 0xfc, 0x0e, 0xe0, 0x56, 0x68,
+ 0x7a, 0xae, 0x2d, 0xb8, 0x3d, 0xff, 0xb0, 0x1f, 0x4c, 0x54, 0xb7, 0x26, 0x74, 0xa7, 0x8f, 0xba,
+ 0x0c, 0x81, 0x2e, 0xdf, 0xe9, 0xcd, 0x13, 0xcb, 0x88, 0xf2, 0xad, 0x7a, 0xbb, 0x87, 0x31, 0xbf,
+ 0xaf, 0x1f, 0xf5, 0x57, 0xd0, 0xee, 0x57, 0x3a, 0x6d, 0x74, 0xdd, 0xcb, 0x7e, 0xde, 0xee, 0x32,
+ 0x35, 0xf1, 0xba, 0x79, 0xd4, 0x17, 0x0f, 0x25, 0x10, 0xee, 0x12, 0xda, 0x95, 0x40, 0xa0, 0xcb,
+ 0xe8, 0x47, 0xd7, 0x53, 0xd2, 0x65, 0xf9, 0xbb, 0x41, 0x74, 0x93, 0x2c, 0x8b, 0x8e, 0x83, 0x4f,
+ 0xfa, 0x5a, 0x06, 0xf1, 0xf0, 0xe9, 0xb5, 0xf5, 0x74, 0xa1, 0xfe, 0x71, 0x10, 0xdd, 0x0a, 0x14,
+ 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xd9, 0xf5, 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27,
+ 0xed, 0xef, 0x7a, 0x05, 0x6c, 0x4f, 0xe8, 0xef, 0x7a, 0x75, 0x6b, 0xc1, 0x43, 0x9e, 0xf8, 0xbc,
+ 0xd9, 0x74, 0xa1, 0x87, 0x3c, 0xf2, 0x2e, 0x62, 0xf0, 0xfb, 0x24, 0x18, 0x87, 0x39, 0x79, 0xf6,
+ 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, 0x07, 0x0f, 0xc7, 0x6a, 0xe9, 0x29,
+ 0x6f, 0x36, 0x52, 0xf7, 0x29, 0x7d, 0x83, 0x04, 0x0f, 0xc7, 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d,
+ 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd0, 0x07, 0x05, 0x29, 0xba, 0xf1, 0x66, 0xce, 0xdc, 0x1f, 0x86,
+ 0xac, 0xb4, 0xce, 0xdd, 0xb7, 0x7b, 0xd2, 0x84, 0xdb, 0x09, 0x13, 0x9f, 0xb3, 0x38, 0x61, 0x65,
+ 0xd0, 0xad, 0xa1, 0x7a, 0xb9, 0x75, 0x69, 0xcc, 0xed, 0x2e, 0xcf, 0x96, 0x8b, 0x5c, 0x77, 0x26,
+ 0xe9, 0xd6, 0xa5, 0xba, 0xdd, 0x02, 0x1a, 0x1e, 0x0b, 0x5a, 0xb7, 0x32, 0xbd, 0x7c, 0x10, 0x36,
+ 0xe3, 0x65, 0x95, 0x5b, 0xbd, 0x58, 0xba, 0x9e, 0x3a, 0x8c, 0x3a, 0xea, 0x09, 0x22, 0x69, 0xbb,
+ 0x27, 0x0d, 0xcf, 0xe7, 0x1c, 0xb7, 0x26, 0x9e, 0x76, 0x3a, 0x6c, 0xb5, 0x42, 0xea, 0x51, 0x7f,
+ 0x05, 0x78, 0x1a, 0xaa, 0xa3, 0xea, 0x30, 0xad, 0xc4, 0xf3, 0x34, 0xcb, 0x86, 0x5b, 0x81, 0x30,
+ 0x69, 0xa0, 0xe0, 0x69, 0x28, 0x02, 0x13, 0x91, 0xdc, 0x9c, 0x1e, 0xe6, 0xc3, 0x2e, 0x3b, 0x92,
+ 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x4e, 0xb4, 0x9c, 0xa6, 0x36, 0xb5, 0x1d, 0x85, 0x1b, 0xae, 0x55,
+ 0xe1, 0x9d, 0xde, 0x3c, 0x78, 0xdc, 0x2e, 0x29, 0xb9, 0xb2, 0xdc, 0xa1, 0x4c, 0x78, 0x2b, 0xc9,
+ 0xdd, 0x0e, 0x0a, 0x9c, 0x0a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, 0xe6, 0x4c, 0xa0, 0x4f, 0x8a, 0x5c,
+ 0x20, 0xf8, 0xa4, 0x08, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, 0x71, 0xe8, 0x41, 0x82, 0x75, 0x9d,
+ 0x56, 0x76, 0xa8, 0x50, 0xd7, 0xa1, 0x34, 0x98, 0x0d, 0x8c, 0x5b, 0xfd, 0x45, 0x87, 0x07, 0x21,
+ 0x33, 0xe0, 0xb3, 0x0e, 0x5b, 0xbd, 0x58, 0xb0, 0xa2, 0x58, 0x87, 0xe9, 0x22, 0x15, 0xd8, 0x8a,
+ 0xe2, 0xd8, 0xa8, 0x91, 0xd0, 0x8a, 0xd2, 0x46, 0xa9, 0xea, 0xd5, 0x39, 0xc2, 0x41, 0x12, 0xae,
+ 0x9e, 0x62, 0xfa, 0x55, 0xcf, 0xb0, 0xad, 0x07, 0x9b, 0xb9, 0x09, 0x19, 0x71, 0xa9, 0x37, 0xcb,
+ 0x48, 0x6c, 0xcb, 0x37, 0x7d, 0x21, 0x18, 0x9a, 0x75, 0x28, 0x05, 0x78, 0x60, 0x5f, 0x73, 0xcd,
+ 0xb3, 0xd7, 0xa2, 0x60, 0x71, 0x19, 0xe7, 0x33, 0x74, 0x73, 0x2a, 0x0d, 0xb6, 0xc8, 0xd0, 0xe6,
+ 0x94, 0xd4, 0x00, 0x8f, 0xcd, 0xfd, 0x57, 0x69, 0x91, 0xa1, 0x60, 0xde, 0x59, 0xf5, 0xdf, 0xa4,
+ 0xbd, 0xdf, 0x83, 0x84, 0x8f, 0xcd, 0x1b, 0xc0, 0x1c, 0x7c, 0x2b, 0xa7, 0x1f, 0x06, 0x4c, 0xf9,
+ 0x68, 0x68, 0x23, 0x4c, 0xab, 0x80, 0xa0, 0x36, 0x09, 0x2e, 0x13, 0x3f, 0x62, 0x6b, 0x2c, 0xa8,
+ 0x6d, 0x7e, 0x2a, 0x91, 0x50, 0x50, 0xb7, 0x51, 0x90, 0x67, 0xba, 0xfb, 0xa0, 0x8d, 0x80, 0xbe,
+ 0xbb, 0xf5, 0xd9, 0xec, 0xe4, 0xc0, 0xc8, 0xd9, 0x4b, 0x57, 0xde, 0x73, 0x02, 0xa4, 0xa0, 0x7b,
+ 0xe9, 0x0a, 0x7f, 0x4c, 0xb0, 0xd5, 0x8b, 0x85, 0x8f, 0xe4, 0x63, 0xc1, 0x5e, 0x37, 0xcf, 0xca,
+ 0x91, 0xe2, 0x4a, 0x79, 0xeb, 0x61, 0xf9, 0xbd, 0x6e, 0xd0, 0x5e, 0x80, 0x3d, 0x29, 0xf9, 0x8c,
+ 0x55, 0x95, 0xfe, 0xd8, 0xa9, 0x7f, 0xc3, 0x48, 0xcb, 0x46, 0xe0, 0x53, 0xa7, 0x77, 0xc2, 0x90,
+ 0xf3, 0x85, 0x42, 0x25, 0xb2, 0x1f, 0x4e, 0xda, 0x40, 0x35, 0xdb, 0xdf, 0x4c, 0xda, 0xec, 0xe4,
+ 0xec, 0xf0, 0xd2, 0x52, 0xf7, 0x4b, 0x49, 0xf7, 0x50, 0x75, 0xec, 0x23, 0x49, 0xf7, 0x7b, 0x90,
+ 0xda, 0xd5, 0xe7, 0xd1, 0x9b, 0x87, 0x7c, 0x3e, 0x61, 0x79, 0x32, 0xfc, 0x9e, 0x7f, 0x85, 0x96,
+ 0xcf, 0x47, 0xf5, 0x9f, 0x8d, 0xd1, 0x1b, 0x94, 0xd8, 0x5e, 0x02, 0xdc, 0x63, 0xe7, 0xcb, 0xf9,
+ 0x44, 0xc4, 0x02, 0x5c, 0x02, 0x94, 0x7f, 0x1f, 0xd5, 0x02, 0xe2, 0x12, 0xa0, 0x07, 0x00, 0x7b,
+ 0xd3, 0x92, 0x31, 0xd4, 0x5e, 0x2d, 0x08, 0xda, 0xd3, 0x80, 0xcd, 0x22, 0x8c, 0xbd, 0x3a, 0x51,
+ 0x87, 0x97, 0xf6, 0xac, 0x8e, 0x94, 0x12, 0x59, 0x44, 0x9b, 0xb2, 0xc1, 0xad, 0xaa, 0x2f, 0x3f,
+ 0x5c, 0xb3, 0x5c, 0x2c, 0xe2, 0x72, 0x0d, 0x82, 0x5b, 0xd7, 0xd2, 0x01, 0x88, 0xe0, 0x46, 0x41,
+ 0x3b, 0x6a, 0x9b, 0x66, 0x9e, 0x5d, 0xed, 0xf3, 0x92, 0x2f, 0x45, 0x9a, 0x33, 0xf8, 0xf1, 0x12,
+ 0xd3, 0xa0, 0x2e, 0x43, 0x8c, 0x5a, 0x8a, 0xb5, 0x59, 0xae, 0x24, 0xd4, 0x7d, 0x42, 0xf9, 0xfd,
+ 0xf5, 0x4a, 0xf0, 0x12, 0x3e, 0x4f, 0x54, 0x56, 0x20, 0x44, 0x64, 0xb9, 0x24, 0x0c, 0xfa, 0xfe,
+ 0x24, 0xcd, 0xe7, 0x68, 0xdf, 0x9f, 0xb8, 0x1f, 0x10, 0xbe, 0x45, 0x03, 0x76, 0x40, 0xa9, 0x46,
+ 0x53, 0x03, 0x40, 0xbf, 0xb5, 0x8b, 0x36, 0xba, 0x4b, 0x10, 0x03, 0x0a, 0x27, 0x81, 0xab, 0x2f,
+ 0x0a, 0x96, 0xb3, 0xa4, 0xb9, 0x35, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0xb9, 0x48,
+ 0xca, 0x4f, 0x97, 0xf9, 0x49, 0xc9, 0x2f, 0xd2, 0x8c, 0x95, 0x60, 0x2e, 0x52, 0xea, 0x8e, 0x9c,
+ 0x98, 0x8b, 0x30, 0xce, 0x5e, 0xbf, 0x90, 0x52, 0xef, 0x47, 0x04, 0xa6, 0x65, 0x3c, 0x83, 0xd7,
+ 0x2f, 0x94, 0x8d, 0x36, 0x46, 0x9c, 0x0c, 0x06, 0x70, 0x27, 0xd1, 0x51, 0xae, 0xf3, 0xb5, 0x8c,
+ 0x0f, 0xfd, 0xd6, 0xa8, 0xfc, 0xac, 0x6e, 0x05, 0x12, 0x1d, 0x6d, 0x0e, 0x23, 0x89, 0x44, 0x27,
+ 0xac, 0x61, 0x97, 0x12, 0xc9, 0x1d, 0xeb, 0x6b, 0x45, 0x60, 0x29, 0x51, 0x36, 0x1a, 0x21, 0xb1,
+ 0x94, 0xb4, 0x20, 0x30, 0x21, 0x35, 0xc3, 0x60, 0x8e, 0x4e, 0x48, 0x46, 0x1a, 0x9c, 0x90, 0x5c,
+ 0xca, 0x4e, 0x14, 0x07, 0x79, 0x2a, 0xd2, 0x38, 0x9b, 0x30, 0x71, 0x12, 0x97, 0xf1, 0x82, 0x09,
+ 0x56, 0xc2, 0x89, 0x42, 0x23, 0x23, 0x8f, 0x21, 0x26, 0x0a, 0x8a, 0xd5, 0x0e, 0x7f, 0x33, 0x7a,
+ 0xbb, 0x5e, 0xf7, 0x59, 0xae, 0x7f, 0xfe, 0xe8, 0x99, 0xfc, 0xdd, 0xb4, 0xe1, 0x3b, 0xc6, 0xc6,
+ 0x44, 0x94, 0x2c, 0x5e, 0x34, 0xb6, 0xdf, 0x32, 0x7f, 0x97, 0xe0, 0xa3, 0x41, 0x1d, 0xcf, 0xc7,
+ 0x5c, 0xa4, 0x17, 0xf5, 0x36, 0x5b, 0xbf, 0x41, 0x04, 0xe2, 0xd9, 0x15, 0x8f, 0x02, 0x5f, 0x1d,
+ 0xc1, 0x38, 0x3b, 0x4f, 0xbb, 0xd2, 0x53, 0x56, 0x64, 0x70, 0x9e, 0xf6, 0xb4, 0x25, 0x40, 0xcc,
+ 0xd3, 0x28, 0x68, 0x07, 0xa7, 0x2b, 0x9e, 0xb2, 0x70, 0x65, 0xa6, 0xac, 0x5f, 0x65, 0xa6, 0xde,
+ 0x4b, 0x19, 0x59, 0xf4, 0xf6, 0x11, 0x5b, 0x9c, 0xb3, 0xb2, 0xba, 0x4c, 0x0b, 0xea, 0xd3, 0xbf,
+ 0x96, 0xe8, 0xfc, 0xf4, 0x2f, 0x81, 0xda, 0x95, 0xc0, 0x02, 0x07, 0xd5, 0x71, 0xbc, 0x60, 0xf2,
+ 0x1b, 0x2a, 0x60, 0x25, 0x70, 0x8c, 0x38, 0x10, 0xb1, 0x12, 0x90, 0xb0, 0xf3, 0x7e, 0x97, 0x65,
+ 0x4e, 0xd9, 0xbc, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0x2f, 0x58, 0x2e, 0xb4, 0x49, 0x70, 0x26, 0xef,
+ 0x98, 0xc4, 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x33, 0x35, 0x79, 0x0d, 0x7f, 0xc2, 0x4b, 0xa1,
+ 0x7e, 0xdc, 0xec, 0xac, 0xcc, 0xc0, 0xd4, 0xe4, 0x37, 0xaa, 0x47, 0x12, 0x53, 0x53, 0x58, 0xc3,
+ 0xf9, 0x21, 0x0b, 0xaf, 0x0c, 0x2f, 0x58, 0x69, 0xe2, 0xe4, 0xd9, 0x22, 0x4e, 0x33, 0x1d, 0x0d,
+ 0xdf, 0x0f, 0xd8, 0x26, 0x74, 0x88, 0x1f, 0xb2, 0xe8, 0xab, 0xeb, 0xfc, 0xf4, 0x47, 0xb8, 0x84,
+ 0xe0, 0x11, 0x41, 0x87, 0x7d, 0xe2, 0x11, 0x41, 0xb7, 0x96, 0xdd, 0xb9, 0x5b, 0x56, 0x72, 0x6b,
+ 0x49, 0xec, 0xf2, 0x04, 0x9e, 0x17, 0x3a, 0x36, 0x01, 0x48, 0xec, 0xdc, 0x83, 0x0a, 0x36, 0x35,
+ 0xb0, 0xd8, 0xf3, 0x34, 0x8f, 0xb3, 0xf4, 0x27, 0x30, 0xad, 0x77, 0xec, 0x34, 0x04, 0x91, 0x1a,
+ 0xe0, 0x24, 0xe6, 0x6a, 0x9f, 0x89, 0x69, 0x5a, 0x4f, 0xfd, 0xf7, 0x02, 0xed, 0x26, 0x89, 0x6e,
+ 0x57, 0x0e, 0xe9, 0x7c, 0xe6, 0x17, 0x36, 0xeb, 0xb8, 0x28, 0x26, 0xf5, 0xaa, 0x7a, 0xca, 0x66,
+ 0x2c, 0x2d, 0xc4, 0xf0, 0xe3, 0x70, 0x5b, 0x01, 0x9c, 0xb8, 0x68, 0xd1, 0x43, 0xcd, 0x79, 0x7c,
+ 0x5f, 0xcf, 0x25, 0x13, 0xf5, 0xab, 0x9f, 0x67, 0x15, 0x2b, 0x75, 0xa2, 0xb1, 0xcf, 0x04, 0x18,
+ 0x9d, 0x0e, 0x37, 0x72, 0xc0, 0xba, 0xa2, 0xc4, 0xe8, 0x0c, 0x6b, 0xd8, 0xc3, 0x3e, 0x87, 0xd3,
+ 0x9f, 0x6d, 0x97, 0xf7, 0x0d, 0x1f, 0x92, 0xc6, 0x1c, 0x8a, 0x38, 0xec, 0xa3, 0x69, 0x9b, 0xad,
+ 0xb5, 0xdd, 0x8e, 0xf3, 0xf5, 0x01, 0xbc, 0x32, 0x81, 0x58, 0x92, 0x18, 0x91, 0xad, 0x05, 0x70,
+ 0xe7, 0x30, 0xbc, 0xe4, 0x71, 0x32, 0x8b, 0x2b, 0x71, 0x12, 0xaf, 0x33, 0x1e, 0x27, 0x72, 0x5d,
+ 0x87, 0x87, 0xe1, 0x0d, 0x33, 0x72, 0x21, 0xea, 0x30, 0x9c, 0x82, 0xdd, 0xec, 0x4c, 0xfe, 0x98,
+ 0xa9, 0xbe, 0xcb, 0x09, 0xb3, 0x33, 0x59, 0x5e, 0x78, 0x8f, 0xf3, 0x4e, 0x18, 0xb2, 0xef, 0xa0,
+ 0x29, 0x91, 0x4c, 0x43, 0x6e, 0x61, 0x3a, 0x5e, 0x02, 0xf2, 0x7e, 0x80, 0xb0, 0x5f, 0x20, 0x51,
+ 0x7f, 0x6f, 0x7e, 0xbf, 0x4a, 0xe8, 0x8f, 0xa1, 0x3f, 0xc4, 0x74, 0x5d, 0x68, 0xe4, 0x7e, 0xc8,
+ 0x62, 0xbb, 0x27, 0x6d, 0xd3, 0xcc, 0xdd, 0xcb, 0x58, 0x8c, 0x93, 0xe4, 0x88, 0x55, 0xc8, 0x0b,
+ 0xe5, 0xb5, 0x70, 0x64, 0xa5, 0x44, 0x9a, 0xd9, 0xa6, 0x6c, 0xa0, 0xd7, 0xb2, 0x67, 0x49, 0x2a,
+ 0xb4, 0xac, 0xb9, 0x21, 0xfd, 0xb0, 0x6d, 0xa0, 0x4d, 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x97, 0xd7,
+ 0xcc, 0x94, 0xcf, 0xe7, 0x19, 0xd3, 0xd0, 0x29, 0x8b, 0xd5, 0xb7, 0x20, 0x77, 0xda, 0xb6, 0x50,
+ 0x90, 0x98, 0xcb, 0x83, 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0xcd, 0xb6,
+ 0x19, 0x0f, 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xef, 0xbd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc,
+ 0xd8, 0x94, 0x54, 0x76, 0xc4, 0xc4, 0x7b, 0x6f, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xd3, 0xf5,
+ 0x41, 0x02, 0xf7, 0x09, 0x50, 0x5f, 0x32, 0xc4, 0x3e, 0x81, 0x62, 0xfd, 0xae, 0x33, 0xe7, 0x5e,
+ 0x87, 0x71, 0x65, 0x2b, 0x87, 0x74, 0x1d, 0x0a, 0x86, 0xba, 0x8e, 0x52, 0xf0, 0x9b, 0xd4, 0x3d,
+ 0x5a, 0x43, 0x9a, 0x14, 0x3b, 0x57, 0xdb, 0xe8, 0xc2, 0x6c, 0xee, 0x5f, 0x0b, 0x4f, 0x59, 0x9c,
+ 0x98, 0x8a, 0x21, 0xba, 0xae, 0x9c, 0xc8, 0xfd, 0x31, 0x4e, 0x3b, 0xf9, 0x9d, 0x68, 0xa8, 0xaa,
+ 0x51, 0xba, 0x6e, 0x6e, 0x61, 0x45, 0xac, 0x09, 0x62, 0xa2, 0xf2, 0x09, 0x27, 0x71, 0xf3, 0xba,
+ 0x68, 0xca, 0xb5, 0x03, 0xfd, 0x5e, 0x66, 0x05, 0x12, 0x37, 0xbf, 0xd9, 0x5b, 0x34, 0x91, 0xb8,
+ 0x75, 0x6b, 0xd9, 0x79, 0xde, 0xec, 0xcf, 0xe5, 0x15, 0x30, 0xfc, 0x47, 0x35, 0x94, 0x90, 0x98,
+ 0xe7, 0x5b, 0x90, 0xb2, 0xfd, 0xf4, 0xfd, 0xff, 0xf8, 0xea, 0xc6, 0xe0, 0x67, 0x5f, 0xdd, 0x18,
+ 0xfc, 0xf7, 0x57, 0x37, 0x06, 0x3f, 0xfd, 0xfa, 0xc6, 0x1b, 0x3f, 0xfb, 0xfa, 0xc6, 0x1b, 0xff,
+ 0xf5, 0xf5, 0x8d, 0x37, 0xbe, 0x7c, 0x53, 0xff, 0x68, 0xf8, 0xf9, 0xff, 0x93, 0x3f, 0xfd, 0xfd,
+ 0xe4, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x14, 0xc2, 0x04, 0x4c, 0x58, 0x7c, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -500,6 +500,7 @@ type ClientCommandsClient interface {
ObjectUndo(ctx context.Context, in *pb.RpcObjectUndoRequest, opts ...grpc.CallOption) (*pb.RpcObjectUndoResponse, error)
ObjectRedo(ctx context.Context, in *pb.RpcObjectRedoRequest, opts ...grpc.CallOption) (*pb.RpcObjectRedoResponse, error)
ObjectListExport(ctx context.Context, in *pb.RpcObjectListExportRequest, opts ...grpc.CallOption) (*pb.RpcObjectListExportResponse, error)
+ ObjectExport(ctx context.Context, in *pb.RpcObjectExportRequest, opts ...grpc.CallOption) (*pb.RpcObjectExportResponse, error)
ObjectBookmarkFetch(ctx context.Context, in *pb.RpcObjectBookmarkFetchRequest, opts ...grpc.CallOption) (*pb.RpcObjectBookmarkFetchResponse, error)
ObjectToBookmark(ctx context.Context, in *pb.RpcObjectToBookmarkRequest, opts ...grpc.CallOption) (*pb.RpcObjectToBookmarkResponse, error)
ObjectImport(ctx context.Context, in *pb.RpcObjectImportRequest, opts ...grpc.CallOption) (*pb.RpcObjectImportResponse, error)
@@ -1593,6 +1594,15 @@ func (c *clientCommandsClient) ObjectListExport(ctx context.Context, in *pb.RpcO
return out, nil
}
+func (c *clientCommandsClient) ObjectExport(ctx context.Context, in *pb.RpcObjectExportRequest, opts ...grpc.CallOption) (*pb.RpcObjectExportResponse, error) {
+ out := new(pb.RpcObjectExportResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectExport", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *clientCommandsClient) ObjectBookmarkFetch(ctx context.Context, in *pb.RpcObjectBookmarkFetchRequest, opts ...grpc.CallOption) (*pb.RpcObjectBookmarkFetchResponse, error) {
out := new(pb.RpcObjectBookmarkFetchResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectBookmarkFetch", in, out, opts...)
@@ -3438,6 +3448,7 @@ type ClientCommandsServer interface {
ObjectUndo(context.Context, *pb.RpcObjectUndoRequest) *pb.RpcObjectUndoResponse
ObjectRedo(context.Context, *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse
ObjectListExport(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse
+ ObjectExport(context.Context, *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse
ObjectBookmarkFetch(context.Context, *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse
ObjectToBookmark(context.Context, *pb.RpcObjectToBookmarkRequest) *pb.RpcObjectToBookmarkResponse
ObjectImport(context.Context, *pb.RpcObjectImportRequest) *pb.RpcObjectImportResponse
@@ -3963,6 +3974,9 @@ func (*UnimplementedClientCommandsServer) ObjectRedo(ctx context.Context, req *p
func (*UnimplementedClientCommandsServer) ObjectListExport(ctx context.Context, req *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse {
return nil
}
+func (*UnimplementedClientCommandsServer) ObjectExport(ctx context.Context, req *pb.RpcObjectExportRequest) *pb.RpcObjectExportResponse {
+ return nil
+}
func (*UnimplementedClientCommandsServer) ObjectBookmarkFetch(ctx context.Context, req *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse {
return nil
}
@@ -6230,6 +6244,24 @@ func _ClientCommands_ObjectListExport_Handler(srv interface{}, ctx context.Conte
return interceptor(ctx, in, info, handler)
}
+func _ClientCommands_ObjectExport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcObjectExportRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).ObjectExport(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/ObjectExport",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).ObjectExport(ctx, req.(*pb.RpcObjectExportRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _ClientCommands_ObjectBookmarkFetch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcObjectBookmarkFetchRequest)
if err := dec(in); err != nil {
@@ -10034,6 +10066,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "ObjectListExport",
Handler: _ClientCommands_ObjectListExport_Handler,
},
+ {
+ MethodName: "ObjectExport",
+ Handler: _ClientCommands_ObjectExport_Handler,
+ },
{
MethodName: "ObjectBookmarkFetch",
Handler: _ClientCommands_ObjectBookmarkFetch_Handler,
From f2bb2aab6379499bb6742685272092ad754c1da1 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 18:35:25 +0100
Subject: [PATCH 088/132] GO-4459: Add missing mock
---
.../mock_service/mock_ClientCommandsServer.go | 49 +++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/pb/service/mock_service/mock_ClientCommandsServer.go b/pb/service/mock_service/mock_ClientCommandsServer.go
index f6351e05f..86ed7f77e 100644
--- a/pb/service/mock_service/mock_ClientCommandsServer.go
+++ b/pb/service/mock_service/mock_ClientCommandsServer.go
@@ -6100,6 +6100,55 @@ func (_c *MockClientCommandsServer_ChatUnsubscribe_Call) RunAndReturn(run func(c
return _c
}
+// ChatUnsubscribeFromMessagePreviews provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommandsServer) ChatUnsubscribeFromMessagePreviews(_a0 context.Context, _a1 *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ChatUnsubscribeFromMessagePreviews")
+ }
+
+ var r0 *pb.RpcChatUnsubscribeFromMessagePreviewsResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcChatUnsubscribeFromMessagePreviewsResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatUnsubscribeFromMessagePreviews'
+type MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call struct {
+ *mock.Call
+}
+
+// ChatUnsubscribeFromMessagePreviews is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcChatUnsubscribeFromMessagePreviewsRequest
+func (_e *MockClientCommandsServer_Expecter) ChatUnsubscribeFromMessagePreviews(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
+ return &MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call{Call: _e.mock.On("ChatUnsubscribeFromMessagePreviews", _a0, _a1)}
+}
+
+func (_c *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatUnsubscribeFromMessagePreviewsRequest)) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcChatUnsubscribeFromMessagePreviewsRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call) Return(_a0 *pb.RpcChatUnsubscribeFromMessagePreviewsResponse) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call) RunAndReturn(run func(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
// DebugAccountSelectTrace provides a mock function with given fields: _a0, _a1
func (_m *MockClientCommandsServer) DebugAccountSelectTrace(_a0 context.Context, _a1 *pb.RpcDebugAccountSelectTraceRequest) *pb.RpcDebugAccountSelectTraceResponse {
ret := _m.Called(_a0, _a1)
From 77cebace59b82aef1f4589950c66d809aad5d930 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Tue, 25 Mar 2025 21:03:47 +0100
Subject: [PATCH 089/132] GO-4459: Rename type_key to key for type response
consistency
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 13 ++++++-------
core/api/internal/object/model.go | 2 +-
core/api/internal/object/service.go | 6 +++---
core/api/internal/object/service_test.go | 19 +++++++++----------
core/api/internal/search/model.go | 2 +-
7 files changed, 22 insertions(+), 24 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index b55186eb7..003f06a7f 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 23b399fca..a0d504929 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"},"type_key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by unique key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 7204c1b35..f4bbab887 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -427,6 +427,11 @@ components:
description: The id of the type (which is unique across spaces)
example: bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu
type: string
+ key:
+ description: The key of the type (can be the same across spaces for known
+ types)
+ example: ot-page
+ type: string
name:
description: The name of the type
example: Page
@@ -439,11 +444,6 @@ components:
description: The recommended layout of the type
example: todo
type: string
- type_key:
- description: The key of the type (can be the same across spaces for known
- types)
- example: ot-page
- type: string
type: object
object.TypeResponse:
properties:
@@ -547,8 +547,7 @@ components:
sort:
$ref: '#/components/schemas/search.SortOptions'
types:
- description: The types of objects to search for, specified by unique key
- or ID
+ description: The types of objects to search for, specified by key or ID
example:
- ot-page
- ot-678043f0cda9133be777049f
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index 40783fa74..cef220e5e 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -91,7 +91,7 @@ type TypeResponse struct {
type Type struct {
Object string `json:"object" example:"type"` // The data model of the object
Id string `json:"id" example:"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu"` // The id of the type (which is unique across spaces)
- TypeKey string `json:"type_key" example:"ot-page"` // The key of the type (can be the same across spaces for known types)
+ Key string `json:"key" example:"ot-page"` // The key of the type (can be the same across spaces for known types)
Name string `json:"name" example:"Page"` // The name of the type
Icon util.Icon `json:"icon"` // The icon of the type
Archived bool `json:"archived" example:"false"` // Whether the type is archived
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 8bbc608ba..2505f1f6c 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -395,7 +395,7 @@ func (s *ObjectService) ListTypes(ctx context.Context, spaceId string, offset in
types = append(types, Type{
Object: "type",
Id: record.Fields[bundle.RelationKeyId.String()].GetStringValue(),
- TypeKey: record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ Key: record.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: record.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", record.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
Archived: record.Fields[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
@@ -430,7 +430,7 @@ func (s *ObjectService) GetType(ctx context.Context, spaceId string, typeId stri
return Type{
Object: "type",
Id: typeId,
- TypeKey: details[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ Key: details[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: details[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, details[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", details[bundle.RelationKeyIconName.String()].GetStringValue(), details[bundle.RelationKeyIconOption.String()].GetNumberValue()),
Archived: details[bundle.RelationKeyIsArchived.String()].GetBoolValue(),
@@ -562,7 +562,7 @@ func (s *ObjectService) GetTypeFromDetails(typeId string, details []*model.Objec
return Type{
Object: "type",
Id: typeId,
- TypeKey: objectTypeDetail.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
+ Key: objectTypeDetail.Fields[bundle.RelationKeyUniqueKey.String()].GetStringValue(),
Name: objectTypeDetail.Fields[bundle.RelationKeyName.String()].GetStringValue(),
Icon: util.GetIcon(s.AccountInfo, objectTypeDetail.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), "", objectTypeDetail.Fields[bundle.RelationKeyIconName.String()].GetStringValue(), objectTypeDetail.Fields[bundle.RelationKeyIconOption.String()].GetNumberValue()),
RecommendedLayout: model.ObjectTypeLayout_name[int32(objectTypeDetail.Fields[bundle.RelationKeyRecommendedLayout.String()].GetNumberValue())],
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 5bb40f904..e056dfba9 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -32,7 +32,6 @@ const (
mockedTypeKey = "ot-page"
mockedTypeId = "mocked-type-id"
mockedTypeName = "mocked-type-name"
- mockedTypeUniqueKey = "mocked-type-unique-key"
mockedTypeIcon = "📝"
mockedTemplateId = "mocked-template-id"
mockedTemplateName = "mocked-template-name"
@@ -161,7 +160,7 @@ func TestObjectService_ListObjects(t *testing.T) {
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
- bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeKey),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
},
},
@@ -205,7 +204,7 @@ func TestObjectService_ListObjects(t *testing.T) {
require.Len(t, objects, 1)
require.Equal(t, mockedTypeId, objects[0].Type.Id)
require.Equal(t, mockedTypeName, objects[0].Type.Name)
- require.Equal(t, mockedTypeUniqueKey, objects[0].Type.TypeKey)
+ require.Equal(t, mockedTypeKey, objects[0].Type.Key)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, objects[0].Type.Icon)
require.Equal(t, mockedObjectId, objects[0].Id)
require.Equal(t, mockedObjectName, objects[0].Name)
@@ -332,7 +331,7 @@ func TestObjectService_GetObject(t *testing.T) {
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
- bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeKey),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
},
},
@@ -375,7 +374,7 @@ func TestObjectService_GetObject(t *testing.T) {
require.Equal(t, "object", object.Object)
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
- require.Equal(t, mockedTypeUniqueKey, object.Type.TypeKey)
+ require.Equal(t, mockedTypeKey, object.Type.Key)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, object.Type.Icon)
require.Equal(t, mockedObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
@@ -481,7 +480,7 @@ func TestObjectService_CreateObject(t *testing.T) {
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
- bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeKey),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
},
},
@@ -504,7 +503,7 @@ func TestObjectService_CreateObject(t *testing.T) {
require.Equal(t, "object", object.Object)
require.Equal(t, mockedTypeId, object.Type.Id)
require.Equal(t, mockedTypeName, object.Type.Name)
- require.Equal(t, mockedTypeUniqueKey, object.Type.TypeKey)
+ require.Equal(t, mockedTypeKey, object.Type.Key)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, object.Type.Icon)
require.Equal(t, mockedNewObjectId, object.Id)
require.Equal(t, mockedObjectName, object.Name)
@@ -563,7 +562,7 @@ func TestObjectService_ListTypes(t *testing.T) {
require.Len(t, types, 1)
require.Equal(t, "type-1", types[0].Id)
require.Equal(t, "Type One", types[0].Name)
- require.Equal(t, "type-one-key", types[0].TypeKey)
+ require.Equal(t, "type-one-key", types[0].Key)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("🗂️")}, types[0].Icon)
require.Equal(t, 1, total)
require.False(t, hasMore)
@@ -609,7 +608,7 @@ func TestObjectService_GetType(t *testing.T) {
Fields: map[string]*types.Value{
bundle.RelationKeyId.String(): pbtypes.String(mockedTypeId),
bundle.RelationKeyName.String(): pbtypes.String(mockedTypeName),
- bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeUniqueKey),
+ bundle.RelationKeyUniqueKey.String(): pbtypes.String(mockedTypeKey),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(mockedTypeIcon),
bundle.RelationKeyRecommendedLayout.String(): pbtypes.Float64(float64(model.ObjectType_basic)),
},
@@ -626,7 +625,7 @@ func TestObjectService_GetType(t *testing.T) {
require.NoError(t, err)
require.Equal(t, mockedTypeId, objType.Id)
require.Equal(t, mockedTypeName, objType.Name)
- require.Equal(t, mockedTypeUniqueKey, objType.TypeKey)
+ require.Equal(t, mockedTypeKey, objType.Key)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr(mockedTypeIcon)}, objType.Icon)
require.Equal(t, model.ObjectTypeLayout_name[int32(model.ObjectType_basic)], objType.RecommendedLayout)
})
diff --git a/core/api/internal/search/model.go b/core/api/internal/search/model.go
index eab85f5ba..8f15f6790 100644
--- a/core/api/internal/search/model.go
+++ b/core/api/internal/search/model.go
@@ -18,7 +18,7 @@ const (
type SearchRequest struct {
Query string `json:"query" example:"test"` // The search term to look for in object names and snippets
- Types []string `json:"types" example:"ot-page,ot-678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by unique key or ID
+ Types []string `json:"types" example:"ot-page,ot-678043f0cda9133be777049f,bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"` // The types of objects to search for, specified by key or ID
Sort SortOptions `json:"sort"` // The sorting criteria and direction for the search results
}
From ea579b05052260d1f3096708851a0cafd0b91fd1 Mon Sep 17 00:00:00 2001
From: AnastasiaShemyakinskaya
Date: Tue, 25 Mar 2025 21:44:51 +0100
Subject: [PATCH 090/132] GO-5365: rename param
Signed-off-by: AnastasiaShemyakinskaya
---
core/publish.go | 2 +-
core/publish/service.go | 20 +-
core/publish/service_test.go | 77 +-
docs/proto.md | 2 +-
pb/commands.pb.go | 2479 +++++++++++++++++-----------------
pb/protos/commands.proto | 2 +-
6 files changed, 1298 insertions(+), 1284 deletions(-)
diff --git a/core/publish.go b/core/publish.go
index e5863df81..97184d531 100644
--- a/core/publish.go
+++ b/core/publish.go
@@ -9,7 +9,7 @@ import (
func (mw *Middleware) PublishingCreate(ctx context.Context, req *pb.RpcPublishingCreateRequest) *pb.RpcPublishingCreateResponse {
publishService := mustService[publish.Service](mw)
- res, err := publishService.Publish(ctx, req.SpaceId, req.ObjectId, req.Uri, req.JoinSpace)
+ res, err := publishService.Publish(ctx, req.SpaceId, req.ObjectId, req.Uri, req.IncludeSpaceInfo)
code := mapErrorCode(err,
errToCode(nil, pb.RpcPublishingCreateResponseError_NULL),
errToCode(publish.ErrLimitExceeded, pb.RpcPublishingCreateResponseError_LIMIT_EXCEEDED),
diff --git a/core/publish/service.go b/core/publish/service.go
index 352ef9546..25f03bfff 100644
--- a/core/publish/service.go
+++ b/core/publish/service.go
@@ -124,7 +124,7 @@ func uniqName() string {
return time.Now().Format("Anytype.WebPublish.20060102.150405.99")
}
-func (s *service) exportToDir(ctx context.Context, spaceId, pageId string) (dirEntries []fs.DirEntry, exportPath string, err error) {
+func (s *service) exportToDir(ctx context.Context, spaceId, pageId string, includeSpaceInfo bool) (dirEntries []fs.DirEntry, exportPath string, err error) {
tempDir := os.TempDir()
exportPath, _, err = s.exportService.Export(ctx, pb.RpcObjectListExportRequest{
SpaceId: spaceId,
@@ -137,7 +137,7 @@ func (s *service) exportToDir(ctx context.Context, spaceId, pageId string) (dirE
NoProgress: true,
IncludeNested: true,
IncludeBacklinks: true,
- IncludeSpace: true,
+ IncludeSpace: includeSpaceInfo,
LinksStateFilters: &pb.RpcObjectListExportStateFilters{
RelationsWhiteList: relationsWhiteListToPbModel(),
RemoveBlocks: true,
@@ -154,8 +154,8 @@ func (s *service) exportToDir(ctx context.Context, spaceId, pageId string) (dirE
return
}
-func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, uri, globalName string, joinSpace bool) (err error) {
- dirEntries, exportPath, err := s.exportToDir(ctx, spaceId, pageId)
+func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, uri, globalName string, includeSpaceInfo bool) (err error) {
+ dirEntries, exportPath, err := s.exportToDir(ctx, spaceId, pageId, includeSpaceInfo)
if err != nil {
return err
}
@@ -182,7 +182,7 @@ func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, u
return err
}
- err = s.applyInviteLink(ctx, spc, &uberSnapshot, joinSpace)
+ err = s.applyInviteLink(ctx, spc, &uberSnapshot, includeSpaceInfo)
if err != nil {
return err
}
@@ -190,7 +190,7 @@ func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, u
return err
}
- version, err := s.evaluateDocumentVersion(ctx, spc, pageId, joinSpace)
+ version, err := s.evaluateDocumentVersion(ctx, spc, pageId, includeSpaceInfo)
if err != nil {
return err
}
@@ -210,8 +210,8 @@ func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, u
return nil
}
-func (s *service) applyInviteLink(ctx context.Context, spc clientspace.Space, snapshot *PublishingUberSnapshot, joinSpace bool) error {
- inviteLink, err := s.extractInviteLink(ctx, spc.Id(), joinSpace, spc.IsPersonal())
+func (s *service) applyInviteLink(ctx context.Context, spc clientspace.Space, snapshot *PublishingUberSnapshot, includeSpaceInfo bool) error {
+ inviteLink, err := s.extractInviteLink(ctx, spc.Id(), includeSpaceInfo, spc.IsPersonal())
if err != nil {
return err
}
@@ -406,11 +406,11 @@ func (s *service) getPublishLimit(globalName string) (int64, error) {
return defaultLimit, nil
}
-func (s *service) Publish(ctx context.Context, spaceId, pageId, uri string, joinSpace bool) (res PublishResult, err error) {
+func (s *service) Publish(ctx context.Context, spaceId, pageId, uri string, includeSpaceInfo bool) (res PublishResult, err error) {
identity, _, details := s.identityService.GetMyProfileDetails(ctx)
globalName := details.GetString(bundle.RelationKeyGlobalName)
- err = s.publishToPublishServer(ctx, spaceId, pageId, uri, globalName, joinSpace)
+ err = s.publishToPublishServer(ctx, spaceId, pageId, uri, globalName, includeSpaceInfo)
if err != nil {
log.Error("Failed to publish", zap.Error(err))
diff --git a/core/publish/service_test.go b/core/publish/service_test.go
index c671dcf48..2b063eee9 100644
--- a/core/publish/service_test.go
+++ b/core/publish/service_test.go
@@ -139,7 +139,9 @@ func TestPublish(t *testing.T) {
t.Run("success", func(t *testing.T) {
// given
isPersonal := true
- spaceService, err := prepareSpaceService(t, isPersonal)
+ includeSpaceInfo := false
+
+ spaceService, err := prepareSpaceService(t, isPersonal, includeSpaceInfo)
objectTypeId := "customObjectType"
expectedUri := "test"
@@ -159,7 +161,7 @@ func TestPublish(t *testing.T) {
identityService := mock_identity.NewMockService(t)
identityService.EXPECT().GetMyProfileDetails(context.Background()).Return("identity", nil, domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{}))
- exp := prepareExporter(t, objectTypeId, spaceService)
+ exp := prepareExporter(t, objectTypeId, spaceService, includeSpaceInfo)
svc := &service{
spaceService: spaceService,
@@ -169,7 +171,7 @@ func TestPublish(t *testing.T) {
}
// when
- publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, false)
+ publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, includeSpaceInfo)
// then
assert.NoError(t, err)
@@ -182,7 +184,9 @@ func TestPublish(t *testing.T) {
t.Run("success with space sharing", func(t *testing.T) {
// given
isPersonal := false
- spaceService, err := prepareSpaceService(t, isPersonal)
+ includeSpaceInfo := true
+
+ spaceService, err := prepareSpaceService(t, isPersonal, includeSpaceInfo)
objectTypeId := "customObjectType"
expectedUri := "test"
@@ -206,7 +210,7 @@ func TestPublish(t *testing.T) {
identityService := mock_identity.NewMockService(t)
identityService.EXPECT().GetMyProfileDetails(context.Background()).Return("identity", nil, domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{}))
- exp := prepareExporter(t, objectTypeId, spaceService)
+ exp := prepareExporter(t, objectTypeId, spaceService, includeSpaceInfo)
inviteService := mock_inviteservice.NewMockInviteService(t)
inviteService.EXPECT().GetCurrent(context.Background(), "spaceId").Return(domain.InviteInfo{
@@ -223,7 +227,7 @@ func TestPublish(t *testing.T) {
}
// when
- publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, true)
+ publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, includeSpaceInfo)
// then
assert.NoError(t, err)
@@ -235,7 +239,9 @@ func TestPublish(t *testing.T) {
})
t.Run("success with space sharing - invite not exists", func(t *testing.T) {
isPersonal := false
- spaceService, err := prepareSpaceService(t, isPersonal)
+ includeSpaceInfo := true
+
+ spaceService, err := prepareSpaceService(t, isPersonal, includeSpaceInfo)
objectTypeId := "customObjectType"
expectedUri := "test"
@@ -256,7 +262,7 @@ func TestPublish(t *testing.T) {
identityService := mock_identity.NewMockService(t)
identityService.EXPECT().GetMyProfileDetails(context.Background()).Return("identity", nil, domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{}))
- exp := prepareExporter(t, objectTypeId, spaceService)
+ exp := prepareExporter(t, objectTypeId, spaceService, includeSpaceInfo)
inviteService := mock_inviteservice.NewMockInviteService(t)
inviteService.EXPECT().GetCurrent(context.Background(), "spaceId").Return(domain.InviteInfo{}, inviteservice.ErrInviteNotExists)
@@ -270,7 +276,7 @@ func TestPublish(t *testing.T) {
}
// when
- publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, true)
+ publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, includeSpaceInfo)
// then
assert.NoError(t, err)
@@ -283,7 +289,8 @@ func TestPublish(t *testing.T) {
t.Run("success for member", func(t *testing.T) {
// given
isPersonal := false
- spaceService, err := prepareSpaceService(t, isPersonal)
+ includeSpaceInfo := true
+ spaceService, err := prepareSpaceService(t, isPersonal, includeSpaceInfo)
objectTypeId := "customObjectType"
expectedUri := "test"
@@ -311,7 +318,7 @@ func TestPublish(t *testing.T) {
},
}
- exp := prepareExporter(t, objectTypeId, spaceService)
+ exp := prepareExporter(t, objectTypeId, spaceService, includeSpaceInfo)
inviteService := mock_inviteservice.NewMockInviteService(t)
inviteService.EXPECT().GetCurrent(context.Background(), "spaceId").Return(domain.InviteInfo{
@@ -328,7 +335,7 @@ func TestPublish(t *testing.T) {
}
// when
- publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, true)
+ publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, includeSpaceInfo)
// then
assert.NoError(t, err)
@@ -341,7 +348,9 @@ func TestPublish(t *testing.T) {
t.Run("internal error", func(t *testing.T) {
// given
isPersonal := true
- spaceService, err := prepareSpaceService(t, isPersonal)
+ includeSpaceInfo := true
+
+ spaceService, err := prepareSpaceService(t, isPersonal, includeSpaceInfo)
objectTypeId := "customObjectType"
expectedUri := "test"
@@ -363,7 +372,7 @@ func TestPublish(t *testing.T) {
expectedErr: fmt.Errorf("internal error"),
}
- exp := prepareExporter(t, objectTypeId, spaceService)
+ exp := prepareExporter(t, objectTypeId, spaceService, includeSpaceInfo)
svc := &service{
spaceService: spaceService,
@@ -373,7 +382,7 @@ func TestPublish(t *testing.T) {
}
// when
- publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, true)
+ publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, includeSpaceInfo)
// then
assert.Error(t, err)
@@ -666,7 +675,7 @@ func TestService_PublishingList(t *testing.T) {
var ctx = context.Background()
-func prepareSpaceService(t *testing.T, isPersonal bool) (*mock_space.MockService, error) {
+func prepareSpaceService(t *testing.T, isPersonal bool, includeSpaceInfo bool) (*mock_space.MockService, error) {
spaceService := mock_space.NewMockService(t)
space := mock_clientspace.NewMockSpace(t)
ctrl := gomock.NewController(t)
@@ -678,12 +687,14 @@ func prepareSpaceService(t *testing.T, isPersonal bool) (*mock_space.MockService
st.EXPECT().TreeStorage(mock.Anything, mock.Anything).Return(mockSt, nil)
mockSt.EXPECT().Heads(gomock.Any()).Return([]string{"heads"}, nil)
space.EXPECT().Storage().Return(st)
- space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Workspace: workspaceId})
+ if includeSpaceInfo {
+ space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Workspace: workspaceId})
+ }
spaceService.EXPECT().Get(context.Background(), spaceId).Return(space, nil)
return spaceService, nil
}
-func prepareExporter(t *testing.T, objectTypeId string, spaceService *mock_space.MockService) export.Export {
+func prepareExporter(t *testing.T, objectTypeId string, spaceService *mock_space.MockService, includeSpaceInfo bool) export.Export {
storeFixture := objectstore.NewStoreFixture(t)
objectTypeUniqueKey, err := domain.NewUniqueKey(smartblock.SmartBlockTypeObjectType, objectTypeId)
assert.Nil(t, err)
@@ -740,23 +751,25 @@ func prepareExporter(t *testing.T, objectTypeId string, spaceService *mock_space
objectType.Doc = objectTypeDoc
objectType.SetType(smartblock.SmartBlockTypeObjectType)
- workspaceTest := smarttest.New(workspaceId)
- workspaceDoc := workspaceTest.NewState().SetDetails(domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{
- bundle.RelationKeyId: domain.String(workspaceId),
- bundle.RelationKeyType: domain.String(objectTypeId),
- }))
- workspaceDoc.AddRelationLinks(&model.RelationLink{
- Key: bundle.RelationKeyId.String(),
- Format: model.RelationFormat_longtext,
- }, &model.RelationLink{
- Key: bundle.RelationKeyType.String(),
- Format: model.RelationFormat_longtext,
- })
- workspaceTest.Doc = workspaceDoc
+ if includeSpaceInfo {
+ workspaceTest := smarttest.New(workspaceId)
+ workspaceDoc := workspaceTest.NewState().SetDetails(domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{
+ bundle.RelationKeyId: domain.String(workspaceId),
+ bundle.RelationKeyType: domain.String(objectTypeId),
+ }))
+ workspaceDoc.AddRelationLinks(&model.RelationLink{
+ Key: bundle.RelationKeyId.String(),
+ Format: model.RelationFormat_longtext,
+ }, &model.RelationLink{
+ Key: bundle.RelationKeyType.String(),
+ Format: model.RelationFormat_longtext,
+ })
+ workspaceTest.Doc = workspaceDoc
+ objectGetter.EXPECT().GetObject(context.Background(), workspaceId).Return(workspaceTest, nil)
+ }
objectGetter.EXPECT().GetObject(context.Background(), objectId).Return(smartBlockTest, nil)
objectGetter.EXPECT().GetObject(context.Background(), objectTypeId).Return(objectType, nil)
- objectGetter.EXPECT().GetObject(context.Background(), workspaceId).Return(workspaceTest, nil)
a := &app.App{}
mockSender := mock_event.NewMockSender(t)
diff --git a/docs/proto.md b/docs/proto.md
index 76b9227fa..e33da4ba0 100644
--- a/docs/proto.md
+++ b/docs/proto.md
@@ -18984,7 +18984,7 @@ Available undo/redo operations
| spaceId | [string](#string) | | |
| objectId | [string](#string) | | |
| uri | [string](#string) | | |
-| joinSpace | [bool](#bool) | | |
+| includeSpaceInfo | [bool](#bool) | | |
diff --git a/pb/commands.pb.go b/pb/commands.pb.go
index 1d09460b0..f7a94a818 100644
--- a/pb/commands.pb.go
+++ b/pb/commands.pb.go
@@ -20382,10 +20382,10 @@ func (m *RpcPublishingCreate) XXX_DiscardUnknown() {
var xxx_messageInfo_RpcPublishingCreate proto.InternalMessageInfo
type RpcPublishingCreateRequest struct {
- SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
- ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
- Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
- JoinSpace bool `protobuf:"varint,4,opt,name=joinSpace,proto3" json:"joinSpace,omitempty"`
+ SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
+ Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
+ IncludeSpaceInfo bool `protobuf:"varint,4,opt,name=includeSpaceInfo,proto3" json:"includeSpaceInfo,omitempty"`
}
func (m *RpcPublishingCreateRequest) Reset() { *m = RpcPublishingCreateRequest{} }
@@ -20442,9 +20442,9 @@ func (m *RpcPublishingCreateRequest) GetUri() string {
return ""
}
-func (m *RpcPublishingCreateRequest) GetJoinSpace() bool {
+func (m *RpcPublishingCreateRequest) GetIncludeSpaceInfo() bool {
if m != nil {
- return m.JoinSpace
+ return m.IncludeSpaceInfo
}
return false
}
@@ -76073,79 +76073,79 @@ func init() {
func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) }
var fileDescriptor_8261c968b2e6f45c = []byte{
- // 21482 bytes of a gzipped FileDescriptorProto
+ // 21491 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49,
0x59, 0x37, 0x3a, 0x95, 0x59, 0x55, 0xdd, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x59,
0x66, 0xd7, 0xd9, 0x65, 0x59, 0x97, 0xa5, 0x17, 0x16, 0x44, 0x76, 0xd9, 0x65, 0xa9, 0xae, 0xca,
- 0xee, 0xae, 0xdd, 0xea, 0xaa, 0x26, 0xab, 0x7a, 0x66, 0xc7, 0xef, 0x78, 0xda, 0x9c, 0xaa, 0xe8,
- 0xee, 0xdc, 0xa9, 0xce, 0x2c, 0x32, 0xb3, 0x67, 0xb6, 0x39, 0xcf, 0x77, 0x3e, 0x11, 0x57, 0x40,
- 0x44, 0x44, 0x45, 0x45, 0xe4, 0xb6, 0x08, 0x08, 0xc8, 0xfd, 0xf6, 0x81, 0x72, 0x91, 0x8b, 0x20,
- 0xa2, 0xa2, 0x78, 0x01, 0x94, 0x23, 0x5e, 0x50, 0xfc, 0x8e, 0x1e, 0x3f, 0x3c, 0x0a, 0xe2, 0x27,
- 0x7a, 0x9e, 0xb8, 0x64, 0x66, 0x44, 0x75, 0x65, 0x56, 0x64, 0x75, 0x65, 0xf5, 0xa2, 0xe7, 0xaf,
- 0xaa, 0x8c, 0x8c, 0x7c, 0xe3, 0x8d, 0xf7, 0xf7, 0x46, 0xc4, 0x1b, 0x11, 0x6f, 0xbc, 0x01, 0x4e,
- 0xf7, 0x2e, 0xde, 0xd6, 0x73, 0x1d, 0xdf, 0xf1, 0x6e, 0x6b, 0x3b, 0xbb, 0xbb, 0xa6, 0xdd, 0xf1,
- 0x16, 0xf1, 0xb3, 0x3a, 0x65, 0xda, 0xfb, 0xfe, 0x7e, 0x0f, 0x6a, 0x37, 0xf6, 0x2e, 0x6d, 0xdf,
- 0xd6, 0xb5, 0x2e, 0xde, 0xd6, 0xbb, 0x78, 0xdb, 0xae, 0xd3, 0x81, 0xdd, 0xe0, 0x03, 0xfc, 0x40,
- 0xb3, 0x6b, 0x37, 0xc7, 0xe5, 0xea, 0x3a, 0x6d, 0xb3, 0xeb, 0xf9, 0x8e, 0x0b, 0x69, 0xce, 0x53,
- 0x51, 0x91, 0xf0, 0x32, 0xb4, 0xfd, 0x80, 0xc2, 0xb5, 0xdb, 0x8e, 0xb3, 0xdd, 0x85, 0xe4, 0xdd,
- 0xc5, 0xbd, 0xad, 0xdb, 0x3c, 0xdf, 0xdd, 0x6b, 0xfb, 0xf4, 0xed, 0xf5, 0xfd, 0x6f, 0x3b, 0xd0,
- 0x6b, 0xbb, 0x56, 0xcf, 0x77, 0x5c, 0x92, 0xe3, 0xec, 0x07, 0x7f, 0x77, 0x1a, 0xc8, 0x46, 0xaf,
- 0xad, 0x7d, 0x63, 0x0a, 0xc8, 0xa5, 0x5e, 0x4f, 0xfb, 0xa4, 0x04, 0xc0, 0x0a, 0xf4, 0xcf, 0x41,
- 0xd7, 0xb3, 0x1c, 0x5b, 0x3b, 0x0e, 0xa6, 0x0c, 0xf8, 0xec, 0x3d, 0xe8, 0xf9, 0x77, 0xe6, 0x5f,
- 0xf0, 0x57, 0x72, 0x4e, 0x7b, 0xbd, 0x04, 0xa6, 0x0d, 0xe8, 0xf5, 0x1c, 0xdb, 0x83, 0xea, 0x33,
- 0x41, 0x01, 0xba, 0xae, 0xe3, 0x9e, 0xce, 0x5d, 0x9f, 0xbb, 0x79, 0xf6, 0xf6, 0x5b, 0x16, 0x69,
- 0xf5, 0x17, 0x8d, 0x5e, 0x7b, 0xb1, 0xd4, 0xeb, 0x2d, 0x46, 0x94, 0x16, 0x83, 0x8f, 0x16, 0x75,
- 0xf4, 0x85, 0x41, 0x3e, 0x54, 0x4f, 0x83, 0xa9, 0xcb, 0x24, 0xc3, 0x69, 0xe9, 0xfa, 0xdc, 0xcd,
- 0x33, 0x46, 0xf0, 0x88, 0xde, 0x74, 0xa0, 0x6f, 0x5a, 0x5d, 0xef, 0xb4, 0x4c, 0xde, 0xd0, 0x47,
- 0xed, 0xe1, 0x1c, 0x28, 0x60, 0x22, 0x6a, 0x19, 0xe4, 0xdb, 0x4e, 0x07, 0xe2, 0xe2, 0x17, 0x6e,
- 0xbf, 0x4d, 0xbc, 0xf8, 0xc5, 0xb2, 0xd3, 0x81, 0x06, 0xfe, 0x58, 0xbd, 0x1e, 0xcc, 0x06, 0x62,
- 0x89, 0xd8, 0x60, 0x93, 0xce, 0xde, 0x0e, 0xf2, 0x28, 0xbf, 0x3a, 0x0d, 0xf2, 0xf5, 0x8d, 0x5a,
- 0x4d, 0x39, 0xa6, 0x9e, 0x00, 0xf3, 0x1b, 0xf5, 0xfb, 0xea, 0x8d, 0xf3, 0xf5, 0x4d, 0xdd, 0x30,
- 0x1a, 0x86, 0x92, 0x53, 0xe7, 0xc1, 0xcc, 0x52, 0xa9, 0xb2, 0x59, 0xad, 0xaf, 0x6f, 0xb4, 0x14,
- 0x49, 0x7b, 0x95, 0x0c, 0x16, 0x9a, 0xd0, 0xaf, 0xc0, 0xcb, 0x56, 0x1b, 0x36, 0x7d, 0xd3, 0x87,
- 0xda, 0x4b, 0x72, 0xa1, 0x30, 0xd5, 0x0d, 0x54, 0x68, 0xf8, 0x8a, 0x56, 0xe0, 0xc9, 0x07, 0x2a,
- 0xc0, 0x53, 0x58, 0xa4, 0x5f, 0x2f, 0x32, 0x69, 0x06, 0x4b, 0xe7, 0xec, 0x13, 0xc0, 0x2c, 0xf3,
- 0x4e, 0x5d, 0x00, 0x60, 0xa9, 0x54, 0xbe, 0x6f, 0xc5, 0x68, 0x6c, 0xd4, 0x2b, 0xca, 0x31, 0xf4,
- 0xbc, 0xdc, 0x30, 0x74, 0xfa, 0x9c, 0xd3, 0xbe, 0x95, 0x63, 0xc0, 0xac, 0xf0, 0x60, 0x2e, 0x0e,
- 0x67, 0x66, 0x00, 0xa0, 0xda, 0x1b, 0x42, 0x70, 0x56, 0x38, 0x70, 0x9e, 0x9c, 0x8e, 0x5c, 0xf6,
- 0x00, 0x3d, 0x24, 0x81, 0xe9, 0xe6, 0xce, 0x9e, 0xdf, 0x71, 0xae, 0xd8, 0xda, 0x4c, 0x88, 0x8c,
- 0xf6, 0x77, 0xac, 0x4c, 0x9e, 0xc1, 0xcb, 0xe4, 0xe6, 0x83, 0x95, 0xa0, 0x14, 0x62, 0xa4, 0xf1,
- 0x9a, 0x50, 0x1a, 0x25, 0x4e, 0x1a, 0x4f, 0x10, 0x25, 0x94, 0xbd, 0x1c, 0xbe, 0x70, 0x17, 0x28,
- 0x34, 0x7b, 0x66, 0x1b, 0x6a, 0x9f, 0x95, 0xc1, 0x5c, 0x0d, 0x9a, 0x97, 0x61, 0xa9, 0xd7, 0x73,
- 0x9d, 0xcb, 0x50, 0x2b, 0x47, 0xfa, 0x7a, 0x1a, 0x4c, 0x79, 0x28, 0x53, 0xb5, 0x83, 0x6b, 0x30,
- 0x63, 0x04, 0x8f, 0xea, 0x19, 0x00, 0xac, 0x0e, 0xb4, 0x7d, 0xcb, 0xb7, 0xa0, 0x77, 0x5a, 0xba,
- 0x5e, 0xbe, 0x79, 0xc6, 0x60, 0x52, 0xb4, 0x6f, 0x48, 0xa2, 0x3a, 0x86, 0xb9, 0x58, 0x64, 0x39,
- 0x88, 0x91, 0xea, 0xeb, 0x24, 0x11, 0x1d, 0x1b, 0x4a, 0x2e, 0x9d, 0x6c, 0xdf, 0x96, 0x4b, 0x2f,
- 0x5c, 0x94, 0xa3, 0xde, 0xd8, 0x6c, 0x6e, 0x94, 0x57, 0x37, 0x9b, 0xeb, 0xa5, 0xb2, 0xae, 0x40,
- 0xf5, 0x24, 0x50, 0xf0, 0xdf, 0xcd, 0x6a, 0x73, 0xb3, 0xa2, 0xd7, 0xf4, 0x96, 0x5e, 0x51, 0xb6,
- 0x54, 0x15, 0x2c, 0x18, 0xfa, 0xb3, 0x36, 0xf4, 0x66, 0x6b, 0x73, 0xb9, 0x54, 0xad, 0xe9, 0x15,
- 0x65, 0x1b, 0x7d, 0x5c, 0xab, 0xae, 0x55, 0x5b, 0x9b, 0x86, 0x5e, 0x2a, 0xaf, 0xea, 0x15, 0x65,
- 0x47, 0x7d, 0x14, 0xb8, 0xaa, 0xde, 0xd8, 0x2c, 0xad, 0xaf, 0x1b, 0x8d, 0x73, 0xfa, 0x26, 0xfd,
- 0xa2, 0xa9, 0x58, 0xa4, 0xa0, 0xd6, 0x66, 0x73, 0xb5, 0x64, 0xe8, 0xa5, 0xa5, 0x9a, 0xae, 0x3c,
- 0xa0, 0x3d, 0x4f, 0x06, 0xf3, 0x6b, 0xe6, 0x25, 0xd8, 0xdc, 0x31, 0x5d, 0x68, 0x5e, 0xec, 0x42,
- 0xed, 0x06, 0x01, 0x3c, 0xb5, 0xcf, 0xb2, 0x78, 0xe9, 0x3c, 0x5e, 0xb7, 0x0d, 0x10, 0x30, 0x57,
- 0x44, 0x0c, 0x60, 0xff, 0x1c, 0x36, 0x83, 0x55, 0x0e, 0xb0, 0xa7, 0xa4, 0xa4, 0x97, 0x0e, 0xb1,
- 0x1f, 0x7a, 0x04, 0x20, 0xa6, 0x7d, 0x31, 0x0f, 0x16, 0xaa, 0xf6, 0x65, 0xcb, 0x87, 0x2b, 0xd0,
- 0x86, 0x2e, 0x1a, 0x07, 0x5e, 0x95, 0x13, 0x69, 0x57, 0x2d, 0x00, 0x2c, 0xfc, 0x5d, 0x6b, 0xbf,
- 0x07, 0x71, 0xf5, 0x06, 0xcb, 0x8b, 0x27, 0x1e, 0x0e, 0x11, 0xd5, 0xf0, 0x5b, 0x83, 0xa1, 0x73,
- 0xf6, 0x06, 0x00, 0xa2, 0x37, 0x2a, 0x00, 0xc5, 0x35, 0xb8, 0x7b, 0x11, 0xba, 0xca, 0x31, 0x75,
- 0x06, 0x14, 0x56, 0xd0, 0x97, 0x4a, 0x4e, 0x7b, 0xbd, 0xcc, 0xa8, 0xc0, 0x32, 0xaf, 0x02, 0x4f,
- 0x14, 0x61, 0x61, 0xd0, 0x48, 0x7f, 0x2d, 0x98, 0x21, 0x7c, 0x94, 0xad, 0x0e, 0x45, 0x2b, 0x4a,
- 0x50, 0x6f, 0x04, 0xf3, 0xe4, 0x61, 0xd9, 0xea, 0xc2, 0xfb, 0xe0, 0x3e, 0x1d, 0xf3, 0xf9, 0x44,
- 0xed, 0xc7, 0xc2, 0x86, 0x5f, 0xe5, 0xf4, 0xe8, 0x7b, 0xd2, 0x32, 0x95, 0x4e, 0x91, 0x5e, 0xf6,
- 0x48, 0x68, 0xfa, 0x07, 0x5a, 0xb8, 0xa5, 0x7d, 0x5b, 0x02, 0xb3, 0x4d, 0xdf, 0xe9, 0xa1, 0xe6,
- 0x62, 0xd9, 0xdb, 0x62, 0xed, 0xfb, 0xd3, 0x6c, 0xfb, 0x2e, 0xf3, 0xe0, 0x3e, 0x61, 0x80, 0x1c,
- 0x99, 0x02, 0x62, 0x5a, 0xf7, 0x37, 0xc2, 0xd6, 0xbd, 0xcc, 0xa1, 0x72, 0x7b, 0x2a, 0x6a, 0xdf,
- 0x81, 0x6d, 0xfb, 0x65, 0x32, 0x50, 0x02, 0x35, 0xf3, 0xcb, 0x7b, 0xae, 0x0b, 0x6d, 0x5f, 0x0c,
- 0x84, 0x3f, 0x66, 0x41, 0x58, 0xe5, 0x41, 0xb8, 0x3d, 0x41, 0x99, 0x83, 0x52, 0x32, 0x6c, 0x63,
- 0x1f, 0x0d, 0xd1, 0xbc, 0x8f, 0x43, 0xf3, 0x7b, 0xd3, 0xb3, 0x95, 0x0e, 0xd2, 0xd5, 0x11, 0x10,
+ 0xee, 0xae, 0xdd, 0xea, 0xaa, 0x26, 0xab, 0x7a, 0x66, 0xc7, 0xef, 0x78, 0xfa, 0xcb, 0xa9, 0x8a,
+ 0xee, 0xce, 0x9d, 0xea, 0xcc, 0x22, 0x33, 0x7b, 0x66, 0x9b, 0xf3, 0x7c, 0xe7, 0x13, 0x71, 0x05,
+ 0x44, 0x44, 0x54, 0x54, 0x44, 0x6e, 0x8b, 0x80, 0x80, 0xdc, 0x6f, 0x1f, 0x28, 0xa0, 0x5c, 0x04,
+ 0x11, 0x11, 0xc5, 0x0b, 0xa0, 0x1c, 0xf1, 0x82, 0xe2, 0x77, 0xf4, 0xf8, 0xe1, 0x51, 0x10, 0x15,
+ 0x3d, 0x4f, 0x5c, 0x32, 0x33, 0xa2, 0xba, 0x32, 0x2b, 0xb2, 0xba, 0xb2, 0x7a, 0xd1, 0xf3, 0x57,
+ 0x55, 0x46, 0x46, 0xbe, 0xf1, 0xc6, 0xfb, 0x7b, 0x23, 0xe2, 0x8d, 0x88, 0x37, 0xde, 0x00, 0xa7,
+ 0x7b, 0x17, 0x6f, 0xeb, 0xb9, 0x8e, 0xef, 0x78, 0xb7, 0xb5, 0x9d, 0xdd, 0x5d, 0xd3, 0xee, 0x78,
+ 0x8b, 0xf8, 0x59, 0x9d, 0x32, 0xed, 0x7d, 0x7f, 0xbf, 0x07, 0xb5, 0x1b, 0x7b, 0x97, 0xb6, 0x6f,
+ 0xeb, 0x5a, 0x17, 0x6f, 0xeb, 0x5d, 0xbc, 0x6d, 0xd7, 0xe9, 0xc0, 0x6e, 0xf0, 0x01, 0x7e, 0xa0,
+ 0xd9, 0xb5, 0x9b, 0xe3, 0x72, 0x75, 0x9d, 0xb6, 0xd9, 0xf5, 0x7c, 0xc7, 0x85, 0x34, 0xe7, 0xa9,
+ 0xa8, 0x48, 0x78, 0x19, 0xda, 0x7e, 0x40, 0xe1, 0xda, 0x6d, 0xc7, 0xd9, 0xee, 0x42, 0xf2, 0xee,
+ 0xe2, 0xde, 0xd6, 0x6d, 0x9e, 0xef, 0xee, 0xb5, 0x7d, 0xfa, 0xf6, 0xfa, 0xfe, 0xb7, 0x1d, 0xe8,
+ 0xb5, 0x5d, 0xab, 0xe7, 0x3b, 0x2e, 0xc9, 0x71, 0xf6, 0x53, 0xbf, 0x33, 0x0d, 0x64, 0xa3, 0xd7,
+ 0xd6, 0xbe, 0x31, 0x05, 0xe4, 0x52, 0xaf, 0xa7, 0x7d, 0x42, 0x02, 0x60, 0x05, 0xfa, 0xe7, 0xa0,
+ 0xeb, 0x59, 0x8e, 0xad, 0x1d, 0x07, 0x53, 0x06, 0x7c, 0xf6, 0x1e, 0xf4, 0xfc, 0x3b, 0xf3, 0x2f,
+ 0xf8, 0x4b, 0x39, 0xa7, 0xbd, 0x5e, 0x02, 0xd3, 0x06, 0xf4, 0x7a, 0x8e, 0xed, 0x41, 0xf5, 0x99,
+ 0xa0, 0x00, 0x5d, 0xd7, 0x71, 0x4f, 0xe7, 0xae, 0xcf, 0xdd, 0x3c, 0x7b, 0xfb, 0x2d, 0x8b, 0xb4,
+ 0xfa, 0x8b, 0x46, 0xaf, 0xbd, 0x58, 0xea, 0xf5, 0x16, 0x23, 0x4a, 0x8b, 0xc1, 0x47, 0x8b, 0x3a,
+ 0xfa, 0xc2, 0x20, 0x1f, 0xaa, 0xa7, 0xc1, 0xd4, 0x65, 0x92, 0xe1, 0xb4, 0x74, 0x7d, 0xee, 0xe6,
+ 0x19, 0x23, 0x78, 0x44, 0x6f, 0x3a, 0xd0, 0x37, 0xad, 0xae, 0x77, 0x5a, 0x26, 0x6f, 0xe8, 0xa3,
+ 0xf6, 0x70, 0x0e, 0x14, 0x30, 0x11, 0xb5, 0x0c, 0xf2, 0x6d, 0xa7, 0x03, 0x71, 0xf1, 0x0b, 0xb7,
+ 0xdf, 0x26, 0x5e, 0xfc, 0x62, 0xd9, 0xe9, 0x40, 0x03, 0x7f, 0xac, 0x5e, 0x0f, 0x66, 0x03, 0xb1,
+ 0x44, 0x6c, 0xb0, 0x49, 0x67, 0x6f, 0x07, 0x79, 0x94, 0x5f, 0x9d, 0x06, 0xf9, 0xfa, 0x46, 0xad,
+ 0xa6, 0x1c, 0x53, 0x4f, 0x80, 0xf9, 0x8d, 0xfa, 0x7d, 0xf5, 0xc6, 0xf9, 0xfa, 0xa6, 0x6e, 0x18,
+ 0x0d, 0x43, 0xc9, 0xa9, 0xf3, 0x60, 0x66, 0xa9, 0x54, 0xd9, 0xac, 0xd6, 0xd7, 0x37, 0x5a, 0x8a,
+ 0xa4, 0xbd, 0x4a, 0x06, 0x0b, 0x4d, 0xe8, 0x57, 0xe0, 0x65, 0xab, 0x0d, 0x9b, 0xbe, 0xe9, 0x43,
+ 0xed, 0x25, 0xb9, 0x50, 0x98, 0xea, 0x06, 0x2a, 0x34, 0x7c, 0x45, 0x2b, 0xf0, 0xe4, 0x03, 0x15,
+ 0xe0, 0x29, 0x2c, 0xd2, 0xaf, 0x17, 0x99, 0x34, 0x83, 0xa5, 0x73, 0xf6, 0x09, 0x60, 0x96, 0x79,
+ 0xa7, 0x2e, 0x00, 0xb0, 0x54, 0x2a, 0xdf, 0xb7, 0x62, 0x34, 0x36, 0xea, 0x15, 0xe5, 0x18, 0x7a,
+ 0x5e, 0x6e, 0x18, 0x3a, 0x7d, 0xce, 0x69, 0xdf, 0xca, 0x31, 0x60, 0x56, 0x78, 0x30, 0x17, 0x87,
+ 0x33, 0x33, 0x00, 0x50, 0xed, 0x0d, 0x21, 0x38, 0x2b, 0x1c, 0x38, 0x4f, 0x4e, 0x47, 0x2e, 0x7b,
+ 0x80, 0x1e, 0x92, 0xc0, 0x74, 0x73, 0x67, 0xcf, 0xef, 0x38, 0x57, 0x6c, 0x6d, 0x26, 0x44, 0x46,
+ 0xfb, 0x5b, 0x56, 0x26, 0xcf, 0xe0, 0x65, 0x72, 0xf3, 0xc1, 0x4a, 0x50, 0x0a, 0x31, 0xd2, 0x78,
+ 0x4d, 0x28, 0x8d, 0x12, 0x27, 0x8d, 0x27, 0x88, 0x12, 0xca, 0x5e, 0x0e, 0x5f, 0xb8, 0x0b, 0x14,
+ 0x9a, 0x3d, 0xb3, 0x0d, 0xb5, 0xcf, 0xc8, 0x60, 0xae, 0x06, 0xcd, 0xcb, 0xb0, 0xd4, 0xeb, 0xb9,
+ 0xce, 0x65, 0xa8, 0x95, 0x23, 0x7d, 0x3d, 0x0d, 0xa6, 0x3c, 0x94, 0xa9, 0xda, 0xc1, 0x35, 0x98,
+ 0x31, 0x82, 0x47, 0xf5, 0x0c, 0x00, 0x56, 0x07, 0xda, 0xbe, 0xe5, 0x5b, 0xd0, 0x3b, 0x2d, 0x5d,
+ 0x2f, 0xdf, 0x3c, 0x63, 0x30, 0x29, 0xda, 0x37, 0x24, 0x51, 0x1d, 0xc3, 0x5c, 0x2c, 0xb2, 0x1c,
+ 0xc4, 0x48, 0xf5, 0x75, 0x92, 0x88, 0x8e, 0x0d, 0x25, 0x97, 0x4e, 0xb6, 0x6f, 0xcb, 0xa5, 0x17,
+ 0x2e, 0xca, 0x51, 0x6f, 0x6c, 0x36, 0x37, 0xca, 0xab, 0x9b, 0xcd, 0xf5, 0x52, 0x59, 0x57, 0xa0,
+ 0x7a, 0x12, 0x28, 0xf8, 0xef, 0x66, 0xb5, 0xb9, 0x59, 0xd1, 0x6b, 0x7a, 0x4b, 0xaf, 0x28, 0x5b,
+ 0xaa, 0x0a, 0x16, 0x0c, 0xfd, 0x59, 0x1b, 0x7a, 0xb3, 0xb5, 0xb9, 0x5c, 0xaa, 0xd6, 0xf4, 0x8a,
+ 0xb2, 0x8d, 0x3e, 0xae, 0x55, 0xd7, 0xaa, 0xad, 0x4d, 0x43, 0x2f, 0x95, 0x57, 0xf5, 0x8a, 0xb2,
+ 0xa3, 0x3e, 0x0a, 0x5c, 0x55, 0x6f, 0x6c, 0x96, 0xd6, 0xd7, 0x8d, 0xc6, 0x39, 0x7d, 0x93, 0x7e,
+ 0xd1, 0x54, 0x2c, 0x52, 0x50, 0x6b, 0xb3, 0xb9, 0x5a, 0x32, 0xf4, 0xd2, 0x52, 0x4d, 0x57, 0x1e,
+ 0xd0, 0x9e, 0x27, 0x83, 0xf9, 0x35, 0xf3, 0x12, 0x6c, 0xee, 0x98, 0x2e, 0x34, 0x2f, 0x76, 0xa1,
+ 0x76, 0x83, 0x00, 0x9e, 0xda, 0x67, 0x58, 0xbc, 0x74, 0x1e, 0xaf, 0xdb, 0x06, 0x08, 0x98, 0x2b,
+ 0x22, 0x06, 0xb0, 0x7f, 0x0a, 0x9b, 0xc1, 0x2a, 0x07, 0xd8, 0x53, 0x52, 0xd2, 0x4b, 0x87, 0xd8,
+ 0x0f, 0x3e, 0x02, 0x10, 0xd3, 0xbe, 0x98, 0x07, 0x0b, 0x55, 0xfb, 0xb2, 0xe5, 0xc3, 0x15, 0x68,
+ 0x43, 0x17, 0x8d, 0x03, 0xaf, 0xca, 0x89, 0xb4, 0xab, 0x16, 0x00, 0x16, 0xfe, 0xae, 0xb5, 0xdf,
+ 0x83, 0xb8, 0x7a, 0x83, 0xe5, 0xc5, 0x13, 0x0f, 0x87, 0x88, 0x6a, 0xf8, 0xad, 0xc1, 0xd0, 0x39,
+ 0x7b, 0x03, 0x00, 0xd1, 0x1b, 0x15, 0x80, 0xe2, 0x1a, 0xdc, 0xbd, 0x08, 0x5d, 0xe5, 0x98, 0x3a,
+ 0x03, 0x0a, 0x2b, 0xe8, 0x4b, 0x25, 0xa7, 0xbd, 0x5e, 0x66, 0x54, 0x60, 0x99, 0x57, 0x81, 0x27,
+ 0x8a, 0xb0, 0x30, 0x68, 0xa4, 0xbf, 0x16, 0xcc, 0x10, 0x3e, 0xca, 0x56, 0x87, 0xa2, 0x15, 0x25,
+ 0xa8, 0x37, 0x82, 0x79, 0xf2, 0xb0, 0x6c, 0x75, 0xe1, 0x7d, 0x70, 0x9f, 0x8e, 0xf9, 0x7c, 0xa2,
+ 0xf6, 0xa3, 0x61, 0xc3, 0xaf, 0x72, 0x7a, 0xf4, 0x3d, 0x69, 0x99, 0x4a, 0xa7, 0x48, 0x2f, 0x7b,
+ 0x24, 0x34, 0xfd, 0x03, 0x2d, 0xdc, 0xd2, 0xbe, 0x2d, 0x81, 0xd9, 0xa6, 0xef, 0xf4, 0x50, 0x73,
+ 0xb1, 0xec, 0x6d, 0xb1, 0xf6, 0xfd, 0x29, 0xb6, 0x7d, 0x97, 0x79, 0x70, 0x9f, 0x30, 0x40, 0x8e,
+ 0x4c, 0x01, 0x31, 0xad, 0xfb, 0x1b, 0x61, 0xeb, 0x5e, 0xe6, 0x50, 0xb9, 0x3d, 0x15, 0xb5, 0xef,
+ 0xc0, 0xb6, 0xfd, 0x32, 0x19, 0x28, 0x81, 0x9a, 0xf9, 0xe5, 0x3d, 0xd7, 0x85, 0xb6, 0x2f, 0x06,
+ 0xc2, 0x1f, 0xb1, 0x20, 0xac, 0xf2, 0x20, 0xdc, 0x9e, 0xa0, 0xcc, 0x41, 0x29, 0x19, 0xb6, 0xb1,
+ 0x5f, 0x0d, 0xd1, 0xbc, 0x8f, 0x43, 0xf3, 0x7b, 0xd3, 0xb3, 0x95, 0x0e, 0xd2, 0xd5, 0x11, 0x10,
0x3d, 0x09, 0x14, 0x34, 0x1e, 0x96, 0x5b, 0xd5, 0x73, 0xfa, 0x66, 0xb5, 0x7e, 0xae, 0xda, 0xd2,
0x15, 0xa8, 0xbd, 0x54, 0x8e, 0xfa, 0x5c, 0x1f, 0x77, 0x6a, 0x62, 0xa8, 0x7c, 0x51, 0x1a, 0xad,
0xdf, 0x23, 0x65, 0x4c, 0x04, 0x13, 0xf1, 0x7e, 0x6f, 0x20, 0x53, 0xe9, 0x10, 0xb9, 0x77, 0x04,
0x44, 0x4e, 0x01, 0xb5, 0x5a, 0x3f, 0x57, 0xaa, 0x55, 0x2b, 0xa4, 0x8d, 0x6d, 0xb6, 0x2e, 0xac,
- 0x23, 0x4c, 0x7e, 0x4a, 0x06, 0x73, 0x84, 0x35, 0x03, 0x5e, 0x76, 0x2e, 0x09, 0x1a, 0x23, 0x5f,
- 0x4e, 0x69, 0x3c, 0xb2, 0x25, 0xc4, 0xf4, 0x56, 0x3f, 0x9a, 0xc2, 0x78, 0x4c, 0x20, 0xf7, 0x48,
- 0x1a, 0x41, 0x0e, 0x74, 0x4d, 0xdb, 0x03, 0x7a, 0xb0, 0x81, 0x23, 0xc8, 0xc7, 0xf3, 0x81, 0x3d,
+ 0x23, 0x4c, 0x7e, 0x52, 0x06, 0x73, 0x84, 0x35, 0x03, 0x5e, 0x76, 0x2e, 0x09, 0x1a, 0x23, 0x5f,
+ 0x4e, 0x69, 0x3c, 0xb2, 0x25, 0xc4, 0xf4, 0x56, 0x3f, 0x92, 0xc2, 0x78, 0x4c, 0x20, 0xf7, 0x48,
+ 0x1a, 0x41, 0x0e, 0x74, 0x4d, 0xdb, 0x03, 0x7a, 0xb0, 0x81, 0x23, 0xc8, 0xc7, 0xf2, 0x81, 0x3d,
0x70, 0xce, 0x82, 0x57, 0xb4, 0xb5, 0x08, 0x13, 0x4e, 0x6d, 0x73, 0x43, 0xd5, 0x56, 0x1a, 0xa4,
0xb6, 0x5f, 0x65, 0xed, 0x88, 0x25, 0x1e, 0xbd, 0x5b, 0x63, 0xc5, 0x8d, 0x38, 0x89, 0x5f, 0x2d,
0x08, 0x14, 0x45, 0xe2, 0xad, 0xa5, 0x6b, 0xc1, 0x0c, 0xfe, 0x5b, 0x37, 0x77, 0x21, 0x6d, 0x43,
@@ -76157,8 +76157,8 @@ var fileDescriptor_8261c968b2e6f45c = []byte{
0x8a, 0x51, 0x2a, 0xca, 0x5b, 0x6e, 0xd4, 0x5b, 0x7a, 0xbd, 0xa5, 0x6c, 0x0d, 0xd4, 0xbf, 0x6d,
0xed, 0x75, 0x79, 0x90, 0xbf, 0xd7, 0xb1, 0x6c, 0xed, 0xa1, 0x1c, 0xa7, 0x40, 0x36, 0xf4, 0xaf,
0x38, 0xee, 0xa5, 0xb0, 0x59, 0x47, 0x09, 0xc9, 0x48, 0x46, 0x8a, 0x27, 0x0f, 0x55, 0xbc, 0xfc,
- 0x20, 0xc5, 0xfb, 0x49, 0x56, 0xf1, 0xee, 0xe2, 0x15, 0xef, 0xa6, 0x01, 0xf2, 0x47, 0xcc, 0xc7,
- 0x74, 0x17, 0x9f, 0x0a, 0xbb, 0x8b, 0x7b, 0x38, 0x18, 0x1f, 0x2f, 0x46, 0x26, 0x1d, 0x80, 0x5f,
+ 0x20, 0xc5, 0xfb, 0x09, 0x56, 0xf1, 0xee, 0xe2, 0x15, 0xef, 0xa6, 0x01, 0xf2, 0x47, 0xcc, 0xc7,
+ 0x74, 0x17, 0x9f, 0x0c, 0xbb, 0x8b, 0x7b, 0x38, 0x18, 0x1f, 0x2f, 0x46, 0x26, 0x1d, 0x80, 0x5f,
0xca, 0xb4, 0x9b, 0x18, 0x04, 0xf5, 0x76, 0x0c, 0xd4, 0x3b, 0x03, 0x7a, 0x10, 0xeb, 0x60, 0x47,
0xf3, 0xc0, 0xc1, 0x4e, 0xe5, 0x92, 0x7a, 0x35, 0x38, 0x51, 0xa9, 0x2e, 0x2f, 0xeb, 0x86, 0x5e,
0x6f, 0x6d, 0xd6, 0xf5, 0xd6, 0xf9, 0x86, 0x71, 0x9f, 0xd2, 0xd5, 0x1e, 0x96, 0x01, 0x40, 0x12,
@@ -76169,12 +76169,12 @@ var fileDescriptor_8261c968b2e6f45c = []byte{
0xae, 0x80, 0xd9, 0x1e, 0x74, 0x77, 0x2d, 0xcf, 0xb3, 0x1c, 0x9b, 0x2c, 0xe7, 0x2e, 0xdc, 0xfe,
0xd8, 0x50, 0xe2, 0x78, 0xe5, 0x7b, 0x71, 0xdd, 0x74, 0x7d, 0xab, 0x6d, 0xf5, 0x4c, 0xdb, 0x5f,
0x8f, 0x32, 0x1b, 0xec, 0x97, 0xc8, 0xb0, 0x4b, 0x65, 0xa0, 0xf1, 0x35, 0x89, 0x51, 0x89, 0x5f,
- 0x4d, 0x31, 0xa9, 0x4c, 0x24, 0x98, 0x4e, 0x2d, 0x3e, 0x99, 0xa9, 0x5a, 0x0c, 0xc0, 0x7b, 0x5b,
+ 0x49, 0x31, 0xa9, 0x4c, 0x24, 0x98, 0x4e, 0x2d, 0x3e, 0x91, 0xa9, 0x5a, 0x0c, 0xc0, 0x7b, 0x5b,
0xbd, 0x06, 0x5c, 0x5d, 0xad, 0x97, 0x1b, 0x86, 0xa1, 0x97, 0x5b, 0x9b, 0xeb, 0xba, 0xb1, 0x56,
- 0x6d, 0x36, 0xab, 0x8d, 0x7a, 0xf3, 0x30, 0xad, 0x5d, 0xfb, 0x8c, 0x1c, 0x6a, 0x4c, 0x05, 0xb6,
+ 0x6d, 0x36, 0xab, 0x8d, 0x7a, 0xf3, 0x30, 0xad, 0x5d, 0xfb, 0xb4, 0x1c, 0x6a, 0x4c, 0x05, 0xb6,
0xbb, 0x96, 0x0d, 0xb5, 0x7b, 0x0e, 0xa9, 0x30, 0xfc, 0x9a, 0xa1, 0x38, 0xce, 0xb4, 0xfc, 0x18,
0x9c, 0x5f, 0x9b, 0x1e, 0xe7, 0xc1, 0x04, 0xff, 0x03, 0x37, 0xff, 0x2f, 0xcb, 0xe0, 0x04, 0xd3,
- 0x10, 0x0d, 0xb8, 0x3b, 0xb6, 0x75, 0xe0, 0x1f, 0x62, 0xdb, 0x6e, 0x95, 0xc7, 0x74, 0x90, 0xed,
+ 0x10, 0x0d, 0xb8, 0x3b, 0xb6, 0x75, 0xe0, 0x1f, 0x64, 0xdb, 0x6e, 0x95, 0xc7, 0x74, 0x90, 0xed,
0x7d, 0x80, 0x8d, 0x18, 0x58, 0xdf, 0x1c, 0xc2, 0x5a, 0xe3, 0x60, 0x7d, 0xda, 0x08, 0x34, 0xd3,
0x21, 0xfb, 0x8e, 0x4c, 0x91, 0xbd, 0x06, 0x5c, 0xbd, 0x5e, 0x32, 0x5a, 0xd5, 0x72, 0x75, 0xbd,
0x84, 0xc6, 0x51, 0x66, 0xc8, 0x8e, 0x31, 0xee, 0x79, 0xd0, 0x07, 0xe2, 0xfb, 0x91, 0x3c, 0xb8,
@@ -76183,26 +76183,26 @@ var fileDescriptor_8261c968b2e6f45c = []byte{
0x2a, 0x44, 0x8b, 0x57, 0x88, 0x67, 0x24, 0x83, 0x77, 0x80, 0xef, 0x18, 0xdd, 0xf8, 0x5c, 0xa8,
0x1b, 0xe7, 0x39, 0xdd, 0x28, 0x1f, 0x8e, 0x7c, 0x3a, 0x35, 0xf9, 0xcd, 0x47, 0x42, 0x07, 0x10,
0xab, 0x4d, 0x56, 0xfc, 0xa8, 0x30, 0xb0, 0xbb, 0x7f, 0xb5, 0x0c, 0x8a, 0x15, 0xd8, 0x85, 0xbe,
- 0xe0, 0x0c, 0xfe, 0xef, 0x25, 0xd1, 0xed, 0x34, 0x02, 0x03, 0xa1, 0x1d, 0xbf, 0x96, 0xe2, 0x5b,
- 0xbb, 0xd0, 0xf3, 0xcd, 0xdd, 0x1e, 0x16, 0xb5, 0x6c, 0x44, 0x09, 0xda, 0x0f, 0x4b, 0x22, 0x9b,
+ 0xe0, 0x0c, 0xfe, 0xef, 0x24, 0xd1, 0xed, 0x34, 0x02, 0x03, 0xa1, 0x1d, 0xbf, 0x96, 0xe2, 0x5b,
+ 0xbb, 0xd0, 0xf3, 0xcd, 0xdd, 0x1e, 0x16, 0xb5, 0x6c, 0x44, 0x09, 0xda, 0x0f, 0x49, 0x22, 0x9b,
0x6d, 0x09, 0xc5, 0xfc, 0xc7, 0x58, 0x15, 0xfe, 0xbc, 0x04, 0xa6, 0x9b, 0xd0, 0x6f, 0xb8, 0x1d,
0xe8, 0x6a, 0xcd, 0x08, 0xa3, 0xeb, 0xc1, 0x2c, 0x06, 0x05, 0x4d, 0x33, 0x43, 0x9c, 0xd8, 0x24,
0xf5, 0x26, 0xb0, 0x10, 0x3e, 0xe2, 0xcf, 0x69, 0x37, 0xde, 0x97, 0xaa, 0x7d, 0x3d, 0x27, 0xea,
0x03, 0x40, 0x17, 0x7d, 0x29, 0x37, 0x31, 0xad, 0x54, 0x6c, 0x3f, 0x3f, 0x91, 0x54, 0xf6, 0xdb,
- 0xa4, 0xef, 0x94, 0x00, 0xd8, 0xb0, 0xbd, 0x40, 0xae, 0x8f, 0x4f, 0x21, 0x57, 0xed, 0x9f, 0x72,
- 0xe9, 0x66, 0x31, 0x51, 0x39, 0x31, 0x12, 0xfb, 0xc5, 0x14, 0x6b, 0x0b, 0xb1, 0xc4, 0x26, 0xb0,
+ 0xa4, 0xef, 0x94, 0x00, 0xd8, 0xb0, 0xbd, 0x40, 0xae, 0x8f, 0x4f, 0x21, 0x57, 0xed, 0x1f, 0x73,
+ 0xe9, 0x66, 0x31, 0x51, 0x39, 0x31, 0x12, 0xfb, 0x85, 0x14, 0x6b, 0x0b, 0xb1, 0xc4, 0x26, 0xb0,
0xb5, 0x7c, 0x1c, 0x14, 0xcf, 0x9b, 0xdd, 0x2e, 0xf4, 0xb5, 0x57, 0xc9, 0xa0, 0x58, 0x76, 0xa1,
0xe9, 0x43, 0x0d, 0x46, 0xa2, 0xd3, 0xc0, 0xb4, 0xeb, 0x38, 0xfe, 0xba, 0xe9, 0xef, 0x50, 0xb9,
0x85, 0xcf, 0xea, 0xd3, 0xc0, 0xa3, 0xb6, 0xf6, 0xba, 0x5d, 0x1f, 0x3e, 0xe8, 0xaf, 0xbb, 0xd6,
0xae, 0xe9, 0xee, 0xd7, 0x4c, 0x7b, 0x7b, 0xcf, 0xdc, 0x86, 0x94, 0xbd, 0xb8, 0xd7, 0xd4, 0x51,
- 0xe5, 0x97, 0xd9, 0x8e, 0xe7, 0x1e, 0x5e, 0xe8, 0xdf, 0xcd, 0xc9, 0x89, 0xb0, 0xb8, 0x48, 0xd8,
+ 0xe5, 0x97, 0xd8, 0x8e, 0xe7, 0x1e, 0x5e, 0xe8, 0xdf, 0xcd, 0xc9, 0x89, 0xb0, 0xb8, 0x48, 0xd8,
0x8b, 0xe9, 0x79, 0x34, 0x30, 0xbd, 0x6b, 0xc3, 0x5d, 0xc7, 0xb6, 0xda, 0x81, 0xb5, 0x1a, 0x3c,
- 0x6b, 0x1f, 0x0b, 0xd1, 0x58, 0xe2, 0xd0, 0x58, 0x14, 0x2e, 0x25, 0x1d, 0x14, 0xcd, 0x11, 0xfa,
+ 0x6b, 0x1f, 0x0d, 0xd1, 0x58, 0xe2, 0xd0, 0x58, 0x14, 0x2e, 0x25, 0x1d, 0x14, 0xcd, 0x11, 0xfa,
0x9d, 0xeb, 0xc0, 0xa3, 0x49, 0x37, 0xb2, 0xd9, 0x6a, 0x6c, 0x96, 0x0d, 0xbd, 0xd4, 0xd2, 0x37,
0x6b, 0x8d, 0x72, 0xa9, 0xb6, 0x69, 0xe8, 0xeb, 0x0d, 0x05, 0xa2, 0xd9, 0xf9, 0x94, 0x01, 0xdb,
0xce, 0x65, 0xe8, 0x6a, 0xcf, 0xcd, 0x89, 0x41, 0x94, 0x20, 0x94, 0x24, 0xf8, 0x64, 0x11, 0xf8,
- 0x7e, 0x52, 0xd8, 0xcf, 0x88, 0x0a, 0x96, 0x32, 0x1f, 0xd3, 0x62, 0x3e, 0x2e, 0xd4, 0xc7, 0x24,
- 0x92, 0x7a, 0x04, 0x80, 0xf4, 0x8f, 0x12, 0x98, 0x2a, 0x3b, 0xf6, 0x65, 0xe8, 0xfa, 0xec, 0x24,
+ 0x7e, 0x42, 0xd8, 0xcf, 0x88, 0x0a, 0x96, 0x32, 0x1f, 0xd3, 0x62, 0x3e, 0x26, 0xd4, 0xc7, 0x24,
+ 0x92, 0x7a, 0x04, 0x80, 0xf4, 0x0f, 0x12, 0x98, 0x2a, 0x3b, 0xf6, 0x65, 0xe8, 0xfa, 0xec, 0x24,
0x8b, 0xc5, 0x21, 0xd7, 0x87, 0xc3, 0x69, 0x30, 0x05, 0x6d, 0xdf, 0x75, 0x7a, 0xc1, 0x2c, 0x2b,
0x78, 0xd4, 0xde, 0x98, 0x56, 0xc2, 0xb4, 0xe4, 0xf8, 0xb5, 0xd9, 0xc1, 0x05, 0x71, 0xec, 0xc9,
0x7d, 0x6d, 0xe7, 0xe1, 0x34, 0xb8, 0x0c, 0x66, 0x20, 0xfb, 0x7e, 0xec, 0x2b, 0x32, 0x98, 0x27,
@@ -76215,53 +76215,53 @@ var fileDescriptor_8261c968b2e6f45c = []byte{
0x82, 0x5b, 0x4a, 0xeb, 0xeb, 0x9b, 0xad, 0xc6, 0x7d, 0x7a, 0x3d, 0xb2, 0x76, 0x37, 0xab, 0xf5,
0xcd, 0xd6, 0xaa, 0xbe, 0x59, 0xde, 0x30, 0xf0, 0xe2, 0x64, 0xa9, 0x5c, 0x6e, 0x6c, 0xd4, 0x5b,
0x0a, 0xd4, 0xde, 0x2a, 0x81, 0xb9, 0x72, 0xd7, 0xf1, 0x42, 0x84, 0xaf, 0x8b, 0x10, 0x0e, 0xc5,
- 0x98, 0x63, 0xc4, 0xa8, 0xfd, 0xaf, 0x9c, 0xa8, 0x9f, 0x4c, 0x20, 0x10, 0x86, 0x7c, 0x4c, 0x2f,
- 0xf5, 0x46, 0x21, 0x3f, 0x99, 0xe1, 0xf4, 0xb2, 0x6f, 0x12, 0x9f, 0x5d, 0x06, 0x53, 0x25, 0xa2,
- 0x18, 0xda, 0x9f, 0xe6, 0x40, 0xb1, 0xec, 0xd8, 0x5b, 0xd6, 0x36, 0xb2, 0x20, 0xa1, 0x6d, 0x5e,
- 0xec, 0xc2, 0x8a, 0xe9, 0x9b, 0x97, 0x2d, 0x78, 0x05, 0x57, 0x60, 0xda, 0xe8, 0x4b, 0x45, 0x4c,
- 0xd1, 0x14, 0x78, 0x71, 0x6f, 0x1b, 0x33, 0x35, 0x6d, 0xb0, 0x49, 0x68, 0xfc, 0x20, 0x8f, 0xeb,
- 0x2e, 0x74, 0x61, 0x17, 0x9a, 0x1e, 0x44, 0x73, 0x31, 0x1b, 0x76, 0xb1, 0xd2, 0x4e, 0x1b, 0x71,
- 0xaf, 0xd5, 0xb3, 0x60, 0x8e, 0xbc, 0xc2, 0xf6, 0x8f, 0x87, 0xd5, 0x78, 0xda, 0xe0, 0xd2, 0xd4,
- 0x27, 0x80, 0x02, 0x7c, 0xd0, 0x77, 0xcd, 0xd3, 0x1d, 0x8c, 0xd7, 0xa3, 0x16, 0x89, 0xa3, 0xec,
- 0x62, 0xe0, 0x28, 0xbb, 0xd8, 0xc4, 0x6e, 0xb4, 0x06, 0xc9, 0xa5, 0xfd, 0xcf, 0xe9, 0xd0, 0x7a,
- 0xf9, 0xbc, 0x1c, 0x29, 0x86, 0x0a, 0xf2, 0xb6, 0xb9, 0x0b, 0xa9, 0x5e, 0xe0, 0xff, 0xea, 0x2d,
- 0xe0, 0xb8, 0x79, 0xd9, 0xf4, 0x4d, 0xb7, 0xe6, 0xb4, 0xcd, 0x2e, 0x1e, 0x36, 0x83, 0x96, 0xdf,
- 0xff, 0x02, 0x6f, 0x5a, 0xf9, 0x8e, 0x0b, 0x71, 0xae, 0x60, 0xd3, 0x2a, 0x48, 0x40, 0xd4, 0xad,
- 0xb6, 0x63, 0x63, 0xfe, 0x65, 0x03, 0xff, 0x47, 0x52, 0xe9, 0x58, 0x1e, 0xaa, 0x08, 0xa6, 0x52,
- 0x27, 0xfb, 0x29, 0xcd, 0x7d, 0xbb, 0x8d, 0x37, 0xac, 0xa6, 0x8d, 0xb8, 0xd7, 0xea, 0x12, 0x98,
- 0xa5, 0xbb, 0x2f, 0x6b, 0x48, 0xaf, 0x8a, 0x58, 0xaf, 0xae, 0xe7, 0xdd, 0x10, 0x09, 0x9e, 0x8b,
- 0xf5, 0x28, 0x9f, 0xc1, 0x7e, 0xa4, 0x3e, 0x13, 0x3c, 0x9a, 0x3e, 0x96, 0xf7, 0x3c, 0xdf, 0xd9,
- 0x25, 0xa0, 0x2f, 0x5b, 0x5d, 0x52, 0x83, 0x29, 0x5c, 0x83, 0xa4, 0x2c, 0xea, 0xed, 0xe0, 0x64,
- 0xcf, 0x85, 0x5b, 0xd0, 0xbd, 0x60, 0xee, 0xee, 0x3d, 0xd8, 0x72, 0x4d, 0xdb, 0xeb, 0x39, 0xae,
- 0x7f, 0x7a, 0x1a, 0x33, 0x3f, 0xf0, 0x9d, 0x7a, 0x2b, 0x38, 0xf1, 0x80, 0xe7, 0xd8, 0xa5, 0x9e,
- 0x55, 0xb3, 0x3c, 0x1f, 0xda, 0xa5, 0x4e, 0xc7, 0x3d, 0x3d, 0x83, 0xcb, 0x3a, 0xf8, 0x42, 0xbd,
- 0x11, 0xcc, 0x3f, 0xe0, 0x58, 0x76, 0xd3, 0x77, 0xa1, 0xb9, 0xbb, 0xe1, 0x76, 0x4f, 0x03, 0xb2,
- 0x41, 0xc4, 0x25, 0xd2, 0xce, 0x77, 0x1a, 0x14, 0x09, 0x24, 0xda, 0x4b, 0x0a, 0xc2, 0x5e, 0xcd,
- 0x54, 0x48, 0x89, 0xd6, 0xe2, 0x13, 0xc1, 0x14, 0xed, 0x35, 0x31, 0xf8, 0xb3, 0xb7, 0x9f, 0xea,
- 0x5b, 0x20, 0xa1, 0x54, 0x8c, 0x20, 0x9b, 0xfa, 0x64, 0x50, 0x6c, 0x63, 0x51, 0x61, 0x3d, 0x98,
- 0xbd, 0xfd, 0xd1, 0x83, 0x0b, 0xc5, 0x59, 0x0c, 0x9a, 0x55, 0xfb, 0xa2, 0x2c, 0xe4, 0x08, 0x9d,
- 0xc4, 0x71, 0xba, 0x9e, 0xe2, 0x6b, 0xd2, 0x08, 0x5d, 0xf1, 0xad, 0xe0, 0x66, 0xda, 0xcf, 0x52,
- 0x9b, 0xa6, 0xb2, 0xb9, 0xb4, 0x11, 0xcc, 0x6a, 0x91, 0xa5, 0xd3, 0x6c, 0x95, 0x8c, 0xd6, 0x66,
- 0xbd, 0x51, 0x41, 0xb3, 0xe1, 0x5b, 0xc0, 0x4d, 0x43, 0x72, 0xeb, 0xad, 0xcd, 0x7a, 0x69, 0x4d,
- 0x57, 0xb6, 0x78, 0x7b, 0xa9, 0xd9, 0x6a, 0xac, 0x6f, 0x1a, 0x1b, 0xf5, 0x7a, 0xb5, 0xbe, 0x42,
- 0x88, 0x21, 0x03, 0xf5, 0x54, 0x94, 0xe1, 0xbc, 0x51, 0x6d, 0xe9, 0x9b, 0xe5, 0x46, 0x7d, 0xb9,
- 0xba, 0xa2, 0x58, 0xc3, 0x8c, 0xad, 0x07, 0xd4, 0xeb, 0xc1, 0xb5, 0x1c, 0x27, 0xd5, 0x46, 0x1d,
- 0x4d, 0xd1, 0xcb, 0xa5, 0x7a, 0x59, 0x47, 0xf3, 0xf1, 0x4b, 0xaa, 0x06, 0xae, 0x26, 0xe4, 0x36,
- 0x97, 0xab, 0x35, 0x76, 0x57, 0xed, 0xd3, 0x39, 0xf5, 0x34, 0xb8, 0x8a, 0x7d, 0x47, 0x7d, 0x22,
- 0x94, 0xdf, 0xc8, 0xa9, 0x37, 0x82, 0xeb, 0xb8, 0xaf, 0xc8, 0x06, 0xd9, 0x66, 0xb5, 0xb2, 0xb9,
- 0x56, 0x6d, 0xae, 0x95, 0x5a, 0xe5, 0x55, 0xe5, 0x33, 0x78, 0xfa, 0x12, 0xda, 0xe3, 0x8c, 0x77,
- 0xf2, 0xcb, 0x58, 0x3b, 0xa1, 0xc4, 0x2b, 0xea, 0xe3, 0x07, 0xc2, 0x9e, 0x6c, 0x17, 0x7f, 0x32,
- 0x1c, 0x71, 0x2a, 0x9c, 0x0a, 0x3d, 0x31, 0x05, 0xad, 0x74, 0x3a, 0xd4, 0x1a, 0x41, 0x85, 0xae,
- 0x07, 0xd7, 0xd6, 0x75, 0x82, 0x94, 0xa1, 0x97, 0x1b, 0xe7, 0x74, 0x63, 0xf3, 0x7c, 0xa9, 0x56,
- 0xd3, 0x5b, 0x9b, 0xcb, 0x55, 0xa3, 0xd9, 0x52, 0xb6, 0xb4, 0x7f, 0x92, 0xc2, 0x65, 0x29, 0x46,
- 0x5a, 0x7f, 0x2a, 0xa5, 0x6d, 0xd6, 0x89, 0xcb, 0x4f, 0xdf, 0x03, 0x8a, 0x9e, 0x6f, 0xfa, 0x7b,
- 0x1e, 0x6d, 0xd5, 0x8f, 0x19, 0xdc, 0xaa, 0x17, 0x9b, 0x38, 0x93, 0x41, 0x33, 0x6b, 0x5f, 0xcc,
- 0xa5, 0x69, 0xa6, 0x63, 0x58, 0x99, 0xb2, 0x46, 0x10, 0xf1, 0x19, 0xa0, 0x05, 0xda, 0x5e, 0x6d,
- 0x6e, 0x96, 0x6a, 0x86, 0x5e, 0xaa, 0x5c, 0x08, 0xd7, 0xa3, 0xa0, 0x7a, 0x35, 0x38, 0xb1, 0x51,
- 0x2f, 0x2d, 0xd5, 0x74, 0xdc, 0x5c, 0x1a, 0xf5, 0xba, 0x5e, 0x46, 0x72, 0xff, 0x61, 0xbc, 0xfb,
- 0x83, 0xac, 0x72, 0xcc, 0x37, 0xb2, 0x9c, 0x18, 0xf9, 0xff, 0x95, 0xb0, 0x9b, 0x5b, 0xa4, 0x61,
- 0x2c, 0xad, 0xf1, 0xe2, 0xf0, 0x05, 0x21, 0xcf, 0x36, 0x21, 0x4e, 0xd2, 0xe1, 0xf1, 0x03, 0x23,
- 0xe0, 0x71, 0x35, 0x38, 0xc1, 0xe2, 0x81, 0x3d, 0xdc, 0xe2, 0x61, 0xf8, 0x13, 0x19, 0x4c, 0xad,
+ 0x98, 0x63, 0xc4, 0xa8, 0xfd, 0x4b, 0x4e, 0xd4, 0x4f, 0x26, 0x10, 0x08, 0x43, 0x3e, 0xa6, 0x97,
+ 0x7a, 0xa3, 0x90, 0x9f, 0xcc, 0x70, 0x7a, 0xd9, 0x37, 0x89, 0xcf, 0x2c, 0x83, 0xa9, 0x12, 0x51,
+ 0x0c, 0xed, 0x4f, 0x72, 0xa0, 0x58, 0x76, 0xec, 0x2d, 0x6b, 0x1b, 0x59, 0x90, 0xd0, 0x36, 0x2f,
+ 0x76, 0x61, 0xc5, 0xf4, 0xcd, 0xcb, 0x16, 0xbc, 0x82, 0x2b, 0x30, 0x6d, 0xf4, 0xa5, 0x22, 0xa6,
+ 0x68, 0x0a, 0xbc, 0xb8, 0xb7, 0x8d, 0x99, 0x9a, 0x36, 0xd8, 0x24, 0x34, 0x7e, 0x90, 0xc7, 0x75,
+ 0x17, 0xba, 0xb0, 0x0b, 0x4d, 0x0f, 0xa2, 0xb9, 0x98, 0x0d, 0xbb, 0x58, 0x69, 0xa7, 0x8d, 0xb8,
+ 0xd7, 0xea, 0x59, 0x30, 0x47, 0x5e, 0x61, 0xfb, 0xc7, 0xc3, 0x6a, 0x3c, 0x6d, 0x70, 0x69, 0xea,
+ 0x13, 0x40, 0x01, 0x3e, 0xe8, 0xbb, 0xe6, 0xe9, 0x0e, 0xc6, 0xeb, 0x51, 0x8b, 0xc4, 0x51, 0x76,
+ 0x31, 0x70, 0x94, 0x5d, 0x6c, 0x62, 0x37, 0x5a, 0x83, 0xe4, 0xd2, 0xfe, 0xd7, 0x74, 0x68, 0xbd,
+ 0x7c, 0x5e, 0x8e, 0x14, 0x43, 0x05, 0x79, 0xdb, 0xdc, 0x85, 0x54, 0x2f, 0xf0, 0x7f, 0xf5, 0x16,
+ 0x70, 0xdc, 0xbc, 0x6c, 0xfa, 0xa6, 0x5b, 0x73, 0xda, 0x66, 0x17, 0x0f, 0x9b, 0x41, 0xcb, 0xef,
+ 0x7f, 0x81, 0x37, 0xad, 0x7c, 0xc7, 0x85, 0x38, 0x57, 0xb0, 0x69, 0x15, 0x24, 0x20, 0xea, 0x56,
+ 0xdb, 0xb1, 0x31, 0xff, 0xb2, 0x81, 0xff, 0x23, 0xa9, 0x74, 0x2c, 0x0f, 0x55, 0x04, 0x53, 0xa9,
+ 0x93, 0xfd, 0x94, 0xe6, 0xbe, 0xdd, 0xc6, 0x1b, 0x56, 0xd3, 0x46, 0xdc, 0x6b, 0x75, 0x09, 0xcc,
+ 0xd2, 0xdd, 0x97, 0x35, 0xa4, 0x57, 0x45, 0xac, 0x57, 0xd7, 0xf3, 0x6e, 0x88, 0x04, 0xcf, 0xc5,
+ 0x7a, 0x94, 0xcf, 0x60, 0x3f, 0x52, 0x9f, 0x09, 0x1e, 0x4d, 0x1f, 0xcb, 0x7b, 0x9e, 0xef, 0xec,
+ 0x12, 0xd0, 0x97, 0xad, 0x2e, 0xa9, 0xc1, 0x14, 0xae, 0x41, 0x52, 0x16, 0xf5, 0x76, 0x70, 0xb2,
+ 0xe7, 0xc2, 0x2d, 0xe8, 0x5e, 0x30, 0x77, 0xf7, 0x1e, 0x6c, 0xb9, 0xa6, 0xed, 0xf5, 0x1c, 0xd7,
+ 0x3f, 0x3d, 0x8d, 0x99, 0x1f, 0xf8, 0x4e, 0xbd, 0x15, 0x9c, 0x78, 0xc0, 0x73, 0xec, 0x52, 0xcf,
+ 0xaa, 0x59, 0x9e, 0x0f, 0xed, 0x52, 0xa7, 0xe3, 0x9e, 0x9e, 0xc1, 0x65, 0x1d, 0x7c, 0xa1, 0xde,
+ 0x08, 0xe6, 0x1f, 0x70, 0x2c, 0xbb, 0xe9, 0xbb, 0xd0, 0xdc, 0xdd, 0x70, 0xbb, 0xa7, 0x01, 0xd9,
+ 0x20, 0xe2, 0x12, 0x69, 0xe7, 0x3b, 0x0d, 0x8a, 0x04, 0x12, 0xed, 0x25, 0x05, 0x61, 0xaf, 0x66,
+ 0x2a, 0xa4, 0x44, 0x6b, 0xf1, 0x89, 0x60, 0x8a, 0xf6, 0x9a, 0x18, 0xfc, 0xd9, 0xdb, 0x4f, 0xf5,
+ 0x2d, 0x90, 0x50, 0x2a, 0x46, 0x90, 0x4d, 0x7d, 0x32, 0x28, 0xb6, 0xb1, 0xa8, 0xb0, 0x1e, 0xcc,
+ 0xde, 0xfe, 0xe8, 0xc1, 0x85, 0xe2, 0x2c, 0x06, 0xcd, 0xaa, 0x7d, 0x51, 0x16, 0x72, 0x84, 0x4e,
+ 0xe2, 0x38, 0x5d, 0x4f, 0xf1, 0x35, 0x69, 0x84, 0xae, 0xf8, 0x56, 0x70, 0x33, 0xed, 0x67, 0xa9,
+ 0x4d, 0x53, 0xd9, 0x5c, 0xda, 0x08, 0x66, 0xb5, 0xc8, 0xd2, 0x69, 0xb6, 0x4a, 0x46, 0x6b, 0xb3,
+ 0xde, 0xa8, 0xa0, 0xd9, 0xf0, 0x2d, 0xe0, 0xa6, 0x21, 0xb9, 0xf5, 0xd6, 0x66, 0xbd, 0xb4, 0xa6,
+ 0x2b, 0x5b, 0xbc, 0xbd, 0xd4, 0x6c, 0x35, 0xd6, 0x37, 0x8d, 0x8d, 0x7a, 0xbd, 0x5a, 0x5f, 0x21,
+ 0xc4, 0x90, 0x81, 0x7a, 0x2a, 0xca, 0x70, 0xde, 0xa8, 0xb6, 0xf4, 0xcd, 0x72, 0xa3, 0xbe, 0x5c,
+ 0x5d, 0x51, 0xac, 0x61, 0xc6, 0xd6, 0x03, 0xea, 0xf5, 0xe0, 0x5a, 0x8e, 0x93, 0x6a, 0xa3, 0x8e,
+ 0xa6, 0xe8, 0xe5, 0x52, 0xbd, 0xac, 0xa3, 0xf9, 0xf8, 0x25, 0x55, 0x03, 0x57, 0x13, 0x72, 0x9b,
+ 0xcb, 0xd5, 0x1a, 0xbb, 0xab, 0xf6, 0xa9, 0x9c, 0x7a, 0x1a, 0x5c, 0xc5, 0xbe, 0xa3, 0x3e, 0x11,
+ 0xca, 0x6f, 0xe4, 0xd4, 0x1b, 0xc1, 0x75, 0xdc, 0x57, 0x64, 0x83, 0x6c, 0xb3, 0x5a, 0xd9, 0x5c,
+ 0xab, 0x36, 0xd7, 0x4a, 0xad, 0xf2, 0xaa, 0xf2, 0x69, 0x3c, 0x7d, 0x09, 0xed, 0x71, 0xc6, 0x3b,
+ 0xf9, 0x65, 0xac, 0x9d, 0x50, 0xe2, 0x15, 0xf5, 0xf1, 0x03, 0x61, 0x4f, 0xb6, 0x8b, 0x3f, 0x11,
+ 0x8e, 0x38, 0x15, 0x4e, 0x85, 0x9e, 0x98, 0x82, 0x56, 0x3a, 0x1d, 0x6a, 0x8d, 0xa0, 0x42, 0xd7,
+ 0x83, 0x6b, 0xeb, 0x3a, 0x41, 0xca, 0xd0, 0xcb, 0x8d, 0x73, 0xba, 0xb1, 0x79, 0xbe, 0x54, 0xab,
+ 0xe9, 0xad, 0xcd, 0xe5, 0xaa, 0xd1, 0x6c, 0x29, 0x5b, 0xda, 0x3f, 0x4a, 0xe1, 0xb2, 0x14, 0x23,
+ 0xad, 0x3f, 0x91, 0xd2, 0x36, 0xeb, 0xc4, 0xe5, 0xa7, 0xef, 0x01, 0x45, 0xcf, 0x37, 0xfd, 0x3d,
+ 0x8f, 0xb6, 0xea, 0xc7, 0x0c, 0x6e, 0xd5, 0x8b, 0x4d, 0x9c, 0xc9, 0xa0, 0x99, 0xb5, 0x2f, 0xe6,
+ 0xd2, 0x34, 0xd3, 0x31, 0xac, 0x4c, 0x59, 0x23, 0x88, 0xf8, 0x0c, 0xd0, 0x02, 0x6d, 0xaf, 0x36,
+ 0x37, 0x4b, 0x35, 0x43, 0x2f, 0x55, 0x2e, 0x84, 0xeb, 0x51, 0x50, 0xbd, 0x1a, 0x9c, 0xd8, 0xa8,
+ 0x97, 0x96, 0x6a, 0x3a, 0x6e, 0x2e, 0x8d, 0x7a, 0x5d, 0x2f, 0x23, 0xb9, 0xff, 0x10, 0xde, 0xfd,
+ 0x41, 0x56, 0x39, 0xe6, 0x1b, 0x59, 0x4e, 0x8c, 0xfc, 0xff, 0x52, 0xd8, 0xcd, 0x2d, 0xd2, 0x30,
+ 0x96, 0xd6, 0x78, 0x71, 0xf8, 0x82, 0x90, 0x67, 0x9b, 0x10, 0x27, 0xe9, 0xf0, 0xf8, 0xaf, 0x23,
+ 0xe0, 0x71, 0x35, 0x38, 0xc1, 0xe2, 0x81, 0x3d, 0xdc, 0xe2, 0x61, 0xf8, 0x63, 0x19, 0x4c, 0xad,
0x59, 0xdb, 0xd8, 0xbd, 0x78, 0x2f, 0x32, 0x50, 0x16, 0x80, 0x14, 0x7a, 0xef, 0x48, 0x56, 0x87,
0x9b, 0xcc, 0x4b, 0xe2, 0xeb, 0x2d, 0x42, 0x13, 0xf6, 0x2f, 0xa6, 0xee, 0x99, 0x28, 0xc3, 0x31,
0x3d, 0xd3, 0x0b, 0xa5, 0x34, 0x3d, 0xd3, 0x60, 0x5a, 0xa9, 0x60, 0x42, 0xa6, 0x83, 0x0b, 0x9f,
@@ -76273,8 +76273,8 @@ var fileDescriptor_8261c968b2e6f45c = []byte{
0x29, 0x66, 0x3f, 0x45, 0x79, 0x09, 0x00, 0xc5, 0x26, 0xec, 0xc2, 0xb6, 0xaf, 0x7d, 0x48, 0x1e,
0xb9, 0x4d, 0xc4, 0x99, 0xdb, 0x72, 0x2a, 0x73, 0x3b, 0x9f, 0x81, 0xb9, 0x5d, 0x18, 0xdd, 0xdc,
0x2e, 0xa6, 0x35, 0xb7, 0xa7, 0xe2, 0xcc, 0xed, 0x84, 0x5e, 0x63, 0x3a, 0xb1, 0xd7, 0xe8, 0x33,
- 0xd4, 0x8d, 0x1a, 0x35, 0xe9, 0xf9, 0x44, 0xaa, 0xcc, 0x9f, 0x28, 0xa6, 0x1d, 0xc7, 0x09, 0xf0,
- 0x47, 0x6b, 0x9e, 0xff, 0x78, 0x21, 0xcd, 0xb8, 0x3f, 0x90, 0xe3, 0x74, 0xad, 0xe4, 0x95, 0xf9,
+ 0xd4, 0x8d, 0x1a, 0x35, 0xe9, 0xf9, 0x44, 0xaa, 0xcc, 0x1f, 0x2f, 0xa6, 0x1d, 0xc7, 0x09, 0xf0,
+ 0x47, 0x6b, 0x9e, 0xff, 0x58, 0x21, 0xcd, 0xb8, 0x3f, 0x90, 0xe3, 0x74, 0xad, 0xe4, 0x95, 0xf9,
0x0c, 0x16, 0x1d, 0xd5, 0x1b, 0xc0, 0x75, 0xd1, 0xf3, 0xa6, 0x7e, 0x7f, 0xb5, 0xd9, 0x6a, 0x62,
0x9b, 0xbc, 0xdc, 0x30, 0x8c, 0x8d, 0x75, 0xb2, 0x5d, 0x75, 0x0a, 0xa8, 0x11, 0x15, 0x63, 0xa3,
0x4e, 0x2c, 0xf0, 0x6d, 0x9e, 0xfa, 0x72, 0xb5, 0x5e, 0xd9, 0x0c, 0x47, 0xb5, 0xfa, 0x72, 0x43,
@@ -76287,15 +76287,15 @@ var fileDescriptor_8261c968b2e6f45c = []byte{
0x6b, 0xeb, 0xa5, 0x56, 0x15, 0x0d, 0xb8, 0xeb, 0x46, 0xa3, 0xd5, 0xd8, 0x3c, 0xa7, 0x1b, 0xcd,
0x6a, 0xa3, 0xae, 0xd8, 0xa8, 0xca, 0xcc, 0x08, 0x1d, 0x58, 0x4a, 0x8e, 0x7a, 0x2d, 0x38, 0x1d,
0xa4, 0xd7, 0x1a, 0x48, 0xd0, 0xcc, 0x9c, 0xa1, 0xc7, 0xda, 0x59, 0xcd, 0x56, 0xc3, 0x20, 0xb3,
- 0x86, 0xb5, 0xea, 0x8a, 0x81, 0xa6, 0x3a, 0xca, 0xb3, 0x33, 0x9d, 0x53, 0xfc, 0x8b, 0x04, 0xf2,
+ 0x86, 0xb5, 0xea, 0x8a, 0x81, 0xa6, 0x3a, 0xca, 0xb3, 0x33, 0x9d, 0x53, 0xfc, 0xb3, 0x04, 0xf2,
0x4d, 0xdf, 0xe9, 0x69, 0xdf, 0x1d, 0x75, 0x87, 0x67, 0x00, 0x70, 0xb1, 0x2b, 0x44, 0xc5, 0xf4,
0x4d, 0xba, 0x5a, 0xc3, 0xa4, 0x68, 0xbf, 0x2e, 0xbc, 0x7f, 0x1b, 0x59, 0x5d, 0x4e, 0x2f, 0x66,
- 0xf8, 0xf8, 0x96, 0xd8, 0x71, 0xc8, 0x78, 0x42, 0xe9, 0xda, 0xc3, 0x8f, 0x8e, 0xb2, 0x43, 0xab,
+ 0xf8, 0xf8, 0x96, 0xd8, 0x71, 0xc8, 0x78, 0x42, 0xe9, 0xda, 0xc3, 0x8f, 0x8c, 0xb2, 0x43, 0xab,
0x81, 0x53, 0x0c, 0xac, 0x48, 0xfe, 0x81, 0xca, 0x40, 0xf5, 0x51, 0xe0, 0xaa, 0x3e, 0xe5, 0xc3,
0x3a, 0xb7, 0xa5, 0x7e, 0x17, 0x78, 0x0c, 0xa3, 0xfe, 0xfa, 0x5a, 0xe3, 0x9c, 0x1e, 0x2a, 0x7a,
0xa5, 0xd4, 0x2a, 0x29, 0xdb, 0xda, 0xe7, 0x65, 0x90, 0x5f, 0x73, 0x2e, 0xf7, 0x6f, 0x9b, 0xdb,
0xf0, 0x0a, 0xb3, 0xb7, 0x12, 0x3c, 0xf2, 0x47, 0xb0, 0x84, 0xc4, 0xbe, 0x16, 0xef, 0x22, 0xf3,
- 0x05, 0x29, 0x8d, 0xd8, 0xd7, 0x0e, 0xeb, 0x17, 0xf3, 0x37, 0xa3, 0x88, 0x3d, 0x46, 0xb4, 0x50,
+ 0x05, 0x29, 0x8d, 0xd8, 0xd7, 0x0e, 0xeb, 0x17, 0xf3, 0xd7, 0xa3, 0x88, 0x3d, 0x46, 0xb4, 0x50,
0x3d, 0x0b, 0xce, 0x44, 0x2f, 0xaa, 0x15, 0xbd, 0xde, 0xaa, 0x2e, 0x5f, 0x88, 0x84, 0x5b, 0x35,
0x84, 0xc4, 0x3f, 0xac, 0x9b, 0x4b, 0x5e, 0x2b, 0x38, 0x0d, 0x4e, 0x46, 0xef, 0x56, 0xf4, 0x56,
0xf0, 0xe6, 0x01, 0xed, 0xa1, 0x02, 0x98, 0x23, 0xdd, 0xfe, 0x46, 0xaf, 0x83, 0xac, 0xef, 0x27,
@@ -76316,1107 +76316,1108 @@ var fileDescriptor_8261c968b2e6f45c = []byte{
0x66, 0x05, 0xfa, 0x04, 0x44, 0x4d, 0x01, 0xf2, 0x0a, 0xf4, 0xd9, 0x89, 0xf8, 0xab, 0xf2, 0xe0,
0x51, 0x74, 0xf1, 0x66, 0xd9, 0x75, 0x76, 0x6b, 0x70, 0xdb, 0x6c, 0xef, 0xeb, 0x0f, 0x22, 0x83,
0x4f, 0x7b, 0x71, 0x8e, 0x5b, 0xd1, 0xee, 0x45, 0xbd, 0x11, 0xfe, 0x9f, 0x68, 0x20, 0x07, 0x6b,
- 0xd4, 0x32, 0xbf, 0x46, 0x1d, 0x67, 0x12, 0xe6, 0x45, 0x26, 0x92, 0xff, 0xc0, 0x36, 0x06, 0x6e,
+ 0xd4, 0x32, 0xbf, 0x46, 0x1d, 0x67, 0x12, 0xe6, 0x45, 0x26, 0x92, 0x7f, 0xcf, 0x36, 0x06, 0x6e,
0x43, 0x2a, 0xd7, 0xb7, 0x21, 0x85, 0x5a, 0x58, 0x0f, 0xba, 0x9e, 0x63, 0x9b, 0xdd, 0x26, 0x75,
0x3f, 0x22, 0x73, 0xd5, 0xfe, 0x64, 0xf5, 0x59, 0x41, 0xa3, 0x22, 0x06, 0xdf, 0xd3, 0x93, 0x96,
- 0xb7, 0xfa, 0x25, 0x14, 0xd3, 0xbe, 0x3e, 0x13, 0xb6, 0xaf, 0x16, 0xd7, 0xbe, 0x9e, 0x79, 0x08,
+ 0xb7, 0xfa, 0x25, 0x14, 0xd3, 0xbe, 0x3e, 0x1d, 0xb6, 0xaf, 0x16, 0xd7, 0xbe, 0x9e, 0x79, 0x08,
0xda, 0xe9, 0x9a, 0x5a, 0x75, 0xb4, 0xa9, 0x68, 0xe4, 0x9c, 0x1f, 0xec, 0x7f, 0xc9, 0xda, 0xe7,
0x25, 0x70, 0x4a, 0xb7, 0x07, 0x4d, 0x65, 0x58, 0x35, 0x7a, 0x2b, 0x0b, 0xcd, 0x3a, 0x2f, 0xd2,
- 0x3b, 0x07, 0x56, 0x7b, 0x30, 0xcd, 0x18, 0x89, 0xfe, 0x76, 0x28, 0xd1, 0x26, 0x27, 0xd1, 0x7b,
- 0x46, 0x27, 0x9d, 0x4e, 0xa0, 0xf5, 0xb1, 0xf6, 0x5d, 0x79, 0xed, 0x2f, 0x25, 0x70, 0x82, 0x78,
- 0x10, 0xde, 0x4b, 0x66, 0x4e, 0xb8, 0xb7, 0xe7, 0xad, 0xaf, 0x6e, 0x34, 0xcb, 0x22, 0xfa, 0xcd,
- 0xa4, 0x68, 0xaf, 0x63, 0x05, 0x7e, 0x1f, 0x2f, 0xf0, 0x98, 0x7e, 0xbc, 0xbf, 0xb8, 0x18, 0x59,
- 0xff, 0x46, 0x28, 0xeb, 0x3a, 0x27, 0xeb, 0x3b, 0x47, 0xa2, 0x7a, 0xb4, 0x62, 0xfe, 0x5a, 0x1e,
- 0x3c, 0x86, 0x70, 0x48, 0x15, 0x81, 0xf4, 0x83, 0x25, 0xbb, 0x63, 0x40, 0xcf, 0x37, 0x5d, 0x9f,
- 0x0b, 0xbd, 0xd2, 0x37, 0x35, 0xcf, 0x65, 0x30, 0x35, 0x97, 0x86, 0x4e, 0xcd, 0xb5, 0xf7, 0xb0,
- 0x06, 0xde, 0x79, 0x1e, 0xd9, 0x52, 0x02, 0x06, 0x31, 0x35, 0x8c, 0x6b, 0x51, 0xa1, 0xe5, 0xf7,
- 0x7d, 0x1c, 0xca, 0xcb, 0x87, 0x2e, 0x21, 0x1d, 0xe2, 0xbf, 0x3e, 0x5e, 0x4b, 0x3c, 0xcf, 0xbe,
- 0xe3, 0xcd, 0x46, 0xa5, 0x93, 0xe9, 0x14, 0xea, 0xa5, 0xd3, 0x60, 0x06, 0x77, 0x39, 0x35, 0xcb,
- 0xbe, 0xa4, 0xfd, 0x85, 0x0c, 0xe6, 0xea, 0xf0, 0x4a, 0x79, 0xc7, 0xec, 0x76, 0xa1, 0xbd, 0x0d,
- 0xb5, 0x07, 0x38, 0xdb, 0xde, 0xec, 0xf5, 0xea, 0xd1, 0xfe, 0x70, 0xf0, 0xa8, 0xde, 0x03, 0x0a,
- 0x5e, 0xdb, 0x09, 0x83, 0x3a, 0x7c, 0x77, 0xcc, 0xea, 0x75, 0x69, 0xcf, 0xdf, 0x59, 0xc4, 0x65,
- 0x95, 0x7a, 0x56, 0x13, 0x7d, 0x60, 0x90, 0xef, 0xe8, 0x38, 0xf9, 0x57, 0x03, 0x3b, 0xe3, 0x5c,
- 0x42, 0x67, 0x1c, 0x32, 0xbe, 0xc8, 0x32, 0x1d, 0xb3, 0x48, 0x72, 0x3d, 0x98, 0x6d, 0x07, 0x59,
- 0xc2, 0x53, 0x7a, 0x6c, 0x92, 0xf6, 0xd5, 0x54, 0xdd, 0xb5, 0x50, 0xe1, 0xe9, 0xb4, 0x0a, 0x8e,
- 0xd9, 0xd4, 0xbc, 0x1a, 0x9c, 0x68, 0x35, 0x1a, 0x9b, 0x6b, 0xa5, 0xfa, 0x85, 0x28, 0xb6, 0xca,
- 0x96, 0xf6, 0xca, 0x3c, 0x58, 0x68, 0x3a, 0xdd, 0xcb, 0x30, 0xc2, 0xb9, 0xca, 0xb9, 0x7f, 0xb2,
- 0x72, 0xca, 0x1d, 0x90, 0x93, 0x7a, 0x0a, 0x14, 0x4d, 0xdb, 0xbb, 0x02, 0x03, 0xf3, 0x9f, 0x3e,
- 0x51, 0x18, 0x3f, 0xc2, 0x76, 0x04, 0x06, 0x0f, 0xe3, 0x5d, 0x43, 0x24, 0xc9, 0x73, 0x15, 0x03,
- 0xe4, 0x59, 0x30, 0xe7, 0x11, 0x2f, 0x91, 0x16, 0xe3, 0x0c, 0xc4, 0xa5, 0x61, 0x16, 0x89, 0x9b,
- 0x92, 0x4c, 0x59, 0xc4, 0x4f, 0xda, 0xc3, 0x61, 0xff, 0xb1, 0xc1, 0x41, 0x5c, 0x3a, 0x0c, 0x63,
- 0xe9, 0x40, 0x7e, 0xf5, 0xb8, 0x27, 0xf1, 0xa7, 0xc1, 0xc9, 0xe0, 0x84, 0x7a, 0x79, 0xb5, 0x54,
- 0xab, 0xe9, 0xf5, 0x15, 0x7d, 0xb3, 0x5a, 0x21, 0xfb, 0xc9, 0x51, 0x4a, 0xa9, 0xd5, 0xd2, 0xd7,
- 0xd6, 0x5b, 0xcd, 0x4d, 0xfd, 0xfe, 0xb2, 0xae, 0x57, 0xb0, 0x03, 0x36, 0x3e, 0x41, 0x19, 0xb8,
- 0xca, 0x97, 0xea, 0xcd, 0xf3, 0xba, 0xa1, 0xec, 0x9c, 0x2d, 0x81, 0x59, 0x66, 0xa0, 0x40, 0xdc,
- 0x55, 0xe0, 0x96, 0xb9, 0xd7, 0xa5, 0xe6, 0xb8, 0x72, 0x0c, 0x71, 0x87, 0x65, 0xd3, 0xb0, 0xbb,
- 0xfb, 0x4a, 0x4e, 0x55, 0xc0, 0x1c, 0x3b, 0x26, 0x28, 0x92, 0xf6, 0xce, 0x6b, 0xc1, 0xcc, 0x79,
- 0xc7, 0xbd, 0x84, 0xbd, 0x86, 0xb5, 0x0f, 0x90, 0x18, 0x6c, 0x41, 0x44, 0x09, 0xc6, 0x00, 0x7b,
- 0xb5, 0xb8, 0x9b, 0x58, 0x40, 0x6d, 0x71, 0x68, 0xd4, 0x88, 0xeb, 0xc1, 0xec, 0x95, 0x20, 0x77,
- 0xd4, 0xd2, 0x99, 0x24, 0xed, 0x97, 0xc4, 0x1c, 0xbf, 0x86, 0x17, 0x99, 0xfd, 0xaa, 0xff, 0xdb,
- 0x25, 0x50, 0x5c, 0x81, 0x7e, 0xa9, 0xdb, 0x65, 0xe5, 0xf6, 0x72, 0xe1, 0x73, 0xa4, 0x5c, 0x25,
- 0x4a, 0xdd, 0x6e, 0x7c, 0xa3, 0x62, 0x04, 0x14, 0x9c, 0x77, 0xe2, 0xd2, 0x04, 0xbd, 0xb4, 0x87,
- 0x14, 0x98, 0xbd, 0xc4, 0x3e, 0x16, 0xb9, 0x66, 0xbf, 0x9e, 0x31, 0x93, 0x9e, 0x14, 0xc5, 0xdf,
- 0xcb, 0x25, 0x3b, 0x49, 0x05, 0xf9, 0xd4, 0xfb, 0xc0, 0xd4, 0x9e, 0x07, 0xcb, 0xa6, 0x17, 0x0c,
- 0x6d, 0x7c, 0x4d, 0x1b, 0x17, 0x1f, 0x80, 0x6d, 0x7f, 0xb1, 0xba, 0x8b, 0x26, 0x3e, 0x1b, 0x24,
- 0x63, 0x18, 0xaf, 0x88, 0x3e, 0x1b, 0x01, 0x05, 0x34, 0xed, 0xbc, 0x62, 0xf9, 0x3b, 0xe5, 0x1d,
- 0xd3, 0xa7, 0x9b, 0x2d, 0xe1, 0xb3, 0xf6, 0x92, 0x11, 0xe0, 0x4c, 0x74, 0xd8, 0x89, 0x3d, 0x8e,
- 0x9e, 0x1a, 0xc4, 0x31, 0x78, 0xd9, 0x8c, 0x02, 0xe2, 0xdf, 0x4a, 0x20, 0xdf, 0xe8, 0x41, 0x5b,
- 0xf8, 0xec, 0x65, 0x28, 0x5b, 0xa9, 0x4f, 0xb6, 0x0f, 0x8b, 0xbb, 0x05, 0x87, 0x95, 0x46, 0x25,
- 0xc7, 0x48, 0xf6, 0x36, 0x90, 0xb7, 0xec, 0x2d, 0x87, 0x5a, 0xb6, 0x8f, 0x8e, 0xb1, 0x75, 0xaa,
- 0xf6, 0x96, 0x63, 0xe0, 0x8c, 0xa2, 0x1e, 0xc1, 0x49, 0x65, 0x67, 0x2f, 0xee, 0xbf, 0x9b, 0x06,
- 0x45, 0xa2, 0xce, 0xda, 0xcb, 0x64, 0x20, 0x97, 0x3a, 0x9d, 0x18, 0xc1, 0x4b, 0x07, 0x04, 0xef,
- 0xe0, 0xcf, 0x42, 0x4c, 0xc2, 0x67, 0x3e, 0xf0, 0x9a, 0x60, 0xdf, 0x4e, 0x9b, 0x54, 0xa9, 0xd3,
- 0x89, 0x3f, 0xb7, 0x10, 0x16, 0x28, 0xf1, 0x05, 0xb2, 0x2d, 0x5c, 0x16, 0x6b, 0xe1, 0xa9, 0x07,
- 0x82, 0x58, 0xfe, 0xb2, 0x87, 0xe8, 0x1f, 0x24, 0x30, 0x55, 0xb3, 0x3c, 0x1f, 0x61, 0x53, 0x12,
- 0xc1, 0xe6, 0x5a, 0x30, 0x13, 0x88, 0x06, 0x75, 0x79, 0xa8, 0x3f, 0x8f, 0x12, 0xf8, 0x99, 0xf8,
- 0xbd, 0x3c, 0x3a, 0x4f, 0x49, 0xae, 0x3d, 0xe5, 0x22, 0xfe, 0x4c, 0x5b, 0x54, 0xac, 0xd4, 0x5f,
- 0xec, 0x2f, 0x87, 0x02, 0x5f, 0xe3, 0x04, 0x7e, 0xc7, 0x28, 0x45, 0x66, 0x2f, 0xf4, 0x3f, 0x90,
- 0x00, 0x40, 0x65, 0xd3, 0x83, 0xc3, 0x8f, 0xe3, 0xc2, 0x81, 0x24, 0x48, 0xf7, 0x95, 0xac, 0x74,
- 0xd7, 0x78, 0xe9, 0x7e, 0xef, 0xf0, 0xaa, 0x26, 0x1d, 0x10, 0x56, 0x15, 0x20, 0x5b, 0xa1, 0x68,
- 0xd1, 0x5f, 0xed, 0xed, 0xa1, 0x50, 0xd7, 0x39, 0xa1, 0xde, 0x35, 0x62, 0x49, 0xd9, 0xcb, 0xf5,
- 0x8f, 0x25, 0x30, 0xd5, 0x84, 0x3e, 0xea, 0x26, 0xb5, 0x73, 0x22, 0x3d, 0x3c, 0xd3, 0xb6, 0x25,
- 0xc1, 0xb6, 0xfd, 0xcd, 0x9c, 0x68, 0x60, 0xb8, 0x48, 0x32, 0x94, 0xa7, 0x98, 0xd5, 0x87, 0xd7,
- 0x0b, 0x05, 0x86, 0x1b, 0x46, 0x2d, 0x7b, 0xe9, 0xbe, 0x55, 0x0a, 0x3d, 0x45, 0xf8, 0x73, 0x7d,
- 0xac, 0x59, 0x9c, 0x3b, 0x68, 0x16, 0x8b, 0x9f, 0xeb, 0x63, 0xeb, 0x18, 0xef, 0x98, 0x90, 0xda,
- 0xd8, 0x18, 0x83, 0xcf, 0xc0, 0x28, 0xf2, 0x7a, 0x9e, 0x0c, 0x8a, 0x74, 0xf3, 0xe0, 0x9e, 0xe4,
- 0xbd, 0x83, 0xe1, 0x53, 0x8b, 0xf7, 0x8f, 0x60, 0xca, 0x25, 0x2d, 0xcb, 0x87, 0x6c, 0x48, 0x0c,
- 0x1b, 0xb7, 0x82, 0x02, 0x8e, 0x9a, 0x4d, 0xc7, 0xb9, 0xc8, 0xdd, 0x23, 0x20, 0xa1, 0xa3, 0xb7,
- 0x06, 0xc9, 0x94, 0x1a, 0x85, 0x31, 0xac, 0xe4, 0x8f, 0x82, 0xc2, 0xd7, 0x54, 0x00, 0xd6, 0xf7,
- 0x2e, 0x76, 0x2d, 0x6f, 0xc7, 0xb2, 0xb1, 0x8f, 0xd8, 0x1c, 0x7d, 0x24, 0xc1, 0x9f, 0x13, 0xcd,
- 0xbf, 0x58, 0xa3, 0x40, 0x01, 0xf2, 0x9e, 0x6b, 0xd1, 0x65, 0x00, 0xf4, 0x57, 0xbd, 0x3b, 0xf4,
- 0xb6, 0xcc, 0xf7, 0x05, 0x6e, 0x41, 0x62, 0x88, 0x38, 0x58, 0x64, 0x4a, 0x8f, 0xbc, 0x2e, 0xd9,
- 0x08, 0xdf, 0x05, 0x3e, 0xc2, 0x37, 0x77, 0x9a, 0xbb, 0xd8, 0x77, 0x9a, 0x1b, 0xe1, 0xe8, 0x59,
- 0xcf, 0x81, 0xd8, 0xf5, 0x48, 0x36, 0xf0, 0x7f, 0xf4, 0x05, 0x76, 0x0f, 0xc2, 0xde, 0x79, 0xe4,
- 0xcc, 0x40, 0x94, 0xc0, 0xf6, 0x79, 0x33, 0x82, 0x7d, 0xde, 0x47, 0xa3, 0xb9, 0x8f, 0x23, 0x68,
- 0x38, 0xa7, 0x90, 0x1c, 0xc7, 0x6e, 0xbe, 0x8f, 0x5d, 0xed, 0x13, 0xc2, 0x81, 0x38, 0x19, 0x19,
- 0x27, 0xce, 0x62, 0x28, 0x07, 0x52, 0xc8, 0x01, 0xb3, 0x07, 0x9c, 0xd4, 0x03, 0x0f, 0xa3, 0x9f,
- 0x4e, 0x97, 0x77, 0x47, 0x58, 0xaf, 0x51, 0xc1, 0x42, 0x70, 0x2c, 0xbe, 0xb1, 0x74, 0xaf, 0x5e,
- 0x6e, 0x29, 0xf0, 0xe0, 0x51, 0x79, 0x7c, 0x28, 0x9e, 0x1c, 0x80, 0x8f, 0xd6, 0x64, 0xb4, 0xff,
- 0x21, 0x81, 0x22, 0x35, 0x37, 0xee, 0x39, 0x24, 0x84, 0xda, 0xab, 0x46, 0x81, 0x24, 0x31, 0x3a,
- 0xc9, 0x67, 0xd3, 0x02, 0x30, 0x06, 0x03, 0xe3, 0x42, 0x66, 0x00, 0x68, 0xff, 0x2c, 0x81, 0x3c,
- 0x32, 0x83, 0xc4, 0x62, 0x3f, 0x7c, 0x46, 0xd8, 0x25, 0x98, 0x11, 0x00, 0x22, 0x1f, 0xa3, 0xdf,
- 0x4b, 0x60, 0xa6, 0x47, 0x32, 0x86, 0x91, 0x47, 0x6e, 0x14, 0xe8, 0x8c, 0xa0, 0x11, 0x7d, 0xa6,
- 0xbd, 0x4f, 0xe8, 0xc0, 0x43, 0x32, 0x3f, 0xe9, 0xe0, 0xd0, 0xc7, 0x11, 0x26, 0x62, 0x4b, 0xfb,
- 0x57, 0x09, 0x00, 0x03, 0x7a, 0x4e, 0xf7, 0x32, 0xdc, 0x70, 0x2d, 0xed, 0xd1, 0x11, 0x00, 0xb4,
- 0xd9, 0xe7, 0xa2, 0x66, 0xff, 0x39, 0x49, 0xd4, 0xf9, 0x97, 0xd3, 0xbc, 0x80, 0x78, 0x8c, 0xf8,
- 0x9f, 0x01, 0xa6, 0xa8, 0x1c, 0xa9, 0x4d, 0x29, 0x26, 0xfc, 0xe0, 0x23, 0xed, 0x83, 0x42, 0xce,
- 0xc3, 0x22, 0x1c, 0xa5, 0x03, 0xa0, 0x3c, 0x02, 0x00, 0xc7, 0xc1, 0x6c, 0x00, 0xc0, 0x86, 0x51,
- 0x55, 0xa0, 0xf6, 0x6e, 0x19, 0x7b, 0x58, 0x90, 0xc1, 0xed, 0xf0, 0x3d, 0xcd, 0x5f, 0x0a, 0x4f,
- 0xf6, 0x19, 0x79, 0x84, 0xe5, 0x67, 0x04, 0xd0, 0xef, 0x08, 0xcd, 0xee, 0x05, 0x18, 0x7a, 0xa4,
- 0xf4, 0x57, 0x67, 0x75, 0x30, 0xcf, 0x59, 0x25, 0xea, 0x69, 0x70, 0x92, 0x4b, 0x20, 0xe3, 0x5d,
- 0x47, 0x39, 0xa6, 0x6a, 0xe0, 0x14, 0xf7, 0x86, 0x3e, 0xc0, 0x8e, 0x92, 0xd3, 0x1e, 0xfe, 0x42,
- 0x2e, 0x5c, 0xef, 0x79, 0x7f, 0x9e, 0xae, 0xb4, 0x7d, 0x8a, 0x0f, 0x76, 0xd9, 0x76, 0x6c, 0x1f,
- 0x3e, 0xc8, 0xb8, 0xa9, 0x84, 0x09, 0x89, 0x56, 0xc3, 0x69, 0x30, 0xe5, 0xbb, 0xac, 0xeb, 0x4a,
- 0xf0, 0xc8, 0x2a, 0x56, 0x81, 0x57, 0xac, 0x3a, 0x38, 0x6b, 0xd9, 0xed, 0xee, 0x5e, 0x07, 0x1a,
- 0xb0, 0x6b, 0x22, 0x19, 0x7a, 0x25, 0xaf, 0x02, 0x7b, 0xd0, 0xee, 0x40, 0xdb, 0x27, 0x7c, 0x06,
- 0xe7, 0x5e, 0x05, 0x72, 0xf2, 0xca, 0x78, 0x37, 0xaf, 0x8c, 0x8f, 0x1b, 0xb4, 0x84, 0x9b, 0xb0,
- 0xde, 0x77, 0x07, 0x00, 0xa4, 0x6e, 0xe7, 0x2c, 0x78, 0x85, 0xaa, 0xe1, 0x35, 0x7d, 0xab, 0x7e,
- 0x8d, 0x30, 0x83, 0xc1, 0x64, 0xd6, 0xbe, 0x1c, 0xaa, 0xdf, 0x33, 0x39, 0xf5, 0xbb, 0x55, 0x90,
- 0x85, 0x74, 0x5a, 0xd7, 0x1b, 0x41, 0xeb, 0xe6, 0xc1, 0x4c, 0xb4, 0x9b, 0x2c, 0xab, 0xd7, 0x80,
- 0xab, 0x03, 0x0f, 0xe3, 0xba, 0xae, 0x57, 0x9a, 0x9b, 0x1b, 0xeb, 0x2b, 0x46, 0xa9, 0xa2, 0x2b,
- 0x00, 0xe9, 0x27, 0xd1, 0xcb, 0xd0, 0x31, 0x38, 0xaf, 0xfd, 0xa1, 0x04, 0x0a, 0xf8, 0xd0, 0xb6,
- 0xf6, 0xfd, 0x63, 0xd2, 0x1c, 0x8f, 0x73, 0x7a, 0x0a, 0xc7, 0x5d, 0xf1, 0x2b, 0x4c, 0xa8, 0x30,
- 0x31, 0x57, 0x87, 0xba, 0xc2, 0x24, 0x81, 0x50, 0xf6, 0x33, 0x21, 0xd4, 0x24, 0x9b, 0x3b, 0xce,
- 0x95, 0xff, 0xcc, 0x4d, 0x12, 0xd5, 0xff, 0x88, 0x9b, 0xe4, 0x00, 0x16, 0x26, 0xde, 0x24, 0x07,
- 0xb4, 0xbb, 0x84, 0x66, 0xaa, 0x7d, 0xa4, 0x10, 0xce, 0xff, 0x3e, 0x29, 0x1d, 0x6a, 0xef, 0xab,
- 0x04, 0xe6, 0x2d, 0xdb, 0x87, 0xae, 0x6d, 0x76, 0x97, 0xbb, 0xe6, 0x76, 0x60, 0x9f, 0xf6, 0x6f,
- 0x78, 0x54, 0x99, 0x3c, 0x06, 0xff, 0x85, 0x7a, 0x06, 0x00, 0x1f, 0xee, 0xf6, 0xba, 0xa6, 0x1f,
- 0xa9, 0x1e, 0x93, 0xc2, 0x6a, 0x5f, 0x9e, 0xd7, 0xbe, 0x27, 0x82, 0xab, 0x08, 0x68, 0xad, 0xfd,
- 0x1e, 0xdc, 0xb0, 0xad, 0x67, 0xef, 0xe1, 0xd8, 0xc8, 0x44, 0x47, 0x07, 0xbd, 0xe2, 0x76, 0x80,
- 0x8a, 0xfc, 0x0e, 0x90, 0x7a, 0x17, 0xb8, 0x06, 0x87, 0xbd, 0xc6, 0x77, 0x84, 0x9c, 0xb7, 0x3a,
- 0xdb, 0xd0, 0xaf, 0x6e, 0xad, 0x59, 0x9e, 0x67, 0xd9, 0xdb, 0x78, 0x3a, 0x3e, 0x6d, 0xc4, 0x67,
- 0xd0, 0xfe, 0x56, 0x38, 0xee, 0x52, 0xd0, 0x67, 0x0c, 0x89, 0xbb, 0x14, 0xb6, 0x53, 0xb9, 0xaf,
- 0x9d, 0x86, 0xab, 0x3a, 0x79, 0x81, 0x55, 0x1d, 0x16, 0xd3, 0x82, 0xe0, 0xea, 0xc0, 0x6b, 0x85,
- 0x02, 0x3b, 0x25, 0x55, 0x23, 0xfb, 0xbe, 0xef, 0x1b, 0x32, 0x58, 0x20, 0x45, 0x2f, 0x39, 0xce,
- 0xa5, 0x5d, 0xd3, 0xbd, 0xa4, 0xfd, 0xe4, 0xe1, 0x76, 0x71, 0x13, 0x77, 0xaf, 0xe2, 0xb6, 0x64,
- 0xfb, 0x94, 0x37, 0xdf, 0xaf, 0xbc, 0xda, 0x6f, 0x0b, 0x4f, 0x49, 0x38, 0x79, 0x06, 0x95, 0x9a,
- 0xcc, 0xf6, 0x96, 0xd8, 0xf1, 0x46, 0x11, 0x06, 0xb3, 0x07, 0xfe, 0x37, 0x43, 0xe0, 0x83, 0x71,
- 0x84, 0xdd, 0x19, 0x18, 0x27, 0xee, 0xda, 0x57, 0x46, 0xc3, 0x2e, 0xe0, 0x6b, 0x04, 0xec, 0x14,
- 0x20, 0x5f, 0x0a, 0x9d, 0x91, 0xd0, 0x5f, 0xb6, 0x42, 0xf9, 0xec, 0xd0, 0x8c, 0x61, 0x79, 0x22,
- 0x68, 0x9e, 0xe4, 0x59, 0x68, 0xf4, 0x32, 0xc5, 0xf4, 0x4b, 0xc2, 0x3b, 0x6e, 0x03, 0x05, 0x44,
- 0xb8, 0x9b, 0x4c, 0xab, 0x14, 0xdb, 0xae, 0x13, 0x67, 0x33, 0x7b, 0x34, 0x5f, 0x5c, 0x00, 0x33,
- 0x41, 0xfc, 0x2b, 0x7c, 0xa3, 0x60, 0x88, 0xe1, 0x29, 0x50, 0xf4, 0x9c, 0x3d, 0xb7, 0x0d, 0xe9,
- 0x1e, 0x28, 0x7d, 0x1a, 0x61, 0xbf, 0x6e, 0xa8, 0xb9, 0x70, 0xc0, 0x22, 0xc9, 0xa7, 0xb6, 0x48,
- 0xe2, 0xed, 0xdd, 0x04, 0xfb, 0x41, 0x7b, 0x89, 0xf0, 0xb5, 0x1f, 0x1c, 0x66, 0x4d, 0xe8, 0x3f,
- 0x12, 0x8d, 0x80, 0x5f, 0x13, 0xda, 0x0d, 0x1a, 0x52, 0x93, 0x74, 0x2a, 0xd7, 0x18, 0xc1, 0x0e,
- 0x7e, 0x34, 0x78, 0x54, 0x90, 0x83, 0x1a, 0xc0, 0xd8, 0xe0, 0xdd, 0x30, 0x6a, 0x8a, 0xac, 0x3d,
- 0x2f, 0x0f, 0x14, 0xc2, 0x5a, 0x23, 0xb4, 0x05, 0xb5, 0x97, 0xe7, 0x8e, 0xda, 0xe0, 0x8d, 0x9f,
- 0xc1, 0xfe, 0x9e, 0x24, 0x1a, 0x2c, 0x9c, 0x13, 0x7c, 0x54, 0xbb, 0x18, 0x4d, 0x1a, 0xa1, 0x99,
- 0x25, 0x28, 0x9f, 0xf6, 0x96, 0x9c, 0x48, 0xec, 0x71, 0x31, 0x16, 0xb3, 0xef, 0x95, 0xbe, 0x99,
- 0x0f, 0xc2, 0x18, 0x2e, 0xbb, 0xce, 0xee, 0x86, 0xdb, 0xd5, 0xfe, 0x4d, 0xe8, 0x6a, 0x87, 0x98,
- 0xd9, 0x85, 0x14, 0x3f, 0xbb, 0xc0, 0x2b, 0xd2, 0xdd, 0x68, 0x2b, 0xac, 0x3b, 0xc2, 0xf0, 0xad,
- 0xde, 0x04, 0x16, 0xcc, 0x4e, 0x67, 0xdd, 0xdc, 0x86, 0x65, 0x34, 0x6d, 0xb7, 0x7d, 0x1a, 0xe2,
- 0xac, 0x2f, 0x35, 0x71, 0x2a, 0xc3, 0xf7, 0x91, 0x53, 0x07, 0xac, 0x52, 0xf1, 0x65, 0x58, 0x0e,
- 0x44, 0x2a, 0xbf, 0x89, 0x0c, 0x7f, 0x68, 0xc8, 0x68, 0xef, 0x98, 0x51, 0x40, 0x46, 0xfa, 0x24,
- 0xe8, 0x8b, 0x25, 0xc0, 0x77, 0xf6, 0x9a, 0xf7, 0xab, 0x12, 0x98, 0x42, 0x78, 0x94, 0x3a, 0x1d,
- 0xed, 0xb1, 0x5c, 0xdc, 0xd2, 0x58, 0x6f, 0xb8, 0x17, 0x0a, 0xbb, 0x21, 0x06, 0x35, 0x24, 0xf4,
- 0x63, 0x30, 0x89, 0x84, 0x28, 0x71, 0x42, 0x14, 0xf3, 0x36, 0x4c, 0x2c, 0x22, 0x7b, 0xf1, 0x7d,
- 0x46, 0x02, 0xf3, 0xc1, 0x3c, 0x63, 0x19, 0xfa, 0xed, 0x1d, 0xed, 0x0e, 0xd1, 0x75, 0x2e, 0xda,
- 0x12, 0xc3, 0x2d, 0xe1, 0xae, 0xf6, 0xed, 0x5c, 0x4a, 0x95, 0xe7, 0x4a, 0x8e, 0x59, 0x24, 0x4c,
- 0xa5, 0x8b, 0x49, 0x04, 0xb3, 0x17, 0xe6, 0x97, 0x25, 0x00, 0x5a, 0x4e, 0x38, 0x59, 0x3e, 0x84,
- 0x24, 0x7f, 0x4a, 0x78, 0xb7, 0x98, 0x56, 0x3c, 0x2a, 0x36, 0x7d, 0xcf, 0x21, 0xe8, 0x4c, 0x35,
- 0xac, 0xa4, 0x89, 0xb4, 0xf5, 0x99, 0xca, 0x5e, 0xaf, 0x6b, 0xb5, 0x4d, 0xbf, 0xdf, 0x03, 0x30,
- 0x5e, 0xbc, 0xf8, 0x3a, 0xee, 0x54, 0x46, 0x63, 0x58, 0x46, 0x8c, 0x2c, 0x49, 0x9c, 0x1f, 0x29,
- 0x88, 0xf3, 0x23, 0xe8, 0xd5, 0x33, 0x84, 0xf8, 0x04, 0xd4, 0x53, 0x06, 0xc7, 0x1b, 0x3d, 0x68,
- 0x2f, 0xb9, 0xd0, 0xec, 0xb4, 0xdd, 0xbd, 0xdd, 0x8b, 0x1e, 0xeb, 0xbe, 0x9a, 0xac, 0xa3, 0xcc,
- 0xca, 0xb5, 0xc4, 0xad, 0x5c, 0x6b, 0x3f, 0x22, 0x8b, 0x46, 0x62, 0x63, 0xf6, 0x57, 0x18, 0x1e,
- 0x46, 0x18, 0xea, 0x52, 0x39, 0x5d, 0xf5, 0x2d, 0x52, 0xe7, 0xd3, 0x2c, 0x52, 0xbf, 0x59, 0x28,
- 0xae, 0x9b, 0x50, 0xbd, 0x26, 0xe2, 0x3b, 0xb7, 0xd0, 0x84, 0x7e, 0x0c, 0xbc, 0x37, 0x82, 0xf9,
- 0x8b, 0xd1, 0x9b, 0x10, 0x62, 0x3e, 0x71, 0x80, 0x47, 0xeb, 0x5b, 0xd3, 0xae, 0xd0, 0xf0, 0x2c,
- 0xc4, 0xa0, 0x1b, 0x22, 0x28, 0x89, 0xb8, 0xcd, 0xa5, 0x5a, 0x6e, 0x49, 0x2c, 0x3f, 0x7b, 0x14,
- 0x3e, 0x21, 0x81, 0x59, 0x7c, 0xc9, 0xf8, 0xd2, 0x3e, 0x3e, 0xc8, 0x29, 0x68, 0x94, 0xbc, 0x98,
- 0x15, 0xb3, 0x0a, 0xf2, 0x5d, 0xcb, 0xbe, 0x14, 0xf8, 0x3b, 0xa2, 0xff, 0xd1, 0x15, 0xa5, 0xd2,
- 0x80, 0x2b, 0x4a, 0xc3, 0x6d, 0x92, 0xb0, 0xdc, 0x98, 0xd1, 0xf4, 0x0d, 0x39, 0x91, 0x2b, 0x4a,
- 0x87, 0x92, 0xcb, 0x5e, 0x8c, 0x7f, 0x9d, 0x07, 0xc5, 0x26, 0x34, 0xdd, 0xf6, 0x8e, 0xf6, 0x7e,
- 0x69, 0xe0, 0x54, 0x62, 0x9a, 0x9f, 0x4a, 0x2c, 0x83, 0xa9, 0x2d, 0xab, 0xeb, 0x43, 0x97, 0xf8,
- 0x80, 0xb3, 0x5d, 0x3b, 0x69, 0xe2, 0x4b, 0x5d, 0xa7, 0x7d, 0x69, 0x91, 0x9a, 0xf6, 0x8b, 0x41,
- 0xbc, 0xe8, 0xc5, 0x65, 0xfc, 0x91, 0x11, 0x7c, 0x8c, 0x0c, 0x42, 0xcf, 0x71, 0xfd, 0xb8, 0xfb,
- 0x87, 0x62, 0xa8, 0x34, 0x1d, 0xd7, 0x37, 0xc8, 0x87, 0x08, 0xe6, 0xad, 0xbd, 0x6e, 0xb7, 0x05,
- 0x1f, 0xf4, 0x83, 0x69, 0x5d, 0xf0, 0x8c, 0x8c, 0x45, 0x67, 0x6b, 0xcb, 0x83, 0x64, 0x51, 0xa1,
- 0x60, 0xd0, 0x27, 0xf5, 0x24, 0x28, 0x74, 0xad, 0x5d, 0x8b, 0x4c, 0x44, 0x0a, 0x06, 0x79, 0x50,
- 0x6f, 0x01, 0x4a, 0x34, 0x07, 0x22, 0x8c, 0x9e, 0x2e, 0xe2, 0xa6, 0x79, 0x20, 0x1d, 0xe9, 0xcc,
- 0x25, 0xb8, 0xef, 0x9d, 0x9e, 0xc2, 0xef, 0xf1, 0x7f, 0xfe, 0xc0, 0x8d, 0xc8, 0x86, 0x09, 0x91,
- 0x78, 0xfc, 0x0c, 0xd7, 0x85, 0x6d, 0xc7, 0xed, 0x04, 0xb2, 0x89, 0x9f, 0x60, 0xd0, 0x7c, 0xe9,
- 0xb6, 0x39, 0x06, 0x16, 0x9e, 0xbd, 0xa6, 0xbd, 0xa7, 0x88, 0xba, 0x4d, 0x54, 0xf4, 0x79, 0xcb,
- 0xdf, 0x59, 0x83, 0xbe, 0xa9, 0xfd, 0xb5, 0x3c, 0x50, 0xe3, 0x66, 0xff, 0x7f, 0x8d, 0x1b, 0xa2,
- 0x71, 0x24, 0xe6, 0x97, 0xbf, 0xe7, 0xda, 0x48, 0x8e, 0xd4, 0x8f, 0x96, 0x49, 0x51, 0xef, 0x02,
- 0xd7, 0x44, 0x4f, 0xc1, 0x52, 0x6a, 0x85, 0x71, 0xad, 0x9d, 0x36, 0xe2, 0x33, 0xa8, 0xeb, 0xe0,
- 0x06, 0xf2, 0x72, 0xb5, 0xb5, 0x56, 0x5b, 0xb5, 0xb6, 0x77, 0xba, 0xd6, 0xf6, 0x8e, 0xef, 0x55,
- 0x6d, 0xcf, 0x87, 0x66, 0xa7, 0xb1, 0x65, 0x90, 0x9b, 0xc3, 0x00, 0xa6, 0x23, 0x92, 0x95, 0xf7,
- 0x11, 0x17, 0x1b, 0xdd, 0x58, 0x4d, 0x89, 0x69, 0x29, 0x4f, 0x45, 0x2d, 0xc5, 0xdb, 0xeb, 0x86,
- 0x98, 0x5e, 0xdb, 0x87, 0x69, 0xa4, 0xea, 0x7b, 0x5d, 0xdc, 0x5c, 0x70, 0xe6, 0xb4, 0xe3, 0x5c,
- 0x02, 0x27, 0xd9, 0x37, 0x9b, 0x7f, 0x2b, 0x82, 0xc2, 0x8a, 0x6b, 0xf6, 0x76, 0xb4, 0xe7, 0x31,
- 0xfd, 0xf3, 0xb8, 0xda, 0x44, 0xa8, 0x9d, 0xd2, 0x30, 0xed, 0x94, 0x87, 0x68, 0x67, 0x9e, 0xd1,
- 0xce, 0xf8, 0x45, 0xe7, 0xb3, 0x60, 0xae, 0xed, 0x74, 0xbb, 0xb0, 0x8d, 0xe4, 0x51, 0xed, 0xe0,
- 0xd5, 0x9e, 0x19, 0x83, 0x4b, 0xc3, 0x31, 0xf5, 0xa1, 0xdf, 0x24, 0x6b, 0xec, 0x44, 0xe9, 0xa3,
- 0x04, 0xed, 0xe5, 0x12, 0xc8, 0xeb, 0x9d, 0x6d, 0xc8, 0xad, 0xc3, 0xe7, 0x98, 0x75, 0xf8, 0x53,
- 0xa0, 0xe8, 0x9b, 0xee, 0x36, 0xf4, 0x83, 0x75, 0x02, 0xf2, 0x14, 0x86, 0xfa, 0x97, 0x99, 0x50,
- 0xff, 0xdf, 0x0b, 0xf2, 0x48, 0x66, 0xd4, 0x2d, 0xfe, 0x86, 0x41, 0xf0, 0x63, 0xd9, 0x2f, 0xa2,
- 0x12, 0x17, 0x51, 0xad, 0x0d, 0xfc, 0x41, 0x3f, 0xd6, 0x85, 0x83, 0xa1, 0x68, 0xaf, 0x05, 0x33,
- 0x56, 0xdb, 0xb1, 0xab, 0xbb, 0xe6, 0x36, 0xa4, 0xd5, 0x8c, 0x12, 0x82, 0xb7, 0xfa, 0xae, 0xf3,
- 0x80, 0x45, 0x17, 0xb5, 0xa2, 0x04, 0x54, 0x85, 0x1d, 0xab, 0xd3, 0x81, 0x36, 0x6d, 0xd9, 0xf4,
- 0xe9, 0xec, 0x19, 0x90, 0x47, 0x3c, 0x20, 0xfd, 0x41, 0xc6, 0x82, 0x72, 0x4c, 0x9d, 0x43, 0xcd,
- 0x8a, 0x34, 0x5e, 0x25, 0xc7, 0xaf, 0xb9, 0x8a, 0x78, 0x0d, 0x91, 0xca, 0x0d, 0x6e, 0x5c, 0x4f,
- 0x00, 0x05, 0xdb, 0xe9, 0xc0, 0xa1, 0x83, 0x10, 0xc9, 0xa5, 0x3e, 0x05, 0x14, 0x60, 0x07, 0xf5,
- 0x0a, 0x32, 0xce, 0x7e, 0x26, 0x59, 0x96, 0x06, 0xc9, 0x9c, 0xce, 0x35, 0x69, 0x10, 0xb7, 0xd9,
- 0x37, 0xc0, 0x1f, 0x9b, 0x02, 0xc7, 0x49, 0x1f, 0xd0, 0xdc, 0xbb, 0x88, 0x48, 0x5d, 0x84, 0xda,
- 0xeb, 0x07, 0x0f, 0x5c, 0xc7, 0x79, 0x65, 0x3f, 0x09, 0x0a, 0xde, 0xde, 0xc5, 0xd0, 0x08, 0x25,
- 0x0f, 0x6c, 0xd3, 0x95, 0xc6, 0x32, 0x9c, 0xc9, 0xa3, 0x0e, 0x67, 0xdc, 0xd0, 0x24, 0x07, 0x8d,
- 0x3f, 0x1a, 0xc8, 0xc8, 0x81, 0x8e, 0x60, 0x20, 0x1b, 0x34, 0x0c, 0x9d, 0x06, 0x53, 0xe6, 0x96,
- 0x0f, 0xdd, 0xc8, 0x4c, 0xa4, 0x8f, 0x68, 0xa8, 0xbc, 0x08, 0xb7, 0x1c, 0x17, 0x89, 0x85, 0x84,
- 0x85, 0x0d, 0x9f, 0x99, 0x96, 0x0b, 0xb8, 0x1d, 0xb4, 0x5b, 0xc1, 0x09, 0xdb, 0xa9, 0xc0, 0x1e,
- 0x95, 0x33, 0x41, 0x71, 0x9e, 0xdc, 0xce, 0x7e, 0xe0, 0xc5, 0x81, 0xae, 0x64, 0xe1, 0x60, 0x57,
- 0xa2, 0x7d, 0x2e, 0xed, 0x9c, 0xb9, 0x0f, 0xe8, 0xb1, 0x59, 0x68, 0xea, 0xd3, 0xc1, 0x5c, 0x87,
- 0x7a, 0x88, 0xb5, 0xad, 0xb0, 0x95, 0xc4, 0x7e, 0xc7, 0x65, 0x8e, 0x14, 0x29, 0xcf, 0x2a, 0xd2,
- 0x0a, 0x98, 0xc6, 0x47, 0xaf, 0x91, 0x26, 0x15, 0xfa, 0x3c, 0xf2, 0xf1, 0xb4, 0x2e, 0xac, 0x14,
- 0x23, 0xb6, 0xc5, 0x32, 0xfd, 0xc4, 0x08, 0x3f, 0x4e, 0x37, 0xfb, 0x4e, 0x96, 0x50, 0xf6, 0xcd,
- 0xf1, 0x97, 0x8b, 0xe0, 0x9a, 0xb2, 0xeb, 0x78, 0x1e, 0x3e, 0x82, 0xd3, 0xdf, 0x30, 0xdf, 0x28,
- 0x71, 0x97, 0xfe, 0x3c, 0xa2, 0x9b, 0xdf, 0xa0, 0x06, 0x35, 0xb9, 0xa6, 0xf1, 0x97, 0xc2, 0x41,
- 0x6b, 0xc2, 0xfd, 0x87, 0x18, 0xa1, 0xff, 0xe7, 0x68, 0x24, 0xef, 0xc9, 0x89, 0xc4, 0xd1, 0x49,
- 0x29, 0xab, 0xec, 0x9b, 0xcb, 0x97, 0x24, 0xf0, 0xe8, 0x7e, 0x6e, 0x36, 0x6c, 0x2f, 0x6c, 0x30,
- 0xd7, 0x0d, 0x69, 0x2f, 0x7c, 0xdc, 0x95, 0xc4, 0x3b, 0x7e, 0x63, 0xea, 0xce, 0x94, 0x16, 0xb3,
- 0x58, 0x12, 0x1d, 0xe8, 0x49, 0xba, 0xe3, 0x37, 0x35, 0xf9, 0xec, 0x85, 0xfb, 0x7b, 0x79, 0x70,
- 0x7c, 0xc5, 0x75, 0xf6, 0x7a, 0x5e, 0xd4, 0x03, 0xfd, 0xe9, 0xe0, 0x0d, 0xd9, 0xa2, 0x88, 0x69,
- 0x70, 0x3d, 0x98, 0x75, 0xa9, 0x35, 0x17, 0x6d, 0xcf, 0xb2, 0x49, 0x6c, 0xef, 0x25, 0x1f, 0xa6,
- 0xf7, 0x8a, 0xfa, 0x99, 0x3c, 0xd7, 0xcf, 0xf4, 0xf7, 0x1c, 0x85, 0x01, 0x3d, 0xc7, 0x9f, 0x48,
- 0x29, 0x07, 0xd5, 0x3e, 0x11, 0xc5, 0xf4, 0x17, 0x65, 0x50, 0xdc, 0xc6, 0x19, 0x69, 0x77, 0xf1,
- 0x78, 0xb1, 0x9a, 0x61, 0xe2, 0x06, 0xfd, 0x34, 0x92, 0xab, 0xcc, 0xea, 0x70, 0xaa, 0x01, 0x2e,
- 0x99, 0xdb, 0xec, 0x95, 0xea, 0xe1, 0x3c, 0x98, 0x0b, 0x4b, 0xaf, 0x76, 0x3c, 0x2e, 0xba, 0x2b,
- 0xa3, 0x51, 0xf3, 0x22, 0x1a, 0x75, 0x60, 0x9d, 0x39, 0x1c, 0x75, 0x64, 0x66, 0xd4, 0x19, 0x38,
- 0xba, 0xcc, 0xc5, 0x8c, 0x2e, 0xda, 0x73, 0x65, 0xd1, 0x6b, 0xf3, 0xf8, 0xae, 0x15, 0xd7, 0xe6,
- 0x91, 0x3c, 0x58, 0x08, 0x5e, 0xde, 0x37, 0xbc, 0x56, 0xd9, 0x2b, 0xc9, 0x87, 0x25, 0x70, 0xe2,
- 0x60, 0x67, 0xfe, 0x5d, 0xbc, 0x97, 0x1a, 0xaa, 0x93, 0x17, 0x7a, 0xa9, 0xe1, 0x27, 0x7e, 0x93,
- 0x2e, 0x31, 0x08, 0x0a, 0x67, 0xef, 0x0d, 0xef, 0xc4, 0xc5, 0xc2, 0x9c, 0x08, 0x12, 0xcd, 0x5e,
- 0x80, 0x3f, 0x2d, 0x83, 0x99, 0x26, 0xf4, 0x6b, 0xe6, 0xbe, 0xb3, 0xe7, 0x6b, 0xa6, 0xe8, 0xf6,
- 0xdc, 0xd3, 0x40, 0xb1, 0x8b, 0x3f, 0xc1, 0x1d, 0x0c, 0x1b, 0x74, 0x94, 0xdd, 0xdf, 0xc2, 0xbe,
- 0x41, 0x84, 0xb4, 0x41, 0xf3, 0xf3, 0xd1, 0x67, 0x44, 0x76, 0x47, 0x43, 0xee, 0xc6, 0xb2, 0xb5,
- 0x93, 0x6a, 0xef, 0x34, 0xae, 0xe8, 0xec, 0x61, 0xf9, 0x11, 0x19, 0xcc, 0x37, 0xa1, 0x5f, 0xf5,
- 0x96, 0xcd, 0xcb, 0x8e, 0x6b, 0xf9, 0x50, 0x5b, 0x11, 0x85, 0xe6, 0x0c, 0x00, 0x56, 0xf8, 0x19,
- 0x8d, 0x89, 0xc5, 0xa4, 0x68, 0x6f, 0x49, 0xeb, 0x28, 0xc4, 0xf1, 0x31, 0x16, 0x10, 0x52, 0xf9,
- 0x58, 0x24, 0x15, 0x3f, 0x81, 0x8b, 0xbf, 0x25, 0x0a, 0x44, 0xc9, 0x6d, 0xef, 0x58, 0x97, 0x61,
- 0x27, 0x25, 0x10, 0xc1, 0x67, 0x11, 0x10, 0x21, 0xa1, 0xd4, 0xee, 0x2b, 0x1c, 0x1f, 0xe3, 0x70,
- 0x5f, 0x49, 0x22, 0x38, 0x91, 0xb0, 0x56, 0xa8, 0xeb, 0xa1, 0xeb, 0x99, 0xf7, 0x88, 0x8a, 0x35,
- 0x32, 0xd9, 0x24, 0xd6, 0x64, 0x1b, 0xa9, 0x63, 0x21, 0x65, 0x0f, 0xd3, 0xe9, 0x7c, 0x16, 0x1d,
- 0xcb, 0xc0, 0xa2, 0xb3, 0x17, 0xfa, 0xfb, 0x64, 0x70, 0x75, 0x18, 0xef, 0xa5, 0x09, 0xfd, 0x8a,
- 0xe9, 0xed, 0x5c, 0x74, 0x4c, 0xb7, 0xa3, 0x95, 0xc7, 0x70, 0xe0, 0x50, 0xfb, 0x23, 0x16, 0x84,
- 0x3a, 0x0f, 0xc2, 0x40, 0x57, 0xd2, 0x81, 0xbc, 0x8c, 0xa3, 0x93, 0x49, 0xf4, 0x76, 0x7d, 0x47,
- 0x08, 0xd6, 0xb3, 0x38, 0xb0, 0xee, 0x1e, 0x95, 0xc5, 0xec, 0x81, 0xfb, 0x39, 0x32, 0x22, 0x30,
- 0x5e, 0xcf, 0x17, 0x44, 0x01, 0x8b, 0xf1, 0x7a, 0x95, 0x63, 0xbd, 0x5e, 0x47, 0x1a, 0x23, 0x86,
- 0x7a, 0x2c, 0x67, 0x3b, 0x46, 0x1c, 0xa1, 0x37, 0xf2, 0xbb, 0x64, 0xa0, 0xe0, 0x80, 0x5f, 0x8c,
- 0x47, 0x38, 0x1b, 0x3f, 0x3b, 0x19, 0x9d, 0x03, 0xde, 0xe7, 0x53, 0x69, 0xbd, 0xcf, 0xb5, 0x77,
- 0xa6, 0xf5, 0x31, 0xef, 0xe7, 0x76, 0x2c, 0x88, 0xa5, 0x72, 0x21, 0x1f, 0xc2, 0x41, 0xf6, 0xa0,
- 0xfd, 0xb8, 0x0c, 0x00, 0x6a, 0xd0, 0xf4, 0x6c, 0xc4, 0xfd, 0xa2, 0x70, 0xdd, 0xc6, 0xfa, 0xdd,
- 0x23, 0xa0, 0xae, 0xee, 0x03, 0x8a, 0x50, 0x8c, 0x4e, 0x5d, 0xbc, 0x3e, 0xad, 0x6f, 0x65, 0xc4,
- 0xd5, 0x58, 0x60, 0x49, 0xe5, 0x6d, 0x19, 0x5b, 0x76, 0xf6, 0x80, 0xfc, 0x77, 0x09, 0x14, 0x5a,
- 0x4e, 0x13, 0xfa, 0x87, 0x37, 0x05, 0x52, 0x47, 0x0d, 0xc0, 0xe5, 0x8e, 0x23, 0x6a, 0xc0, 0x20,
- 0x42, 0xd9, 0x8b, 0xee, 0xbd, 0x12, 0x98, 0x6b, 0x39, 0xe5, 0x70, 0x71, 0x4a, 0xdc, 0x57, 0x55,
- 0xfc, 0xea, 0xff, 0xb0, 0x82, 0x51, 0x31, 0x87, 0xba, 0xfa, 0x7f, 0x38, 0xbd, 0xec, 0xe5, 0x76,
- 0x07, 0x38, 0xbe, 0x61, 0x77, 0x1c, 0x03, 0x76, 0x1c, 0xba, 0xd2, 0xad, 0xaa, 0x20, 0xbf, 0x67,
- 0x77, 0x1c, 0xcc, 0x72, 0xc1, 0xc0, 0xff, 0x51, 0x9a, 0x0b, 0x3b, 0x0e, 0xf5, 0x0d, 0xc0, 0xff,
- 0xb5, 0xbf, 0x94, 0x41, 0x1e, 0x7d, 0x2b, 0x2e, 0xea, 0x77, 0xc9, 0x29, 0xe3, 0x20, 0x20, 0xf2,
- 0x63, 0xb1, 0x84, 0xee, 0x61, 0xd6, 0xfe, 0x89, 0x07, 0xeb, 0x0d, 0x71, 0xe5, 0x31, 0xa2, 0x88,
- 0xd6, 0xfc, 0xd5, 0xd3, 0x60, 0xea, 0x62, 0xd7, 0x69, 0x5f, 0x8a, 0x8e, 0xeb, 0xd3, 0x47, 0xf5,
- 0x16, 0x50, 0x70, 0x4d, 0x7b, 0x1b, 0xd2, 0x3d, 0x85, 0x93, 0x7d, 0x7d, 0x21, 0xf6, 0x7a, 0x31,
- 0x48, 0x16, 0xed, 0x9d, 0x69, 0x22, 0x30, 0x0c, 0xa8, 0x7c, 0x3a, 0x7d, 0xa8, 0x8c, 0x70, 0xf2,
- 0x4c, 0x01, 0x73, 0xe5, 0x52, 0x9d, 0xdc, 0x63, 0xd8, 0x38, 0xa7, 0x2b, 0x32, 0x86, 0x19, 0xc9,
- 0x24, 0x43, 0x98, 0x11, 0xf9, 0xff, 0xb4, 0x30, 0x0f, 0xa8, 0xfc, 0x51, 0xc0, 0xfc, 0x19, 0x09,
- 0xcc, 0xd7, 0x2c, 0xcf, 0x8f, 0xf3, 0xf6, 0x4f, 0x88, 0xf7, 0xfb, 0x92, 0xb4, 0xa6, 0x32, 0x57,
- 0x8e, 0x70, 0xa0, 0xdf, 0x54, 0xe6, 0x70, 0x52, 0x11, 0x93, 0x39, 0x96, 0x82, 0x39, 0x20, 0x97,
- 0xd8, 0x0b, 0x4b, 0x32, 0xb5, 0xa1, 0x14, 0x15, 0x32, 0x79, 0x43, 0x29, 0xb6, 0xec, 0xec, 0xe5,
- 0xfb, 0x97, 0x12, 0x38, 0x81, 0x8a, 0x4f, 0x5a, 0x96, 0x8a, 0x17, 0xf3, 0xd0, 0x65, 0xa9, 0xd4,
- 0x2b, 0xe3, 0x07, 0x78, 0x19, 0xc7, 0xca, 0xf8, 0x30, 0xa2, 0x13, 0x16, 0x73, 0xcc, 0x32, 0xec,
- 0x30, 0x31, 0x27, 0x2c, 0xc3, 0x8e, 0x2e, 0xe6, 0xe4, 0xa5, 0xd8, 0x11, 0xc5, 0x7c, 0x64, 0x0b,
- 0xac, 0xbf, 0x28, 0x87, 0x62, 0x8e, 0x5d, 0xdb, 0x48, 0x10, 0x73, 0xea, 0x13, 0xbd, 0xda, 0xbb,
- 0x47, 0x14, 0xfc, 0x98, 0xd7, 0x37, 0x46, 0x81, 0xe9, 0x08, 0xd7, 0x38, 0x7e, 0x5e, 0x06, 0x0b,
- 0x94, 0x8b, 0xc1, 0x53, 0xe6, 0x04, 0x8c, 0x52, 0x4f, 0x99, 0x53, 0x9f, 0x01, 0xe2, 0x39, 0x9b,
- 0xfc, 0x19, 0xa0, 0xc4, 0xf2, 0xb3, 0x07, 0xe7, 0xaf, 0xf2, 0xe0, 0x14, 0x62, 0x61, 0xcd, 0xe9,
- 0x58, 0x5b, 0xfb, 0x84, 0x8b, 0x73, 0x66, 0x77, 0x0f, 0x7a, 0xda, 0x07, 0x24, 0x51, 0x94, 0xfe,
- 0x37, 0x00, 0x9c, 0x1e, 0x74, 0x49, 0x1c, 0x37, 0x0a, 0xd4, 0x5d, 0x71, 0x95, 0x3d, 0x58, 0x52,
- 0x78, 0xfd, 0x4d, 0x23, 0x20, 0x62, 0x30, 0xf4, 0x90, 0x55, 0x38, 0x13, 0xbe, 0xe9, 0x77, 0xf0,
- 0xc8, 0x1d, 0x74, 0xf0, 0xb8, 0x19, 0xc8, 0x66, 0xa7, 0x13, 0x42, 0xd5, 0xbf, 0x99, 0x8d, 0xcb,
- 0x34, 0x50, 0x16, 0x94, 0xd3, 0x83, 0xd1, 0xd1, 0xbc, 0x98, 0x9c, 0x1e, 0xf4, 0xd5, 0x45, 0x50,
- 0x24, 0xd7, 0x81, 0x87, 0x2b, 0xfa, 0x83, 0x33, 0xd3, 0x5c, 0xbc, 0x69, 0xd7, 0xe0, 0xd5, 0xf0,
- 0x8e, 0x54, 0x92, 0x19, 0xd4, 0x4f, 0x47, 0x76, 0xb2, 0xc1, 0x29, 0xd8, 0x33, 0x46, 0xa6, 0x3c,
- 0x99, 0xdd, 0xb0, 0x52, 0xaf, 0xd7, 0xdd, 0x6f, 0xd1, 0xc0, 0x03, 0xa9, 0x76, 0xc3, 0x98, 0xf8,
- 0x05, 0xd2, 0x81, 0xf8, 0x05, 0xa9, 0x77, 0xc3, 0x38, 0x3e, 0xc6, 0xb1, 0x1b, 0x96, 0x44, 0x70,
- 0x22, 0xf7, 0xf0, 0x60, 0xab, 0x99, 0xde, 0x46, 0xf0, 0x8f, 0x83, 0x3d, 0xab, 0x01, 0xef, 0xec,
- 0x32, 0xe8, 0xa2, 0x82, 0xc4, 0x5b, 0x58, 0xd4, 0xa7, 0x80, 0xe2, 0x96, 0xe3, 0xee, 0x9a, 0xc1,
- 0xc6, 0x7d, 0xff, 0x49, 0x11, 0x7a, 0x03, 0xc0, 0x32, 0xce, 0x63, 0xd0, 0xbc, 0x68, 0x3e, 0xf2,
- 0x1c, 0xab, 0x47, 0x83, 0x3e, 0xa2, 0xbf, 0xea, 0x8d, 0x60, 0x9e, 0xc6, 0x7e, 0xac, 0x43, 0xcf,
- 0x87, 0x1d, 0x1a, 0xd1, 0x82, 0x4f, 0x54, 0xcf, 0x82, 0x39, 0x9a, 0xb0, 0x6c, 0x75, 0xa1, 0x47,
- 0x83, 0x5a, 0x70, 0x69, 0xea, 0x29, 0x50, 0xb4, 0xbc, 0x7b, 0x3d, 0xc7, 0xa6, 0x01, 0xf9, 0xe8,
- 0x93, 0x7a, 0x33, 0x38, 0x4e, 0xf3, 0x85, 0xc6, 0x2a, 0x39, 0xb0, 0xd3, 0x9f, 0x8c, 0x54, 0xcb,
- 0x76, 0xd6, 0x5d, 0x67, 0xdb, 0x85, 0x9e, 0x87, 0x4f, 0x4d, 0x4d, 0x1b, 0x4c, 0x8a, 0x7a, 0x01,
- 0x9c, 0xe8, 0x5a, 0xf6, 0x25, 0x0f, 0xc7, 0x08, 0x5e, 0xa6, 0x6e, 0x63, 0x73, 0x03, 0x62, 0x77,
- 0x33, 0x8d, 0x8d, 0xca, 0x81, 0xfd, 0xc4, 0x38, 0x48, 0x45, 0xbd, 0x05, 0x28, 0x94, 0x9b, 0x25,
- 0xb3, 0x7d, 0x09, 0xbf, 0xa7, 0xee, 0xa8, 0x07, 0xd2, 0x19, 0x61, 0x90, 0x30, 0xfa, 0x0b, 0x9c,
- 0x30, 0x48, 0x24, 0xfd, 0x97, 0xe5, 0xc0, 0x1c, 0x57, 0x80, 0x09, 0xd4, 0xa0, 0x5b, 0xf4, 0xce,
- 0xef, 0x58, 0x3e, 0x44, 0xcc, 0xd1, 0xb3, 0x2e, 0x4f, 0x1a, 0xc2, 0xbc, 0x71, 0xe0, 0x43, 0x63,
- 0x00, 0x31, 0xc4, 0x17, 0xe9, 0xf0, 0xb0, 0x67, 0x99, 0x47, 0x6d, 0x55, 0x2e, 0x4d, 0x7b, 0x0e,
- 0x50, 0x0f, 0x52, 0x63, 0xbc, 0x40, 0x72, 0xe9, 0xbc, 0x40, 0x90, 0xdc, 0xcc, 0x6e, 0xd7, 0xb9,
- 0x02, 0x3b, 0x21, 0x59, 0xaa, 0xab, 0x07, 0xd2, 0xb5, 0xcf, 0x8f, 0x32, 0x2f, 0x4c, 0x7d, 0xb1,
- 0x06, 0x6a, 0x64, 0x7b, 0xed, 0x36, 0x84, 0x1d, 0x7a, 0x70, 0x2d, 0x78, 0x4c, 0x79, 0xe5, 0x46,
- 0xea, 0x59, 0xe4, 0x11, 0xdd, 0xb9, 0xf1, 0xb1, 0xab, 0x41, 0x91, 0xdc, 0x5f, 0xa7, 0xbd, 0x6c,
- 0x61, 0x60, 0x5f, 0xb3, 0xc0, 0xf7, 0x35, 0x1b, 0x60, 0xce, 0x76, 0x50, 0x71, 0xeb, 0xa6, 0x6b,
- 0xee, 0x7a, 0x49, 0x8b, 0xc4, 0x84, 0x6e, 0x68, 0x11, 0xd4, 0x99, 0xcf, 0x56, 0x8f, 0x19, 0x1c,
- 0x19, 0xf5, 0x7f, 0x07, 0xc7, 0x2f, 0xd2, 0x00, 0x0f, 0x1e, 0xa5, 0x2c, 0xc5, 0xbb, 0x50, 0xf6,
- 0x51, 0x5e, 0xe2, 0xbf, 0x5c, 0x3d, 0x66, 0xf4, 0x13, 0x53, 0xff, 0x0b, 0x58, 0x40, 0x8f, 0x1d,
- 0xe7, 0x4a, 0xc0, 0xb8, 0x1c, 0x6f, 0x47, 0xf6, 0x91, 0x5f, 0xe3, 0x3e, 0x5c, 0x3d, 0x66, 0xf4,
- 0x91, 0x52, 0x1b, 0x00, 0xec, 0xf8, 0xbb, 0x5d, 0x4a, 0x38, 0x1f, 0xaf, 0x92, 0x7d, 0x84, 0x57,
- 0xc3, 0x8f, 0x56, 0x8f, 0x19, 0x0c, 0x09, 0xb5, 0x06, 0x66, 0xfc, 0x07, 0x7d, 0x4a, 0xaf, 0x10,
- 0xef, 0xbb, 0xd0, 0x47, 0xaf, 0x15, 0x7c, 0xb3, 0x7a, 0xcc, 0x88, 0x08, 0xa8, 0x55, 0x30, 0xdd,
- 0xbb, 0x48, 0x89, 0x15, 0xe3, 0xfb, 0xbb, 0x3e, 0x62, 0xeb, 0x17, 0x43, 0x5a, 0xe1, 0xe7, 0x88,
- 0xb1, 0xb6, 0x77, 0x99, 0xd2, 0x9a, 0x12, 0x66, 0xac, 0x1c, 0x7c, 0x83, 0x18, 0x0b, 0x09, 0xa8,
- 0x55, 0x30, 0xe3, 0xd9, 0x66, 0xcf, 0xdb, 0x71, 0x7c, 0xef, 0xf4, 0x74, 0x9f, 0x9b, 0x6b, 0x3c,
- 0xb5, 0x26, 0xfd, 0xc6, 0x88, 0xbe, 0x56, 0x9f, 0x02, 0xae, 0xde, 0xeb, 0x75, 0x4c, 0x1f, 0xea,
- 0x0f, 0x5a, 0x9e, 0x6f, 0xd9, 0xdb, 0x41, 0x84, 0x62, 0x32, 0x58, 0x0c, 0x7e, 0xa9, 0x2e, 0xd2,
- 0x03, 0x6f, 0x00, 0xb7, 0x4d, 0xad, 0x7f, 0xaf, 0x95, 0x14, 0xcb, 0x9c, 0x73, 0x7b, 0x3a, 0xc8,
- 0xa3, 0x57, 0x78, 0x70, 0x59, 0x18, 0xbc, 0x8e, 0xdb, 0xaf, 0x3b, 0xb8, 0x01, 0xa3, 0x8f, 0xfa,
- 0xc6, 0xa7, 0xb9, 0x03, 0xe3, 0xd3, 0xf5, 0x60, 0xd6, 0xf2, 0xd6, 0xac, 0x6d, 0x62, 0x1c, 0xd3,
- 0xf1, 0x83, 0x4d, 0x22, 0x8b, 0x09, 0x75, 0x78, 0x85, 0x0c, 0x1c, 0xc7, 0x83, 0xc5, 0x84, 0x20,
- 0x45, 0xbb, 0x09, 0xcc, 0xb1, 0x8d, 0x8c, 0x5c, 0x82, 0x6b, 0x45, 0xa6, 0x35, 0x7d, 0xd2, 0x6e,
- 0x04, 0x0b, 0xbc, 0x4e, 0x33, 0x16, 0x84, 0x1c, 0x74, 0x85, 0xda, 0x0d, 0xe0, 0x78, 0x5f, 0xc3,
- 0x0a, 0x42, 0xc6, 0xe4, 0xa2, 0x90, 0x31, 0xd7, 0x03, 0x10, 0x69, 0xf1, 0x40, 0x32, 0xd7, 0x81,
- 0x99, 0x50, 0x2f, 0x07, 0x66, 0xf8, 0xb3, 0x1c, 0x98, 0x0e, 0x94, 0x6d, 0x50, 0x06, 0x34, 0x32,
- 0xd9, 0xcc, 0xfe, 0x50, 0x30, 0x32, 0xb1, 0x69, 0xc8, 0x4c, 0x88, 0xbc, 0xb2, 0x5b, 0x96, 0xdf,
- 0x0d, 0x4e, 0x36, 0xf6, 0x27, 0xab, 0xeb, 0x00, 0x58, 0x18, 0xa3, 0x56, 0x74, 0xd4, 0xf1, 0x89,
- 0x29, 0xda, 0x03, 0xd1, 0x07, 0x86, 0xc6, 0xd9, 0xef, 0xa2, 0xe7, 0x10, 0x67, 0x40, 0x81, 0x84,
- 0xe9, 0x3f, 0xa6, 0x2e, 0x00, 0xa0, 0xdf, 0xbf, 0xae, 0x1b, 0x55, 0xbd, 0x5e, 0xd6, 0x95, 0x9c,
- 0xf6, 0x0a, 0x09, 0xcc, 0x84, 0x8d, 0x60, 0x60, 0x25, 0x75, 0xaa, 0x5a, 0x43, 0xef, 0x19, 0x3d,
- 0xd8, 0xa8, 0x58, 0x25, 0x7b, 0x1a, 0x78, 0xd4, 0x9e, 0x07, 0x97, 0x2d, 0xd7, 0xf3, 0x0d, 0xe7,
- 0xca, 0xb2, 0xe3, 0x46, 0x03, 0x2b, 0x09, 0x70, 0x1b, 0xf7, 0x1a, 0x19, 0x8c, 0x1d, 0x88, 0xcf,
- 0xbc, 0x41, 0x97, 0x2e, 0xfc, 0x47, 0x09, 0x88, 0xae, 0xef, 0x9a, 0xb6, 0xd7, 0x73, 0x3c, 0x68,
- 0x38, 0x57, 0xbc, 0x92, 0xdd, 0x29, 0x3b, 0xdd, 0xbd, 0x5d, 0xdb, 0xa3, 0x26, 0x5f, 0xdc, 0x6b,
- 0x24, 0x1d, 0x7c, 0x8b, 0xf0, 0x02, 0x00, 0xe5, 0x46, 0xad, 0xa6, 0x97, 0x5b, 0xd5, 0x46, 0x5d,
- 0x39, 0x86, 0xa4, 0xd5, 0x2a, 0x2d, 0xd5, 0x90, 0x74, 0xbe, 0x1f, 0x4c, 0x07, 0x6d, 0x9a, 0x46,
- 0xb9, 0xc9, 0x05, 0x51, 0x6e, 0xd4, 0x12, 0x98, 0x0e, 0x5a, 0x39, 0x1d, 0x11, 0x1e, 0xdb, 0x7f,
- 0xaa, 0x79, 0xd7, 0x74, 0x7d, 0x6c, 0xa0, 0x04, 0x44, 0x96, 0x4c, 0x0f, 0x1a, 0xe1, 0x67, 0x67,
- 0x9f, 0x40, 0x39, 0x50, 0xc1, 0x42, 0xa9, 0x56, 0xdb, 0x6c, 0x18, 0x9b, 0xf5, 0x46, 0x6b, 0xb5,
- 0x5a, 0x5f, 0x21, 0x23, 0x64, 0x75, 0xa5, 0xde, 0x30, 0x74, 0x32, 0x40, 0x36, 0x95, 0x1c, 0xb9,
- 0xc5, 0x7a, 0x69, 0x1a, 0x14, 0x7b, 0x58, 0xba, 0xda, 0x97, 0xe4, 0x94, 0xe1, 0x0c, 0x42, 0x9c,
- 0x62, 0xee, 0xd9, 0xe5, 0x8e, 0x14, 0x48, 0x03, 0x8e, 0xfc, 0x9e, 0x05, 0x73, 0xc4, 0x54, 0xf7,
- 0xf0, 0xee, 0x0c, 0x46, 0x4e, 0x36, 0xb8, 0x34, 0xed, 0x13, 0x52, 0x8a, 0x18, 0x07, 0x03, 0x39,
- 0x4a, 0x67, 0x5c, 0xfc, 0x7e, 0x6e, 0xb4, 0x4b, 0x2d, 0xaa, 0xf5, 0x96, 0x6e, 0xd4, 0x4b, 0x35,
- 0x9a, 0x45, 0x56, 0x4f, 0x83, 0x93, 0xf5, 0x06, 0x0d, 0xe9, 0xd8, 0xdc, 0x6c, 0x35, 0x36, 0xab,
- 0x6b, 0xeb, 0x0d, 0xa3, 0xa5, 0x14, 0xd4, 0x53, 0x40, 0x25, 0xff, 0x37, 0xab, 0xcd, 0xcd, 0x72,
- 0xa9, 0x5e, 0xd6, 0x6b, 0x7a, 0x45, 0x29, 0xaa, 0x8f, 0x03, 0x37, 0x90, 0x4b, 0x92, 0x1a, 0xcb,
- 0x9b, 0x46, 0xe3, 0x7c, 0x13, 0x21, 0x68, 0xe8, 0xb5, 0x12, 0x52, 0x24, 0xe6, 0x36, 0xeb, 0x29,
- 0xf5, 0x2a, 0x70, 0x1c, 0x5f, 0x75, 0x5f, 0x6b, 0x94, 0x2a, 0xb4, 0xbc, 0x69, 0xf5, 0x5a, 0x70,
- 0xba, 0x5a, 0x6f, 0x6e, 0x2c, 0x2f, 0x57, 0xcb, 0x55, 0xbd, 0xde, 0xda, 0x5c, 0xd7, 0x8d, 0xb5,
- 0x6a, 0xb3, 0x89, 0xbe, 0x55, 0x66, 0xf0, 0x5d, 0xc1, 0xa4, 0xcf, 0xd4, 0xde, 0x2f, 0x83, 0xf9,
- 0x73, 0x66, 0xd7, 0x42, 0x03, 0x05, 0xbe, 0x44, 0xbc, 0xef, 0x34, 0x90, 0x8f, 0x2f, 0x1b, 0xa7,
- 0xe7, 0x09, 0xf0, 0x83, 0xf6, 0xc3, 0x72, 0xca, 0xd3, 0x40, 0x14, 0x08, 0x52, 0xe2, 0x22, 0x57,
- 0x5a, 0xcc, 0xdc, 0xf5, 0xb5, 0x52, 0x8a, 0xd3, 0x40, 0xe2, 0xe4, 0xd3, 0x81, 0xff, 0x0b, 0xe3,
- 0x02, 0x5f, 0x01, 0x73, 0x1b, 0xf5, 0xd2, 0x46, 0x6b, 0xb5, 0x61, 0x54, 0xbf, 0x0f, 0xc7, 0xb2,
- 0x9f, 0x07, 0x33, 0xcb, 0x0d, 0x63, 0xa9, 0x5a, 0xa9, 0xe8, 0x75, 0xa5, 0xa0, 0x3e, 0x0a, 0x5c,
- 0xd5, 0xd4, 0x8d, 0x73, 0xd5, 0xb2, 0xbe, 0xb9, 0x51, 0x2f, 0x9d, 0x2b, 0x55, 0x6b, 0xb8, 0x8f,
- 0x28, 0x26, 0x5c, 0x80, 0x3e, 0xa5, 0xfd, 0x60, 0x1e, 0x00, 0x52, 0x75, 0x7c, 0x95, 0x13, 0x73,
- 0x4d, 0xf6, 0x1f, 0xa6, 0x9d, 0x34, 0x44, 0x64, 0x62, 0xda, 0x6f, 0x15, 0x4c, 0xbb, 0xf4, 0x05,
- 0x5d, 0x1d, 0x1b, 0x46, 0x87, 0xfc, 0x0d, 0xa8, 0x19, 0xe1, 0xe7, 0xda, 0x07, 0xd2, 0xcc, 0x11,
- 0x62, 0x19, 0x4b, 0x87, 0xe4, 0xf2, 0x78, 0x80, 0xd4, 0x5e, 0x9c, 0x03, 0x0b, 0x7c, 0xc5, 0x50,
- 0x25, 0xb0, 0x31, 0x25, 0x56, 0x09, 0xfe, 0x63, 0xc6, 0xc8, 0x3a, 0xfb, 0x64, 0x3a, 0x9c, 0x82,
- 0xa0, 0x65, 0x92, 0x83, 0xfd, 0x81, 0xc5, 0xa2, 0xe4, 0x10, 0xf3, 0xc8, 0xe8, 0x50, 0x24, 0x75,
- 0x0a, 0xc8, 0xad, 0x07, 0x7d, 0x45, 0xd6, 0xbe, 0x2e, 0x83, 0x79, 0xee, 0x1e, 0x6e, 0xed, 0x9d,
- 0x39, 0x91, 0x3b, 0x72, 0x99, 0x1b, 0xbe, 0x73, 0x87, 0xbd, 0xe1, 0xfb, 0xec, 0x3d, 0x60, 0x8a,
- 0xa6, 0x61, 0xf9, 0x36, 0xea, 0xc8, 0x14, 0x38, 0x0e, 0x66, 0x57, 0xf4, 0xd6, 0x66, 0xb3, 0x55,
- 0x32, 0x5a, 0x7a, 0x45, 0xc9, 0xa1, 0x81, 0x4f, 0x5f, 0x5b, 0x6f, 0x5d, 0x50, 0x24, 0x34, 0x26,
- 0xae, 0x6c, 0x54, 0x2b, 0xfa, 0x66, 0xa3, 0x5e, 0xbb, 0xa0, 0xc8, 0xe9, 0x1d, 0x2e, 0xfb, 0x19,
- 0x9b, 0xb0, 0xc3, 0x65, 0x52, 0xf1, 0xd9, 0xcf, 0x5d, 0x3f, 0x27, 0x03, 0x85, 0x70, 0xa0, 0x3f,
- 0xd8, 0x83, 0xae, 0x05, 0xed, 0x36, 0xd4, 0x2e, 0x89, 0x04, 0x80, 0x3d, 0x10, 0xfa, 0x10, 0xf7,
- 0xef, 0x8c, 0xd5, 0x48, 0x1e, 0xfa, 0x0c, 0xee, 0xfc, 0x01, 0x83, 0xfb, 0xb7, 0xd3, 0x7a, 0x5c,
- 0xf6, 0xb3, 0x3b, 0x16, 0xc8, 0x3e, 0x9d, 0xc6, 0xe3, 0x72, 0x08, 0x07, 0x13, 0x89, 0xeb, 0x1c,
- 0x33, 0x1e, 0x2b, 0xb2, 0xf6, 0x22, 0x19, 0x1c, 0xaf, 0x98, 0x3e, 0x5c, 0xda, 0x6f, 0x05, 0xf7,
- 0x66, 0xc6, 0xdc, 0x75, 0x9d, 0x3b, 0x70, 0xd7, 0x75, 0x74, 0xf5, 0xa6, 0xd4, 0x77, 0xf5, 0xa6,
- 0xf6, 0x9e, 0xb4, 0x67, 0x34, 0xfb, 0x78, 0x18, 0x5b, 0xf0, 0xe5, 0x74, 0x67, 0x2f, 0x93, 0xb9,
- 0xc8, 0xbe, 0x81, 0xbd, 0x7d, 0x06, 0x28, 0x84, 0x15, 0xc6, 0xa9, 0xf0, 0xa7, 0xe9, 0xf5, 0xf0,
- 0x9b, 0x29, 0x62, 0x38, 0x06, 0x51, 0x31, 0x24, 0x3e, 0x2a, 0x06, 0xb7, 0x46, 0x2d, 0xf7, 0x3b,
- 0x82, 0xa4, 0xed, 0x0c, 0x19, 0x0f, 0xc2, 0xf8, 0xb0, 0xb9, 0xd9, 0x75, 0x86, 0x89, 0xc5, 0x4f,
- 0xe6, 0x0a, 0x63, 0x7a, 0x6b, 0xa8, 0x2e, 0x8a, 0x4c, 0xf2, 0x4d, 0xed, 0x69, 0xdd, 0xc9, 0x39,
- 0x0f, 0xce, 0x84, 0xeb, 0xcb, 0xb3, 0x73, 0x27, 0x1f, 0xc6, 0x41, 0xf6, 0x28, 0x7c, 0x5b, 0x02,
- 0xf9, 0xa6, 0xe3, 0xfa, 0xe3, 0xc2, 0x20, 0xed, 0x16, 0x38, 0x23, 0x81, 0x66, 0xfc, 0x1c, 0x34,
- 0xbb, 0x2d, 0xf0, 0xe4, 0xf2, 0x27, 0x10, 0x06, 0xf3, 0x38, 0x58, 0x20, 0x9c, 0x84, 0x77, 0xc8,
- 0xfc, 0xab, 0x44, 0xfa, 0xab, 0xfb, 0x44, 0x11, 0xc1, 0x1b, 0x21, 0xe1, 0x16, 0x74, 0x00, 0x0a,
- 0x97, 0xa6, 0xbd, 0x91, 0xc5, 0xa5, 0xc2, 0xe3, 0x32, 0x68, 0x06, 0x1e, 0x5e, 0xc3, 0x32, 0xae,
- 0x9e, 0x29, 0x4d, 0x44, 0xcd, 0x84, 0xc2, 0xb3, 0x47, 0xe4, 0x21, 0x19, 0x14, 0xa9, 0x0b, 0xe0,
- 0x58, 0x11, 0x48, 0xdb, 0x32, 0x42, 0x21, 0x88, 0xb9, 0x0a, 0xca, 0xe3, 0x6e, 0x19, 0xc9, 0xe5,
- 0x67, 0x8f, 0xc3, 0xbf, 0x53, 0xdf, 0xd6, 0xd2, 0x65, 0xd3, 0xea, 0x9a, 0x17, 0xbb, 0x29, 0x22,
- 0x59, 0x7f, 0x22, 0xe5, 0x69, 0xbe, 0xb0, 0xaa, 0x5c, 0x79, 0x31, 0x12, 0xff, 0x1e, 0x30, 0xe3,
- 0x72, 0x7b, 0x7f, 0xc8, 0x8a, 0xea, 0xf3, 0x2b, 0xa6, 0xef, 0x8d, 0x28, 0x67, 0xaa, 0xa3, 0x7b,
- 0x42, 0xfc, 0x4c, 0xe4, 0xa8, 0xd1, 0x6c, 0xa9, 0xd3, 0x59, 0x86, 0xa6, 0xbf, 0xe7, 0xc2, 0x4e,
- 0xaa, 0x21, 0xc2, 0xed, 0xdb, 0x1e, 0x65, 0x24, 0xc1, 0xc5, 0x92, 0xac, 0xf1, 0xe8, 0x3c, 0x75,
- 0x48, 0x6f, 0x10, 0xf0, 0x32, 0x96, 0x2e, 0xe9, 0x6d, 0x21, 0x24, 0x0d, 0x0e, 0x92, 0xa7, 0x8f,
- 0xc6, 0x44, 0xf6, 0x80, 0xfc, 0xac, 0x0c, 0x16, 0x88, 0x9d, 0x30, 0x6e, 0x4c, 0x3e, 0x94, 0xd2,
- 0x65, 0x88, 0xb9, 0xa5, 0x8b, 0x65, 0x67, 0x2c, 0xb0, 0xa4, 0x71, 0x30, 0x12, 0xe3, 0x23, 0x7b,
- 0x64, 0x9e, 0x7f, 0x02, 0x00, 0xc6, 0x0d, 0xf4, 0x13, 0xc5, 0x28, 0xae, 0xa3, 0xf6, 0x4e, 0x3a,
- 0xff, 0x68, 0x72, 0x41, 0xc6, 0x19, 0x17, 0xcf, 0x70, 0x83, 0x8a, 0x4f, 0x14, 0x1a, 0x55, 0x7e,
- 0x3f, 0xa5, 0xcd, 0x4b, 0x9d, 0x30, 0x87, 0x0e, 0xee, 0x23, 0xf6, 0x72, 0x9f, 0x4c, 0x61, 0xfc,
- 0x0e, 0x63, 0x25, 0x1d, 0x6a, 0xb5, 0x11, 0x66, 0xf6, 0xa7, 0xc1, 0x49, 0x43, 0x2f, 0x55, 0x1a,
- 0xf5, 0xda, 0x05, 0xf6, 0xca, 0x26, 0x45, 0x66, 0x27, 0x27, 0x99, 0xc0, 0xf6, 0xba, 0x94, 0x7d,
- 0x20, 0x2f, 0xab, 0xa4, 0xd9, 0x0a, 0xb3, 0xb8, 0x32, 0xbc, 0x57, 0x13, 0x20, 0x7b, 0x94, 0x28,
- 0x7c, 0xbd, 0x08, 0x66, 0x0d, 0xd8, 0x76, 0x76, 0x77, 0xa1, 0xdd, 0x81, 0x1d, 0xed, 0x75, 0x32,
- 0x98, 0x0b, 0xf7, 0xff, 0x9a, 0xd0, 0xd7, 0xfe, 0x4b, 0x84, 0xcd, 0x59, 0x30, 0x87, 0x2a, 0xd7,
- 0xe0, 0x03, 0xc7, 0x73, 0x69, 0xea, 0xad, 0xe0, 0x44, 0x80, 0x42, 0xa3, 0x6f, 0x0a, 0x73, 0xf0,
- 0x85, 0xf6, 0x5e, 0x16, 0xa3, 0x0d, 0x1e, 0xa3, 0x7b, 0xe2, 0x85, 0x19, 0xb2, 0xbb, 0xc8, 0xb2,
- 0x1a, 0x03, 0xd6, 0xef, 0x86, 0x60, 0xdd, 0xcf, 0x81, 0x55, 0x39, 0x24, 0xfd, 0xa3, 0x44, 0xed,
- 0x57, 0x64, 0x70, 0x32, 0xe8, 0x88, 0x27, 0x87, 0xd6, 0x27, 0x59, 0xb4, 0xbe, 0x9f, 0x47, 0x6b,
- 0x45, 0x44, 0x9a, 0x83, 0x58, 0x8e, 0x41, 0xed, 0x8b, 0x21, 0x6a, 0x3f, 0xc0, 0xa1, 0x56, 0x1b,
- 0x53, 0x39, 0x47, 0x89, 0xde, 0x87, 0x64, 0x70, 0x1a, 0x99, 0x9d, 0x65, 0xc7, 0xde, 0xea, 0x5a,
- 0x6d, 0xdf, 0xb2, 0xb7, 0x23, 0x97, 0xb6, 0x15, 0x91, 0x95, 0xcd, 0x7e, 0x6c, 0xa5, 0x83, 0xd8,
- 0xf2, 0xf1, 0x36, 0x44, 0xdb, 0x56, 0x1c, 0x5b, 0x31, 0x43, 0x18, 0xe3, 0xac, 0x1d, 0x69, 0x0e,
- 0x9b, 0x94, 0xbe, 0xf5, 0x09, 0x72, 0x70, 0x94, 0xf8, 0x3d, 0x04, 0x18, 0xd3, 0xe3, 0x85, 0x32,
- 0x50, 0xb0, 0xff, 0x24, 0xee, 0xd9, 0xe9, 0x7d, 0xa6, 0x0d, 0xde, 0xb3, 0xbe, 0x17, 0x08, 0x28,
- 0xf0, 0xac, 0x0f, 0x12, 0xd4, 0x9b, 0xc0, 0x42, 0x7b, 0x07, 0xb6, 0x2f, 0x55, 0xed, 0xc0, 0x37,
- 0x89, 0x38, 0xb2, 0xf4, 0xa5, 0xf2, 0x83, 0xd9, 0x7d, 0x3c, 0x98, 0xfc, 0xc2, 0x23, 0x37, 0xb1,
- 0x61, 0x99, 0x8a, 0x69, 0x68, 0xbf, 0x11, 0x02, 0x54, 0xe7, 0x00, 0xba, 0x73, 0x24, 0xaa, 0xe9,
- 0x60, 0xa9, 0x8f, 0x00, 0x8b, 0x06, 0x4e, 0x35, 0xd6, 0x5b, 0xd5, 0x46, 0x7d, 0x73, 0xa3, 0xa9,
- 0x57, 0x36, 0x97, 0x02, 0x70, 0x9a, 0x8a, 0xac, 0x7d, 0x4d, 0x02, 0x53, 0x84, 0x2d, 0x4f, 0x7b,
- 0x7c, 0x04, 0xc1, 0xd0, 0x23, 0x05, 0xda, 0xdb, 0x85, 0x03, 0x04, 0x85, 0x82, 0xa0, 0xe5, 0xc4,
- 0x34, 0x8c, 0xa7, 0x81, 0x29, 0x02, 0x72, 0xb0, 0x0b, 0x70, 0x26, 0xc6, 0xb2, 0xa3, 0x64, 0x8c,
- 0x20, 0xbb, 0x60, 0xb0, 0xa0, 0x21, 0x6c, 0x64, 0x6f, 0x8d, 0x3f, 0x37, 0x4f, 0x96, 0x0e, 0xce,
- 0x5b, 0xfe, 0x0e, 0x3e, 0x71, 0xa0, 0x3d, 0x4b, 0xa4, 0xe3, 0xba, 0x15, 0x14, 0x2e, 0xa3, 0xdc,
- 0x43, 0x4e, 0x6f, 0x90, 0x4c, 0xda, 0x2f, 0x08, 0xc7, 0xa6, 0xe6, 0xf4, 0x33, 0xe4, 0x29, 0x06,
- 0x9c, 0x35, 0x90, 0xef, 0x5a, 0x9e, 0x4f, 0x6d, 0xee, 0x3b, 0x52, 0x11, 0x0a, 0xfe, 0x54, 0x7d,
- 0xb8, 0x6b, 0x60, 0x32, 0xda, 0xbd, 0xc8, 0x62, 0x8a, 0x52, 0x05, 0x4e, 0xb0, 0x9c, 0x06, 0x53,
- 0xf4, 0x64, 0x35, 0xdd, 0x96, 0x0a, 0x1e, 0x05, 0xb7, 0x82, 0x84, 0x6a, 0x9b, 0xbd, 0x0e, 0xfc,
- 0xbf, 0xc7, 0xc1, 0xd4, 0xaa, 0xe5, 0xf9, 0x8e, 0xbb, 0xaf, 0xbd, 0x3e, 0x07, 0xa6, 0xce, 0x41,
- 0xd7, 0xb3, 0x1c, 0xfb, 0x80, 0xbb, 0xd6, 0xf5, 0x60, 0xb6, 0xe7, 0xc2, 0xcb, 0x96, 0xb3, 0xe7,
- 0x31, 0xa3, 0x04, 0x93, 0xa4, 0x6a, 0x60, 0xda, 0xdc, 0xf3, 0x77, 0x1c, 0x37, 0x0a, 0xc8, 0x14,
- 0x3c, 0xab, 0x67, 0x00, 0x20, 0xff, 0xeb, 0xe6, 0x2e, 0x0c, 0xee, 0x5c, 0x8f, 0x52, 0x54, 0x15,
- 0xe4, 0x7d, 0x6b, 0x17, 0xd2, 0x08, 0xed, 0xf8, 0x3f, 0x12, 0x30, 0x8e, 0x76, 0x4a, 0xa3, 0xca,
- 0xca, 0x46, 0xf0, 0xa8, 0xfd, 0x91, 0x0c, 0x66, 0x57, 0xa0, 0x4f, 0x59, 0xf5, 0xb4, 0x97, 0xe4,
- 0x84, 0x2e, 0x45, 0x42, 0xf3, 0x92, 0xae, 0xe9, 0x05, 0xdf, 0x85, 0x43, 0x2e, 0x9f, 0x18, 0x85,
- 0x8b, 0x97, 0xd9, 0xbb, 0x22, 0x70, 0xec, 0x50, 0xbf, 0x4a, 0x9c, 0xf9, 0x69, 0x66, 0xba, 0x71,
- 0x7c, 0xf0, 0x05, 0x6f, 0x13, 0x27, 0xc6, 0xdd, 0xa0, 0xb2, 0x5f, 0x64, 0xea, 0x13, 0xdb, 0x1d,
- 0x4d, 0x5f, 0xa6, 0x39, 0x0e, 0x5c, 0x03, 0xc2, 0x52, 0xa2, 0x64, 0x8c, 0x30, 0xb7, 0x60, 0xc4,
- 0x8e, 0xe1, 0x9c, 0x4c, 0xe0, 0xe2, 0x57, 0x19, 0xcc, 0x36, 0x77, 0x9c, 0x2b, 0x81, 0x1c, 0xbf,
- 0x5f, 0x0c, 0xd8, 0x6b, 0xc1, 0xcc, 0xe5, 0x3e, 0x50, 0xa3, 0x04, 0xf6, 0xae, 0x39, 0x99, 0xbf,
- 0x6b, 0xee, 0x05, 0x72, 0x5a, 0x98, 0x18, 0xe6, 0x62, 0x60, 0xe2, 0xaf, 0x87, 0x93, 0x52, 0x5c,
- 0x0f, 0xa7, 0x3e, 0x15, 0x4c, 0x51, 0xae, 0xe9, 0x32, 0x75, 0x32, 0xc0, 0x41, 0x66, 0xb6, 0x82,
- 0x79, 0xbe, 0x82, 0xe9, 0x90, 0x8f, 0xaf, 0x5c, 0xf6, 0xc8, 0xff, 0x96, 0x84, 0xe3, 0x35, 0x05,
- 0xc0, 0x97, 0xc7, 0x00, 0xbc, 0xf6, 0xad, 0x9c, 0xe8, 0x66, 0x4e, 0x28, 0x81, 0x90, 0x83, 0x43,
- 0x5d, 0x78, 0x36, 0x94, 0x5c, 0xf6, 0xf2, 0x7c, 0x45, 0x1e, 0xcc, 0x55, 0xac, 0xad, 0xad, 0xb0,
- 0x93, 0x7c, 0xa9, 0x60, 0x27, 0x19, 0xef, 0x52, 0x85, 0xec, 0xdc, 0x3d, 0xd7, 0x85, 0x76, 0x50,
- 0x29, 0xda, 0x9c, 0xfa, 0x52, 0xd5, 0x9b, 0xc1, 0xf1, 0x60, 0x5c, 0x60, 0x3b, 0xca, 0x19, 0xa3,
- 0x3f, 0x59, 0xfb, 0x86, 0xb0, 0x27, 0x40, 0x20, 0x51, 0xb6, 0x4a, 0x31, 0x0d, 0xf0, 0x2e, 0x30,
- 0xbf, 0x43, 0x72, 0xe3, 0xe5, 0xd2, 0xa0, 0xb3, 0x3c, 0xd5, 0x17, 0x0f, 0x7f, 0x0d, 0x7a, 0x9e,
- 0xb9, 0x0d, 0x0d, 0x3e, 0x73, 0x5f, 0xf3, 0x95, 0xd3, 0xdc, 0xee, 0x28, 0xe6, 0x54, 0x20, 0x50,
- 0x93, 0xec, 0xb5, 0xe3, 0x8b, 0x67, 0x41, 0x7e, 0xd9, 0xea, 0x42, 0xed, 0x47, 0x25, 0x30, 0x83,
- 0x66, 0xdd, 0x76, 0x1b, 0x3d, 0x31, 0x0e, 0x96, 0x5f, 0xcf, 0x89, 0xde, 0x6a, 0x8c, 0xe8, 0x2c,
- 0x86, 0x34, 0x62, 0xda, 0x8d, 0xd8, 0xed, 0xc5, 0x89, 0xa4, 0x26, 0x70, 0x07, 0x15, 0x9a, 0x7a,
- 0x6c, 0x6d, 0x75, 0x1d, 0x93, 0xdb, 0x30, 0xe8, 0x37, 0x85, 0xa2, 0x43, 0x81, 0x75, 0xc7, 0x5f,
- 0xb7, 0x6c, 0x3b, 0x8c, 0xb3, 0x71, 0x20, 0x9d, 0xf7, 0x75, 0x49, 0x0c, 0x55, 0x86, 0xeb, 0x4e,
- 0x4b, 0x8f, 0xd1, 0xec, 0x9b, 0xc0, 0xc2, 0xc5, 0x7d, 0x1f, 0x7a, 0x34, 0x17, 0x2d, 0x36, 0x6f,
- 0xf4, 0xa5, 0x32, 0x17, 0x0d, 0x24, 0x85, 0x34, 0x4b, 0x28, 0x30, 0x9d, 0xa8, 0x57, 0x47, 0x98,
- 0x01, 0x9e, 0x04, 0x4a, 0xbd, 0x51, 0xd1, 0xb1, 0xbf, 0x6f, 0xe0, 0x41, 0xb9, 0xad, 0xfd, 0x94,
- 0x0c, 0xe6, 0xb0, 0x03, 0x5e, 0x80, 0xc2, 0x0d, 0x02, 0xf3, 0x11, 0xed, 0xcb, 0xc2, 0xbe, 0xc0,
- 0xb8, 0xca, 0x6c, 0x01, 0xf1, 0x82, 0xde, 0xb2, 0xba, 0xfd, 0x82, 0x2e, 0x18, 0x7d, 0xa9, 0x03,
- 0x00, 0x91, 0x07, 0x02, 0xf2, 0x2b, 0x42, 0x0e, 0xc1, 0xc3, 0xb8, 0x3b, 0x2a, 0x54, 0x7e, 0x55,
- 0x06, 0xb3, 0x68, 0x92, 0x12, 0x80, 0xd2, 0xe0, 0x40, 0x71, 0xec, 0xee, 0x7e, 0xb4, 0x2c, 0x12,
- 0x3c, 0xa6, 0x6a, 0x24, 0x7f, 0x2c, 0x3c, 0x73, 0xc7, 0x22, 0x62, 0x78, 0x99, 0x10, 0x7e, 0x1f,
- 0x14, 0x9a, 0xcf, 0x0f, 0x61, 0xee, 0xa8, 0xe0, 0x7b, 0xb8, 0x08, 0x8a, 0x1b, 0x3d, 0x8c, 0xdc,
- 0x97, 0x64, 0x91, 0x4b, 0x3b, 0x0e, 0x1c, 0x06, 0x43, 0x66, 0x56, 0xd7, 0x69, 0x9b, 0xdd, 0xf5,
- 0xe8, 0x54, 0x6d, 0x94, 0xa0, 0xde, 0x49, 0xfd, 0xc3, 0xc9, 0x89, 0xf3, 0x9b, 0x12, 0xef, 0xb3,
- 0xc0, 0x32, 0x62, 0x0e, 0xde, 0xdd, 0x0a, 0x4e, 0x74, 0x2c, 0xcf, 0xbc, 0xd8, 0x85, 0xba, 0xdd,
- 0x76, 0xf7, 0x89, 0x38, 0xe8, 0xb4, 0xea, 0xc0, 0x0b, 0xf5, 0x6e, 0x50, 0xf0, 0xfc, 0xfd, 0x2e,
- 0x99, 0x27, 0xb2, 0xe7, 0xf4, 0x62, 0x8b, 0x6a, 0xa2, 0xec, 0x06, 0xf9, 0x8a, 0x75, 0xeb, 0x9c,
- 0x12, 0x73, 0xeb, 0x54, 0x9f, 0x0c, 0x8a, 0x8e, 0x6b, 0x6d, 0x5b, 0xe4, 0x8a, 0xba, 0x85, 0x03,
- 0x61, 0x5b, 0x89, 0x29, 0xd0, 0xc0, 0x59, 0x0c, 0x9a, 0x55, 0x7d, 0x2a, 0x98, 0xb1, 0x76, 0xcd,
- 0x6d, 0x78, 0x9f, 0x65, 0x93, 0x43, 0xed, 0x0b, 0xb7, 0x9f, 0x3e, 0x70, 0x04, 0x91, 0xbe, 0x37,
- 0xa2, 0xac, 0xea, 0x5d, 0xe0, 0x9a, 0xb6, 0x0b, 0x4d, 0x1f, 0x22, 0x01, 0x9d, 0xb7, 0x3a, 0xdb,
- 0xd0, 0xaf, 0x6e, 0xad, 0x59, 0x9e, 0x67, 0xd9, 0xdb, 0xf4, 0x16, 0xca, 0xf8, 0x0c, 0xda, 0x07,
- 0x25, 0xd1, 0xc8, 0x74, 0x58, 0x32, 0x44, 0x25, 0x46, 0xb8, 0x2d, 0x9b, 0x91, 0xa2, 0x2c, 0xe8,
- 0x1c, 0xfb, 0x6a, 0xa1, 0x98, 0x71, 0xf1, 0x6c, 0x65, 0x3f, 0xf4, 0xff, 0x81, 0x04, 0xa6, 0x2b,
- 0xce, 0x15, 0x1b, 0x37, 0x93, 0x3b, 0xc4, 0x2c, 0xe5, 0x01, 0xc7, 0xcc, 0xf9, 0x7b, 0x97, 0x13,
- 0xcf, 0x94, 0xe1, 0xda, 0x06, 0x45, 0xc6, 0xc0, 0x90, 0xd8, 0xee, 0x04, 0x6f, 0xc3, 0x4d, 0x2a,
- 0x27, 0x7b, 0xb9, 0xfe, 0x8e, 0x0c, 0xf2, 0x15, 0xd7, 0xe9, 0x69, 0x6f, 0xcb, 0xa5, 0x70, 0x12,
- 0xeb, 0xb8, 0x4e, 0xaf, 0x85, 0xaf, 0xb3, 0x8c, 0xf6, 0x45, 0xd8, 0x34, 0xf5, 0x0e, 0x30, 0xdd,
- 0x73, 0x3c, 0xcb, 0x0f, 0x26, 0x21, 0x0b, 0xb7, 0x3f, 0x66, 0x60, 0x5f, 0xb0, 0x4e, 0x33, 0x19,
- 0x61, 0x76, 0xd4, 0xe7, 0x63, 0x11, 0x22, 0xb9, 0x20, 0x31, 0x06, 0x57, 0x7a, 0xf6, 0xa5, 0x6a,
- 0x2f, 0x63, 0x91, 0x7c, 0x3a, 0x8f, 0xe4, 0x63, 0x07, 0x48, 0xd8, 0x75, 0x7a, 0x63, 0x71, 0xeb,
- 0x78, 0x65, 0x88, 0xea, 0x33, 0x38, 0x54, 0x6f, 0x11, 0x2a, 0x33, 0x7b, 0x44, 0x3f, 0x98, 0x07,
- 0x00, 0x1b, 0x29, 0x1b, 0x68, 0xfa, 0x24, 0x66, 0xa1, 0xfd, 0x48, 0x9e, 0x91, 0x65, 0x89, 0x97,
- 0xe5, 0xe3, 0x63, 0x6c, 0x20, 0x4c, 0x3e, 0x46, 0xa2, 0x25, 0x50, 0xd8, 0x43, 0xaf, 0xa9, 0x44,
- 0x05, 0x49, 0xe0, 0x47, 0x83, 0x7c, 0xa9, 0xfd, 0x56, 0x0e, 0x14, 0x70, 0x82, 0x7a, 0x06, 0x00,
- 0x6c, 0x16, 0x90, 0x23, 0x99, 0x39, 0x6c, 0x00, 0x30, 0x29, 0x58, 0x5b, 0xad, 0x0e, 0x7d, 0x4d,
- 0x0c, 0xee, 0x28, 0x01, 0x7d, 0x8d, 0x8d, 0x05, 0x4c, 0x8b, 0x9a, 0x0f, 0x4c, 0x0a, 0xfa, 0x1a,
- 0x3f, 0xd5, 0xe0, 0x16, 0xb9, 0x69, 0x20, 0x6f, 0x44, 0x09, 0xe1, 0xd7, 0xb5, 0xf0, 0x7e, 0xca,
- 0xe0, 0x6b, 0x9c, 0x82, 0xa6, 0xd2, 0x58, 0x2d, 0x97, 0xa2, 0x22, 0x8a, 0x38, 0x53, 0x7f, 0xb2,
- 0xf6, 0xba, 0x50, 0x6d, 0x2a, 0x9c, 0xda, 0x3c, 0x31, 0x85, 0x78, 0xb3, 0x57, 0x9e, 0x3f, 0x2b,
- 0x80, 0x99, 0xba, 0xd3, 0xa1, 0xba, 0xc3, 0x4c, 0x37, 0x3f, 0x5d, 0x48, 0x35, 0xdd, 0x0c, 0x69,
- 0xc4, 0x28, 0xc8, 0x33, 0x79, 0x05, 0x11, 0xa3, 0xc0, 0xea, 0x87, 0xba, 0x04, 0x8a, 0x58, 0x7b,
- 0x0f, 0x5e, 0x7c, 0x98, 0x44, 0x02, 0x8b, 0xd6, 0xa0, 0x5f, 0xfe, 0x87, 0xd3, 0xb1, 0xff, 0x06,
- 0x0a, 0xb8, 0x82, 0x09, 0x7b, 0x43, 0x7c, 0x45, 0xa5, 0xe4, 0x8a, 0xca, 0xc9, 0x15, 0xcd, 0xf7,
- 0x57, 0x34, 0xcd, 0x2a, 0x42, 0x9c, 0x86, 0x64, 0xaf, 0xe3, 0x7f, 0x3b, 0x05, 0x40, 0xdd, 0xbc,
- 0x6c, 0x6d, 0x93, 0xbd, 0xe5, 0x3f, 0x0a, 0x66, 0x4f, 0x74, 0x17, 0xf8, 0xc7, 0x99, 0x81, 0xf0,
- 0x0e, 0x30, 0x45, 0xc7, 0x3d, 0x5a, 0x91, 0xeb, 0xb8, 0x8a, 0x44, 0x54, 0x88, 0x51, 0xfb, 0xa0,
- 0x6f, 0x04, 0xf9, 0xb9, 0x3b, 0xda, 0xa5, 0xbe, 0x3b, 0xda, 0x07, 0xef, 0x60, 0xc4, 0xdc, 0xdc,
- 0xae, 0xbd, 0x4f, 0xf8, 0x0c, 0x15, 0xc3, 0x0f, 0x53, 0xa3, 0x98, 0x26, 0xf8, 0x64, 0x30, 0xe5,
- 0x84, 0xdb, 0xe1, 0x72, 0xec, 0x2a, 0x5a, 0xd5, 0xde, 0x72, 0x8c, 0x20, 0xa7, 0xe0, 0xd6, 0x99,
- 0x10, 0x1f, 0x13, 0x39, 0xa6, 0x78, 0x6a, 0x25, 0x88, 0xda, 0x88, 0xea, 0x71, 0xde, 0xf2, 0x77,
- 0x6a, 0x96, 0x7d, 0xc9, 0xd3, 0x7e, 0x40, 0xcc, 0x82, 0x64, 0xf0, 0x97, 0xd2, 0xe1, 0xcf, 0x47,
- 0x4d, 0x6a, 0xf2, 0xa8, 0xdd, 0x1d, 0x47, 0x65, 0x30, 0xb7, 0x31, 0x00, 0xde, 0x09, 0x8a, 0x84,
- 0x51, 0xda, 0x89, 0x9e, 0x8d, 0xc5, 0x2f, 0xa4, 0x64, 0xd0, 0x2f, 0xb4, 0xf7, 0x86, 0x38, 0x9e,
- 0xe3, 0x70, 0x5c, 0x3a, 0x14, 0x67, 0x99, 0x43, 0x7a, 0xf6, 0x49, 0x60, 0x8a, 0x4a, 0x5a, 0x5d,
- 0x60, 0x5b, 0xb1, 0x72, 0x4c, 0x05, 0xa0, 0xb8, 0xe6, 0x5c, 0x86, 0x2d, 0x47, 0xc9, 0xa1, 0xff,
- 0x88, 0xbf, 0x96, 0xa3, 0x48, 0xda, 0xab, 0xa6, 0xc1, 0x74, 0x18, 0x2e, 0xef, 0x0f, 0x24, 0xa0,
- 0x94, 0xf1, 0x0c, 0x6d, 0xd9, 0x75, 0x76, 0x49, 0x8d, 0xc4, 0xfd, 0xf1, 0x7f, 0x56, 0xd8, 0x41,
- 0x24, 0x0c, 0x63, 0xd7, 0x5f, 0x58, 0x0c, 0x96, 0x64, 0x09, 0x53, 0x0a, 0x96, 0x30, 0xb5, 0xb7,
- 0x0a, 0x39, 0x8c, 0x88, 0x96, 0x92, 0x7d, 0x53, 0xfb, 0x6d, 0x09, 0x14, 0xca, 0x5d, 0xc7, 0x86,
- 0xec, 0xa1, 0xd1, 0xa1, 0xa7, 0x13, 0x07, 0xef, 0x63, 0x68, 0xcf, 0x95, 0x44, 0x6d, 0x8d, 0x48,
- 0x00, 0xa8, 0x6c, 0x41, 0xd9, 0x8a, 0x0d, 0x52, 0x89, 0xa4, 0xb3, 0x17, 0xe8, 0xd7, 0x24, 0x30,
- 0x43, 0x22, 0x93, 0x95, 0xba, 0x5d, 0xed, 0x31, 0x91, 0x50, 0x07, 0x84, 0x1c, 0xd4, 0x7e, 0x45,
- 0xf8, 0x50, 0x54, 0x58, 0xab, 0x90, 0x76, 0x8a, 0x10, 0x6d, 0xe9, 0xce, 0xe8, 0x88, 0xed, 0xc4,
- 0x0d, 0x65, 0x28, 0x7b, 0x51, 0xff, 0xa1, 0x84, 0x0c, 0x00, 0xfb, 0xd2, 0xba, 0x0b, 0x2f, 0x5b,
- 0xf0, 0x8a, 0xf6, 0xe8, 0x48, 0xd8, 0x07, 0xc3, 0x2e, 0xbd, 0x49, 0x78, 0x11, 0x87, 0x21, 0x19,
- 0xbb, 0x11, 0x36, 0xdb, 0x8d, 0x32, 0xd1, 0x5e, 0xbc, 0x3f, 0x16, 0x16, 0x43, 0xc6, 0x60, 0xb3,
- 0x0b, 0xae, 0xd9, 0xc4, 0x73, 0x91, 0xbd, 0x60, 0x3f, 0x3a, 0x05, 0xa6, 0x37, 0x6c, 0xaf, 0xd7,
- 0x35, 0xbd, 0x1d, 0xed, 0x5f, 0x65, 0x50, 0x24, 0xd7, 0x6d, 0x6a, 0xdf, 0xc3, 0x45, 0x77, 0x79,
- 0xf6, 0x1e, 0x74, 0x03, 0x07, 0x1e, 0xf2, 0x10, 0xd9, 0x47, 0x12, 0x63, 0x1f, 0x69, 0x1f, 0x94,
- 0x45, 0x27, 0xa9, 0x41, 0xa1, 0xf4, 0x7e, 0xcf, 0xf8, 0x80, 0x22, 0x3d, 0xab, 0xed, 0xef, 0xb9,
- 0xd0, 0x1b, 0x18, 0x50, 0x24, 0x96, 0xca, 0x3a, 0xf9, 0xca, 0x08, 0x3f, 0xd7, 0x4c, 0x30, 0x45,
- 0x13, 0x0f, 0x6c, 0x46, 0x1d, 0x8c, 0x78, 0x70, 0x0a, 0x14, 0x4d, 0xd7, 0xb7, 0x3c, 0x9f, 0x6e,
- 0xcf, 0xd2, 0x27, 0xd4, 0x5d, 0x92, 0x7f, 0x1b, 0x6e, 0x37, 0x88, 0x03, 0x15, 0x26, 0x68, 0xbf,
- 0x2a, 0x34, 0x7f, 0x4c, 0xae, 0x79, 0x3a, 0xc8, 0xef, 0x1b, 0x61, 0x85, 0xfb, 0x51, 0xe0, 0x2a,
- 0xa3, 0xd4, 0xd2, 0x37, 0x49, 0xd8, 0xa0, 0x30, 0x42, 0x50, 0x47, 0x7b, 0x8f, 0xcc, 0xac, 0xdf,
- 0xed, 0x73, 0x63, 0x04, 0x95, 0x62, 0x34, 0x46, 0x84, 0x09, 0x09, 0x7b, 0xdd, 0xdc, 0x12, 0xae,
- 0x2c, 0xbc, 0x84, 0xab, 0xfd, 0xb2, 0xf0, 0x5e, 0x54, 0x28, 0xca, 0x21, 0x6b, 0x80, 0x49, 0xd7,
- 0xf1, 0x7d, 0x58, 0x68, 0x5f, 0x69, 0x58, 0x49, 0x47, 0x08, 0xdb, 0xb7, 0x4e, 0x01, 0xa9, 0x54,
- 0xd5, 0x7e, 0x6c, 0x0a, 0xcc, 0x9d, 0x77, 0x2d, 0xdf, 0xb2, 0xb7, 0x5b, 0x8e, 0xd3, 0xf5, 0xb4,
- 0x6f, 0x32, 0x1b, 0x15, 0x4f, 0x05, 0xc5, 0xb6, 0x63, 0x6f, 0x59, 0xdb, 0x54, 0x8c, 0x67, 0xb8,
- 0xca, 0x95, 0xaa, 0x8b, 0xeb, 0xae, 0x73, 0xd9, 0xea, 0x40, 0xb7, 0x8c, 0x73, 0x19, 0x34, 0x37,
- 0xd2, 0x63, 0x26, 0xf0, 0xda, 0x13, 0xfb, 0xbf, 0x62, 0xcb, 0x0b, 0x23, 0xbf, 0xd0, 0x44, 0x26,
- 0xee, 0x5a, 0x15, 0x4c, 0x77, 0x4d, 0x7b, 0x7b, 0x2f, 0x98, 0x79, 0xf7, 0xef, 0xa2, 0xc6, 0x51,
- 0xaa, 0xd1, 0x8f, 0x8c, 0xf0, 0x73, 0xec, 0xe4, 0x86, 0x4c, 0x7d, 0xd2, 0xf6, 0xf0, 0xff, 0xb3,
- 0x1f, 0xcb, 0x81, 0x59, 0xa6, 0x50, 0x75, 0x16, 0x4c, 0x55, 0xf4, 0xe5, 0xd2, 0x46, 0xad, 0xa5,
- 0x1c, 0x43, 0x52, 0x6c, 0x6e, 0xac, 0xad, 0x95, 0x8c, 0xea, 0xf7, 0xe9, 0x4a, 0x0e, 0xbd, 0x5b,
- 0x31, 0x4a, 0xe8, 0x59, 0x91, 0xd0, 0x43, 0x73, 0xb5, 0x61, 0xb4, 0xf4, 0xba, 0x22, 0x23, 0x7b,
- 0x54, 0xbf, 0x7f, 0xbd, 0x54, 0xaf, 0x28, 0x79, 0xf4, 0x7f, 0x69, 0xa3, 0x56, 0xd3, 0x5b, 0x4a,
- 0x21, 0x0a, 0xc5, 0x56, 0x44, 0xc9, 0xe5, 0x52, 0x73, 0xa3, 0x54, 0x53, 0xa6, 0x50, 0xf2, 0xf2,
- 0x46, 0xbd, 0x7e, 0x41, 0x99, 0x46, 0x45, 0x94, 0x1b, 0xf5, 0xe5, 0x6a, 0x45, 0xaf, 0xb7, 0x94,
- 0x19, 0xf5, 0x2a, 0x70, 0xbc, 0xd9, 0x32, 0x4a, 0xd5, 0x95, 0xd5, 0xd6, 0x72, 0xc3, 0x38, 0x5f,
- 0x32, 0x2a, 0x0a, 0x50, 0x15, 0x30, 0xb7, 0x6e, 0x34, 0x96, 0x75, 0x1c, 0xcb, 0xa3, 0x54, 0x53,
- 0x66, 0xd1, 0x57, 0x2d, 0xa3, 0x54, 0x6f, 0xd6, 0x4a, 0x2d, 0x5d, 0x99, 0x3b, 0x7b, 0x2f, 0x98,
- 0x0e, 0xaa, 0xab, 0x16, 0x81, 0xa4, 0xd7, 0x95, 0x63, 0xf8, 0xb7, 0xa9, 0xe4, 0xd0, 0xef, 0x32,
- 0xe2, 0xb7, 0x08, 0xa4, 0x8a, 0xae, 0xc8, 0xe8, 0xb7, 0xda, 0x52, 0xf2, 0xe8, 0x77, 0x1d, 0xb1,
- 0x58, 0x04, 0xd2, 0x6a, 0x55, 0x29, 0xa2, 0xdf, 0xd6, 0xaa, 0x32, 0xc5, 0xdf, 0xba, 0x9d, 0xd8,
- 0x0b, 0x1f, 0x94, 0x7c, 0x8c, 0xa1, 0xe1, 0x47, 0x73, 0x64, 0xfc, 0x5f, 0x7b, 0xa5, 0x24, 0xd2,
- 0xd7, 0x25, 0xd3, 0x4f, 0xd7, 0x68, 0xde, 0x92, 0x1b, 0x63, 0xab, 0x51, 0x35, 0x70, 0x4a, 0xaf,
- 0x57, 0xd6, 0x1b, 0xd5, 0x7a, 0x8b, 0x04, 0xcc, 0xd2, 0x4b, 0xe5, 0x55, 0x8c, 0x33, 0x44, 0x08,
- 0xae, 0x35, 0x2a, 0x7a, 0x0d, 0xbf, 0x58, 0x6e, 0x6c, 0xd4, 0x2b, 0xca, 0x16, 0x2a, 0xab, 0xb4,
- 0xd1, 0x5a, 0xdd, 0x34, 0xf4, 0x67, 0x6d, 0x54, 0x0d, 0xbd, 0xa2, 0x6c, 0x23, 0x1a, 0xb5, 0x52,
- 0x7d, 0x65, 0xa3, 0xb4, 0x42, 0xf7, 0x0b, 0x37, 0xd6, 0xd7, 0x1b, 0x78, 0xc7, 0x70, 0x47, 0xfb,
- 0x87, 0x3c, 0x98, 0x2e, 0xed, 0xf9, 0xce, 0x96, 0xd5, 0xed, 0x6a, 0x0f, 0x49, 0x87, 0x6f, 0x8a,
- 0x25, 0xae, 0x29, 0x1e, 0x68, 0x40, 0x41, 0x59, 0x61, 0xe3, 0x09, 0x12, 0x98, 0x76, 0x78, 0x3a,
- 0x72, 0xc6, 0x96, 0xe9, 0x4e, 0x33, 0x79, 0x24, 0x8e, 0xb8, 0x36, 0x6d, 0x59, 0xf8, 0x0d, 0x7d,
- 0x3c, 0x7b, 0x1f, 0x98, 0x63, 0x29, 0xe1, 0xa0, 0x52, 0xa5, 0x15, 0x12, 0x75, 0x2a, 0x88, 0x33,
- 0x47, 0xa2, 0x4e, 0xe1, 0x43, 0x01, 0x12, 0x6e, 0x2f, 0xd5, 0x56, 0x0d, 0xe9, 0xe9, 0x71, 0x30,
- 0x5b, 0xd1, 0x9b, 0x65, 0xa3, 0x8a, 0xfd, 0xd4, 0x95, 0x3c, 0xef, 0x65, 0x90, 0x68, 0x99, 0xf1,
- 0x35, 0x12, 0x55, 0xca, 0x6f, 0x0b, 0xd9, 0x5b, 0xf1, 0xb4, 0xd3, 0x29, 0xe4, 0x4b, 0x1e, 0x69,
- 0x0a, 0xa9, 0xbd, 0x24, 0x4f, 0xd6, 0xc9, 0x9a, 0x7b, 0xbb, 0xbb, 0xa6, 0xbb, 0xcf, 0xf9, 0xab,
- 0x8d, 0xaa, 0x77, 0xf1, 0xe3, 0x7b, 0x62, 0x84, 0x1a, 0x64, 0x42, 0xf5, 0x5c, 0x67, 0xb7, 0x17,
- 0xf4, 0xd5, 0xf4, 0x49, 0xfb, 0xbf, 0x85, 0x67, 0x8e, 0xa5, 0xea, 0x22, 0x53, 0x99, 0x11, 0x86,
- 0xf6, 0x1f, 0x94, 0x44, 0x66, 0x91, 0x89, 0xc5, 0x7c, 0xa7, 0x6b, 0xc4, 0xdf, 0xe4, 0xc1, 0x55,
- 0x34, 0xfa, 0x48, 0xb8, 0xfe, 0x80, 0x4c, 0xd5, 0xd7, 0x64, 0xaa, 0x19, 0xd4, 0xa0, 0x96, 0x23,
- 0x83, 0x9a, 0xd9, 0xf0, 0xce, 0x0b, 0x6e, 0x78, 0xbf, 0x4d, 0xf8, 0xd0, 0x43, 0xa9, 0xba, 0x38,
- 0xa0, 0x8e, 0x93, 0xd9, 0x96, 0x7f, 0x81, 0x24, 0xb2, 0xda, 0x2a, 0xc4, 0xe1, 0x77, 0xba, 0xae,
- 0xbd, 0x23, 0x07, 0x16, 0x78, 0x55, 0x51, 0x9f, 0x02, 0xa6, 0x7b, 0x34, 0x85, 0xca, 0xe5, 0x74,
- 0x9c, 0x72, 0x19, 0x61, 0x4e, 0x04, 0x11, 0xb4, 0x3b, 0x3d, 0xc7, 0xb2, 0xc3, 0x75, 0xf9, 0xe0,
- 0x19, 0xcd, 0x3b, 0xf1, 0xd4, 0x21, 0x88, 0x45, 0x87, 0x1f, 0xa2, 0x08, 0xa4, 0x79, 0x26, 0x02,
- 0x29, 0x12, 0xa2, 0x0f, 0x77, 0xf1, 0x8d, 0x2a, 0x7b, 0x2e, 0x71, 0x78, 0x91, 0x0c, 0x36, 0xe9,
- 0xec, 0x33, 0xc0, 0x74, 0x50, 0x3e, 0xb2, 0xee, 0x1a, 0xb5, 0x5a, 0x69, 0xad, 0x44, 0x16, 0x2a,
- 0x1b, 0xeb, 0x7a, 0xbd, 0x54, 0x55, 0x72, 0x68, 0xa0, 0xab, 0xad, 0x35, 0x5b, 0x1b, 0x95, 0x6a,
- 0x43, 0x91, 0xf0, 0x13, 0xca, 0x54, 0x5e, 0x5f, 0x57, 0x64, 0xed, 0x8d, 0x53, 0x60, 0x6a, 0xc5,
- 0xec, 0x76, 0xa1, 0xbb, 0xaf, 0x7d, 0x4d, 0x02, 0x4a, 0x30, 0x3b, 0x58, 0x33, 0x6d, 0x6b, 0x0b,
- 0x7a, 0x7e, 0xf2, 0x42, 0xc5, 0xfb, 0x84, 0xaf, 0x59, 0xa2, 0x65, 0x2c, 0xf6, 0xd3, 0x8f, 0xd1,
- 0xf1, 0xdb, 0x40, 0xde, 0xb2, 0xb7, 0x1c, 0xba, 0x5c, 0xd1, 0xef, 0x6f, 0x13, 0x7c, 0x8c, 0xb7,
- 0x0d, 0x70, 0x46, 0xc1, 0x9b, 0x96, 0x04, 0xb9, 0xc8, 0x7e, 0xd5, 0xe2, 0x1d, 0x79, 0x30, 0x1f,
- 0x30, 0x51, 0xb5, 0x3b, 0xf0, 0x41, 0x76, 0x1b, 0xf4, 0xa7, 0xf2, 0xa2, 0xc1, 0x6f, 0xfa, 0xeb,
- 0x83, 0x49, 0xc5, 0x88, 0xb4, 0x05, 0x40, 0xdb, 0xf4, 0xe1, 0xb6, 0xe3, 0x5a, 0xe1, 0x5a, 0xc4,
- 0x53, 0xd2, 0x50, 0x2b, 0x93, 0xaf, 0xf7, 0x0d, 0x86, 0x8e, 0x7a, 0x37, 0x98, 0x85, 0x61, 0xb4,
- 0xc1, 0x60, 0x9b, 0x34, 0x11, 0x2f, 0x36, 0xbf, 0xf6, 0x87, 0x42, 0x31, 0x76, 0x44, 0xaa, 0x99,
- 0x0e, 0xb3, 0xcd, 0xd1, 0xba, 0x9e, 0x8d, 0xfa, 0x5a, 0xc9, 0x68, 0xae, 0x96, 0x6a, 0xb5, 0x6a,
- 0x7d, 0x25, 0x0c, 0x7b, 0xab, 0x82, 0x85, 0x4a, 0xe3, 0x7c, 0x9d, 0x89, 0x4b, 0x9c, 0xd7, 0xd6,
- 0xc1, 0x74, 0x20, 0xaf, 0x41, 0xa7, 0xa8, 0x58, 0x99, 0xd1, 0x53, 0x54, 0x4c, 0x12, 0x32, 0x0d,
- 0xad, 0x76, 0xe8, 0x5a, 0x8f, 0xff, 0x6b, 0xbf, 0x69, 0x82, 0x02, 0xf6, 0x67, 0xd1, 0xde, 0x85,
- 0xe7, 0xc5, 0xbd, 0xae, 0xd9, 0x86, 0xda, 0x6e, 0x8a, 0x95, 0xf0, 0xe0, 0xde, 0x4f, 0xe9, 0xc0,
- 0xbd, 0x9f, 0xf8, 0x2f, 0x1d, 0x31, 0x4e, 0x0e, 0xf2, 0xa1, 0x31, 0x48, 0x16, 0x3e, 0x1c, 0x4d,
- 0xa2, 0x67, 0x13, 0x71, 0xbd, 0xa1, 0x6c, 0xc6, 0xa8, 0x64, 0x3c, 0x4f, 0xe9, 0x56, 0x81, 0xc5,
- 0x7c, 0xa0, 0x92, 0x38, 0xca, 0xbe, 0xc5, 0x7f, 0x29, 0x0f, 0x0a, 0xcd, 0x5e, 0xd7, 0xf2, 0xb5,
- 0x9f, 0x97, 0xc6, 0x82, 0x19, 0xb9, 0xab, 0x55, 0x1e, 0x7a, 0x57, 0x6b, 0xe4, 0x2f, 0x99, 0x17,
- 0xf0, 0x97, 0x6c, 0xc1, 0x07, 0x7d, 0xde, 0x5f, 0xf2, 0x0e, 0x3a, 0x6d, 0x23, 0xde, 0x96, 0x8f,
- 0x1d, 0x20, 0x52, 0x5c, 0xad, 0x01, 0x77, 0x22, 0x9c, 0x7d, 0x12, 0x0d, 0xcd, 0x0e, 0x40, 0x71,
- 0xa9, 0xd1, 0x6a, 0x35, 0xd6, 0x94, 0x63, 0x78, 0xfa, 0xd5, 0x58, 0x27, 0x81, 0x72, 0xab, 0xf5,
- 0xba, 0x6e, 0x70, 0x33, 0x2e, 0xfe, 0xe2, 0xbe, 0xc4, 0x09, 0x16, 0x5f, 0x76, 0x96, 0xea, 0x25,
- 0xb6, 0x08, 0x1e, 0xcf, 0x4f, 0xf6, 0xca, 0xf5, 0x33, 0x32, 0x28, 0xac, 0x41, 0x77, 0x1b, 0x6a,
- 0xcf, 0x4e, 0xe1, 0x60, 0xb7, 0x65, 0xb9, 0x1e, 0x09, 0xad, 0x1f, 0x39, 0xd8, 0xb1, 0x69, 0xea,
- 0x8d, 0x60, 0xde, 0x83, 0x6d, 0xc7, 0xee, 0x04, 0x99, 0x48, 0x7f, 0xc4, 0x27, 0x6a, 0x2f, 0x4f,
- 0x09, 0x19, 0x66, 0x74, 0x2c, 0x5e, 0x72, 0x69, 0x80, 0x19, 0x54, 0x6a, 0xf6, 0xc0, 0x7c, 0x43,
- 0x46, 0x1f, 0xf5, 0xf6, 0xb5, 0x97, 0x0b, 0x7b, 0x3e, 0xde, 0x0a, 0x8a, 0x17, 0x83, 0x3b, 0x9a,
- 0xe4, 0xd8, 0xfe, 0x98, 0xe6, 0x51, 0x97, 0xc0, 0x09, 0x0f, 0x76, 0x61, 0xdb, 0x87, 0x1d, 0xd4,
- 0x74, 0x8d, 0xa1, 0x9d, 0xc2, 0xc1, 0xec, 0xda, 0xef, 0xb2, 0x00, 0xde, 0xc5, 0x03, 0x78, 0xd3,
- 0x00, 0x51, 0xa2, 0x0a, 0xc5, 0xcf, 0x4d, 0x50, 0x35, 0x9a, 0x5d, 0x27, 0x34, 0x7c, 0x83, 0x67,
- 0xf4, 0x6e, 0xc7, 0xdf, 0xed, 0xe2, 0x77, 0xf4, 0x68, 0x70, 0xf0, 0xac, 0x2e, 0x82, 0x29, 0xd3,
- 0xde, 0xc7, 0xaf, 0xf2, 0x09, 0xb5, 0x0e, 0x32, 0x69, 0xaf, 0x0a, 0x91, 0xbf, 0x87, 0x43, 0xfe,
- 0xf1, 0x62, 0xec, 0x66, 0x0f, 0xfc, 0x0f, 0x4f, 0x81, 0xc2, 0xba, 0xe9, 0xf9, 0x50, 0xfb, 0x9f,
- 0xb2, 0x28, 0xf2, 0x37, 0x81, 0x85, 0x2d, 0xa7, 0xbd, 0xe7, 0xc1, 0x0e, 0xdf, 0x28, 0xfb, 0x52,
- 0xc7, 0x81, 0xb9, 0x7a, 0x0b, 0x50, 0x82, 0x44, 0x4a, 0x36, 0x70, 0x81, 0x3d, 0x90, 0x8e, 0xaf,
- 0x81, 0xf3, 0xd6, 0x4d, 0xd7, 0x6f, 0x6c, 0xe1, 0xb4, 0xf0, 0x1a, 0x38, 0x36, 0x91, 0x83, 0xbe,
- 0x98, 0x00, 0xfd, 0x54, 0x3c, 0xf4, 0xd3, 0x02, 0xd0, 0xab, 0x25, 0x30, 0xbd, 0x65, 0x75, 0x21,
- 0xfe, 0x60, 0x06, 0x7f, 0x30, 0x68, 0x4c, 0xc2, 0xb2, 0x0f, 0xc7, 0xa4, 0x65, 0xab, 0x0b, 0x8d,
- 0xf0, 0xb3, 0x60, 0x22, 0x03, 0xa2, 0x89, 0x4c, 0x8d, 0x9c, 0x84, 0x43, 0x86, 0x97, 0x6d, 0xee,
- 0xc2, 0x60, 0xe3, 0xdb, 0xa6, 0xc7, 0xd2, 0x3b, 0xa6, 0x6f, 0x62, 0x30, 0xe6, 0x0c, 0xfc, 0x9f,
- 0xf7, 0xc9, 0x96, 0xfb, 0x7d, 0xb2, 0x9f, 0x2f, 0xa7, 0xeb, 0x11, 0x03, 0x66, 0x63, 0x5a, 0xd4,
- 0xc5, 0x00, 0x20, 0x62, 0x29, 0x86, 0xcf, 0x08, 0x98, 0xb6, 0xe9, 0x42, 0x7f, 0x9d, 0xf5, 0x82,
- 0x2e, 0x18, 0x7c, 0x22, 0x3e, 0x84, 0xe3, 0x35, 0xcd, 0x5d, 0x72, 0xcd, 0x5b, 0x19, 0xbd, 0xa3,
- 0x87, 0x2b, 0x0e, 0xa4, 0x47, 0xfd, 0x6f, 0x61, 0xdc, 0xfd, 0xef, 0xa0, 0x3a, 0x66, 0xdf, 0x0c,
- 0x5f, 0x9b, 0x07, 0x72, 0x79, 0xcf, 0x7f, 0x44, 0x77, 0xbf, 0xdf, 0x16, 0xf6, 0x31, 0xa7, 0xfd,
- 0xd9, 0x9e, 0x7f, 0xb4, 0xbd, 0x6f, 0x4a, 0x2d, 0x11, 0xf3, 0x65, 0x8f, 0xab, 0x5b, 0xf6, 0x3a,
- 0xf2, 0x36, 0x39, 0x3c, 0x1a, 0xf5, 0x50, 0xee, 0xf0, 0xa6, 0xb9, 0x46, 0xfa, 0x27, 0xa6, 0x67,
- 0x08, 0x9f, 0x83, 0x8e, 0x27, 0xcf, 0xdd, 0x4c, 0x80, 0x5d, 0x5b, 0xb1, 0x28, 0xe7, 0x0c, 0xf2,
- 0xa0, 0xbd, 0x42, 0xf8, 0xc0, 0x28, 0x11, 0x5b, 0xe2, 0x31, 0x9e, 0x74, 0x36, 0xd5, 0x6b, 0x84,
- 0x8e, 0x8d, 0x26, 0x14, 0x9b, 0x3d, 0x60, 0x7f, 0xcf, 0x1e, 0xd3, 0x29, 0x1d, 0x1a, 0x31, 0xed,
- 0xd5, 0xc2, 0x0b, 0xfa, 0xa4, 0xda, 0x43, 0xf6, 0xea, 0xd3, 0xc9, 0x5b, 0xcc, 0x51, 0x2c, 0xb1,
- 0xe0, 0x09, 0xdc, 0x5b, 0x2b, 0x83, 0x22, 0x59, 0xf8, 0xd5, 0xde, 0x2c, 0xdc, 0x44, 0x50, 0x6f,
- 0xc4, 0x1f, 0xdf, 0x09, 0x9f, 0xd3, 0xac, 0x39, 0x70, 0xc7, 0x7c, 0xf2, 0xa9, 0x8e, 0xf9, 0xf0,
- 0x11, 0x58, 0x04, 0xda, 0x11, 0xa9, 0x63, 0xc6, 0xd3, 0xc9, 0x34, 0x2d, 0x6c, 0x20, 0x43, 0xd9,
- 0xe3, 0xfd, 0xc2, 0x02, 0x98, 0x23, 0x45, 0x93, 0xf3, 0x85, 0xda, 0x7b, 0xa4, 0xef, 0x1c, 0xd4,
- 0xd5, 0x3a, 0x98, 0xbb, 0x82, 0xd9, 0x26, 0xf7, 0xd1, 0xd2, 0x95, 0x8b, 0x5b, 0x12, 0xd7, 0x3d,
- 0x48, 0x3d, 0x83, 0x1b, 0x6c, 0xb9, 0xef, 0x91, 0x8c, 0xc9, 0x06, 0x0b, 0x39, 0x3c, 0x51, 0xc4,
- 0x46, 0x16, 0x9b, 0xa4, 0x9e, 0x02, 0xc5, 0xcb, 0x16, 0xbc, 0x52, 0xed, 0x50, 0xeb, 0x96, 0x3e,
- 0x69, 0xbf, 0x26, 0xec, 0x33, 0xc9, 0xc2, 0x4d, 0x79, 0xc9, 0x56, 0x0b, 0xc5, 0x3c, 0x27, 0x87,
- 0xb2, 0x35, 0x81, 0x68, 0x40, 0x12, 0xb9, 0x33, 0x9b, 0x86, 0x99, 0x2f, 0xa7, 0x50, 0xc4, 0x38,
- 0xc3, 0x99, 0x0f, 0xc2, 0x97, 0x78, 0xd6, 0x9c, 0x08, 0x20, 0x2a, 0x7f, 0x2c, 0x7d, 0xbe, 0x58,
- 0x64, 0xb8, 0x21, 0x45, 0x67, 0x2f, 0xf9, 0xd7, 0xc9, 0x60, 0xa6, 0x09, 0xfd, 0x65, 0x0b, 0x76,
- 0x3b, 0x9e, 0xe6, 0x1e, 0xde, 0x34, 0xba, 0x0d, 0x14, 0xb7, 0x30, 0xb1, 0x61, 0x9b, 0x93, 0x34,
- 0x9b, 0xf6, 0x5a, 0x49, 0xd4, 0x0f, 0x88, 0xae, 0xbe, 0x05, 0xdc, 0x8e, 0x05, 0x26, 0xb1, 0xd3,
- 0x74, 0xc9, 0x25, 0x4f, 0xe0, 0x1a, 0x1f, 0x19, 0xcc, 0xe1, 0xed, 0x7f, 0xe8, 0x97, 0xba, 0xd6,
- 0xb6, 0xad, 0xed, 0x8d, 0xa1, 0x85, 0xa8, 0x4f, 0x04, 0x05, 0x13, 0x51, 0xa3, 0xee, 0x6e, 0xda,
- 0xc0, 0xce, 0x13, 0x97, 0x67, 0x90, 0x8c, 0x29, 0x2e, 0xcd, 0x88, 0x14, 0x3b, 0xe0, 0x79, 0x82,
- 0x97, 0x66, 0x0c, 0x2d, 0x3c, 0x7b, 0xc4, 0xbe, 0x22, 0x83, 0x93, 0x94, 0x81, 0x73, 0xd0, 0xf5,
- 0xad, 0xb6, 0xd9, 0x25, 0xc8, 0xbd, 0x38, 0x37, 0x0e, 0xe8, 0x56, 0xc1, 0xfc, 0x65, 0x96, 0x2c,
- 0x85, 0xf0, 0xec, 0x40, 0x08, 0x39, 0x06, 0x0c, 0xfe, 0xc3, 0x14, 0x97, 0x0f, 0x70, 0x52, 0xe5,
- 0x68, 0x4e, 0xf0, 0xf2, 0x01, 0x61, 0x26, 0xb2, 0x87, 0xf8, 0x65, 0x34, 0xa8, 0x66, 0xd4, 0x7d,
- 0xfe, 0x91, 0x30, 0xb6, 0x1b, 0x60, 0x16, 0x63, 0x49, 0x3e, 0xa4, 0xcb, 0x10, 0x09, 0x4a, 0x1c,
- 0xf6, 0x3b, 0xf4, 0xba, 0xf4, 0xf0, 0x5b, 0x83, 0xa5, 0xa3, 0x9d, 0x07, 0x20, 0x7a, 0xc5, 0x76,
- 0xd2, 0xb9, 0xb8, 0x4e, 0x5a, 0x12, 0xeb, 0xa4, 0xdf, 0x24, 0x1c, 0xe6, 0x70, 0x30, 0xdb, 0x87,
- 0x57, 0x0f, 0xb1, 0x00, 0x77, 0xc3, 0x4b, 0xcf, 0x5e, 0x2f, 0x5e, 0x45, 0xf5, 0xa2, 0xb2, 0xd7,
- 0xeb, 0x5a, 0x6d, 0x34, 0x9f, 0xfa, 0xc4, 0x58, 0xe6, 0x53, 0x6c, 0x7f, 0x20, 0xf7, 0xf5, 0x07,
- 0x87, 0xb0, 0xa4, 0x6f, 0x06, 0xc7, 0x49, 0x11, 0xe5, 0x90, 0xad, 0x02, 0x09, 0xe2, 0xd6, 0x97,
- 0xcc, 0x47, 0x14, 0x17, 0x54, 0x82, 0x50, 0x08, 0x23, 0x2c, 0x7d, 0xa6, 0x33, 0x76, 0xd3, 0x2a,
- 0x48, 0x1c, 0x67, 0x13, 0x38, 0x92, 0x95, 0x27, 0xd6, 0xee, 0x06, 0xbe, 0xd1, 0x5e, 0xfb, 0x62,
- 0x7e, 0x1c, 0x23, 0xc2, 0x33, 0xa9, 0xa7, 0xa9, 0x1c, 0xbb, 0xa4, 0x11, 0x15, 0x19, 0xf6, 0x23,
- 0x2d, 0xf8, 0xa0, 0xbf, 0x7a, 0x8c, 0xf8, 0xa5, 0xaa, 0xb7, 0x80, 0xe3, 0x17, 0xcd, 0xf6, 0xa5,
- 0x6d, 0xd7, 0xd9, 0xc3, 0x77, 0x7f, 0x3b, 0xf4, 0x12, 0xf1, 0xd5, 0x63, 0x46, 0xff, 0x0b, 0xf5,
- 0xf6, 0xc0, 0x74, 0x28, 0x0c, 0x33, 0x1d, 0x56, 0x8f, 0x51, 0xe3, 0x41, 0x7d, 0x52, 0xd8, 0xe9,
- 0x14, 0x13, 0x3b, 0x9d, 0xd5, 0x63, 0x41, 0xb7, 0xa3, 0x56, 0xc0, 0x74, 0xc7, 0xba, 0x8c, 0xb7,
- 0xaa, 0xf1, 0xac, 0x6b, 0x58, 0xd0, 0xa1, 0x8a, 0x75, 0x99, 0x6c, 0x6c, 0xaf, 0x1e, 0x33, 0xc2,
- 0x2f, 0xd5, 0x15, 0x30, 0x83, 0xb7, 0x05, 0x30, 0x99, 0xe9, 0x54, 0x01, 0x85, 0x56, 0x8f, 0x19,
- 0xd1, 0xb7, 0xc8, 0xfa, 0xc8, 0xe3, 0x73, 0xd7, 0xf7, 0x04, 0xdb, 0xed, 0xb9, 0x54, 0xdb, 0xed,
- 0x48, 0x16, 0x64, 0xc3, 0xfd, 0x14, 0x28, 0xb4, 0xb1, 0x84, 0x25, 0x2a, 0x61, 0xf2, 0xa8, 0xde,
- 0x05, 0xf2, 0xbb, 0xa6, 0x1b, 0x4c, 0x9e, 0x6f, 0x1a, 0x4e, 0x77, 0xcd, 0x74, 0x2f, 0x21, 0x04,
- 0xd1, 0x57, 0x4b, 0x53, 0xa0, 0x80, 0x05, 0x17, 0xfe, 0xd1, 0xde, 0x96, 0x27, 0x66, 0x48, 0xd9,
- 0xb1, 0xd1, 0xb0, 0xdf, 0x72, 0x82, 0xc3, 0xe9, 0xbf, 0x96, 0x1b, 0x8f, 0x05, 0x79, 0x15, 0x73,
- 0xd5, 0x87, 0x6d, 0x3d, 0x7b, 0x0f, 0xde, 0x07, 0xf7, 0xe9, 0x92, 0xe8, 0xa0, 0x57, 0xea, 0x19,
- 0x00, 0x7c, 0x7a, 0x52, 0x2f, 0x0c, 0x62, 0xca, 0xa4, 0x44, 0xcb, 0x07, 0x85, 0xe1, 0x8e, 0x2a,
- 0xbf, 0x3b, 0x82, 0xe9, 0xd2, 0x2f, 0x88, 0xf8, 0x19, 0x78, 0xd7, 0xb2, 0x99, 0x3a, 0x07, 0x8f,
- 0x29, 0x3b, 0xa5, 0xb4, 0x46, 0xcd, 0x10, 0xf6, 0xb2, 0xef, 0x9b, 0xde, 0x92, 0x27, 0xb7, 0x1d,
- 0x90, 0x13, 0xd0, 0xfa, 0x83, 0x96, 0xe7, 0x5b, 0xf6, 0x36, 0x3d, 0xdf, 0xfc, 0xd9, 0xb1, 0x28,
- 0xcd, 0x80, 0x01, 0x47, 0x1e, 0x38, 0xe0, 0x1c, 0x08, 0x10, 0x94, 0x1f, 0x12, 0x20, 0xa8, 0x90,
- 0x6e, 0xe5, 0xf0, 0x23, 0xac, 0xfe, 0xac, 0xf3, 0xfa, 0x73, 0x67, 0x0c, 0x40, 0x83, 0xe4, 0x32,
- 0x16, 0xfb, 0xe6, 0x5d, 0xa1, 0xa6, 0x34, 0x39, 0x4d, 0xb9, 0x67, 0x74, 0x46, 0xb2, 0xd7, 0x96,
- 0x0f, 0xe5, 0xc1, 0x55, 0x11, 0x33, 0x75, 0x78, 0x85, 0x2a, 0xca, 0x1f, 0x8c, 0x45, 0x51, 0xd2,
- 0x3b, 0x3a, 0x67, 0xad, 0x31, 0xbf, 0x25, 0x7c, 0x6e, 0xbf, 0x1f, 0xa8, 0x50, 0x36, 0x31, 0xca,
- 0x72, 0x0a, 0x14, 0x49, 0x0f, 0x43, 0xa1, 0xa1, 0x4f, 0x29, 0xbb, 0x1b, 0xb1, 0xd3, 0xfe, 0xa2,
- 0xbc, 0x4d, 0x40, 0x7f, 0xe8, 0xba, 0x46, 0x6b, 0xcf, 0xb5, 0xab, 0xb6, 0xef, 0x68, 0x3f, 0x34,
- 0x16, 0xc5, 0x09, 0xbd, 0xe1, 0xe4, 0x51, 0xbc, 0xe1, 0x46, 0x5a, 0xe5, 0x08, 0x6a, 0x70, 0x24,
- 0xab, 0x1c, 0x31, 0x85, 0x67, 0x8f, 0xdf, 0x3b, 0x65, 0x70, 0x8a, 0x4e, 0xb6, 0x96, 0x78, 0x0b,
- 0x51, 0xbb, 0x30, 0x0e, 0x20, 0x4f, 0x06, 0x66, 0x12, 0xf5, 0xa3, 0xc7, 0x0f, 0x7c, 0x94, 0x82,
- 0xc4, 0xdb, 0x2c, 0xb9, 0xe9, 0x60, 0x1f, 0x87, 0x63, 0x41, 0x4a, 0xec, 0x12, 0xcb, 0x14, 0x6c,
- 0x64, 0x8f, 0xd9, 0x4b, 0x65, 0x50, 0x24, 0x31, 0x12, 0xb4, 0x8d, 0x4c, 0x1c, 0x26, 0xf8, 0xfb,
- 0x59, 0x04, 0x76, 0xe4, 0x08, 0x37, 0x99, 0xc5, 0x8f, 0x48, 0xb3, 0x17, 0x37, 0x90, 0x95, 0x09,
- 0xb8, 0x10, 0x4a, 0x60, 0xb6, 0x09, 0xfd, 0xb2, 0xe9, 0xba, 0x96, 0xb9, 0x3d, 0x2e, 0x8f, 0x6f,
- 0x51, 0xef, 0x61, 0xed, 0x9b, 0x39, 0xd1, 0xb3, 0xec, 0xe1, 0x42, 0x78, 0xc0, 0x6a, 0x4c, 0x14,
- 0xf0, 0xd7, 0x0b, 0x9d, 0x57, 0x1f, 0x46, 0x6d, 0x02, 0x1e, 0xdb, 0x12, 0x98, 0x0a, 0xe2, 0x60,
- 0xdc, 0xc6, 0xc5, 0x46, 0xd9, 0xf1, 0x77, 0x83, 0x63, 0x30, 0xf8, 0xff, 0xc1, 0xf8, 0x0b, 0xda,
- 0x2b, 0x53, 0x3a, 0xca, 0x27, 0x07, 0xf1, 0x48, 0xd7, 0xc6, 0xd2, 0xb8, 0xc3, 0x1f, 0x55, 0xd8,
- 0x8e, 0x5f, 0x99, 0xa2, 0xcb, 0x91, 0x35, 0xd3, 0x87, 0x0f, 0x6a, 0x7f, 0x24, 0x83, 0xa9, 0x26,
- 0xf4, 0xd1, 0x78, 0x8b, 0xd8, 0x3f, 0xb4, 0x86, 0xab, 0xcc, 0x8a, 0x07, 0x3d, 0x5b, 0xab, 0xde,
- 0x0b, 0x66, 0x7a, 0xae, 0xd3, 0x86, 0x9e, 0x47, 0x57, 0x2f, 0x58, 0x47, 0xb5, 0x41, 0xa3, 0x3f,
- 0x66, 0x6d, 0x71, 0x3d, 0xf8, 0xc6, 0x88, 0x3e, 0x4f, 0x6b, 0x06, 0x10, 0x4a, 0xb4, 0x82, 0x93,
- 0x36, 0x03, 0x92, 0x0a, 0xcf, 0x1e, 0xe8, 0xdf, 0x93, 0xc1, 0x5c, 0x13, 0xfa, 0xa1, 0x14, 0x53,
- 0x6c, 0x72, 0xc4, 0xc3, 0xcb, 0x41, 0x29, 0x1f, 0x0e, 0xca, 0x77, 0x0a, 0x5f, 0x0a, 0xcb, 0x4b,
- 0x33, 0x24, 0x36, 0x16, 0x3c, 0xdf, 0x22, 0x74, 0x17, 0xac, 0x18, 0x07, 0x13, 0x38, 0xbe, 0xf6,
- 0x58, 0x30, 0x83, 0x79, 0xc1, 0x0d, 0xf6, 0xc7, 0xf2, 0x51, 0xe3, 0xfd, 0x42, 0x46, 0x8d, 0xf7,
- 0x6e, 0x50, 0xd8, 0x35, 0xdd, 0x4b, 0xc1, 0xe1, 0xdb, 0xc7, 0x89, 0xad, 0x7e, 0x79, 0x06, 0xf9,
- 0x6a, 0xb0, 0x9f, 0x66, 0x21, 0x9d, 0x9f, 0xe6, 0xeb, 0xa5, 0x54, 0x23, 0x21, 0x99, 0x3b, 0x8c,
- 0xb1, 0xc9, 0xa7, 0x18, 0x37, 0x13, 0xca, 0xce, 0x5e, 0x39, 0x5e, 0x2c, 0x83, 0x69, 0x34, 0x6e,
- 0x63, 0x7b, 0xfc, 0xfc, 0xe1, 0xd5, 0x61, 0xb0, 0xa1, 0x9f, 0xb2, 0x07, 0x0e, 0x24, 0x32, 0x3e,
- 0xf3, 0x3e, 0x45, 0x0f, 0x9c, 0x54, 0x78, 0xf6, 0x78, 0xbc, 0x9b, 0xe0, 0x81, 0xdb, 0x83, 0xf6,
- 0x06, 0x19, 0xc8, 0x2b, 0xd0, 0x9f, 0xb4, 0x15, 0xf9, 0x76, 0xe1, 0xf0, 0xa2, 0x9c, 0xc0, 0x30,
- 0xcf, 0x8b, 0x2b, 0x70, 0x3c, 0x0d, 0x48, 0x2c, 0xae, 0xa8, 0x10, 0x03, 0xd9, 0xa3, 0xf6, 0x7e,
- 0x82, 0x1a, 0xd9, 0x5c, 0xf8, 0xc1, 0x31, 0xf4, 0xaa, 0x93, 0x5d, 0xf8, 0x08, 0x04, 0x88, 0x69,
- 0x1c, 0x55, 0x7b, 0x1b, 0x54, 0x78, 0xf6, 0xc8, 0xfd, 0xac, 0x8c, 0x2f, 0x31, 0x2b, 0xef, 0xc0,
- 0xf6, 0x25, 0xd8, 0x61, 0x2f, 0x72, 0x1e, 0x15, 0xba, 0xd3, 0x60, 0xaa, 0x4d, 0xa8, 0x61, 0xf0,
- 0xa6, 0x8d, 0xe0, 0x91, 0xbf, 0x59, 0x28, 0xf1, 0xee, 0x2c, 0xbe, 0x23, 0x22, 0x9f, 0x8f, 0x05,
- 0x17, 0xb1, 0x0b, 0xaf, 0x04, 0x8a, 0x9f, 0x80, 0xd9, 0x42, 0x66, 0x19, 0xd5, 0xb6, 0x63, 0x6b,
- 0xff, 0xf5, 0xf0, 0xb0, 0x5c, 0x0b, 0x66, 0xac, 0xb6, 0x63, 0xe3, 0x10, 0x70, 0xc1, 0x21, 0xa0,
- 0x30, 0x21, 0x78, 0xab, 0xef, 0x3a, 0x0f, 0x58, 0x74, 0xd7, 0x3c, 0x4a, 0x18, 0xd5, 0x98, 0x40,
- 0xac, 0x1f, 0x95, 0x31, 0x31, 0xa0, 0xec, 0xec, 0x21, 0xfb, 0x64, 0xe4, 0xdd, 0x46, 0xba, 0xc2,
- 0x47, 0xc4, 0x2a, 0xf0, 0x28, 0xc3, 0x19, 0x5b, 0x8b, 0x23, 0x19, 0xce, 0x12, 0x18, 0x98, 0xc0,
- 0x4d, 0x84, 0x11, 0x8e, 0x99, 0xaf, 0x01, 0x1f, 0x02, 0x9d, 0xf1, 0x99, 0x87, 0x23, 0xa2, 0x73,
- 0x34, 0x26, 0xe2, 0x87, 0x69, 0x78, 0x7a, 0x6a, 0xf1, 0x68, 0xff, 0x6d, 0x1c, 0xe0, 0xdc, 0x39,
- 0x8a, 0xbf, 0x02, 0xf1, 0x56, 0xd0, 0xde, 0x2a, 0x89, 0x86, 0x40, 0x39, 0x20, 0x41, 0x44, 0x65,
- 0x2c, 0x08, 0xbe, 0x49, 0x28, 0x36, 0x89, 0x48, 0xf9, 0xd9, 0x03, 0xf8, 0x22, 0x19, 0x2c, 0x60,
- 0x1f, 0x81, 0x2e, 0x34, 0x5d, 0xd2, 0x51, 0x8e, 0xc5, 0x51, 0xfe, 0xdd, 0xc2, 0x01, 0x7e, 0x78,
- 0x39, 0x44, 0x7c, 0x8c, 0x05, 0x0a, 0xb1, 0xe8, 0x3e, 0x82, 0x2c, 0x4c, 0x64, 0x1b, 0x45, 0x09,
- 0x59, 0xa0, 0x2a, 0x3e, 0x1e, 0x3c, 0x52, 0x7a, 0xe4, 0xf2, 0xc2, 0x08, 0x1a, 0xdb, 0x84, 0x3d,
- 0x72, 0x45, 0x98, 0xc8, 0x1e, 0x93, 0x37, 0x3c, 0x91, 0x2e, 0x38, 0xb7, 0xcc, 0x8b, 0x5d, 0xa8,
- 0xbd, 0x3a, 0x1f, 0x9e, 0x68, 0xfb, 0xbd, 0xb1, 0x78, 0x60, 0x1e, 0xe2, 0x32, 0x2a, 0x15, 0xe4,
- 0x5d, 0xe7, 0x0a, 0x59, 0xda, 0x9a, 0x37, 0xf0, 0x7f, 0x12, 0xcf, 0xb2, 0xbb, 0xb7, 0x6b, 0x93,
- 0x93, 0xa1, 0xf3, 0x46, 0xf0, 0xa8, 0xde, 0x08, 0xe6, 0xaf, 0x58, 0xfe, 0xce, 0x2a, 0x34, 0x3b,
- 0xd0, 0x35, 0x9c, 0x2b, 0xd8, 0x63, 0x6e, 0xda, 0xe0, 0x13, 0x79, 0xff, 0x15, 0x01, 0xfb, 0x12,
- 0x09, 0x65, 0x32, 0xc7, 0xdf, 0xd2, 0x58, 0x9e, 0xf1, 0x5c, 0x65, 0xaf, 0x30, 0x1f, 0x90, 0xc1,
- 0x8c, 0xe1, 0x5c, 0xa1, 0x4a, 0xf2, 0x7f, 0x1e, 0xad, 0x8e, 0xa4, 0x9e, 0xe8, 0x61, 0xc9, 0x85,
- 0xec, 0x4f, 0x7c, 0xa2, 0x97, 0x58, 0xfc, 0x44, 0x4e, 0x2e, 0xcd, 0x19, 0xce, 0x95, 0x26, 0xf4,
- 0x49, 0x8b, 0xd0, 0x36, 0xc7, 0xe4, 0x64, 0x6d, 0x79, 0x84, 0x20, 0x9d, 0x87, 0x87, 0xcf, 0x69,
- 0x77, 0x11, 0x42, 0x01, 0x85, 0x2c, 0x4e, 0x7a, 0x17, 0x61, 0x28, 0x07, 0x13, 0x88, 0x91, 0x22,
- 0x83, 0x59, 0xc3, 0xb9, 0x82, 0x86, 0x86, 0x65, 0xab, 0xdb, 0x1d, 0xcf, 0x08, 0x99, 0xd6, 0xf8,
- 0x0f, 0xc4, 0x10, 0x70, 0x31, 0x71, 0xe3, 0x7f, 0x08, 0x03, 0xd9, 0xc3, 0xf0, 0x7c, 0xd2, 0x58,
- 0x82, 0x11, 0xda, 0x1e, 0x0f, 0x0e, 0xa3, 0x36, 0x88, 0x90, 0x8d, 0x23, 0x6b, 0x10, 0x71, 0x1c,
- 0x4c, 0x64, 0xe7, 0x64, 0xa1, 0x8c, 0x87, 0xf9, 0xf1, 0xb6, 0x89, 0xf7, 0xa6, 0x73, 0x4d, 0xa4,
- 0xc3, 0x2e, 0xc7, 0xc8, 0x58, 0xd0, 0x48, 0xe1, 0x82, 0x28, 0xc0, 0x43, 0xf6, 0x78, 0x7c, 0x4c,
- 0x06, 0x73, 0x84, 0x85, 0x47, 0x88, 0x15, 0x30, 0x52, 0xa3, 0x62, 0x6b, 0x70, 0x34, 0x8d, 0x2a,
- 0x81, 0x83, 0x89, 0xdc, 0xe7, 0x8f, 0xec, 0xb8, 0x11, 0x8e, 0x8f, 0xc7, 0x21, 0x38, 0xb2, 0x31,
- 0x36, 0xc6, 0x23, 0xe4, 0xa3, 0x18, 0x63, 0x47, 0x74, 0x8c, 0xfc, 0xf9, 0x61, 0x2b, 0x1a, 0x27,
- 0x06, 0x87, 0x68, 0x0a, 0x63, 0x84, 0x61, 0xc4, 0xa6, 0x70, 0x44, 0x48, 0xfc, 0x99, 0x0c, 0x00,
- 0x61, 0x60, 0xcd, 0xb9, 0x8c, 0x2f, 0xd2, 0x1c, 0x43, 0x77, 0xd6, 0xef, 0x56, 0x2f, 0x0f, 0x71,
- 0xab, 0x4f, 0x19, 0xc2, 0x25, 0xed, 0x4a, 0x20, 0x23, 0x65, 0x54, 0xc9, 0x89, 0xaf, 0x04, 0x26,
- 0x97, 0x9f, 0x3d, 0xc6, 0x5f, 0x26, 0xd6, 0x5c, 0x74, 0xc0, 0xf4, 0xe7, 0xc6, 0x82, 0x32, 0x33,
- 0xfb, 0x97, 0xf9, 0xd9, 0xff, 0x21, 0xb0, 0x1d, 0xd5, 0x46, 0x1c, 0x76, 0x70, 0x34, 0x7b, 0x1b,
- 0xf1, 0xe8, 0x0e, 0x88, 0xfe, 0x60, 0x1e, 0x1c, 0xa7, 0x9d, 0xc8, 0x77, 0x02, 0xc4, 0x29, 0xcf,
- 0xe1, 0x71, 0x9d, 0xe4, 0x10, 0x94, 0xc7, 0xb5, 0x20, 0x95, 0x66, 0x29, 0x53, 0x80, 0xbd, 0x89,
- 0xac, 0x6e, 0x14, 0xf5, 0x07, 0x7b, 0xa6, 0xdd, 0x11, 0x0f, 0xf7, 0x3b, 0x04, 0xf8, 0x60, 0xad,
- 0x51, 0xe6, 0xd7, 0x1a, 0x07, 0xac, 0x4c, 0xa6, 0xde, 0xb9, 0xc6, 0x22, 0x23, 0xec, 0x4e, 0x7c,
- 0xe7, 0x3a, 0xbe, 0xec, 0xec, 0x51, 0x7a, 0xaf, 0x0c, 0xf2, 0x4d, 0xc7, 0xf5, 0xb5, 0x17, 0xa4,
- 0x69, 0x9d, 0x44, 0xf2, 0x11, 0x48, 0xc1, 0xb3, 0x5a, 0x06, 0x79, 0x54, 0x39, 0x3a, 0x63, 0xb8,
- 0x2d, 0xf9, 0xa8, 0xb3, 0xe9, 0x9b, 0xd8, 0xab, 0x1b, 0x95, 0xbf, 0xd8, 0xda, 0xef, 0x41, 0x03,
- 0x7f, 0x9c, 0x36, 0x9e, 0x0e, 0x91, 0x5f, 0x33, 0xfe, 0x00, 0x46, 0x66, 0xf1, 0x74, 0x62, 0x4b,
- 0xce, 0x1e, 0xb7, 0x87, 0x8f, 0x53, 0xdf, 0xd6, 0x65, 0xab, 0x0b, 0xb5, 0x17, 0x10, 0x97, 0x91,
- 0xba, 0xb9, 0x0b, 0xc5, 0x8f, 0xc4, 0x24, 0xba, 0xb6, 0xe2, 0xf8, 0xb2, 0x72, 0x14, 0x5f, 0x36,
- 0x6d, 0x83, 0x22, 0x07, 0xd0, 0x09, 0x4b, 0x93, 0x6e, 0x50, 0x09, 0x65, 0x4f, 0x24, 0x4e, 0xe7,
- 0x89, 0x26, 0xf4, 0x89, 0x51, 0xd9, 0x08, 0xae, 0x48, 0xfa, 0xfe, 0xb1, 0x44, 0xec, 0x0c, 0x2f,
- 0xd4, 0x91, 0xfb, 0x6e, 0x60, 0xfa, 0x00, 0x0b, 0xce, 0x1a, 0x0f, 0xce, 0xf7, 0xc6, 0x0b, 0x88,
- 0x67, 0x72, 0x2c, 0x30, 0xbd, 0x3d, 0x84, 0x69, 0x9d, 0x83, 0xe9, 0xae, 0x11, 0xb9, 0xc8, 0x1e,
- 0xb0, 0x9f, 0x28, 0x80, 0xe3, 0x64, 0xd2, 0x5f, 0xb2, 0x3b, 0x34, 0xc2, 0xea, 0x9b, 0xa5, 0x23,
- 0xde, 0x6c, 0x3b, 0x18, 0x82, 0x95, 0x8b, 0xe5, 0x5c, 0xe8, 0x8b, 0xe5, 0xac, 0x2e, 0x91, 0x70,
- 0xae, 0xa8, 0x13, 0xc5, 0x3b, 0x6d, 0xc3, 0xc2, 0x4c, 0x60, 0xd9, 0xe3, 0x2e, 0x37, 0xfc, 0x8e,
- 0xbf, 0x47, 0x74, 0x4a, 0xfc, 0x1e, 0xd1, 0xdf, 0x49, 0xb7, 0x6e, 0x87, 0x8b, 0xee, 0x13, 0x78,
- 0xc6, 0xb6, 0x53, 0x8a, 0x15, 0x3d, 0x01, 0xee, 0xfe, 0x73, 0xb8, 0x93, 0x45, 0x11, 0x44, 0x46,
- 0x74, 0x27, 0xc3, 0x04, 0x8e, 0xd2, 0x9d, 0x6c, 0x18, 0x03, 0xd9, 0xe3, 0xf8, 0x3b, 0x05, 0xba,
- 0x9b, 0x8f, 0xdb, 0x8d, 0xf6, 0x27, 0x52, 0xe6, 0xa3, 0xf4, 0xb7, 0x72, 0xa9, 0xfc, 0x9f, 0x31,
- 0x5f, 0xc9, 0xc3, 0x74, 0x1a, 0x8f, 0xe6, 0x24, 0x72, 0x13, 0x58, 0x37, 0x92, 0xb0, 0x2f, 0xfa,
- 0x79, 0xab, 0xe3, 0xef, 0x8c, 0xe9, 0x44, 0xc7, 0x15, 0x44, 0x8b, 0xc6, 0xab, 0x27, 0x0f, 0xda,
- 0xff, 0xca, 0xa5, 0x0a, 0x21, 0x15, 0x8a, 0x04, 0xb3, 0x15, 0x23, 0xe2, 0x14, 0x81, 0x9f, 0x12,
- 0xe9, 0x4d, 0x50, 0xa3, 0xcf, 0x59, 0x1d, 0xe8, 0x3c, 0x02, 0x35, 0x1a, 0xf3, 0x35, 0x3e, 0x8d,
- 0x4e, 0x22, 0xf7, 0x9f, 0x54, 0xa3, 0x43, 0x91, 0x8c, 0x49, 0xa3, 0x13, 0xe9, 0x65, 0x2f, 0xe3,
- 0x57, 0xce, 0xd1, 0x89, 0x54, 0xcd, 0xb2, 0x2f, 0x69, 0xff, 0x54, 0x04, 0x4a, 0x10, 0x47, 0xd8,
- 0xdf, 0xa1, 0xb1, 0x60, 0x3e, 0x24, 0x7c, 0x37, 0xca, 0x08, 0xf1, 0x5e, 0xf8, 0x70, 0x52, 0x85,
- 0x03, 0xe1, 0xa4, 0x4a, 0x60, 0xde, 0xb2, 0x7d, 0xe8, 0xda, 0x66, 0x77, 0xb9, 0x6b, 0x6e, 0x7b,
- 0xa7, 0xa7, 0x06, 0x5e, 0x5e, 0x57, 0x65, 0xf2, 0x18, 0xfc, 0x17, 0xec, 0x05, 0xa2, 0xd3, 0xfc,
- 0x05, 0xa2, 0x31, 0xd1, 0xaf, 0x66, 0xe2, 0xa3, 0x5f, 0x85, 0xd1, 0xad, 0xc0, 0xf0, 0xe0, 0xd8,
- 0xa2, 0xb6, 0x71, 0xca, 0x70, 0x7f, 0xb7, 0x09, 0x46, 0x61, 0x0b, 0x43, 0x3f, 0xbe, 0x46, 0x4e,
- 0xb5, 0xba, 0x87, 0x14, 0x61, 0xb1, 0x5f, 0x09, 0x52, 0x5b, 0xa8, 0x6c, 0xe5, 0xe5, 0xbe, 0xca,
- 0x87, 0x26, 0x4f, 0x5e, 0xc0, 0xe4, 0x61, 0x95, 0xaa, 0x20, 0x7a, 0xa7, 0xab, 0xf8, 0x62, 0xa1,
- 0x48, 0x6d, 0x27, 0x70, 0x1a, 0xa9, 0x00, 0x4e, 0x04, 0xd1, 0x6e, 0x7b, 0x3d, 0x68, 0xba, 0xa6,
- 0xdd, 0x86, 0xda, 0x27, 0xa5, 0x71, 0x98, 0xbd, 0xcb, 0x60, 0xda, 0x6a, 0x3b, 0x76, 0xd3, 0x7a,
- 0x4e, 0x70, 0xb9, 0x5c, 0x72, 0x90, 0x75, 0x2c, 0x91, 0x2a, 0xfd, 0xc2, 0x08, 0xbf, 0x55, 0xab,
- 0x60, 0xa6, 0x6d, 0xba, 0x1d, 0x12, 0x84, 0xaf, 0xd0, 0x77, 0x91, 0x53, 0x2c, 0xa1, 0x72, 0xf0,
- 0x89, 0x11, 0x7d, 0xad, 0x36, 0x78, 0x21, 0x16, 0xfb, 0xa2, 0x79, 0xc4, 0x12, 0xab, 0x44, 0x1f,
- 0x71, 0x32, 0x47, 0xd2, 0x71, 0x61, 0xd7, 0x24, 0x97, 0x8e, 0x4f, 0x91, 0x3b, 0xa2, 0xc3, 0x84,
- 0xb4, 0xcb, 0x03, 0xb8, 0xa8, 0x03, 0x68, 0x4c, 0x7a, 0x79, 0x40, 0x88, 0x8b, 0xec, 0x35, 0xf3,
- 0x5d, 0x45, 0x30, 0x4f, 0x7a, 0x35, 0x2a, 0x4e, 0xed, 0x45, 0x32, 0x28, 0x36, 0xa1, 0x7f, 0x1f,
- 0xdc, 0xd7, 0x9a, 0x87, 0x1f, 0x93, 0x15, 0x20, 0x5f, 0x0a, 0x03, 0x0e, 0xa2, 0xbf, 0x69, 0xf7,
- 0xed, 0x03, 0xbe, 0x16, 0x09, 0x4f, 0x93, 0xde, 0xb7, 0x4f, 0x2e, 0x3e, 0x7b, 0x7c, 0x7e, 0x52,
- 0x06, 0x72, 0xa9, 0xd3, 0xd1, 0xda, 0x87, 0x87, 0xe2, 0x7a, 0x30, 0x1b, 0xb4, 0x99, 0x28, 0x06,
- 0x24, 0x9b, 0x94, 0x76, 0x11, 0x34, 0x94, 0x4d, 0xa9, 0x33, 0xf1, 0x5d, 0x85, 0x84, 0xb2, 0xb3,
- 0x07, 0xe5, 0x0b, 0x53, 0xb4, 0xd1, 0x2c, 0x39, 0xce, 0x25, 0x7c, 0x54, 0xe6, 0x97, 0x64, 0x50,
- 0x58, 0x86, 0x7e, 0x7b, 0x47, 0xf3, 0xc6, 0xd2, 0x66, 0xfa, 0xee, 0x3d, 0x1f, 0x12, 0x94, 0x33,
- 0x6d, 0xf4, 0xe7, 0x80, 0xed, 0x45, 0xcc, 0xf2, 0xa4, 0xa3, 0x3f, 0x27, 0x96, 0x3e, 0x81, 0x43,
- 0x70, 0x79, 0xb0, 0x10, 0xae, 0x80, 0x11, 0xcc, 0xde, 0x91, 0x7b, 0xc4, 0xad, 0x87, 0x0e, 0xb1,
- 0x9b, 0xb5, 0x3f, 0x48, 0x17, 0x62, 0x2d, 0x94, 0x39, 0x5f, 0xf3, 0x8c, 0x17, 0x26, 0x53, 0x04,
- 0x5f, 0x13, 0x63, 0x70, 0x02, 0x2b, 0x00, 0x32, 0x98, 0xc6, 0x0c, 0x55, 0xac, 0xcb, 0xd8, 0xf5,
- 0x90, 0x5b, 0xa8, 0x7c, 0xee, 0x58, 0x16, 0x2a, 0xef, 0xe2, 0x17, 0x2a, 0x05, 0x23, 0x26, 0x07,
- 0xeb, 0x94, 0x29, 0x7d, 0x71, 0xd0, 0xf7, 0x63, 0x5f, 0xa6, 0x4c, 0xe1, 0x8b, 0x33, 0xa4, 0xfc,
- 0x09, 0xb8, 0x1e, 0xde, 0x4f, 0x3b, 0xeb, 0x60, 0x43, 0x56, 0xfb, 0x1f, 0x27, 0x40, 0xfe, 0x1c,
- 0xfa, 0xf3, 0x8f, 0xd1, 0x8d, 0x5a, 0x2f, 0x1f, 0x43, 0x70, 0x87, 0x67, 0x80, 0x3c, 0xa2, 0x4f,
- 0xa7, 0x3d, 0xb7, 0x88, 0xed, 0x0e, 0x23, 0x46, 0x0c, 0xfc, 0x9d, 0x7a, 0x0a, 0x14, 0x3d, 0x67,
- 0xcf, 0x6d, 0x23, 0xf3, 0x1b, 0x69, 0x0c, 0x7d, 0x4a, 0x1b, 0xd4, 0x94, 0x23, 0xbd, 0x38, 0x3e,
- 0x97, 0x53, 0xe6, 0x82, 0x25, 0x99, 0xbb, 0x60, 0x29, 0xc5, 0xfe, 0x83, 0x00, 0x6f, 0xd9, 0x6b,
- 0xc4, 0x9f, 0xe0, 0xbb, 0x06, 0x3b, 0xe3, 0x82, 0x3d, 0x46, 0x2c, 0x87, 0x55, 0x87, 0xb4, 0x0e,
- 0xe3, 0xbc, 0x68, 0xc3, 0x38, 0xf2, 0x13, 0x75, 0x18, 0x17, 0xe0, 0x61, 0x22, 0xa7, 0xdc, 0x8b,
- 0xd4, 0xc9, 0xf5, 0xc2, 0x38, 0xd1, 0xcd, 0x73, 0x4a, 0x7f, 0x28, 0x74, 0xc6, 0xe8, 0xfc, 0x3a,
- 0x32, 0x3a, 0x47, 0xe4, 0xfe, 0xfa, 0xeb, 0x32, 0x8e, 0xa4, 0x19, 0x18, 0x41, 0xe2, 0x17, 0x25,
- 0xa5, 0x86, 0x08, 0x8d, 0xc1, 0x5c, 0x1c, 0xe9, 0xf9, 0xd1, 0x43, 0x8b, 0xf3, 0xa2, 0x63, 0xf8,
- 0x9f, 0x74, 0x68, 0x71, 0x51, 0x46, 0xb2, 0x07, 0xf2, 0x17, 0xc9, 0xc5, 0x64, 0xa5, 0xb6, 0x6f,
- 0x5d, 0x1e, 0x73, 0x4b, 0xe3, 0x87, 0x97, 0x94, 0xd1, 0x84, 0x0f, 0x48, 0x88, 0x70, 0x38, 0xe9,
- 0x68, 0xc2, 0x62, 0x6c, 0x64, 0x0f, 0xd3, 0x57, 0x8b, 0x48, 0x7a, 0x74, 0x6d, 0xe7, 0x0d, 0x74,
- 0x35, 0x01, 0x1e, 0x1e, 0xad, 0xb3, 0x60, 0x8e, 0x59, 0x3a, 0x08, 0x2e, 0xbc, 0xe1, 0xd2, 0xd2,
- 0x1e, 0x94, 0x0f, 0x45, 0x36, 0xf6, 0x85, 0x85, 0x14, 0x0b, 0xc6, 0x22, 0x4c, 0x4c, 0xe4, 0x3e,
- 0xb9, 0x60, 0x0c, 0x9b, 0x10, 0x56, 0x1f, 0x62, 0xb1, 0x6a, 0xf0, 0x58, 0xdd, 0x21, 0x22, 0x26,
- 0xb1, 0x31, 0x4d, 0x68, 0xde, 0xf8, 0xce, 0x10, 0x2e, 0x83, 0x83, 0xeb, 0x19, 0x23, 0xf3, 0x91,
- 0x3d, 0x62, 0x3f, 0x4f, 0xba, 0xc3, 0x26, 0x31, 0xd9, 0xc7, 0xd3, 0x1d, 0xd2, 0xd9, 0x80, 0xcc,
- 0xcd, 0x06, 0x52, 0xfa, 0xeb, 0x47, 0x6e, 0xa8, 0x01, 0x73, 0xc3, 0x20, 0xca, 0x8f, 0xd9, 0x5f,
- 0x7f, 0x28, 0x07, 0xd9, 0x83, 0xf3, 0x75, 0x19, 0x80, 0x15, 0xd7, 0xd9, 0xeb, 0x35, 0xdc, 0x0e,
- 0x74, 0xb5, 0x3f, 0x8f, 0x26, 0x00, 0x3f, 0x35, 0x86, 0x09, 0xc0, 0x3a, 0x00, 0xdb, 0x21, 0x71,
- 0xaa, 0xe1, 0x4f, 0x14, 0x33, 0xf7, 0x23, 0xa6, 0x0c, 0x86, 0x06, 0x7f, 0x65, 0xed, 0xb3, 0x78,
- 0x8c, 0x93, 0xfa, 0xac, 0x88, 0xdc, 0x38, 0x27, 0x00, 0xef, 0x0e, 0xb1, 0x6e, 0x71, 0x58, 0x3f,
- 0xf3, 0x10, 0x9c, 0x64, 0x8f, 0xf9, 0x3f, 0x4c, 0x81, 0x59, 0xb2, 0xdd, 0x47, 0x64, 0xfa, 0x37,
- 0x11, 0xe8, 0x3f, 0x37, 0x06, 0xd0, 0x37, 0xc0, 0x9c, 0x13, 0x51, 0x27, 0x7d, 0x2a, 0xbb, 0x00,
- 0x93, 0x08, 0x3b, 0xc3, 0x97, 0xc1, 0x91, 0xd1, 0x3e, 0xce, 0x22, 0x6f, 0xf0, 0xc8, 0xdf, 0x95,
- 0x20, 0x6f, 0x86, 0xe2, 0x38, 0xa1, 0x7f, 0x4f, 0x08, 0xfd, 0x06, 0x07, 0x7d, 0xe9, 0x30, 0xac,
- 0x4c, 0x20, 0x5c, 0xbf, 0x0c, 0xf2, 0xf8, 0x74, 0xdd, 0x5b, 0x32, 0x9c, 0xdf, 0x9f, 0x06, 0x53,
- 0xb8, 0xc9, 0x86, 0xf3, 0x8e, 0xe0, 0x11, 0xbd, 0x31, 0xb7, 0x7c, 0xe8, 0x86, 0x2b, 0xb7, 0xc1,
- 0x23, 0xe2, 0x21, 0xf0, 0x6a, 0xf6, 0x4e, 0x17, 0xc9, 0x46, 0x66, 0x98, 0x30, 0xf2, 0xa4, 0x84,
- 0x95, 0xf8, 0xd8, 0xce, 0xdb, 0x8d, 0x32, 0x29, 0x19, 0xc2, 0x48, 0xf6, 0xc0, 0x7f, 0x31, 0x0f,
- 0x4e, 0x93, 0x55, 0xa5, 0x65, 0xd7, 0xd9, 0xed, 0xbb, 0x1d, 0xcb, 0x3a, 0xbc, 0x2e, 0xdc, 0x04,
- 0x16, 0x7c, 0xce, 0x9f, 0x9b, 0xea, 0x44, 0x5f, 0xaa, 0xf6, 0xbb, 0xac, 0x4f, 0xc6, 0xfd, 0x3c,
- 0x92, 0x4b, 0x09, 0x02, 0x8c, 0xe3, 0x3d, 0xf5, 0x42, 0xbd, 0x20, 0xa3, 0xcc, 0x22, 0x95, 0x3c,
- 0xd2, 0x9a, 0x65, 0xa8, 0x53, 0x05, 0x11, 0x9d, 0xfa, 0x60, 0xa8, 0x53, 0xff, 0x85, 0xd3, 0xa9,
- 0x95, 0xc3, 0x8b, 0x64, 0x02, 0x2b, 0x17, 0x0b, 0xa0, 0xb8, 0x6c, 0x75, 0x7d, 0xe8, 0x6a, 0x5f,
- 0xa6, 0xf3, 0xa8, 0x57, 0x67, 0xd8, 0xbd, 0x54, 0x40, 0x71, 0x0b, 0x97, 0x46, 0x0d, 0xb2, 0x5b,
- 0xc5, 0xb0, 0x21, 0x1c, 0x1a, 0xf4, 0xdb, 0xb4, 0xb1, 0xe3, 0xfa, 0xc8, 0x8c, 0x6d, 0x02, 0x96,
- 0x22, 0x76, 0xdc, 0x70, 0x16, 0x26, 0x72, 0x6d, 0x52, 0xd1, 0x80, 0xbb, 0x68, 0x04, 0xb9, 0x94,
- 0x1d, 0xc2, 0x0a, 0x90, 0xad, 0x8e, 0x87, 0x9b, 0xde, 0x8c, 0x81, 0xfe, 0xa6, 0xf5, 0x64, 0xe9,
- 0x17, 0x15, 0x61, 0x79, 0xd2, 0x9e, 0x2c, 0x42, 0x5c, 0x64, 0x8f, 0xd9, 0xb7, 0xb0, 0x1b, 0x63,
- 0xaf, 0x6b, 0xb6, 0x21, 0xe2, 0x3e, 0x33, 0xd4, 0x16, 0x80, 0x64, 0x05, 0x23, 0xbe, 0x64, 0xb1,
- 0xed, 0xb4, 0x70, 0x88, 0x76, 0x3a, 0xea, 0x22, 0x57, 0x28, 0x73, 0x5c, 0xf1, 0x23, 0x5b, 0xe4,
- 0x4a, 0x64, 0x63, 0x02, 0x97, 0x62, 0x06, 0xc7, 0x3c, 0x27, 0xda, 0x5a, 0x47, 0xdd, 0x02, 0xa0,
- 0xc2, 0x1a, 0xdb, 0x91, 0xce, 0x51, 0xb6, 0x00, 0xe2, 0x79, 0x98, 0x00, 0x5a, 0x0b, 0x14, 0xad,
- 0xcf, 0xd3, 0x61, 0x34, 0xe3, 0x5d, 0x38, 0xcf, 0x71, 0xfd, 0x74, 0xbb, 0x70, 0x88, 0x3b, 0x03,
- 0x7f, 0x97, 0xf6, 0x58, 0x10, 0x7f, 0xea, 0x77, 0x5c, 0xc3, 0x67, 0x8a, 0x63, 0x41, 0xc3, 0x18,
- 0xc8, 0x1e, 0xde, 0xb7, 0x1e, 0xd1, 0xe0, 0x39, 0x6a, 0x73, 0xa4, 0x6d, 0x60, 0x6c, 0x43, 0xe7,
- 0x28, 0xcd, 0x31, 0x9e, 0x87, 0xec, 0xf1, 0xfa, 0x7b, 0x66, 0xe0, 0x7c, 0xd3, 0x04, 0x07, 0xce,
- 0xa0, 0x65, 0x16, 0x46, 0x6c, 0x99, 0xa3, 0xee, 0x2e, 0x50, 0x59, 0x8f, 0x6f, 0xc0, 0x1c, 0x65,
- 0x77, 0x21, 0x81, 0x89, 0xec, 0x11, 0x7f, 0xb3, 0x0c, 0x0a, 0xcd, 0xc9, 0x8f, 0x97, 0xa3, 0xce,
- 0x45, 0xb0, 0xac, 0x9a, 0x63, 0x1b, 0x2e, 0x47, 0x99, 0x8b, 0xc4, 0xb2, 0x30, 0x81, 0xb0, 0xf0,
- 0xc7, 0xc1, 0x1c, 0x9e, 0x70, 0x07, 0x9b, 0x78, 0x7f, 0x4f, 0x47, 0xcd, 0xd7, 0x67, 0xd8, 0x56,
- 0xef, 0x05, 0xd3, 0xc1, 0xee, 0x10, 0x1d, 0x39, 0x17, 0xc5, 0xda, 0x67, 0xc0, 0xa5, 0x11, 0x7e,
- 0x7f, 0xa8, 0xad, 0xf6, 0xb1, 0xef, 0x04, 0x8e, 0xba, 0xd5, 0x7e, 0xa4, 0xbb, 0x81, 0xbf, 0x13,
- 0x8d, 0xa8, 0xff, 0x35, 0x3b, 0xcc, 0xfb, 0x77, 0x09, 0xf3, 0x03, 0x76, 0x09, 0x3f, 0xc9, 0x62,
- 0xd9, 0xe4, 0xb1, 0xbc, 0x5b, 0x54, 0x84, 0x63, 0x1c, 0x6b, 0xdf, 0x1b, 0xc2, 0x79, 0x8e, 0x83,
- 0x73, 0xe9, 0x50, 0xbc, 0x4c, 0xe0, 0x58, 0x5e, 0x3e, 0x1a, 0x73, 0x3f, 0x95, 0x61, 0x3b, 0xee,
- 0xf3, 0xf9, 0xcf, 0x1f, 0xf0, 0xf9, 0xe7, 0x5a, 0x7a, 0xe1, 0x90, 0x2d, 0xfd, 0x53, 0xac, 0x76,
- 0xb4, 0x78, 0xed, 0x78, 0x86, 0x38, 0x22, 0xe3, 0x1b, 0x99, 0xdf, 0x17, 0xaa, 0xc7, 0x79, 0x4e,
- 0x3d, 0xca, 0x87, 0x63, 0x26, 0x7b, 0xfd, 0xf8, 0x8d, 0x60, 0x42, 0x7b, 0xc4, 0xed, 0x7d, 0xd4,
- 0x8d, 0x48, 0x4e, 0x88, 0x63, 0x1b, 0xb9, 0x47, 0xd9, 0x88, 0x1c, 0xc6, 0xc9, 0x04, 0x22, 0x85,
- 0xcd, 0x83, 0x59, 0xcc, 0xd3, 0x79, 0xab, 0xb3, 0x0d, 0x7d, 0xed, 0x35, 0xc4, 0x03, 0x2e, 0x88,
- 0xcb, 0x38, 0xa6, 0xe0, 0x39, 0x71, 0xa7, 0x31, 0xd3, 0xfa, 0x0b, 0x10, 0x26, 0x17, 0x19, 0x06,
- 0x27, 0x1d, 0xdf, 0x6f, 0x28, 0x07, 0xd9, 0x43, 0xf6, 0x71, 0xe2, 0xcc, 0x51, 0x33, 0xf7, 0x9d,
- 0x3d, 0x5f, 0x7b, 0x68, 0x0c, 0x1d, 0xf4, 0x12, 0x28, 0x76, 0x31, 0x35, 0xea, 0xf4, 0x9f, 0x3c,
- 0xdd, 0xa1, 0x22, 0x20, 0xe5, 0x1b, 0xf4, 0xcb, 0xb4, 0x9e, 0xff, 0x91, 0x1c, 0x09, 0x9d, 0x49,
- 0x7b, 0xfe, 0x0f, 0x29, 0x7f, 0x22, 0x37, 0xc0, 0x4c, 0xa3, 0xd2, 0xad, 0x5d, 0xcb, 0x1f, 0x53,
- 0x7c, 0x81, 0x2e, 0xa2, 0x15, 0xc4, 0x17, 0xc0, 0x0f, 0x69, 0xcf, 0x33, 0x32, 0x52, 0x41, 0x9f,
- 0x4f, 0xfa, 0x3c, 0x63, 0x72, 0xf1, 0xd9, 0x63, 0xf2, 0x33, 0xa4, 0x65, 0x9d, 0x23, 0xae, 0x9d,
- 0x19, 0x7a, 0x8d, 0x8e, 0xdc, 0x58, 0x08, 0x6b, 0x47, 0xd7, 0x58, 0x06, 0x96, 0x9f, 0x3d, 0x30,
- 0xbf, 0xf4, 0xdd, 0xa0, 0x50, 0x81, 0x17, 0xf7, 0xb6, 0xb5, 0xbb, 0xc0, 0x74, 0xcb, 0x85, 0xb0,
- 0x6a, 0x6f, 0x39, 0x48, 0xba, 0x3e, 0xfa, 0x1f, 0x40, 0x42, 0x9f, 0x10, 0x1e, 0x3b, 0xd0, 0xec,
- 0x44, 0xa7, 0x9b, 0x82, 0x47, 0xed, 0xe5, 0x12, 0xc8, 0x37, 0x7d, 0xd3, 0xd7, 0x66, 0x42, 0x6c,
- 0xb5, 0x87, 0x58, 0x2c, 0xee, 0xe2, 0xb1, 0xb8, 0x89, 0x93, 0x05, 0xe6, 0x60, 0x11, 0x7d, 0x1f,
- 0x03, 0x80, 0x06, 0xa6, 0x1f, 0xf0, 0x1c, 0x1b, 0xe5, 0x08, 0x0e, 0xe0, 0x05, 0xcf, 0xda, 0xab,
- 0x42, 0x71, 0xdf, 0xc3, 0x89, 0xfb, 0xf1, 0x62, 0x45, 0x4c, 0x60, 0xa5, 0x4d, 0x02, 0x33, 0x48,
- 0xb4, 0xab, 0xd0, 0xec, 0x78, 0xda, 0x77, 0x45, 0xca, 0x1f, 0x23, 0x66, 0xed, 0xc3, 0xc2, 0xa1,
- 0x22, 0x49, 0xad, 0x42, 0xe2, 0xf1, 0xfe, 0x02, 0x41, 0xa8, 0x0c, 0x89, 0x0f, 0x95, 0x71, 0x1b,
- 0xc8, 0x5b, 0xf6, 0x96, 0x43, 0xbd, 0xd7, 0x1e, 0x1d, 0x43, 0x1b, 0xe9, 0x84, 0x81, 0x33, 0x0a,
- 0xc6, 0x91, 0x4c, 0x66, 0x6b, 0x22, 0x57, 0xb2, 0xe5, 0x51, 0xe9, 0xda, 0xff, 0x31, 0x54, 0xd8,
- 0xaa, 0x0a, 0xf2, 0x3d, 0xd3, 0xdf, 0xa1, 0x45, 0xe3, 0xff, 0xc8, 0x46, 0xde, 0xb3, 0x4d, 0xdb,
- 0xb1, 0xf7, 0x77, 0xad, 0xe7, 0x84, 0x37, 0xbf, 0x72, 0x69, 0x88, 0xf3, 0x6d, 0x68, 0x43, 0xd7,
- 0xf4, 0x61, 0xf3, 0xf2, 0x36, 0x9e, 0x63, 0x4d, 0x1b, 0x6c, 0x52, 0x6a, 0xfd, 0x47, 0x1c, 0xc7,
- 0xeb, 0xff, 0x96, 0xd5, 0x85, 0x38, 0x8e, 0x10, 0xd5, 0xff, 0xe0, 0x39, 0x95, 0xfe, 0x0f, 0x28,
- 0x22, 0x7b, 0x34, 0xfe, 0x55, 0x02, 0x73, 0x4d, 0xa4, 0x70, 0xcd, 0xbd, 0xdd, 0x5d, 0xd3, 0xdd,
- 0xd7, 0x6e, 0x88, 0x50, 0x61, 0x54, 0x33, 0xc7, 0xa9, 0xa6, 0xf6, 0xeb, 0xc2, 0x97, 0x1e, 0xd3,
- 0xa6, 0xcd, 0x94, 0x90, 0xba, 0x1d, 0x3c, 0x09, 0x14, 0x90, 0x7a, 0x07, 0xfe, 0x7c, 0x89, 0x0d,
- 0x81, 0xe4, 0x14, 0x8c, 0xb7, 0x34, 0x94, 0xb7, 0x09, 0xc4, 0x7a, 0x90, 0xc0, 0xf1, 0xa6, 0x6f,
- 0xb6, 0x2f, 0xad, 0x38, 0xae, 0xb3, 0xe7, 0x5b, 0x36, 0xf4, 0xb4, 0xc7, 0x44, 0x08, 0x04, 0xfa,
- 0x9f, 0x8b, 0xf4, 0x5f, 0xfb, 0xf7, 0x9c, 0xe8, 0x28, 0x1a, 0x76, 0xab, 0x2c, 0xf9, 0x98, 0xf0,
- 0x49, 0x62, 0xe3, 0xa2, 0x08, 0xc5, 0xec, 0x85, 0xf6, 0x26, 0x19, 0x28, 0xfa, 0x83, 0x3d, 0xc7,
- 0xf5, 0x6b, 0x4e, 0xdb, 0xec, 0x7a, 0xbe, 0xe3, 0x42, 0xad, 0x91, 0x28, 0x35, 0xd4, 0xc3, 0x74,
- 0x9c, 0x76, 0x34, 0x38, 0xd2, 0x27, 0x56, 0xed, 0x64, 0x5e, 0xc7, 0x3f, 0x2e, 0xbc, 0xcb, 0x48,
- 0xa4, 0xd2, 0xcf, 0x51, 0x8c, 0x9e, 0x0f, 0xea, 0xd2, 0xd2, 0xb9, 0xe2, 0x8b, 0xed, 0x3c, 0x0a,
- 0x31, 0x35, 0x81, 0xa5, 0x72, 0x09, 0xcc, 0x37, 0xf7, 0x2e, 0x86, 0x44, 0x3c, 0xd6, 0x08, 0x79,
- 0xad, 0x70, 0x8c, 0x04, 0xaa, 0x78, 0x2c, 0xa1, 0x18, 0xf9, 0xde, 0x08, 0xe6, 0x3d, 0x36, 0x1b,
- 0xc5, 0x9b, 0x4f, 0x14, 0x8c, 0x8d, 0x30, 0xbc, 0xd4, 0xec, 0x05, 0xf8, 0x3e, 0x09, 0xcc, 0x37,
- 0x7a, 0xd0, 0x86, 0x1d, 0xe2, 0x63, 0xc7, 0x09, 0xf0, 0xe5, 0x29, 0x05, 0xc8, 0x11, 0x8a, 0x11,
- 0x60, 0xe4, 0x0f, 0x5b, 0x09, 0x84, 0x17, 0x25, 0xa4, 0x12, 0x5c, 0x52, 0x69, 0xd9, 0x0b, 0xee,
- 0x4b, 0x12, 0x98, 0x35, 0xf6, 0xec, 0x75, 0xd7, 0x41, 0xa3, 0xb1, 0xab, 0xdd, 0x1d, 0x75, 0x10,
- 0xb7, 0x82, 0x13, 0x9d, 0x3d, 0x17, 0xaf, 0x3f, 0x55, 0xed, 0x26, 0x6c, 0x3b, 0x76, 0xc7, 0xc3,
- 0xf5, 0x28, 0x18, 0x07, 0x5f, 0xdc, 0x99, 0x7f, 0xc1, 0x5f, 0xc9, 0x39, 0xed, 0x45, 0xc2, 0x81,
- 0x58, 0x48, 0xe5, 0x99, 0xa2, 0xc5, 0x7b, 0x02, 0xc1, 0x70, 0x2b, 0xc3, 0x4a, 0xc8, 0x5e, 0xb8,
- 0x9f, 0x97, 0x80, 0x5a, 0x6a, 0xb7, 0x9d, 0x3d, 0xdb, 0x6f, 0xc2, 0x2e, 0x6c, 0xfb, 0x2d, 0xd7,
- 0x6c, 0x43, 0xd6, 0x7e, 0x56, 0x80, 0xdc, 0xb1, 0x5c, 0xda, 0x07, 0xa3, 0xbf, 0x54, 0x8e, 0x2f,
- 0x17, 0xde, 0x71, 0x24, 0xb5, 0x3c, 0x58, 0x4a, 0x0a, 0x71, 0x8a, 0xed, 0x2b, 0x0a, 0x16, 0x94,
- 0xbd, 0x54, 0x3f, 0x25, 0x81, 0x99, 0xa0, 0xc7, 0xde, 0x16, 0x11, 0xe6, 0xcf, 0xa4, 0x9c, 0x8c,
- 0x84, 0xc4, 0x53, 0xc8, 0xf0, 0x5d, 0x29, 0x66, 0x15, 0x71, 0xf4, 0xd3, 0x89, 0xae, 0x94, 0x5e,
- 0x74, 0xe8, 0xb1, 0xde, 0xd8, 0x5c, 0x6e, 0xd4, 0x2a, 0xba, 0xa1, 0xc8, 0xda, 0x97, 0x25, 0x90,
- 0x5f, 0xb7, 0xec, 0x6d, 0x36, 0x5e, 0xd6, 0x49, 0x64, 0x47, 0x76, 0xe0, 0x83, 0xb4, 0xa5, 0x93,
- 0x07, 0xf5, 0x76, 0x70, 0xd2, 0xde, 0xdb, 0xbd, 0x08, 0xdd, 0xc6, 0x16, 0x1e, 0x65, 0xbd, 0x96,
- 0xd3, 0x84, 0x36, 0x31, 0x42, 0x0b, 0xc6, 0xc0, 0x77, 0xbc, 0x09, 0x26, 0x30, 0x79, 0x40, 0x9c,
- 0xc4, 0x48, 0x3c, 0x64, 0x4a, 0x62, 0x98, 0x4a, 0x35, 0x6d, 0x18, 0x40, 0x3c, 0x7b, 0x4d, 0xfd,
- 0xcd, 0x02, 0xb8, 0xba, 0x64, 0xef, 0x63, 0x9b, 0x82, 0x74, 0xf0, 0xe5, 0x1d, 0xd3, 0xde, 0x86,
- 0x78, 0x80, 0x08, 0x25, 0xce, 0x06, 0x90, 0xcf, 0xf1, 0x01, 0xe4, 0x55, 0x03, 0x4c, 0x39, 0x6e,
- 0x07, 0xba, 0x4b, 0xfb, 0x98, 0xa7, 0xfe, 0x65, 0x67, 0xda, 0x26, 0x07, 0x15, 0xb1, 0x48, 0xc9,
- 0x2f, 0x36, 0xc8, 0xf7, 0x46, 0x40, 0xe8, 0xec, 0xad, 0x60, 0x8a, 0xa6, 0xa9, 0x73, 0x60, 0xba,
- 0x61, 0x54, 0x74, 0x63, 0xb3, 0x5a, 0x51, 0x8e, 0xa9, 0x57, 0x81, 0xe3, 0xd5, 0x96, 0x6e, 0x94,
- 0x5a, 0xd5, 0x46, 0x7d, 0x13, 0xa7, 0x2b, 0x39, 0xed, 0xf9, 0x79, 0x51, 0xcf, 0xde, 0x64, 0x66,
- 0x06, 0xc1, 0x6a, 0x80, 0xa9, 0x36, 0xc9, 0x80, 0x87, 0xd0, 0xd9, 0x54, 0xb5, 0xa3, 0x04, 0x49,
- 0x82, 0x11, 0x10, 0x52, 0xcf, 0x00, 0x70, 0xc5, 0x75, 0xec, 0xed, 0xe8, 0x4c, 0xdb, 0xb4, 0xc1,
- 0xa4, 0x68, 0x0f, 0xe5, 0x40, 0x91, 0x7c, 0x83, 0x2f, 0xcc, 0xc0, 0xff, 0x22, 0xc1, 0x07, 0xcf,
- 0xc8, 0xe2, 0xc5, 0xf2, 0x8a, 0x26, 0x5a, 0xf4, 0x11, 0xe9, 0x22, 0x91, 0x01, 0xb1, 0x84, 0x69,
- 0x55, 0x6e, 0x03, 0x45, 0xf2, 0x2d, 0xf5, 0x3a, 0x88, 0x0f, 0x7e, 0x49, 0xb2, 0x09, 0xfa, 0x29,
- 0x8b, 0xcb, 0x34, 0x7b, 0x6d, 0xfe, 0x88, 0x04, 0xa6, 0xeb, 0xd0, 0x2f, 0xef, 0xc0, 0xf6, 0x25,
- 0xed, 0x71, 0xfc, 0x02, 0x68, 0xd7, 0x82, 0xb6, 0x7f, 0x61, 0xb7, 0x1b, 0x2e, 0x80, 0x06, 0x09,
- 0xda, 0x0b, 0xd9, 0xce, 0xf7, 0x99, 0xbc, 0xfe, 0xdc, 0x32, 0xa0, 0xae, 0x41, 0x09, 0x31, 0x2a,
- 0x73, 0x0a, 0x14, 0x5d, 0xe8, 0xed, 0x75, 0x83, 0x45, 0x34, 0xfa, 0xa4, 0x3d, 0x1c, 0x8a, 0xb3,
- 0xcc, 0x89, 0xf3, 0x36, 0xf1, 0x22, 0x26, 0x10, 0x4d, 0x33, 0x0f, 0xa6, 0xaa, 0xb6, 0xe5, 0x5b,
- 0x66, 0x57, 0x7b, 0x51, 0x1e, 0xcc, 0x37, 0xa1, 0xbf, 0x6e, 0xba, 0xe6, 0x2e, 0xf4, 0xa1, 0xeb,
- 0x69, 0xdf, 0xe4, 0xfb, 0x84, 0x5e, 0xd7, 0xf4, 0xb7, 0x1c, 0x77, 0x37, 0x50, 0xcd, 0xe0, 0x19,
- 0xa9, 0xe6, 0x65, 0xe8, 0x7a, 0x11, 0x5f, 0xc1, 0x23, 0x7a, 0x73, 0xc5, 0x71, 0x2f, 0xa1, 0x41,
- 0x90, 0x4e, 0xd3, 0xe8, 0x23, 0xa2, 0xd7, 0x75, 0xb6, 0x6b, 0xf0, 0x32, 0x0c, 0x82, 0x75, 0x85,
- 0xcf, 0x68, 0x2e, 0xd0, 0x71, 0xea, 0x8e, 0x8f, 0x3a, 0xed, 0x9a, 0xb3, 0x4d, 0xa2, 0x99, 0x4e,
- 0x1b, 0x7c, 0x62, 0x94, 0xcb, 0xbc, 0x0c, 0x71, 0xae, 0x22, 0x9b, 0x8b, 0x26, 0xaa, 0x8b, 0x40,
- 0x0d, 0x3f, 0x6b, 0xc1, 0x2e, 0xdc, 0x85, 0xbe, 0xbb, 0x8f, 0x2f, 0x2d, 0x98, 0x36, 0x06, 0xbc,
- 0xa1, 0x03, 0xb4, 0xf8, 0x64, 0x9d, 0x4a, 0x6f, 0x91, 0x93, 0xdc, 0xa1, 0x26, 0xeb, 0x22, 0x14,
- 0x27, 0x72, 0x29, 0x93, 0x8c, 0xac, 0x99, 0x57, 0xc8, 0x20, 0x8f, 0x07, 0xcf, 0x37, 0xe7, 0xb8,
- 0x15, 0xa6, 0x5d, 0xe8, 0x79, 0xe6, 0x36, 0x0c, 0x56, 0x98, 0xe8, 0xa3, 0x7a, 0x07, 0x28, 0x74,
- 0x31, 0xa6, 0x64, 0x70, 0xb8, 0x81, 0xab, 0x19, 0x32, 0x30, 0x10, 0xad, 0x70, 0x24, 0xc0, 0x70,
- 0x1b, 0xe4, 0x8b, 0xb3, 0xf7, 0x82, 0x02, 0x81, 0x7f, 0x06, 0x14, 0x2a, 0xfa, 0xd2, 0xc6, 0x8a,
- 0x72, 0x0c, 0xfd, 0x0d, 0xf8, 0x9b, 0x01, 0x85, 0xe5, 0x52, 0xab, 0x54, 0x53, 0x24, 0x54, 0x8f,
- 0x6a, 0x7d, 0xb9, 0xa1, 0xc8, 0x28, 0x71, 0xbd, 0x54, 0xaf, 0x96, 0x95, 0xbc, 0x3a, 0x0b, 0xa6,
- 0xce, 0x97, 0x8c, 0x7a, 0xb5, 0xbe, 0xa2, 0x14, 0xb4, 0xaf, 0xb2, 0xf8, 0xdd, 0xc9, 0xe3, 0x77,
- 0x63, 0x1c, 0x4f, 0x83, 0x20, 0xfb, 0x85, 0x10, 0xb2, 0xbb, 0x39, 0xc8, 0xbe, 0x5b, 0x84, 0xc8,
- 0x04, 0xdc, 0x99, 0x8a, 0x60, 0x6a, 0xdd, 0x75, 0xda, 0xd0, 0xf3, 0xb4, 0x9f, 0x95, 0x40, 0xb1,
- 0x6c, 0xda, 0x6d, 0xd8, 0xd5, 0xae, 0x89, 0xa0, 0x22, 0xae, 0xa2, 0xb9, 0xc0, 0x55, 0x54, 0xfb,
- 0x7a, 0x4e, 0xb4, 0xf7, 0xa3, 0x74, 0x17, 0x09, 0xcd, 0x18, 0xf9, 0x88, 0xf5, 0x72, 0x89, 0xa4,
- 0x26, 0x70, 0x71, 0x8b, 0x04, 0x66, 0xe8, 0x6a, 0xc0, 0x45, 0xc8, 0xce, 0xc3, 0xbf, 0x99, 0x13,
- 0x9d, 0x1c, 0x06, 0x35, 0x08, 0xc9, 0xc4, 0xc8, 0x43, 0x6c, 0x22, 0x38, 0x8c, 0xda, 0x04, 0x36,
- 0x0f, 0x25, 0x30, 0xbb, 0x61, 0x7b, 0x83, 0x84, 0x22, 0x1e, 0xe5, 0x3d, 0xa8, 0x06, 0x43, 0xe8,
- 0x50, 0x51, 0xde, 0x87, 0xd3, 0xcb, 0x5e, 0x30, 0xdf, 0xcc, 0x81, 0x93, 0x2b, 0xd0, 0x86, 0xae,
- 0xd5, 0x26, 0x35, 0x08, 0x24, 0x71, 0x37, 0x2f, 0x89, 0xc7, 0x71, 0x9c, 0x0f, 0xfa, 0x82, 0x97,
- 0xc0, 0xab, 0x43, 0x09, 0x3c, 0x93, 0x93, 0xc0, 0xad, 0x82, 0x74, 0x26, 0x70, 0x5b, 0xf7, 0x0c,
- 0x98, 0xab, 0x3b, 0xbe, 0xb5, 0x65, 0xb5, 0x89, 0x0f, 0xda, 0xcf, 0xcb, 0x20, 0x5f, 0xb3, 0x3c,
- 0x5f, 0x2b, 0x45, 0xdd, 0xc9, 0xf5, 0x60, 0xd6, 0xb2, 0xdb, 0xdd, 0xbd, 0x0e, 0x34, 0xa0, 0x49,
- 0xfa, 0x95, 0x69, 0x83, 0x4d, 0x8a, 0xb6, 0xf6, 0x11, 0x5b, 0x72, 0xb0, 0xb5, 0xff, 0xdb, 0xc2,
- 0xcb, 0x30, 0x2c, 0x0b, 0x38, 0xdc, 0x61, 0x8c, 0xdd, 0x55, 0x02, 0xf3, 0x36, 0x93, 0x35, 0x30,
- 0xd8, 0xfb, 0xc3, 0xdd, 0xb3, 0xe4, 0x0c, 0xfe, 0x0b, 0xed, 0x03, 0x42, 0x8d, 0x75, 0x18, 0x43,
- 0xe9, 0x90, 0x59, 0x1e, 0x61, 0x92, 0xac, 0x82, 0x85, 0x6a, 0xbd, 0xa5, 0x1b, 0xf5, 0x52, 0x8d,
- 0x66, 0x91, 0xb5, 0x7f, 0x95, 0x40, 0xc1, 0x80, 0xbd, 0xee, 0x3e, 0x1b, 0xcf, 0x98, 0x3a, 0x8a,
- 0xe7, 0x42, 0x47, 0x71, 0x75, 0x19, 0x00, 0xb3, 0x8d, 0x0a, 0xc6, 0x17, 0x3e, 0x49, 0x03, 0xa3,
- 0x64, 0x72, 0x15, 0x2c, 0x85, 0xb9, 0x0d, 0xe6, 0x4b, 0xed, 0xc5, 0xc2, 0x3b, 0x47, 0x1c, 0x35,
- 0xcc, 0x61, 0x4c, 0x9f, 0xf0, 0x41, 0xa1, 0xcd, 0x9e, 0xa1, 0xe4, 0x8e, 0x46, 0xfc, 0x5f, 0x91,
- 0x40, 0xbe, 0x85, 0x7a, 0x4b, 0xa6, 0xe3, 0xfc, 0xec, 0x68, 0x3a, 0x8e, 0xc8, 0xc4, 0xe8, 0xf8,
- 0x3d, 0x60, 0x8e, 0xd5, 0x58, 0xea, 0x2a, 0x91, 0xa8, 0xe2, 0xdc, 0x07, 0xa3, 0x68, 0xf8, 0x00,
- 0x76, 0x8e, 0x46, 0xc4, 0x9f, 0x7e, 0x3c, 0x00, 0x6b, 0x70, 0xf7, 0x22, 0x74, 0xbd, 0x1d, 0xab,
- 0xa7, 0xfd, 0xb5, 0x0c, 0x66, 0x56, 0xa0, 0xdf, 0xf4, 0x4d, 0x7f, 0xcf, 0xeb, 0xdb, 0xee, 0xb4,
- 0x9d, 0xb2, 0xd9, 0xde, 0x81, 0xb4, 0x3b, 0x0a, 0x1e, 0xb5, 0xf7, 0xc8, 0xa2, 0xfe, 0x44, 0x51,
- 0x39, 0x8b, 0x61, 0x19, 0x31, 0x98, 0x3c, 0x01, 0xe4, 0x3b, 0xa6, 0x6f, 0x52, 0x2c, 0xae, 0xe9,
- 0xc3, 0x22, 0x22, 0x64, 0xe0, 0x6c, 0xda, 0x3b, 0x24, 0x11, 0x87, 0x22, 0x81, 0xf2, 0xd3, 0x81,
- 0xf0, 0x81, 0xdc, 0x08, 0x28, 0x9c, 0x00, 0xf3, 0xf5, 0x46, 0x6b, 0xb3, 0xd6, 0x58, 0x59, 0xd1,
- 0x51, 0xaa, 0x22, 0xab, 0xa7, 0x80, 0xba, 0x5e, 0xba, 0xb0, 0xa6, 0xd7, 0x5b, 0x9b, 0xf5, 0x46,
- 0x45, 0xa7, 0x5f, 0xe6, 0xd5, 0xe3, 0x60, 0xb6, 0x5c, 0x2a, 0xaf, 0x06, 0x09, 0x05, 0xf5, 0x34,
- 0x38, 0xb9, 0xa6, 0xaf, 0x2d, 0xe9, 0x46, 0x73, 0xb5, 0xba, 0xbe, 0x89, 0xc8, 0x2c, 0x37, 0x36,
- 0xea, 0x15, 0xa5, 0xa8, 0x6a, 0xe0, 0x14, 0xf3, 0xe6, 0xbc, 0xd1, 0xa8, 0xaf, 0x6c, 0x36, 0x5b,
- 0xa5, 0x96, 0xae, 0x4c, 0xa9, 0x57, 0x81, 0xe3, 0xe5, 0x52, 0x1d, 0x67, 0x2f, 0x37, 0xea, 0x75,
- 0xbd, 0xdc, 0x52, 0xa6, 0xb5, 0x7f, 0xcf, 0x83, 0xd9, 0xaa, 0x57, 0x37, 0x77, 0xe1, 0x39, 0xb3,
- 0x6b, 0x75, 0xb4, 0x17, 0x31, 0x33, 0x8f, 0x1b, 0xc1, 0xbc, 0x4b, 0xfe, 0xc2, 0x4e, 0xcb, 0x82,
- 0x04, 0xcd, 0x79, 0x83, 0x4f, 0x44, 0x73, 0x72, 0x1b, 0x13, 0x08, 0xe6, 0xe4, 0xe4, 0x49, 0x5d,
- 0x02, 0x80, 0xfc, 0x6b, 0x45, 0x57, 0x8f, 0x9e, 0xed, 0x6f, 0x4d, 0xe6, 0x2e, 0xf4, 0xa0, 0x7b,
- 0xd9, 0x6a, 0xc3, 0x20, 0xa7, 0xc1, 0x7c, 0xa5, 0xfd, 0x99, 0x2c, 0xba, 0xbf, 0xc8, 0x80, 0xca,
- 0x54, 0x27, 0xa6, 0x37, 0xfc, 0x51, 0x59, 0x64, 0x77, 0x50, 0x88, 0x64, 0x3a, 0x4d, 0x79, 0xa9,
- 0x34, 0xda, 0xb2, 0x6d, 0xab, 0xd1, 0xd8, 0x6c, 0xae, 0x36, 0x8c, 0x96, 0x22, 0xab, 0x73, 0x60,
- 0x1a, 0x3d, 0xd6, 0x1a, 0xf5, 0x15, 0x25, 0xaf, 0x5e, 0x0d, 0x4e, 0xac, 0x96, 0x9a, 0x9b, 0xd5,
- 0xfa, 0xb9, 0x52, 0xad, 0x5a, 0xd9, 0x2c, 0xaf, 0x96, 0x8c, 0xa6, 0x52, 0x50, 0xaf, 0x01, 0x57,
- 0xb7, 0xaa, 0xba, 0xb1, 0xb9, 0xac, 0x97, 0x5a, 0x1b, 0x86, 0xde, 0xdc, 0xac, 0x37, 0x36, 0xeb,
- 0xa5, 0x35, 0x5d, 0x29, 0xa2, 0xe6, 0x8f, 0x5f, 0x45, 0x6a, 0x33, 0x75, 0x50, 0x19, 0xa7, 0x63,
- 0x94, 0x71, 0xa6, 0x5f, 0x19, 0x01, 0xab, 0x56, 0x86, 0xde, 0xd4, 0x8d, 0x73, 0xba, 0x32, 0x3b,
- 0x48, 0xd7, 0xe6, 0xd4, 0x93, 0x40, 0x41, 0x3c, 0x6c, 0x56, 0x9b, 0x41, 0xce, 0x8a, 0x32, 0xaf,
- 0x7d, 0xaa, 0x08, 0x4e, 0x19, 0x70, 0xdb, 0xf2, 0x7c, 0xe8, 0xae, 0x9b, 0xfb, 0xbb, 0xd0, 0xf6,
- 0x83, 0x4e, 0xfe, 0x9f, 0x53, 0x2b, 0xe3, 0x1a, 0x98, 0xef, 0x11, 0x1a, 0x6b, 0xd0, 0xdf, 0x71,
- 0x3a, 0x74, 0x14, 0x7e, 0x5c, 0x6c, 0xcf, 0xb1, 0xb8, 0xce, 0x66, 0x37, 0xf8, 0xaf, 0x19, 0xdd,
- 0x96, 0x13, 0x74, 0x3b, 0x3f, 0x8a, 0x6e, 0xab, 0xd7, 0x82, 0x99, 0x3d, 0x0f, 0xba, 0xfa, 0xae,
- 0x69, 0x75, 0x83, 0xab, 0x23, 0xc3, 0x04, 0xed, 0x9d, 0x79, 0xd1, 0x13, 0x2b, 0x4c, 0x5d, 0x06,
- 0x8b, 0x31, 0xa6, 0x6f, 0x3d, 0x03, 0x00, 0xad, 0xec, 0x86, 0xdb, 0xa5, 0xca, 0xca, 0xa4, 0x20,
- 0xfe, 0x2e, 0x5a, 0xdd, 0xae, 0x65, 0x6f, 0x87, 0xfb, 0xfe, 0x51, 0x82, 0xf6, 0x52, 0x59, 0xe4,
- 0x04, 0x4b, 0x5a, 0xde, 0xd2, 0xb5, 0xa6, 0x17, 0x4b, 0x13, 0xee, 0x77, 0x0f, 0x36, 0x9d, 0xa2,
- 0xaa, 0x80, 0x39, 0x9c, 0x46, 0x5b, 0xa0, 0x32, 0x85, 0xfa, 0xe0, 0x80, 0xdc, 0x9a, 0xde, 0x5a,
- 0x6d, 0x54, 0xc2, 0x77, 0xd3, 0x88, 0x24, 0x62, 0xa6, 0x54, 0xbf, 0x80, 0x5b, 0xe3, 0x8c, 0xfa,
- 0x18, 0x70, 0x0d, 0xd3, 0x61, 0x97, 0x6a, 0x86, 0x5e, 0xaa, 0x5c, 0xd8, 0xd4, 0xef, 0xaf, 0x36,
- 0x5b, 0x4d, 0xbe, 0x71, 0x05, 0xed, 0x68, 0x16, 0xf1, 0xab, 0xaf, 0x95, 0xaa, 0x35, 0xda, 0xbf,
- 0x2f, 0x37, 0x8c, 0xb5, 0x52, 0x4b, 0x99, 0xd3, 0x5e, 0x21, 0x03, 0x65, 0x05, 0xfa, 0xeb, 0x8e,
- 0xeb, 0x9b, 0xdd, 0x9a, 0x65, 0x5f, 0xda, 0x70, 0xbb, 0xdc, 0x64, 0x53, 0x38, 0x4c, 0x07, 0x3f,
- 0x44, 0x72, 0x04, 0xe3, 0x77, 0xc4, 0x7b, 0x38, 0x5b, 0xa4, 0x4c, 0x51, 0x82, 0xf6, 0x5c, 0x49,
- 0x64, 0xb9, 0x5b, 0xbc, 0xd4, 0x74, 0x7a, 0xf2, 0xbc, 0x49, 0x8f, 0xcf, 0x03, 0x50, 0x2b, 0x6a,
- 0x2f, 0xc8, 0x83, 0xe9, 0x65, 0xcb, 0x36, 0xbb, 0xd6, 0x73, 0xb8, 0xe8, 0x98, 0x51, 0x1f, 0x93,
- 0x4b, 0xe8, 0x63, 0xa4, 0x91, 0xc6, 0xcf, 0x9f, 0x96, 0x45, 0x97, 0x17, 0x18, 0xd9, 0x07, 0x4c,
- 0xc6, 0x0c, 0x9e, 0x1f, 0x95, 0x44, 0x96, 0x17, 0x86, 0xd3, 0x4b, 0x87, 0xe1, 0x67, 0xbe, 0x33,
- 0x6c, 0xac, 0xbe, 0xf6, 0x3d, 0x3d, 0x48, 0x15, 0x66, 0xb4, 0xdf, 0x97, 0x81, 0xb6, 0x02, 0xfd,
- 0x73, 0xd0, 0x0d, 0xa7, 0x02, 0xb8, 0xd7, 0xa7, 0xf6, 0x36, 0xd3, 0x64, 0xdf, 0xcc, 0x02, 0x78,
- 0x9e, 0x07, 0xb0, 0x94, 0xd0, 0x78, 0x62, 0x48, 0xc7, 0x34, 0xde, 0x2a, 0x28, 0x7a, 0xf8, 0x3d,
- 0x55, 0xb3, 0x27, 0xc5, 0x0f, 0x97, 0x98, 0x18, 0x4b, 0x9d, 0x10, 0x36, 0x28, 0x01, 0xed, 0x5b,
- 0xe1, 0x24, 0xe8, 0xfb, 0x38, 0xed, 0x58, 0x3e, 0x34, 0xb3, 0xe9, 0xf4, 0xc5, 0xcd, 0x56, 0x5d,
- 0x06, 0xd9, 0x37, 0xda, 0x47, 0x0b, 0xe0, 0xe4, 0xa0, 0xea, 0x68, 0xbf, 0x92, 0xe3, 0x76, 0xd8,
- 0x21, 0x1e, 0xf2, 0x73, 0x74, 0x03, 0x11, 0x3d, 0xa8, 0x4f, 0x01, 0x57, 0x87, 0xcb, 0x70, 0x2d,
- 0xa7, 0x0e, 0xaf, 0x78, 0x5d, 0xe8, 0xfb, 0xd0, 0xc5, 0x55, 0x9b, 0x36, 0x06, 0xbf, 0x54, 0x9f,
- 0x06, 0x1e, 0x65, 0xd9, 0x9e, 0xd5, 0x81, 0x6e, 0xcb, 0xea, 0x79, 0x25, 0xbb, 0xd3, 0xda, 0xf3,
- 0x1d, 0xd7, 0x32, 0xe9, 0x45, 0x87, 0xd3, 0x46, 0xdc, 0x6b, 0xf5, 0x16, 0xa0, 0x58, 0x5e, 0xc3,
- 0xbe, 0xe8, 0x98, 0x6e, 0xc7, 0xb2, 0xb7, 0x6b, 0x96, 0xe7, 0x53, 0x0f, 0xe0, 0x03, 0xe9, 0xda,
- 0xdf, 0xc8, 0xa2, 0x87, 0xe9, 0x86, 0xc0, 0x1a, 0xd3, 0xa1, 0xbc, 0x50, 0x16, 0x39, 0x1e, 0x97,
- 0x8e, 0x76, 0x3a, 0x65, 0x79, 0xfe, 0xa4, 0x0d, 0x89, 0xc1, 0x23, 0x38, 0xee, 0x5a, 0x48, 0x7a,
- 0x60, 0x08, 0x9c, 0xd3, 0x8d, 0xea, 0x72, 0x55, 0x47, 0x66, 0xc5, 0xd5, 0xe0, 0x44, 0xf4, 0xae,
- 0x72, 0x61, 0xb3, 0xa9, 0xd7, 0x5b, 0xca, 0x34, 0xea, 0xa7, 0x48, 0xf2, 0x72, 0xa9, 0x5a, 0xd3,
- 0x2b, 0x9b, 0xad, 0x06, 0x7a, 0x53, 0x19, 0xcd, 0xb4, 0xd0, 0x1e, 0xca, 0x83, 0xe3, 0x58, 0xb6,
- 0xfb, 0x58, 0xaa, 0x48, 0x28, 0x7d, 0xbe, 0xb6, 0x21, 0x40, 0x33, 0x44, 0xbc, 0xda, 0xef, 0x09,
- 0xdf, 0xe3, 0xc8, 0x40, 0xd8, 0x57, 0x46, 0x8c, 0x66, 0x7c, 0x53, 0x12, 0x89, 0x50, 0x21, 0x4c,
- 0x36, 0x9d, 0x52, 0xfc, 0xcb, 0xa4, 0x47, 0x9c, 0x78, 0xf0, 0xb1, 0x95, 0x59, 0xc6, 0x1f, 0xdf,
- 0xbf, 0x5e, 0x35, 0xb0, 0x3a, 0x2c, 0x00, 0x80, 0x53, 0xb0, 0x06, 0x11, 0x3d, 0x18, 0x38, 0x5e,
- 0xc5, 0xe9, 0x41, 0xa9, 0xdc, 0xaa, 0x9e, 0xd3, 0xe3, 0xf4, 0xe0, 0x73, 0x32, 0x98, 0x5e, 0x81,
- 0x3e, 0x9a, 0x53, 0x79, 0xda, 0xd3, 0x05, 0xd6, 0x7f, 0x90, 0x19, 0x83, 0x2f, 0xbe, 0x0f, 0x97,
- 0x01, 0xc8, 0x93, 0xf6, 0x23, 0xa3, 0x98, 0x20, 0x41, 0xd1, 0x31, 0xe3, 0xd5, 0xf7, 0x82, 0x82,
- 0x8f, 0x5e, 0xd3, 0x65, 0xe8, 0xef, 0x8a, 0x1d, 0xae, 0x10, 0x91, 0x8a, 0xe9, 0x9b, 0x06, 0xc9,
- 0xcf, 0x8c, 0x4e, 0x82, 0xb6, 0x4b, 0x0c, 0x23, 0xdf, 0x89, 0xf6, 0xe7, 0x57, 0x65, 0x70, 0x35,
- 0x69, 0x1f, 0xa5, 0x5e, 0xaf, 0xe9, 0x3b, 0x2e, 0x34, 0x60, 0x1b, 0x5a, 0x3d, 0xbf, 0x6f, 0x7d,
- 0xcf, 0x25, 0xa9, 0xc1, 0x66, 0x33, 0x7d, 0xd4, 0xde, 0x20, 0x8b, 0x46, 0xf8, 0x3d, 0xd0, 0x1e,
- 0xfb, 0xca, 0x8b, 0x69, 0xec, 0x9f, 0x94, 0x44, 0x62, 0xf6, 0xa6, 0x24, 0x9e, 0x0e, 0xa8, 0x8f,
- 0x1d, 0x01, 0x50, 0xc1, 0xca, 0x8d, 0xa1, 0x97, 0xf5, 0xea, 0x3a, 0x1a, 0x04, 0xae, 0x03, 0x8f,
- 0x5e, 0xdf, 0x30, 0xca, 0xab, 0xa5, 0xa6, 0xbe, 0x69, 0xe8, 0x2b, 0xd5, 0x66, 0x8b, 0x3a, 0x65,
- 0x91, 0xaf, 0xa6, 0xd4, 0x6b, 0xc1, 0xe9, 0xe6, 0xc6, 0x52, 0xb3, 0x6c, 0x54, 0xd7, 0x71, 0xba,
- 0xa1, 0xd7, 0xf5, 0xf3, 0xf4, 0xed, 0xb4, 0xf6, 0x61, 0x05, 0xcc, 0xa2, 0x09, 0x40, 0x93, 0xcc,
- 0x0b, 0xb4, 0xbf, 0xcb, 0x83, 0x59, 0x03, 0x7a, 0x4e, 0xf7, 0x32, 0x9e, 0x23, 0x4c, 0x6a, 0xea,
- 0xf1, 0x0d, 0x59, 0xf4, 0xfc, 0x36, 0xc3, 0xec, 0x22, 0xc3, 0x68, 0xfc, 0x44, 0xd3, 0xbc, 0x6c,
- 0x5a, 0x5d, 0xf3, 0x22, 0xed, 0x6a, 0xa6, 0x8d, 0x28, 0x41, 0x5d, 0x04, 0xaa, 0x73, 0xc5, 0x86,
- 0x6e, 0xb3, 0x7d, 0x45, 0xf7, 0x77, 0x4a, 0x9d, 0x8e, 0x0b, 0x3d, 0x8f, 0xae, 0x5e, 0x0c, 0x78,
- 0xa3, 0xde, 0x0c, 0x8e, 0xe3, 0x54, 0x26, 0x33, 0x71, 0x90, 0xe9, 0x4f, 0x0e, 0x73, 0x96, 0xec,
- 0xfd, 0x20, 0x67, 0x81, 0xc9, 0x19, 0x25, 0xb3, 0xc7, 0x25, 0x8a, 0xfc, 0x29, 0x9d, 0xeb, 0xc1,
- 0xac, 0x6d, 0xee, 0x42, 0xfd, 0xc1, 0x9e, 0xe5, 0x42, 0x0f, 0x3b, 0xc6, 0xc8, 0x06, 0x9b, 0xa4,
- 0x7d, 0x54, 0xe8, 0xbc, 0xb9, 0x98, 0xc4, 0xd2, 0xe9, 0xfe, 0xca, 0x08, 0xaa, 0x3f, 0xa0, 0x9f,
- 0x91, 0xb5, 0x0f, 0xcb, 0x60, 0x8e, 0x32, 0x55, 0xb2, 0xf7, 0xab, 0x1d, 0xed, 0x3a, 0xce, 0xf8,
- 0x35, 0x51, 0x5a, 0x60, 0xfc, 0xe2, 0x07, 0xed, 0xc7, 0x64, 0x51, 0x77, 0xe7, 0x01, 0x15, 0xc7,
- 0x65, 0xc4, 0x3b, 0x8e, 0x6e, 0x39, 0x7b, 0xd4, 0x51, 0x75, 0xda, 0x20, 0x0f, 0x59, 0x2e, 0xea,
- 0x69, 0xbf, 0x26, 0xe4, 0x4c, 0x2d, 0x58, 0x8d, 0x23, 0x02, 0xf0, 0xd3, 0x32, 0x58, 0xa0, 0x5c,
- 0x35, 0xe9, 0x39, 0x1f, 0xa1, 0x03, 0x6f, 0x3f, 0x21, 0x6c, 0x08, 0x0e, 0xa8, 0x3f, 0x2d, 0xe9,
- 0x11, 0x03, 0xe4, 0xc7, 0x85, 0x82, 0xa3, 0x09, 0x57, 0xe4, 0x88, 0xa0, 0x7c, 0x57, 0x1e, 0xcc,
- 0x6e, 0x78, 0xd0, 0xa5, 0x7e, 0xfb, 0xda, 0xc3, 0x79, 0x20, 0xaf, 0x40, 0x6e, 0x23, 0xf5, 0x25,
- 0xc2, 0x1e, 0xbe, 0x6c, 0x65, 0x19, 0xa2, 0xc8, 0x46, 0x8a, 0x81, 0xed, 0x26, 0xb0, 0x40, 0x44,
- 0x5a, 0xf2, 0x7d, 0x64, 0x24, 0x06, 0xde, 0xb4, 0x7d, 0xa9, 0xe3, 0xd8, 0x2a, 0xc2, 0x65, 0xa1,
- 0x2c, 0x65, 0xc4, 0x53, 0x0d, 0x6e, 0x91, 0xf9, 0x6c, 0xde, 0xe8, 0x4b, 0xc5, 0x97, 0xeb, 0xf7,
- 0x20, 0x39, 0xbf, 0xc2, 0x64, 0x2e, 0xe0, 0xcc, 0x83, 0x5e, 0x69, 0x7f, 0x27, 0xe4, 0xab, 0x2b,
- 0x2e, 0x9d, 0x74, 0xba, 0xd0, 0x1b, 0x8f, 0x49, 0x72, 0x12, 0x28, 0x28, 0x07, 0xde, 0x7f, 0x31,
- 0xf4, 0x66, 0xa3, 0x76, 0x4e, 0x1f, 0xbc, 0x8c, 0x51, 0xd0, 0x9e, 0x2f, 0x83, 0x99, 0x25, 0xd7,
- 0x31, 0x3b, 0x6d, 0xd3, 0xf3, 0xb5, 0x6f, 0x49, 0x60, 0x6e, 0xdd, 0xdc, 0xef, 0x3a, 0x66, 0x07,
- 0xfb, 0xf7, 0xf7, 0xf5, 0x05, 0x3d, 0xf2, 0x2a, 0xe8, 0x0b, 0xe8, 0x23, 0x7f, 0x30, 0x30, 0x3c,
- 0xba, 0x97, 0x13, 0xb9, 0xae, 0x31, 0xdc, 0xe6, 0x93, 0x06, 0x05, 0x2b, 0x0d, 0xf8, 0x5a, 0x64,
- 0x79, 0x8a, 0xb1, 0x28, 0x3f, 0x2c, 0x16, 0x7e, 0x54, 0x84, 0xe4, 0xd1, 0xec, 0xca, 0xbf, 0x60,
- 0x1a, 0x14, 0x2b, 0x10, 0x5b, 0x71, 0xff, 0x5d, 0x02, 0x53, 0x4d, 0xe8, 0x63, 0x0b, 0xee, 0x0e,
- 0xce, 0x53, 0xb8, 0x83, 0x33, 0x44, 0x4e, 0xec, 0xc1, 0x33, 0x9a, 0xac, 0x33, 0xe7, 0xad, 0xf1,
- 0xff, 0x14, 0x1e, 0x89, 0xa4, 0xdc, 0x45, 0x5a, 0xe6, 0xa1, 0x3c, 0x12, 0x13, 0x49, 0x65, 0xef,
- 0x6b, 0xf5, 0x1e, 0x89, 0xba, 0x56, 0x31, 0xbd, 0xde, 0x6b, 0x58, 0xfd, 0x4c, 0xf4, 0x36, 0xa3,
- 0xcc, 0x27, 0x38, 0x47, 0x3d, 0x19, 0x4c, 0x11, 0x99, 0x07, 0xf3, 0xd1, 0x7e, 0x3f, 0x05, 0x42,
- 0x02, 0x9f, 0xbd, 0x0e, 0x72, 0x0a, 0xba, 0xa8, 0xc5, 0x17, 0x3e, 0x91, 0x18, 0x04, 0x73, 0x75,
- 0xe8, 0x5f, 0x71, 0xdc, 0x4b, 0x4d, 0xdf, 0xf4, 0xa1, 0xf6, 0x2f, 0x12, 0x90, 0x9b, 0xd0, 0x67,
- 0xa3, 0x9f, 0xd4, 0xc1, 0x09, 0x52, 0x21, 0x9a, 0x11, 0xf7, 0xdf, 0xa4, 0x22, 0xd7, 0x0f, 0x14,
- 0x02, 0x93, 0xcf, 0x38, 0xf8, 0xa9, 0xf6, 0xb3, 0x03, 0x83, 0x3e, 0x49, 0x03, 0x26, 0x0d, 0x54,
- 0x32, 0x2c, 0x83, 0x48, 0xc1, 0x62, 0xf4, 0xf4, 0x23, 0x42, 0x66, 0xb5, 0x18, 0xcd, 0xa3, 0xe9,
- 0x0a, 0xfe, 0xed, 0x71, 0x20, 0x5f, 0xde, 0x31, 0x7d, 0xed, 0xdd, 0x32, 0x00, 0xa5, 0x4e, 0x67,
- 0x8d, 0xf8, 0x80, 0xb3, 0x0e, 0x69, 0x67, 0xc1, 0x5c, 0x7b, 0xc7, 0x8c, 0x6e, 0xce, 0x20, 0xfd,
- 0x01, 0x97, 0xa6, 0x3e, 0x25, 0x72, 0x26, 0x27, 0x52, 0xd5, 0xfa, 0x60, 0x42, 0x65, 0x50, 0xda,
- 0xa1, 0xa3, 0x39, 0x1f, 0x0a, 0x33, 0xf1, 0x08, 0x1d, 0xfa, 0x7c, 0x31, 0x62, 0x2f, 0x7e, 0x0e,
- 0x47, 0x49, 0x87, 0x07, 0x6c, 0xa2, 0x84, 0x94, 0x27, 0xbd, 0xc5, 0x02, 0x7a, 0x24, 0xf3, 0x35,
- 0x91, 0xd0, 0xb5, 0xaa, 0xde, 0xb1, 0x02, 0xd1, 0xd2, 0x80, 0x59, 0xda, 0x8b, 0x73, 0xe9, 0xe0,
- 0x4b, 0x16, 0xdc, 0x33, 0xc1, 0x3c, 0xec, 0x58, 0x3e, 0x0c, 0x6a, 0x49, 0x05, 0x98, 0x04, 0x31,
- 0xff, 0x81, 0xf6, 0x3c, 0xe1, 0xa0, 0x6b, 0x58, 0xa0, 0x07, 0x6b, 0x14, 0xd3, 0xfe, 0xc4, 0xc2,
- 0xa8, 0x89, 0xd1, 0xcc, 0x1e, 0xac, 0x1f, 0x91, 0xc1, 0xd5, 0x2d, 0x67, 0x7b, 0xbb, 0x0b, 0x03,
- 0x31, 0x41, 0xe2, 0x9d, 0xa9, 0x99, 0xe3, 0x84, 0x0b, 0xef, 0x04, 0x39, 0x0f, 0x58, 0xe1, 0x51,
- 0x32, 0xf4, 0xc0, 0x9f, 0x98, 0x4a, 0x9c, 0x45, 0x61, 0x71, 0x0d, 0xe4, 0x33, 0x06, 0x05, 0xb1,
- 0x80, 0xcf, 0xc2, 0x64, 0xb3, 0x07, 0xe2, 0x0b, 0x12, 0x98, 0x27, 0xf7, 0x22, 0x06, 0x0a, 0x7a,
- 0xdf, 0x18, 0x01, 0xd0, 0xbe, 0x95, 0x13, 0xf5, 0xb3, 0xc5, 0x32, 0xe1, 0x38, 0x89, 0x11, 0xb1,
- 0x58, 0x50, 0x95, 0xa1, 0xe4, 0x26, 0x70, 0x53, 0x67, 0x1e, 0xcc, 0xae, 0xc0, 0xa0, 0xa5, 0x79,
- 0xda, 0xfb, 0x53, 0xf6, 0x44, 0x67, 0xc1, 0x1c, 0xbe, 0x1c, 0xac, 0x41, 0x8f, 0x49, 0x92, 0x55,
- 0x33, 0x2e, 0x4d, 0xbd, 0x11, 0xcc, 0x5f, 0x84, 0x5b, 0x8e, 0x0b, 0x1b, 0xdc, 0x59, 0x4a, 0x3e,
- 0x71, 0x70, 0x78, 0x3a, 0xf5, 0x66, 0x70, 0x9c, 0x3a, 0xba, 0x2f, 0xa1, 0xb9, 0xbe, 0xe9, 0xee,
- 0xd3, 0x83, 0x69, 0xfd, 0xc9, 0xda, 0x57, 0xd9, 0x06, 0xb3, 0xc4, 0xa3, 0x78, 0xeb, 0x41, 0xb1,
- 0x33, 0x95, 0x8e, 0x19, 0x9d, 0x9e, 0x0a, 0xa6, 0xa9, 0x8e, 0x04, 0x06, 0x5d, 0x52, 0x0f, 0x1a,
- 0xe6, 0x55, 0x9f, 0x0a, 0x66, 0x90, 0x88, 0xb0, 0xdd, 0x40, 0xbb, 0xde, 0xd3, 0x03, 0x3e, 0xc4,
- 0xef, 0x8d, 0x28, 0xab, 0xf6, 0x8b, 0xa1, 0xce, 0xe8, 0x9c, 0xce, 0x3c, 0x29, 0x0d, 0xf3, 0x13,
- 0xb9, 0x9f, 0x5c, 0x61, 0xca, 0x5f, 0xda, 0xaf, 0x76, 0x3c, 0x6d, 0x2d, 0x9d, 0xd6, 0x9c, 0x01,
- 0x20, 0x6c, 0x7e, 0x41, 0xe0, 0x0c, 0x26, 0x85, 0x8f, 0x8d, 0x9f, 0x78, 0x14, 0xb0, 0x5f, 0x1c,
- 0x98, 0x9d, 0xf1, 0x02, 0x2a, 0x78, 0x84, 0x50, 0x84, 0x93, 0xec, 0xd1, 0xf9, 0x85, 0x3c, 0xb8,
- 0x3a, 0x3c, 0xe1, 0x54, 0x33, 0xbd, 0xa8, 0x65, 0x5f, 0x48, 0x07, 0x11, 0x77, 0xa4, 0x24, 0x6c,
- 0x8e, 0x27, 0x41, 0xc1, 0xdb, 0xbb, 0x18, 0x3a, 0x02, 0x92, 0x07, 0xed, 0x8d, 0x72, 0xaa, 0xb1,
- 0x6a, 0x20, 0x7f, 0x63, 0x6e, 0x84, 0xb7, 0x82, 0x13, 0xf6, 0xde, 0x6e, 0x88, 0x05, 0xee, 0x69,
- 0x68, 0xcf, 0x72, 0xf0, 0x05, 0xdf, 0x64, 0xf3, 0xe2, 0x4d, 0x36, 0xc5, 0x48, 0x2a, 0x52, 0xe9,
- 0xec, 0xd5, 0xe3, 0x33, 0x7d, 0x47, 0xd0, 0xca, 0xa9, 0x95, 0x82, 0xc0, 0x2f, 0xb1, 0xf0, 0xff,
- 0x53, 0x2e, 0x55, 0xcf, 0x3b, 0xfc, 0xe4, 0x5a, 0x8a, 0x9e, 0xf0, 0x28, 0x8f, 0xad, 0x7d, 0x5e,
- 0x02, 0x5a, 0x33, 0x72, 0xc8, 0xa1, 0xa0, 0xae, 0xbb, 0xf0, 0xb2, 0x05, 0xaf, 0x70, 0xee, 0x5b,
- 0x6f, 0x12, 0x8e, 0x43, 0xcd, 0xeb, 0xca, 0x01, 0xa2, 0xf1, 0xeb, 0xe2, 0x03, 0x70, 0x11, 0x8b,
- 0x37, 0x9d, 0xae, 0xc4, 0x09, 0xc4, 0x0e, 0x97, 0xc0, 0x19, 0x06, 0xd5, 0x65, 0xd7, 0xd9, 0x4d,
- 0x90, 0xec, 0x2b, 0x58, 0xc9, 0x6e, 0xf0, 0x92, 0xbd, 0x27, 0x51, 0x5d, 0x06, 0x10, 0x8e, 0x51,
- 0xc7, 0xf7, 0x87, 0x72, 0xbc, 0x9f, 0x93, 0x63, 0xe5, 0x90, 0xf4, 0xb3, 0x97, 0xe5, 0x1f, 0xe6,
- 0xc1, 0x9c, 0x01, 0xcd, 0x4e, 0x38, 0x08, 0xfc, 0x5f, 0x8c, 0x79, 0xf7, 0x74, 0x90, 0xf7, 0xa3,
- 0x75, 0x9a, 0xc7, 0x1d, 0xac, 0x0c, 0xfb, 0x25, 0x7e, 0xc0, 0xcb, 0x35, 0xf8, 0xa3, 0x03, 0xbd,
- 0x85, 0x24, 0x60, 0x1b, 0xca, 0x22, 0xb6, 0x61, 0x7e, 0x90, 0x6d, 0x78, 0x33, 0x38, 0xde, 0x35,
- 0x3d, 0xbf, 0x72, 0xb1, 0x65, 0xed, 0x42, 0xcf, 0x37, 0x77, 0x7b, 0xd8, 0x0a, 0x94, 0x8d, 0xfe,
- 0x64, 0xfe, 0x1e, 0xf8, 0xc4, 0xf3, 0x60, 0x83, 0xaa, 0x78, 0xf8, 0x98, 0xb9, 0x1f, 0x12, 0x3a,
- 0xfc, 0x35, 0xac, 0xec, 0x74, 0x9a, 0x71, 0xef, 0x08, 0x6b, 0x4b, 0xa7, 0x80, 0xba, 0xa6, 0x37,
- 0x9b, 0xa5, 0x15, 0x7c, 0x26, 0x24, 0x70, 0x12, 0xea, 0x9c, 0x7d, 0x2c, 0x12, 0x1f, 0x41, 0x5a,
- 0x9d, 0x8b, 0xc6, 0x5e, 0xe5, 0x98, 0x3a, 0x0b, 0xa6, 0x5c, 0xd8, 0xeb, 0x5a, 0xd0, 0x53, 0x72,
- 0xda, 0x37, 0x25, 0x50, 0xdc, 0xb0, 0x5d, 0x68, 0x76, 0xb4, 0x67, 0xc5, 0x0f, 0x21, 0x23, 0x2a,
- 0x05, 0x1f, 0xf7, 0x2a, 0x71, 0x55, 0x96, 0x36, 0x3a, 0xc4, 0xc8, 0x58, 0xe0, 0x13, 0x5b, 0x8e,
- 0x8d, 0x2f, 0x35, 0xf3, 0x26, 0x7d, 0x76, 0x0a, 0x14, 0xf4, 0xdd, 0x9e, 0xbf, 0x7f, 0xf6, 0xb1,
- 0x60, 0xbe, 0xe9, 0xbb, 0xd0, 0xdc, 0x65, 0x36, 0xd5, 0x7d, 0xe7, 0x12, 0xb4, 0x83, 0x4d, 0x75,
- 0xfc, 0x70, 0xe7, 0x1d, 0x60, 0xca, 0x76, 0x36, 0xcd, 0x3d, 0x7f, 0x47, 0xbd, 0xee, 0x40, 0x34,
- 0x1a, 0xaa, 0x7e, 0x0d, 0x1a, 0xfe, 0xef, 0xcf, 0xee, 0xc2, 0x53, 0xab, 0xa2, 0xed, 0x94, 0xf6,
- 0xfc, 0x9d, 0xa5, 0x6b, 0x3f, 0xfd, 0xe7, 0x67, 0x72, 0x9f, 0xfb, 0xf3, 0x33, 0xb9, 0xaf, 0xfc,
- 0xf9, 0x99, 0xdc, 0x4f, 0xfc, 0xc5, 0x99, 0x63, 0x9f, 0xfb, 0x8b, 0x33, 0xc7, 0xbe, 0xf0, 0x17,
- 0x67, 0x8e, 0x7d, 0x9f, 0xd4, 0xbb, 0x78, 0xb1, 0x88, 0xa9, 0x3c, 0xf9, 0xff, 0x0b, 0x00, 0x00,
- 0xff, 0xff, 0xdd, 0xfb, 0x60, 0x82, 0x1a, 0x2a, 0x02, 0x00,
+ 0x3b, 0x07, 0x56, 0x7b, 0x30, 0xcd, 0x18, 0x89, 0x7e, 0x36, 0x94, 0x68, 0x93, 0x93, 0xe8, 0x3d,
+ 0xa3, 0x93, 0x4e, 0x27, 0xd0, 0xfa, 0x58, 0xfb, 0xae, 0xbc, 0xf6, 0x17, 0x12, 0x38, 0x41, 0x3c,
+ 0x08, 0xef, 0x25, 0x33, 0x27, 0xdc, 0xdb, 0xf3, 0xd6, 0x57, 0x37, 0x9a, 0x65, 0x11, 0xfd, 0x66,
+ 0x52, 0xb4, 0xd7, 0xb1, 0x02, 0xbf, 0x8f, 0x17, 0x78, 0x4c, 0x3f, 0xde, 0x5f, 0x5c, 0x8c, 0xac,
+ 0x7f, 0x23, 0x94, 0x75, 0x9d, 0x93, 0xf5, 0x9d, 0x23, 0x51, 0x3d, 0x5a, 0x31, 0x7f, 0x2d, 0x0f,
+ 0x1e, 0x43, 0x38, 0xa4, 0x8a, 0x40, 0xfa, 0xc1, 0x92, 0xdd, 0x31, 0xa0, 0xe7, 0x9b, 0xae, 0xcf,
+ 0x85, 0x5e, 0xe9, 0x9b, 0x9a, 0xe7, 0x32, 0x98, 0x9a, 0x4b, 0x43, 0xa7, 0xe6, 0xda, 0x7b, 0x58,
+ 0x03, 0xef, 0x3c, 0x8f, 0x6c, 0x29, 0x01, 0x83, 0x98, 0x1a, 0xc6, 0xb5, 0xa8, 0xd0, 0xf2, 0xfb,
+ 0x3e, 0x0e, 0xe5, 0xe5, 0x43, 0x97, 0x90, 0x0e, 0xf1, 0x5f, 0x1f, 0xaf, 0x25, 0x9e, 0x67, 0xdf,
+ 0xf1, 0x66, 0xa3, 0xd2, 0xc9, 0x74, 0x0a, 0xf5, 0xd2, 0x69, 0x30, 0x83, 0xbb, 0x9c, 0x9a, 0x65,
+ 0x5f, 0xd2, 0xfe, 0x5c, 0x06, 0x73, 0x75, 0x78, 0xa5, 0xbc, 0x63, 0x76, 0xbb, 0xd0, 0xde, 0x86,
+ 0xda, 0x03, 0x9c, 0x6d, 0x6f, 0xf6, 0x7a, 0xf5, 0x68, 0x7f, 0x38, 0x78, 0x54, 0xef, 0x01, 0x05,
+ 0xaf, 0xed, 0x84, 0x41, 0x1d, 0xbe, 0x3b, 0x66, 0xf5, 0xba, 0xb4, 0xe7, 0xef, 0x2c, 0xe2, 0xb2,
+ 0x4a, 0x3d, 0xab, 0x89, 0x3e, 0x30, 0xc8, 0x77, 0x74, 0x9c, 0xfc, 0xcb, 0x81, 0x9d, 0x71, 0x2e,
+ 0xa1, 0x33, 0x0e, 0x19, 0x5f, 0x64, 0x99, 0x8e, 0x59, 0x24, 0xb9, 0x1e, 0xcc, 0xb6, 0x83, 0x2c,
+ 0xe1, 0x29, 0x3d, 0x36, 0x49, 0xfb, 0x6a, 0xaa, 0xee, 0x5a, 0xa8, 0xf0, 0x74, 0x5a, 0x05, 0xc7,
+ 0x6c, 0x6a, 0x5e, 0x0d, 0x4e, 0xb4, 0x1a, 0x8d, 0xcd, 0xb5, 0x52, 0xfd, 0x42, 0x14, 0x5b, 0x65,
+ 0x4b, 0x7b, 0x65, 0x1e, 0x2c, 0x34, 0x9d, 0xee, 0x65, 0x18, 0xe1, 0x5c, 0xe5, 0xdc, 0x3f, 0x59,
+ 0x39, 0xe5, 0x0e, 0xc8, 0x49, 0x3d, 0x05, 0x8a, 0xa6, 0xed, 0x5d, 0x81, 0x81, 0xf9, 0x4f, 0x9f,
+ 0x28, 0x8c, 0x1f, 0x61, 0x3b, 0x02, 0x83, 0x87, 0xf1, 0xae, 0x21, 0x92, 0xe4, 0xb9, 0x8a, 0x01,
+ 0xf2, 0x2c, 0x98, 0xf3, 0x88, 0x97, 0x48, 0x8b, 0x71, 0x06, 0xe2, 0xd2, 0x30, 0x8b, 0xc4, 0x4d,
+ 0x49, 0xa6, 0x2c, 0xe2, 0x27, 0xed, 0xe1, 0xb0, 0xff, 0xd8, 0xe0, 0x20, 0x2e, 0x1d, 0x86, 0xb1,
+ 0x74, 0x20, 0xbf, 0x7a, 0xdc, 0x93, 0xf8, 0xd3, 0xe0, 0x64, 0x70, 0x42, 0xbd, 0xbc, 0x5a, 0xaa,
+ 0xd5, 0xf4, 0xfa, 0x8a, 0xbe, 0x59, 0xad, 0x90, 0xfd, 0xe4, 0x28, 0xa5, 0xd4, 0x6a, 0xe9, 0x6b,
+ 0xeb, 0xad, 0xe6, 0xa6, 0x7e, 0x7f, 0x59, 0xd7, 0x2b, 0xd8, 0x01, 0x1b, 0x9f, 0xa0, 0x0c, 0x5c,
+ 0xe5, 0x4b, 0xf5, 0xe6, 0x79, 0xdd, 0x50, 0x76, 0xce, 0x96, 0xc0, 0x2c, 0x33, 0x50, 0x20, 0xee,
+ 0x2a, 0x70, 0xcb, 0xdc, 0xeb, 0x52, 0x73, 0x5c, 0x39, 0x86, 0xb8, 0xc3, 0xb2, 0x69, 0xd8, 0xdd,
+ 0x7d, 0x25, 0xa7, 0x2a, 0x60, 0x8e, 0x1d, 0x13, 0x14, 0x49, 0x7b, 0xe7, 0xb5, 0x60, 0xe6, 0xbc,
+ 0xe3, 0x5e, 0xc2, 0x5e, 0xc3, 0xda, 0x07, 0x48, 0x0c, 0xb6, 0x20, 0xa2, 0x04, 0x63, 0x80, 0xbd,
+ 0x5a, 0xdc, 0x4d, 0x2c, 0xa0, 0xb6, 0x38, 0x34, 0x6a, 0xc4, 0xf5, 0x60, 0xf6, 0x4a, 0x90, 0x3b,
+ 0x6a, 0xe9, 0x4c, 0x92, 0xf6, 0x8b, 0x62, 0x8e, 0x5f, 0xc3, 0x8b, 0xcc, 0x7e, 0xd5, 0xff, 0xed,
+ 0x12, 0x28, 0xae, 0x40, 0xbf, 0xd4, 0xed, 0xb2, 0x72, 0x7b, 0xb9, 0xf0, 0x39, 0x52, 0xae, 0x12,
+ 0xa5, 0x6e, 0x37, 0xbe, 0x51, 0x31, 0x02, 0x0a, 0xce, 0x3b, 0x71, 0x69, 0x82, 0x5e, 0xda, 0x43,
+ 0x0a, 0xcc, 0x5e, 0x62, 0x1f, 0x8d, 0x5c, 0xb3, 0x5f, 0xcf, 0x98, 0x49, 0x4f, 0x8a, 0xe2, 0xef,
+ 0xe5, 0x92, 0x9d, 0xa4, 0x82, 0x7c, 0xea, 0x7d, 0x60, 0x6a, 0xcf, 0x83, 0x65, 0xd3, 0x0b, 0x86,
+ 0x36, 0xbe, 0xa6, 0x8d, 0x8b, 0x0f, 0xc0, 0xb6, 0xbf, 0x58, 0xdd, 0x45, 0x13, 0x9f, 0x0d, 0x92,
+ 0x31, 0x8c, 0x57, 0x44, 0x9f, 0x8d, 0x80, 0x02, 0x9a, 0x76, 0x5e, 0xb1, 0xfc, 0x9d, 0xf2, 0x8e,
+ 0xe9, 0xd3, 0xcd, 0x96, 0xf0, 0x59, 0x7b, 0xc9, 0x08, 0x70, 0x26, 0x3a, 0xec, 0xc4, 0x1e, 0x47,
+ 0x4f, 0x0d, 0xe2, 0x18, 0xbc, 0x6c, 0x46, 0x01, 0xf1, 0x6f, 0x24, 0x90, 0x6f, 0xf4, 0xa0, 0x2d,
+ 0x7c, 0xf6, 0x32, 0x94, 0xad, 0xd4, 0x27, 0xdb, 0x87, 0xc5, 0xdd, 0x82, 0xc3, 0x4a, 0xa3, 0x92,
+ 0x63, 0x24, 0x7b, 0x1b, 0xc8, 0x5b, 0xf6, 0x96, 0x43, 0x2d, 0xdb, 0x47, 0xc7, 0xd8, 0x3a, 0x55,
+ 0x7b, 0xcb, 0x31, 0x70, 0x46, 0x51, 0x8f, 0xe0, 0xa4, 0xb2, 0xb3, 0x17, 0xf7, 0xdf, 0x4e, 0x83,
+ 0x22, 0x51, 0x67, 0xed, 0x65, 0x32, 0x90, 0x4b, 0x9d, 0x4e, 0x8c, 0xe0, 0xa5, 0x03, 0x82, 0x77,
+ 0xf0, 0x67, 0x21, 0x26, 0xe1, 0x33, 0x1f, 0x78, 0x4d, 0xb0, 0x6f, 0xa7, 0x4d, 0xaa, 0xd4, 0xe9,
+ 0xc4, 0x9f, 0x5b, 0x08, 0x0b, 0x94, 0xf8, 0x02, 0xd9, 0x16, 0x2e, 0x8b, 0xb5, 0xf0, 0xd4, 0x03,
+ 0x41, 0x2c, 0x7f, 0xd9, 0x43, 0xf4, 0xf7, 0x12, 0x98, 0xaa, 0x59, 0x9e, 0x8f, 0xb0, 0x29, 0x89,
+ 0x60, 0x73, 0x2d, 0x98, 0x09, 0x44, 0x83, 0xba, 0x3c, 0xd4, 0x9f, 0x47, 0x09, 0xfc, 0x4c, 0xfc,
+ 0x5e, 0x1e, 0x9d, 0xa7, 0x24, 0xd7, 0x9e, 0x72, 0x11, 0x7f, 0xa6, 0x2d, 0x2a, 0x56, 0xea, 0x2f,
+ 0xf6, 0x97, 0x42, 0x81, 0xaf, 0x71, 0x02, 0xbf, 0x63, 0x94, 0x22, 0xb3, 0x17, 0xfa, 0xef, 0x4b,
+ 0x00, 0xa0, 0xb2, 0xe9, 0xc1, 0xe1, 0xc7, 0x71, 0xe1, 0x40, 0x12, 0xa4, 0xfb, 0x4a, 0x56, 0xba,
+ 0x6b, 0xbc, 0x74, 0xbf, 0x77, 0x78, 0x55, 0x93, 0x0e, 0x08, 0xab, 0x0a, 0x90, 0xad, 0x50, 0xb4,
+ 0xe8, 0xaf, 0xf6, 0xf6, 0x50, 0xa8, 0xeb, 0x9c, 0x50, 0xef, 0x1a, 0xb1, 0xa4, 0xec, 0xe5, 0xfa,
+ 0x47, 0x12, 0x98, 0x6a, 0x42, 0x1f, 0x75, 0x93, 0xda, 0x39, 0x91, 0x1e, 0x9e, 0x69, 0xdb, 0x92,
+ 0x60, 0xdb, 0xfe, 0x66, 0x4e, 0x34, 0x30, 0x5c, 0x24, 0x19, 0xca, 0x53, 0xcc, 0xea, 0xc3, 0xeb,
+ 0x85, 0x02, 0xc3, 0x0d, 0xa3, 0x96, 0xbd, 0x74, 0xdf, 0x2a, 0x85, 0x9e, 0x22, 0xfc, 0xb9, 0x3e,
+ 0xd6, 0x2c, 0xce, 0x1d, 0x34, 0x8b, 0xc5, 0xcf, 0xf5, 0xb1, 0x75, 0x8c, 0x77, 0x4c, 0x48, 0x6d,
+ 0x6c, 0x8c, 0xc1, 0x67, 0x60, 0x14, 0x79, 0x3d, 0x4f, 0x06, 0x45, 0xba, 0x79, 0x70, 0x4f, 0xf2,
+ 0xde, 0xc1, 0xf0, 0xa9, 0xc5, 0xfb, 0x47, 0x30, 0xe5, 0x92, 0x96, 0xe5, 0x43, 0x36, 0x24, 0x86,
+ 0x8d, 0x5b, 0x41, 0x01, 0x47, 0xcd, 0xa6, 0xe3, 0x5c, 0xe4, 0xee, 0x11, 0x90, 0xd0, 0xd1, 0x5b,
+ 0x83, 0x64, 0x4a, 0x8d, 0xc2, 0x18, 0x56, 0xf2, 0x47, 0x41, 0xe1, 0x1b, 0x2a, 0x00, 0xeb, 0x7b,
+ 0x17, 0xbb, 0x96, 0xb7, 0x63, 0xd9, 0xd8, 0x47, 0x6c, 0x8e, 0x3e, 0x92, 0xe0, 0xcf, 0x89, 0xe6,
+ 0x5f, 0xac, 0x51, 0xa0, 0x00, 0x79, 0xcf, 0xb5, 0xe8, 0x32, 0x00, 0xfa, 0xab, 0xde, 0x1d, 0x7a,
+ 0x5b, 0xe6, 0xfb, 0x02, 0xb7, 0x20, 0x31, 0x44, 0x1c, 0x2c, 0x32, 0xa5, 0x47, 0x5e, 0x97, 0x6c,
+ 0x84, 0xef, 0x02, 0x1f, 0xe1, 0x9b, 0x3b, 0xcd, 0x5d, 0xec, 0x3b, 0xcd, 0x8d, 0x70, 0xf4, 0xac,
+ 0xe7, 0x40, 0xec, 0x7a, 0x24, 0x1b, 0xf8, 0x3f, 0xfa, 0x02, 0xbb, 0x07, 0x61, 0xef, 0x3c, 0x72,
+ 0x66, 0x20, 0x4a, 0x60, 0xfb, 0xbc, 0x19, 0xc1, 0x3e, 0xef, 0xb3, 0xd1, 0xdc, 0xe7, 0xbf, 0x09,
+ 0x1a, 0xce, 0x29, 0x24, 0x77, 0x0b, 0x50, 0x2c, 0xbb, 0xdd, 0xdd, 0xeb, 0x90, 0x63, 0x27, 0xa8,
+ 0x6f, 0xa3, 0xa7, 0x51, 0x0e, 0xa4, 0x6b, 0x1f, 0x17, 0x0e, 0xcb, 0xc9, 0x48, 0x3c, 0x71, 0x4e,
+ 0x43, 0xf9, 0x91, 0x42, 0x7e, 0x98, 0x1d, 0xe1, 0xa4, 0xfe, 0x78, 0x18, 0xfd, 0x74, 0x9a, 0xbd,
+ 0x3b, 0xc2, 0xea, 0x8d, 0x0a, 0x16, 0x82, 0x43, 0xf2, 0x8d, 0xa5, 0x7b, 0xf5, 0x72, 0x4b, 0x81,
+ 0x07, 0x0f, 0xce, 0xe3, 0x23, 0xf2, 0xe4, 0x38, 0x7c, 0xb4, 0x42, 0xa3, 0xfd, 0x4f, 0x09, 0x14,
+ 0xa9, 0xf1, 0x71, 0xcf, 0x21, 0x01, 0xd5, 0x5e, 0x35, 0x0a, 0x24, 0x89, 0xb1, 0x4a, 0x3e, 0x93,
+ 0x16, 0x80, 0x31, 0x98, 0x1b, 0x17, 0x32, 0x03, 0x40, 0xfb, 0x27, 0x09, 0xe4, 0x91, 0x51, 0x24,
+ 0x16, 0x09, 0xe2, 0xd3, 0xc2, 0x0e, 0xc2, 0x8c, 0x00, 0x10, 0xf9, 0x18, 0xfd, 0x5e, 0x02, 0x33,
+ 0x3d, 0x92, 0x31, 0x8c, 0x43, 0x72, 0xa3, 0x40, 0xd7, 0x04, 0x8d, 0xe8, 0x33, 0xed, 0x7d, 0x42,
+ 0xc7, 0x1f, 0x92, 0xf9, 0x49, 0x07, 0x87, 0x3e, 0x8e, 0xa0, 0x11, 0x5b, 0xda, 0xbf, 0x4a, 0x00,
+ 0x18, 0xd0, 0x73, 0xba, 0x97, 0xe1, 0x86, 0x6b, 0x69, 0x8f, 0x8e, 0x00, 0xa0, 0xcd, 0x3e, 0x17,
+ 0x35, 0xfb, 0xcf, 0x49, 0xa2, 0xae, 0xc0, 0x9c, 0xe6, 0x05, 0xc4, 0x63, 0xc4, 0xff, 0x0c, 0x30,
+ 0x45, 0xe5, 0x48, 0x2d, 0x4c, 0x31, 0xe1, 0x07, 0x1f, 0x69, 0x1f, 0x14, 0x72, 0x25, 0x16, 0xe1,
+ 0x28, 0x1d, 0x00, 0xe5, 0x11, 0x00, 0x38, 0x0e, 0x66, 0x03, 0x00, 0x36, 0x8c, 0xaa, 0x02, 0xb5,
+ 0x77, 0xcb, 0xd8, 0xdf, 0x82, 0x0c, 0x75, 0x87, 0xef, 0x69, 0xfe, 0x42, 0x78, 0xea, 0xcf, 0xc8,
+ 0x23, 0x2c, 0x3f, 0x23, 0x80, 0x7e, 0x5b, 0x68, 0xae, 0x2f, 0xc0, 0xd0, 0x23, 0xa5, 0xbf, 0x3a,
+ 0xab, 0x83, 0x79, 0xce, 0x46, 0x51, 0x4f, 0x83, 0x93, 0x5c, 0x02, 0x19, 0xef, 0x3a, 0xca, 0x31,
+ 0x55, 0x03, 0xa7, 0xb8, 0x37, 0xf4, 0x01, 0x76, 0x94, 0x9c, 0xf6, 0xf0, 0x17, 0x72, 0xe1, 0xea,
+ 0xcf, 0xfb, 0xf3, 0x74, 0xdd, 0xed, 0x93, 0x7c, 0xe8, 0xcb, 0xb6, 0x63, 0xfb, 0xf0, 0x41, 0xc6,
+ 0x69, 0x25, 0x4c, 0x48, 0xb4, 0x21, 0x4e, 0x83, 0x29, 0xdf, 0x65, 0x1d, 0x59, 0x82, 0x47, 0x56,
+ 0xb1, 0x0a, 0xbc, 0x62, 0xd5, 0xc1, 0x59, 0x6a, 0x4d, 0x18, 0xb0, 0x6b, 0x22, 0x19, 0x7a, 0x25,
+ 0xaf, 0x02, 0x7b, 0xd0, 0xee, 0x40, 0xdb, 0x27, 0x7c, 0x06, 0xa7, 0x60, 0x05, 0x72, 0xf2, 0xca,
+ 0x78, 0x37, 0xaf, 0x8c, 0x8f, 0x1b, 0xb4, 0xa0, 0x9b, 0xb0, 0xfa, 0x77, 0x07, 0x00, 0xa4, 0x6e,
+ 0xe7, 0x2c, 0x78, 0x85, 0xaa, 0xe1, 0x35, 0x7d, 0x6b, 0x80, 0x8d, 0x30, 0x83, 0xc1, 0x64, 0xd6,
+ 0xbe, 0x1c, 0xaa, 0xdf, 0x33, 0x39, 0xf5, 0xbb, 0x55, 0x90, 0x85, 0x74, 0x5a, 0xd7, 0x1b, 0x41,
+ 0xeb, 0xe6, 0xc1, 0x4c, 0xb4, 0xb7, 0x2c, 0xab, 0xd7, 0x80, 0xab, 0x03, 0x7f, 0xe3, 0xba, 0xae,
+ 0x57, 0x9a, 0x9b, 0x1b, 0xeb, 0x2b, 0x46, 0xa9, 0xa2, 0x2b, 0x00, 0xe9, 0x27, 0xd1, 0xcb, 0xd0,
+ 0x4d, 0x38, 0xaf, 0xfd, 0x81, 0x04, 0x0a, 0xf8, 0x08, 0xb7, 0xf6, 0xfd, 0x63, 0xd2, 0x1c, 0x8f,
+ 0x73, 0x81, 0x0a, 0xc7, 0x5d, 0xf1, 0x0b, 0x4d, 0xa8, 0x30, 0x31, 0x57, 0x87, 0xba, 0xd0, 0x24,
+ 0x81, 0x50, 0xf6, 0xf3, 0x22, 0xd4, 0x24, 0x9b, 0x3b, 0xce, 0x95, 0xff, 0xcc, 0x4d, 0x12, 0xd5,
+ 0xff, 0x88, 0x9b, 0xe4, 0x00, 0x16, 0x26, 0xde, 0x24, 0x07, 0xb4, 0xbb, 0x84, 0x66, 0xaa, 0x7d,
+ 0xa4, 0x10, 0xce, 0x06, 0x3f, 0x21, 0x1d, 0x6a, 0x27, 0xac, 0x04, 0xe6, 0x2d, 0xdb, 0x87, 0xae,
+ 0x6d, 0x76, 0x97, 0xbb, 0xe6, 0x76, 0x60, 0x9f, 0xf6, 0x6f, 0x7f, 0x54, 0x99, 0x3c, 0x06, 0xff,
+ 0x85, 0x7a, 0x06, 0x00, 0x1f, 0xee, 0xf6, 0xba, 0xa6, 0x1f, 0xa9, 0x1e, 0x93, 0xc2, 0x6a, 0x5f,
+ 0x9e, 0xd7, 0xbe, 0x27, 0x82, 0xab, 0x08, 0x68, 0xad, 0xfd, 0x1e, 0xdc, 0xb0, 0xad, 0x67, 0xef,
+ 0xe1, 0x48, 0xc9, 0x44, 0x47, 0x07, 0xbd, 0xe2, 0xf6, 0x83, 0x8a, 0xfc, 0x7e, 0x90, 0x7a, 0x17,
+ 0xb8, 0x06, 0x07, 0xc1, 0xc6, 0x37, 0x86, 0x9c, 0xb7, 0x3a, 0xdb, 0xd0, 0xaf, 0x6e, 0xad, 0x59,
+ 0x9e, 0x67, 0xd9, 0xdb, 0x78, 0x72, 0x3e, 0x6d, 0xc4, 0x67, 0xd0, 0xfe, 0x46, 0x38, 0x0a, 0x53,
+ 0xd0, 0x67, 0x0c, 0x89, 0xc2, 0x14, 0xb6, 0x53, 0xb9, 0xaf, 0x9d, 0x86, 0x6b, 0x3c, 0x79, 0x81,
+ 0x35, 0x1e, 0x16, 0xd3, 0x82, 0xe0, 0x5a, 0xc1, 0x6b, 0x85, 0xc2, 0x3c, 0x25, 0x55, 0x63, 0x02,
+ 0x6b, 0x42, 0x32, 0x58, 0x20, 0x45, 0x2f, 0x39, 0xce, 0xa5, 0x5d, 0xd3, 0xbd, 0xa4, 0xfd, 0xc4,
+ 0xe1, 0xf6, 0x74, 0x13, 0xf7, 0xb2, 0xe2, 0x36, 0x68, 0xfb, 0x94, 0x37, 0xdf, 0xaf, 0xbc, 0xda,
+ 0x67, 0x85, 0xa7, 0x24, 0x9c, 0x3c, 0x83, 0x4a, 0x4d, 0x66, 0xb3, 0x4b, 0xec, 0xb0, 0xa3, 0x08,
+ 0x83, 0xd9, 0x03, 0xff, 0x9b, 0x21, 0xf0, 0xc1, 0x38, 0xc2, 0xee, 0x13, 0x8c, 0x13, 0x77, 0xed,
+ 0x2b, 0xa3, 0x61, 0x17, 0xf0, 0x35, 0x02, 0x76, 0x0a, 0x90, 0x2f, 0x85, 0xae, 0x49, 0xe8, 0x2f,
+ 0x5b, 0xa1, 0x7c, 0x76, 0x68, 0xc6, 0xb0, 0x3c, 0x11, 0x34, 0x4f, 0xf2, 0x2c, 0x34, 0x7a, 0x99,
+ 0x62, 0xfa, 0x25, 0xe1, 0xfd, 0xb7, 0x81, 0x02, 0x22, 0xdc, 0x4d, 0xa6, 0x55, 0x8a, 0x6d, 0xde,
+ 0x89, 0xb3, 0x99, 0x3d, 0x9a, 0x2f, 0x2e, 0x80, 0x99, 0x20, 0x1a, 0x16, 0xbe, 0x5f, 0x30, 0xc4,
+ 0xf0, 0x14, 0x28, 0x7a, 0xce, 0x9e, 0xdb, 0x86, 0x74, 0x47, 0x94, 0x3e, 0x8d, 0xb0, 0x7b, 0x37,
+ 0xd4, 0x5c, 0x38, 0x60, 0x91, 0xe4, 0x53, 0x5b, 0x24, 0xf1, 0xf6, 0x6e, 0x82, 0xfd, 0xa0, 0xbd,
+ 0x44, 0xf8, 0x12, 0x10, 0x0e, 0xb3, 0x26, 0xf4, 0x1f, 0x89, 0x46, 0xc0, 0xaf, 0x09, 0xed, 0x0d,
+ 0x0d, 0xa9, 0x49, 0x3a, 0x95, 0x6b, 0x8c, 0x60, 0x07, 0x3f, 0x1a, 0x3c, 0x2a, 0xc8, 0x41, 0x0d,
+ 0x60, 0x6c, 0xf0, 0x6e, 0x18, 0x35, 0x45, 0xd6, 0x9e, 0x97, 0x07, 0x0a, 0x61, 0xad, 0x11, 0xda,
+ 0x82, 0xda, 0xcb, 0x73, 0x47, 0x6d, 0xf0, 0xc6, 0xcf, 0x60, 0x7f, 0x57, 0x12, 0x0d, 0x1d, 0xce,
+ 0x09, 0x3e, 0xaa, 0x5d, 0x8c, 0x26, 0x8d, 0xd0, 0xcc, 0x12, 0x94, 0x4f, 0x7b, 0x4b, 0x4e, 0x24,
+ 0x12, 0xb9, 0x18, 0x8b, 0xd9, 0xf7, 0x4a, 0xdf, 0xcc, 0x07, 0x41, 0x0d, 0x97, 0x5d, 0x67, 0x77,
+ 0xc3, 0xed, 0x6a, 0xff, 0x26, 0x74, 0xd1, 0x43, 0xcc, 0xec, 0x42, 0x8a, 0x9f, 0x5d, 0xe0, 0x15,
+ 0xe9, 0x6e, 0xb4, 0x31, 0xd6, 0x1d, 0x61, 0xf8, 0x56, 0x6f, 0x02, 0x0b, 0x66, 0xa7, 0xb3, 0x6e,
+ 0x6e, 0xc3, 0x32, 0x9a, 0xb6, 0xdb, 0x3e, 0x0d, 0x78, 0xd6, 0x97, 0x9a, 0x38, 0x95, 0xe1, 0xfb,
+ 0xc8, 0xa9, 0x03, 0x56, 0xa9, 0xf8, 0x32, 0x2c, 0x07, 0x22, 0x95, 0xdf, 0x44, 0x86, 0x3f, 0x34,
+ 0x64, 0xb4, 0x77, 0xcc, 0x28, 0x3c, 0x23, 0x7d, 0x12, 0xf4, 0xcc, 0x12, 0xe0, 0x3b, 0x7b, 0xcd,
+ 0xfb, 0x15, 0x09, 0x4c, 0x21, 0x3c, 0x4a, 0x9d, 0x8e, 0xf6, 0x58, 0x2e, 0x8a, 0x69, 0xac, 0x6f,
+ 0xdc, 0x0b, 0x85, 0x9d, 0x12, 0x83, 0x1a, 0x12, 0xfa, 0x31, 0x98, 0x44, 0x42, 0x94, 0x38, 0x21,
+ 0x8a, 0xf9, 0x1e, 0x26, 0x16, 0x91, 0xbd, 0xf8, 0x3e, 0x2d, 0x81, 0xf9, 0x60, 0x9e, 0xb1, 0x0c,
+ 0xfd, 0xf6, 0x8e, 0x76, 0x87, 0xe8, 0x3a, 0x17, 0x6d, 0x89, 0xe1, 0x96, 0x70, 0x57, 0xfb, 0x76,
+ 0x2e, 0xa5, 0xca, 0x73, 0x25, 0xc7, 0x2c, 0x12, 0xa6, 0xd2, 0xc5, 0x24, 0x82, 0xd9, 0x0b, 0xf3,
+ 0xcb, 0x12, 0x00, 0x2d, 0x27, 0x9c, 0x2c, 0x1f, 0x42, 0x92, 0x3f, 0x29, 0xbc, 0x5b, 0x4c, 0x2b,
+ 0x1e, 0x15, 0x9b, 0xbe, 0xe7, 0x10, 0x74, 0xad, 0x1a, 0x56, 0xd2, 0x44, 0xda, 0xfa, 0x4c, 0x65,
+ 0xaf, 0xd7, 0xb5, 0xda, 0xa6, 0xdf, 0xef, 0x0f, 0x18, 0x2f, 0x5e, 0x7c, 0x39, 0x77, 0x2a, 0xa3,
+ 0x31, 0x2c, 0x23, 0x46, 0x96, 0x24, 0xea, 0x8f, 0x14, 0x44, 0xfd, 0x11, 0xf4, 0xf1, 0x19, 0x42,
+ 0x7c, 0x02, 0xea, 0x29, 0x83, 0xe3, 0x8d, 0x1e, 0xb4, 0x97, 0x5c, 0x68, 0x76, 0xda, 0xee, 0xde,
+ 0xee, 0x45, 0x8f, 0x75, 0x66, 0x4d, 0xd6, 0x51, 0x66, 0xe5, 0x5a, 0xe2, 0x56, 0xae, 0xb5, 0x1f,
+ 0x96, 0x45, 0xe3, 0xb2, 0x31, 0xfb, 0x2b, 0x0c, 0x0f, 0x23, 0x0c, 0x75, 0xa9, 0x5c, 0xb0, 0xfa,
+ 0x16, 0xa9, 0xf3, 0x69, 0x16, 0xa9, 0xdf, 0x2c, 0x14, 0xe5, 0x4d, 0xa8, 0x5e, 0x13, 0xf1, 0xa4,
+ 0x5b, 0x68, 0x42, 0x3f, 0x06, 0xde, 0x1b, 0xc1, 0xfc, 0xc5, 0xe8, 0x4d, 0x08, 0x31, 0x9f, 0x38,
+ 0xc0, 0xbf, 0xf5, 0xad, 0x69, 0x57, 0x68, 0x78, 0x16, 0x62, 0xd0, 0x0d, 0x11, 0x94, 0x44, 0x9c,
+ 0xe8, 0x52, 0x2d, 0xb7, 0x24, 0x96, 0x9f, 0x3d, 0x0a, 0x1f, 0x97, 0xc0, 0x2c, 0xbe, 0x72, 0x7c,
+ 0x69, 0x1f, 0x1f, 0xeb, 0x14, 0x34, 0x4a, 0x5e, 0xcc, 0x8a, 0x59, 0x05, 0xf9, 0xae, 0x65, 0x5f,
+ 0x0a, 0xbc, 0x1f, 0xd1, 0xff, 0xe8, 0xc2, 0x52, 0x69, 0xc0, 0x85, 0xa5, 0xe1, 0x36, 0x49, 0x58,
+ 0x6e, 0xcc, 0x68, 0xfa, 0x86, 0x9c, 0xc8, 0x85, 0xa5, 0x43, 0xc9, 0x65, 0x2f, 0xc6, 0xbf, 0xca,
+ 0x83, 0x62, 0x13, 0x9a, 0x6e, 0x7b, 0x47, 0x7b, 0xbf, 0x34, 0x70, 0x2a, 0x31, 0xcd, 0x4f, 0x25,
+ 0x96, 0xc1, 0xd4, 0x96, 0xd5, 0xf5, 0xa1, 0x4b, 0x3c, 0xc2, 0xd9, 0xae, 0x9d, 0x34, 0xf1, 0xa5,
+ 0xae, 0xd3, 0xbe, 0xb4, 0x48, 0x4d, 0xfb, 0xc5, 0x20, 0x7a, 0xf4, 0xe2, 0x32, 0xfe, 0xc8, 0x08,
+ 0x3e, 0x46, 0x06, 0xa1, 0xe7, 0xb8, 0x7e, 0xdc, 0x6d, 0x44, 0x31, 0x54, 0x9a, 0x8e, 0xeb, 0x1b,
+ 0xe4, 0x43, 0x04, 0xf3, 0xd6, 0x5e, 0xb7, 0xdb, 0x82, 0x0f, 0xfa, 0xc1, 0xb4, 0x2e, 0x78, 0x46,
+ 0xc6, 0xa2, 0xb3, 0xb5, 0xe5, 0x41, 0xb2, 0xa8, 0x50, 0x30, 0xe8, 0x93, 0x7a, 0x12, 0x14, 0xba,
+ 0xd6, 0xae, 0x45, 0x26, 0x22, 0x05, 0x83, 0x3c, 0xa8, 0xb7, 0x00, 0x25, 0x9a, 0x03, 0x11, 0x46,
+ 0x4f, 0x17, 0x71, 0xd3, 0x3c, 0x90, 0x8e, 0x74, 0xe6, 0x12, 0xdc, 0xf7, 0x4e, 0x4f, 0xe1, 0xf7,
+ 0xf8, 0x3f, 0x7f, 0xfc, 0x46, 0x64, 0xc3, 0x84, 0x48, 0x3c, 0x7e, 0x86, 0xeb, 0xc2, 0xb6, 0xe3,
+ 0x76, 0x02, 0xd9, 0xc4, 0x4f, 0x30, 0x68, 0xbe, 0x74, 0xdb, 0x1c, 0x03, 0x0b, 0xcf, 0x5e, 0xd3,
+ 0xde, 0x53, 0x44, 0xdd, 0x26, 0x2a, 0xfa, 0xbc, 0xe5, 0xef, 0xac, 0x41, 0xdf, 0xd4, 0xfe, 0x4a,
+ 0x1e, 0xa8, 0x71, 0xb3, 0xff, 0xbf, 0xc6, 0x0d, 0xd1, 0x38, 0x12, 0x01, 0xcc, 0xdf, 0x73, 0x6d,
+ 0x24, 0x47, 0xea, 0x55, 0xcb, 0xa4, 0xa8, 0x77, 0x81, 0x6b, 0xa2, 0xa7, 0x60, 0x29, 0xb5, 0xc2,
+ 0x38, 0xda, 0x4e, 0x1b, 0xf1, 0x19, 0xd4, 0x75, 0x70, 0x03, 0x79, 0xb9, 0xda, 0x5a, 0xab, 0xad,
+ 0x5a, 0xdb, 0x3b, 0x5d, 0x6b, 0x7b, 0xc7, 0xf7, 0xaa, 0xb6, 0xe7, 0x43, 0xb3, 0xd3, 0xd8, 0x32,
+ 0xc8, 0x3d, 0x62, 0x00, 0xd3, 0x11, 0xc9, 0xca, 0x7b, 0x8c, 0x8b, 0x8d, 0x6e, 0xac, 0xa6, 0xc4,
+ 0xb4, 0x94, 0xa7, 0xa2, 0x96, 0xe2, 0xed, 0x75, 0x43, 0x4c, 0xaf, 0xed, 0xc3, 0x34, 0x52, 0xf5,
+ 0xbd, 0x2e, 0x6e, 0x2e, 0x38, 0x73, 0xda, 0x71, 0x2e, 0x81, 0x93, 0xec, 0x9b, 0xcd, 0xbf, 0x15,
+ 0x41, 0x61, 0xc5, 0x35, 0x7b, 0x3b, 0xda, 0xf3, 0x98, 0xfe, 0x79, 0x5c, 0x6d, 0x22, 0xd4, 0x4e,
+ 0x69, 0x98, 0x76, 0xca, 0x43, 0xb4, 0x33, 0xcf, 0x68, 0x67, 0xfc, 0xa2, 0xf3, 0x59, 0x30, 0xd7,
+ 0x76, 0xba, 0x5d, 0xd8, 0x46, 0xf2, 0xa8, 0x76, 0xf0, 0x6a, 0xcf, 0x8c, 0xc1, 0xa5, 0xe1, 0x08,
+ 0xfb, 0xd0, 0x6f, 0x92, 0x35, 0x76, 0xa2, 0xf4, 0x51, 0x82, 0xf6, 0x72, 0x09, 0xe4, 0xf5, 0xce,
+ 0x36, 0xe4, 0xd6, 0xe1, 0x73, 0xcc, 0x3a, 0xfc, 0x29, 0x50, 0xf4, 0x4d, 0x77, 0x1b, 0xfa, 0xc1,
+ 0x3a, 0x01, 0x79, 0x0a, 0x03, 0xff, 0xcb, 0x4c, 0xe0, 0xff, 0xef, 0x05, 0x79, 0x24, 0x33, 0xea,
+ 0x24, 0x7f, 0xc3, 0x20, 0xf8, 0xb1, 0xec, 0x17, 0x51, 0x89, 0x8b, 0xa8, 0xd6, 0x06, 0xfe, 0xa0,
+ 0x1f, 0xeb, 0xc2, 0xc1, 0xc0, 0xb4, 0xd7, 0x82, 0x19, 0xab, 0xed, 0xd8, 0xd5, 0x5d, 0x73, 0x1b,
+ 0xd2, 0x6a, 0x46, 0x09, 0xc1, 0x5b, 0x7d, 0xd7, 0x79, 0xc0, 0xa2, 0x8b, 0x5a, 0x51, 0x02, 0xaa,
+ 0xc2, 0x8e, 0xd5, 0xe9, 0x40, 0x9b, 0xb6, 0x6c, 0xfa, 0x74, 0xf6, 0x0c, 0xc8, 0x23, 0x1e, 0x90,
+ 0xfe, 0x20, 0x63, 0x41, 0x39, 0xa6, 0xce, 0xa1, 0x66, 0x45, 0x1a, 0xaf, 0x92, 0xe3, 0xd7, 0x5c,
+ 0x45, 0xbc, 0x86, 0x48, 0xe5, 0x06, 0x37, 0xae, 0x27, 0x80, 0x82, 0xed, 0x74, 0xe0, 0xd0, 0x41,
+ 0x88, 0xe4, 0x52, 0x9f, 0x02, 0x0a, 0xb0, 0x83, 0x7a, 0x05, 0x19, 0x67, 0x3f, 0x93, 0x2c, 0x4b,
+ 0x83, 0x64, 0x4e, 0xe7, 0x9a, 0x34, 0x88, 0xdb, 0xec, 0x1b, 0xe0, 0x8f, 0x4e, 0x81, 0xe3, 0xa4,
+ 0x0f, 0x68, 0xee, 0x5d, 0x44, 0xa4, 0x2e, 0x42, 0xed, 0xf5, 0x83, 0x07, 0xae, 0xe3, 0xbc, 0xb2,
+ 0x9f, 0x04, 0x05, 0x6f, 0xef, 0x62, 0x68, 0x84, 0x92, 0x07, 0xb6, 0xe9, 0x4a, 0x63, 0x19, 0xce,
+ 0xe4, 0x51, 0x87, 0x33, 0x6e, 0x68, 0x92, 0x83, 0xc6, 0x1f, 0x0d, 0x64, 0xe4, 0x78, 0x47, 0x30,
+ 0x90, 0x0d, 0x1a, 0x86, 0x4e, 0x83, 0x29, 0x73, 0xcb, 0x87, 0x6e, 0x64, 0x26, 0xd2, 0x47, 0x34,
+ 0x54, 0x5e, 0x84, 0x5b, 0x8e, 0x8b, 0xc4, 0x42, 0x82, 0xc4, 0x86, 0xcf, 0x4c, 0xcb, 0x05, 0xdc,
+ 0x0e, 0xda, 0xad, 0xe0, 0x84, 0xed, 0x54, 0x60, 0x8f, 0xca, 0x99, 0xa0, 0x38, 0x4f, 0xee, 0x6a,
+ 0x3f, 0xf0, 0xe2, 0x40, 0x57, 0xb2, 0x70, 0xb0, 0x2b, 0xd1, 0x3e, 0x97, 0x76, 0xce, 0xdc, 0x07,
+ 0xf4, 0xd8, 0x2c, 0x34, 0xf5, 0xe9, 0x60, 0xae, 0x43, 0x3d, 0xc4, 0xda, 0x56, 0xd8, 0x4a, 0x62,
+ 0xbf, 0xe3, 0x32, 0x47, 0x8a, 0x94, 0x67, 0x15, 0x69, 0x05, 0x4c, 0xe3, 0x83, 0xd8, 0x48, 0x93,
+ 0x0a, 0x7d, 0x1e, 0xf9, 0x78, 0x5a, 0x17, 0x56, 0x8a, 0x11, 0xdb, 0x62, 0x99, 0x7e, 0x62, 0x84,
+ 0x1f, 0xa7, 0x9b, 0x7d, 0x27, 0x4b, 0x28, 0xfb, 0xe6, 0xf8, 0x4b, 0x45, 0x70, 0x4d, 0xd9, 0x75,
+ 0x3c, 0x0f, 0x1f, 0xc3, 0xe9, 0x6f, 0x98, 0x6f, 0x94, 0xb8, 0x2b, 0x80, 0x1e, 0xd1, 0xcd, 0x6f,
+ 0x50, 0x83, 0x9a, 0x5c, 0xd3, 0xf8, 0x0b, 0xe1, 0x10, 0x36, 0xe1, 0xfe, 0x43, 0x8c, 0xd0, 0xff,
+ 0x73, 0x34, 0x92, 0xf7, 0xe4, 0x44, 0xa2, 0xea, 0xa4, 0x94, 0x55, 0xf6, 0xcd, 0xe5, 0x4b, 0x12,
+ 0x78, 0x74, 0x3f, 0x37, 0x1b, 0xb6, 0x17, 0x36, 0x98, 0xeb, 0x86, 0xb4, 0x17, 0x3e, 0x0a, 0x4b,
+ 0xe2, 0x8d, 0xbf, 0x31, 0x75, 0x67, 0x4a, 0x8b, 0x59, 0x2c, 0x89, 0x0e, 0xf4, 0x24, 0xdd, 0xf8,
+ 0x9b, 0x9a, 0x7c, 0xf6, 0xc2, 0xfd, 0xdd, 0x3c, 0x38, 0xbe, 0xe2, 0x3a, 0x7b, 0x3d, 0x2f, 0xea,
+ 0x81, 0xfe, 0x64, 0xf0, 0x86, 0x6c, 0x51, 0xc4, 0x34, 0xb8, 0x1e, 0xcc, 0xba, 0xd4, 0x9a, 0x8b,
+ 0xb6, 0x67, 0xd9, 0x24, 0xb6, 0xf7, 0x92, 0x0f, 0xd3, 0x7b, 0x45, 0xfd, 0x4c, 0x9e, 0xeb, 0x67,
+ 0xfa, 0x7b, 0x8e, 0xc2, 0x80, 0x9e, 0xe3, 0x8f, 0xa5, 0x94, 0x83, 0x6a, 0x9f, 0x88, 0x62, 0xfa,
+ 0x8b, 0x32, 0x28, 0x6e, 0xe3, 0x8c, 0xb4, 0xbb, 0x78, 0xbc, 0x58, 0xcd, 0x30, 0x71, 0x83, 0x7e,
+ 0x1a, 0xc9, 0x55, 0x66, 0x75, 0x38, 0xd5, 0x00, 0x97, 0xcc, 0x6d, 0xf6, 0x4a, 0xf5, 0x70, 0x1e,
+ 0xcc, 0x85, 0xa5, 0x57, 0x3b, 0x1e, 0x17, 0xeb, 0x95, 0xd1, 0xa8, 0x79, 0x11, 0x8d, 0x3a, 0xb0,
+ 0xce, 0x1c, 0x8e, 0x3a, 0x32, 0x33, 0xea, 0x0c, 0x1c, 0x5d, 0xe6, 0x62, 0x46, 0x17, 0xed, 0xb9,
+ 0xb2, 0xe8, 0x25, 0x7a, 0x7c, 0xd7, 0x8a, 0x6b, 0xf3, 0x48, 0x1e, 0x2c, 0x04, 0xaf, 0xf2, 0x1b,
+ 0x5e, 0xab, 0xec, 0x95, 0xe4, 0xc3, 0x12, 0x38, 0x71, 0xb0, 0x33, 0xff, 0x2e, 0xde, 0x4b, 0x0d,
+ 0xd5, 0xc9, 0x0b, 0xbd, 0xd4, 0xf0, 0x13, 0xbf, 0x49, 0x97, 0x18, 0x12, 0x85, 0xb3, 0xf7, 0x86,
+ 0x77, 0xe2, 0x62, 0x41, 0x4f, 0x04, 0x89, 0x66, 0x2f, 0xc0, 0x9f, 0x92, 0xc1, 0x4c, 0x13, 0xfa,
+ 0x35, 0x73, 0xdf, 0xd9, 0xf3, 0x35, 0x53, 0x74, 0x7b, 0xee, 0x69, 0xa0, 0xd8, 0xc5, 0x9f, 0xe0,
+ 0x0e, 0x86, 0x0d, 0x41, 0xca, 0xee, 0x6f, 0x61, 0xdf, 0x20, 0x42, 0xda, 0xa0, 0xf9, 0xf9, 0x58,
+ 0x34, 0x22, 0xbb, 0xa3, 0x21, 0x77, 0x63, 0xd9, 0xda, 0x49, 0xb5, 0x77, 0x1a, 0x57, 0x74, 0xf6,
+ 0xb0, 0xfc, 0xb0, 0x0c, 0xe6, 0x9b, 0xd0, 0xaf, 0x7a, 0xcb, 0xe6, 0x65, 0xc7, 0xb5, 0x7c, 0xa8,
+ 0xad, 0x88, 0x42, 0x73, 0x06, 0x00, 0x2b, 0xfc, 0x8c, 0x46, 0xc8, 0x62, 0x52, 0xb4, 0xb7, 0xa4,
+ 0x75, 0x14, 0xe2, 0xf8, 0x18, 0x0b, 0x08, 0xa9, 0x7c, 0x2c, 0x92, 0x8a, 0x9f, 0xc0, 0x35, 0xe0,
+ 0x12, 0x05, 0xa2, 0xe4, 0xb6, 0x77, 0xac, 0xcb, 0xb0, 0x93, 0x12, 0x88, 0xe0, 0xb3, 0x08, 0x88,
+ 0x90, 0x50, 0x6a, 0xf7, 0x15, 0x8e, 0x8f, 0x71, 0xb8, 0xaf, 0x24, 0x11, 0x9c, 0x48, 0x90, 0x2b,
+ 0xd4, 0xf5, 0xd0, 0xf5, 0xcc, 0x7b, 0x44, 0xc5, 0x1a, 0x99, 0x6c, 0x12, 0x6b, 0xb2, 0x8d, 0xd4,
+ 0xb1, 0x90, 0xb2, 0x87, 0xe9, 0x74, 0x3e, 0x8b, 0x8e, 0x65, 0x60, 0xd1, 0xd9, 0x0b, 0xfd, 0x7d,
+ 0x32, 0xb8, 0x3a, 0x8c, 0xfe, 0xd2, 0x84, 0x7e, 0xc5, 0xf4, 0x76, 0x2e, 0x3a, 0xa6, 0xdb, 0xd1,
+ 0xca, 0x63, 0x38, 0x70, 0xa8, 0xfd, 0x21, 0x0b, 0x42, 0x9d, 0x07, 0x61, 0xa0, 0x2b, 0xe9, 0x40,
+ 0x5e, 0xc6, 0xd1, 0xc9, 0x24, 0x7a, 0xbb, 0xbe, 0x23, 0x04, 0xeb, 0x59, 0x1c, 0x58, 0x77, 0x8f,
+ 0xca, 0x62, 0xf6, 0xc0, 0xfd, 0x2c, 0x19, 0x11, 0x18, 0xaf, 0xe7, 0x0b, 0xa2, 0x80, 0xc5, 0x78,
+ 0xbd, 0xca, 0xb1, 0x5e, 0xaf, 0x23, 0x8d, 0x11, 0x43, 0x3d, 0x96, 0xb3, 0x1d, 0x23, 0x8e, 0xd0,
+ 0x1b, 0xf9, 0x5d, 0x32, 0x50, 0x70, 0xf8, 0x2f, 0xc6, 0x23, 0x9c, 0x8d, 0xa6, 0x9d, 0x8c, 0xce,
+ 0x01, 0xef, 0xf3, 0xa9, 0xb4, 0xde, 0xe7, 0xda, 0x3b, 0xd3, 0xfa, 0x98, 0xf7, 0x73, 0x3b, 0x16,
+ 0xc4, 0x52, 0xb9, 0x90, 0x0f, 0xe1, 0x20, 0x7b, 0xd0, 0x7e, 0x4c, 0x06, 0x00, 0x35, 0x68, 0x7a,
+ 0x36, 0xe2, 0x7e, 0x51, 0xb8, 0x6e, 0x63, 0xfd, 0xee, 0x11, 0x50, 0x57, 0xf7, 0x01, 0x45, 0x28,
+ 0x46, 0xa7, 0x2e, 0x5e, 0x9f, 0xd6, 0xb7, 0x32, 0xe2, 0x6a, 0x2c, 0xb0, 0xa4, 0xf2, 0xb6, 0x8c,
+ 0x2d, 0x3b, 0x7b, 0x40, 0xfe, 0x87, 0x04, 0x0a, 0x2d, 0xa7, 0x09, 0xfd, 0xc3, 0x9b, 0x02, 0xa9,
+ 0xa3, 0x06, 0xe0, 0x72, 0xc7, 0x11, 0x35, 0x60, 0x10, 0xa1, 0xec, 0x45, 0xf7, 0x5e, 0x09, 0xcc,
+ 0xb5, 0x9c, 0x72, 0xb8, 0x38, 0x25, 0xee, 0xab, 0xfa, 0x2f, 0xb9, 0x94, 0x6b, 0x18, 0x6c, 0x31,
+ 0x31, 0x02, 0x4b, 0xb5, 0x7a, 0x90, 0x40, 0x2f, 0x7b, 0xb9, 0xdd, 0x01, 0x8e, 0x6f, 0xd8, 0x1d,
+ 0xc7, 0x80, 0x1d, 0x87, 0xae, 0x74, 0xab, 0x2a, 0xc8, 0xef, 0xd9, 0x1d, 0x07, 0xb3, 0x5c, 0x30,
+ 0xf0, 0x7f, 0x94, 0xe6, 0xc2, 0x8e, 0x43, 0x7d, 0x03, 0xf0, 0x7f, 0xed, 0x2f, 0x64, 0x90, 0x47,
+ 0xdf, 0x8a, 0x8b, 0xfa, 0x5d, 0x72, 0xca, 0x38, 0x08, 0x88, 0xfc, 0x58, 0x2c, 0xa1, 0x7b, 0x98,
+ 0xb5, 0x7f, 0xe2, 0xc1, 0x7a, 0x43, 0x5c, 0x79, 0x8c, 0x28, 0xa2, 0x35, 0x7f, 0xf5, 0x34, 0x98,
+ 0xba, 0xd8, 0x75, 0xda, 0x97, 0xa2, 0xe3, 0xfa, 0xf4, 0x51, 0xbd, 0x05, 0x14, 0x5c, 0xd3, 0xde,
+ 0x86, 0x74, 0x4f, 0xe1, 0x64, 0x5f, 0x5f, 0x88, 0xbd, 0x5e, 0x0c, 0x92, 0x45, 0x7b, 0x67, 0x9a,
+ 0x08, 0x0c, 0x03, 0x2a, 0x9f, 0x4e, 0x1f, 0x2a, 0x23, 0x9c, 0x3c, 0x53, 0xc0, 0x5c, 0xb9, 0x54,
+ 0x27, 0xb7, 0x1a, 0x36, 0xce, 0xe9, 0x8a, 0x8c, 0x61, 0x46, 0x32, 0xc9, 0x10, 0x66, 0x44, 0xfe,
+ 0x3f, 0x2d, 0xcc, 0x03, 0x2a, 0x7f, 0x14, 0x30, 0x7f, 0x5a, 0x02, 0xf3, 0x35, 0xcb, 0xf3, 0xe3,
+ 0xbc, 0xfd, 0x13, 0xa2, 0xff, 0xbe, 0x24, 0xad, 0xa9, 0xcc, 0x95, 0x23, 0x1c, 0xf6, 0x37, 0x95,
+ 0x39, 0x9c, 0x54, 0xc4, 0x64, 0x8e, 0xa5, 0x60, 0x0e, 0xc8, 0x95, 0xf6, 0xc2, 0x92, 0x4c, 0x6d,
+ 0x28, 0x45, 0x85, 0x4c, 0xde, 0x50, 0x8a, 0x2d, 0x3b, 0x7b, 0xf9, 0xfe, 0x85, 0x04, 0x4e, 0xa0,
+ 0xe2, 0x93, 0x96, 0xa5, 0xe2, 0xc5, 0x3c, 0x74, 0x59, 0x2a, 0xf5, 0xca, 0xf8, 0x01, 0x5e, 0xc6,
+ 0xb1, 0x32, 0x3e, 0x8c, 0xe8, 0x84, 0xc5, 0x1c, 0xb3, 0x0c, 0x3b, 0x4c, 0xcc, 0x09, 0xcb, 0xb0,
+ 0xa3, 0x8b, 0x39, 0x79, 0x29, 0x76, 0x44, 0x31, 0x1f, 0xd9, 0x02, 0xeb, 0x2f, 0xc8, 0xa1, 0x98,
+ 0x63, 0xd7, 0x36, 0x12, 0xc4, 0x9c, 0xfa, 0x44, 0xaf, 0xf6, 0xee, 0x11, 0x05, 0x3f, 0xe6, 0xf5,
+ 0x8d, 0x51, 0x60, 0x3a, 0xc2, 0x35, 0x8e, 0x9f, 0x93, 0xc1, 0x02, 0xe5, 0x62, 0xf0, 0x94, 0x39,
+ 0x01, 0xa3, 0xd4, 0x53, 0xe6, 0xd4, 0x67, 0x80, 0x78, 0xce, 0x26, 0x7f, 0x06, 0x28, 0xb1, 0xfc,
+ 0xec, 0xc1, 0xf9, 0xcb, 0x3c, 0x38, 0x85, 0x58, 0x58, 0x73, 0x3a, 0xd6, 0xd6, 0x3e, 0xe1, 0xe2,
+ 0x9c, 0xd9, 0xdd, 0x83, 0x9e, 0xf6, 0x01, 0x49, 0x14, 0xa5, 0xff, 0x0d, 0x00, 0xa7, 0x07, 0x5d,
+ 0x12, 0xc7, 0x8d, 0x02, 0x75, 0x57, 0x5c, 0x65, 0x0f, 0x96, 0x14, 0x5e, 0x86, 0xd3, 0x08, 0x88,
+ 0x18, 0x0c, 0x3d, 0x64, 0x15, 0xce, 0x84, 0x6f, 0xfa, 0x1d, 0x3c, 0x72, 0x07, 0x1d, 0x3c, 0x6e,
+ 0x06, 0xb2, 0xd9, 0xe9, 0x84, 0x50, 0xf5, 0x6f, 0x66, 0xe3, 0x32, 0x0d, 0x94, 0x05, 0xe5, 0xf4,
+ 0x60, 0x74, 0x34, 0x2f, 0x26, 0xa7, 0x07, 0x7d, 0x75, 0x11, 0x14, 0xc9, 0xe5, 0xe0, 0xe1, 0x8a,
+ 0xfe, 0xe0, 0xcc, 0x34, 0x17, 0x6f, 0xda, 0x35, 0x78, 0x35, 0xbc, 0x23, 0x95, 0x64, 0x06, 0xf5,
+ 0xd3, 0x91, 0x9d, 0x6c, 0x70, 0x0a, 0xf6, 0x8c, 0x91, 0x29, 0x4f, 0x66, 0x37, 0xac, 0xd4, 0xeb,
+ 0x75, 0xf7, 0x5b, 0x34, 0xf0, 0x40, 0xaa, 0xdd, 0x30, 0x26, 0x7e, 0x81, 0x74, 0x20, 0x7e, 0x41,
+ 0xea, 0xdd, 0x30, 0x8e, 0x8f, 0x71, 0xec, 0x86, 0x25, 0x11, 0x9c, 0xc8, 0xad, 0x3c, 0xd8, 0x6a,
+ 0xa6, 0x77, 0x13, 0xfc, 0xc3, 0x60, 0xcf, 0x6a, 0xc0, 0x3b, 0xbb, 0x0c, 0xba, 0xb6, 0x20, 0xf1,
+ 0x4e, 0x16, 0xf5, 0x29, 0xa0, 0xb8, 0xe5, 0xb8, 0xbb, 0x66, 0xb0, 0x71, 0xdf, 0x7f, 0x52, 0x84,
+ 0xde, 0x07, 0xb0, 0x8c, 0xf3, 0x18, 0x34, 0x2f, 0x9a, 0x8f, 0x3c, 0xc7, 0xea, 0xd1, 0xa0, 0x8f,
+ 0xe8, 0xaf, 0x7a, 0x23, 0x98, 0xa7, 0xb1, 0x1f, 0xeb, 0xd0, 0xf3, 0x61, 0x87, 0x46, 0xb4, 0xe0,
+ 0x13, 0xd5, 0xb3, 0x60, 0x8e, 0x26, 0x2c, 0x5b, 0x5d, 0xe8, 0xd1, 0xa0, 0x16, 0x5c, 0x9a, 0x7a,
+ 0x0a, 0x14, 0x2d, 0xef, 0x5e, 0xcf, 0xb1, 0x69, 0x40, 0x3e, 0xfa, 0xa4, 0xde, 0x0c, 0x8e, 0xd3,
+ 0x7c, 0xa1, 0xb1, 0x4a, 0x0e, 0xec, 0xf4, 0x27, 0x23, 0xd5, 0xb2, 0x9d, 0x75, 0xd7, 0xd9, 0x76,
+ 0xa1, 0xe7, 0xe1, 0x53, 0x53, 0xd3, 0x06, 0x93, 0xa2, 0x5e, 0x00, 0x27, 0xba, 0x96, 0x7d, 0xc9,
+ 0xc3, 0x31, 0x82, 0x97, 0xa9, 0xdb, 0xd8, 0xdc, 0x80, 0xd8, 0xdd, 0x4c, 0x63, 0xa3, 0x72, 0x60,
+ 0x3f, 0x31, 0x0e, 0x52, 0x61, 0xa2, 0xe4, 0x2f, 0x99, 0xed, 0x4b, 0xf8, 0x3d, 0x75, 0x47, 0x3d,
+ 0x90, 0xce, 0x08, 0x83, 0xdc, 0x01, 0xb0, 0xc0, 0x09, 0x03, 0xa7, 0x69, 0x2f, 0xcb, 0x81, 0x39,
+ 0xae, 0x00, 0x13, 0xa8, 0x41, 0xb7, 0xe8, 0x9d, 0xdf, 0xb1, 0x7c, 0x88, 0x98, 0xa3, 0x67, 0x5d,
+ 0x9e, 0x34, 0x84, 0x79, 0xe3, 0xc0, 0x87, 0xc6, 0x00, 0x62, 0x88, 0x2f, 0xd2, 0xe1, 0x61, 0xcf,
+ 0x32, 0x8f, 0xda, 0xaa, 0x5c, 0x9a, 0xf6, 0x1c, 0xa0, 0x1e, 0xa4, 0xc6, 0x78, 0x81, 0xe4, 0xd2,
+ 0x79, 0x81, 0x20, 0xb9, 0x99, 0xdd, 0xae, 0x73, 0x05, 0x76, 0x42, 0xb2, 0x54, 0x57, 0x0f, 0xa4,
+ 0x6b, 0x9f, 0x1f, 0x65, 0x5e, 0x98, 0xfa, 0x9a, 0x0d, 0xd4, 0xc8, 0xf6, 0xda, 0x6d, 0x08, 0x3b,
+ 0xf4, 0xe0, 0x5a, 0xf0, 0x98, 0xf2, 0x02, 0x8e, 0xd4, 0xb3, 0xc8, 0x23, 0xba, 0x81, 0xe3, 0xa3,
+ 0x57, 0x83, 0x22, 0xb9, 0xcd, 0x4e, 0x7b, 0xd9, 0xc2, 0xc0, 0xbe, 0x66, 0x81, 0xef, 0x6b, 0x36,
+ 0xc0, 0x9c, 0xed, 0xa0, 0xe2, 0xd6, 0x4d, 0xd7, 0xdc, 0xf5, 0x92, 0x16, 0x89, 0x09, 0xdd, 0xd0,
+ 0x22, 0xa8, 0x33, 0x9f, 0xad, 0x1e, 0x33, 0x38, 0x32, 0xea, 0xff, 0x0e, 0x8e, 0x5f, 0xa4, 0x01,
+ 0x1e, 0x3c, 0x4a, 0x59, 0x8a, 0x77, 0xa1, 0xec, 0xa3, 0xbc, 0xc4, 0x7f, 0xb9, 0x7a, 0xcc, 0xe8,
+ 0x27, 0xa6, 0xfe, 0x17, 0xb0, 0x80, 0x1e, 0x3b, 0xce, 0x95, 0x80, 0x71, 0x39, 0xde, 0x8e, 0xec,
+ 0x23, 0xbf, 0xc6, 0x7d, 0xb8, 0x7a, 0xcc, 0xe8, 0x23, 0xa5, 0x36, 0x00, 0xd8, 0xf1, 0x77, 0xbb,
+ 0x94, 0x70, 0x3e, 0x5e, 0x25, 0xfb, 0x08, 0xaf, 0x86, 0x1f, 0xad, 0x1e, 0x33, 0x18, 0x12, 0x6a,
+ 0x0d, 0xcc, 0xf8, 0x0f, 0xfa, 0x94, 0x5e, 0x21, 0xde, 0x77, 0xa1, 0x8f, 0x5e, 0x2b, 0xf8, 0x66,
+ 0xf5, 0x98, 0x11, 0x11, 0x50, 0xab, 0x60, 0xba, 0x77, 0x91, 0x12, 0x2b, 0xc6, 0xf7, 0x77, 0x7d,
+ 0xc4, 0xd6, 0x2f, 0x86, 0xb4, 0xc2, 0xcf, 0x11, 0x63, 0x6d, 0xef, 0x32, 0xa5, 0x35, 0x25, 0xcc,
+ 0x58, 0x39, 0xf8, 0x06, 0x31, 0x16, 0x12, 0x50, 0xab, 0x60, 0xc6, 0xb3, 0xcd, 0x9e, 0xb7, 0xe3,
+ 0xf8, 0xde, 0xe9, 0xe9, 0x3e, 0x37, 0xd7, 0x78, 0x6a, 0x4d, 0xfa, 0x8d, 0x11, 0x7d, 0xad, 0x3e,
+ 0x05, 0x5c, 0xbd, 0xd7, 0xeb, 0x98, 0x3e, 0xd4, 0x1f, 0xb4, 0x3c, 0xdf, 0xb2, 0xb7, 0x83, 0x08,
+ 0xc5, 0x64, 0xb0, 0x18, 0xfc, 0x52, 0x5d, 0xa4, 0x07, 0xde, 0x00, 0x6e, 0x9b, 0x5a, 0xff, 0x5e,
+ 0x2b, 0x29, 0x96, 0x39, 0xe7, 0xf6, 0x74, 0x90, 0x47, 0xaf, 0xf0, 0xe0, 0xb2, 0x30, 0x78, 0x1d,
+ 0xb7, 0x5f, 0x77, 0x70, 0x03, 0x46, 0x1f, 0xf5, 0x8d, 0x4f, 0x73, 0x07, 0xc6, 0xa7, 0xeb, 0xc1,
+ 0xac, 0xe5, 0xad, 0x59, 0xdb, 0xc4, 0x38, 0xa6, 0xe3, 0x07, 0x9b, 0x44, 0x16, 0x13, 0xea, 0xf0,
+ 0x0a, 0x19, 0x38, 0x8e, 0x07, 0x8b, 0x09, 0x41, 0x8a, 0x76, 0x13, 0x98, 0x63, 0x1b, 0x19, 0xb9,
+ 0x12, 0xd7, 0x8a, 0x4c, 0x6b, 0xfa, 0xa4, 0xdd, 0x08, 0x16, 0x78, 0x9d, 0x66, 0x2c, 0x08, 0x39,
+ 0xe8, 0x0a, 0xb5, 0x1b, 0xc0, 0xf1, 0xbe, 0x86, 0x15, 0x84, 0x8c, 0xc9, 0x45, 0x21, 0x63, 0xae,
+ 0x07, 0x20, 0xd2, 0xe2, 0x81, 0x64, 0xae, 0x03, 0x33, 0xa1, 0x5e, 0x0e, 0xcc, 0xf0, 0xa7, 0x39,
+ 0x30, 0x1d, 0x28, 0xdb, 0xa0, 0x0c, 0x68, 0x64, 0xb2, 0x99, 0xfd, 0xa1, 0x60, 0x64, 0x62, 0xd3,
+ 0x90, 0x99, 0x10, 0x79, 0x65, 0xb7, 0x2c, 0xbf, 0x1b, 0x9c, 0x6c, 0xec, 0x4f, 0x56, 0xd7, 0x01,
+ 0xb0, 0x30, 0x46, 0xad, 0xe8, 0xa8, 0xe3, 0x13, 0x53, 0xb4, 0x07, 0xa2, 0x0f, 0x0c, 0x8d, 0xb3,
+ 0xdf, 0x45, 0xcf, 0x21, 0xce, 0x80, 0x02, 0x09, 0xd3, 0x7f, 0x4c, 0x5d, 0x00, 0x40, 0xbf, 0x7f,
+ 0x5d, 0x37, 0xaa, 0x7a, 0xbd, 0xac, 0x2b, 0x39, 0xed, 0x15, 0x12, 0x98, 0x09, 0x1b, 0xc1, 0xc0,
+ 0x4a, 0xea, 0x54, 0xb5, 0x86, 0xde, 0x3a, 0x7a, 0xb0, 0x51, 0xb1, 0x4a, 0xf6, 0x34, 0xf0, 0xa8,
+ 0x3d, 0x0f, 0x2e, 0x5b, 0xae, 0xe7, 0x1b, 0xce, 0x95, 0x65, 0xc7, 0x8d, 0x06, 0x56, 0x12, 0xe0,
+ 0x36, 0xee, 0x35, 0x32, 0x18, 0x3b, 0x10, 0x9f, 0x79, 0x83, 0x2e, 0x5d, 0xf8, 0x8f, 0x12, 0x10,
+ 0x5d, 0xdf, 0x35, 0x6d, 0xaf, 0xe7, 0x78, 0xd0, 0x70, 0xae, 0x78, 0x25, 0xbb, 0x53, 0x76, 0xba,
+ 0x7b, 0xbb, 0xb6, 0x47, 0x4d, 0xbe, 0xb8, 0xd7, 0x48, 0x3a, 0xf8, 0x4e, 0xe1, 0x05, 0x00, 0xca,
+ 0x8d, 0x5a, 0x4d, 0x2f, 0xb7, 0xaa, 0x8d, 0xba, 0x72, 0x0c, 0x49, 0xab, 0x55, 0x5a, 0xaa, 0x21,
+ 0xe9, 0x7c, 0x3f, 0x98, 0x0e, 0xda, 0x34, 0x8d, 0x72, 0x93, 0x0b, 0xa2, 0xdc, 0xa8, 0x25, 0x30,
+ 0x1d, 0xb4, 0x72, 0x3a, 0x22, 0x3c, 0xb6, 0xff, 0x54, 0xf3, 0xae, 0xe9, 0xfa, 0xd8, 0x40, 0x09,
+ 0x88, 0x2c, 0x99, 0x1e, 0x34, 0xc2, 0xcf, 0xce, 0x3e, 0x81, 0x72, 0xa0, 0x82, 0x85, 0x52, 0xad,
+ 0xb6, 0xd9, 0x30, 0x36, 0xeb, 0x8d, 0xd6, 0x6a, 0xb5, 0xbe, 0x42, 0x46, 0xc8, 0xea, 0x4a, 0xbd,
+ 0x61, 0xe8, 0x64, 0x80, 0x6c, 0x2a, 0x39, 0x72, 0xa7, 0xf5, 0xd2, 0x34, 0x28, 0xf6, 0xb0, 0x74,
+ 0xb5, 0x2f, 0xc9, 0x29, 0xc3, 0x19, 0x84, 0x38, 0xc5, 0xdc, 0xba, 0xcb, 0x1d, 0x29, 0x90, 0x06,
+ 0x1c, 0xf9, 0x3d, 0x0b, 0xe6, 0x88, 0xa9, 0xee, 0xe1, 0xdd, 0x19, 0x8c, 0x9c, 0x6c, 0x70, 0x69,
+ 0xda, 0xc7, 0xa5, 0x14, 0x31, 0x0e, 0x06, 0x72, 0x94, 0xce, 0xb8, 0xf8, 0xbd, 0xdc, 0x68, 0x97,
+ 0x5a, 0x54, 0xeb, 0x2d, 0xdd, 0xa8, 0x97, 0x6a, 0x34, 0x8b, 0xac, 0x9e, 0x06, 0x27, 0xeb, 0x0d,
+ 0x1a, 0xd2, 0xb1, 0xb9, 0xd9, 0x6a, 0x6c, 0x56, 0xd7, 0xd6, 0x1b, 0x46, 0x4b, 0x29, 0xa8, 0xa7,
+ 0x80, 0x4a, 0xfe, 0x6f, 0x56, 0x9b, 0x9b, 0xe5, 0x52, 0xbd, 0xac, 0xd7, 0xf4, 0x8a, 0x52, 0x54,
+ 0x1f, 0x07, 0x6e, 0x20, 0x97, 0x24, 0x35, 0x96, 0x37, 0x8d, 0xc6, 0xf9, 0x26, 0x42, 0xd0, 0xd0,
+ 0x6b, 0x25, 0xa4, 0x48, 0xcc, 0xdd, 0xd6, 0x53, 0xea, 0x55, 0xe0, 0x38, 0xbe, 0xf8, 0xbe, 0xd6,
+ 0x28, 0x55, 0x68, 0x79, 0xd3, 0xea, 0xb5, 0xe0, 0x74, 0xb5, 0xde, 0xdc, 0x58, 0x5e, 0xae, 0x96,
+ 0xab, 0x7a, 0xbd, 0xb5, 0xb9, 0xae, 0x1b, 0x6b, 0xd5, 0x66, 0x13, 0x7d, 0xab, 0xcc, 0xe0, 0x9b,
+ 0x83, 0x49, 0x9f, 0xa9, 0xbd, 0x5f, 0x06, 0xf3, 0xe7, 0xcc, 0xae, 0x85, 0x06, 0x0a, 0x7c, 0xa5,
+ 0x78, 0xdf, 0x69, 0x20, 0x1f, 0x5f, 0x3d, 0x4e, 0xcf, 0x13, 0xe0, 0x07, 0xed, 0x87, 0xe4, 0x94,
+ 0xa7, 0x81, 0x28, 0x10, 0xa4, 0xc4, 0x45, 0xae, 0xb4, 0x98, 0xb9, 0xeb, 0x6b, 0xa5, 0x14, 0xa7,
+ 0x81, 0xc4, 0xc9, 0xa7, 0x03, 0xff, 0xe7, 0xc7, 0x05, 0xbe, 0x02, 0xe6, 0x36, 0xea, 0xa5, 0x8d,
+ 0xd6, 0x6a, 0xc3, 0xa8, 0x7e, 0x1f, 0x8e, 0x65, 0x3f, 0x0f, 0x66, 0x96, 0x1b, 0xc6, 0x52, 0xb5,
+ 0x52, 0xd1, 0xeb, 0x4a, 0x41, 0x7d, 0x14, 0xb8, 0xaa, 0xa9, 0x1b, 0xe7, 0xaa, 0x65, 0x7d, 0x73,
+ 0xa3, 0x5e, 0x3a, 0x57, 0xaa, 0xd6, 0x70, 0x1f, 0x51, 0x4c, 0xb8, 0x0e, 0x7d, 0x4a, 0xfb, 0x81,
+ 0x3c, 0x00, 0xa4, 0xea, 0xf8, 0x2a, 0x27, 0xe6, 0xd2, 0xec, 0x3f, 0x48, 0x3b, 0x69, 0x88, 0xc8,
+ 0xc4, 0xb4, 0xdf, 0x2a, 0x98, 0x76, 0xe9, 0x0b, 0xba, 0x3a, 0x36, 0x8c, 0x0e, 0xf9, 0x1b, 0x50,
+ 0x33, 0xc2, 0xcf, 0xb5, 0x0f, 0xa4, 0x99, 0x23, 0xc4, 0x32, 0x96, 0x0e, 0xc9, 0xe5, 0xf1, 0x00,
+ 0xa9, 0xbd, 0x38, 0x07, 0x16, 0xf8, 0x8a, 0xa1, 0x4a, 0x60, 0x63, 0x4a, 0xac, 0x12, 0xfc, 0xc7,
+ 0x8c, 0x91, 0x75, 0xf6, 0xc9, 0x74, 0x38, 0x05, 0x41, 0xcb, 0x24, 0x07, 0xfb, 0x03, 0x8b, 0x45,
+ 0xc9, 0x21, 0xe6, 0x91, 0xd1, 0xa1, 0x48, 0xea, 0x14, 0x90, 0x5b, 0x0f, 0xfa, 0x8a, 0xac, 0x7d,
+ 0x5d, 0x06, 0xf3, 0xdc, 0xad, 0xdc, 0xda, 0x3b, 0x73, 0x22, 0x37, 0xe6, 0x32, 0xf7, 0x7d, 0xe7,
+ 0x0e, 0x7b, 0xdf, 0xf7, 0xd9, 0x7b, 0xc0, 0x14, 0x4d, 0xc3, 0xf2, 0x6d, 0xd4, 0x91, 0x29, 0x70,
+ 0x1c, 0xcc, 0xae, 0xe8, 0xad, 0xcd, 0x66, 0xab, 0x64, 0xb4, 0xf4, 0x8a, 0x92, 0x43, 0x03, 0x9f,
+ 0xbe, 0xb6, 0xde, 0xba, 0xa0, 0x48, 0x68, 0x4c, 0x5c, 0xd9, 0xa8, 0x56, 0xf4, 0xcd, 0x46, 0xbd,
+ 0x76, 0x41, 0x91, 0xd3, 0x3b, 0x5c, 0xf6, 0x33, 0x36, 0x61, 0x87, 0xcb, 0xa4, 0xe2, 0xb3, 0x9f,
+ 0xbb, 0x7e, 0x4e, 0x06, 0x0a, 0xe1, 0x40, 0x7f, 0xb0, 0x07, 0x5d, 0x0b, 0xda, 0x6d, 0xa8, 0x5d,
+ 0x12, 0x09, 0x00, 0x7b, 0x20, 0xf4, 0x21, 0xee, 0xdf, 0x19, 0xab, 0x91, 0x3c, 0xf4, 0x19, 0xdc,
+ 0xf9, 0x03, 0x06, 0xf7, 0x67, 0xd3, 0x7a, 0x5c, 0xf6, 0xb3, 0x3b, 0x16, 0xc8, 0x3e, 0x95, 0xc6,
+ 0xe3, 0x72, 0x08, 0x07, 0x13, 0x89, 0xeb, 0x1c, 0x33, 0x1e, 0x2b, 0xb2, 0xf6, 0x22, 0x19, 0x1c,
+ 0xaf, 0x98, 0x3e, 0x5c, 0xda, 0x6f, 0x05, 0xb7, 0x68, 0xc6, 0xdc, 0x7c, 0x9d, 0x3b, 0x70, 0xf3,
+ 0x75, 0x74, 0x11, 0xa7, 0xd4, 0x77, 0x11, 0xa7, 0xf6, 0x9e, 0xb4, 0x67, 0x34, 0xfb, 0x78, 0x18,
+ 0x5b, 0xf0, 0xe5, 0x74, 0x67, 0x2f, 0x93, 0xb9, 0xc8, 0xbe, 0x81, 0xbd, 0x7d, 0x06, 0x28, 0x84,
+ 0x15, 0xc6, 0xa9, 0xf0, 0xa7, 0xe8, 0x65, 0xf1, 0x9b, 0x29, 0x62, 0x38, 0x06, 0x51, 0x31, 0x24,
+ 0x3e, 0x2a, 0x06, 0xb7, 0x46, 0x2d, 0xf7, 0x3b, 0x82, 0xa4, 0xed, 0x0c, 0x19, 0x0f, 0xc2, 0xf8,
+ 0xb0, 0xb9, 0xd9, 0x75, 0x86, 0x89, 0xc5, 0x4f, 0xe6, 0x42, 0x63, 0x7a, 0x6b, 0xa8, 0x2e, 0x8a,
+ 0x4c, 0xf2, 0xbd, 0xed, 0x69, 0xdd, 0xc9, 0x39, 0x0f, 0xce, 0x84, 0xcb, 0xcc, 0xb3, 0x73, 0x27,
+ 0x1f, 0xc6, 0x41, 0xf6, 0x28, 0x7c, 0x5b, 0x02, 0xf9, 0xa6, 0xe3, 0xfa, 0xe3, 0xc2, 0x20, 0xed,
+ 0x16, 0x38, 0x23, 0x81, 0x66, 0xfc, 0x1c, 0x34, 0xbb, 0x2d, 0xf0, 0xe4, 0xf2, 0x27, 0x10, 0x06,
+ 0xf3, 0x38, 0x58, 0x20, 0x9c, 0x84, 0x77, 0xc8, 0xfc, 0xab, 0x44, 0xfa, 0xab, 0xfb, 0x44, 0x11,
+ 0xc1, 0x1b, 0x21, 0xe1, 0x16, 0x74, 0x00, 0x0a, 0x97, 0xa6, 0xbd, 0x91, 0xc5, 0xa5, 0xc2, 0xe3,
+ 0x32, 0x68, 0x06, 0x1e, 0x5e, 0xc3, 0x32, 0xae, 0x9e, 0x29, 0x4d, 0x44, 0xcd, 0x84, 0xc2, 0xb3,
+ 0x47, 0xe4, 0x21, 0x19, 0x14, 0xa9, 0x0b, 0xe0, 0x58, 0x11, 0x48, 0xdb, 0x32, 0x42, 0x21, 0x88,
+ 0xb9, 0x0a, 0xca, 0xe3, 0x6e, 0x19, 0xc9, 0xe5, 0x67, 0x8f, 0xc3, 0xbf, 0x53, 0xdf, 0xd6, 0xd2,
+ 0x65, 0xd3, 0xea, 0x9a, 0x17, 0xbb, 0x29, 0x22, 0x59, 0x7f, 0x3c, 0xe5, 0x69, 0xbe, 0xb0, 0xaa,
+ 0x5c, 0x79, 0x31, 0x12, 0xff, 0x1e, 0x30, 0xe3, 0x72, 0x7b, 0x7f, 0xc8, 0x8a, 0xea, 0xf3, 0x2b,
+ 0xa6, 0xef, 0x8d, 0x28, 0x67, 0xaa, 0xa3, 0x7b, 0x42, 0xfc, 0x4c, 0xe4, 0xa8, 0xd1, 0x6c, 0xa9,
+ 0xd3, 0x59, 0x86, 0xa6, 0xbf, 0xe7, 0xc2, 0x4e, 0xaa, 0x21, 0xc2, 0xed, 0xdb, 0x1e, 0x65, 0x24,
+ 0xc1, 0xc5, 0x92, 0xac, 0xf1, 0xe8, 0x3c, 0x75, 0x48, 0x6f, 0x10, 0xf0, 0x32, 0x96, 0x2e, 0xe9,
+ 0x6d, 0x21, 0x24, 0x0d, 0x0e, 0x92, 0xa7, 0x8f, 0xc6, 0x44, 0xf6, 0x80, 0xfc, 0x8c, 0x0c, 0x16,
+ 0x88, 0x9d, 0x30, 0x6e, 0x4c, 0x3e, 0x94, 0xd2, 0x65, 0x88, 0xb9, 0xa5, 0x8b, 0x65, 0x67, 0x2c,
+ 0xb0, 0xa4, 0x71, 0x30, 0x12, 0xe3, 0x23, 0x7b, 0x64, 0x9e, 0x7f, 0x02, 0x00, 0xc6, 0x0d, 0xf4,
+ 0xe3, 0xc5, 0x28, 0xae, 0xa3, 0xf6, 0x4e, 0x3a, 0xff, 0x68, 0x72, 0x41, 0xc6, 0x19, 0x17, 0xcf,
+ 0x70, 0x83, 0x8a, 0x4f, 0x14, 0x1a, 0x55, 0x7e, 0x2f, 0xa5, 0xcd, 0x4b, 0x9d, 0x30, 0x87, 0x0e,
+ 0xee, 0x23, 0xf6, 0x72, 0x9f, 0x48, 0x61, 0xfc, 0x0e, 0x63, 0x25, 0x1d, 0x6a, 0xb5, 0x11, 0x66,
+ 0xf6, 0xa7, 0xc1, 0x49, 0x43, 0x2f, 0x55, 0x1a, 0xf5, 0xda, 0x05, 0xf6, 0xca, 0x26, 0x45, 0x66,
+ 0x27, 0x27, 0x99, 0xc0, 0xf6, 0xba, 0x94, 0x7d, 0x20, 0x2f, 0xab, 0xa4, 0xd9, 0x0a, 0xb3, 0xb8,
+ 0x32, 0xbc, 0x57, 0x13, 0x20, 0x7b, 0x94, 0x28, 0x7c, 0xbd, 0x08, 0x66, 0x0d, 0xd8, 0x76, 0x76,
+ 0x77, 0xa1, 0xdd, 0x81, 0x1d, 0xed, 0x75, 0x32, 0x98, 0x0b, 0xf7, 0xff, 0x9a, 0xd0, 0xd7, 0xfe,
+ 0x4b, 0x84, 0xcd, 0x59, 0x30, 0x87, 0x2a, 0xd7, 0xe0, 0x03, 0xc7, 0x73, 0x69, 0xea, 0xad, 0xe0,
+ 0x44, 0x80, 0x42, 0xa3, 0x6f, 0x0a, 0x73, 0xf0, 0x85, 0xf6, 0x5e, 0x16, 0xa3, 0x0d, 0x1e, 0xa3,
+ 0x7b, 0xe2, 0x85, 0x19, 0xb2, 0xbb, 0xc8, 0xb2, 0x1a, 0x03, 0xd6, 0xef, 0x84, 0x60, 0xdd, 0xcf,
+ 0x81, 0x55, 0x39, 0x24, 0xfd, 0xa3, 0x44, 0xed, 0x97, 0x65, 0x70, 0x32, 0xe8, 0x88, 0x27, 0x87,
+ 0xd6, 0x27, 0x58, 0xb4, 0xbe, 0x9f, 0x47, 0x6b, 0x45, 0x44, 0x9a, 0x83, 0x58, 0x8e, 0x41, 0xed,
+ 0x8b, 0x21, 0x6a, 0xff, 0x95, 0x43, 0xad, 0x36, 0xa6, 0x72, 0x8e, 0x12, 0xbd, 0x0f, 0xc9, 0xe0,
+ 0x34, 0x32, 0x3b, 0xcb, 0x8e, 0xbd, 0xd5, 0xb5, 0xda, 0xbe, 0x65, 0x6f, 0x47, 0x2e, 0x6d, 0x2b,
+ 0x22, 0x2b, 0x9b, 0xfd, 0xd8, 0x4a, 0x07, 0xb1, 0xe5, 0xe3, 0x6d, 0x88, 0xb6, 0xad, 0x38, 0xb6,
+ 0x62, 0x86, 0x30, 0xc6, 0x59, 0x3b, 0xd2, 0x1c, 0x36, 0x29, 0x7d, 0xeb, 0x13, 0xe4, 0xe0, 0x28,
+ 0xf1, 0x7b, 0x08, 0x30, 0xa6, 0xc7, 0x0b, 0x65, 0xa0, 0x60, 0xff, 0x49, 0xdc, 0xb3, 0xd3, 0xfb,
+ 0x4c, 0x1b, 0xbc, 0x67, 0x7d, 0x2f, 0x10, 0x50, 0xe0, 0x59, 0x1f, 0x24, 0xa8, 0x37, 0x81, 0x85,
+ 0xf6, 0x0e, 0x6c, 0x5f, 0xaa, 0xda, 0x81, 0x6f, 0x12, 0x71, 0x64, 0xe9, 0x4b, 0xe5, 0x07, 0xb3,
+ 0xfb, 0x78, 0x30, 0xf9, 0x85, 0x47, 0x6e, 0x62, 0xc3, 0x32, 0x15, 0xd3, 0xd0, 0x7e, 0x23, 0x04,
+ 0xa8, 0xce, 0x01, 0x74, 0xe7, 0x48, 0x54, 0xd3, 0xc1, 0x52, 0x1f, 0x01, 0x16, 0x0d, 0x9c, 0x6a,
+ 0xac, 0xb7, 0xaa, 0x8d, 0xfa, 0xe6, 0x46, 0x53, 0xaf, 0x6c, 0x2e, 0x05, 0xe0, 0x34, 0x15, 0x59,
+ 0xfb, 0x9a, 0x04, 0xa6, 0x08, 0x5b, 0x9e, 0xf6, 0xf8, 0x08, 0x82, 0xa1, 0x47, 0x0a, 0xb4, 0xb7,
+ 0x0b, 0x07, 0x08, 0x0a, 0x05, 0x41, 0xcb, 0x89, 0x69, 0x18, 0x4f, 0x03, 0x53, 0x04, 0xe4, 0x60,
+ 0x17, 0xe0, 0x4c, 0x8c, 0x65, 0x47, 0xc9, 0x18, 0x41, 0x76, 0xc1, 0x60, 0x41, 0x43, 0xd8, 0xc8,
+ 0xde, 0x1a, 0x7f, 0x6e, 0x9e, 0x2c, 0x1d, 0x9c, 0xb7, 0xfc, 0x1d, 0x7c, 0xe2, 0x40, 0x7b, 0x96,
+ 0x48, 0xc7, 0x75, 0x2b, 0x28, 0x5c, 0x46, 0xb9, 0x87, 0x9c, 0xde, 0x20, 0x99, 0xb4, 0x9f, 0x17,
+ 0x8e, 0x4d, 0xcd, 0xe9, 0x67, 0xc8, 0x53, 0x0c, 0x38, 0x6b, 0x20, 0xdf, 0xb5, 0x3c, 0x9f, 0xda,
+ 0xdc, 0x77, 0xa4, 0x22, 0x14, 0xfc, 0xa9, 0xfa, 0x70, 0xd7, 0xc0, 0x64, 0xb4, 0x7b, 0x91, 0xc5,
+ 0x14, 0xa5, 0x0a, 0x9c, 0x60, 0x39, 0x0d, 0xa6, 0xe8, 0xc9, 0x6a, 0xba, 0x2d, 0x15, 0x3c, 0x0a,
+ 0x6e, 0x05, 0x09, 0xd5, 0x36, 0x7b, 0x1d, 0xf8, 0x7f, 0x8f, 0x83, 0xa9, 0x55, 0xcb, 0xf3, 0x1d,
+ 0x77, 0x5f, 0x7b, 0x7d, 0x0e, 0x4c, 0x9d, 0x83, 0xae, 0x67, 0x39, 0xf6, 0x01, 0x77, 0xad, 0xeb,
+ 0xc1, 0x6c, 0xcf, 0x85, 0x97, 0x2d, 0x67, 0xcf, 0x63, 0x46, 0x09, 0x26, 0x49, 0xd5, 0xc0, 0xb4,
+ 0xb9, 0xe7, 0xef, 0x38, 0x6e, 0x14, 0x90, 0x29, 0x78, 0x56, 0xcf, 0x00, 0x40, 0xfe, 0xd7, 0xcd,
+ 0x5d, 0x18, 0xdc, 0xb9, 0x1e, 0xa5, 0xa8, 0x2a, 0xc8, 0xfb, 0xd6, 0x2e, 0xa4, 0x11, 0xda, 0xf1,
+ 0x7f, 0x24, 0x60, 0x1c, 0xed, 0x94, 0x46, 0x95, 0x95, 0x8d, 0xe0, 0x51, 0xfb, 0x43, 0x19, 0xcc,
+ 0xae, 0x40, 0x9f, 0xb2, 0xea, 0x69, 0x2f, 0xc9, 0x09, 0x5d, 0x8a, 0x84, 0xe6, 0x25, 0x5d, 0xd3,
+ 0x0b, 0xbe, 0x0b, 0x87, 0x5c, 0x3e, 0x31, 0x0a, 0x17, 0x2f, 0xb3, 0x77, 0x45, 0xe0, 0xd8, 0xa1,
+ 0x7e, 0x95, 0x38, 0xf3, 0xd3, 0xcc, 0x74, 0xe3, 0xf8, 0xe0, 0x0b, 0xde, 0x26, 0x4e, 0x8c, 0xbb,
+ 0x41, 0x65, 0xbf, 0xc8, 0xd4, 0x27, 0xb6, 0x3b, 0x9a, 0xbe, 0x4c, 0x73, 0x1c, 0xb8, 0x06, 0x84,
+ 0xa5, 0x44, 0xc9, 0x18, 0x61, 0x6e, 0xc1, 0x88, 0x1d, 0xc3, 0x39, 0x99, 0xc0, 0xc5, 0xaf, 0x32,
+ 0x98, 0x6d, 0xee, 0x38, 0x57, 0x02, 0x39, 0x7e, 0xbf, 0x18, 0xb0, 0xd7, 0x82, 0x99, 0xcb, 0x7d,
+ 0xa0, 0x46, 0x09, 0xec, 0x5d, 0x73, 0x32, 0x7f, 0xd7, 0xdc, 0x0b, 0xe4, 0xb4, 0x30, 0x31, 0xcc,
+ 0xc5, 0xc0, 0xc4, 0x5f, 0x0f, 0x27, 0xa5, 0xb8, 0x1e, 0x4e, 0x7d, 0x2a, 0x98, 0xa2, 0x5c, 0xd3,
+ 0x65, 0xea, 0x64, 0x80, 0x83, 0xcc, 0x6c, 0x05, 0xf3, 0x7c, 0x05, 0xd3, 0x21, 0x1f, 0x5f, 0xb9,
+ 0xec, 0x91, 0xff, 0x2d, 0x09, 0xc7, 0x6b, 0x0a, 0x80, 0x2f, 0x8f, 0x01, 0x78, 0xed, 0x5b, 0x39,
+ 0xd1, 0xcd, 0x9c, 0x50, 0x02, 0x21, 0x07, 0x87, 0xba, 0xf0, 0x6c, 0x28, 0xb9, 0xec, 0xe5, 0xf9,
+ 0x8a, 0x3c, 0x98, 0xab, 0x58, 0x5b, 0x5b, 0x61, 0x27, 0xf9, 0x52, 0xc1, 0x4e, 0x32, 0xde, 0xa5,
+ 0x0a, 0xd9, 0xb9, 0x7b, 0xae, 0x0b, 0xed, 0xa0, 0x52, 0xb4, 0x39, 0xf5, 0xa5, 0xaa, 0x37, 0x83,
+ 0xe3, 0xc1, 0xb8, 0xc0, 0x76, 0x94, 0x33, 0x46, 0x7f, 0xb2, 0xf6, 0x0d, 0x61, 0x4f, 0x80, 0x40,
+ 0xa2, 0x6c, 0x95, 0x62, 0x1a, 0xe0, 0x5d, 0x60, 0x7e, 0x87, 0xe4, 0xc6, 0xcb, 0xa5, 0x41, 0x67,
+ 0x79, 0xaa, 0x2f, 0x1e, 0xfe, 0x1a, 0xf4, 0x3c, 0x73, 0x1b, 0x1a, 0x7c, 0xe6, 0xbe, 0xe6, 0x2b,
+ 0xa7, 0xb9, 0xdd, 0x51, 0xcc, 0xa9, 0x40, 0xa0, 0x26, 0xd9, 0x6b, 0xc7, 0x17, 0xcf, 0x82, 0xfc,
+ 0xb2, 0xd5, 0x85, 0xda, 0x8f, 0x48, 0x60, 0x06, 0xcd, 0xba, 0xed, 0x36, 0x7a, 0x62, 0x1c, 0x2c,
+ 0xbf, 0x9e, 0x13, 0xbd, 0xd5, 0x18, 0xd1, 0x59, 0x0c, 0x69, 0xc4, 0xb4, 0x1b, 0xb1, 0xdb, 0x8b,
+ 0x13, 0x49, 0x4d, 0xe0, 0x0e, 0x2a, 0x34, 0xf5, 0xd8, 0xda, 0xea, 0x3a, 0x26, 0xb7, 0x61, 0xd0,
+ 0x6f, 0x0a, 0x45, 0x87, 0x02, 0xeb, 0x8e, 0xbf, 0x6e, 0xd9, 0x76, 0x18, 0x67, 0xe3, 0x40, 0x3a,
+ 0xef, 0xeb, 0x92, 0x18, 0xaa, 0x0c, 0xd7, 0x9d, 0x96, 0x1e, 0xa3, 0xd9, 0x37, 0x81, 0x85, 0x8b,
+ 0xfb, 0x3e, 0xf4, 0x68, 0x2e, 0x5a, 0x6c, 0xde, 0xe8, 0x4b, 0x65, 0x2e, 0x1a, 0x48, 0x0a, 0x69,
+ 0x96, 0x50, 0x60, 0x3a, 0x51, 0xaf, 0x8e, 0x30, 0x03, 0x3c, 0x09, 0x94, 0x7a, 0xa3, 0xa2, 0x63,
+ 0x7f, 0xdf, 0xc0, 0x83, 0x72, 0x5b, 0xfb, 0x49, 0x19, 0xcc, 0x61, 0x07, 0xbc, 0x00, 0x85, 0x1b,
+ 0x04, 0xe6, 0x23, 0xda, 0x97, 0x85, 0x7d, 0x81, 0x71, 0x95, 0xd9, 0x02, 0xe2, 0x05, 0xbd, 0x65,
+ 0x75, 0xfb, 0x05, 0x5d, 0x30, 0xfa, 0x52, 0x07, 0x00, 0x22, 0x0f, 0x04, 0xe4, 0x97, 0x85, 0x1c,
+ 0x82, 0x87, 0x71, 0x77, 0x54, 0xa8, 0xfc, 0x8a, 0x0c, 0x66, 0xd1, 0x24, 0x25, 0x00, 0xa5, 0xc1,
+ 0x81, 0xe2, 0xd8, 0xdd, 0xfd, 0x68, 0x59, 0x24, 0x78, 0x4c, 0xd5, 0x48, 0xfe, 0x48, 0x78, 0xe6,
+ 0x8e, 0x45, 0xc4, 0xf0, 0x32, 0x21, 0xfc, 0x3e, 0x28, 0x34, 0x9f, 0x1f, 0xc2, 0xdc, 0x51, 0xc1,
+ 0xf7, 0x70, 0x11, 0x14, 0x37, 0x7a, 0x18, 0xb9, 0x2f, 0xc9, 0x22, 0x97, 0x76, 0x1c, 0x38, 0x0c,
+ 0x86, 0xcc, 0xac, 0xae, 0xd3, 0x36, 0xbb, 0xeb, 0xd1, 0xa9, 0xda, 0x28, 0x41, 0xbd, 0x93, 0xfa,
+ 0x87, 0x93, 0x13, 0xe7, 0x37, 0x25, 0xde, 0x67, 0x81, 0x65, 0xc4, 0x1c, 0xbc, 0xbb, 0x15, 0x9c,
+ 0xe8, 0x58, 0x9e, 0x79, 0xb1, 0x0b, 0x75, 0xbb, 0xed, 0xee, 0x13, 0x71, 0xd0, 0x69, 0xd5, 0x81,
+ 0x17, 0xea, 0xdd, 0xa0, 0xe0, 0xf9, 0xfb, 0x5d, 0x32, 0x4f, 0x64, 0xcf, 0xe9, 0xc5, 0x16, 0xd5,
+ 0x44, 0xd9, 0x0d, 0xf2, 0x15, 0xeb, 0xd6, 0x39, 0x25, 0xe6, 0xd6, 0xa9, 0x3e, 0x19, 0x14, 0x1d,
+ 0xd7, 0xda, 0xb6, 0xc8, 0x15, 0x75, 0x0b, 0x07, 0xc2, 0xb6, 0x12, 0x53, 0xa0, 0x81, 0xb3, 0x18,
+ 0x34, 0xab, 0xfa, 0x54, 0x30, 0x63, 0xed, 0x9a, 0xdb, 0xf0, 0x3e, 0xcb, 0x26, 0x87, 0xda, 0x17,
+ 0x6e, 0x3f, 0x7d, 0xe0, 0x08, 0x22, 0x7d, 0x6f, 0x44, 0x59, 0xd5, 0xbb, 0xc0, 0x35, 0x6d, 0x17,
+ 0x9a, 0x3e, 0x44, 0x02, 0x3a, 0x6f, 0x75, 0xb6, 0xa1, 0x5f, 0xdd, 0x5a, 0xb3, 0x3c, 0xcf, 0xb2,
+ 0xb7, 0xe9, 0x2d, 0x94, 0xf1, 0x19, 0xb4, 0x0f, 0x4a, 0xa2, 0x91, 0xe9, 0xb0, 0x64, 0x88, 0x4a,
+ 0x8c, 0x70, 0x5b, 0x36, 0x23, 0x45, 0x59, 0xd0, 0x39, 0xf6, 0xd5, 0x42, 0x31, 0xe3, 0xe2, 0xd9,
+ 0xca, 0x7e, 0xe8, 0xff, 0x7d, 0x09, 0x4c, 0x57, 0x9c, 0x2b, 0x36, 0x6e, 0x26, 0x77, 0x88, 0x59,
+ 0xca, 0x03, 0x8e, 0x99, 0xf3, 0xf7, 0x2e, 0x27, 0x9e, 0x29, 0xc3, 0xb5, 0x0d, 0x8a, 0x8c, 0x81,
+ 0x21, 0xb1, 0xdd, 0x09, 0xde, 0x86, 0x9b, 0x54, 0x4e, 0xf6, 0x72, 0xfd, 0x6d, 0x19, 0xe4, 0x2b,
+ 0xae, 0xd3, 0xd3, 0xde, 0x96, 0x4b, 0xe1, 0x24, 0xd6, 0x71, 0x9d, 0x5e, 0x0b, 0x5f, 0x67, 0x19,
+ 0xed, 0x8b, 0xb0, 0x69, 0xea, 0x1d, 0x60, 0xba, 0xe7, 0x78, 0x96, 0x1f, 0x4c, 0x42, 0x16, 0x6e,
+ 0x7f, 0xcc, 0xc0, 0xbe, 0x60, 0x9d, 0x66, 0x32, 0xc2, 0xec, 0xa8, 0xcf, 0xc7, 0x22, 0x44, 0x72,
+ 0x41, 0x62, 0x0c, 0xae, 0xf4, 0xec, 0x4b, 0xd5, 0x5e, 0xc6, 0x22, 0xf9, 0x74, 0x1e, 0xc9, 0xc7,
+ 0x0e, 0x90, 0xb0, 0xeb, 0xf4, 0xc6, 0xe2, 0xd6, 0xf1, 0xca, 0x10, 0xd5, 0x67, 0x70, 0xa8, 0xde,
+ 0x22, 0x54, 0x66, 0xf6, 0x88, 0x7e, 0x30, 0x0f, 0x00, 0x36, 0x52, 0x36, 0xd0, 0xf4, 0x49, 0xcc,
+ 0x42, 0xfb, 0xe1, 0x3c, 0x23, 0xcb, 0x12, 0x2f, 0xcb, 0xc7, 0xc7, 0xd8, 0x40, 0x98, 0x7c, 0x8c,
+ 0x44, 0x4b, 0xa0, 0xb0, 0x87, 0x5e, 0x53, 0x89, 0x0a, 0x92, 0xc0, 0x8f, 0x06, 0xf9, 0x52, 0xfb,
+ 0xad, 0x1c, 0x28, 0xe0, 0x04, 0xf5, 0x0c, 0x00, 0xd8, 0x2c, 0x20, 0x47, 0x32, 0x73, 0xd8, 0x00,
+ 0x60, 0x52, 0xb0, 0xb6, 0x5a, 0x1d, 0xfa, 0x9a, 0x18, 0xdc, 0x51, 0x02, 0xfa, 0x1a, 0x1b, 0x0b,
+ 0x98, 0x16, 0x35, 0x1f, 0x98, 0x14, 0xf4, 0x35, 0x7e, 0xaa, 0xc1, 0x2d, 0x72, 0xd3, 0x40, 0xde,
+ 0x88, 0x12, 0xc2, 0xaf, 0x6b, 0xe1, 0xfd, 0x94, 0xc1, 0xd7, 0x38, 0x05, 0x4d, 0xa5, 0xb1, 0x5a,
+ 0x2e, 0x45, 0x45, 0x14, 0x71, 0xa6, 0xfe, 0x64, 0xed, 0x75, 0xa1, 0xda, 0x54, 0x38, 0xb5, 0x79,
+ 0x62, 0x0a, 0xf1, 0x66, 0xaf, 0x3c, 0x7f, 0x5a, 0x00, 0x33, 0x75, 0xa7, 0x43, 0x75, 0x87, 0x99,
+ 0x6e, 0x7e, 0xaa, 0x90, 0x6a, 0xba, 0x19, 0xd2, 0x88, 0x51, 0x90, 0x67, 0xf2, 0x0a, 0x22, 0x46,
+ 0x81, 0xd5, 0x0f, 0x75, 0x09, 0x14, 0xb1, 0xf6, 0x1e, 0xbc, 0xf8, 0x30, 0x89, 0x04, 0x16, 0xad,
+ 0x41, 0xbf, 0xfc, 0x0f, 0xa7, 0x63, 0xff, 0x1d, 0x14, 0x70, 0x05, 0x13, 0xf6, 0x86, 0xf8, 0x8a,
+ 0x4a, 0xc9, 0x15, 0x95, 0x93, 0x2b, 0x9a, 0xef, 0xaf, 0x68, 0x9a, 0x55, 0x84, 0x38, 0x0d, 0xc9,
+ 0x5e, 0xc7, 0xff, 0x66, 0x0a, 0x80, 0xba, 0x79, 0xd9, 0xda, 0x26, 0x7b, 0xcb, 0x7f, 0x18, 0xcc,
+ 0x9e, 0xe8, 0x2e, 0xf0, 0x8f, 0x31, 0x03, 0xe1, 0x1d, 0x60, 0x8a, 0x8e, 0x7b, 0xb4, 0x22, 0xd7,
+ 0x71, 0x15, 0x89, 0xa8, 0x10, 0xa3, 0xf6, 0x41, 0xdf, 0x08, 0xf2, 0x73, 0x77, 0xb4, 0x4b, 0x7d,
+ 0x77, 0xb4, 0x0f, 0xde, 0xc1, 0x88, 0xb9, 0xb9, 0x5d, 0x7b, 0x9f, 0xf0, 0x19, 0x2a, 0x86, 0x1f,
+ 0xa6, 0x46, 0x31, 0x4d, 0xf0, 0xc9, 0x60, 0xca, 0x09, 0xb7, 0xc3, 0xe5, 0xd8, 0x55, 0xb4, 0xaa,
+ 0xbd, 0xe5, 0x18, 0x41, 0x4e, 0xc1, 0xad, 0x33, 0x21, 0x3e, 0x26, 0x72, 0x4c, 0xf1, 0xd4, 0x4a,
+ 0x10, 0xb5, 0x11, 0xd5, 0xe3, 0xbc, 0xe5, 0xef, 0xd4, 0x2c, 0xfb, 0x92, 0xa7, 0xfd, 0x57, 0x31,
+ 0x0b, 0x92, 0xc1, 0x5f, 0x4a, 0x87, 0x3f, 0x1f, 0x35, 0xa9, 0xc9, 0xa3, 0x76, 0x77, 0x1c, 0x95,
+ 0xc1, 0xdc, 0xc6, 0x00, 0x78, 0x27, 0x28, 0x12, 0x46, 0x69, 0x27, 0x7a, 0x36, 0x16, 0xbf, 0x90,
+ 0x92, 0x41, 0xbf, 0xd0, 0xde, 0x1b, 0xe2, 0x78, 0x8e, 0xc3, 0x71, 0xe9, 0x50, 0x9c, 0x65, 0x0e,
+ 0xe9, 0xd9, 0x27, 0x81, 0x29, 0x2a, 0x69, 0x75, 0x81, 0x6d, 0xc5, 0xca, 0x31, 0x15, 0x80, 0xe2,
+ 0x9a, 0x73, 0x19, 0xb6, 0x1c, 0x25, 0x87, 0xfe, 0x23, 0xfe, 0x5a, 0x8e, 0x22, 0x69, 0xaf, 0x9a,
+ 0x06, 0xd3, 0x61, 0xb8, 0xbc, 0xdf, 0x97, 0x80, 0x52, 0xc6, 0x33, 0xb4, 0x65, 0xd7, 0xd9, 0x25,
+ 0x35, 0x12, 0xf7, 0xc7, 0xff, 0x19, 0x61, 0x07, 0x91, 0x30, 0x8c, 0x5d, 0x7f, 0x61, 0x31, 0x58,
+ 0x92, 0x25, 0x4c, 0x29, 0x58, 0xc2, 0xd4, 0xde, 0x2a, 0xe4, 0x30, 0x22, 0x5a, 0x4a, 0xf6, 0x4d,
+ 0xed, 0xb3, 0x12, 0x28, 0x94, 0xbb, 0x8e, 0x0d, 0xd9, 0x43, 0xa3, 0x43, 0x4f, 0x27, 0x0e, 0xde,
+ 0xc7, 0xd0, 0x9e, 0x2b, 0x89, 0xda, 0x1a, 0x91, 0x00, 0x50, 0xd9, 0x82, 0xb2, 0x15, 0x1b, 0xa4,
+ 0x12, 0x49, 0x67, 0x2f, 0xd0, 0xaf, 0x49, 0x60, 0x86, 0x44, 0x26, 0x2b, 0x75, 0xbb, 0xda, 0x63,
+ 0x22, 0xa1, 0x0e, 0x08, 0x39, 0xa8, 0xfd, 0xb2, 0xf0, 0xa1, 0xa8, 0xb0, 0x56, 0x21, 0xed, 0x14,
+ 0x21, 0xda, 0xd2, 0x9d, 0xd1, 0x11, 0xdb, 0x89, 0x1b, 0xca, 0x50, 0xf6, 0xa2, 0xfe, 0x03, 0x09,
+ 0x19, 0x00, 0xf6, 0xa5, 0x75, 0x17, 0x5e, 0xb6, 0xe0, 0x15, 0xed, 0xd1, 0x91, 0xb0, 0x0f, 0x86,
+ 0x5d, 0x7a, 0x93, 0xf0, 0x22, 0x0e, 0x43, 0x32, 0x76, 0x23, 0x6c, 0xb6, 0x1b, 0x65, 0xa2, 0xbd,
+ 0x78, 0x7f, 0x2c, 0x2c, 0x86, 0x8c, 0xc1, 0x66, 0x17, 0x5c, 0xb3, 0x89, 0xe7, 0x22, 0x7b, 0xc1,
+ 0xfe, 0xea, 0x14, 0x98, 0xde, 0xb0, 0xbd, 0x5e, 0xd7, 0xf4, 0x76, 0xb4, 0x7f, 0x95, 0x41, 0x91,
+ 0x5c, 0xb7, 0xa9, 0x7d, 0x0f, 0x17, 0xdd, 0xe5, 0xd9, 0x7b, 0xd0, 0x0d, 0x1c, 0x78, 0xc8, 0x43,
+ 0x64, 0x1f, 0x49, 0x8c, 0x7d, 0xa4, 0x7d, 0x50, 0x16, 0x9d, 0xa4, 0x06, 0x85, 0xd2, 0xfb, 0x3d,
+ 0xe3, 0x03, 0x8a, 0xf4, 0xac, 0xb6, 0xbf, 0xe7, 0x42, 0x6f, 0x60, 0x40, 0x91, 0x58, 0x2a, 0xeb,
+ 0xe4, 0x2b, 0x23, 0xfc, 0x5c, 0x33, 0xc1, 0x14, 0x4d, 0x3c, 0xb0, 0x19, 0x75, 0x30, 0xe2, 0xc1,
+ 0x29, 0x50, 0x34, 0x5d, 0xdf, 0xf2, 0x7c, 0xba, 0x3d, 0x4b, 0x9f, 0x50, 0x77, 0x49, 0xfe, 0x6d,
+ 0xb8, 0xdd, 0x20, 0x0e, 0x54, 0x98, 0xa0, 0xfd, 0x8a, 0xd0, 0xfc, 0x31, 0xb9, 0xe6, 0xe9, 0x20,
+ 0xbf, 0x6f, 0x84, 0x15, 0xee, 0x47, 0x81, 0xab, 0x8c, 0x52, 0x4b, 0xdf, 0x24, 0x61, 0x83, 0xc2,
+ 0x08, 0x41, 0x1d, 0xed, 0x3d, 0x32, 0xb3, 0x7e, 0xb7, 0xcf, 0x8d, 0x11, 0x54, 0x8a, 0xd1, 0x18,
+ 0x11, 0x26, 0x24, 0xec, 0x75, 0x73, 0x4b, 0xb8, 0xb2, 0xf0, 0x12, 0xae, 0xf6, 0x4b, 0xc2, 0x7b,
+ 0x51, 0xa1, 0x28, 0x87, 0xac, 0x01, 0x26, 0x5d, 0xc7, 0xf7, 0x61, 0xa1, 0x7d, 0xa5, 0x61, 0x25,
+ 0x1d, 0x21, 0x6c, 0xdf, 0x3a, 0x05, 0xa4, 0x52, 0x55, 0xfb, 0xd1, 0x29, 0x30, 0x77, 0xde, 0xb5,
+ 0x7c, 0xcb, 0xde, 0x6e, 0x39, 0x4e, 0xd7, 0xd3, 0xbe, 0xc9, 0x6c, 0x54, 0x3c, 0x15, 0x14, 0xdb,
+ 0x8e, 0xbd, 0x65, 0x6d, 0x53, 0x31, 0x9e, 0xe1, 0x2a, 0x57, 0xaa, 0x2e, 0xae, 0xbb, 0xce, 0x65,
+ 0xab, 0x03, 0xdd, 0x32, 0xce, 0x65, 0xd0, 0xdc, 0x48, 0x8f, 0x99, 0xc0, 0x6b, 0x4f, 0xec, 0xff,
+ 0x8a, 0x2d, 0x2f, 0x8c, 0xfc, 0x42, 0x13, 0x99, 0xb8, 0x6b, 0x55, 0x30, 0xdd, 0x35, 0xed, 0xed,
+ 0xbd, 0x60, 0xe6, 0xdd, 0xbf, 0x8b, 0x1a, 0x47, 0xa9, 0x46, 0x3f, 0x32, 0xc2, 0xcf, 0xb1, 0x93,
+ 0x1b, 0x32, 0xf5, 0x49, 0xdb, 0xc3, 0xff, 0xcf, 0x7e, 0x34, 0x07, 0x66, 0x99, 0x42, 0xd5, 0x59,
+ 0x30, 0x55, 0xd1, 0x97, 0x4b, 0x1b, 0xb5, 0x96, 0x72, 0x0c, 0x49, 0xb1, 0xb9, 0xb1, 0xb6, 0x56,
+ 0x32, 0xaa, 0xdf, 0xa7, 0x2b, 0x39, 0xf4, 0x6e, 0xc5, 0x28, 0xa1, 0x67, 0x45, 0x42, 0x0f, 0xcd,
+ 0xd5, 0x86, 0xd1, 0xd2, 0xeb, 0x8a, 0x8c, 0xec, 0x51, 0xfd, 0xfe, 0xf5, 0x52, 0xbd, 0xa2, 0xe4,
+ 0xd1, 0xff, 0xa5, 0x8d, 0x5a, 0x4d, 0x6f, 0x29, 0x85, 0x28, 0x14, 0x5b, 0x11, 0x25, 0x97, 0x4b,
+ 0xcd, 0x8d, 0x52, 0x4d, 0x99, 0x42, 0xc9, 0xcb, 0x1b, 0xf5, 0xfa, 0x05, 0x65, 0x1a, 0x15, 0x51,
+ 0x6e, 0xd4, 0x97, 0xab, 0x15, 0xbd, 0xde, 0x52, 0x66, 0xd4, 0xab, 0xc0, 0xf1, 0x66, 0xcb, 0x28,
+ 0x55, 0x57, 0x56, 0x5b, 0xcb, 0x0d, 0xe3, 0x7c, 0xc9, 0xa8, 0x28, 0x40, 0x55, 0xc0, 0xdc, 0xba,
+ 0xd1, 0x58, 0xd6, 0x71, 0x2c, 0x8f, 0x52, 0x4d, 0x99, 0x45, 0x5f, 0xb5, 0x8c, 0x52, 0xbd, 0x59,
+ 0x2b, 0xb5, 0x74, 0x65, 0xee, 0xec, 0xbd, 0x60, 0x3a, 0xa8, 0xae, 0x5a, 0x04, 0x92, 0x5e, 0x57,
+ 0x8e, 0xe1, 0xdf, 0xa6, 0x92, 0x43, 0xbf, 0xcb, 0x88, 0xdf, 0x22, 0x90, 0x2a, 0xba, 0x22, 0xa3,
+ 0xdf, 0x6a, 0x4b, 0xc9, 0xa3, 0xdf, 0x75, 0xc4, 0x62, 0x11, 0x48, 0xab, 0x55, 0xa5, 0x88, 0x7e,
+ 0x5b, 0xab, 0xca, 0x14, 0x7f, 0xeb, 0x76, 0x62, 0x2f, 0x7c, 0x50, 0xf2, 0x31, 0x86, 0x86, 0x1f,
+ 0xcd, 0x91, 0xf1, 0x7f, 0xed, 0x95, 0x92, 0x48, 0x5f, 0x97, 0x4c, 0x3f, 0x5d, 0xa3, 0x79, 0x4b,
+ 0x6e, 0x8c, 0xad, 0x46, 0xd5, 0xc0, 0x29, 0xbd, 0x5e, 0x59, 0x6f, 0x54, 0xeb, 0x2d, 0x12, 0x30,
+ 0x4b, 0x2f, 0x95, 0x57, 0x31, 0xce, 0x10, 0x21, 0xb8, 0xd6, 0xa8, 0xe8, 0x35, 0xfc, 0x62, 0xb9,
+ 0xb1, 0x51, 0xaf, 0x28, 0x5b, 0xa8, 0xac, 0xd2, 0x46, 0x6b, 0x75, 0xd3, 0xd0, 0x9f, 0xb5, 0x51,
+ 0x35, 0xf4, 0x8a, 0xb2, 0x8d, 0x68, 0xd4, 0x4a, 0xf5, 0x95, 0x8d, 0xd2, 0x0a, 0xdd, 0x2f, 0xdc,
+ 0x58, 0x5f, 0x6f, 0xe0, 0x1d, 0xc3, 0x1d, 0xed, 0xef, 0xf3, 0x60, 0xba, 0xb4, 0xe7, 0x3b, 0x5b,
+ 0x56, 0xb7, 0xab, 0x3d, 0x24, 0x1d, 0xbe, 0x29, 0x96, 0xb8, 0xa6, 0x78, 0xa0, 0x01, 0x05, 0x65,
+ 0x85, 0x8d, 0x27, 0x48, 0x60, 0xda, 0xe1, 0xe9, 0xc8, 0x19, 0x5b, 0xa6, 0x3b, 0xcd, 0xe4, 0x91,
+ 0x38, 0xe2, 0xda, 0xb4, 0x65, 0xe1, 0x37, 0xf4, 0xf1, 0xec, 0x7d, 0x60, 0x8e, 0xa5, 0x84, 0x83,
+ 0x4a, 0x95, 0x56, 0x48, 0xd4, 0xa9, 0x20, 0xce, 0x1c, 0x89, 0x3a, 0x85, 0x0f, 0x05, 0x48, 0xb8,
+ 0xbd, 0x54, 0x5b, 0x35, 0xa4, 0xa7, 0xc7, 0xc1, 0x6c, 0x45, 0x6f, 0x96, 0x8d, 0x2a, 0xf6, 0x53,
+ 0x57, 0xf2, 0xbc, 0x97, 0x41, 0xa2, 0x65, 0xc6, 0xd7, 0x48, 0x54, 0x29, 0xbf, 0x2d, 0x64, 0x6f,
+ 0xc5, 0xd3, 0x4e, 0xa7, 0x90, 0x2f, 0x79, 0xa4, 0x29, 0xa4, 0xf6, 0x92, 0x3c, 0x59, 0x27, 0x6b,
+ 0xee, 0xed, 0xee, 0x9a, 0xee, 0x3e, 0xe7, 0xaf, 0x36, 0xaa, 0xde, 0xc5, 0x8f, 0xef, 0x89, 0x11,
+ 0x6a, 0x90, 0x09, 0xd5, 0x73, 0x9d, 0xdd, 0x5e, 0xd0, 0x57, 0xd3, 0x27, 0xed, 0xff, 0x16, 0x9e,
+ 0x39, 0x96, 0xaa, 0x8b, 0x4c, 0x65, 0x46, 0x18, 0xda, 0x7f, 0x40, 0x12, 0x99, 0x45, 0x26, 0x16,
+ 0xf3, 0x9d, 0xae, 0x11, 0x7f, 0x9d, 0x07, 0x57, 0xd1, 0xe8, 0x23, 0xe1, 0xfa, 0x03, 0x32, 0x55,
+ 0x5f, 0x93, 0xa9, 0x66, 0x50, 0x83, 0x5a, 0x8e, 0x0c, 0x6a, 0x66, 0xc3, 0x3b, 0x2f, 0xb8, 0xe1,
+ 0xfd, 0x36, 0xe1, 0x43, 0x0f, 0xa5, 0xea, 0xe2, 0x80, 0x3a, 0x4e, 0x66, 0x5b, 0xfe, 0x05, 0x92,
+ 0xc8, 0x6a, 0xab, 0x10, 0x87, 0xdf, 0xe9, 0xba, 0xf6, 0x8e, 0x1c, 0x58, 0xe0, 0x55, 0x45, 0x7d,
+ 0x0a, 0x98, 0xee, 0xd1, 0x14, 0x2a, 0x97, 0xd3, 0x71, 0xca, 0x65, 0x84, 0x39, 0x11, 0x44, 0xd0,
+ 0xee, 0xf4, 0x1c, 0xcb, 0x0e, 0xd7, 0xe5, 0x83, 0x67, 0x34, 0xef, 0xc4, 0x53, 0x87, 0x20, 0x16,
+ 0x1d, 0x7e, 0x88, 0x22, 0x90, 0xe6, 0x99, 0x08, 0xa4, 0x48, 0x88, 0x3e, 0xdc, 0xc5, 0x37, 0xaa,
+ 0xec, 0xb9, 0xc4, 0xe1, 0x45, 0x32, 0xd8, 0xa4, 0xb3, 0xcf, 0x00, 0xd3, 0x41, 0xf9, 0xc8, 0xba,
+ 0x6b, 0xd4, 0x6a, 0xa5, 0xb5, 0x12, 0x59, 0xa8, 0x6c, 0xac, 0xeb, 0xf5, 0x52, 0x55, 0xc9, 0xa1,
+ 0x81, 0xae, 0xb6, 0xd6, 0x6c, 0x6d, 0x54, 0xaa, 0x0d, 0x45, 0xc2, 0x4f, 0x28, 0x53, 0x79, 0x7d,
+ 0x5d, 0x91, 0xb5, 0x37, 0x4e, 0x81, 0xa9, 0x15, 0xb3, 0xdb, 0x85, 0xee, 0xbe, 0xf6, 0x35, 0x09,
+ 0x28, 0xc1, 0xec, 0x60, 0xcd, 0xb4, 0xad, 0x2d, 0xe8, 0xf9, 0xc9, 0x0b, 0x15, 0xef, 0x13, 0xbe,
+ 0x66, 0x89, 0x96, 0xb1, 0xd8, 0x4f, 0x3f, 0x46, 0xc7, 0x6f, 0x03, 0x79, 0xcb, 0xde, 0x72, 0xe8,
+ 0x72, 0x45, 0xbf, 0xbf, 0x4d, 0xf0, 0x31, 0xde, 0x36, 0xc0, 0x19, 0x05, 0x6f, 0x5a, 0x12, 0xe4,
+ 0x22, 0xfb, 0x55, 0x8b, 0x77, 0xe4, 0xc1, 0x7c, 0xc0, 0x44, 0xd5, 0xee, 0xc0, 0x07, 0xd9, 0x6d,
+ 0xd0, 0x9f, 0xcc, 0x8b, 0x06, 0xbf, 0xe9, 0xaf, 0x0f, 0x26, 0x15, 0x23, 0xd2, 0x16, 0x00, 0x6d,
+ 0xd3, 0x87, 0xdb, 0x8e, 0x6b, 0x85, 0x6b, 0x11, 0x4f, 0x49, 0x43, 0xad, 0x4c, 0xbe, 0xde, 0x37,
+ 0x18, 0x3a, 0xea, 0xdd, 0x60, 0x16, 0x86, 0xd1, 0x06, 0x83, 0x6d, 0xd2, 0x44, 0xbc, 0xd8, 0xfc,
+ 0xda, 0x1f, 0x08, 0xc5, 0xd8, 0x11, 0xa9, 0x66, 0x3a, 0xcc, 0x36, 0x47, 0xeb, 0x7a, 0x36, 0xea,
+ 0x6b, 0x25, 0xa3, 0xb9, 0x5a, 0xaa, 0xd5, 0xaa, 0xf5, 0x95, 0x30, 0xec, 0xad, 0x0a, 0x16, 0x2a,
+ 0x8d, 0xf3, 0x75, 0x26, 0x2e, 0x71, 0x5e, 0x5b, 0x07, 0xd3, 0x81, 0xbc, 0x06, 0x9d, 0xa2, 0x62,
+ 0x65, 0x46, 0x4f, 0x51, 0x31, 0x49, 0xc8, 0x34, 0xb4, 0xda, 0xa1, 0x6b, 0x3d, 0xfe, 0xaf, 0xfd,
+ 0xa6, 0x09, 0x0a, 0xd8, 0x9f, 0x45, 0x7b, 0x17, 0x9e, 0x17, 0xf7, 0xba, 0x66, 0x1b, 0x6a, 0xbb,
+ 0x29, 0x56, 0xc2, 0x83, 0x7b, 0x3f, 0xa5, 0x03, 0xf7, 0x7e, 0xe2, 0xbf, 0x74, 0xc4, 0x38, 0x39,
+ 0xc8, 0x87, 0xc6, 0x20, 0x59, 0xf8, 0x70, 0x34, 0x89, 0x9e, 0x4d, 0xc4, 0xf5, 0x86, 0xb2, 0x19,
+ 0xa3, 0x92, 0xf1, 0x3c, 0xa5, 0x5b, 0x05, 0x16, 0xf3, 0x81, 0x4a, 0xe2, 0x28, 0xfb, 0x16, 0xff,
+ 0xa5, 0x3c, 0x28, 0x34, 0x7b, 0x5d, 0xcb, 0xd7, 0x7e, 0x4e, 0x1a, 0x0b, 0x66, 0xe4, 0xae, 0x56,
+ 0x79, 0xe8, 0x5d, 0xad, 0x91, 0xbf, 0x64, 0x5e, 0xc0, 0x5f, 0xb2, 0x05, 0x1f, 0xf4, 0x79, 0x7f,
+ 0xc9, 0x3b, 0xe8, 0xb4, 0x8d, 0x78, 0x5b, 0x3e, 0x76, 0x80, 0x48, 0x71, 0xb5, 0x06, 0xdc, 0x89,
+ 0x70, 0xf6, 0x49, 0x34, 0x34, 0x3b, 0x00, 0xc5, 0xa5, 0x46, 0xab, 0xd5, 0x58, 0x53, 0x8e, 0xe1,
+ 0xe9, 0x57, 0x63, 0x9d, 0x04, 0xca, 0xad, 0xd6, 0xeb, 0xba, 0xc1, 0xcd, 0xb8, 0xf8, 0x8b, 0xfb,
+ 0x12, 0x27, 0x58, 0x7c, 0xd9, 0x59, 0xaa, 0x97, 0xd8, 0x22, 0x78, 0x3c, 0x3f, 0xd9, 0x2b, 0xd7,
+ 0x4f, 0xcb, 0xa0, 0xb0, 0x06, 0xdd, 0x6d, 0xa8, 0x3d, 0x3b, 0x85, 0x83, 0xdd, 0x96, 0xe5, 0x7a,
+ 0x24, 0xb4, 0x7e, 0xe4, 0x60, 0xc7, 0xa6, 0xa9, 0x37, 0x82, 0x79, 0x0f, 0xb6, 0x1d, 0xbb, 0x13,
+ 0x64, 0x22, 0xfd, 0x11, 0x9f, 0xa8, 0xbd, 0x3c, 0x25, 0x64, 0x98, 0xd1, 0xb1, 0x78, 0xc9, 0xa5,
+ 0x01, 0x66, 0x50, 0xa9, 0xd9, 0x03, 0xf3, 0x0d, 0x19, 0x7d, 0xd4, 0xdb, 0xd7, 0x5e, 0x2e, 0xec,
+ 0xf9, 0x78, 0x2b, 0x28, 0x5e, 0x0c, 0xee, 0x68, 0x92, 0x63, 0xfb, 0x63, 0x9a, 0x47, 0x5d, 0x02,
+ 0x27, 0x3c, 0xd8, 0x85, 0x6d, 0x1f, 0x76, 0x50, 0xd3, 0x35, 0x86, 0x76, 0x0a, 0x07, 0xb3, 0x6b,
+ 0xbf, 0xc3, 0x02, 0x78, 0x17, 0x0f, 0xe0, 0x4d, 0x03, 0x44, 0x89, 0x2a, 0x14, 0x3f, 0x37, 0x41,
+ 0xd5, 0x68, 0x76, 0x9d, 0xd0, 0xf0, 0x0d, 0x9e, 0xd1, 0xbb, 0x1d, 0x7f, 0xb7, 0x8b, 0xdf, 0xd1,
+ 0xa3, 0xc1, 0xc1, 0xb3, 0xba, 0x08, 0xa6, 0x4c, 0x7b, 0x1f, 0xbf, 0xca, 0x27, 0xd4, 0x3a, 0xc8,
+ 0xa4, 0xbd, 0x2a, 0x44, 0xfe, 0x1e, 0x0e, 0xf9, 0xc7, 0x8b, 0xb1, 0x9b, 0x3d, 0xf0, 0x3f, 0x34,
+ 0x05, 0x0a, 0xeb, 0xa6, 0xe7, 0x43, 0xed, 0x7f, 0xc9, 0xa2, 0xc8, 0xdf, 0x04, 0x16, 0xb6, 0x9c,
+ 0xf6, 0x9e, 0x07, 0x3b, 0x7c, 0xa3, 0xec, 0x4b, 0x1d, 0x07, 0xe6, 0xea, 0x2d, 0x40, 0x09, 0x12,
+ 0x29, 0xd9, 0xc0, 0x05, 0xf6, 0x40, 0x3a, 0xbe, 0x06, 0xce, 0x5b, 0x37, 0x5d, 0xbf, 0xb1, 0x85,
+ 0xd3, 0xc2, 0x6b, 0xe0, 0xd8, 0x44, 0x0e, 0xfa, 0x62, 0x02, 0xf4, 0x53, 0xf1, 0xd0, 0x4f, 0x0b,
+ 0x40, 0xaf, 0x96, 0xc0, 0xf4, 0x96, 0xd5, 0x85, 0xf8, 0x83, 0x19, 0xfc, 0xc1, 0xa0, 0x31, 0x09,
+ 0xcb, 0x3e, 0x1c, 0x93, 0x96, 0xad, 0x2e, 0x34, 0xc2, 0xcf, 0x82, 0x89, 0x0c, 0x88, 0x26, 0x32,
+ 0x35, 0x72, 0x12, 0x0e, 0x19, 0x5e, 0xb6, 0xb9, 0x0b, 0x83, 0x8d, 0x6f, 0x9b, 0x1e, 0x4b, 0xef,
+ 0x98, 0xbe, 0x89, 0xc1, 0x98, 0x33, 0xf0, 0x7f, 0xde, 0x27, 0x5b, 0xee, 0xf7, 0xc9, 0x7e, 0xbe,
+ 0x9c, 0xae, 0x47, 0x0c, 0x98, 0x8d, 0x69, 0x51, 0x17, 0x03, 0x80, 0x88, 0xa5, 0x18, 0x3e, 0x23,
+ 0x60, 0xda, 0xa6, 0x0b, 0xfd, 0x75, 0xd6, 0x0b, 0xba, 0x60, 0xf0, 0x89, 0xf8, 0x10, 0x8e, 0xd7,
+ 0x34, 0x77, 0xc9, 0x35, 0x6f, 0x65, 0xf4, 0x8e, 0x1e, 0xae, 0x38, 0x90, 0x1e, 0xf5, 0xbf, 0x85,
+ 0x71, 0xf7, 0xbf, 0x83, 0xea, 0x98, 0x7d, 0x33, 0x7c, 0x6d, 0x1e, 0xc8, 0xe5, 0x3d, 0xff, 0x11,
+ 0xdd, 0xfd, 0x7e, 0x5b, 0xd8, 0xc7, 0x9c, 0xf6, 0x67, 0x7b, 0xfe, 0xd1, 0xf6, 0xbe, 0x29, 0xb5,
+ 0x44, 0xcc, 0x97, 0x3d, 0xae, 0x6e, 0xd9, 0xeb, 0xc8, 0xdb, 0xe4, 0xf0, 0x68, 0xd4, 0x43, 0xb9,
+ 0xc3, 0x9b, 0xe6, 0x1a, 0xe9, 0x9f, 0x98, 0x9e, 0x21, 0x7c, 0x0e, 0x3a, 0x9e, 0x3c, 0x77, 0x33,
+ 0x01, 0x76, 0x6d, 0xc5, 0xa2, 0x9c, 0x33, 0xc8, 0x83, 0xf6, 0x0a, 0xe1, 0x03, 0xa3, 0x44, 0x6c,
+ 0x89, 0xc7, 0x78, 0xd2, 0xd9, 0x54, 0xaf, 0x11, 0x3a, 0x36, 0x9a, 0x50, 0x6c, 0xf6, 0x80, 0xfd,
+ 0x1d, 0x7b, 0x4c, 0xa7, 0x74, 0x68, 0xc4, 0xb4, 0x57, 0x0b, 0x2f, 0xe8, 0x93, 0x6a, 0x0f, 0xd9,
+ 0xab, 0x4f, 0x27, 0x6f, 0x31, 0x47, 0xb1, 0xc4, 0x82, 0x27, 0x70, 0x6f, 0xad, 0x0c, 0x8a, 0x64,
+ 0xe1, 0x57, 0x7b, 0xb3, 0x70, 0x13, 0x41, 0xbd, 0x11, 0x7f, 0x7c, 0x27, 0x7c, 0x4e, 0xb3, 0xe6,
+ 0xc0, 0x1d, 0xf3, 0xc9, 0xa7, 0x3a, 0xe6, 0xc3, 0x47, 0x60, 0x11, 0x68, 0x47, 0xa4, 0x8e, 0x19,
+ 0x4f, 0x27, 0xd3, 0xb4, 0xb0, 0x81, 0x0c, 0x65, 0x8f, 0xf7, 0x0b, 0x0b, 0x60, 0x8e, 0x14, 0x4d,
+ 0xce, 0x17, 0x6a, 0xef, 0x91, 0xbe, 0x73, 0x50, 0x57, 0xeb, 0x60, 0xee, 0x0a, 0x66, 0x9b, 0xdc,
+ 0x47, 0x4b, 0x57, 0x2e, 0x6e, 0x49, 0x5c, 0xf7, 0x20, 0xf5, 0x0c, 0x6e, 0xb0, 0xe5, 0xbe, 0x47,
+ 0x32, 0x26, 0x1b, 0x2c, 0xe4, 0xf0, 0x44, 0x11, 0x1b, 0x59, 0x6c, 0x92, 0x7a, 0x0a, 0x14, 0x2f,
+ 0x5b, 0xf0, 0x4a, 0xb5, 0x43, 0xad, 0x5b, 0xfa, 0xa4, 0xfd, 0x9a, 0xb0, 0xcf, 0x24, 0x0b, 0x37,
+ 0xe5, 0x25, 0x5b, 0x2d, 0x14, 0xf3, 0x9c, 0x1c, 0xca, 0xd6, 0x04, 0xa2, 0x01, 0x49, 0xe4, 0xce,
+ 0x6c, 0x1a, 0x66, 0xbe, 0x9c, 0x42, 0x11, 0xe3, 0x0c, 0x67, 0x3e, 0x08, 0x5f, 0xe2, 0x59, 0x73,
+ 0x22, 0x80, 0xa8, 0xfc, 0xb1, 0xf4, 0xf9, 0x62, 0x91, 0xe1, 0x86, 0x14, 0x9d, 0xbd, 0xe4, 0x5f,
+ 0x27, 0x83, 0x99, 0x26, 0xf4, 0x97, 0x2d, 0xd8, 0xed, 0x78, 0x9a, 0x7b, 0x78, 0xd3, 0xe8, 0x36,
+ 0x50, 0xdc, 0xc2, 0xc4, 0x86, 0x6d, 0x4e, 0xd2, 0x6c, 0xda, 0x6b, 0x25, 0x51, 0x3f, 0x20, 0xba,
+ 0xfa, 0x16, 0x70, 0x3b, 0x16, 0x98, 0xc4, 0x4e, 0xd3, 0x25, 0x97, 0x3c, 0x81, 0x6b, 0x7c, 0x64,
+ 0x30, 0x87, 0xb7, 0xff, 0xa1, 0x5f, 0xea, 0x5a, 0xdb, 0xb6, 0xb6, 0x37, 0x86, 0x16, 0xa2, 0x3e,
+ 0x11, 0x14, 0x4c, 0x44, 0x8d, 0xba, 0xbb, 0x69, 0x03, 0x3b, 0x4f, 0x5c, 0x9e, 0x41, 0x32, 0xa6,
+ 0xb8, 0x34, 0x23, 0x52, 0xec, 0x80, 0xe7, 0x09, 0x5e, 0x9a, 0x31, 0xb4, 0xf0, 0xec, 0x11, 0xfb,
+ 0x8a, 0x0c, 0x4e, 0x52, 0x06, 0xce, 0x41, 0xd7, 0xb7, 0xda, 0x66, 0x97, 0x20, 0xf7, 0xe2, 0xdc,
+ 0x38, 0xa0, 0x5b, 0x05, 0xf3, 0x97, 0x59, 0xb2, 0x14, 0xc2, 0xb3, 0x03, 0x21, 0xe4, 0x18, 0x30,
+ 0xf8, 0x0f, 0x53, 0x5c, 0x3e, 0xc0, 0x49, 0x95, 0xa3, 0x39, 0xc1, 0xcb, 0x07, 0x84, 0x99, 0xc8,
+ 0x1e, 0xe2, 0x97, 0xd1, 0xa0, 0x9a, 0x51, 0xf7, 0xf9, 0x87, 0xc2, 0xd8, 0x6e, 0x80, 0x59, 0x8c,
+ 0x25, 0xf9, 0x90, 0x2e, 0x43, 0x24, 0x28, 0x71, 0xd8, 0xef, 0xd0, 0xeb, 0xd2, 0xc3, 0x6f, 0x0d,
+ 0x96, 0x8e, 0x76, 0x1e, 0x80, 0xe8, 0x15, 0xdb, 0x49, 0xe7, 0xe2, 0x3a, 0x69, 0x49, 0xac, 0x93,
+ 0x7e, 0x93, 0x70, 0x98, 0xc3, 0xc1, 0x6c, 0x1f, 0x5e, 0x3d, 0xc4, 0x02, 0xdc, 0x0d, 0x2f, 0x3d,
+ 0x7b, 0xbd, 0x78, 0x15, 0xd5, 0x8b, 0xca, 0x5e, 0xaf, 0x6b, 0xb5, 0xd1, 0x7c, 0xea, 0xe3, 0x63,
+ 0x99, 0x4f, 0xb1, 0xfd, 0x81, 0xdc, 0xd7, 0x1f, 0x1c, 0xc2, 0x92, 0xbe, 0x19, 0x1c, 0x27, 0x45,
+ 0x94, 0x43, 0xb6, 0x0a, 0x24, 0x88, 0x5b, 0x5f, 0x32, 0x1f, 0x51, 0x5c, 0x50, 0x09, 0x42, 0x21,
+ 0x8c, 0xb0, 0xf4, 0x99, 0xce, 0xd8, 0x4d, 0xab, 0x20, 0x71, 0x9c, 0x4d, 0xe0, 0x48, 0x56, 0x9e,
+ 0x58, 0xbb, 0x1b, 0xf8, 0x46, 0x7b, 0xed, 0x8b, 0xf9, 0x71, 0x8c, 0x08, 0xcf, 0xa4, 0x9e, 0xa6,
+ 0x72, 0xec, 0x92, 0x46, 0x54, 0x64, 0xd8, 0x8f, 0xb4, 0xe0, 0x83, 0xfe, 0xea, 0x31, 0xe2, 0x97,
+ 0xaa, 0xde, 0x02, 0x8e, 0x5f, 0x34, 0xdb, 0x97, 0xb6, 0x5d, 0x67, 0x0f, 0xdf, 0xfd, 0xed, 0xd0,
+ 0x4b, 0xc4, 0x57, 0x8f, 0x19, 0xfd, 0x2f, 0xd4, 0xdb, 0x03, 0xd3, 0xa1, 0x30, 0xcc, 0x74, 0x58,
+ 0x3d, 0x46, 0x8d, 0x07, 0xf5, 0x49, 0x61, 0xa7, 0x53, 0x4c, 0xec, 0x74, 0x56, 0x8f, 0x05, 0xdd,
+ 0x8e, 0x5a, 0x01, 0xd3, 0x1d, 0xeb, 0x32, 0xde, 0xaa, 0xc6, 0xb3, 0xae, 0x61, 0x41, 0x87, 0x2a,
+ 0xd6, 0x65, 0xb2, 0xb1, 0xbd, 0x7a, 0xcc, 0x08, 0xbf, 0x54, 0x57, 0xc0, 0x0c, 0xde, 0x16, 0xc0,
+ 0x64, 0xa6, 0x53, 0x05, 0x14, 0x5a, 0x3d, 0x66, 0x44, 0xdf, 0x22, 0xeb, 0x23, 0x8f, 0xcf, 0x5d,
+ 0xdf, 0x13, 0x6c, 0xb7, 0xe7, 0x52, 0x6d, 0xb7, 0x23, 0x59, 0x90, 0x0d, 0xf7, 0x53, 0xa0, 0xd0,
+ 0xc6, 0x12, 0x96, 0xa8, 0x84, 0xc9, 0xa3, 0x7a, 0x17, 0xc8, 0xef, 0x9a, 0x6e, 0x30, 0x79, 0xbe,
+ 0x69, 0x38, 0xdd, 0x35, 0xd3, 0xbd, 0x84, 0x10, 0x44, 0x5f, 0x2d, 0x4d, 0x81, 0x02, 0x16, 0x5c,
+ 0xf8, 0x47, 0x7b, 0x5b, 0x9e, 0x98, 0x21, 0x65, 0xc7, 0x46, 0xc3, 0x7e, 0xcb, 0x09, 0x0e, 0xa7,
+ 0xff, 0x5a, 0x6e, 0x3c, 0x16, 0xe4, 0x55, 0xcc, 0x55, 0x1f, 0xb6, 0xf5, 0xec, 0x3d, 0x78, 0x1f,
+ 0xdc, 0xa7, 0x4b, 0xa2, 0x83, 0x5e, 0xa9, 0x67, 0x00, 0xf0, 0xe9, 0x49, 0xbd, 0x30, 0x88, 0x29,
+ 0x93, 0x12, 0x2d, 0x1f, 0x14, 0x86, 0x3b, 0xaa, 0xfc, 0xce, 0x08, 0xa6, 0x4b, 0xbf, 0x20, 0xe2,
+ 0x67, 0xe0, 0x5d, 0xcb, 0x66, 0xea, 0x1c, 0x3c, 0xa6, 0xec, 0x94, 0xd2, 0x1a, 0x35, 0x43, 0xd8,
+ 0xcb, 0xbe, 0x6f, 0x7a, 0x4b, 0x9e, 0xdc, 0x76, 0x40, 0x4e, 0x40, 0xeb, 0x0f, 0x5a, 0x9e, 0x6f,
+ 0xd9, 0xdb, 0xf4, 0x7c, 0xf3, 0x67, 0xc6, 0xa2, 0x34, 0x03, 0x06, 0x1c, 0x79, 0xe0, 0x80, 0x73,
+ 0x20, 0x40, 0x50, 0x7e, 0x48, 0x80, 0xa0, 0x42, 0xba, 0x95, 0xc3, 0x8f, 0xb0, 0xfa, 0xb3, 0xce,
+ 0xeb, 0xcf, 0x9d, 0x31, 0x00, 0x0d, 0x92, 0xcb, 0x58, 0xec, 0x9b, 0x77, 0x85, 0x9a, 0xd2, 0xe4,
+ 0x34, 0xe5, 0x9e, 0xd1, 0x19, 0xc9, 0x5e, 0x5b, 0x3e, 0x94, 0x07, 0x57, 0x45, 0xcc, 0xd4, 0xe1,
+ 0x15, 0xaa, 0x28, 0xbf, 0x3f, 0x16, 0x45, 0x49, 0xef, 0xe8, 0x9c, 0xb5, 0xc6, 0xfc, 0x96, 0xf0,
+ 0xb9, 0xfd, 0x7e, 0xa0, 0x42, 0xd9, 0xc4, 0x28, 0xcb, 0x29, 0x50, 0x24, 0x3d, 0x0c, 0x85, 0x86,
+ 0x3e, 0xa5, 0xec, 0x6e, 0xc4, 0x4e, 0xfb, 0x8b, 0xf2, 0x36, 0x01, 0xfd, 0xa1, 0xeb, 0x1a, 0xad,
+ 0x3d, 0xd7, 0xae, 0xda, 0xbe, 0xa3, 0xfd, 0xe0, 0x58, 0x14, 0x27, 0xf4, 0x86, 0x93, 0x47, 0xf1,
+ 0x86, 0x1b, 0x69, 0x95, 0x23, 0xa8, 0xc1, 0x91, 0xac, 0x72, 0xc4, 0x14, 0x9e, 0x3d, 0x7e, 0xef,
+ 0x94, 0xc1, 0x29, 0x3a, 0xd9, 0x5a, 0xe2, 0x2d, 0x44, 0xed, 0xc2, 0x38, 0x80, 0x3c, 0x19, 0x98,
+ 0x49, 0xd4, 0x8f, 0x1e, 0x3f, 0xf0, 0x51, 0x0a, 0x12, 0x6f, 0xb3, 0xe4, 0xa6, 0x83, 0x7d, 0x1c,
+ 0x8e, 0x05, 0x29, 0xb1, 0x4b, 0x2c, 0x53, 0xb0, 0x91, 0x3d, 0x66, 0x2f, 0x95, 0x41, 0x91, 0xc4,
+ 0x48, 0xd0, 0x36, 0x32, 0x71, 0x98, 0xe0, 0xef, 0x67, 0x11, 0xd8, 0x91, 0x23, 0xdc, 0x64, 0x16,
+ 0x3f, 0x22, 0xcd, 0x5e, 0xdc, 0x40, 0x56, 0x26, 0xe0, 0x42, 0x28, 0x81, 0xd9, 0x26, 0xf4, 0xcb,
+ 0xa6, 0xeb, 0x5a, 0xe6, 0xf6, 0xb8, 0x3c, 0xbe, 0x45, 0xbd, 0x87, 0xb5, 0x6f, 0xe6, 0x44, 0xcf,
+ 0xb2, 0x87, 0x0b, 0xe1, 0x01, 0xab, 0x31, 0x51, 0xc0, 0x5f, 0x2f, 0x74, 0x5e, 0x7d, 0x18, 0xb5,
+ 0x09, 0x78, 0x6c, 0x4b, 0x60, 0x2a, 0x88, 0x83, 0x71, 0x1b, 0x17, 0x1b, 0x65, 0xc7, 0xdf, 0x0d,
+ 0x8e, 0xc1, 0xe0, 0xff, 0x07, 0xe3, 0x2f, 0x68, 0xaf, 0x4c, 0xe9, 0x28, 0x9f, 0x1c, 0xc4, 0x23,
+ 0x5d, 0x1b, 0x4b, 0xe3, 0x0e, 0x7f, 0x54, 0x61, 0x3b, 0x7e, 0x79, 0x8a, 0x2e, 0x47, 0xd6, 0x4c,
+ 0x1f, 0x3e, 0xa8, 0xfd, 0xa1, 0x0c, 0xa6, 0x9a, 0xd0, 0x47, 0xe3, 0x2d, 0x62, 0xff, 0xd0, 0x1a,
+ 0xae, 0x32, 0x2b, 0x1e, 0xf4, 0x6c, 0xad, 0x7a, 0x2f, 0x98, 0xe9, 0xb9, 0x4e, 0x1b, 0x7a, 0x1e,
+ 0x5d, 0xbd, 0x60, 0x1d, 0xd5, 0x06, 0x8d, 0xfe, 0x98, 0xb5, 0xc5, 0xf5, 0xe0, 0x1b, 0x23, 0xfa,
+ 0x3c, 0xad, 0x19, 0x40, 0x28, 0xd1, 0x0a, 0x4e, 0xda, 0x0c, 0x48, 0x2a, 0x3c, 0x7b, 0xa0, 0x7f,
+ 0x57, 0x06, 0x73, 0x4d, 0xe8, 0x87, 0x52, 0x4c, 0xb1, 0xc9, 0x11, 0x0f, 0x2f, 0x07, 0xa5, 0x7c,
+ 0x38, 0x28, 0xdf, 0x29, 0x7c, 0x29, 0x2c, 0x2f, 0xcd, 0x90, 0xd8, 0x58, 0xf0, 0x7c, 0x8b, 0xd0,
+ 0x5d, 0xb0, 0x62, 0x1c, 0x4c, 0xe0, 0xf8, 0xda, 0x63, 0xc1, 0x0c, 0xe6, 0x05, 0x37, 0xd8, 0x1f,
+ 0xcd, 0x47, 0x8d, 0xf7, 0x0b, 0x19, 0x35, 0xde, 0xbb, 0x41, 0x61, 0xd7, 0x74, 0x2f, 0x05, 0x87,
+ 0x6f, 0x1f, 0x27, 0xb6, 0xfa, 0xe5, 0x19, 0xe4, 0xab, 0xc1, 0x7e, 0x9a, 0x85, 0x74, 0x7e, 0x9a,
+ 0xaf, 0x97, 0x52, 0x8d, 0x84, 0x64, 0xee, 0x30, 0xc6, 0x26, 0x9f, 0x62, 0xdc, 0x4c, 0x28, 0x3b,
+ 0x7b, 0xe5, 0x78, 0xb1, 0x0c, 0xa6, 0xd1, 0xb8, 0x8d, 0xed, 0xf1, 0xf3, 0x87, 0x57, 0x87, 0xc1,
+ 0x86, 0x7e, 0xca, 0x1e, 0x38, 0x90, 0xc8, 0xf8, 0xcc, 0xfb, 0x14, 0x3d, 0x70, 0x52, 0xe1, 0xd9,
+ 0xe3, 0xf1, 0x6e, 0x82, 0x07, 0x6e, 0x0f, 0xda, 0x1b, 0x64, 0x20, 0xaf, 0x40, 0x7f, 0xd2, 0x56,
+ 0xe4, 0xdb, 0x85, 0xc3, 0x8b, 0x72, 0x02, 0xc3, 0x3c, 0x2f, 0xae, 0xc0, 0xf1, 0x34, 0x20, 0xb1,
+ 0xb8, 0xa2, 0x42, 0x0c, 0x64, 0x8f, 0xda, 0xfb, 0x09, 0x6a, 0x64, 0x73, 0xe1, 0x07, 0xc6, 0xd0,
+ 0xab, 0x4e, 0x76, 0xe1, 0x23, 0x10, 0x20, 0xa6, 0x71, 0x54, 0xed, 0x6d, 0x50, 0xe1, 0xd9, 0x23,
+ 0xf7, 0x33, 0x32, 0xbe, 0xc4, 0xac, 0xbc, 0x03, 0xdb, 0x97, 0x60, 0x87, 0xbd, 0xc8, 0x79, 0x54,
+ 0xe8, 0x4e, 0x83, 0xa9, 0x36, 0xa1, 0x86, 0xc1, 0x9b, 0x36, 0x82, 0x47, 0xfe, 0x66, 0xa1, 0xc4,
+ 0xbb, 0xb3, 0xf8, 0x8e, 0x88, 0x7c, 0x3e, 0x16, 0x5c, 0xc4, 0x2e, 0xbc, 0x12, 0x28, 0x7e, 0x02,
+ 0x66, 0x0b, 0x99, 0x65, 0x54, 0xdb, 0x8e, 0xad, 0xfd, 0xb7, 0xc3, 0xc3, 0x72, 0x2d, 0x98, 0xb1,
+ 0xda, 0x8e, 0x8d, 0x43, 0xc0, 0x05, 0x87, 0x80, 0xc2, 0x84, 0xe0, 0xad, 0xbe, 0xeb, 0x3c, 0x60,
+ 0xd1, 0x5d, 0xf3, 0x28, 0x61, 0x54, 0x63, 0x02, 0xb1, 0x7e, 0x54, 0xc6, 0xc4, 0x80, 0xb2, 0xb3,
+ 0x87, 0xec, 0x13, 0x91, 0x77, 0x1b, 0xe9, 0x0a, 0x1f, 0x11, 0xab, 0xc0, 0xa3, 0x0c, 0x67, 0x6c,
+ 0x2d, 0x8e, 0x64, 0x38, 0x4b, 0x60, 0x60, 0x02, 0x37, 0x11, 0x46, 0x38, 0x66, 0xbe, 0x06, 0x7c,
+ 0x08, 0x74, 0xc6, 0x67, 0x1e, 0x8e, 0x88, 0xce, 0xd1, 0x98, 0x88, 0x1f, 0xa6, 0xe1, 0xe9, 0xa9,
+ 0xc5, 0xa3, 0xfd, 0xf7, 0x71, 0x80, 0x73, 0xe7, 0x28, 0xfe, 0x0a, 0xc4, 0x5b, 0x41, 0x7b, 0xab,
+ 0x24, 0x1a, 0x02, 0xe5, 0x80, 0x04, 0x11, 0x95, 0xb1, 0x20, 0xf8, 0x26, 0xa1, 0xd8, 0x24, 0x22,
+ 0xe5, 0x67, 0x0f, 0xe0, 0x8b, 0x64, 0xb0, 0x80, 0x7d, 0x04, 0xba, 0xd0, 0x74, 0x49, 0x47, 0x39,
+ 0x16, 0x47, 0xf9, 0x77, 0x0b, 0x07, 0xf8, 0xe1, 0xe5, 0x10, 0xf1, 0x31, 0x16, 0x28, 0xc4, 0xa2,
+ 0xfb, 0x08, 0xb2, 0x30, 0x91, 0x6d, 0x14, 0x25, 0x64, 0x81, 0xaa, 0xf8, 0x78, 0xf0, 0x48, 0xe9,
+ 0x91, 0xcb, 0x0b, 0x23, 0x68, 0x6c, 0x13, 0xf6, 0xc8, 0x15, 0x61, 0x22, 0x7b, 0x4c, 0xde, 0xf0,
+ 0x44, 0xba, 0xe0, 0xdc, 0x32, 0x2f, 0x76, 0xa1, 0xf6, 0xea, 0x7c, 0x78, 0xa2, 0xed, 0x77, 0xc7,
+ 0xe2, 0x81, 0x79, 0x88, 0xcb, 0xa8, 0x54, 0x90, 0x77, 0x9d, 0x2b, 0x64, 0x69, 0x6b, 0xde, 0xc0,
+ 0xff, 0x49, 0x3c, 0xcb, 0xee, 0xde, 0xae, 0x4d, 0x4e, 0x86, 0xce, 0x1b, 0xc1, 0xa3, 0x7a, 0x23,
+ 0x98, 0xbf, 0x62, 0xf9, 0x3b, 0xab, 0xd0, 0xec, 0x40, 0xd7, 0x70, 0xae, 0x60, 0x8f, 0xb9, 0x69,
+ 0x83, 0x4f, 0xe4, 0xfd, 0x57, 0x04, 0xec, 0x4b, 0x24, 0x94, 0xc9, 0x1c, 0x7f, 0x4b, 0x63, 0x79,
+ 0xc6, 0x73, 0x95, 0xbd, 0xc2, 0x7c, 0x40, 0x06, 0x33, 0x86, 0x73, 0x85, 0x2a, 0xc9, 0xff, 0x79,
+ 0xb4, 0x3a, 0x92, 0x7a, 0xa2, 0x87, 0x25, 0x17, 0xb2, 0x3f, 0xf1, 0x89, 0x5e, 0x62, 0xf1, 0x13,
+ 0x39, 0xb9, 0x34, 0x67, 0x38, 0x57, 0x9a, 0xd0, 0x27, 0x2d, 0x42, 0xdb, 0x1c, 0x93, 0x93, 0xb5,
+ 0xe5, 0x11, 0x82, 0x74, 0x1e, 0x1e, 0x3e, 0xa7, 0xdd, 0x45, 0x08, 0x05, 0x14, 0xb2, 0x38, 0xe9,
+ 0x5d, 0x84, 0xa1, 0x1c, 0x4c, 0x20, 0x46, 0x8a, 0x0c, 0x66, 0x0d, 0xe7, 0x0a, 0x1a, 0x1a, 0x96,
+ 0xad, 0x6e, 0x77, 0x3c, 0x23, 0x64, 0x5a, 0xe3, 0x3f, 0x10, 0x43, 0xc0, 0xc5, 0xc4, 0x8d, 0xff,
+ 0x21, 0x0c, 0x64, 0x0f, 0xc3, 0xf3, 0x49, 0x63, 0x09, 0x46, 0x68, 0x7b, 0x3c, 0x38, 0x8c, 0xda,
+ 0x20, 0x42, 0x36, 0x8e, 0xac, 0x41, 0xc4, 0x71, 0x30, 0x91, 0x9d, 0x93, 0x85, 0x32, 0x1e, 0xe6,
+ 0xc7, 0xdb, 0x26, 0xde, 0x9b, 0xce, 0x35, 0x91, 0x0e, 0xbb, 0x1c, 0x23, 0x63, 0x41, 0x23, 0x85,
+ 0x0b, 0xa2, 0x00, 0x0f, 0xd9, 0xe3, 0xf1, 0x51, 0x19, 0xcc, 0x11, 0x16, 0x1e, 0x21, 0x56, 0xc0,
+ 0x48, 0x8d, 0x8a, 0xad, 0xc1, 0xd1, 0x34, 0xaa, 0x04, 0x0e, 0x26, 0x72, 0x9f, 0x3f, 0xb2, 0xe3,
+ 0x46, 0x38, 0x3e, 0x1e, 0x87, 0xe0, 0xc8, 0xc6, 0xd8, 0x18, 0x8f, 0x90, 0x8f, 0x62, 0x8c, 0x1d,
+ 0xd1, 0x31, 0xf2, 0xe7, 0x87, 0xad, 0x68, 0x9c, 0x18, 0x1c, 0xa2, 0x29, 0x8c, 0x11, 0x86, 0x11,
+ 0x9b, 0xc2, 0x11, 0x21, 0xf1, 0xa7, 0x32, 0x00, 0x84, 0x81, 0x35, 0xe7, 0x32, 0xbe, 0x48, 0x73,
+ 0x0c, 0xdd, 0x59, 0xbf, 0x5b, 0xbd, 0x3c, 0xc4, 0xad, 0x3e, 0x65, 0x08, 0x97, 0xb4, 0x2b, 0x81,
+ 0x8c, 0x94, 0x51, 0x25, 0x27, 0xbe, 0x12, 0x98, 0x5c, 0x7e, 0xf6, 0x18, 0x7f, 0x99, 0x58, 0x73,
+ 0xd1, 0x01, 0xd3, 0x9f, 0x1d, 0x0b, 0xca, 0xcc, 0xec, 0x5f, 0xe6, 0x67, 0xff, 0x87, 0xc0, 0x76,
+ 0x54, 0x1b, 0x71, 0xd8, 0xc1, 0xd1, 0xec, 0x6d, 0xc4, 0xa3, 0x3b, 0x20, 0xfa, 0x03, 0x79, 0x70,
+ 0x9c, 0x76, 0x22, 0xdf, 0x09, 0x10, 0xa7, 0x3c, 0x87, 0xc7, 0x75, 0x92, 0x43, 0x50, 0x1e, 0xd7,
+ 0x82, 0x54, 0x9a, 0xa5, 0x4c, 0x01, 0xf6, 0x26, 0xb2, 0xba, 0x51, 0xd4, 0x1f, 0xec, 0x99, 0x76,
+ 0x47, 0x3c, 0xdc, 0xef, 0x10, 0xe0, 0x83, 0xb5, 0x46, 0x99, 0x5f, 0x6b, 0x1c, 0xb0, 0x32, 0x99,
+ 0x7a, 0xe7, 0x1a, 0x8b, 0x8c, 0xb0, 0x3b, 0xf1, 0x9d, 0xeb, 0xf8, 0xb2, 0xb3, 0x47, 0xe9, 0xbd,
+ 0x32, 0xc8, 0x37, 0x1d, 0xd7, 0xd7, 0x5e, 0x90, 0xa6, 0x75, 0x12, 0xc9, 0x47, 0x20, 0x05, 0xcf,
+ 0x6a, 0x19, 0xe4, 0x51, 0xe5, 0xe8, 0x8c, 0xe1, 0xb6, 0xe4, 0xa3, 0xce, 0xa6, 0x6f, 0x62, 0xaf,
+ 0x6e, 0x54, 0xfe, 0x62, 0x6b, 0xbf, 0x07, 0x0d, 0xfc, 0x71, 0xda, 0x78, 0x3a, 0x44, 0x7e, 0xcd,
+ 0xf8, 0x03, 0x18, 0x99, 0xc5, 0xd3, 0x89, 0x2d, 0x39, 0x7b, 0xdc, 0x1e, 0x3e, 0x4e, 0x7d, 0x5b,
+ 0x97, 0xad, 0x2e, 0xd4, 0x5e, 0x40, 0x5c, 0x46, 0xea, 0xe6, 0x2e, 0x14, 0x3f, 0x12, 0x93, 0xe8,
+ 0xda, 0x8a, 0xe3, 0xcb, 0xca, 0x51, 0x7c, 0xd9, 0xb4, 0x0d, 0x8a, 0x1c, 0x40, 0x27, 0x2c, 0x4d,
+ 0xba, 0x41, 0x25, 0x94, 0x3d, 0x91, 0x38, 0x9d, 0x27, 0x9a, 0xd0, 0x27, 0x46, 0x65, 0x23, 0xb8,
+ 0x22, 0xe9, 0xfb, 0xc7, 0x12, 0xb1, 0x33, 0xbc, 0x50, 0x47, 0xee, 0xbb, 0x81, 0xe9, 0x03, 0x2c,
+ 0x38, 0x6b, 0x3c, 0x38, 0xdf, 0x1b, 0x2f, 0x20, 0x9e, 0xc9, 0xb1, 0xc0, 0xf4, 0xf6, 0x10, 0xa6,
+ 0x75, 0x0e, 0xa6, 0xbb, 0x46, 0xe4, 0x22, 0x7b, 0xc0, 0x7e, 0xbc, 0x00, 0x8e, 0x93, 0x49, 0x7f,
+ 0xc9, 0xee, 0xd0, 0x08, 0xab, 0x6f, 0x96, 0x8e, 0x78, 0xb3, 0xed, 0x60, 0x08, 0x56, 0x2e, 0x96,
+ 0x73, 0xa1, 0x2f, 0x96, 0xb3, 0xba, 0x44, 0xc2, 0xb9, 0xa2, 0x4e, 0x14, 0xef, 0xb4, 0x0d, 0x0b,
+ 0x33, 0x81, 0x65, 0x8f, 0xbb, 0xdc, 0xf0, 0x3b, 0xfe, 0x1e, 0xd1, 0x29, 0xf1, 0x7b, 0x44, 0x7f,
+ 0x3b, 0xdd, 0xba, 0x1d, 0x2e, 0xba, 0x4f, 0xe0, 0x19, 0xdb, 0x4e, 0x29, 0x56, 0xf4, 0x04, 0xb8,
+ 0xfb, 0xcf, 0xe1, 0x4e, 0x16, 0x45, 0x10, 0x19, 0xd1, 0x9d, 0x0c, 0x13, 0x38, 0x4a, 0x77, 0xb2,
+ 0x61, 0x0c, 0x64, 0x8f, 0xe3, 0x6f, 0x17, 0xe8, 0x6e, 0x3e, 0x6e, 0x37, 0xda, 0x1f, 0x4b, 0x99,
+ 0x8f, 0xd2, 0xdf, 0xca, 0xa5, 0xf2, 0x7f, 0xc6, 0x7c, 0x25, 0x0f, 0xd3, 0x69, 0x3c, 0x9a, 0x93,
+ 0xc8, 0x4d, 0x60, 0xdd, 0x48, 0xc2, 0xbe, 0xe8, 0xe7, 0xad, 0x8e, 0xbf, 0x33, 0xa6, 0x13, 0x1d,
+ 0x57, 0x10, 0x2d, 0x1a, 0xaf, 0x9e, 0x3c, 0x68, 0xff, 0x92, 0x4b, 0x15, 0x42, 0x2a, 0x14, 0x09,
+ 0x66, 0x2b, 0x46, 0xc4, 0x29, 0x02, 0x3f, 0x25, 0xd2, 0x9b, 0xa0, 0x46, 0x9f, 0xb3, 0x3a, 0xd0,
+ 0x79, 0x04, 0x6a, 0x34, 0xe6, 0x6b, 0x7c, 0x1a, 0x9d, 0x44, 0xee, 0x3f, 0xa9, 0x46, 0x87, 0x22,
+ 0x19, 0x93, 0x46, 0x27, 0xd2, 0xcb, 0x5e, 0xc6, 0xaf, 0x9c, 0xa3, 0x13, 0xa9, 0x9a, 0x65, 0x5f,
+ 0xd2, 0xfe, 0xb1, 0x08, 0x94, 0x20, 0x8e, 0xb0, 0xbf, 0x43, 0x63, 0xc1, 0x7c, 0x48, 0xf8, 0x6e,
+ 0x94, 0x11, 0xe2, 0xbd, 0xf0, 0xe1, 0xa4, 0x0a, 0x07, 0xc2, 0x49, 0x95, 0xc0, 0xbc, 0x65, 0xfb,
+ 0xd0, 0xb5, 0xcd, 0xee, 0x72, 0xd7, 0xdc, 0xf6, 0x4e, 0x4f, 0x0d, 0xbc, 0xbc, 0xae, 0xca, 0xe4,
+ 0x31, 0xf8, 0x2f, 0xd8, 0x0b, 0x44, 0xa7, 0xf9, 0x0b, 0x44, 0x63, 0xa2, 0x5f, 0xcd, 0xc4, 0x47,
+ 0xbf, 0x0a, 0xa3, 0x5b, 0x81, 0xe1, 0xc1, 0xb1, 0x45, 0x6d, 0xe3, 0x94, 0xe1, 0xfe, 0x6e, 0x13,
+ 0x8c, 0xc2, 0x16, 0x86, 0x7e, 0x7c, 0x8d, 0x9c, 0x6a, 0x75, 0x0f, 0x29, 0xc2, 0x62, 0xbf, 0x12,
+ 0xa4, 0xb6, 0x50, 0xd9, 0xca, 0xcb, 0x7d, 0x95, 0x0f, 0x4d, 0x9e, 0xbc, 0x80, 0xc9, 0xc3, 0x2a,
+ 0x55, 0x41, 0xf4, 0x4e, 0x57, 0xf1, 0xc5, 0x42, 0x91, 0xda, 0x4e, 0xe0, 0x34, 0x52, 0x01, 0x9c,
+ 0x08, 0xa2, 0xdd, 0xf6, 0x7a, 0xd0, 0x74, 0x4d, 0xbb, 0x0d, 0xb5, 0x4f, 0x48, 0xe3, 0x30, 0x7b,
+ 0x97, 0xc1, 0xb4, 0xd5, 0x76, 0xec, 0xa6, 0xf5, 0x9c, 0xe0, 0x72, 0xb9, 0xe4, 0x20, 0xeb, 0x58,
+ 0x22, 0x55, 0xfa, 0x85, 0x11, 0x7e, 0xab, 0x56, 0xc1, 0x4c, 0xdb, 0x74, 0x3b, 0x24, 0x08, 0x5f,
+ 0xa1, 0xef, 0x22, 0xa7, 0x58, 0x42, 0xe5, 0xe0, 0x13, 0x23, 0xfa, 0x5a, 0x6d, 0xf0, 0x42, 0x2c,
+ 0xf6, 0x45, 0xf3, 0x88, 0x25, 0x56, 0x89, 0x3e, 0xe2, 0x64, 0x8e, 0xa4, 0xe3, 0xc2, 0xae, 0x49,
+ 0x2e, 0x1d, 0x9f, 0x22, 0x77, 0x44, 0x87, 0x09, 0x69, 0x97, 0x07, 0x70, 0x51, 0x07, 0xd0, 0x98,
+ 0xf4, 0xf2, 0x80, 0x10, 0x17, 0xd9, 0x6b, 0xe6, 0xbb, 0x8a, 0x60, 0x9e, 0xf4, 0x6a, 0x54, 0x9c,
+ 0xda, 0x8b, 0x64, 0x50, 0x6c, 0x42, 0xff, 0x3e, 0xb8, 0xaf, 0x35, 0x0f, 0x3f, 0x26, 0x2b, 0x40,
+ 0xbe, 0x14, 0x06, 0x1c, 0x44, 0x7f, 0xd3, 0xee, 0xdb, 0x07, 0x7c, 0x2d, 0x12, 0x9e, 0x26, 0xbd,
+ 0x6f, 0x9f, 0x5c, 0x7c, 0xf6, 0xf8, 0xfc, 0x84, 0x0c, 0xe4, 0x52, 0xa7, 0xa3, 0xb5, 0x0f, 0x0f,
+ 0xc5, 0xf5, 0x60, 0x36, 0x68, 0x33, 0x51, 0x0c, 0x48, 0x36, 0x29, 0xed, 0x22, 0x68, 0x28, 0x9b,
+ 0x52, 0x67, 0xe2, 0xbb, 0x0a, 0x09, 0x65, 0x67, 0x0f, 0xca, 0x17, 0xa6, 0x68, 0xa3, 0x59, 0x72,
+ 0x9c, 0x4b, 0xf8, 0xa8, 0xcc, 0x2f, 0xca, 0xa0, 0xb0, 0x0c, 0xfd, 0xf6, 0x8e, 0xe6, 0x8d, 0xa5,
+ 0xcd, 0xf4, 0xdd, 0x7b, 0x3e, 0x24, 0x28, 0x67, 0xda, 0xe8, 0xcf, 0x01, 0xdb, 0x8b, 0x98, 0xe5,
+ 0x49, 0x47, 0x7f, 0x4e, 0x2c, 0x7d, 0x02, 0x87, 0xe0, 0xf2, 0x60, 0x21, 0x5c, 0x01, 0x23, 0x98,
+ 0xbd, 0x23, 0xf7, 0x88, 0x5b, 0x0f, 0x1d, 0x62, 0x37, 0x6b, 0xbf, 0x9f, 0x2e, 0xc4, 0x5a, 0x28,
+ 0x73, 0xbe, 0xe6, 0x19, 0x2f, 0x4c, 0xa6, 0x08, 0xbe, 0x26, 0xc6, 0xe0, 0x04, 0x56, 0x00, 0x64,
+ 0x30, 0x8d, 0x19, 0xaa, 0x58, 0x97, 0xb1, 0xeb, 0x21, 0xb7, 0x50, 0xf9, 0xdc, 0xb1, 0x2c, 0x54,
+ 0xde, 0xc5, 0x2f, 0x54, 0x0a, 0x46, 0x4c, 0x0e, 0xd6, 0x29, 0x53, 0xfa, 0xe2, 0xa0, 0xef, 0xc7,
+ 0xbe, 0x4c, 0x99, 0xc2, 0x17, 0x67, 0x48, 0xf9, 0x13, 0x70, 0x3d, 0xbc, 0x9f, 0x76, 0xd6, 0xc1,
+ 0x86, 0xac, 0xf6, 0x3f, 0x4f, 0x80, 0xfc, 0x39, 0xf4, 0xe7, 0x1f, 0xa2, 0x1b, 0xb5, 0x5e, 0x3e,
+ 0x86, 0xe0, 0x0e, 0xcf, 0x00, 0x79, 0x44, 0x9f, 0x4e, 0x7b, 0x6e, 0x11, 0xdb, 0x1d, 0x46, 0x8c,
+ 0x18, 0xf8, 0x3b, 0xf5, 0x14, 0x28, 0x7a, 0xce, 0x9e, 0xdb, 0x46, 0xe6, 0x37, 0xd2, 0x18, 0xfa,
+ 0x94, 0x36, 0xa8, 0x29, 0x47, 0x7a, 0x71, 0x7c, 0x2e, 0xa7, 0xcc, 0x05, 0x4b, 0x32, 0x77, 0xc1,
+ 0x52, 0x8a, 0xfd, 0x07, 0x01, 0xde, 0xb2, 0xd7, 0x88, 0x3f, 0xc6, 0x77, 0x0d, 0x76, 0xc6, 0x05,
+ 0x7b, 0x8c, 0x58, 0x0e, 0xab, 0x0e, 0x69, 0x1d, 0xc6, 0x79, 0xd1, 0x86, 0x71, 0xe4, 0x27, 0xea,
+ 0x30, 0x2e, 0xc0, 0xc3, 0x44, 0x4e, 0xb9, 0x17, 0xa9, 0x93, 0xeb, 0x85, 0x71, 0xa2, 0x9b, 0xe7,
+ 0x94, 0xfe, 0x50, 0xe8, 0x8c, 0xd1, 0xf9, 0x75, 0x64, 0x74, 0x8e, 0xc8, 0xfd, 0xf5, 0xd7, 0x65,
+ 0x1c, 0x49, 0x33, 0x30, 0x82, 0xc4, 0x2f, 0x4a, 0x4a, 0x0d, 0x11, 0x1a, 0x83, 0xb9, 0x38, 0xd2,
+ 0xf3, 0xa3, 0x87, 0x16, 0xe7, 0x45, 0xc7, 0xf0, 0x3f, 0xe9, 0xd0, 0xe2, 0xa2, 0x8c, 0x64, 0x0f,
+ 0xe4, 0x2f, 0x90, 0x8b, 0xc9, 0x4a, 0x6d, 0xdf, 0xba, 0x3c, 0xe6, 0x96, 0xc6, 0x0f, 0x2f, 0x29,
+ 0xa3, 0x09, 0x1f, 0x90, 0x10, 0xe1, 0x70, 0xd2, 0xd1, 0x84, 0xc5, 0xd8, 0xc8, 0x1e, 0xa6, 0xaf,
+ 0x16, 0x91, 0xf4, 0xe8, 0xda, 0xce, 0x1b, 0xe8, 0x6a, 0x02, 0x3c, 0x3c, 0x5a, 0x67, 0xc1, 0x1c,
+ 0xb3, 0x74, 0x10, 0x5c, 0x78, 0xc3, 0xa5, 0xa5, 0x3d, 0x28, 0x1f, 0x8a, 0x6c, 0xec, 0x0b, 0x0b,
+ 0x29, 0x16, 0x8c, 0x45, 0x98, 0x98, 0xc8, 0x7d, 0x72, 0xc1, 0x18, 0x36, 0x21, 0xac, 0x3e, 0xc4,
+ 0x62, 0xd5, 0xe0, 0xb1, 0xba, 0x43, 0x44, 0x4c, 0x62, 0x63, 0x9a, 0xd0, 0xbc, 0xf1, 0x9d, 0x21,
+ 0x5c, 0x06, 0x07, 0xd7, 0x33, 0x46, 0xe6, 0x23, 0x7b, 0xc4, 0x7e, 0x8e, 0x74, 0x87, 0x4d, 0x62,
+ 0xb2, 0x8f, 0xa7, 0x3b, 0xa4, 0xb3, 0x01, 0x99, 0x9b, 0x0d, 0xa4, 0xf4, 0xd7, 0x8f, 0xdc, 0x50,
+ 0x03, 0xe6, 0x86, 0x41, 0x94, 0x1f, 0xb3, 0xbf, 0xfe, 0x50, 0x0e, 0xb2, 0x07, 0xe7, 0xeb, 0x32,
+ 0x00, 0x2b, 0xae, 0xb3, 0xd7, 0x6b, 0xb8, 0x1d, 0xe8, 0x6a, 0x7f, 0x16, 0x4d, 0x00, 0x7e, 0x72,
+ 0x0c, 0x13, 0x80, 0x75, 0x00, 0xb6, 0x43, 0xe2, 0x54, 0xc3, 0x9f, 0x28, 0x66, 0xee, 0x47, 0x4c,
+ 0x19, 0x0c, 0x0d, 0xfe, 0xca, 0xda, 0x67, 0xf1, 0x18, 0x27, 0xf5, 0x59, 0x11, 0xb9, 0x71, 0x4e,
+ 0x00, 0xde, 0x1d, 0x62, 0xdd, 0xe2, 0xb0, 0x7e, 0xe6, 0x21, 0x38, 0xc9, 0x1e, 0xf3, 0xbf, 0x9f,
+ 0x02, 0xb3, 0x64, 0xbb, 0x8f, 0xc8, 0xf4, 0xaf, 0x23, 0xd0, 0x7f, 0x76, 0x0c, 0xa0, 0x6f, 0x80,
+ 0x39, 0x27, 0xa2, 0x4e, 0xfa, 0x54, 0x76, 0x01, 0x26, 0x11, 0x76, 0x86, 0x2f, 0x83, 0x23, 0xa3,
+ 0x7d, 0x8c, 0x45, 0xde, 0xe0, 0x91, 0xbf, 0x2b, 0x41, 0xde, 0x0c, 0xc5, 0x71, 0x42, 0xff, 0x9e,
+ 0x10, 0xfa, 0x0d, 0x0e, 0xfa, 0xd2, 0x61, 0x58, 0x99, 0x40, 0xb8, 0x7e, 0x19, 0xe4, 0xf1, 0xe9,
+ 0xba, 0xb7, 0x64, 0x38, 0xbf, 0x3f, 0x0d, 0xa6, 0x70, 0x93, 0x0d, 0xe7, 0x1d, 0xc1, 0x23, 0x7a,
+ 0x63, 0x6e, 0xf9, 0xd0, 0x0d, 0x57, 0x6e, 0x83, 0x47, 0xc4, 0x43, 0xe0, 0xd5, 0xec, 0x9d, 0x2e,
+ 0x92, 0x8d, 0xcc, 0x30, 0x61, 0xe4, 0x49, 0x09, 0x2b, 0xf1, 0xb1, 0x9d, 0xb7, 0x1b, 0x65, 0x52,
+ 0x32, 0x84, 0x91, 0xec, 0x81, 0xff, 0x62, 0x1e, 0x9c, 0x26, 0xab, 0x4a, 0xcb, 0xae, 0xb3, 0xdb,
+ 0x77, 0x3b, 0x96, 0x75, 0x78, 0x5d, 0xb8, 0x09, 0x2c, 0xf8, 0x9c, 0x3f, 0x37, 0xd5, 0x89, 0xbe,
+ 0x54, 0xed, 0x77, 0x58, 0x9f, 0x8c, 0xfb, 0x79, 0x24, 0x97, 0x12, 0x04, 0x18, 0xc7, 0x7b, 0xea,
+ 0x85, 0x7a, 0x41, 0x46, 0x99, 0x45, 0x2a, 0x79, 0xa4, 0x35, 0xcb, 0x50, 0xa7, 0x0a, 0x22, 0x3a,
+ 0xf5, 0xc1, 0x50, 0xa7, 0xfe, 0x0b, 0xa7, 0x53, 0x2b, 0x87, 0x17, 0xc9, 0x04, 0x56, 0x2e, 0x16,
+ 0x40, 0x71, 0xd9, 0xea, 0xfa, 0xd0, 0xd5, 0xbe, 0x4c, 0xe7, 0x51, 0xaf, 0xce, 0xb0, 0x7b, 0xa9,
+ 0x80, 0xe2, 0x16, 0x2e, 0x8d, 0x1a, 0x64, 0xb7, 0x8a, 0x61, 0x43, 0x38, 0x34, 0xe8, 0xb7, 0x69,
+ 0x63, 0xc7, 0xf5, 0x91, 0x19, 0xdb, 0x04, 0x2c, 0x45, 0xec, 0xb8, 0xe1, 0x2c, 0x4c, 0xe4, 0xda,
+ 0xa4, 0xa2, 0x01, 0x77, 0xd1, 0x08, 0x72, 0x29, 0x3b, 0x84, 0x15, 0x20, 0x5b, 0x1d, 0x0f, 0x37,
+ 0xbd, 0x19, 0x03, 0xfd, 0x4d, 0xeb, 0xc9, 0xd2, 0x2f, 0x2a, 0xc2, 0xf2, 0xa4, 0x3d, 0x59, 0x84,
+ 0xb8, 0xc8, 0x1e, 0xb3, 0x6f, 0x61, 0x37, 0xc6, 0x5e, 0xd7, 0x6c, 0x43, 0xc4, 0x7d, 0x66, 0xa8,
+ 0x2d, 0x00, 0xc9, 0x0a, 0x46, 0x7c, 0xc9, 0x62, 0xdb, 0x69, 0xe1, 0x10, 0xed, 0x74, 0xd4, 0x45,
+ 0xae, 0x50, 0xe6, 0xb8, 0xe2, 0x47, 0xb6, 0xc8, 0x95, 0xc8, 0xc6, 0x04, 0x2e, 0xc5, 0x0c, 0x8e,
+ 0x79, 0x4e, 0xb4, 0xb5, 0x8e, 0xba, 0x05, 0x40, 0x85, 0x35, 0xb6, 0x23, 0x9d, 0xa3, 0x6c, 0x01,
+ 0xc4, 0xf3, 0x30, 0x01, 0xb4, 0x16, 0x28, 0x5a, 0x9f, 0xa7, 0xc3, 0x68, 0xc6, 0xbb, 0x70, 0x9e,
+ 0xe3, 0xfa, 0xe9, 0x76, 0xe1, 0x10, 0x77, 0x06, 0xfe, 0x2e, 0xed, 0xb1, 0x20, 0xfe, 0xd4, 0xef,
+ 0xb8, 0x86, 0xcf, 0x14, 0xc7, 0x82, 0x86, 0x31, 0x90, 0x3d, 0xbc, 0x6f, 0x3d, 0xa2, 0xc1, 0x73,
+ 0xd4, 0xe6, 0x48, 0xdb, 0xc0, 0xd8, 0x86, 0xce, 0x51, 0x9a, 0x63, 0x3c, 0x0f, 0xd9, 0xe3, 0xf5,
+ 0x77, 0xcc, 0xc0, 0xf9, 0xa6, 0x09, 0x0e, 0x9c, 0x41, 0xcb, 0x2c, 0x8c, 0xd8, 0x32, 0x47, 0xdd,
+ 0x5d, 0xa0, 0xb2, 0x1e, 0xdf, 0x80, 0x39, 0xca, 0xee, 0x42, 0x02, 0x13, 0xd9, 0x23, 0xfe, 0x66,
+ 0x19, 0x14, 0x9a, 0x93, 0x1f, 0x2f, 0x47, 0x9d, 0x8b, 0x60, 0x59, 0x35, 0xc7, 0x36, 0x5c, 0x8e,
+ 0x32, 0x17, 0x89, 0x65, 0x61, 0x02, 0x61, 0xe1, 0x8f, 0x83, 0x39, 0x3c, 0xe1, 0x0e, 0x36, 0xf1,
+ 0xfe, 0x8e, 0x8e, 0x9a, 0xaf, 0xcf, 0xb0, 0xad, 0xde, 0x0b, 0xa6, 0x83, 0xdd, 0x21, 0x3a, 0x72,
+ 0x2e, 0x8a, 0xb5, 0xcf, 0x80, 0x4b, 0x23, 0xfc, 0xfe, 0x50, 0x5b, 0xed, 0x63, 0xdf, 0x09, 0x1c,
+ 0x75, 0xab, 0xfd, 0x48, 0x77, 0x03, 0x7f, 0x3b, 0x1a, 0x51, 0xff, 0x5b, 0x76, 0x98, 0xf7, 0xef,
+ 0x12, 0xe6, 0x07, 0xec, 0x12, 0x7e, 0x82, 0xc5, 0xb2, 0xc9, 0x63, 0x79, 0xb7, 0xa8, 0x08, 0xc7,
+ 0x38, 0xd6, 0xbe, 0x37, 0x84, 0xf3, 0x1c, 0x07, 0xe7, 0xd2, 0xa1, 0x78, 0x99, 0xc0, 0xb1, 0xbc,
+ 0x7c, 0x34, 0xe6, 0x7e, 0x32, 0xc3, 0x76, 0xdc, 0xe7, 0xf3, 0x9f, 0x3f, 0xe0, 0xf3, 0xcf, 0xb5,
+ 0xf4, 0xc2, 0x21, 0x5b, 0xfa, 0x27, 0x59, 0xed, 0x68, 0xf1, 0xda, 0xf1, 0x0c, 0x71, 0x44, 0xc6,
+ 0x37, 0x32, 0xbf, 0x2f, 0x54, 0x8f, 0xf3, 0x9c, 0x7a, 0x94, 0x0f, 0xc7, 0x4c, 0xf6, 0xfa, 0xf1,
+ 0x1b, 0xc1, 0x84, 0xf6, 0x88, 0xdb, 0xfb, 0xa8, 0x1b, 0x91, 0x9c, 0x10, 0xc7, 0x36, 0x72, 0x8f,
+ 0xb2, 0x11, 0x39, 0x8c, 0x93, 0x09, 0x44, 0x0a, 0x9b, 0x07, 0xb3, 0x98, 0xa7, 0xf3, 0x56, 0x67,
+ 0x1b, 0xfa, 0xda, 0x6b, 0x88, 0x07, 0x5c, 0x10, 0x97, 0x71, 0x4c, 0xc1, 0x73, 0xe2, 0x4e, 0x63,
+ 0xa6, 0xf5, 0x17, 0x20, 0x4c, 0x2e, 0x32, 0x0c, 0x4e, 0x3a, 0xbe, 0xdf, 0x50, 0x0e, 0xb2, 0x87,
+ 0xec, 0x63, 0xc4, 0x99, 0xa3, 0x66, 0xee, 0x3b, 0x7b, 0xbe, 0xf6, 0xd0, 0x18, 0x3a, 0xe8, 0x25,
+ 0x50, 0xec, 0x62, 0x6a, 0xd4, 0xe9, 0x3f, 0x79, 0xba, 0x43, 0x45, 0x40, 0xca, 0x37, 0xe8, 0x97,
+ 0x69, 0x3d, 0xff, 0x23, 0x39, 0x12, 0x3a, 0x93, 0xf6, 0xfc, 0x1f, 0x52, 0xfe, 0x44, 0x6e, 0x80,
+ 0x99, 0x46, 0xa5, 0x5b, 0xbb, 0x96, 0x3f, 0xa6, 0xf8, 0x02, 0x5d, 0x44, 0x2b, 0x88, 0x2f, 0x80,
+ 0x1f, 0xd2, 0x9e, 0x67, 0x64, 0xa4, 0x82, 0x3e, 0x9f, 0xf4, 0x79, 0xc6, 0xe4, 0xe2, 0xb3, 0xc7,
+ 0xe4, 0xa7, 0x49, 0xcb, 0x3a, 0x47, 0x5c, 0x3b, 0x33, 0xf4, 0x1a, 0x1d, 0xb9, 0xb1, 0x10, 0xd6,
+ 0x8e, 0xae, 0xb1, 0x0c, 0x2c, 0x3f, 0x7b, 0x60, 0x7e, 0xf1, 0xbb, 0x41, 0xa1, 0x02, 0x2f, 0xee,
+ 0x6d, 0x6b, 0x77, 0x81, 0xe9, 0x96, 0x0b, 0x61, 0xd5, 0xde, 0x72, 0x90, 0x74, 0x7d, 0xf4, 0x3f,
+ 0x80, 0x84, 0x3e, 0x21, 0x3c, 0x76, 0xa0, 0xd9, 0x89, 0x4e, 0x37, 0x05, 0x8f, 0xda, 0xcb, 0x25,
+ 0x90, 0x6f, 0xfa, 0xa6, 0xaf, 0xcd, 0x84, 0xd8, 0x6a, 0x0f, 0xb1, 0x58, 0xdc, 0xc5, 0x63, 0x71,
+ 0x13, 0x27, 0x0b, 0xcc, 0xc1, 0x22, 0xfa, 0x3e, 0x06, 0x00, 0x0d, 0x4c, 0x3f, 0xe0, 0x39, 0x36,
+ 0xca, 0x11, 0x1c, 0xc0, 0x0b, 0x9e, 0xb5, 0x57, 0x85, 0xe2, 0xbe, 0x87, 0x13, 0xf7, 0xe3, 0xc5,
+ 0x8a, 0x98, 0xc0, 0x4a, 0x9b, 0x04, 0x66, 0x90, 0x68, 0x57, 0xa1, 0xd9, 0xf1, 0xb4, 0xef, 0x8a,
+ 0x94, 0x3f, 0x46, 0xcc, 0xda, 0x87, 0x85, 0x43, 0x45, 0x92, 0x5a, 0x85, 0xc4, 0xe3, 0xfd, 0x05,
+ 0x82, 0x50, 0x19, 0x12, 0x1f, 0x2a, 0xe3, 0x36, 0x90, 0xb7, 0xec, 0x2d, 0x87, 0x7a, 0xaf, 0x3d,
+ 0x3a, 0x86, 0x36, 0xd2, 0x09, 0x03, 0x67, 0x14, 0x8c, 0x23, 0x99, 0xcc, 0xd6, 0x44, 0xae, 0x64,
+ 0xcb, 0xa3, 0xd2, 0xb5, 0xff, 0x63, 0xa8, 0xb0, 0x55, 0x15, 0xe4, 0x7b, 0xa6, 0xbf, 0x43, 0x8b,
+ 0xc6, 0xff, 0x91, 0x8d, 0xbc, 0x67, 0x9b, 0xb6, 0x63, 0xef, 0xef, 0x5a, 0xcf, 0x09, 0x6f, 0x7e,
+ 0xe5, 0xd2, 0x10, 0xe7, 0xdb, 0xd0, 0x86, 0xae, 0xe9, 0xc3, 0xe6, 0xe5, 0x6d, 0x3c, 0xc7, 0x9a,
+ 0x36, 0xd8, 0xa4, 0xd4, 0xfa, 0x8f, 0x38, 0x8e, 0xd7, 0xff, 0x2d, 0xab, 0x0b, 0x71, 0x1c, 0x21,
+ 0xaa, 0xff, 0xc1, 0x73, 0x2a, 0xfd, 0x1f, 0x50, 0x44, 0xf6, 0x68, 0xfc, 0xab, 0x04, 0xe6, 0x9a,
+ 0x48, 0xe1, 0x9a, 0x7b, 0xbb, 0xbb, 0xa6, 0xbb, 0xaf, 0xdd, 0x10, 0xa1, 0xc2, 0xa8, 0x66, 0x8e,
+ 0x53, 0x4d, 0xed, 0xd7, 0x85, 0x2f, 0x3d, 0xa6, 0x4d, 0x9b, 0x29, 0x21, 0x75, 0x3b, 0x78, 0x12,
+ 0x28, 0x20, 0xf5, 0x0e, 0xfc, 0xf9, 0x12, 0x1b, 0x02, 0xc9, 0x29, 0x18, 0x6f, 0x69, 0x28, 0x6f,
+ 0x13, 0x88, 0xf5, 0x20, 0x81, 0xe3, 0x4d, 0xdf, 0x6c, 0x5f, 0x5a, 0x71, 0x5c, 0x67, 0xcf, 0xb7,
+ 0x6c, 0xe8, 0x69, 0x8f, 0x89, 0x10, 0x08, 0xf4, 0x3f, 0x17, 0xe9, 0xbf, 0xf6, 0xef, 0x39, 0xd1,
+ 0x51, 0x34, 0xec, 0x56, 0x59, 0xf2, 0x31, 0xe1, 0x93, 0xc4, 0xc6, 0x45, 0x11, 0x8a, 0xd9, 0x0b,
+ 0xed, 0x4d, 0x32, 0x50, 0xf4, 0x07, 0x7b, 0x8e, 0xeb, 0xd7, 0x9c, 0xb6, 0xd9, 0xf5, 0x7c, 0xc7,
+ 0x85, 0x5a, 0x23, 0x51, 0x6a, 0xa8, 0x87, 0xe9, 0x38, 0xed, 0x68, 0x70, 0xa4, 0x4f, 0xac, 0xda,
+ 0xc9, 0xbc, 0x8e, 0x7f, 0x4c, 0x78, 0x97, 0x91, 0x48, 0xa5, 0x9f, 0xa3, 0x18, 0x3d, 0x1f, 0xd4,
+ 0xa5, 0xa5, 0x73, 0xc5, 0x17, 0xdb, 0x79, 0x14, 0x62, 0x6a, 0x02, 0x4b, 0xe5, 0x12, 0x98, 0x6f,
+ 0xee, 0x5d, 0x0c, 0x89, 0x78, 0xac, 0x11, 0xf2, 0x5a, 0xe1, 0x18, 0x09, 0x54, 0xf1, 0x58, 0x42,
+ 0x31, 0xf2, 0xbd, 0x11, 0xcc, 0x7b, 0x6c, 0x36, 0x8a, 0x37, 0x9f, 0x28, 0x18, 0x1b, 0x61, 0x78,
+ 0xa9, 0xd9, 0x0b, 0xf0, 0x7d, 0x12, 0x98, 0x6f, 0xf4, 0xa0, 0x0d, 0x3b, 0xc4, 0xc7, 0x8e, 0x13,
+ 0xe0, 0xcb, 0x53, 0x0a, 0x90, 0x23, 0x14, 0x23, 0xc0, 0xc8, 0x1f, 0xb6, 0x12, 0x08, 0x2f, 0x4a,
+ 0x48, 0x25, 0xb8, 0xa4, 0xd2, 0xb2, 0x17, 0xdc, 0x97, 0x24, 0x30, 0x6b, 0xec, 0xd9, 0xeb, 0xae,
+ 0x83, 0x46, 0x63, 0x57, 0xbb, 0x3b, 0xea, 0x20, 0x6e, 0x05, 0x27, 0x3a, 0x7b, 0x2e, 0x5e, 0x7f,
+ 0xaa, 0xda, 0x4d, 0xd8, 0x76, 0xec, 0x8e, 0x87, 0xeb, 0x51, 0x30, 0x0e, 0xbe, 0xb8, 0x33, 0xff,
+ 0x82, 0xbf, 0x94, 0x73, 0xda, 0x8b, 0x84, 0x03, 0xb1, 0x90, 0xca, 0x33, 0x45, 0x8b, 0xf7, 0x04,
+ 0x82, 0xe1, 0x56, 0x86, 0x95, 0x90, 0xbd, 0x70, 0x3f, 0x2f, 0x01, 0xb5, 0xd4, 0x6e, 0x3b, 0x7b,
+ 0xb6, 0xdf, 0x84, 0x5d, 0xd8, 0xf6, 0x5b, 0xae, 0xd9, 0x86, 0xac, 0xfd, 0xac, 0x00, 0xb9, 0x63,
+ 0xb9, 0xb4, 0x0f, 0x46, 0x7f, 0xa9, 0x1c, 0x5f, 0x2e, 0xbc, 0xe3, 0x48, 0x6a, 0x79, 0xb0, 0x94,
+ 0x14, 0xe2, 0x14, 0xdb, 0x57, 0x14, 0x2c, 0x28, 0x7b, 0xa9, 0x7e, 0x52, 0x02, 0x33, 0x41, 0x8f,
+ 0xbd, 0x2d, 0x22, 0xcc, 0x9f, 0x4e, 0x39, 0x19, 0x09, 0x89, 0xa7, 0x90, 0xe1, 0xbb, 0x52, 0xcc,
+ 0x2a, 0xe2, 0xe8, 0xa7, 0x13, 0x5d, 0x29, 0xbd, 0xe8, 0xd0, 0x63, 0xbd, 0xb1, 0xb9, 0xdc, 0xa8,
+ 0x55, 0x74, 0x43, 0x91, 0xb5, 0x2f, 0x4b, 0x20, 0xbf, 0x6e, 0xd9, 0xdb, 0x6c, 0xbc, 0xac, 0x93,
+ 0xc8, 0x8e, 0xec, 0xc0, 0x07, 0x69, 0x4b, 0x27, 0x0f, 0xea, 0xed, 0xe0, 0xa4, 0xbd, 0xb7, 0x7b,
+ 0x11, 0xba, 0x8d, 0x2d, 0x3c, 0xca, 0x7a, 0x2d, 0xa7, 0x09, 0x6d, 0x62, 0x84, 0x16, 0x8c, 0x81,
+ 0xef, 0x78, 0x13, 0x4c, 0x60, 0xf2, 0x80, 0x38, 0x89, 0x91, 0x78, 0xc8, 0x94, 0xc4, 0x30, 0x95,
+ 0x6a, 0xda, 0x30, 0x80, 0x78, 0xf6, 0x9a, 0xfa, 0x9b, 0x05, 0x70, 0x75, 0xc9, 0xde, 0xc7, 0x36,
+ 0x05, 0xe9, 0xe0, 0xcb, 0x3b, 0xa6, 0xbd, 0x0d, 0xf1, 0x00, 0x11, 0x4a, 0x9c, 0x0d, 0x20, 0x9f,
+ 0xe3, 0x03, 0xc8, 0xab, 0x06, 0x98, 0x72, 0xdc, 0x0e, 0x74, 0x97, 0xf6, 0x31, 0x4f, 0xfd, 0xcb,
+ 0xce, 0xb4, 0x4d, 0x0e, 0x2a, 0x62, 0x91, 0x92, 0x5f, 0x6c, 0x90, 0xef, 0x8d, 0x80, 0xd0, 0xd9,
+ 0x5b, 0xc1, 0x14, 0x4d, 0x53, 0xe7, 0xc0, 0x74, 0xc3, 0xa8, 0xe8, 0xc6, 0x66, 0xb5, 0xa2, 0x1c,
+ 0x53, 0xaf, 0x02, 0xc7, 0xab, 0x2d, 0xdd, 0x28, 0xb5, 0xaa, 0x8d, 0xfa, 0x26, 0x4e, 0x57, 0x72,
+ 0xda, 0xf3, 0xf3, 0xa2, 0x9e, 0xbd, 0xc9, 0xcc, 0x0c, 0x82, 0xd5, 0x00, 0x53, 0x6d, 0x92, 0x01,
+ 0x0f, 0xa1, 0xb3, 0xa9, 0x6a, 0x47, 0x09, 0x92, 0x04, 0x23, 0x20, 0xa4, 0x9e, 0x01, 0xe0, 0x8a,
+ 0xeb, 0xd8, 0xdb, 0xd1, 0x99, 0xb6, 0x69, 0x83, 0x49, 0xd1, 0x1e, 0xca, 0x81, 0x22, 0xf9, 0x06,
+ 0x5f, 0x98, 0x81, 0xff, 0x45, 0x82, 0x0f, 0x9e, 0x91, 0xc5, 0x8b, 0xe5, 0x15, 0x4d, 0xb4, 0xe8,
+ 0x23, 0xd2, 0x45, 0x22, 0x03, 0x62, 0x09, 0xd3, 0xaa, 0xdc, 0x06, 0x8a, 0xe4, 0x5b, 0xea, 0x75,
+ 0x10, 0x1f, 0xfc, 0x92, 0x64, 0x13, 0xf4, 0x53, 0x16, 0x97, 0x69, 0xf6, 0xda, 0xfc, 0x11, 0x09,
+ 0x4c, 0xd7, 0xa1, 0x5f, 0xde, 0x81, 0xed, 0x4b, 0xda, 0xe3, 0xf8, 0x05, 0xd0, 0xae, 0x05, 0x6d,
+ 0xff, 0xc2, 0x6e, 0x37, 0x5c, 0x00, 0x0d, 0x12, 0xb4, 0x17, 0xb2, 0x9d, 0xef, 0x33, 0x79, 0xfd,
+ 0xb9, 0x65, 0x40, 0x5d, 0x83, 0x12, 0x62, 0x54, 0xe6, 0x14, 0x28, 0xba, 0xd0, 0xdb, 0xeb, 0x06,
+ 0x8b, 0x68, 0xf4, 0x49, 0x7b, 0x38, 0x14, 0x67, 0x99, 0x13, 0xe7, 0x6d, 0xe2, 0x45, 0x4c, 0x20,
+ 0x9a, 0x66, 0x1e, 0x4c, 0x55, 0x6d, 0xcb, 0xb7, 0xcc, 0xae, 0xf6, 0xa2, 0x3c, 0x98, 0x6f, 0x42,
+ 0x7f, 0xdd, 0x74, 0xcd, 0x5d, 0xe8, 0x43, 0xd7, 0xd3, 0xbe, 0xc9, 0xf7, 0x09, 0xbd, 0xae, 0xe9,
+ 0x6f, 0x39, 0xee, 0x6e, 0xa0, 0x9a, 0xc1, 0x33, 0x52, 0xcd, 0xcb, 0xd0, 0xf5, 0x22, 0xbe, 0x82,
+ 0x47, 0xf4, 0xe6, 0x8a, 0xe3, 0x5e, 0x42, 0x83, 0x20, 0x9d, 0xa6, 0xd1, 0x47, 0x44, 0xaf, 0xeb,
+ 0x6c, 0xd7, 0xe0, 0x65, 0x18, 0x04, 0xeb, 0x0a, 0x9f, 0xd1, 0x5c, 0xa0, 0xe3, 0xd4, 0x1d, 0x1f,
+ 0x75, 0xda, 0x35, 0x67, 0x9b, 0x44, 0x33, 0x9d, 0x36, 0xf8, 0xc4, 0x28, 0x97, 0x79, 0x19, 0xe2,
+ 0x5c, 0x45, 0x36, 0x17, 0x4d, 0x54, 0x17, 0x81, 0x1a, 0x7e, 0xd6, 0x82, 0x5d, 0xb8, 0x0b, 0x7d,
+ 0x77, 0x1f, 0x5f, 0x5a, 0x30, 0x6d, 0x0c, 0x78, 0x43, 0x07, 0x68, 0xf1, 0xc9, 0x3a, 0x95, 0xde,
+ 0x22, 0x27, 0xb9, 0x43, 0x4d, 0xd6, 0x45, 0x28, 0x4e, 0xe4, 0x52, 0x26, 0x19, 0x59, 0x33, 0xaf,
+ 0x90, 0x41, 0x1e, 0x0f, 0x9e, 0x6f, 0xce, 0x71, 0x2b, 0x4c, 0xbb, 0xd0, 0xf3, 0xcc, 0x6d, 0x18,
+ 0xac, 0x30, 0xd1, 0x47, 0xf5, 0x0e, 0x50, 0xe8, 0x62, 0x4c, 0xc9, 0xe0, 0x70, 0x03, 0x57, 0x33,
+ 0x64, 0x60, 0x20, 0x5a, 0xe1, 0x48, 0x80, 0xe1, 0x36, 0xc8, 0x17, 0x67, 0xef, 0x05, 0x05, 0x02,
+ 0xff, 0x0c, 0x28, 0x54, 0xf4, 0xa5, 0x8d, 0x15, 0xe5, 0x18, 0xfa, 0x1b, 0xf0, 0x37, 0x03, 0x0a,
+ 0xcb, 0xa5, 0x56, 0xa9, 0xa6, 0x48, 0xa8, 0x1e, 0xd5, 0xfa, 0x72, 0x43, 0x91, 0x51, 0xe2, 0x7a,
+ 0xa9, 0x5e, 0x2d, 0x2b, 0x79, 0x75, 0x16, 0x4c, 0x9d, 0x2f, 0x19, 0xf5, 0x6a, 0x7d, 0x45, 0x29,
+ 0x68, 0x5f, 0x65, 0xf1, 0xbb, 0x93, 0xc7, 0xef, 0xc6, 0x38, 0x9e, 0x06, 0x41, 0xf6, 0xf3, 0x21,
+ 0x64, 0x77, 0x73, 0x90, 0x7d, 0xb7, 0x08, 0x91, 0x09, 0xb8, 0x33, 0x15, 0xc1, 0xd4, 0xba, 0xeb,
+ 0xb4, 0xa1, 0xe7, 0x69, 0x3f, 0x23, 0x81, 0x62, 0xd9, 0xb4, 0xdb, 0xb0, 0xab, 0x5d, 0x13, 0x41,
+ 0x45, 0x5c, 0x45, 0x73, 0x81, 0xab, 0xa8, 0xf6, 0xf5, 0x9c, 0x68, 0xef, 0x47, 0xe9, 0x2e, 0x12,
+ 0x9a, 0x31, 0xf2, 0x11, 0xeb, 0xe5, 0x12, 0x49, 0x4d, 0xe0, 0xe2, 0x16, 0x09, 0xcc, 0xd0, 0xd5,
+ 0x80, 0x8b, 0x90, 0x9d, 0x87, 0x7f, 0x33, 0x27, 0x3a, 0x39, 0x0c, 0x6a, 0x10, 0x92, 0x89, 0x91,
+ 0x87, 0xd8, 0x44, 0x70, 0x18, 0xb5, 0x09, 0x6c, 0x1e, 0x4a, 0x60, 0x76, 0xc3, 0xf6, 0x06, 0x09,
+ 0x45, 0x3c, 0xca, 0x7b, 0x50, 0x0d, 0x86, 0xd0, 0xa1, 0xa2, 0xbc, 0x0f, 0xa7, 0x97, 0xbd, 0x60,
+ 0xbe, 0x99, 0x03, 0x27, 0x57, 0xa0, 0x0d, 0x5d, 0xab, 0x4d, 0x6a, 0x10, 0x48, 0xe2, 0x6e, 0x5e,
+ 0x12, 0x8f, 0xe3, 0x38, 0x1f, 0xf4, 0x05, 0x2f, 0x81, 0x57, 0x87, 0x12, 0x78, 0x26, 0x27, 0x81,
+ 0x5b, 0x05, 0xe9, 0x4c, 0xe0, 0xb6, 0xee, 0x19, 0x30, 0x57, 0x77, 0x7c, 0x6b, 0xcb, 0x6a, 0x13,
+ 0x1f, 0xb4, 0x9f, 0x93, 0x41, 0xbe, 0x66, 0x79, 0xbe, 0x56, 0x8a, 0xba, 0x93, 0xeb, 0xc1, 0xac,
+ 0x65, 0xb7, 0xbb, 0x7b, 0x1d, 0x68, 0x40, 0x93, 0xf4, 0x2b, 0xd3, 0x06, 0x9b, 0x14, 0x6d, 0xed,
+ 0x23, 0xb6, 0xe4, 0x60, 0x6b, 0xff, 0xb3, 0xc2, 0xcb, 0x30, 0x2c, 0x0b, 0x38, 0xdc, 0x61, 0x8c,
+ 0xdd, 0x55, 0x02, 0xf3, 0x36, 0x93, 0x35, 0x30, 0xd8, 0xfb, 0xc3, 0xdd, 0xb3, 0xe4, 0x0c, 0xfe,
+ 0x0b, 0xed, 0x03, 0x42, 0x8d, 0x75, 0x18, 0x43, 0xe9, 0x90, 0x59, 0x1e, 0x61, 0x92, 0xac, 0x82,
+ 0x85, 0x6a, 0xbd, 0xa5, 0x1b, 0xf5, 0x52, 0x8d, 0x66, 0x91, 0xb5, 0x7f, 0x95, 0x40, 0xc1, 0x80,
+ 0xbd, 0xee, 0x3e, 0x1b, 0xcf, 0x98, 0x3a, 0x8a, 0xe7, 0x42, 0x47, 0x71, 0x75, 0x19, 0x00, 0xb3,
+ 0x8d, 0x0a, 0xc6, 0x17, 0x3e, 0x49, 0x03, 0xa3, 0x64, 0x72, 0x15, 0x2c, 0x85, 0xb9, 0x0d, 0xe6,
+ 0x4b, 0xed, 0xc5, 0xc2, 0x3b, 0x47, 0x1c, 0x35, 0xcc, 0x61, 0x4c, 0x9f, 0xf0, 0x41, 0xa1, 0xcd,
+ 0x9e, 0xa1, 0xe4, 0x8e, 0x46, 0xfc, 0x5f, 0x91, 0x40, 0xbe, 0x85, 0x7a, 0x4b, 0xa6, 0xe3, 0xfc,
+ 0xcc, 0x68, 0x3a, 0x8e, 0xc8, 0xc4, 0xe8, 0xf8, 0x3d, 0x60, 0x8e, 0xd5, 0x58, 0xea, 0x2a, 0x91,
+ 0xa8, 0xe2, 0xdc, 0x07, 0xa3, 0x68, 0xf8, 0x00, 0x76, 0x8e, 0x46, 0xc4, 0x9f, 0x7a, 0x3c, 0x00,
+ 0x6b, 0x70, 0xf7, 0x22, 0x74, 0xbd, 0x1d, 0xab, 0xa7, 0xfd, 0x95, 0x0c, 0x66, 0x56, 0xa0, 0xdf,
+ 0xf4, 0x4d, 0x7f, 0xcf, 0xeb, 0xdb, 0xee, 0xb4, 0x9d, 0xb2, 0xd9, 0xde, 0x81, 0xb4, 0x3b, 0x0a,
+ 0x1e, 0xb5, 0xf7, 0xc8, 0xa2, 0xfe, 0x44, 0x51, 0x39, 0x8b, 0x61, 0x19, 0x31, 0x98, 0x3c, 0x01,
+ 0xe4, 0x3b, 0xa6, 0x6f, 0x52, 0x2c, 0xae, 0xe9, 0xc3, 0x22, 0x22, 0x64, 0xe0, 0x6c, 0xda, 0x3b,
+ 0x24, 0x11, 0x87, 0x22, 0x81, 0xf2, 0xd3, 0x81, 0xf0, 0x81, 0xdc, 0x08, 0x28, 0x9c, 0x00, 0xf3,
+ 0xf5, 0x46, 0x6b, 0xb3, 0xd6, 0x58, 0x59, 0xd1, 0x51, 0xaa, 0x22, 0xab, 0xa7, 0x80, 0xba, 0x5e,
+ 0xba, 0xb0, 0xa6, 0xd7, 0x5b, 0x9b, 0xf5, 0x46, 0x45, 0xa7, 0x5f, 0xe6, 0xd5, 0xe3, 0x60, 0xb6,
+ 0x5c, 0x2a, 0xaf, 0x06, 0x09, 0x05, 0xf5, 0x34, 0x38, 0xb9, 0xa6, 0xaf, 0x2d, 0xe9, 0x46, 0x73,
+ 0xb5, 0xba, 0xbe, 0x89, 0xc8, 0x2c, 0x37, 0x36, 0xea, 0x15, 0xa5, 0xa8, 0x6a, 0xe0, 0x14, 0xf3,
+ 0xe6, 0xbc, 0xd1, 0xa8, 0xaf, 0x6c, 0x36, 0x5b, 0xa5, 0x96, 0xae, 0x4c, 0xa9, 0x57, 0x81, 0xe3,
+ 0xe5, 0x52, 0x1d, 0x67, 0x2f, 0x37, 0xea, 0x75, 0xbd, 0xdc, 0x52, 0xa6, 0xb5, 0x7f, 0xcf, 0x83,
+ 0xd9, 0xaa, 0x57, 0x37, 0x77, 0xe1, 0x39, 0xb3, 0x6b, 0x75, 0xb4, 0x17, 0x31, 0x33, 0x8f, 0x1b,
+ 0xc1, 0xbc, 0x4b, 0xfe, 0xc2, 0x4e, 0xcb, 0x82, 0x04, 0xcd, 0x79, 0x83, 0x4f, 0x44, 0x73, 0x72,
+ 0x1b, 0x13, 0x08, 0xe6, 0xe4, 0xe4, 0x49, 0x5d, 0x02, 0x80, 0xfc, 0x6b, 0x45, 0x57, 0x8f, 0x9e,
+ 0xed, 0x6f, 0x4d, 0xe6, 0x2e, 0xf4, 0xa0, 0x7b, 0xd9, 0x6a, 0xc3, 0x20, 0xa7, 0xc1, 0x7c, 0xa5,
+ 0xfd, 0xa9, 0x2c, 0xba, 0xbf, 0xc8, 0x80, 0xca, 0x54, 0x27, 0xa6, 0x37, 0xfc, 0x11, 0x59, 0x64,
+ 0x77, 0x50, 0x88, 0x64, 0x3a, 0x4d, 0x79, 0xa9, 0x34, 0xda, 0xb2, 0x6d, 0xab, 0xd1, 0xd8, 0x6c,
+ 0xae, 0x36, 0x8c, 0x96, 0x22, 0xab, 0x73, 0x60, 0x1a, 0x3d, 0xd6, 0x1a, 0xf5, 0x15, 0x25, 0xaf,
+ 0x5e, 0x0d, 0x4e, 0xac, 0x96, 0x9a, 0x9b, 0xd5, 0xfa, 0xb9, 0x52, 0xad, 0x5a, 0xd9, 0x2c, 0xaf,
+ 0x96, 0x8c, 0xa6, 0x52, 0x50, 0xaf, 0x01, 0x57, 0xb7, 0xaa, 0xba, 0xb1, 0xb9, 0xac, 0x97, 0x5a,
+ 0x1b, 0x86, 0xde, 0xdc, 0xac, 0x37, 0x36, 0xeb, 0xa5, 0x35, 0x5d, 0x29, 0xa2, 0xe6, 0x8f, 0x5f,
+ 0x45, 0x6a, 0x33, 0x75, 0x50, 0x19, 0xa7, 0x63, 0x94, 0x71, 0xa6, 0x5f, 0x19, 0x01, 0xab, 0x56,
+ 0x86, 0xde, 0xd4, 0x8d, 0x73, 0xba, 0x32, 0x3b, 0x48, 0xd7, 0xe6, 0xd4, 0x93, 0x40, 0x41, 0x3c,
+ 0x6c, 0x56, 0x9b, 0x41, 0xce, 0x8a, 0x32, 0xaf, 0x7d, 0xb2, 0x08, 0x4e, 0x19, 0x70, 0xdb, 0xf2,
+ 0x7c, 0xe8, 0xae, 0x9b, 0xfb, 0xbb, 0xd0, 0xf6, 0x83, 0x4e, 0xfe, 0x9f, 0x52, 0x2b, 0xe3, 0x1a,
+ 0x98, 0xef, 0x11, 0x1a, 0x6b, 0xd0, 0xdf, 0x71, 0x3a, 0x74, 0x14, 0x7e, 0x5c, 0x6c, 0xcf, 0xb1,
+ 0xb8, 0xce, 0x66, 0x37, 0xf8, 0xaf, 0x19, 0xdd, 0x96, 0x13, 0x74, 0x3b, 0x3f, 0x8a, 0x6e, 0xab,
+ 0xd7, 0x82, 0x99, 0x3d, 0x0f, 0xba, 0xfa, 0xae, 0x69, 0x75, 0x83, 0xab, 0x23, 0xc3, 0x04, 0xed,
+ 0x9d, 0x79, 0xd1, 0x13, 0x2b, 0x4c, 0x5d, 0x06, 0x8b, 0x31, 0xa6, 0x6f, 0x3d, 0x03, 0x00, 0xad,
+ 0xec, 0x86, 0xdb, 0xa5, 0xca, 0xca, 0xa4, 0x20, 0xfe, 0x2e, 0x5a, 0xdd, 0xae, 0x65, 0x6f, 0x87,
+ 0xfb, 0xfe, 0x51, 0x82, 0xf6, 0x52, 0x59, 0xe4, 0x04, 0x4b, 0x5a, 0xde, 0xd2, 0xb5, 0xa6, 0x17,
+ 0x4b, 0x13, 0xee, 0x77, 0x0f, 0x36, 0x9d, 0xa2, 0xaa, 0x80, 0x39, 0x9c, 0x46, 0x5b, 0xa0, 0x32,
+ 0x85, 0xfa, 0xe0, 0x80, 0xdc, 0x9a, 0xde, 0x5a, 0x6d, 0x54, 0xc2, 0x77, 0xd3, 0x88, 0x24, 0x62,
+ 0xa6, 0x54, 0xbf, 0x80, 0x5b, 0xe3, 0x8c, 0xfa, 0x18, 0x70, 0x0d, 0xd3, 0x61, 0x97, 0x6a, 0x86,
+ 0x5e, 0xaa, 0x5c, 0xd8, 0xd4, 0xef, 0xaf, 0x36, 0x5b, 0x4d, 0xbe, 0x71, 0x05, 0xed, 0x68, 0x16,
+ 0xf1, 0xab, 0xaf, 0x95, 0xaa, 0x35, 0xda, 0xbf, 0x2f, 0x37, 0x8c, 0xb5, 0x52, 0x4b, 0x99, 0xd3,
+ 0x5e, 0x21, 0x03, 0x65, 0x05, 0xfa, 0xeb, 0x8e, 0xeb, 0x9b, 0xdd, 0x9a, 0x65, 0x5f, 0xda, 0x70,
+ 0xbb, 0xdc, 0x64, 0x53, 0x38, 0x4c, 0x07, 0x3f, 0x44, 0x72, 0x04, 0xe3, 0x77, 0xc4, 0x7b, 0x38,
+ 0x5b, 0xa4, 0x4c, 0x51, 0x82, 0xf6, 0x5c, 0x49, 0x64, 0xb9, 0x5b, 0xbc, 0xd4, 0x74, 0x7a, 0xf2,
+ 0xbc, 0x49, 0x8f, 0xcf, 0x03, 0x50, 0x2b, 0x6a, 0x2f, 0xc8, 0x83, 0xe9, 0x65, 0xcb, 0x36, 0xbb,
+ 0xd6, 0x73, 0xb8, 0xe8, 0x98, 0x51, 0x1f, 0x93, 0x4b, 0xe8, 0x63, 0xa4, 0x91, 0xc6, 0xcf, 0x9f,
+ 0x92, 0x45, 0x97, 0x17, 0x18, 0xd9, 0x07, 0x4c, 0xc6, 0x0c, 0x9e, 0xbf, 0x2a, 0x89, 0x2c, 0x2f,
+ 0x0c, 0xa7, 0x97, 0x0e, 0xc3, 0x4f, 0x7f, 0x67, 0xd8, 0x58, 0x7d, 0xed, 0x7b, 0x7a, 0x90, 0x2a,
+ 0xcc, 0x68, 0xbf, 0x27, 0x03, 0x6d, 0x05, 0xfa, 0xe7, 0xa0, 0x1b, 0x4e, 0x05, 0x70, 0xaf, 0x4f,
+ 0xed, 0x6d, 0xa6, 0xc9, 0xbe, 0x99, 0x05, 0xf0, 0x3c, 0x0f, 0x60, 0x29, 0xa1, 0xf1, 0xc4, 0x90,
+ 0x8e, 0x69, 0xbc, 0x55, 0x50, 0xf4, 0xf0, 0x7b, 0xaa, 0x66, 0x4f, 0x8a, 0x1f, 0x2e, 0x31, 0x31,
+ 0x96, 0x3a, 0x21, 0x6c, 0x50, 0x02, 0xda, 0xb7, 0xc2, 0x49, 0xd0, 0xf7, 0x71, 0xda, 0xb1, 0x7c,
+ 0x68, 0x66, 0xd3, 0xe9, 0x8b, 0x9b, 0xad, 0xba, 0x0c, 0xb2, 0x6f, 0xb4, 0x5f, 0x2d, 0x80, 0x93,
+ 0x83, 0xaa, 0xa3, 0xfd, 0x72, 0x8e, 0xdb, 0x61, 0x87, 0x78, 0xc8, 0xcf, 0xd1, 0x0d, 0x44, 0xf4,
+ 0xa0, 0x3e, 0x05, 0x5c, 0x1d, 0x2e, 0xc3, 0xb5, 0x9c, 0x3a, 0xbc, 0xe2, 0x75, 0xa1, 0xef, 0x43,
+ 0x17, 0x57, 0x6d, 0xda, 0x18, 0xfc, 0x52, 0x7d, 0x1a, 0x78, 0x94, 0x65, 0x7b, 0x56, 0x07, 0xba,
+ 0x2d, 0xab, 0xe7, 0x95, 0xec, 0x4e, 0x6b, 0xcf, 0x77, 0x5c, 0xcb, 0xa4, 0x17, 0x1d, 0x4e, 0x1b,
+ 0x71, 0xaf, 0xd5, 0x5b, 0x80, 0x62, 0x79, 0x0d, 0xfb, 0xa2, 0x63, 0xba, 0x1d, 0xcb, 0xde, 0xae,
+ 0x59, 0x9e, 0x4f, 0x3d, 0x80, 0x0f, 0xa4, 0x6b, 0x7f, 0x2d, 0x8b, 0x1e, 0xa6, 0x1b, 0x02, 0x6b,
+ 0x4c, 0x87, 0xf2, 0x42, 0x59, 0xe4, 0x78, 0x5c, 0x3a, 0xda, 0xe9, 0x94, 0xe5, 0xf9, 0x93, 0x36,
+ 0x24, 0x06, 0x8f, 0xe0, 0xb8, 0x6b, 0x21, 0xe9, 0x81, 0x21, 0x70, 0x4e, 0x37, 0xaa, 0xcb, 0x55,
+ 0x1d, 0x99, 0x15, 0x57, 0x83, 0x13, 0xd1, 0xbb, 0xca, 0x85, 0xcd, 0xa6, 0x5e, 0x6f, 0x29, 0xd3,
+ 0xa8, 0x9f, 0x22, 0xc9, 0xcb, 0xa5, 0x6a, 0x4d, 0xaf, 0x6c, 0xb6, 0x1a, 0xe8, 0x4d, 0x65, 0x34,
+ 0xd3, 0x42, 0x7b, 0x28, 0x0f, 0x8e, 0x63, 0xd9, 0xee, 0x63, 0xa9, 0x22, 0xa1, 0xf4, 0xf9, 0xda,
+ 0x86, 0x00, 0xcd, 0x10, 0xf1, 0x6a, 0xbf, 0x2b, 0x7c, 0x8f, 0x23, 0x03, 0x61, 0x5f, 0x19, 0x31,
+ 0x9a, 0xf1, 0x4d, 0x49, 0x24, 0x42, 0x85, 0x30, 0xd9, 0x74, 0x4a, 0xf1, 0xcf, 0x93, 0x1e, 0x71,
+ 0xe2, 0xc1, 0xc7, 0x56, 0x66, 0x19, 0x7f, 0x7c, 0xff, 0x7a, 0xd5, 0xc0, 0xea, 0xb0, 0x00, 0x00,
+ 0x4e, 0xc1, 0x1a, 0x44, 0xf4, 0x60, 0xe0, 0x78, 0x15, 0xa7, 0x07, 0xa5, 0x72, 0xab, 0x7a, 0x4e,
+ 0x8f, 0xd3, 0x83, 0xcf, 0xc9, 0x60, 0x7a, 0x05, 0xfa, 0x68, 0x4e, 0xe5, 0x69, 0x4f, 0x17, 0x58,
+ 0xff, 0x41, 0x66, 0x0c, 0xbe, 0xf8, 0x3e, 0x5c, 0x06, 0x20, 0x4f, 0xda, 0x0f, 0x8f, 0x62, 0x82,
+ 0x04, 0x45, 0xc7, 0x8c, 0x57, 0xdf, 0x0b, 0x0a, 0x3e, 0x7a, 0x4d, 0x97, 0xa1, 0xbf, 0x2b, 0x76,
+ 0xb8, 0x42, 0x44, 0x2a, 0xa6, 0x6f, 0x1a, 0x24, 0x3f, 0x33, 0x3a, 0x09, 0xda, 0x2e, 0x31, 0x8c,
+ 0x7c, 0x27, 0xda, 0x9f, 0x5f, 0x95, 0xc1, 0xd5, 0xa4, 0x7d, 0x94, 0x7a, 0xbd, 0xa6, 0xef, 0xb8,
+ 0xd0, 0x80, 0x6d, 0x68, 0xf5, 0xfc, 0xbe, 0xf5, 0x3d, 0x97, 0xa4, 0x06, 0x9b, 0xcd, 0xf4, 0x51,
+ 0x7b, 0x83, 0x2c, 0x1a, 0xe1, 0xf7, 0x40, 0x7b, 0xec, 0x2b, 0x2f, 0xa6, 0xb1, 0x7f, 0x42, 0x12,
+ 0x89, 0xd9, 0x9b, 0x92, 0x78, 0x3a, 0xa0, 0x3e, 0x7a, 0x04, 0x40, 0x05, 0x2b, 0x37, 0x86, 0x5e,
+ 0xd6, 0xab, 0xeb, 0x68, 0x10, 0xb8, 0x0e, 0x3c, 0x7a, 0x7d, 0xc3, 0x28, 0xaf, 0x96, 0x9a, 0xfa,
+ 0xa6, 0xa1, 0xaf, 0x54, 0x9b, 0x2d, 0xea, 0x94, 0x45, 0xbe, 0x9a, 0x52, 0xaf, 0x05, 0xa7, 0x9b,
+ 0x1b, 0x4b, 0xcd, 0xb2, 0x51, 0x5d, 0xc7, 0xe9, 0x86, 0x5e, 0xd7, 0xcf, 0xd3, 0xb7, 0xd3, 0xda,
+ 0x87, 0x15, 0x30, 0x8b, 0x26, 0x00, 0x4d, 0x32, 0x2f, 0xd0, 0xfe, 0x36, 0x0f, 0x66, 0x0d, 0xe8,
+ 0x39, 0xdd, 0xcb, 0x78, 0x8e, 0x30, 0xa9, 0xa9, 0xc7, 0x37, 0x64, 0xd1, 0xf3, 0xdb, 0x0c, 0xb3,
+ 0x8b, 0x0c, 0xa3, 0xf1, 0x13, 0x4d, 0xf3, 0xb2, 0x69, 0x75, 0xcd, 0x8b, 0xb4, 0xab, 0x99, 0x36,
+ 0xa2, 0x04, 0x75, 0x11, 0xa8, 0xce, 0x15, 0x1b, 0xba, 0xcd, 0xf6, 0x15, 0xdd, 0xdf, 0x29, 0x75,
+ 0x3a, 0x2e, 0xf4, 0x3c, 0xba, 0x7a, 0x31, 0xe0, 0x8d, 0x7a, 0x33, 0x38, 0x8e, 0x53, 0x99, 0xcc,
+ 0xc4, 0x41, 0xa6, 0x3f, 0x39, 0xcc, 0x59, 0xb2, 0xf7, 0x83, 0x9c, 0x05, 0x26, 0x67, 0x94, 0xcc,
+ 0x1e, 0x97, 0x28, 0xf2, 0xa7, 0x74, 0xae, 0x07, 0xb3, 0xb6, 0xb9, 0x0b, 0xf5, 0x07, 0x7b, 0x96,
+ 0x0b, 0x3d, 0xec, 0x18, 0x23, 0x1b, 0x6c, 0x92, 0xf6, 0xab, 0x42, 0xe7, 0xcd, 0xc5, 0x24, 0x96,
+ 0x4e, 0xf7, 0x57, 0x46, 0x50, 0xfd, 0x01, 0xfd, 0x8c, 0xac, 0x7d, 0x58, 0x06, 0x73, 0x94, 0xa9,
+ 0x92, 0xbd, 0x5f, 0xed, 0x68, 0xd7, 0x71, 0xc6, 0xaf, 0x89, 0xd2, 0x02, 0xe3, 0x17, 0x3f, 0x68,
+ 0x3f, 0x2a, 0x8b, 0xba, 0x3b, 0x0f, 0xa8, 0x38, 0x2e, 0x23, 0xde, 0x71, 0x74, 0xcb, 0xd9, 0xa3,
+ 0x8e, 0xaa, 0xd3, 0x06, 0x79, 0xc8, 0x72, 0x51, 0x4f, 0xfb, 0x35, 0x21, 0x67, 0x6a, 0xc1, 0x6a,
+ 0x1c, 0x11, 0x80, 0x9f, 0x92, 0xc1, 0x02, 0xe5, 0xaa, 0x49, 0xcf, 0xf9, 0x08, 0x1d, 0x78, 0xfb,
+ 0x71, 0x61, 0x43, 0x70, 0x40, 0xfd, 0x69, 0x49, 0x8f, 0x18, 0x20, 0x3f, 0x26, 0x14, 0x1c, 0x4d,
+ 0xb8, 0x22, 0x47, 0x04, 0xe5, 0xbb, 0xf2, 0x60, 0x76, 0xc3, 0x83, 0x2e, 0xf5, 0xdb, 0xd7, 0x1e,
+ 0xce, 0x03, 0x79, 0x05, 0x72, 0x1b, 0xa9, 0x2f, 0x11, 0xf6, 0xf0, 0x65, 0x2b, 0xcb, 0x10, 0x45,
+ 0x36, 0x52, 0x0c, 0x6c, 0x37, 0x81, 0x05, 0x22, 0xd2, 0x92, 0xef, 0x23, 0x23, 0x31, 0xf0, 0xa6,
+ 0xed, 0x4b, 0x1d, 0xc7, 0x56, 0x11, 0x2e, 0x0b, 0x65, 0x29, 0x23, 0x9e, 0x6a, 0x70, 0x8b, 0xcc,
+ 0x67, 0xf3, 0x46, 0x5f, 0x2a, 0xbe, 0x5c, 0xbf, 0x07, 0xc9, 0xf9, 0x15, 0x26, 0x73, 0x01, 0x67,
+ 0x1e, 0xf4, 0x4a, 0xfb, 0x5b, 0x21, 0x5f, 0x5d, 0x71, 0xe9, 0xa4, 0xd3, 0x85, 0xde, 0x78, 0x4c,
+ 0x92, 0x93, 0x40, 0x41, 0x39, 0xf0, 0xfe, 0x8b, 0xa1, 0x37, 0x1b, 0xb5, 0x73, 0xfa, 0xe0, 0x65,
+ 0x8c, 0x82, 0xf6, 0x7c, 0x19, 0xcc, 0x2c, 0xb9, 0x8e, 0xd9, 0x69, 0x9b, 0x9e, 0xaf, 0x7d, 0x4b,
+ 0x02, 0x73, 0xeb, 0xe6, 0x7e, 0xd7, 0x31, 0x3b, 0xd8, 0xbf, 0xbf, 0xaf, 0x2f, 0xe8, 0x91, 0x57,
+ 0x41, 0x5f, 0x40, 0x1f, 0xf9, 0x83, 0x81, 0xe1, 0xd1, 0xbd, 0x9c, 0xc8, 0x75, 0x8d, 0xe1, 0x36,
+ 0x9f, 0x34, 0x28, 0x58, 0x69, 0xc0, 0xd7, 0x22, 0xcb, 0x53, 0x8c, 0x45, 0xf9, 0x61, 0xb1, 0xf0,
+ 0xa3, 0x22, 0x24, 0x8f, 0x66, 0x57, 0xfe, 0x05, 0xd3, 0xa0, 0x58, 0x81, 0xd8, 0x8a, 0xfb, 0x1f,
+ 0x12, 0x98, 0x6a, 0x42, 0x1f, 0x5b, 0x70, 0x77, 0x70, 0x9e, 0xc2, 0x1d, 0x9c, 0x21, 0x72, 0x62,
+ 0x0f, 0x9e, 0xd1, 0x64, 0x9d, 0x39, 0x6f, 0x8d, 0xff, 0xa7, 0xf0, 0x48, 0x24, 0xe5, 0x2e, 0xd2,
+ 0x32, 0x0f, 0xe5, 0x91, 0x98, 0x48, 0x2a, 0x7b, 0x5f, 0xab, 0xf7, 0x48, 0xd4, 0xb5, 0x8a, 0xe9,
+ 0xf5, 0x5e, 0xc3, 0xea, 0x67, 0xa2, 0xb7, 0x19, 0x65, 0x3e, 0xc1, 0x39, 0xea, 0xc9, 0x60, 0x8a,
+ 0xc8, 0x3c, 0x98, 0x8f, 0xf6, 0xfb, 0x29, 0x10, 0x12, 0xf8, 0xec, 0x75, 0x90, 0x53, 0xd0, 0x45,
+ 0x2d, 0xbe, 0xf0, 0x89, 0xc4, 0x20, 0x98, 0xab, 0x43, 0xff, 0x8a, 0xe3, 0x5e, 0x6a, 0xfa, 0xa6,
+ 0x0f, 0xb5, 0x7f, 0x96, 0x80, 0xdc, 0x84, 0x3e, 0x1b, 0xfd, 0xa4, 0x0e, 0x4e, 0x90, 0x0a, 0xd1,
+ 0x8c, 0xb8, 0xff, 0x26, 0x15, 0xb9, 0x7e, 0xa0, 0x10, 0x98, 0x7c, 0xc6, 0xc1, 0x4f, 0xb5, 0x9f,
+ 0x19, 0x18, 0xf4, 0x49, 0x1a, 0x30, 0x69, 0xa0, 0x92, 0x61, 0x19, 0x44, 0x0a, 0x16, 0xa3, 0xa7,
+ 0x1f, 0x11, 0x32, 0xab, 0xc5, 0x68, 0x1e, 0x4d, 0x57, 0xf0, 0x6f, 0x8f, 0x03, 0xf9, 0xf2, 0x8e,
+ 0xe9, 0x6b, 0xef, 0x96, 0x01, 0x28, 0x75, 0x3a, 0x6b, 0xc4, 0x07, 0x9c, 0x75, 0x48, 0x3b, 0x0b,
+ 0xe6, 0xda, 0x3b, 0x66, 0x74, 0x73, 0x06, 0xe9, 0x0f, 0xb8, 0x34, 0xf5, 0x29, 0x91, 0x33, 0x39,
+ 0x91, 0xaa, 0xd6, 0x07, 0x13, 0x2a, 0x83, 0xd2, 0x0e, 0x1d, 0xcd, 0xf9, 0x50, 0x98, 0x89, 0x47,
+ 0xe8, 0xd0, 0xe7, 0x8b, 0x11, 0x7b, 0xf1, 0x73, 0x38, 0x4a, 0x3a, 0x3c, 0x60, 0x13, 0x25, 0xa4,
+ 0x3c, 0xe9, 0x2d, 0x16, 0xd0, 0x23, 0x99, 0xaf, 0x89, 0x84, 0xae, 0x55, 0xf5, 0x8e, 0x15, 0x88,
+ 0x96, 0x06, 0xcc, 0xd2, 0x5e, 0x9c, 0x4b, 0x07, 0x5f, 0xb2, 0xe0, 0x9e, 0x09, 0xe6, 0x61, 0xc7,
+ 0xf2, 0x61, 0x50, 0x4b, 0x2a, 0xc0, 0x24, 0x88, 0xf9, 0x0f, 0xb4, 0xe7, 0x09, 0x07, 0x5d, 0xc3,
+ 0x02, 0x3d, 0x58, 0xa3, 0x98, 0xf6, 0x27, 0x16, 0x46, 0x4d, 0x8c, 0x66, 0xf6, 0x60, 0xfd, 0xb0,
+ 0x0c, 0xae, 0x6e, 0x39, 0xdb, 0xdb, 0x5d, 0x18, 0x88, 0x09, 0x12, 0xef, 0x4c, 0xcd, 0x1c, 0x27,
+ 0x5c, 0x78, 0x27, 0xc8, 0x79, 0xc0, 0x0a, 0x8f, 0x92, 0xa1, 0x07, 0xfe, 0xc4, 0x54, 0xe2, 0x2c,
+ 0x0a, 0x8b, 0x6b, 0x20, 0x9f, 0x31, 0x28, 0x88, 0x05, 0x7c, 0x16, 0x26, 0x9b, 0x3d, 0x10, 0x5f,
+ 0x90, 0xc0, 0x3c, 0xb9, 0x17, 0x31, 0x50, 0xd0, 0xfb, 0xc6, 0x08, 0x80, 0xf6, 0xad, 0x9c, 0xa8,
+ 0x9f, 0x2d, 0x96, 0x09, 0xc7, 0x49, 0x8c, 0x88, 0xc5, 0x82, 0xaa, 0x0c, 0x25, 0x37, 0x81, 0x9b,
+ 0x3a, 0xf3, 0x60, 0x76, 0x05, 0x06, 0x2d, 0xcd, 0xd3, 0xde, 0x9f, 0xb2, 0x27, 0x3a, 0x0b, 0xe6,
+ 0xf0, 0xe5, 0x60, 0x0d, 0x7a, 0x4c, 0x92, 0xac, 0x9a, 0x71, 0x69, 0xea, 0x8d, 0x60, 0xfe, 0x22,
+ 0xdc, 0x72, 0x5c, 0xd8, 0xe0, 0xce, 0x52, 0xf2, 0x89, 0x83, 0xc3, 0xd3, 0xa9, 0x37, 0x83, 0xe3,
+ 0xd4, 0xd1, 0x7d, 0x09, 0xcd, 0xf5, 0x4d, 0x77, 0x9f, 0x1e, 0x4c, 0xeb, 0x4f, 0xd6, 0xbe, 0xca,
+ 0x36, 0x98, 0x25, 0x1e, 0xc5, 0x5b, 0x0f, 0x8a, 0x9d, 0xa9, 0x74, 0xcc, 0xe8, 0xf4, 0x54, 0x30,
+ 0x4d, 0x75, 0x24, 0x30, 0xe8, 0x92, 0x7a, 0xd0, 0x30, 0xaf, 0xfa, 0x54, 0x30, 0x83, 0x44, 0x84,
+ 0xed, 0x06, 0xda, 0xf5, 0x9e, 0x1e, 0xf0, 0x21, 0x7e, 0x6f, 0x44, 0x59, 0xb5, 0x5f, 0x08, 0x75,
+ 0x46, 0xe7, 0x74, 0xe6, 0x49, 0x69, 0x98, 0x9f, 0xc8, 0xfd, 0xe4, 0x0a, 0x53, 0xfe, 0xd2, 0x7e,
+ 0xb5, 0xe3, 0x69, 0x6b, 0xe9, 0xb4, 0xe6, 0x0c, 0x00, 0x61, 0xf3, 0x0b, 0x02, 0x67, 0x30, 0x29,
+ 0x7c, 0x6c, 0xfc, 0xc4, 0xa3, 0x80, 0xfd, 0xe2, 0xc0, 0xec, 0x8c, 0x17, 0x50, 0xc1, 0x23, 0x84,
+ 0x22, 0x9c, 0x64, 0x8f, 0xce, 0xcf, 0xe7, 0xc1, 0xd5, 0xe1, 0x09, 0xa7, 0x9a, 0xe9, 0x45, 0x2d,
+ 0xfb, 0x42, 0x3a, 0x88, 0xb8, 0x23, 0x25, 0x61, 0x73, 0x3c, 0x09, 0x0a, 0xde, 0xde, 0xc5, 0xd0,
+ 0x11, 0x90, 0x3c, 0x68, 0x6f, 0x94, 0x53, 0x8d, 0x55, 0x03, 0xf9, 0x1b, 0x73, 0x23, 0xbc, 0x15,
+ 0x9c, 0xb0, 0xf7, 0x76, 0x43, 0x2c, 0x70, 0x4f, 0x43, 0x7b, 0x96, 0x83, 0x2f, 0xf8, 0x26, 0x9b,
+ 0x17, 0x6f, 0xb2, 0x29, 0x46, 0x52, 0x91, 0x4a, 0x67, 0xaf, 0x1e, 0x9f, 0xee, 0x3b, 0x82, 0x56,
+ 0x4e, 0xad, 0x14, 0x04, 0x7e, 0x89, 0x85, 0xff, 0x1f, 0x73, 0xa9, 0x7a, 0xde, 0xe1, 0x27, 0xd7,
+ 0x52, 0xf4, 0x84, 0x47, 0x79, 0x6c, 0xed, 0xf3, 0x12, 0xd0, 0x9a, 0x91, 0x43, 0x0e, 0x05, 0x75,
+ 0xdd, 0x85, 0x97, 0x2d, 0x78, 0x85, 0x73, 0xdf, 0x7a, 0x93, 0x70, 0x1c, 0x6a, 0x5e, 0x57, 0x0e,
+ 0x10, 0x8d, 0x5f, 0x17, 0x1f, 0x80, 0x8b, 0x58, 0xbc, 0xe9, 0x74, 0x25, 0x4e, 0x20, 0x76, 0xb8,
+ 0x04, 0xce, 0x30, 0xa8, 0x2e, 0xbb, 0xce, 0x6e, 0x82, 0x64, 0x5f, 0xc1, 0x4a, 0x76, 0x83, 0x97,
+ 0xec, 0x3d, 0x89, 0xea, 0x32, 0x80, 0x70, 0x8c, 0x3a, 0xbe, 0x3f, 0x94, 0xe3, 0xfd, 0x9c, 0x1c,
+ 0x2b, 0x87, 0xa4, 0x9f, 0xbd, 0x2c, 0xff, 0x20, 0x0f, 0xe6, 0x0c, 0x68, 0x76, 0xc2, 0x41, 0xe0,
+ 0xff, 0x62, 0xcc, 0xbb, 0xa7, 0x83, 0xbc, 0x1f, 0xad, 0xd3, 0x3c, 0xee, 0x60, 0x65, 0xd8, 0x2f,
+ 0xf1, 0x03, 0x5e, 0xae, 0xc1, 0x1f, 0x1d, 0xe8, 0x2d, 0x24, 0x01, 0xdb, 0x50, 0x16, 0xb1, 0x0d,
+ 0xf3, 0x83, 0x6c, 0xc3, 0x9b, 0xc1, 0xf1, 0xae, 0xe9, 0xf9, 0x95, 0x8b, 0x2d, 0x6b, 0x17, 0x7a,
+ 0xbe, 0xb9, 0xdb, 0xc3, 0x56, 0xa0, 0x6c, 0xf4, 0x27, 0xf3, 0xf7, 0xc0, 0x27, 0x9e, 0x07, 0x1b,
+ 0x54, 0xc5, 0xc3, 0xc7, 0xcc, 0xfd, 0x90, 0xd0, 0xe1, 0xaf, 0x61, 0x65, 0xa7, 0xd3, 0x8c, 0x7b,
+ 0x47, 0x58, 0x5b, 0x3a, 0x05, 0xd4, 0x35, 0xbd, 0xd9, 0x2c, 0xad, 0xe0, 0x33, 0x21, 0x81, 0x93,
+ 0x50, 0xe7, 0xec, 0x63, 0x91, 0xf8, 0x08, 0xd2, 0xea, 0x5c, 0x34, 0xf6, 0x2a, 0xc7, 0xd4, 0x59,
+ 0x30, 0xe5, 0xc2, 0x5e, 0xd7, 0x82, 0x9e, 0x92, 0xd3, 0xbe, 0x29, 0x81, 0xe2, 0x86, 0xed, 0x42,
+ 0xb3, 0xa3, 0x3d, 0x2b, 0x7e, 0x08, 0x19, 0x51, 0x29, 0xf8, 0xb8, 0x57, 0x89, 0xab, 0xb2, 0xb4,
+ 0xd1, 0x21, 0x46, 0xc6, 0x02, 0x9f, 0xd8, 0x72, 0x6c, 0x7c, 0xa9, 0x99, 0x37, 0xe9, 0xb3, 0x53,
+ 0xa0, 0xa0, 0xef, 0xf6, 0xfc, 0xfd, 0xb3, 0x8f, 0x05, 0xf3, 0x4d, 0xdf, 0x85, 0xe6, 0x2e, 0xb3,
+ 0xa9, 0xee, 0x3b, 0x97, 0xa0, 0x1d, 0x6c, 0xaa, 0xe3, 0x87, 0x3b, 0xef, 0x00, 0x53, 0xb6, 0xb3,
+ 0x69, 0xee, 0xf9, 0x3b, 0xea, 0x75, 0x07, 0xa2, 0xd1, 0x50, 0xf5, 0x6b, 0xd0, 0xf0, 0x7f, 0x7f,
+ 0x7a, 0x17, 0x9e, 0x5a, 0x15, 0x6d, 0xa7, 0xb4, 0xe7, 0xef, 0x2c, 0x5d, 0xfb, 0xa9, 0x3f, 0x3b,
+ 0x93, 0xfb, 0xdc, 0x9f, 0x9d, 0xc9, 0x7d, 0xe5, 0xcf, 0xce, 0xe4, 0x7e, 0xfc, 0xcf, 0xcf, 0x1c,
+ 0xfb, 0xdc, 0x9f, 0x9f, 0x39, 0xf6, 0x85, 0x3f, 0x3f, 0x73, 0xec, 0xfb, 0xa4, 0xde, 0xc5, 0x8b,
+ 0x45, 0x4c, 0xe5, 0xc9, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xd7, 0x5b, 0x7a, 0x28,
+ 0x2a, 0x02, 0x00,
}
func (m *Rpc) Marshal() (dAtA []byte, err error) {
@@ -84874,9 +84875,9 @@ func (m *RpcPublishingCreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, err
_ = i
var l int
_ = l
- if m.JoinSpace {
+ if m.IncludeSpaceInfo {
i--
- if m.JoinSpace {
+ if m.IncludeSpaceInfo {
dAtA[i] = 1
} else {
dAtA[i] = 0
@@ -128121,7 +128122,7 @@ func (m *RpcPublishingCreateRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
- if m.JoinSpace {
+ if m.IncludeSpaceInfo {
n += 2
}
return n
@@ -165100,7 +165101,7 @@ func (m *RpcPublishingCreateRequest) Unmarshal(dAtA []byte) error {
iNdEx = postIndex
case 4:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field JoinSpace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field IncludeSpaceInfo", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
@@ -165117,7 +165118,7 @@ func (m *RpcPublishingCreateRequest) Unmarshal(dAtA []byte) error {
break
}
}
- m.JoinSpace = bool(v != 0)
+ m.IncludeSpaceInfo = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto
index a2fc1d53a..5f669de98 100644
--- a/pb/protos/commands.proto
+++ b/pb/protos/commands.proto
@@ -1497,7 +1497,7 @@ message Rpc {
string spaceId = 1;
string objectId = 2;
string uri = 3;
- bool joinSpace = 4;
+ bool includeSpaceInfo = 4;
}
message Response {
Error error = 1;
From 5ab13471beb0f41a8cee14f6f08746396a543a46 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 26 Mar 2025 10:14:36 +0100
Subject: [PATCH 091/132] GO-4459: Extend global search tests
---
core/api/internal/search/service_test.go | 38 ++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 2cedc370a..fe85d2ff5 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -398,6 +398,44 @@ func TestSearchService_GlobalSearch(t *testing.T) {
require.Equal(t, 1, total)
require.False(t, hasMore)
})
+
+ t.Run("no objects found globally", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+ fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{},
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }).Once()
+
+ // when
+ objects, total, hasMore, err := fx.GlobalSearch(ctx, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Property: LastModifiedDate, Direction: Desc}}, offset, limit)
+
+ // then
+ require.NoError(t, err)
+ require.Len(t, objects, 0)
+ require.Equal(t, 0, total)
+ require.False(t, hasMore)
+ })
+
+ t.Run("error during global search", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).Return(&pb.RpcObjectSearchResponse{
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_UNKNOWN_ERROR},
+ }).Once()
+
+ // when
+ objects, total, hasMore, err := fx.GlobalSearch(ctx, SearchRequest{Query: mockedSearchTerm, Types: []string{}, Sort: SortOptions{Property: LastModifiedDate, Direction: Desc}}, offset, limit)
+
+ // then
+ require.Error(t, err)
+ require.Empty(t, objects)
+ require.Equal(t, 0, total)
+ require.False(t, hasMore)
+ })
}
func TestSearchService_Search(t *testing.T) {
From 0b7f88ea3426a12bdf0741fa4163369da3b62abd Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 26 Mar 2025 12:18:02 +0100
Subject: [PATCH 092/132] GO-4459: Add middleware_test.go
---
core/api/server/middleware.go | 13 +-
core/api/server/middleware_test.go | 238 +++++++++++++++++++++++++++++
2 files changed, 248 insertions(+), 3 deletions(-)
create mode 100644 core/api/server/middleware_test.go
diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go
index f83e26e04..569f0a3ee 100644
--- a/core/api/server/middleware.go
+++ b/core/api/server/middleware.go
@@ -2,6 +2,7 @@ package server
import (
"context"
+ "errors"
"fmt"
"net/http"
"strings"
@@ -16,6 +17,12 @@ import (
"github.com/anyproto/anytype-heart/pb/service"
)
+var (
+ ErrMissingAuthorizationHeader = errors.New("missing authorization header")
+ ErrInvalidAuthorizationHeader = errors.New("invalid authorization header format")
+ ErrInvalidToken = errors.New("invalid token")
+)
+
// rateLimit is a middleware that limits the number of requests per second.
func (s *Server) rateLimit(max float64) gin.HandlerFunc {
lmt := tollbooth.NewLimiter(max, nil)
@@ -40,13 +47,13 @@ func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.Handle
return func(c *gin.Context) {
authHeader := c.GetHeader("Authorization")
if authHeader == "" {
- apiErr := util.CodeToAPIError(http.StatusUnauthorized, "Missing Authorization header")
+ apiErr := util.CodeToAPIError(http.StatusUnauthorized, ErrMissingAuthorizationHeader.Error())
c.AbortWithStatusJSON(http.StatusUnauthorized, apiErr)
return
}
if !strings.HasPrefix(authHeader, "Bearer ") {
- apiErr := util.CodeToAPIError(http.StatusUnauthorized, "Invalid Authorization header format")
+ apiErr := util.CodeToAPIError(http.StatusUnauthorized, ErrInvalidAuthorizationHeader.Error())
c.AbortWithStatusJSON(http.StatusUnauthorized, apiErr)
return
}
@@ -61,7 +68,7 @@ func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.Handle
if !exists {
response := mw.WalletCreateSession(context.Background(), &pb.RpcWalletCreateSessionRequest{Auth: &pb.RpcWalletCreateSessionRequestAuthOfAppKey{AppKey: key}})
if response.Error.Code != pb.RpcWalletCreateSessionResponseError_NULL {
- apiErr := util.CodeToAPIError(http.StatusUnauthorized, "Invalid token")
+ apiErr := util.CodeToAPIError(http.StatusUnauthorized, ErrInvalidToken.Error())
c.AbortWithStatusJSON(http.StatusUnauthorized, apiErr)
return
}
diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go
new file mode 100644
index 000000000..f4e43a5c5
--- /dev/null
+++ b/core/api/server/middleware_test.go
@@ -0,0 +1,238 @@
+package server
+
+import (
+ "encoding/json"
+ "errors"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+
+ "github.com/gin-gonic/gin"
+ "github.com/stretchr/testify/mock"
+ "github.com/stretchr/testify/require"
+
+ "github.com/anyproto/anytype-heart/core/anytype/account"
+ "github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
+ "github.com/anyproto/anytype-heart/core/api/util"
+ "github.com/anyproto/anytype-heart/pb"
+ "github.com/anyproto/anytype-heart/pb/service/mock_service"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+)
+
+type fixture struct {
+ *Server
+ accountService account.Service
+ mwMock *mock_service.MockClientCommandsServer
+}
+
+func newFixture(t *testing.T) *fixture {
+ mw := mock_service.NewMockClientCommandsServer(t)
+ accountService := mock_account.NewMockService(t)
+ server := NewServer(accountService, mw)
+ return &fixture{
+ Server: server,
+ accountService: accountService,
+ mwMock: mw,
+ }
+}
+
+func TestEnsureMetadataHeader(t *testing.T) {
+ t.Run("sets correct header", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ middleware := fx.ensureMetadataHeader()
+ w := httptest.NewRecorder()
+ c, _ := gin.CreateTestContext(w)
+
+ // when
+ middleware(c)
+
+ // then
+ require.Equal(t, "2025-03-17", w.Header().Get("Anytype-Version"))
+ })
+}
+
+func TestEnsureAuthenticated(t *testing.T) {
+ t.Run("missing auth header", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ fx.KeyToToken = make(map[string]string)
+ middleware := fx.ensureAuthenticated(fx.mwMock)
+ w := httptest.NewRecorder()
+ c, _ := gin.CreateTestContext(w)
+ req := httptest.NewRequest("GET", "/", nil)
+ c.Request = req
+
+ // when
+ middleware(c)
+
+ // then
+ require.Equal(t, http.StatusUnauthorized, w.Code)
+ expectedJSON, err := json.Marshal(util.CodeToAPIError(http.StatusUnauthorized, ErrMissingAuthorizationHeader.Error()))
+ require.NoError(t, err)
+ require.JSONEq(t, string(expectedJSON), w.Body.String())
+ })
+
+ t.Run("invalid auth header format", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ fx.KeyToToken = make(map[string]string)
+ middleware := fx.ensureAuthenticated(fx.mwMock)
+ w := httptest.NewRecorder()
+ c, _ := gin.CreateTestContext(w)
+ req := httptest.NewRequest("GET", "/", nil)
+ req.Header.Set("Authorization", "InvalidToken")
+ c.Request = req
+
+ // when
+ middleware(c)
+
+ // then
+ require.Equal(t, http.StatusUnauthorized, w.Code)
+ expectedJSON, err := json.Marshal(util.CodeToAPIError(http.StatusUnauthorized, ErrInvalidAuthorizationHeader.Error()))
+ require.NoError(t, err)
+ require.JSONEq(t, string(expectedJSON), w.Body.String())
+ })
+
+ t.Run("valid token creation", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ fx.KeyToToken = make(map[string]string)
+ tokenExpected := "valid-token"
+
+ fx.mwMock.
+ On("WalletCreateSession", mock.Anything, &pb.RpcWalletCreateSessionRequest{
+ Auth: &pb.RpcWalletCreateSessionRequestAuthOfAppKey{AppKey: "someAppKey"},
+ }).
+ Return(&pb.RpcWalletCreateSessionResponse{
+ Token: tokenExpected,
+ Error: &pb.RpcWalletCreateSessionResponseError{
+ Code: pb.RpcWalletCreateSessionResponseError_NULL,
+ },
+ }, nil).Once()
+
+ middleware := fx.ensureAuthenticated(fx.mwMock)
+ w := httptest.NewRecorder()
+ c, _ := gin.CreateTestContext(w)
+ req := httptest.NewRequest("GET", "/", nil)
+ req.Header.Set("Authorization", "Bearer someAppKey")
+ c.Request = req
+
+ // when
+ middleware(c)
+
+ // then
+ token, exists := c.Get("token")
+ require.True(t, exists)
+ require.Equal(t, tokenExpected, token)
+ })
+
+ t.Run("invalid token", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ fx.KeyToToken = make(map[string]string)
+ middleware := fx.ensureAuthenticated(fx.mwMock)
+ w := httptest.NewRecorder()
+ c, _ := gin.CreateTestContext(w)
+ req := httptest.NewRequest("GET", "/", nil)
+ req.Header.Set("Authorization", "Bearer invalidKey")
+ c.Request = req
+
+ fx.mwMock.
+ On("WalletCreateSession", mock.Anything, &pb.RpcWalletCreateSessionRequest{
+ Auth: &pb.RpcWalletCreateSessionRequestAuthOfAppKey{AppKey: "invalidKey"},
+ }).
+ Return(&pb.RpcWalletCreateSessionResponse{
+ Token: "",
+ Error: &pb.RpcWalletCreateSessionResponseError{
+ Code: pb.RpcWalletCreateSessionResponseError_UNKNOWN_ERROR,
+ },
+ }, nil).Once()
+
+ // when
+ middleware(c)
+
+ // then
+ require.Equal(t, http.StatusUnauthorized, w.Code)
+ expectedJSON, err := json.Marshal(util.CodeToAPIError(http.StatusUnauthorized, ErrInvalidToken.Error()))
+ require.NoError(t, err)
+ require.JSONEq(t, string(expectedJSON), w.Body.String())
+ })
+}
+
+func TestEnsureAccountInfo(t *testing.T) {
+ t.Run("successful account info", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ expectedInfo := &model.AccountInfo{
+ GatewayUrl: "http://localhost:31006",
+ }
+ fx.accountService.(*mock_account.MockService).
+ On("GetInfo", mock.Anything).
+ Return(expectedInfo, nil).Once()
+
+ // when
+ middleware := fx.ensureAccountInfo(fx.accountService)
+ w := httptest.NewRecorder()
+ c, _ := gin.CreateTestContext(w)
+
+ // when
+ middleware(c)
+
+ // then
+ require.Equal(t, expectedInfo, fx.objectService.AccountInfo)
+ require.Equal(t, expectedInfo, fx.spaceService.AccountInfo)
+ require.Equal(t, expectedInfo, fx.searchService.AccountInfo)
+ })
+
+ t.Run("error retrieving account info", func(t *testing.T) {
+ // given
+ fx := newFixture(t)
+ expectedErr := errors.New("failed to get info")
+ fx.accountService.(*mock_account.MockService).
+ On("GetInfo", mock.Anything).
+ Return(nil, expectedErr).Once()
+
+ middleware := fx.ensureAccountInfo(fx.accountService)
+ w := httptest.NewRecorder()
+ c, _ := gin.CreateTestContext(w)
+ middleware(c)
+
+ // then
+ require.Equal(t, http.StatusInternalServerError, w.Code)
+ })
+}
+
+func TestRateLimit(t *testing.T) {
+ fx := newFixture(t)
+ router := gin.New()
+ router.GET("/", fx.rateLimit(1), func(c *gin.Context) {
+ c.String(http.StatusOK, "OK")
+ })
+
+ t.Run("first request allowed", func(t *testing.T) {
+ // given
+ w := httptest.NewRecorder()
+ req := httptest.NewRequest("GET", "/", nil)
+ req.RemoteAddr = "1.2.3.4:5678"
+
+ // when
+ router.ServeHTTP(w, req)
+
+ // then
+ require.Equal(t, http.StatusOK, w.Code)
+ })
+
+ t.Run("second request rate-limited", func(t *testing.T) {
+ // given
+ w := httptest.NewRecorder()
+ req := httptest.NewRequest("GET", "/", nil)
+ req.RemoteAddr = "1.2.3.4:5678"
+
+ // when
+ router.ServeHTTP(w, req)
+
+ // then
+ require.Equal(t, http.StatusTooManyRequests, w.Code)
+ })
+}
From 2951d69ff991599a7b3b68a29094440e2dc7b9c6 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 26 Mar 2025 12:29:17 +0100
Subject: [PATCH 093/132] GO-4459: Add server_test.go
---
core/api/server/server_test.go | 62 ++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
create mode 100644 core/api/server/server_test.go
diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go
new file mode 100644
index 000000000..b3cef992c
--- /dev/null
+++ b/core/api/server/server_test.go
@@ -0,0 +1,62 @@
+package server
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+
+ "github.com/anyproto/anytype-heart/core/anytype/account"
+ "github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
+ "github.com/anyproto/anytype-heart/pb/service/mock_service"
+)
+
+type srvFixture struct {
+ *Server
+ accountService account.Service
+ mwMock *mock_service.MockClientCommandsServer
+}
+
+func newServerFixture(t *testing.T) *srvFixture {
+ mwMock := mock_service.NewMockClientCommandsServer(t)
+ accountService := mock_account.NewMockService(t)
+ server := NewServer(accountService, mwMock)
+
+ return &srvFixture{
+ Server: server,
+ accountService: accountService,
+ mwMock: mwMock,
+ }
+}
+
+func TestNewServer(t *testing.T) {
+ t.Run("returns valid server", func(t *testing.T) {
+ // when
+ s := newServerFixture(t)
+
+ // then
+ require.NotNil(t, s)
+ require.NotNil(t, s.engine)
+ require.NotNil(t, s.KeyToToken)
+
+ require.NotNil(t, s.authService)
+ require.NotNil(t, s.exportService)
+ require.NotNil(t, s.spaceService)
+ require.NotNil(t, s.objectService)
+ require.NotNil(t, s.listService)
+ require.NotNil(t, s.searchService)
+
+ })
+}
+
+func TestServer_Engine(t *testing.T) {
+ t.Run("Engine returns same engine instance", func(t *testing.T) {
+ // given
+ s := newServerFixture(t)
+
+ // when
+ engine := s.Engine()
+
+ // then
+ require.Equal(t, s.engine, engine)
+ })
+}
From 286b18797c54ef684d9af20f24a79a6c1a072de4 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 26 Mar 2025 12:29:44 +0100
Subject: [PATCH 094/132] GO-4459: Refactor service tests
---
core/api/internal/auth/service_test.go | 6 +++---
core/api/internal/export/service_test.go | 6 +++---
core/api/internal/list/service_test.go | 16 ++++++++--------
core/api/internal/object/service_test.go | 8 ++++----
core/api/internal/search/service_test.go | 10 +++++-----
core/api/internal/space/service_test.go | 6 +++---
core/api/server/middleware_test.go | 7 ++++---
7 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/core/api/internal/auth/service_test.go b/core/api/internal/auth/service_test.go
index 85c6605d3..af067f7e4 100644
--- a/core/api/internal/auth/service_test.go
+++ b/core/api/internal/auth/service_test.go
@@ -26,12 +26,12 @@ type fixture struct {
}
func newFixture(t *testing.T) *fixture {
- mw := mock_service.NewMockClientCommandsServer(t)
- authService := NewService(mw)
+ mwMock := mock_service.NewMockClientCommandsServer(t)
+ authService := NewService(mwMock)
return &fixture{
AuthService: authService,
- mwMock: mw,
+ mwMock: mwMock,
}
}
diff --git a/core/api/internal/export/service_test.go b/core/api/internal/export/service_test.go
index a57406d6e..6dd705b8a 100644
--- a/core/api/internal/export/service_test.go
+++ b/core/api/internal/export/service_test.go
@@ -26,12 +26,12 @@ type fixture struct {
}
func newFixture(t *testing.T) *fixture {
- mw := mock_service.NewMockClientCommandsServer(t)
- exportService := NewService(mw)
+ mwMock := mock_service.NewMockClientCommandsServer(t)
+ exportService := NewService(mwMock)
return &fixture{
ExportService: exportService,
- mwMock: mw,
+ mwMock: mwMock,
}
}
diff --git a/core/api/internal/list/service_test.go b/core/api/internal/list/service_test.go
index cd4295092..f4e487126 100644
--- a/core/api/internal/list/service_test.go
+++ b/core/api/internal/list/service_test.go
@@ -35,18 +35,18 @@ type fixture struct {
}
func newFixture(t *testing.T) *fixture {
- mw := mock_service.NewMockClientCommandsServer(t)
- spaceService := space.NewService(mw)
- objSvc := object.NewService(mw, spaceService)
- objSvc.AccountInfo = &model.AccountInfo{
+ mwMock := mock_service.NewMockClientCommandsServer(t)
+ spaceService := space.NewService(mwMock)
+ objectService := object.NewService(mwMock, spaceService)
+ objectService.AccountInfo = &model.AccountInfo{
TechSpaceId: "mocked-tech-space-id",
GatewayUrl: "http://localhost:31006",
}
- listSvc := NewService(mw, objSvc)
+ listService := NewService(mwMock, objectService)
return &fixture{
- ListService: listSvc,
- mwMock: mw,
- objectService: objSvc,
+ ListService: listService,
+ mwMock: mwMock,
+ objectService: objectService,
}
}
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index e056dfba9..9064bbf5e 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -44,10 +44,10 @@ type fixture struct {
}
func newFixture(t *testing.T) *fixture {
- mw := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_service.NewMockClientCommandsServer(t)
- spaceService := space.NewService(mw)
- objectService := NewService(mw, spaceService)
+ spaceService := space.NewService(mwMock)
+ objectService := NewService(mwMock, spaceService)
objectService.AccountInfo = &model.AccountInfo{
TechSpaceId: mockedTechSpaceId,
GatewayUrl: gatewayUrl,
@@ -55,7 +55,7 @@ func newFixture(t *testing.T) *fixture {
return &fixture{
ObjectService: objectService,
- mwMock: mw,
+ mwMock: mwMock,
}
}
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index fe85d2ff5..7c6e44d60 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -44,13 +44,13 @@ type fixture struct {
}
func newFixture(t *testing.T) *fixture {
- mw := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_service.NewMockClientCommandsServer(t)
- spaceService := space.NewService(mw)
+ spaceService := space.NewService(mwMock)
spaceService.AccountInfo = &model.AccountInfo{TechSpaceId: techSpaceId, GatewayUrl: gatewayUrl}
- objectService := object.NewService(mw, spaceService)
+ objectService := object.NewService(mwMock, spaceService)
objectService.AccountInfo = &model.AccountInfo{TechSpaceId: techSpaceId}
- searchService := NewService(mw, spaceService, objectService)
+ searchService := NewService(mwMock, spaceService, objectService)
searchService.AccountInfo = &model.AccountInfo{
TechSpaceId: techSpaceId,
GatewayUrl: gatewayUrl,
@@ -58,7 +58,7 @@ func newFixture(t *testing.T) *fixture {
return &fixture{
SearchService: searchService,
- mwMock: mw,
+ mwMock: mwMock,
}
}
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index 35bea6a63..9dd38daf4 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -31,8 +31,8 @@ type fixture struct {
}
func newFixture(t *testing.T) *fixture {
- mw := mock_service.NewMockClientCommandsServer(t)
- spaceService := NewService(mw)
+ mwMock := mock_service.NewMockClientCommandsServer(t)
+ spaceService := NewService(mwMock)
spaceService.AccountInfo = &model.AccountInfo{
TechSpaceId: techSpaceId,
GatewayUrl: gatewayUrl,
@@ -40,7 +40,7 @@ func newFixture(t *testing.T) *fixture {
return &fixture{
SpaceService: spaceService,
- mwMock: mw,
+ mwMock: mwMock,
}
}
diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go
index f4e43a5c5..d6dab5dba 100644
--- a/core/api/server/middleware_test.go
+++ b/core/api/server/middleware_test.go
@@ -26,13 +26,14 @@ type fixture struct {
}
func newFixture(t *testing.T) *fixture {
- mw := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_service.NewMockClientCommandsServer(t)
accountService := mock_account.NewMockService(t)
- server := NewServer(accountService, mw)
+ server := NewServer(accountService, mwMock)
+
return &fixture{
Server: server,
accountService: accountService,
- mwMock: mw,
+ mwMock: mwMock,
}
}
From 061ea5bc8f04a6bef91c698ae088cc9baf70d7de Mon Sep 17 00:00:00 2001
From: AnastasiaShemyakinskaya
Date: Wed, 26 Mar 2025 12:40:50 +0100
Subject: [PATCH 095/132] GO-5369: fix conflict
Signed-off-by: AnastasiaShemyakinskaya
---
pb/commands.pb.go | 2713 +++++++++++++++++++++++----------------------
1 file changed, 1357 insertions(+), 1356 deletions(-)
diff --git a/pb/commands.pb.go b/pb/commands.pb.go
index 8a508f9c7..0cc49b22a 100644
--- a/pb/commands.pb.go
+++ b/pb/commands.pb.go
@@ -20410,10 +20410,10 @@ func (m *RpcPublishingCreate) XXX_DiscardUnknown() {
var xxx_messageInfo_RpcPublishingCreate proto.InternalMessageInfo
type RpcPublishingCreateRequest struct {
- SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
- ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
- Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
- JoinSpace bool `protobuf:"varint,4,opt,name=joinSpace,proto3" json:"joinSpace,omitempty"`
+ SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
+ Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
+ IncludeSpaceInfo bool `protobuf:"varint,4,opt,name=includeSpaceInfo,proto3" json:"includeSpaceInfo,omitempty"`
}
func (m *RpcPublishingCreateRequest) Reset() { *m = RpcPublishingCreateRequest{} }
@@ -20470,9 +20470,9 @@ func (m *RpcPublishingCreateRequest) GetUri() string {
return ""
}
-func (m *RpcPublishingCreateRequest) GetJoinSpace() bool {
+func (m *RpcPublishingCreateRequest) GetIncludeSpaceInfo() bool {
if m != nil {
- return m.JoinSpace
+ return m.IncludeSpaceInfo
}
return false
}
@@ -76308,1351 +76308,1352 @@ func init() {
func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) }
var fileDescriptor_8261c968b2e6f45c = []byte{
- // 21504 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49,
- 0x59, 0x37, 0x3a, 0x95, 0x59, 0x55, 0xdd, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x59,
- 0x66, 0xd7, 0xd9, 0x65, 0x59, 0x97, 0xa5, 0x77, 0x59, 0x10, 0xd9, 0x65, 0x97, 0xa5, 0xba, 0x2a,
- 0xbb, 0xbb, 0x76, 0xab, 0xab, 0x9a, 0xac, 0xea, 0x19, 0x46, 0x3f, 0x4f, 0x9b, 0x53, 0x15, 0xdd,
- 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x36, 0xe7, 0xf9, 0xce, 0x27, 0xe2, 0x0a, 0x88,
- 0x88, 0xa8, 0xa8, 0x88, 0xdc, 0x16, 0x01, 0x01, 0xb9, 0xdf, 0x3e, 0x50, 0x2e, 0x72, 0x11, 0x44,
- 0x54, 0x14, 0x2f, 0x80, 0x72, 0xc4, 0x3b, 0x7e, 0x47, 0x8f, 0x1f, 0x1e, 0x05, 0xf1, 0x13, 0x3d,
- 0x4f, 0x5c, 0x32, 0x33, 0xa2, 0xba, 0x32, 0x2b, 0xb2, 0xba, 0xb2, 0x7a, 0xd1, 0xef, 0xaf, 0xaa,
- 0x8c, 0x8c, 0x7c, 0xe3, 0x8d, 0xf7, 0xf7, 0x46, 0xc4, 0x1b, 0x11, 0x6f, 0xbc, 0x01, 0x4e, 0xf7,
- 0x2e, 0xde, 0xd6, 0x73, 0x1d, 0xdf, 0xf1, 0x6e, 0x6b, 0x3b, 0xbb, 0xbb, 0xa6, 0xdd, 0xf1, 0x16,
- 0xf1, 0xb3, 0x3a, 0x65, 0xda, 0xfb, 0xfe, 0x7e, 0x0f, 0x6a, 0x37, 0xf6, 0x2e, 0x6d, 0xdf, 0xd6,
- 0xb5, 0x2e, 0xde, 0xd6, 0xbb, 0x78, 0xdb, 0xae, 0xd3, 0x81, 0xdd, 0xe0, 0x03, 0xfc, 0x40, 0xb3,
- 0x6b, 0x37, 0xc7, 0xe5, 0xea, 0x3a, 0x6d, 0xb3, 0xeb, 0xf9, 0x8e, 0x0b, 0x69, 0xce, 0x53, 0x51,
- 0x91, 0xf0, 0x32, 0xb4, 0xfd, 0x80, 0xc2, 0xb5, 0xdb, 0x8e, 0xb3, 0xdd, 0x85, 0xe4, 0xdd, 0xc5,
- 0xbd, 0xad, 0xdb, 0x3c, 0xdf, 0xdd, 0x6b, 0xfb, 0xf4, 0xed, 0xf5, 0xfd, 0x6f, 0x3b, 0xd0, 0x6b,
- 0xbb, 0x56, 0xcf, 0x77, 0x5c, 0x92, 0xe3, 0xec, 0x9f, 0xff, 0xde, 0x34, 0x90, 0x8d, 0x5e, 0x5b,
- 0xfb, 0xfa, 0x14, 0x90, 0x4b, 0xbd, 0x9e, 0xf6, 0x49, 0x09, 0x80, 0x15, 0xe8, 0x9f, 0x83, 0xae,
- 0x67, 0x39, 0xb6, 0x76, 0x1c, 0x4c, 0x19, 0xf0, 0xd9, 0x7b, 0xd0, 0xf3, 0xef, 0xca, 0xbf, 0xe0,
- 0xaf, 0xe4, 0x9c, 0xf6, 0x7a, 0x09, 0x4c, 0x1b, 0xd0, 0xeb, 0x39, 0xb6, 0x07, 0xd5, 0x67, 0x80,
- 0x02, 0x74, 0x5d, 0xc7, 0x3d, 0x9d, 0xbb, 0x3e, 0x77, 0xf3, 0xec, 0x1d, 0xb7, 0x2c, 0xd2, 0xea,
- 0x2f, 0x1a, 0xbd, 0xf6, 0x62, 0xa9, 0xd7, 0x5b, 0x8c, 0x28, 0x2d, 0x06, 0x1f, 0x2d, 0xea, 0xe8,
- 0x0b, 0x83, 0x7c, 0xa8, 0x9e, 0x06, 0x53, 0x97, 0x49, 0x86, 0xd3, 0xd2, 0xf5, 0xb9, 0x9b, 0x67,
- 0x8c, 0xe0, 0x11, 0xbd, 0xe9, 0x40, 0xdf, 0xb4, 0xba, 0xde, 0x69, 0x99, 0xbc, 0xa1, 0x8f, 0xda,
- 0xc3, 0x39, 0x50, 0xc0, 0x44, 0xd4, 0x32, 0xc8, 0xb7, 0x9d, 0x0e, 0xc4, 0xc5, 0x2f, 0xdc, 0x71,
- 0x9b, 0x78, 0xf1, 0x8b, 0x65, 0xa7, 0x03, 0x0d, 0xfc, 0xb1, 0x7a, 0x3d, 0x98, 0x0d, 0xc4, 0x12,
- 0xb1, 0xc1, 0x26, 0x9d, 0xbd, 0x03, 0xe4, 0x51, 0x7e, 0x75, 0x1a, 0xe4, 0xeb, 0x1b, 0xb5, 0x9a,
- 0x72, 0x4c, 0x3d, 0x01, 0xe6, 0x37, 0xea, 0xf7, 0xd7, 0x1b, 0xe7, 0xeb, 0x9b, 0xba, 0x61, 0x34,
- 0x0c, 0x25, 0xa7, 0xce, 0x83, 0x99, 0xa5, 0x52, 0x65, 0xb3, 0x5a, 0x5f, 0xdf, 0x68, 0x29, 0x92,
- 0xf6, 0x2a, 0x19, 0x2c, 0x34, 0xa1, 0x5f, 0x81, 0x97, 0xad, 0x36, 0x6c, 0xfa, 0xa6, 0x0f, 0xb5,
- 0x97, 0xe4, 0x42, 0x61, 0xaa, 0x1b, 0xa8, 0xd0, 0xf0, 0x15, 0xad, 0xc0, 0x93, 0x0e, 0x54, 0x80,
- 0xa7, 0xb0, 0x48, 0xbf, 0x5e, 0x64, 0xd2, 0x0c, 0x96, 0xce, 0xd9, 0x27, 0x80, 0x59, 0xe6, 0x9d,
- 0xba, 0x00, 0xc0, 0x52, 0xa9, 0x7c, 0xff, 0x8a, 0xd1, 0xd8, 0xa8, 0x57, 0x94, 0x63, 0xe8, 0x79,
- 0xb9, 0x61, 0xe8, 0xf4, 0x39, 0xa7, 0x7d, 0x33, 0xc7, 0x80, 0x59, 0xe1, 0xc1, 0x5c, 0x1c, 0xce,
- 0xcc, 0x00, 0x40, 0xb5, 0x37, 0x84, 0xe0, 0xac, 0x70, 0xe0, 0x3c, 0x29, 0x1d, 0xb9, 0xec, 0x01,
- 0x7a, 0x48, 0x02, 0xd3, 0xcd, 0x9d, 0x3d, 0xbf, 0xe3, 0x5c, 0xb1, 0xb5, 0x99, 0x10, 0x19, 0xed,
- 0xef, 0x58, 0x99, 0x3c, 0x9d, 0x97, 0xc9, 0xcd, 0x07, 0x2b, 0x41, 0x29, 0xc4, 0x48, 0xe3, 0x35,
- 0xa1, 0x34, 0x4a, 0x9c, 0x34, 0x9e, 0x20, 0x4a, 0x28, 0x7b, 0x39, 0x7c, 0xe1, 0x6e, 0x50, 0x68,
- 0xf6, 0xcc, 0x36, 0xd4, 0x3e, 0x2b, 0x83, 0xb9, 0x1a, 0x34, 0x2f, 0xc3, 0x52, 0xaf, 0xe7, 0x3a,
- 0x97, 0xa1, 0x56, 0x8e, 0xf4, 0xf5, 0x34, 0x98, 0xf2, 0x50, 0xa6, 0x6a, 0x07, 0xd7, 0x60, 0xc6,
- 0x08, 0x1e, 0xd5, 0x33, 0x00, 0x58, 0x1d, 0x68, 0xfb, 0x96, 0x6f, 0x41, 0xef, 0xb4, 0x74, 0xbd,
- 0x7c, 0xf3, 0x8c, 0xc1, 0xa4, 0x68, 0x5f, 0x97, 0x44, 0x75, 0x0c, 0x73, 0xb1, 0xc8, 0x72, 0x10,
- 0x23, 0xd5, 0xd7, 0x49, 0x22, 0x3a, 0x36, 0x94, 0x5c, 0x3a, 0xd9, 0xbe, 0x2d, 0x97, 0x5e, 0xb8,
- 0x28, 0x47, 0xbd, 0xb1, 0xd9, 0xdc, 0x28, 0xaf, 0x6e, 0x36, 0xd7, 0x4b, 0x65, 0x5d, 0x81, 0xea,
- 0x49, 0xa0, 0xe0, 0xbf, 0x9b, 0xd5, 0xe6, 0x66, 0x45, 0xaf, 0xe9, 0x2d, 0xbd, 0xa2, 0x6c, 0xa9,
- 0x2a, 0x58, 0x30, 0xf4, 0x67, 0x6e, 0xe8, 0xcd, 0xd6, 0xe6, 0x72, 0xa9, 0x5a, 0xd3, 0x2b, 0xca,
- 0x36, 0xfa, 0xb8, 0x56, 0x5d, 0xab, 0xb6, 0x36, 0x0d, 0xbd, 0x54, 0x5e, 0xd5, 0x2b, 0xca, 0x8e,
- 0xfa, 0x28, 0x70, 0x55, 0xbd, 0xb1, 0x59, 0x5a, 0x5f, 0x37, 0x1a, 0xe7, 0xf4, 0x4d, 0xfa, 0x45,
- 0x53, 0xb1, 0x48, 0x41, 0xad, 0xcd, 0xe6, 0x6a, 0xc9, 0xd0, 0x4b, 0x4b, 0x35, 0x5d, 0x79, 0x40,
- 0x7b, 0x9e, 0x0c, 0xe6, 0xd7, 0xcc, 0x4b, 0xb0, 0xb9, 0x63, 0xba, 0xd0, 0xbc, 0xd8, 0x85, 0xda,
- 0x0d, 0x02, 0x78, 0x6a, 0x9f, 0x65, 0xf1, 0xd2, 0x79, 0xbc, 0x6e, 0x1b, 0x20, 0x60, 0xae, 0x88,
- 0x18, 0xc0, 0xfe, 0x39, 0x6c, 0x06, 0xab, 0x1c, 0x60, 0x4f, 0x4e, 0x49, 0x2f, 0x1d, 0x62, 0x3f,
- 0xf8, 0x08, 0x40, 0x4c, 0xfb, 0x62, 0x1e, 0x2c, 0x54, 0xed, 0xcb, 0x96, 0x0f, 0x57, 0xa0, 0x0d,
- 0x5d, 0x34, 0x0e, 0xbc, 0x2a, 0x27, 0xd2, 0xae, 0x5a, 0x00, 0x58, 0xf8, 0xbb, 0xd6, 0x7e, 0x0f,
- 0xe2, 0xea, 0x0d, 0x96, 0x17, 0x4f, 0x3c, 0x1c, 0x22, 0xaa, 0xe1, 0xb7, 0x06, 0x43, 0xe7, 0xec,
- 0x0d, 0x00, 0x44, 0x6f, 0x54, 0x00, 0x8a, 0x6b, 0x70, 0xf7, 0x22, 0x74, 0x95, 0x63, 0xea, 0x0c,
- 0x28, 0xac, 0xa0, 0x2f, 0x95, 0x9c, 0xf6, 0x7a, 0x99, 0x51, 0x81, 0x65, 0x5e, 0x05, 0x6e, 0x17,
- 0x61, 0x61, 0xd0, 0x48, 0x7f, 0x2d, 0x98, 0x21, 0x7c, 0x94, 0xad, 0x0e, 0x45, 0x2b, 0x4a, 0x50,
- 0x6f, 0x04, 0xf3, 0xe4, 0x61, 0xd9, 0xea, 0xc2, 0xfb, 0xe1, 0x3e, 0x1d, 0xf3, 0xf9, 0x44, 0xed,
- 0x47, 0xc3, 0x86, 0x5f, 0xe5, 0xf4, 0xe8, 0xbb, 0xd2, 0x32, 0x95, 0x4e, 0x91, 0x5e, 0xf6, 0x48,
- 0x68, 0xfa, 0x07, 0x5a, 0xb8, 0xa5, 0x7d, 0x4b, 0x02, 0xb3, 0x4d, 0xdf, 0xe9, 0xa1, 0xe6, 0x62,
- 0xd9, 0xdb, 0x62, 0xed, 0xfb, 0xd3, 0x6c, 0xfb, 0x2e, 0xf3, 0xe0, 0x3e, 0x61, 0x80, 0x1c, 0x99,
- 0x02, 0x62, 0x5a, 0xf7, 0xd7, 0xc3, 0xd6, 0xbd, 0xcc, 0xa1, 0x72, 0x47, 0x2a, 0x6a, 0xdf, 0x86,
- 0x6d, 0xfb, 0x65, 0x32, 0x50, 0x02, 0x35, 0xf3, 0xcb, 0x7b, 0xae, 0x0b, 0x6d, 0x5f, 0x0c, 0x84,
- 0x3f, 0x62, 0x41, 0x58, 0xe5, 0x41, 0xb8, 0x23, 0x41, 0x99, 0x83, 0x52, 0x32, 0x6c, 0x63, 0x1f,
- 0x0d, 0xd1, 0xbc, 0x9f, 0x43, 0xf3, 0xbb, 0xd3, 0xb3, 0x95, 0x0e, 0xd2, 0xd5, 0x11, 0x10, 0x3d,
- 0x09, 0x14, 0x34, 0x1e, 0x96, 0x5b, 0xd5, 0x73, 0xfa, 0x66, 0xb5, 0x7e, 0xae, 0xda, 0xd2, 0x15,
- 0xa8, 0xbd, 0x54, 0x8e, 0xfa, 0x5c, 0x1f, 0x77, 0x6a, 0x62, 0xa8, 0x7c, 0x51, 0x1a, 0xad, 0xdf,
- 0x23, 0x65, 0x4c, 0x04, 0x13, 0xf1, 0x7e, 0x6f, 0x20, 0x53, 0xe9, 0x10, 0xb9, 0x6f, 0x04, 0x44,
- 0x4e, 0x01, 0xb5, 0x5a, 0x3f, 0x57, 0xaa, 0x55, 0x2b, 0xa4, 0x8d, 0x6d, 0xb6, 0x2e, 0xac, 0x23,
- 0x4c, 0x7e, 0x52, 0x06, 0x73, 0x84, 0x35, 0x03, 0x5e, 0x76, 0x2e, 0x09, 0x1a, 0x23, 0x5f, 0x4e,
- 0x69, 0x3c, 0xb2, 0x25, 0xc4, 0xf4, 0x56, 0x3f, 0x92, 0xc2, 0x78, 0x4c, 0x20, 0xf7, 0x48, 0x1a,
- 0x41, 0x0e, 0x74, 0x4d, 0xdb, 0x03, 0x7a, 0xb0, 0x81, 0x23, 0xc8, 0xc7, 0xf3, 0x81, 0x3d, 0x70,
- 0xce, 0x82, 0x57, 0xb4, 0xb5, 0x08, 0x13, 0x4e, 0x6d, 0x73, 0x43, 0xd5, 0x56, 0x1a, 0xa4, 0xb6,
- 0x7f, 0xc9, 0xda, 0x11, 0x4b, 0x3c, 0x7a, 0xb7, 0xc6, 0x8a, 0x1b, 0x71, 0x12, 0xbf, 0x5a, 0x10,
- 0x28, 0x8a, 0xc4, 0x5b, 0x4b, 0xd7, 0x82, 0x19, 0xfc, 0xb7, 0x6e, 0xee, 0x42, 0xda, 0x86, 0xa2,
- 0x04, 0xf5, 0x2c, 0x98, 0x23, 0x19, 0xdb, 0x8e, 0x8d, 0xea, 0x93, 0xc7, 0x19, 0xb8, 0x34, 0x04,
- 0x62, 0xdb, 0x85, 0xa6, 0xef, 0xb8, 0x98, 0x46, 0x81, 0x80, 0xc8, 0x24, 0xa9, 0xb7, 0x82, 0x13,
- 0x96, 0x87, 0x5b, 0xd5, 0x86, 0x07, 0x5d, 0xc2, 0xec, 0xe9, 0xe2, 0xf5, 0xb9, 0x9b, 0xa7, 0x8d,
- 0x83, 0x2f, 0xb4, 0xaf, 0x86, 0x6d, 0x56, 0xe7, 0xf4, 0xec, 0x89, 0x69, 0x2a, 0x9e, 0x4e, 0xcb,
- 0x2e, 0x8f, 0xd6, 0x83, 0x92, 0x7e, 0x73, 0x13, 0xe9, 0xc6, 0x32, 0x5e, 0x18, 0x80, 0xb4, 0x15,
- 0xa3, 0x54, 0x94, 0xb7, 0xdc, 0xa8, 0xb7, 0xf4, 0x7a, 0x4b, 0xd9, 0x1a, 0xa8, 0x7f, 0xdb, 0xda,
- 0xeb, 0xf2, 0x20, 0x7f, 0x9f, 0x63, 0xd9, 0xda, 0x43, 0x39, 0x4e, 0x81, 0x6c, 0xe8, 0x5f, 0x71,
- 0xdc, 0x4b, 0x61, 0xb3, 0x8e, 0x12, 0x92, 0x91, 0x8c, 0x14, 0x4f, 0x1e, 0xaa, 0x78, 0xf9, 0x41,
- 0x8a, 0xf7, 0x13, 0xac, 0xe2, 0xdd, 0xcd, 0x2b, 0xde, 0x4d, 0x03, 0xe4, 0x8f, 0x98, 0x8f, 0xe9,
- 0x2e, 0x3e, 0x15, 0x76, 0x17, 0xf7, 0x72, 0x30, 0x3e, 0x5e, 0x8c, 0x4c, 0x3a, 0x00, 0xbf, 0x94,
- 0x69, 0x37, 0x31, 0x08, 0xea, 0xed, 0x18, 0xa8, 0x77, 0x06, 0xf4, 0x20, 0xd6, 0xc1, 0x8e, 0xe6,
- 0x81, 0x83, 0x9d, 0xca, 0x25, 0xf5, 0x6a, 0x70, 0xa2, 0x52, 0x5d, 0x5e, 0xd6, 0x0d, 0xbd, 0xde,
- 0xda, 0xac, 0xeb, 0xad, 0xf3, 0x0d, 0xe3, 0x7e, 0xa5, 0xab, 0x3d, 0x2c, 0x03, 0x80, 0x24, 0x54,
- 0x36, 0xed, 0x36, 0xec, 0x8a, 0xf5, 0xff, 0xff, 0xaf, 0x94, 0xae, 0x07, 0x89, 0xe8, 0xc7, 0xc0,
- 0xf9, 0x4a, 0x49, 0xbc, 0x55, 0xc6, 0x12, 0x4b, 0x07, 0xea, 0x9b, 0x1f, 0x09, 0xb3, 0x87, 0xab,
- 0xc0, 0xf1, 0x80, 0x1e, 0xcd, 0x3e, 0x78, 0xd1, 0xe0, 0xed, 0x79, 0xb0, 0x40, 0x61, 0x09, 0x56,
- 0x81, 0x5e, 0x20, 0x34, 0x5d, 0xd5, 0xc0, 0x34, 0x5d, 0xf4, 0x09, 0x06, 0x83, 0xf0, 0x59, 0x5d,
- 0x01, 0xb3, 0x3d, 0xe8, 0xee, 0x5a, 0x9e, 0x67, 0x39, 0x36, 0x59, 0xce, 0x5d, 0xb8, 0xe3, 0xb1,
- 0xa1, 0xc4, 0xf1, 0xca, 0xf7, 0xe2, 0xba, 0xe9, 0xfa, 0x56, 0xdb, 0xea, 0x99, 0xb6, 0xbf, 0x1e,
- 0x65, 0x36, 0xd8, 0x2f, 0x91, 0x61, 0x97, 0xca, 0x40, 0xe3, 0x6b, 0x12, 0xa3, 0x12, 0xbf, 0x92,
- 0x62, 0x52, 0x99, 0x48, 0x30, 0x9d, 0x5a, 0x7c, 0x32, 0x53, 0xb5, 0x18, 0x80, 0xf7, 0xb6, 0x7a,
- 0x0d, 0xb8, 0xba, 0x5a, 0x2f, 0x37, 0x0c, 0x43, 0x2f, 0xb7, 0x36, 0xd7, 0x75, 0x63, 0xad, 0xda,
- 0x6c, 0x56, 0x1b, 0xf5, 0xe6, 0x61, 0x5a, 0xbb, 0xf6, 0x19, 0x39, 0xd4, 0x98, 0x0a, 0x6c, 0x77,
- 0x2d, 0x1b, 0x6a, 0xf7, 0x1e, 0x52, 0x61, 0xf8, 0x35, 0x43, 0x71, 0x9c, 0x69, 0xf9, 0x31, 0x38,
- 0xbf, 0x36, 0x3d, 0xce, 0x83, 0x09, 0xfe, 0x07, 0x6e, 0xfe, 0x5f, 0x96, 0xc1, 0x09, 0xa6, 0x21,
- 0x1a, 0x70, 0x77, 0x6c, 0xeb, 0xc0, 0x3f, 0xc8, 0xb6, 0xdd, 0x2a, 0x8f, 0xe9, 0x20, 0xdb, 0xfb,
- 0x00, 0x1b, 0x31, 0xb0, 0xbe, 0x39, 0x84, 0xb5, 0xc6, 0xc1, 0xfa, 0xd4, 0x11, 0x68, 0xa6, 0x43,
- 0xf6, 0x1d, 0x99, 0x22, 0x7b, 0x0d, 0xb8, 0x7a, 0xbd, 0x64, 0xb4, 0xaa, 0xe5, 0xea, 0x7a, 0x09,
- 0x8d, 0xa3, 0xcc, 0x90, 0x1d, 0x63, 0xdc, 0xf3, 0xa0, 0x0f, 0xc4, 0xf7, 0x23, 0x79, 0x70, 0xed,
- 0xe0, 0x8e, 0xb6, 0xbc, 0x63, 0xda, 0xdb, 0x50, 0xb3, 0x44, 0xa0, 0xae, 0x80, 0xa9, 0x36, 0xce,
- 0x4e, 0x70, 0x66, 0x37, 0xfe, 0x12, 0xfa, 0x72, 0x52, 0x82, 0x11, 0x7c, 0xaa, 0xbd, 0x9b, 0x55,
- 0x88, 0x16, 0xaf, 0x10, 0x4f, 0x4f, 0x06, 0xef, 0x00, 0xdf, 0x31, 0xba, 0xf1, 0xb9, 0x50, 0x37,
- 0xce, 0x73, 0xba, 0x51, 0x3e, 0x1c, 0xf9, 0x74, 0x6a, 0xf2, 0x1b, 0x8f, 0x84, 0x0e, 0x20, 0x56,
- 0x9b, 0xac, 0xf8, 0x51, 0x61, 0x60, 0x77, 0xff, 0x6a, 0x19, 0x14, 0x2b, 0xb0, 0x0b, 0x7d, 0xc1,
- 0x19, 0xfc, 0xdf, 0x4b, 0xa2, 0xdb, 0x69, 0x04, 0x06, 0x42, 0x3b, 0x7e, 0x2d, 0xc5, 0xb7, 0x76,
- 0xa1, 0xe7, 0x9b, 0xbb, 0x3d, 0x2c, 0x6a, 0xd9, 0x88, 0x12, 0xb4, 0x1f, 0x92, 0x44, 0x36, 0xdb,
- 0x12, 0x8a, 0xf9, 0x8f, 0xb1, 0x2a, 0xfc, 0x79, 0x09, 0x4c, 0x37, 0xa1, 0xdf, 0x70, 0x3b, 0xd0,
- 0xd5, 0x9a, 0x11, 0x46, 0xd7, 0x83, 0x59, 0x0c, 0x0a, 0x9a, 0x66, 0x86, 0x38, 0xb1, 0x49, 0xea,
- 0x4d, 0x60, 0x21, 0x7c, 0xc4, 0x9f, 0xd3, 0x6e, 0xbc, 0x2f, 0x55, 0xfb, 0x5a, 0x4e, 0xd4, 0x07,
- 0x80, 0x2e, 0xfa, 0x52, 0x6e, 0x62, 0x5a, 0xa9, 0xd8, 0x7e, 0x7e, 0x22, 0xa9, 0xec, 0xb7, 0x49,
- 0xdf, 0x29, 0x01, 0xb0, 0x61, 0x7b, 0x81, 0x5c, 0x1f, 0x9f, 0x42, 0xae, 0xda, 0x3f, 0xe5, 0xd2,
- 0xcd, 0x62, 0xa2, 0x72, 0x62, 0x24, 0xf6, 0x0b, 0x29, 0xd6, 0x16, 0x62, 0x89, 0x4d, 0x60, 0x6b,
- 0xf9, 0x38, 0x28, 0x9e, 0x37, 0xbb, 0x5d, 0xe8, 0x6b, 0xaf, 0x92, 0x41, 0xb1, 0xec, 0x42, 0xd3,
- 0x87, 0x1a, 0x8c, 0x44, 0xa7, 0x81, 0x69, 0xd7, 0x71, 0xfc, 0x75, 0xd3, 0xdf, 0xa1, 0x72, 0x0b,
- 0x9f, 0xd5, 0xa7, 0x82, 0x47, 0x6d, 0xed, 0x75, 0xbb, 0x3e, 0x7c, 0xd0, 0x5f, 0x77, 0xad, 0x5d,
- 0xd3, 0xdd, 0xaf, 0x99, 0xf6, 0xf6, 0x9e, 0xb9, 0x0d, 0x29, 0x7b, 0x71, 0xaf, 0xa9, 0xa3, 0xca,
- 0x2f, 0xb1, 0x1d, 0xcf, 0xbd, 0xbc, 0xd0, 0xbf, 0x93, 0x93, 0x13, 0x61, 0x71, 0x91, 0xb0, 0x17,
- 0xd3, 0xf3, 0x68, 0x60, 0x7a, 0xd7, 0x86, 0xbb, 0x8e, 0x6d, 0xb5, 0x03, 0x6b, 0x35, 0x78, 0xd6,
- 0x3e, 0x16, 0xa2, 0xb1, 0xc4, 0xa1, 0xb1, 0x28, 0x5c, 0x4a, 0x3a, 0x28, 0x9a, 0x23, 0xf4, 0x3b,
- 0xd7, 0x81, 0x47, 0x93, 0x6e, 0x64, 0xb3, 0xd5, 0xd8, 0x2c, 0x1b, 0x7a, 0xa9, 0xa5, 0x6f, 0xd6,
- 0x1a, 0xe5, 0x52, 0x6d, 0xd3, 0xd0, 0xd7, 0x1b, 0x0a, 0x44, 0xb3, 0xf3, 0x29, 0x03, 0xb6, 0x9d,
- 0xcb, 0xd0, 0xd5, 0x9e, 0x9b, 0x13, 0x83, 0x28, 0x41, 0x28, 0x49, 0xf0, 0xc9, 0x22, 0xf0, 0xfd,
- 0x84, 0xb0, 0x9f, 0x11, 0x15, 0x2c, 0x65, 0x3e, 0xa6, 0xc5, 0x7c, 0x5c, 0xa8, 0x8f, 0x49, 0x24,
- 0xf5, 0x08, 0x00, 0xe9, 0x1f, 0x25, 0x30, 0x55, 0x76, 0xec, 0xcb, 0xd0, 0xf5, 0xd9, 0x49, 0x16,
- 0x8b, 0x43, 0xae, 0x0f, 0x87, 0xd3, 0x60, 0x0a, 0xda, 0xbe, 0xeb, 0xf4, 0x82, 0x59, 0x56, 0xf0,
- 0xa8, 0xbd, 0x31, 0xad, 0x84, 0x69, 0xc9, 0xf1, 0x6b, 0xb3, 0x83, 0x0b, 0xe2, 0xd8, 0x93, 0xfb,
- 0xda, 0xce, 0xc3, 0x69, 0x70, 0x19, 0xcc, 0x40, 0xf6, 0xfd, 0xd8, 0x57, 0x64, 0x30, 0x4f, 0xda,
- 0x6d, 0x13, 0x62, 0xb3, 0x50, 0x6b, 0xb0, 0xeb, 0x9c, 0x7d, 0xc2, 0x5f, 0x3d, 0xc6, 0x89, 0xbf,
- 0x68, 0xf6, 0x7a, 0xe1, 0x0a, 0xf9, 0xea, 0x31, 0x83, 0x3e, 0x13, 0x35, 0x5f, 0x2a, 0x82, 0xbc,
- 0xb9, 0xe7, 0xef, 0x68, 0xdf, 0x12, 0x9e, 0xf1, 0x72, 0xfd, 0x08, 0xe5, 0x27, 0x06, 0x92, 0x93,
- 0xa0, 0xe0, 0x3b, 0x97, 0x60, 0x20, 0x07, 0xf2, 0x80, 0xe0, 0x30, 0x7b, 0xbd, 0x16, 0x7e, 0x41,
- 0xe1, 0x08, 0x9e, 0x91, 0x81, 0x65, 0xb6, 0xdb, 0xce, 0x9e, 0xed, 0x57, 0x83, 0x55, 0xf2, 0x28,
- 0x41, 0xfb, 0x82, 0xd0, 0x36, 0x94, 0x00, 0x83, 0xe9, 0x20, 0xbb, 0x38, 0x42, 0x53, 0x5a, 0x04,
- 0xb7, 0x94, 0xd6, 0xd7, 0x37, 0x5b, 0x8d, 0xfb, 0xf5, 0x7a, 0x64, 0xed, 0x6e, 0x56, 0xeb, 0x9b,
- 0xad, 0x55, 0x7d, 0xb3, 0xbc, 0x61, 0xe0, 0xc5, 0xc9, 0x52, 0xb9, 0xdc, 0xd8, 0xa8, 0xb7, 0x14,
- 0xa8, 0xbd, 0x55, 0x02, 0x73, 0xe5, 0xae, 0xe3, 0x85, 0x08, 0x5f, 0x17, 0x21, 0x1c, 0x8a, 0x31,
- 0xc7, 0x88, 0x51, 0xfb, 0x5f, 0x39, 0x51, 0x3f, 0x99, 0x40, 0x20, 0x0c, 0xf9, 0x98, 0x5e, 0xea,
- 0x8d, 0x42, 0x7e, 0x32, 0xc3, 0xe9, 0x65, 0xdf, 0x24, 0x3e, 0xbb, 0x0c, 0xa6, 0x4a, 0x44, 0x31,
- 0xb4, 0x3f, 0xc9, 0x81, 0x62, 0xd9, 0xb1, 0xb7, 0xac, 0x6d, 0x64, 0x41, 0x42, 0xdb, 0xbc, 0xd8,
- 0x85, 0x15, 0xd3, 0x37, 0x2f, 0x5b, 0xf0, 0x0a, 0xae, 0xc0, 0xb4, 0xd1, 0x97, 0x8a, 0x98, 0xa2,
- 0x29, 0xf0, 0xe2, 0xde, 0x36, 0x66, 0x6a, 0xda, 0x60, 0x93, 0xd0, 0xf8, 0x41, 0x1e, 0xd7, 0x5d,
- 0xe8, 0xc2, 0x2e, 0x34, 0x3d, 0x88, 0xe6, 0x62, 0x36, 0xec, 0x62, 0xa5, 0x9d, 0x36, 0xe2, 0x5e,
- 0xab, 0x67, 0xc1, 0x1c, 0x79, 0x85, 0xed, 0x1f, 0x0f, 0xab, 0xf1, 0xb4, 0xc1, 0xa5, 0xa9, 0x4f,
- 0x00, 0x05, 0xf8, 0xa0, 0xef, 0x9a, 0xa7, 0x3b, 0x18, 0xaf, 0x47, 0x2d, 0x12, 0x47, 0xd9, 0xc5,
- 0xc0, 0x51, 0x76, 0xb1, 0x89, 0xdd, 0x68, 0x0d, 0x92, 0x4b, 0xfb, 0x9f, 0xd3, 0xa1, 0xf5, 0xf2,
- 0x79, 0x39, 0x52, 0x0c, 0x15, 0xe4, 0x6d, 0x73, 0x17, 0x52, 0xbd, 0xc0, 0xff, 0xd5, 0x5b, 0xc0,
- 0x71, 0xf3, 0xb2, 0xe9, 0x9b, 0x6e, 0xcd, 0x69, 0x9b, 0x5d, 0x3c, 0x6c, 0x06, 0x2d, 0xbf, 0xff,
- 0x05, 0xde, 0xb4, 0xf2, 0x1d, 0x17, 0xe2, 0x5c, 0xc1, 0xa6, 0x55, 0x90, 0x80, 0xa8, 0x5b, 0x6d,
- 0xc7, 0xc6, 0xfc, 0xcb, 0x06, 0xfe, 0x8f, 0xa4, 0xd2, 0xb1, 0x3c, 0x54, 0x11, 0x4c, 0xa5, 0x4e,
- 0xf6, 0x53, 0x9a, 0xfb, 0x76, 0x1b, 0x6f, 0x58, 0x4d, 0x1b, 0x71, 0xaf, 0xd5, 0x25, 0x30, 0x4b,
- 0x77, 0x5f, 0xd6, 0x90, 0x5e, 0x15, 0xb1, 0x5e, 0x5d, 0xcf, 0xbb, 0x21, 0x12, 0x3c, 0x17, 0xeb,
- 0x51, 0x3e, 0x83, 0xfd, 0x48, 0x7d, 0x06, 0x78, 0x34, 0x7d, 0x2c, 0xef, 0x79, 0xbe, 0xb3, 0x4b,
- 0x40, 0x5f, 0xb6, 0xba, 0xa4, 0x06, 0x53, 0xb8, 0x06, 0x49, 0x59, 0xd4, 0x3b, 0xc0, 0xc9, 0x9e,
- 0x0b, 0xb7, 0xa0, 0x7b, 0xc1, 0xdc, 0xdd, 0x7b, 0xb0, 0xe5, 0x9a, 0xb6, 0xd7, 0x73, 0x5c, 0xff,
- 0xf4, 0x34, 0x66, 0x7e, 0xe0, 0x3b, 0xf5, 0x56, 0x70, 0xe2, 0x01, 0xcf, 0xb1, 0x4b, 0x3d, 0xab,
- 0x66, 0x79, 0x3e, 0xb4, 0x4b, 0x9d, 0x8e, 0x7b, 0x7a, 0x06, 0x97, 0x75, 0xf0, 0x85, 0x7a, 0x23,
- 0x98, 0x7f, 0xc0, 0xb1, 0xec, 0xa6, 0xef, 0x42, 0x73, 0x77, 0xc3, 0xed, 0x9e, 0x06, 0x64, 0x83,
- 0x88, 0x4b, 0xa4, 0x9d, 0xef, 0x34, 0x28, 0x12, 0x48, 0xb4, 0x97, 0x14, 0x84, 0xbd, 0x9a, 0xa9,
- 0x90, 0x12, 0xad, 0xc5, 0xdb, 0xc1, 0x14, 0xed, 0x35, 0x31, 0xf8, 0xb3, 0x77, 0x9c, 0xea, 0x5b,
- 0x20, 0xa1, 0x54, 0x8c, 0x20, 0x9b, 0xfa, 0x24, 0x50, 0x6c, 0x63, 0x51, 0x61, 0x3d, 0x98, 0xbd,
- 0xe3, 0xd1, 0x83, 0x0b, 0xc5, 0x59, 0x0c, 0x9a, 0x55, 0xfb, 0xa2, 0x2c, 0xe4, 0x08, 0x9d, 0xc4,
- 0x71, 0xba, 0x9e, 0xe2, 0xab, 0xd2, 0x08, 0x5d, 0xf1, 0xad, 0xe0, 0x66, 0xda, 0xcf, 0x52, 0x9b,
- 0xa6, 0xb2, 0xb9, 0xb4, 0x11, 0xcc, 0x6a, 0x91, 0xa5, 0xd3, 0x6c, 0x95, 0x8c, 0xd6, 0x66, 0xbd,
- 0x51, 0x41, 0xb3, 0xe1, 0x5b, 0xc0, 0x4d, 0x43, 0x72, 0xeb, 0xad, 0xcd, 0x7a, 0x69, 0x4d, 0x57,
- 0xb6, 0x78, 0x7b, 0xa9, 0xd9, 0x6a, 0xac, 0x6f, 0x1a, 0x1b, 0xf5, 0x7a, 0xb5, 0xbe, 0x42, 0x88,
- 0x21, 0x03, 0xf5, 0x54, 0x94, 0xe1, 0xbc, 0x51, 0x6d, 0xe9, 0x9b, 0xe5, 0x46, 0x7d, 0xb9, 0xba,
- 0xa2, 0x58, 0xc3, 0x8c, 0xad, 0x07, 0xd4, 0xeb, 0xc1, 0xb5, 0x1c, 0x27, 0xd5, 0x46, 0x1d, 0x4d,
- 0xd1, 0xcb, 0xa5, 0x7a, 0x59, 0x47, 0xf3, 0xf1, 0x4b, 0xaa, 0x06, 0xae, 0x26, 0xe4, 0x36, 0x97,
- 0xab, 0x35, 0x76, 0x57, 0xed, 0xd3, 0x39, 0xf5, 0x34, 0xb8, 0x8a, 0x7d, 0x47, 0x7d, 0x22, 0x94,
- 0x5f, 0xcf, 0xa9, 0x37, 0x82, 0xeb, 0xb8, 0xaf, 0xc8, 0x06, 0xd9, 0x66, 0xb5, 0xb2, 0xb9, 0x56,
- 0x6d, 0xae, 0x95, 0x5a, 0xe5, 0x55, 0xe5, 0x33, 0x78, 0xfa, 0x12, 0xda, 0xe3, 0x8c, 0x77, 0xf2,
- 0xcb, 0x58, 0x3b, 0xa1, 0xc4, 0x2b, 0xea, 0xe3, 0x07, 0xc2, 0x9e, 0x6c, 0x17, 0x7f, 0x32, 0x1c,
- 0x71, 0x2a, 0x9c, 0x0a, 0xdd, 0x9e, 0x82, 0x56, 0x3a, 0x1d, 0x6a, 0x8d, 0xa0, 0x42, 0xd7, 0x83,
- 0x6b, 0xeb, 0x3a, 0x41, 0xca, 0xd0, 0xcb, 0x8d, 0x73, 0xba, 0xb1, 0x79, 0xbe, 0x54, 0xab, 0xe9,
- 0xad, 0xcd, 0xe5, 0xaa, 0xd1, 0x6c, 0x29, 0x5b, 0xda, 0x3f, 0x49, 0xe1, 0xb2, 0x14, 0x23, 0xad,
- 0x3f, 0x91, 0xd2, 0x36, 0xeb, 0xc4, 0xe5, 0xa7, 0xef, 0x02, 0x45, 0xcf, 0x37, 0xfd, 0x3d, 0x8f,
- 0xb6, 0xea, 0xc7, 0x0c, 0x6e, 0xd5, 0x8b, 0x4d, 0x9c, 0xc9, 0xa0, 0x99, 0xb5, 0x2f, 0xe6, 0xd2,
- 0x34, 0xd3, 0x31, 0xac, 0x4c, 0x59, 0x23, 0x88, 0xf8, 0x0c, 0xd0, 0x02, 0x6d, 0xaf, 0x36, 0x37,
- 0x4b, 0x35, 0x43, 0x2f, 0x55, 0x2e, 0x84, 0xeb, 0x51, 0x50, 0xbd, 0x1a, 0x9c, 0xd8, 0xa8, 0x97,
- 0x96, 0x6a, 0x3a, 0x6e, 0x2e, 0x8d, 0x7a, 0x5d, 0x2f, 0x23, 0xb9, 0xff, 0x10, 0xde, 0xfd, 0x41,
- 0x56, 0x39, 0xe6, 0x1b, 0x59, 0x4e, 0x8c, 0xfc, 0xff, 0x4a, 0xd8, 0xcd, 0x2d, 0xd2, 0x30, 0x96,
- 0xd6, 0x78, 0x71, 0xf8, 0x82, 0x90, 0x67, 0x9b, 0x10, 0x27, 0xe9, 0xf0, 0xf8, 0xfe, 0x11, 0xf0,
- 0xb8, 0x1a, 0x9c, 0x60, 0xf1, 0xc0, 0x1e, 0x6e, 0xf1, 0x30, 0xfc, 0xb1, 0x0c, 0xa6, 0xd6, 0xac,
- 0x6d, 0xec, 0x5e, 0xbc, 0x17, 0x19, 0x28, 0x0b, 0x40, 0x0a, 0xbd, 0x77, 0x24, 0xab, 0xc3, 0x4d,
- 0xe6, 0x25, 0xf1, 0xf5, 0x16, 0xa1, 0x09, 0xfb, 0x17, 0x53, 0xf7, 0x4c, 0x94, 0xe1, 0x98, 0x9e,
- 0xe9, 0x85, 0x52, 0x9a, 0x9e, 0x69, 0x30, 0xad, 0x54, 0x30, 0x21, 0xd3, 0xc1, 0x85, 0xcf, 0xde,
- 0xb3, 0x5c, 0xd8, 0xc1, 0x66, 0x22, 0xae, 0xb7, 0x6c, 0xf0, 0x89, 0x67, 0xdd, 0xc3, 0x81, 0xc9,
- 0x7a, 0xd9, 0xcc, 0x81, 0xe9, 0x70, 0x34, 0xc1, 0x1b, 0x3e, 0xe8, 0xa5, 0x5e, 0x6f, 0x6c, 0xac,
- 0xac, 0x6e, 0x2e, 0x1b, 0xba, 0x4e, 0x97, 0x88, 0xb7, 0xb5, 0x77, 0x49, 0x60, 0x9e, 0xd6, 0x90,
- 0x7a, 0x4f, 0x5c, 0x17, 0x0b, 0x32, 0x85, 0xe3, 0xdf, 0xd9, 0xe9, 0xc9, 0x0a, 0x0f, 0xc7, 0x13,
- 0x93, 0x44, 0x98, 0xe8, 0x3e, 0xf1, 0xa6, 0xb0, 0x09, 0xdd, 0xc7, 0x81, 0xf2, 0x94, 0xd4, 0x14,
- 0xb3, 0x9f, 0xa2, 0xbc, 0x04, 0x80, 0x62, 0x13, 0x76, 0x61, 0xdb, 0xd7, 0x3e, 0x24, 0x8f, 0xdc,
- 0x26, 0xe2, 0xcc, 0x6d, 0x39, 0x95, 0xb9, 0x9d, 0xcf, 0xc0, 0xdc, 0x2e, 0x8c, 0x6e, 0x6e, 0x17,
- 0xd3, 0x9a, 0xdb, 0x53, 0x71, 0xe6, 0x76, 0x42, 0xaf, 0x31, 0x9d, 0xd8, 0x6b, 0xf4, 0x19, 0xea,
- 0x46, 0x8d, 0x9a, 0xf4, 0x7c, 0x22, 0x55, 0xe6, 0x4f, 0x14, 0xd3, 0x8e, 0xe3, 0x04, 0xf8, 0xa3,
- 0x35, 0xcf, 0x7f, 0xac, 0x90, 0x66, 0xdc, 0x1f, 0xc8, 0x71, 0xba, 0x56, 0xf2, 0xca, 0x7c, 0x06,
- 0x8b, 0x8e, 0xea, 0x0d, 0xe0, 0xba, 0xe8, 0x79, 0x53, 0x7f, 0x56, 0xb5, 0xd9, 0x6a, 0x62, 0x9b,
- 0xbc, 0xdc, 0x30, 0x8c, 0x8d, 0x75, 0xb2, 0x5d, 0x75, 0x0a, 0xa8, 0x11, 0x15, 0x63, 0xa3, 0x4e,
- 0x2c, 0xf0, 0x6d, 0x9e, 0xfa, 0x72, 0xb5, 0x5e, 0xd9, 0x0c, 0x47, 0xb5, 0xfa, 0x72, 0x43, 0xd9,
- 0x51, 0x17, 0xc1, 0x2d, 0x0c, 0x75, 0xdc, 0x01, 0x92, 0x12, 0x4a, 0xf5, 0xca, 0xe6, 0x5a, 0x5d,
- 0x5f, 0x6b, 0xd4, 0xab, 0x65, 0x9c, 0xde, 0xd4, 0x5b, 0x8a, 0x85, 0x4c, 0xc1, 0x3e, 0x9b, 0xbf,
- 0xa9, 0x97, 0x8c, 0xf2, 0xaa, 0x6e, 0x90, 0x22, 0x1f, 0x50, 0x6f, 0x02, 0x67, 0x4b, 0xf5, 0x46,
- 0x0b, 0xa5, 0x94, 0xea, 0x17, 0x5a, 0x17, 0xd6, 0xf5, 0xcd, 0x75, 0xa3, 0x51, 0xd6, 0x9b, 0x4d,
- 0x34, 0x92, 0xd2, 0x19, 0x82, 0xd2, 0x55, 0x9f, 0x0e, 0xee, 0x62, 0x58, 0xd3, 0x5b, 0xd8, 0x37,
- 0x62, 0xad, 0x81, 0xdd, 0xe3, 0x2a, 0xfa, 0xe6, 0x6a, 0xa9, 0xb9, 0x59, 0xad, 0x97, 0x1b, 0x6b,
- 0xeb, 0xa5, 0x56, 0x15, 0x0d, 0xb8, 0xeb, 0x46, 0xa3, 0xd5, 0xd8, 0x3c, 0xa7, 0x1b, 0xcd, 0x6a,
- 0xa3, 0xae, 0xd8, 0xa8, 0xca, 0xcc, 0x08, 0x1d, 0x58, 0x4a, 0x8e, 0x7a, 0x2d, 0x38, 0x1d, 0xa4,
- 0xd7, 0x1a, 0x48, 0xd0, 0xcc, 0x9c, 0xa1, 0xc7, 0xda, 0x59, 0xcd, 0x56, 0xc3, 0x20, 0xb3, 0x86,
- 0xb5, 0xea, 0x8a, 0x81, 0xa6, 0x3a, 0xca, 0xb3, 0x33, 0x9d, 0x53, 0xfc, 0x8b, 0x04, 0xf2, 0x4d,
- 0xdf, 0xe9, 0x69, 0xdf, 0x19, 0x75, 0x87, 0x67, 0x00, 0x70, 0xb1, 0x2b, 0x44, 0xc5, 0xf4, 0x4d,
- 0xba, 0x5a, 0xc3, 0xa4, 0x68, 0xbf, 0x26, 0xbc, 0x7f, 0x1b, 0x59, 0x5d, 0x4e, 0x2f, 0x66, 0xf8,
- 0xf8, 0xa6, 0xd8, 0x71, 0xc8, 0x78, 0x42, 0xe9, 0xda, 0xc3, 0x8f, 0x8c, 0xb2, 0x43, 0xab, 0x81,
- 0x53, 0x0c, 0xac, 0x48, 0xfe, 0x81, 0xca, 0x40, 0xf5, 0x51, 0xe0, 0xaa, 0x3e, 0xe5, 0xc3, 0x3a,
- 0xb7, 0xa5, 0x7e, 0x07, 0x78, 0x0c, 0xa3, 0xfe, 0xfa, 0x5a, 0xe3, 0x9c, 0x1e, 0x2a, 0x7a, 0xa5,
- 0xd4, 0x2a, 0x29, 0xdb, 0xda, 0xe7, 0x65, 0x90, 0x5f, 0x73, 0x2e, 0xf7, 0x6f, 0x9b, 0xdb, 0xf0,
- 0x0a, 0xb3, 0xb7, 0x12, 0x3c, 0xf2, 0x47, 0xb0, 0x84, 0xc4, 0xbe, 0x16, 0xef, 0x22, 0xf3, 0x05,
- 0x29, 0x8d, 0xd8, 0xd7, 0x0e, 0xeb, 0x17, 0xf3, 0x37, 0xa3, 0x88, 0x3d, 0x46, 0xb4, 0x50, 0x3d,
- 0x0b, 0xce, 0x44, 0x2f, 0xaa, 0x15, 0xbd, 0xde, 0xaa, 0x2e, 0x5f, 0x88, 0x84, 0x5b, 0x35, 0x84,
- 0xc4, 0x3f, 0xac, 0x9b, 0x4b, 0x5e, 0x2b, 0x38, 0x0d, 0x4e, 0x46, 0xef, 0x56, 0xf4, 0x56, 0xf0,
- 0xe6, 0x01, 0xed, 0xa1, 0x02, 0x98, 0x23, 0xdd, 0xfe, 0x46, 0xaf, 0x83, 0xac, 0xef, 0x27, 0x45,
- 0xe8, 0xde, 0x0c, 0x8e, 0x57, 0xd7, 0x97, 0x9b, 0x4d, 0xdf, 0x71, 0xcd, 0x6d, 0x88, 0xc7, 0x51,
- 0x22, 0xad, 0xfe, 0x64, 0xed, 0xbd, 0xc2, 0xab, 0xff, 0xfc, 0x50, 0x43, 0xca, 0x8c, 0x41, 0xfd,
- 0x2b, 0x42, 0xab, 0xf5, 0x02, 0x04, 0xd3, 0xa1, 0xff, 0xc0, 0x98, 0xdb, 0x5c, 0x3c, 0x2e, 0x5b,
- 0x67, 0x9f, 0x2f, 0x81, 0x99, 0x96, 0xb5, 0x0b, 0x9f, 0xe3, 0xd8, 0xd0, 0x53, 0xa7, 0x80, 0xbc,
- 0xb2, 0xd6, 0x52, 0x8e, 0xa1, 0x3f, 0x68, 0x5a, 0x94, 0xc3, 0x7f, 0x74, 0x54, 0x00, 0xfa, 0x53,
- 0x6a, 0x29, 0x32, 0xfa, 0xb3, 0xa6, 0xb7, 0x94, 0x3c, 0xfa, 0x53, 0xd7, 0x5b, 0x4a, 0x01, 0xfd,
- 0x59, 0xaf, 0xb5, 0x94, 0x22, 0xfa, 0x53, 0x6d, 0xb6, 0x94, 0x29, 0xf4, 0x67, 0xa9, 0xd9, 0x52,
- 0xa6, 0xd1, 0x9f, 0x73, 0xcd, 0x96, 0x32, 0x83, 0xfe, 0x94, 0x5b, 0x2d, 0x05, 0xa0, 0x3f, 0xf7,
- 0x35, 0x5b, 0xca, 0x2c, 0xfa, 0x53, 0x2a, 0xb7, 0x94, 0x39, 0xfc, 0x47, 0x6f, 0x29, 0xf3, 0xe8,
- 0x4f, 0xb3, 0xd9, 0x52, 0x16, 0x30, 0xe5, 0x66, 0x4b, 0x39, 0x8e, 0xcb, 0xaa, 0xb6, 0x14, 0x05,
- 0xfd, 0x59, 0x6d, 0xb6, 0x94, 0x13, 0x38, 0x73, 0xb3, 0xa5, 0xa8, 0xb8, 0xd0, 0x66, 0x4b, 0xb9,
- 0x0a, 0xe7, 0x69, 0xb6, 0x94, 0x93, 0xb8, 0x88, 0x66, 0x4b, 0xb9, 0x1a, 0xb3, 0xa1, 0xb7, 0x94,
- 0x53, 0x38, 0x8f, 0xd1, 0x52, 0x1e, 0x85, 0x5f, 0xd5, 0x5b, 0xca, 0x69, 0xcc, 0x98, 0xde, 0x52,
- 0xae, 0xc1, 0x7f, 0x8c, 0x96, 0xa2, 0xe1, 0x57, 0xa5, 0x96, 0xf2, 0x68, 0xed, 0x31, 0x60, 0x66,
- 0x05, 0xfa, 0x04, 0x44, 0x4d, 0x01, 0xf2, 0x0a, 0xf4, 0xd9, 0x89, 0xf8, 0xab, 0xf2, 0xe0, 0x51,
- 0x74, 0xf1, 0x66, 0xd9, 0x75, 0x76, 0x6b, 0x70, 0xdb, 0x6c, 0xef, 0xeb, 0x0f, 0x22, 0x83, 0x4f,
- 0x7b, 0x71, 0x8e, 0x5b, 0xd1, 0xee, 0x45, 0xbd, 0x11, 0xfe, 0x9f, 0x68, 0x20, 0x07, 0x6b, 0xd4,
- 0x32, 0xbf, 0x46, 0x1d, 0x67, 0x12, 0xe6, 0x45, 0x26, 0x92, 0xff, 0xc0, 0x36, 0x06, 0x6e, 0x43,
- 0x2a, 0xd7, 0xb7, 0x21, 0x85, 0x5a, 0x58, 0x0f, 0xba, 0x9e, 0x63, 0x9b, 0xdd, 0x26, 0x75, 0x3f,
- 0x22, 0x73, 0xd5, 0xfe, 0x64, 0xf5, 0x99, 0x41, 0xa3, 0x22, 0x06, 0xdf, 0xd3, 0x92, 0x96, 0xb7,
- 0xfa, 0x25, 0x14, 0xd3, 0xbe, 0x3e, 0x13, 0xb6, 0xaf, 0x16, 0xd7, 0xbe, 0x9e, 0x71, 0x08, 0xda,
- 0xe9, 0x9a, 0x5a, 0x75, 0xb4, 0xa9, 0x68, 0xe4, 0x9c, 0x1f, 0xec, 0x7f, 0xc9, 0xda, 0xe7, 0x25,
- 0x70, 0x4a, 0xb7, 0x07, 0x4d, 0x65, 0x58, 0x35, 0x7a, 0x2b, 0x0b, 0xcd, 0x3a, 0x2f, 0xd2, 0xbb,
- 0x06, 0x56, 0x7b, 0x30, 0xcd, 0x18, 0x89, 0xfe, 0x56, 0x28, 0xd1, 0x26, 0x27, 0xd1, 0x7b, 0x47,
- 0x27, 0x9d, 0x4e, 0xa0, 0xf5, 0xb1, 0xf6, 0x5d, 0x79, 0xed, 0x2f, 0x24, 0x70, 0x82, 0x78, 0x10,
- 0xde, 0x47, 0x66, 0x4e, 0xb8, 0xb7, 0xe7, 0xad, 0xaf, 0x6e, 0x34, 0xcb, 0x22, 0xfa, 0xcd, 0xa4,
- 0x68, 0xaf, 0x63, 0x05, 0x7e, 0x3f, 0x2f, 0xf0, 0x98, 0x7e, 0xbc, 0xbf, 0xb8, 0x18, 0x59, 0xff,
- 0x7a, 0x28, 0xeb, 0x3a, 0x27, 0xeb, 0xbb, 0x46, 0xa2, 0x7a, 0xb4, 0x62, 0xfe, 0x6a, 0x1e, 0x3c,
- 0x86, 0x70, 0x48, 0x15, 0x81, 0xf4, 0x83, 0x25, 0xbb, 0x63, 0x40, 0xcf, 0x37, 0x5d, 0x9f, 0x0b,
- 0xbd, 0xd2, 0x37, 0x35, 0xcf, 0x65, 0x30, 0x35, 0x97, 0x86, 0x4e, 0xcd, 0xb5, 0xf7, 0xb0, 0x06,
- 0xde, 0x79, 0x1e, 0xd9, 0x52, 0x02, 0x06, 0x31, 0x35, 0x8c, 0x6b, 0x51, 0xa1, 0xe5, 0xf7, 0x3d,
- 0x1c, 0xca, 0xcb, 0x87, 0x2e, 0x21, 0x1d, 0xe2, 0xbf, 0x36, 0x5e, 0x4b, 0x3c, 0xcf, 0xbe, 0xe3,
- 0xcd, 0x46, 0xa5, 0x93, 0xe9, 0x14, 0xea, 0xa5, 0xd3, 0x60, 0x06, 0x77, 0x39, 0x35, 0xcb, 0xbe,
- 0xa4, 0xfd, 0xb9, 0x0c, 0xe6, 0xea, 0xf0, 0x4a, 0x79, 0xc7, 0xec, 0x76, 0xa1, 0xbd, 0x0d, 0xb5,
- 0x07, 0x38, 0xdb, 0xde, 0xec, 0xf5, 0xea, 0xd1, 0xfe, 0x70, 0xf0, 0xa8, 0xde, 0x0b, 0x0a, 0x5e,
- 0xdb, 0x09, 0x83, 0x3a, 0x7c, 0x67, 0xcc, 0xea, 0x75, 0x69, 0xcf, 0xdf, 0x59, 0xc4, 0x65, 0x95,
- 0x7a, 0x56, 0x13, 0x7d, 0x60, 0x90, 0xef, 0xe8, 0x38, 0xf9, 0x57, 0x03, 0x3b, 0xe3, 0x5c, 0x42,
- 0x67, 0x1c, 0x32, 0xbe, 0xc8, 0x32, 0x1d, 0xb3, 0x48, 0x72, 0x3d, 0x98, 0x6d, 0x07, 0x59, 0xc2,
- 0x53, 0x7a, 0x6c, 0x92, 0xf6, 0x97, 0xa9, 0xba, 0x6b, 0xa1, 0xc2, 0xd3, 0x69, 0x15, 0x1c, 0xb3,
- 0xa9, 0x79, 0x35, 0x38, 0xd1, 0x6a, 0x34, 0x36, 0xd7, 0x4a, 0xf5, 0x0b, 0x51, 0x6c, 0x95, 0x2d,
- 0xed, 0x95, 0x79, 0xb0, 0xd0, 0x74, 0xba, 0x97, 0x61, 0x84, 0x73, 0x95, 0x73, 0xff, 0x64, 0xe5,
- 0x94, 0x3b, 0x20, 0x27, 0xf5, 0x14, 0x28, 0x9a, 0xb6, 0x77, 0x05, 0x06, 0xe6, 0x3f, 0x7d, 0xa2,
- 0x30, 0x7e, 0x84, 0xed, 0x08, 0x0c, 0x1e, 0xc6, 0xbb, 0x87, 0x48, 0x92, 0xe7, 0x2a, 0x06, 0xc8,
- 0xb3, 0x60, 0xce, 0x23, 0x5e, 0x22, 0x2d, 0xc6, 0x19, 0x88, 0x4b, 0xc3, 0x2c, 0x12, 0x37, 0x25,
- 0x99, 0xb2, 0x88, 0x9f, 0xb4, 0x87, 0xc3, 0xfe, 0x63, 0x83, 0x83, 0xb8, 0x74, 0x18, 0xc6, 0xd2,
- 0x81, 0xfc, 0xea, 0x71, 0x4f, 0xe2, 0x4f, 0x83, 0x93, 0xc1, 0x09, 0xf5, 0xf2, 0x6a, 0xa9, 0x56,
- 0xd3, 0xeb, 0x2b, 0xfa, 0x66, 0xb5, 0x42, 0xf6, 0x93, 0xa3, 0x94, 0x52, 0xab, 0xa5, 0xaf, 0xad,
- 0xb7, 0x9a, 0x9b, 0xfa, 0xb3, 0xca, 0xba, 0x5e, 0xc1, 0x0e, 0xd8, 0xf8, 0x04, 0x65, 0xe0, 0x2a,
- 0x5f, 0xaa, 0x37, 0xcf, 0xeb, 0x86, 0xb2, 0x73, 0xb6, 0x04, 0x66, 0x99, 0x81, 0x02, 0x71, 0x57,
- 0x81, 0x5b, 0xe6, 0x5e, 0x97, 0x9a, 0xe3, 0xca, 0x31, 0xc4, 0x1d, 0x96, 0x4d, 0xc3, 0xee, 0xee,
- 0x2b, 0x39, 0x55, 0x01, 0x73, 0xec, 0x98, 0xa0, 0x48, 0xda, 0x3b, 0xaf, 0x05, 0x33, 0xe7, 0x1d,
- 0xf7, 0x12, 0xf6, 0x1a, 0xd6, 0x3e, 0x40, 0x62, 0xb0, 0x05, 0x11, 0x25, 0x18, 0x03, 0xec, 0xd5,
- 0xe2, 0x6e, 0x62, 0x01, 0xb5, 0xc5, 0xa1, 0x51, 0x23, 0xae, 0x07, 0xb3, 0x57, 0x82, 0xdc, 0x51,
- 0x4b, 0x67, 0x92, 0xb4, 0x5f, 0x14, 0x73, 0xfc, 0x1a, 0x5e, 0x64, 0xf6, 0xab, 0xfe, 0x6f, 0x97,
- 0x40, 0x71, 0x05, 0xfa, 0xa5, 0x6e, 0x97, 0x95, 0xdb, 0xcb, 0x85, 0xcf, 0x91, 0x72, 0x95, 0x28,
- 0x75, 0xbb, 0xf1, 0x8d, 0x8a, 0x11, 0x50, 0x70, 0xde, 0x89, 0x4b, 0x13, 0xf4, 0xd2, 0x1e, 0x52,
- 0x60, 0xf6, 0x12, 0xfb, 0x58, 0xe4, 0x9a, 0xfd, 0x7a, 0xc6, 0x4c, 0x7a, 0x62, 0x14, 0x7f, 0x2f,
- 0x97, 0xec, 0x24, 0x15, 0xe4, 0x53, 0xef, 0x07, 0x53, 0x7b, 0x1e, 0x2c, 0x9b, 0x5e, 0x30, 0xb4,
- 0xf1, 0x35, 0x6d, 0x5c, 0x7c, 0x00, 0xb6, 0xfd, 0xc5, 0xea, 0x2e, 0x9a, 0xf8, 0x6c, 0x90, 0x8c,
- 0x61, 0xbc, 0x22, 0xfa, 0x6c, 0x04, 0x14, 0xd0, 0xb4, 0xf3, 0x8a, 0xe5, 0xef, 0x94, 0x77, 0x4c,
- 0x9f, 0x6e, 0xb6, 0x84, 0xcf, 0xda, 0x4b, 0x46, 0x80, 0x33, 0xd1, 0x61, 0x27, 0xf6, 0x38, 0x7a,
- 0x6a, 0x10, 0xc7, 0xe0, 0x65, 0x33, 0x0a, 0x88, 0x7f, 0x2b, 0x81, 0x7c, 0xa3, 0x07, 0x6d, 0xe1,
- 0xb3, 0x97, 0xa1, 0x6c, 0xa5, 0x3e, 0xd9, 0x3e, 0x2c, 0xee, 0x16, 0x1c, 0x56, 0x1a, 0x95, 0x1c,
- 0x23, 0xd9, 0xdb, 0x40, 0xde, 0xb2, 0xb7, 0x1c, 0x6a, 0xd9, 0x3e, 0x3a, 0xc6, 0xd6, 0xa9, 0xda,
- 0x5b, 0x8e, 0x81, 0x33, 0x8a, 0x7a, 0x04, 0x27, 0x95, 0x9d, 0xbd, 0xb8, 0xff, 0x6e, 0x1a, 0x14,
- 0x89, 0x3a, 0x6b, 0x2f, 0x93, 0x81, 0x5c, 0xea, 0x74, 0x62, 0x04, 0x2f, 0x1d, 0x10, 0xbc, 0x83,
- 0x3f, 0x0b, 0x31, 0x09, 0x9f, 0xf9, 0xc0, 0x6b, 0x82, 0x7d, 0x3b, 0x6d, 0x52, 0xa5, 0x4e, 0x27,
- 0xfe, 0xdc, 0x42, 0x58, 0xa0, 0xc4, 0x17, 0xc8, 0xb6, 0x70, 0x59, 0xac, 0x85, 0xa7, 0x1e, 0x08,
- 0x62, 0xf9, 0xcb, 0x1e, 0xa2, 0x7f, 0x90, 0xc0, 0x54, 0xcd, 0xf2, 0x7c, 0x84, 0x4d, 0x49, 0x04,
- 0x9b, 0x6b, 0xc1, 0x4c, 0x20, 0x1a, 0xd4, 0xe5, 0xa1, 0xfe, 0x3c, 0x4a, 0xe0, 0x67, 0xe2, 0xf7,
- 0xf1, 0xe8, 0x3c, 0x39, 0xb9, 0xf6, 0x94, 0x8b, 0xf8, 0x33, 0x6d, 0x51, 0xb1, 0x52, 0x7f, 0xb1,
- 0xbf, 0x14, 0x0a, 0x7c, 0x8d, 0x13, 0xf8, 0x9d, 0xa3, 0x14, 0x99, 0xbd, 0xd0, 0x7f, 0x5f, 0x02,
- 0x00, 0x95, 0x4d, 0x0f, 0x0e, 0x3f, 0x8e, 0x0b, 0x07, 0x92, 0x20, 0xdd, 0x57, 0xb2, 0xd2, 0x5d,
- 0xe3, 0xa5, 0xfb, 0xdd, 0xc3, 0xab, 0x9a, 0x74, 0x40, 0x58, 0x55, 0x80, 0x6c, 0x85, 0xa2, 0x45,
- 0x7f, 0xb5, 0xb7, 0x87, 0x42, 0x5d, 0xe7, 0x84, 0x7a, 0xf7, 0x88, 0x25, 0x65, 0x2f, 0xd7, 0x3f,
- 0x92, 0xc0, 0x54, 0x13, 0xfa, 0xa8, 0x9b, 0xd4, 0xce, 0x89, 0xf4, 0xf0, 0x4c, 0xdb, 0x96, 0x04,
- 0xdb, 0xf6, 0x37, 0x72, 0xa2, 0x81, 0xe1, 0x22, 0xc9, 0x50, 0x9e, 0x62, 0x56, 0x1f, 0x5e, 0x2f,
- 0x14, 0x18, 0x6e, 0x18, 0xb5, 0xec, 0xa5, 0xfb, 0x56, 0x29, 0xf4, 0x14, 0xe1, 0xcf, 0xf5, 0xb1,
- 0x66, 0x71, 0xee, 0xa0, 0x59, 0x2c, 0x7e, 0xae, 0x8f, 0xad, 0x63, 0xbc, 0x63, 0x42, 0x6a, 0x63,
- 0x63, 0x0c, 0x3e, 0x03, 0xa3, 0xc8, 0xeb, 0x79, 0x32, 0x28, 0xd2, 0xcd, 0x83, 0x7b, 0x93, 0xf7,
- 0x0e, 0x86, 0x4f, 0x2d, 0xde, 0x3f, 0x82, 0x29, 0x97, 0xb4, 0x2c, 0x1f, 0xb2, 0x21, 0x31, 0x6c,
- 0xdc, 0x0a, 0x0a, 0x38, 0x6a, 0x36, 0x1d, 0xe7, 0x22, 0x77, 0x8f, 0x80, 0x84, 0x8e, 0xde, 0x1a,
- 0x24, 0x53, 0x6a, 0x14, 0xc6, 0xb0, 0x92, 0x3f, 0x0a, 0x0a, 0x5f, 0x55, 0x01, 0x58, 0xdf, 0xbb,
- 0xd8, 0xb5, 0xbc, 0x1d, 0xcb, 0xc6, 0x3e, 0x62, 0x73, 0xf4, 0x91, 0x04, 0x7f, 0x4e, 0x34, 0xff,
- 0x62, 0x8d, 0x02, 0x05, 0xc8, 0x7b, 0xae, 0x45, 0x97, 0x01, 0xd0, 0x5f, 0xf5, 0x9e, 0xd0, 0xdb,
- 0x32, 0xdf, 0x17, 0xb8, 0x05, 0x89, 0x21, 0xe2, 0x60, 0x91, 0x29, 0x3d, 0xf2, 0xba, 0x64, 0x23,
- 0x7c, 0x17, 0xf8, 0x08, 0xdf, 0xdc, 0x69, 0xee, 0x62, 0xdf, 0x69, 0x6e, 0x84, 0xa3, 0x67, 0x3d,
- 0x07, 0x62, 0xd7, 0x23, 0xd9, 0xc0, 0xff, 0xd1, 0x17, 0xd8, 0x3d, 0x08, 0x7b, 0xe7, 0x91, 0x33,
- 0x03, 0x51, 0x02, 0xdb, 0xe7, 0xcd, 0x08, 0xf6, 0x79, 0x1f, 0x8d, 0xe6, 0x3e, 0x8e, 0xa0, 0xe1,
- 0x9c, 0x42, 0x72, 0x1c, 0xbb, 0xf9, 0x3e, 0x76, 0xb5, 0x4f, 0x08, 0x07, 0xe2, 0x64, 0x64, 0x9c,
- 0x38, 0x8b, 0xa1, 0x1c, 0x48, 0x21, 0x07, 0xcc, 0x1e, 0x70, 0x52, 0x0f, 0x3c, 0x8c, 0x7e, 0x3a,
- 0x5d, 0xde, 0x1d, 0x61, 0xbd, 0x46, 0x05, 0x0b, 0xc1, 0xb1, 0xf8, 0xc6, 0xd2, 0x7d, 0x7a, 0xb9,
- 0xa5, 0xc0, 0x83, 0x47, 0xe5, 0xf1, 0xa1, 0x78, 0x72, 0x00, 0x3e, 0x5a, 0x93, 0xd1, 0xfe, 0x87,
- 0x04, 0x8a, 0xd4, 0xdc, 0xb8, 0xf7, 0x90, 0x10, 0x6a, 0xaf, 0x1a, 0x05, 0x92, 0xc4, 0xe8, 0x24,
- 0x9f, 0x4d, 0x0b, 0xc0, 0x18, 0x0c, 0x8c, 0x0b, 0x99, 0x01, 0xa0, 0xfd, 0xb3, 0x04, 0xf2, 0xc8,
- 0x0c, 0x12, 0x8b, 0xfd, 0xf0, 0x19, 0x61, 0x97, 0x60, 0x46, 0x00, 0x88, 0x7c, 0x8c, 0x7e, 0x2f,
- 0x81, 0x99, 0x1e, 0xc9, 0x18, 0x46, 0x1e, 0xb9, 0x51, 0xa0, 0x33, 0x82, 0x46, 0xf4, 0x99, 0xf6,
- 0x3e, 0xa1, 0x03, 0x0f, 0xc9, 0xfc, 0xa4, 0x83, 0x43, 0x1f, 0x47, 0x98, 0x88, 0x2d, 0xed, 0x5f,
- 0x25, 0x00, 0x0c, 0xe8, 0x39, 0xdd, 0xcb, 0x70, 0xc3, 0xb5, 0xb4, 0x47, 0x47, 0x00, 0xd0, 0x66,
- 0x9f, 0x8b, 0x9a, 0xfd, 0xe7, 0x24, 0x51, 0xe7, 0x5f, 0x4e, 0xf3, 0x02, 0xe2, 0x31, 0xe2, 0x7f,
- 0x3a, 0x98, 0xa2, 0x72, 0xa4, 0x36, 0xa5, 0x98, 0xf0, 0x83, 0x8f, 0xb4, 0x0f, 0x0a, 0x39, 0x0f,
- 0x8b, 0x70, 0x94, 0x0e, 0x80, 0xf2, 0x08, 0x00, 0x1c, 0x07, 0xb3, 0x01, 0x00, 0x1b, 0x46, 0x55,
- 0x81, 0xda, 0xbb, 0x65, 0xec, 0x61, 0x41, 0x06, 0xb7, 0xc3, 0xf7, 0x34, 0x7f, 0x21, 0x3c, 0xd9,
- 0x67, 0xe4, 0x11, 0x96, 0x9f, 0x11, 0x40, 0xbf, 0x2d, 0x34, 0xbb, 0x17, 0x60, 0xe8, 0x91, 0xd2,
- 0x5f, 0x9d, 0xd5, 0xc1, 0x3c, 0x67, 0x95, 0xa8, 0xa7, 0xc1, 0x49, 0x2e, 0x81, 0x8c, 0x77, 0x1d,
- 0xe5, 0x98, 0xaa, 0x81, 0x53, 0xdc, 0x1b, 0xfa, 0x00, 0x3b, 0x4a, 0x4e, 0x7b, 0xf8, 0x0b, 0xb9,
- 0x70, 0xbd, 0xe7, 0xfd, 0x79, 0xba, 0xd2, 0xf6, 0x29, 0x3e, 0xd8, 0x65, 0xdb, 0xb1, 0x7d, 0xf8,
- 0x20, 0xe3, 0xa6, 0x12, 0x26, 0x24, 0x5a, 0x0d, 0xa7, 0xc1, 0x94, 0xef, 0xb2, 0xae, 0x2b, 0xc1,
- 0x23, 0xab, 0x58, 0x05, 0x5e, 0xb1, 0xea, 0xe0, 0xac, 0x65, 0xb7, 0xbb, 0x7b, 0x1d, 0x68, 0xc0,
- 0xae, 0x89, 0x64, 0xe8, 0x95, 0xbc, 0x0a, 0xec, 0x41, 0xbb, 0x03, 0x6d, 0x9f, 0xf0, 0x19, 0x9c,
- 0x7b, 0x15, 0xc8, 0xc9, 0x2b, 0xe3, 0x3d, 0xbc, 0x32, 0x3e, 0x6e, 0xd0, 0x12, 0x6e, 0xc2, 0x7a,
- 0xdf, 0x9d, 0x00, 0x90, 0xba, 0x9d, 0xb3, 0xe0, 0x15, 0xaa, 0x86, 0xd7, 0xf4, 0xad, 0xfa, 0x35,
- 0xc2, 0x0c, 0x06, 0x93, 0x59, 0xfb, 0x72, 0xa8, 0x7e, 0xcf, 0xe0, 0xd4, 0xef, 0x56, 0x41, 0x16,
- 0xd2, 0x69, 0x5d, 0x6f, 0x04, 0xad, 0x9b, 0x07, 0x33, 0xd1, 0x6e, 0xb2, 0xac, 0x5e, 0x03, 0xae,
- 0x0e, 0x3c, 0x8c, 0xeb, 0xba, 0x5e, 0x69, 0x6e, 0x6e, 0xac, 0xaf, 0x18, 0xa5, 0x8a, 0xae, 0x00,
- 0xa4, 0x9f, 0x44, 0x2f, 0x43, 0xc7, 0xe0, 0xbc, 0xf6, 0x07, 0x12, 0x28, 0xe0, 0x43, 0xdb, 0xda,
- 0xf7, 0x8d, 0x49, 0x73, 0x3c, 0xce, 0xe9, 0x29, 0x1c, 0x77, 0xc5, 0xaf, 0x30, 0xa1, 0xc2, 0xc4,
- 0x5c, 0x1d, 0xea, 0x0a, 0x93, 0x04, 0x42, 0xd9, 0xcf, 0x84, 0x50, 0x93, 0x6c, 0xee, 0x38, 0x57,
- 0xfe, 0x33, 0x37, 0x49, 0x54, 0xff, 0x23, 0x6e, 0x92, 0x03, 0x58, 0x98, 0x78, 0x93, 0x1c, 0xd0,
- 0xee, 0x12, 0x9a, 0xa9, 0xf6, 0x91, 0x42, 0x38, 0xff, 0xfb, 0xa4, 0x74, 0xa8, 0xbd, 0xaf, 0x12,
- 0x98, 0xb7, 0x6c, 0x1f, 0xba, 0xb6, 0xd9, 0x5d, 0xee, 0x9a, 0xdb, 0x81, 0x7d, 0xda, 0xbf, 0xe1,
- 0x51, 0x65, 0xf2, 0x18, 0xfc, 0x17, 0xea, 0x19, 0x00, 0x7c, 0xb8, 0xdb, 0xeb, 0x9a, 0x7e, 0xa4,
- 0x7a, 0x4c, 0x0a, 0xab, 0x7d, 0x79, 0x5e, 0xfb, 0x6e, 0x07, 0x57, 0x11, 0xd0, 0x5a, 0xfb, 0x3d,
- 0xb8, 0x61, 0x5b, 0xcf, 0xde, 0xc3, 0xb1, 0x91, 0x89, 0x8e, 0x0e, 0x7a, 0xc5, 0xed, 0x00, 0x15,
- 0xf9, 0x1d, 0x20, 0xf5, 0x6e, 0x70, 0x0d, 0x0e, 0x7b, 0x8d, 0xef, 0x08, 0x39, 0x6f, 0x75, 0xb6,
- 0xa1, 0x5f, 0xdd, 0x5a, 0xb3, 0x3c, 0xcf, 0xb2, 0xb7, 0xf1, 0x74, 0x7c, 0xda, 0x88, 0xcf, 0xa0,
- 0xfd, 0xad, 0x70, 0xdc, 0xa5, 0xa0, 0xcf, 0x18, 0x12, 0x77, 0x29, 0x6c, 0xa7, 0x72, 0x5f, 0x3b,
- 0x0d, 0x57, 0x75, 0xf2, 0x02, 0xab, 0x3a, 0x2c, 0xa6, 0x05, 0xc1, 0xd5, 0x81, 0xd7, 0x0a, 0x05,
- 0x76, 0x4a, 0xaa, 0x46, 0xf6, 0x7d, 0xdf, 0xd7, 0x65, 0xb0, 0x40, 0x8a, 0x5e, 0x72, 0x9c, 0x4b,
- 0xbb, 0xa6, 0x7b, 0x49, 0xfb, 0x89, 0xc3, 0xed, 0xe2, 0x26, 0xee, 0x5e, 0xc5, 0x6d, 0xc9, 0xf6,
- 0x29, 0x6f, 0xbe, 0x5f, 0x79, 0xb5, 0xdf, 0x12, 0x9e, 0x92, 0x70, 0xf2, 0x0c, 0x2a, 0x35, 0x99,
- 0xed, 0x2d, 0xb1, 0xe3, 0x8d, 0x22, 0x0c, 0x66, 0x0f, 0xfc, 0x6f, 0x84, 0xc0, 0x07, 0xe3, 0x08,
- 0xbb, 0x33, 0x30, 0x4e, 0xdc, 0xb5, 0xaf, 0x8c, 0x86, 0x5d, 0xc0, 0xd7, 0x08, 0xd8, 0x29, 0x40,
- 0xbe, 0x14, 0x3a, 0x23, 0xa1, 0xbf, 0x6c, 0x85, 0xf2, 0xd9, 0xa1, 0x19, 0xc3, 0xf2, 0x44, 0xd0,
- 0x3c, 0xc9, 0xb3, 0xd0, 0xe8, 0x65, 0x8a, 0xe9, 0x97, 0x84, 0x77, 0xdc, 0x06, 0x0a, 0x88, 0x70,
- 0x37, 0x99, 0x56, 0x29, 0xb6, 0x5d, 0x27, 0xce, 0x66, 0xf6, 0x68, 0xbe, 0xb8, 0x00, 0x66, 0x82,
- 0xf8, 0x57, 0xf8, 0x46, 0xc1, 0x10, 0xc3, 0x53, 0xa0, 0xe8, 0x39, 0x7b, 0x6e, 0x1b, 0xd2, 0x3d,
- 0x50, 0xfa, 0x34, 0xc2, 0x7e, 0xdd, 0x50, 0x73, 0xe1, 0x80, 0x45, 0x92, 0x4f, 0x6d, 0x91, 0xc4,
- 0xdb, 0xbb, 0x09, 0xf6, 0x83, 0xf6, 0x12, 0xe1, 0x6b, 0x3f, 0x38, 0xcc, 0x9a, 0xd0, 0x7f, 0x24,
- 0x1a, 0x01, 0xbf, 0x2a, 0xb4, 0x1b, 0x34, 0xa4, 0x26, 0xe9, 0x54, 0xae, 0x31, 0x82, 0x1d, 0xfc,
- 0x68, 0xf0, 0xa8, 0x20, 0x07, 0x35, 0x80, 0xb1, 0xc1, 0xbb, 0x61, 0xd4, 0x14, 0x59, 0x7b, 0x5e,
- 0x1e, 0x28, 0x84, 0xb5, 0x46, 0x68, 0x0b, 0x6a, 0x2f, 0xcf, 0x1d, 0xb5, 0xc1, 0x1b, 0x3f, 0x83,
- 0xfd, 0x5d, 0x49, 0x34, 0x58, 0x38, 0x27, 0xf8, 0xa8, 0x76, 0x31, 0x9a, 0x34, 0x42, 0x33, 0x4b,
- 0x50, 0x3e, 0xed, 0x2d, 0x39, 0x91, 0xd8, 0xe3, 0x62, 0x2c, 0x66, 0xdf, 0x2b, 0x7d, 0x23, 0x1f,
- 0x84, 0x31, 0x5c, 0x76, 0x9d, 0xdd, 0x0d, 0xb7, 0xab, 0xfd, 0x9b, 0xd0, 0xd5, 0x0e, 0x31, 0xb3,
- 0x0b, 0x29, 0x7e, 0x76, 0x81, 0x57, 0xa4, 0xbb, 0xd1, 0x56, 0x58, 0x77, 0x84, 0xe1, 0x5b, 0xbd,
- 0x09, 0x2c, 0x98, 0x9d, 0xce, 0xba, 0xb9, 0x0d, 0xcb, 0x68, 0xda, 0x6e, 0xfb, 0x34, 0xc4, 0x59,
- 0x5f, 0x6a, 0xe2, 0x54, 0x86, 0xef, 0x23, 0xa7, 0x0e, 0x58, 0xa5, 0xe2, 0xcb, 0xb0, 0x1c, 0x88,
- 0x54, 0x7e, 0x13, 0x19, 0xfe, 0xd0, 0x90, 0xd1, 0xde, 0x31, 0xa3, 0x80, 0x8c, 0xf4, 0x49, 0xd0,
- 0x17, 0x4b, 0x80, 0xef, 0xec, 0x35, 0xef, 0x57, 0x24, 0x30, 0x85, 0xf0, 0x28, 0x75, 0x3a, 0xda,
- 0x63, 0xb9, 0xb8, 0xa5, 0xb1, 0xde, 0x70, 0x2f, 0x14, 0x76, 0x43, 0x0c, 0x6a, 0x48, 0xe8, 0xc7,
- 0x60, 0x12, 0x09, 0x51, 0xe2, 0x84, 0x28, 0xe6, 0x6d, 0x98, 0x58, 0x44, 0xf6, 0xe2, 0xfb, 0x8c,
- 0x04, 0xe6, 0x83, 0x79, 0xc6, 0x32, 0xf4, 0xdb, 0x3b, 0xda, 0x9d, 0xa2, 0xeb, 0x5c, 0xb4, 0x25,
- 0x86, 0x5b, 0xc2, 0x5d, 0xed, 0x5b, 0xb9, 0x94, 0x2a, 0xcf, 0x95, 0x1c, 0xb3, 0x48, 0x98, 0x4a,
- 0x17, 0x93, 0x08, 0x66, 0x2f, 0xcc, 0x2f, 0x4b, 0x00, 0xb4, 0x9c, 0x70, 0xb2, 0x7c, 0x08, 0x49,
- 0xfe, 0xa4, 0xf0, 0x6e, 0x31, 0xad, 0x78, 0x54, 0x6c, 0xfa, 0x9e, 0x43, 0xd0, 0x99, 0x6a, 0x58,
- 0x49, 0x13, 0x69, 0xeb, 0x33, 0x95, 0xbd, 0x5e, 0xd7, 0x6a, 0x9b, 0x7e, 0xbf, 0x07, 0x60, 0xbc,
- 0x78, 0xf1, 0x75, 0xdc, 0xa9, 0x8c, 0xc6, 0xb0, 0x8c, 0x18, 0x59, 0x92, 0x38, 0x3f, 0x52, 0x10,
- 0xe7, 0x47, 0xd0, 0xab, 0x67, 0x08, 0xf1, 0x09, 0xa8, 0xa7, 0x0c, 0x8e, 0x37, 0x7a, 0xd0, 0x5e,
- 0x72, 0xa1, 0xd9, 0x69, 0xbb, 0x7b, 0xbb, 0x17, 0x3d, 0xd6, 0x7d, 0x35, 0x59, 0x47, 0x99, 0x95,
- 0x6b, 0x89, 0x5b, 0xb9, 0xd6, 0x7e, 0x58, 0x16, 0x8d, 0xc4, 0xc6, 0xec, 0xaf, 0x30, 0x3c, 0x8c,
- 0x30, 0xd4, 0xa5, 0x72, 0xba, 0xea, 0x5b, 0xa4, 0xce, 0xa7, 0x59, 0xa4, 0x7e, 0xb3, 0x50, 0x5c,
- 0x37, 0xa1, 0x7a, 0x4d, 0xc4, 0x77, 0x6e, 0xa1, 0x09, 0xfd, 0x18, 0x78, 0x6f, 0x04, 0xf3, 0x17,
- 0xa3, 0x37, 0x21, 0xc4, 0x7c, 0xe2, 0x00, 0x8f, 0xd6, 0xb7, 0xa6, 0x5d, 0xa1, 0xe1, 0x59, 0x88,
- 0x41, 0x37, 0x44, 0x50, 0x12, 0x71, 0x9b, 0x4b, 0xb5, 0xdc, 0x92, 0x58, 0x7e, 0xf6, 0x28, 0x7c,
- 0x42, 0x02, 0xb3, 0xf8, 0x92, 0xf1, 0xa5, 0x7d, 0x7c, 0x90, 0x53, 0xd0, 0x28, 0x79, 0x31, 0x2b,
- 0x66, 0x15, 0xe4, 0xbb, 0x96, 0x7d, 0x29, 0xf0, 0x77, 0x44, 0xff, 0xa3, 0x2b, 0x4a, 0xa5, 0x01,
- 0x57, 0x94, 0x86, 0xdb, 0x24, 0x61, 0xb9, 0x31, 0xa3, 0xe9, 0x1b, 0x72, 0x22, 0x57, 0x94, 0x0e,
- 0x25, 0x97, 0xbd, 0x18, 0xff, 0x3a, 0x0f, 0x8a, 0x4d, 0x68, 0xba, 0xed, 0x1d, 0xed, 0xfd, 0xd2,
- 0xc0, 0xa9, 0xc4, 0x34, 0x3f, 0x95, 0x58, 0x06, 0x53, 0x5b, 0x56, 0xd7, 0x87, 0x2e, 0xf1, 0x01,
- 0x67, 0xbb, 0x76, 0xd2, 0xc4, 0x97, 0xba, 0x4e, 0xfb, 0xd2, 0x22, 0x35, 0xed, 0x17, 0x83, 0x78,
- 0xd1, 0x8b, 0xcb, 0xf8, 0x23, 0x23, 0xf8, 0x18, 0x19, 0x84, 0x9e, 0xe3, 0xfa, 0x71, 0xf7, 0x0f,
- 0xc5, 0x50, 0x69, 0x3a, 0xae, 0x6f, 0x90, 0x0f, 0x11, 0xcc, 0x5b, 0x7b, 0xdd, 0x6e, 0x0b, 0x3e,
- 0xe8, 0x07, 0xd3, 0xba, 0xe0, 0x19, 0x19, 0x8b, 0xce, 0xd6, 0x96, 0x07, 0xc9, 0xa2, 0x42, 0xc1,
- 0xa0, 0x4f, 0xea, 0x49, 0x50, 0xe8, 0x5a, 0xbb, 0x16, 0x99, 0x88, 0x14, 0x0c, 0xf2, 0xa0, 0xde,
- 0x02, 0x94, 0x68, 0x0e, 0x44, 0x18, 0x3d, 0x5d, 0xc4, 0x4d, 0xf3, 0x40, 0x3a, 0xd2, 0x99, 0x4b,
- 0x70, 0xdf, 0x3b, 0x3d, 0x85, 0xdf, 0xe3, 0xff, 0xfc, 0x81, 0x1b, 0x91, 0x0d, 0x13, 0x22, 0xf1,
- 0xf8, 0x19, 0xae, 0x0b, 0xdb, 0x8e, 0xdb, 0x09, 0x64, 0x13, 0x3f, 0xc1, 0xa0, 0xf9, 0xd2, 0x6d,
- 0x73, 0x0c, 0x2c, 0x3c, 0x7b, 0x4d, 0x7b, 0x4f, 0x11, 0x75, 0x9b, 0xa8, 0xe8, 0xf3, 0x96, 0xbf,
- 0xb3, 0x06, 0x7d, 0x53, 0xfb, 0x6b, 0x79, 0xa0, 0xc6, 0xcd, 0xfe, 0x6f, 0x8d, 0x1b, 0xa2, 0x71,
- 0x24, 0xe6, 0x97, 0xbf, 0xe7, 0xda, 0x48, 0x8e, 0xd4, 0x8f, 0x96, 0x49, 0x51, 0xef, 0x06, 0xd7,
- 0x44, 0x4f, 0xc1, 0x52, 0x6a, 0x85, 0x71, 0xad, 0x9d, 0x36, 0xe2, 0x33, 0xa8, 0xeb, 0xe0, 0x06,
- 0xf2, 0x72, 0xb5, 0xb5, 0x56, 0x5b, 0xb5, 0xb6, 0x77, 0xba, 0xd6, 0xf6, 0x8e, 0xef, 0x55, 0x6d,
- 0xcf, 0x87, 0x66, 0xa7, 0xb1, 0x65, 0x90, 0x9b, 0xc3, 0x00, 0xa6, 0x23, 0x92, 0x95, 0xf7, 0x11,
- 0x17, 0x1b, 0xdd, 0x58, 0x4d, 0x89, 0x69, 0x29, 0x4f, 0x41, 0x2d, 0xc5, 0xdb, 0xeb, 0x86, 0x98,
- 0x5e, 0xdb, 0x87, 0x69, 0xa4, 0xea, 0x7b, 0x5d, 0xdc, 0x5c, 0x70, 0xe6, 0xb4, 0xe3, 0x5c, 0x02,
- 0x27, 0xd9, 0x37, 0x9b, 0x7f, 0x2b, 0x82, 0xc2, 0x8a, 0x6b, 0xf6, 0x76, 0xb4, 0xe7, 0x31, 0xfd,
- 0xf3, 0xb8, 0xda, 0x44, 0xa8, 0x9d, 0xd2, 0x30, 0xed, 0x94, 0x87, 0x68, 0x67, 0x9e, 0xd1, 0xce,
- 0xf8, 0x45, 0xe7, 0xb3, 0x60, 0xae, 0xed, 0x74, 0xbb, 0xb0, 0x8d, 0xe4, 0x51, 0xed, 0xe0, 0xd5,
- 0x9e, 0x19, 0x83, 0x4b, 0xc3, 0x31, 0xf5, 0xa1, 0xdf, 0x24, 0x6b, 0xec, 0x44, 0xe9, 0xa3, 0x04,
- 0xed, 0xe5, 0x12, 0xc8, 0xeb, 0x9d, 0x6d, 0xc8, 0xad, 0xc3, 0xe7, 0x98, 0x75, 0xf8, 0x53, 0xa0,
- 0xe8, 0x9b, 0xee, 0x36, 0xf4, 0x83, 0x75, 0x02, 0xf2, 0x14, 0x86, 0xfa, 0x97, 0x99, 0x50, 0xff,
- 0xdf, 0x0d, 0xf2, 0x48, 0x66, 0xd4, 0x2d, 0xfe, 0x86, 0x41, 0xf0, 0x63, 0xd9, 0x2f, 0xa2, 0x12,
- 0x17, 0x51, 0xad, 0x0d, 0xfc, 0x41, 0x3f, 0xd6, 0x85, 0x83, 0xa1, 0x68, 0xaf, 0x05, 0x33, 0x56,
- 0xdb, 0xb1, 0xab, 0xbb, 0xe6, 0x36, 0xa4, 0xd5, 0x8c, 0x12, 0x82, 0xb7, 0xfa, 0xae, 0xf3, 0x80,
- 0x45, 0x17, 0xb5, 0xa2, 0x04, 0x54, 0x85, 0x1d, 0xab, 0xd3, 0x81, 0x36, 0x6d, 0xd9, 0xf4, 0xe9,
- 0xec, 0x19, 0x90, 0x47, 0x3c, 0x20, 0xfd, 0x41, 0xc6, 0x82, 0x72, 0x4c, 0x9d, 0x43, 0xcd, 0x8a,
- 0x34, 0x5e, 0x25, 0xc7, 0xaf, 0xb9, 0x8a, 0x78, 0x0d, 0x91, 0xca, 0x0d, 0x6e, 0x5c, 0x4f, 0x00,
- 0x05, 0xdb, 0xe9, 0xc0, 0xa1, 0x83, 0x10, 0xc9, 0xa5, 0x3e, 0x19, 0x14, 0x60, 0x07, 0xf5, 0x0a,
- 0x32, 0xce, 0x7e, 0x26, 0x59, 0x96, 0x06, 0xc9, 0x9c, 0xce, 0x35, 0x69, 0x10, 0xb7, 0xd9, 0x37,
- 0xc0, 0x1f, 0x9d, 0x02, 0xc7, 0x49, 0x1f, 0xd0, 0xdc, 0xbb, 0x88, 0x48, 0x5d, 0x84, 0xda, 0xeb,
- 0x07, 0x0f, 0x5c, 0xc7, 0x79, 0x65, 0x3f, 0x09, 0x0a, 0xde, 0xde, 0xc5, 0xd0, 0x08, 0x25, 0x0f,
- 0x6c, 0xd3, 0x95, 0xc6, 0x32, 0x9c, 0xc9, 0xa3, 0x0e, 0x67, 0xdc, 0xd0, 0x24, 0x07, 0x8d, 0x3f,
- 0x1a, 0xc8, 0xc8, 0x81, 0x8e, 0x60, 0x20, 0x1b, 0x34, 0x0c, 0x9d, 0x06, 0x53, 0xe6, 0x96, 0x0f,
- 0xdd, 0xc8, 0x4c, 0xa4, 0x8f, 0x68, 0xa8, 0xbc, 0x08, 0xb7, 0x1c, 0x17, 0x89, 0x85, 0x84, 0x85,
- 0x0d, 0x9f, 0x99, 0x96, 0x0b, 0xb8, 0x1d, 0xb4, 0x5b, 0xc1, 0x09, 0xdb, 0xa9, 0xc0, 0x1e, 0x95,
- 0x33, 0x41, 0x71, 0x9e, 0xdc, 0xce, 0x7e, 0xe0, 0xc5, 0x81, 0xae, 0x64, 0xe1, 0x60, 0x57, 0xa2,
- 0x7d, 0x2e, 0xed, 0x9c, 0xb9, 0x0f, 0xe8, 0xb1, 0x59, 0x68, 0xea, 0xd3, 0xc0, 0x5c, 0x87, 0x7a,
- 0x88, 0xb5, 0xad, 0xb0, 0x95, 0xc4, 0x7e, 0xc7, 0x65, 0x8e, 0x14, 0x29, 0xcf, 0x2a, 0xd2, 0x0a,
- 0x98, 0xc6, 0x47, 0xaf, 0x91, 0x26, 0x15, 0xfa, 0x3c, 0xf2, 0xf1, 0xb4, 0x2e, 0xac, 0x14, 0x23,
- 0xb6, 0xc5, 0x32, 0xfd, 0xc4, 0x08, 0x3f, 0x4e, 0x37, 0xfb, 0x4e, 0x96, 0x50, 0xf6, 0xcd, 0xf1,
- 0x97, 0x8a, 0xe0, 0x9a, 0xb2, 0xeb, 0x78, 0x1e, 0x3e, 0x82, 0xd3, 0xdf, 0x30, 0xdf, 0x28, 0x71,
- 0x97, 0xfe, 0x3c, 0xa2, 0x9b, 0xdf, 0xa0, 0x06, 0x35, 0xb9, 0xa6, 0xf1, 0x17, 0xc2, 0x41, 0x6b,
- 0xc2, 0xfd, 0x87, 0x18, 0xa1, 0xff, 0xe7, 0x68, 0x24, 0xef, 0xc9, 0x89, 0xc4, 0xd1, 0x49, 0x29,
- 0xab, 0xec, 0x9b, 0xcb, 0x97, 0x24, 0xf0, 0xe8, 0x7e, 0x6e, 0x36, 0x6c, 0x2f, 0x6c, 0x30, 0xd7,
- 0x0d, 0x69, 0x2f, 0x7c, 0xdc, 0x95, 0xc4, 0x3b, 0x7e, 0x63, 0xea, 0xce, 0x94, 0x16, 0xb3, 0x58,
- 0x12, 0x1d, 0xe8, 0x49, 0xba, 0xe3, 0x37, 0x35, 0xf9, 0xec, 0x85, 0xfb, 0xbb, 0x79, 0x70, 0x7c,
- 0xc5, 0x75, 0xf6, 0x7a, 0x5e, 0xd4, 0x03, 0xfd, 0xc9, 0xe0, 0x0d, 0xd9, 0xa2, 0x88, 0x69, 0x70,
- 0x3d, 0x98, 0x75, 0xa9, 0x35, 0x17, 0x6d, 0xcf, 0xb2, 0x49, 0x6c, 0xef, 0x25, 0x1f, 0xa6, 0xf7,
- 0x8a, 0xfa, 0x99, 0x3c, 0xd7, 0xcf, 0xf4, 0xf7, 0x1c, 0x85, 0x01, 0x3d, 0xc7, 0x1f, 0x4b, 0x29,
- 0x07, 0xd5, 0x3e, 0x11, 0xc5, 0xf4, 0x17, 0x65, 0x50, 0xdc, 0xc6, 0x19, 0x69, 0x77, 0xf1, 0x78,
- 0xb1, 0x9a, 0x61, 0xe2, 0x06, 0xfd, 0x34, 0x92, 0xab, 0xcc, 0xea, 0x70, 0xaa, 0x01, 0x2e, 0x99,
- 0xdb, 0xec, 0x95, 0xea, 0xe1, 0x3c, 0x98, 0x0b, 0x4b, 0xaf, 0x76, 0x3c, 0x2e, 0xba, 0x2b, 0xa3,
- 0x51, 0xf3, 0x22, 0x1a, 0x75, 0x60, 0x9d, 0x39, 0x1c, 0x75, 0x64, 0x66, 0xd4, 0x19, 0x38, 0xba,
- 0xcc, 0xc5, 0x8c, 0x2e, 0xda, 0x73, 0x65, 0xd1, 0x6b, 0xf3, 0xf8, 0xae, 0x15, 0xd7, 0xe6, 0x91,
- 0x3c, 0x58, 0x08, 0x5e, 0xde, 0x37, 0xbc, 0x56, 0xd9, 0x2b, 0xc9, 0x87, 0x25, 0x70, 0xe2, 0x60,
- 0x67, 0xfe, 0x1d, 0xbc, 0x97, 0x1a, 0xaa, 0x93, 0x17, 0x7a, 0xa9, 0xe1, 0x27, 0x7e, 0x93, 0x2e,
- 0x31, 0x08, 0x0a, 0x67, 0xef, 0x0d, 0xef, 0xc4, 0xc5, 0xc2, 0x9c, 0x08, 0x12, 0xcd, 0x5e, 0x80,
- 0x3f, 0x25, 0x83, 0x99, 0x26, 0xf4, 0x6b, 0xe6, 0xbe, 0xb3, 0xe7, 0x6b, 0xa6, 0xe8, 0xf6, 0xdc,
- 0x53, 0x41, 0xb1, 0x8b, 0x3f, 0xc1, 0x1d, 0x0c, 0x1b, 0x74, 0x94, 0xdd, 0xdf, 0xc2, 0xbe, 0x41,
- 0x84, 0xb4, 0x41, 0xf3, 0xf3, 0xd1, 0x67, 0x44, 0x76, 0x47, 0x43, 0xee, 0xc6, 0xb2, 0xb5, 0x93,
- 0x6a, 0xef, 0x34, 0xae, 0xe8, 0xec, 0x61, 0xf9, 0x61, 0x19, 0xcc, 0x37, 0xa1, 0x5f, 0xf5, 0x96,
- 0xcd, 0xcb, 0x8e, 0x6b, 0xf9, 0x50, 0x5b, 0x11, 0x85, 0xe6, 0x0c, 0x00, 0x56, 0xf8, 0x19, 0x8d,
- 0x89, 0xc5, 0xa4, 0x68, 0x6f, 0x49, 0xeb, 0x28, 0xc4, 0xf1, 0x31, 0x16, 0x10, 0x52, 0xf9, 0x58,
- 0x24, 0x15, 0x3f, 0x81, 0x8b, 0xbf, 0x25, 0x0a, 0x44, 0xc9, 0x6d, 0xef, 0x58, 0x97, 0x61, 0x27,
- 0x25, 0x10, 0xc1, 0x67, 0x11, 0x10, 0x21, 0xa1, 0xd4, 0xee, 0x2b, 0x1c, 0x1f, 0xe3, 0x70, 0x5f,
- 0x49, 0x22, 0x38, 0x91, 0xb0, 0x56, 0xa8, 0xeb, 0xa1, 0xeb, 0x99, 0xf7, 0x8a, 0x8a, 0x35, 0x32,
- 0xd9, 0x24, 0xd6, 0x64, 0x1b, 0xa9, 0x63, 0x21, 0x65, 0x0f, 0xd3, 0xe9, 0x7c, 0x16, 0x1d, 0xcb,
- 0xc0, 0xa2, 0xb3, 0x17, 0xfa, 0xfb, 0x64, 0x70, 0x75, 0x18, 0xef, 0xa5, 0x09, 0xfd, 0x8a, 0xe9,
- 0xed, 0x5c, 0x74, 0x4c, 0xb7, 0xa3, 0x95, 0xc7, 0x70, 0xe0, 0x50, 0xfb, 0x43, 0x16, 0x84, 0x3a,
- 0x0f, 0xc2, 0x40, 0x57, 0xd2, 0x81, 0xbc, 0x8c, 0xa3, 0x93, 0x49, 0xf4, 0x76, 0x7d, 0x47, 0x08,
- 0xd6, 0x33, 0x39, 0xb0, 0xee, 0x19, 0x95, 0xc5, 0xec, 0x81, 0xfb, 0x59, 0x32, 0x22, 0x30, 0x5e,
- 0xcf, 0x17, 0x44, 0x01, 0x8b, 0xf1, 0x7a, 0x95, 0x63, 0xbd, 0x5e, 0x47, 0x1a, 0x23, 0x86, 0x7a,
- 0x2c, 0x67, 0x3b, 0x46, 0x1c, 0xa1, 0x37, 0xf2, 0xbb, 0x64, 0xa0, 0xe0, 0x80, 0x5f, 0x8c, 0x47,
- 0x38, 0x1b, 0x3f, 0x3b, 0x19, 0x9d, 0x03, 0xde, 0xe7, 0x53, 0x69, 0xbd, 0xcf, 0xb5, 0x77, 0xa6,
- 0xf5, 0x31, 0xef, 0xe7, 0x76, 0x2c, 0x88, 0xa5, 0x72, 0x21, 0x1f, 0xc2, 0x41, 0xf6, 0xa0, 0xfd,
- 0x98, 0x0c, 0x00, 0x6a, 0xd0, 0xf4, 0x6c, 0xc4, 0xb3, 0x44, 0xe1, 0xba, 0x8d, 0xf5, 0xbb, 0x47,
- 0x40, 0x5d, 0xdd, 0x07, 0x14, 0xa1, 0x18, 0x9d, 0xba, 0x78, 0x7d, 0x5a, 0xdf, 0xca, 0x88, 0xab,
- 0xb1, 0xc0, 0x92, 0xca, 0xdb, 0x32, 0xb6, 0xec, 0xec, 0x01, 0xf9, 0xef, 0x12, 0x28, 0xb4, 0x9c,
- 0x26, 0xf4, 0x0f, 0x6f, 0x0a, 0xa4, 0x8e, 0x1a, 0x80, 0xcb, 0x1d, 0x47, 0xd4, 0x80, 0x41, 0x84,
- 0xb2, 0x17, 0xdd, 0x7b, 0x25, 0x30, 0xd7, 0x72, 0xca, 0xe1, 0xe2, 0x94, 0xb8, 0xaf, 0xaa, 0xf8,
- 0xd5, 0xff, 0x61, 0x05, 0xa3, 0x62, 0x0e, 0x75, 0xf5, 0xff, 0x70, 0x7a, 0xd9, 0xcb, 0xed, 0x4e,
- 0x70, 0x7c, 0xc3, 0xee, 0x38, 0x06, 0xec, 0x38, 0x74, 0xa5, 0x5b, 0x55, 0x41, 0x7e, 0xcf, 0xee,
- 0x38, 0x98, 0xe5, 0x82, 0x81, 0xff, 0xa3, 0x34, 0x17, 0x76, 0x1c, 0xea, 0x1b, 0x80, 0xff, 0x6b,
- 0x7f, 0x21, 0x83, 0x3c, 0xfa, 0x56, 0x5c, 0xd4, 0xef, 0x92, 0x53, 0xc6, 0x41, 0x40, 0xe4, 0xc7,
- 0x62, 0x09, 0xdd, 0xcb, 0xac, 0xfd, 0x13, 0x0f, 0xd6, 0x1b, 0xe2, 0xca, 0x63, 0x44, 0x11, 0xad,
- 0xf9, 0xab, 0xa7, 0xc1, 0xd4, 0xc5, 0xae, 0xd3, 0xbe, 0x14, 0x1d, 0xd7, 0xa7, 0x8f, 0xea, 0x2d,
- 0xa0, 0xe0, 0x9a, 0xf6, 0x36, 0xa4, 0x7b, 0x0a, 0x27, 0xfb, 0xfa, 0x42, 0xec, 0xf5, 0x62, 0x90,
- 0x2c, 0xda, 0x3b, 0xd3, 0x44, 0x60, 0x18, 0x50, 0xf9, 0x74, 0xfa, 0x50, 0x19, 0xe1, 0xe4, 0x99,
- 0x02, 0xe6, 0xca, 0xa5, 0x3a, 0xb9, 0xc7, 0xb0, 0x71, 0x4e, 0x57, 0x64, 0x0c, 0x33, 0x92, 0x49,
- 0x86, 0x30, 0x23, 0xf2, 0xff, 0x69, 0x61, 0x1e, 0x50, 0xf9, 0xa3, 0x80, 0xf9, 0x33, 0x12, 0x98,
- 0xaf, 0x59, 0x9e, 0x1f, 0xe7, 0xed, 0x9f, 0x10, 0xef, 0xf7, 0x25, 0x69, 0x4d, 0x65, 0xae, 0x1c,
- 0xe1, 0x40, 0xbf, 0xa9, 0xcc, 0xe1, 0xa4, 0x22, 0x26, 0x73, 0x2c, 0x05, 0x73, 0x40, 0x2e, 0xb1,
- 0x17, 0x96, 0x64, 0x6a, 0x43, 0x29, 0x2a, 0x64, 0xf2, 0x86, 0x52, 0x6c, 0xd9, 0xd9, 0xcb, 0xf7,
- 0x2f, 0x24, 0x70, 0x02, 0x15, 0x9f, 0xb4, 0x2c, 0x15, 0x2f, 0xe6, 0xa1, 0xcb, 0x52, 0xa9, 0x57,
- 0xc6, 0x0f, 0xf0, 0x32, 0x8e, 0x95, 0xf1, 0x61, 0x44, 0x27, 0x2c, 0xe6, 0x98, 0x65, 0xd8, 0x61,
- 0x62, 0x4e, 0x58, 0x86, 0x1d, 0x5d, 0xcc, 0xc9, 0x4b, 0xb1, 0x23, 0x8a, 0xf9, 0xc8, 0x16, 0x58,
- 0x7f, 0x41, 0x0e, 0xc5, 0x1c, 0xbb, 0xb6, 0x91, 0x20, 0xe6, 0xd4, 0x27, 0x7a, 0xb5, 0x77, 0x8f,
- 0x28, 0xf8, 0x31, 0xaf, 0x6f, 0x8c, 0x02, 0xd3, 0x11, 0xae, 0x71, 0xfc, 0x9c, 0x0c, 0x16, 0x28,
- 0x17, 0x83, 0xa7, 0xcc, 0x09, 0x18, 0xa5, 0x9e, 0x32, 0xa7, 0x3e, 0x03, 0xc4, 0x73, 0x36, 0xf9,
- 0x33, 0x40, 0x89, 0xe5, 0x67, 0x0f, 0xce, 0x5f, 0xe5, 0xc1, 0x29, 0xc4, 0xc2, 0x9a, 0xd3, 0xb1,
- 0xb6, 0xf6, 0x09, 0x17, 0xe7, 0xcc, 0xee, 0x1e, 0xf4, 0xb4, 0x0f, 0x48, 0xa2, 0x28, 0xfd, 0x17,
- 0x00, 0x9c, 0x1e, 0x74, 0x49, 0x1c, 0x37, 0x0a, 0xd4, 0xdd, 0x71, 0x95, 0x3d, 0x58, 0x52, 0x78,
- 0xfd, 0x4d, 0x23, 0x20, 0x62, 0x30, 0xf4, 0x90, 0x55, 0x38, 0x13, 0xbe, 0xe9, 0x77, 0xf0, 0xc8,
- 0x1d, 0x74, 0xf0, 0xb8, 0x19, 0xc8, 0x66, 0xa7, 0x13, 0x42, 0xd5, 0xbf, 0x99, 0x8d, 0xcb, 0x34,
- 0x50, 0x16, 0x94, 0xd3, 0x83, 0xd1, 0xd1, 0xbc, 0x98, 0x9c, 0x1e, 0xf4, 0xd5, 0x45, 0x50, 0x24,
- 0xd7, 0x81, 0x87, 0x2b, 0xfa, 0x83, 0x33, 0xd3, 0x5c, 0xbc, 0x69, 0xd7, 0xe0, 0xd5, 0xf0, 0xce,
- 0x54, 0x92, 0x19, 0xd4, 0x4f, 0x47, 0x76, 0xb2, 0xc1, 0x29, 0xd8, 0xd3, 0x47, 0xa6, 0x3c, 0x99,
- 0xdd, 0xb0, 0x52, 0xaf, 0xd7, 0xdd, 0x6f, 0xd1, 0xc0, 0x03, 0xa9, 0x76, 0xc3, 0x98, 0xf8, 0x05,
- 0xd2, 0x81, 0xf8, 0x05, 0xa9, 0x77, 0xc3, 0x38, 0x3e, 0xc6, 0xb1, 0x1b, 0x96, 0x44, 0x70, 0x22,
- 0xf7, 0xf0, 0x60, 0xab, 0x99, 0xde, 0x46, 0xf0, 0x8f, 0x83, 0x3d, 0xab, 0x01, 0xef, 0xec, 0x32,
- 0xe8, 0xa2, 0x82, 0xc4, 0x5b, 0x58, 0xd4, 0x27, 0x83, 0xe2, 0x96, 0xe3, 0xee, 0x9a, 0xc1, 0xc6,
- 0x7d, 0xff, 0x49, 0x11, 0x7a, 0x03, 0xc0, 0x32, 0xce, 0x63, 0xd0, 0xbc, 0x68, 0x3e, 0xf2, 0x1c,
- 0xab, 0x47, 0x83, 0x3e, 0xa2, 0xbf, 0xea, 0x8d, 0x60, 0x9e, 0xc6, 0x7e, 0xac, 0x43, 0xcf, 0x87,
- 0x1d, 0x1a, 0xd1, 0x82, 0x4f, 0x54, 0xcf, 0x82, 0x39, 0x9a, 0xb0, 0x6c, 0x75, 0xa1, 0x47, 0x83,
- 0x5a, 0x70, 0x69, 0xea, 0x29, 0x50, 0xb4, 0xbc, 0xfb, 0x3c, 0xc7, 0xa6, 0x01, 0xf9, 0xe8, 0x93,
- 0x7a, 0x33, 0x38, 0x4e, 0xf3, 0x85, 0xc6, 0x2a, 0x39, 0xb0, 0xd3, 0x9f, 0x8c, 0x54, 0xcb, 0x76,
- 0xd6, 0x5d, 0x67, 0xdb, 0x85, 0x9e, 0x87, 0x4f, 0x4d, 0x4d, 0x1b, 0x4c, 0x8a, 0x7a, 0x01, 0x9c,
- 0xe8, 0x5a, 0xf6, 0x25, 0x0f, 0xc7, 0x08, 0x5e, 0xa6, 0x6e, 0x63, 0x73, 0x03, 0x62, 0x77, 0x33,
- 0x8d, 0x8d, 0xca, 0x81, 0xfd, 0xc4, 0x38, 0x48, 0x45, 0xbd, 0x05, 0x28, 0x94, 0x9b, 0x25, 0xb3,
- 0x7d, 0x09, 0xbf, 0xa7, 0xee, 0xa8, 0x07, 0xd2, 0x19, 0x61, 0x90, 0x30, 0xfa, 0x0b, 0x9c, 0x30,
- 0x48, 0x24, 0xfd, 0x97, 0xe5, 0xc0, 0x1c, 0x57, 0x80, 0x09, 0xd4, 0xa0, 0x5b, 0xf4, 0xce, 0xef,
- 0x58, 0x3e, 0x44, 0xcc, 0xd1, 0xb3, 0x2e, 0x4f, 0x1c, 0xc2, 0xbc, 0x71, 0xe0, 0x43, 0x63, 0x00,
- 0x31, 0xc4, 0x17, 0xe9, 0xf0, 0xb0, 0x67, 0x99, 0x47, 0x6d, 0x55, 0x2e, 0x4d, 0x7b, 0x0e, 0x50,
- 0x0f, 0x52, 0x63, 0xbc, 0x40, 0x72, 0xe9, 0xbc, 0x40, 0x90, 0xdc, 0xcc, 0x6e, 0xd7, 0xb9, 0x02,
- 0x3b, 0x21, 0x59, 0xaa, 0xab, 0x07, 0xd2, 0xb5, 0xcf, 0x8f, 0x32, 0x2f, 0x4c, 0x7d, 0xb1, 0x06,
- 0x6a, 0x64, 0x7b, 0xed, 0x36, 0x84, 0x1d, 0x7a, 0x70, 0x2d, 0x78, 0x4c, 0x79, 0xe5, 0x46, 0xea,
- 0x59, 0xe4, 0x11, 0xdd, 0xb9, 0xf1, 0xb1, 0xab, 0x41, 0x91, 0xdc, 0x5f, 0xa7, 0xbd, 0x6c, 0x61,
- 0x60, 0x5f, 0xb3, 0xc0, 0xf7, 0x35, 0x1b, 0x60, 0xce, 0x76, 0x50, 0x71, 0xeb, 0xa6, 0x6b, 0xee,
- 0x7a, 0x49, 0x8b, 0xc4, 0x84, 0x6e, 0x68, 0x11, 0xd4, 0x99, 0xcf, 0x56, 0x8f, 0x19, 0x1c, 0x19,
- 0xf5, 0xff, 0x00, 0xc7, 0x2f, 0xd2, 0x00, 0x0f, 0x1e, 0xa5, 0x2c, 0xc5, 0xbb, 0x50, 0xf6, 0x51,
- 0x5e, 0xe2, 0xbf, 0x5c, 0x3d, 0x66, 0xf4, 0x13, 0x53, 0xbf, 0x17, 0x2c, 0xa0, 0xc7, 0x8e, 0x73,
- 0x25, 0x60, 0x5c, 0x8e, 0xb7, 0x23, 0xfb, 0xc8, 0xaf, 0x71, 0x1f, 0xae, 0x1e, 0x33, 0xfa, 0x48,
- 0xa9, 0x0d, 0x00, 0x76, 0xfc, 0xdd, 0x2e, 0x25, 0x9c, 0x8f, 0x57, 0xc9, 0x3e, 0xc2, 0xab, 0xe1,
- 0x47, 0xab, 0xc7, 0x0c, 0x86, 0x84, 0x5a, 0x03, 0x33, 0xfe, 0x83, 0x3e, 0xa5, 0x57, 0x88, 0xf7,
- 0x5d, 0xe8, 0xa3, 0xd7, 0x0a, 0xbe, 0x59, 0x3d, 0x66, 0x44, 0x04, 0xd4, 0x2a, 0x98, 0xee, 0x5d,
- 0xa4, 0xc4, 0x8a, 0xf1, 0xfd, 0x5d, 0x1f, 0xb1, 0xf5, 0x8b, 0x21, 0xad, 0xf0, 0x73, 0xc4, 0x58,
- 0xdb, 0xbb, 0x4c, 0x69, 0x4d, 0x09, 0x33, 0x56, 0x0e, 0xbe, 0x41, 0x8c, 0x85, 0x04, 0xd4, 0x2a,
- 0x98, 0xf1, 0x6c, 0xb3, 0xe7, 0xed, 0x38, 0xbe, 0x77, 0x7a, 0xba, 0xcf, 0xcd, 0x35, 0x9e, 0x5a,
- 0x93, 0x7e, 0x63, 0x44, 0x5f, 0xab, 0x4f, 0x06, 0x57, 0xef, 0xf5, 0x3a, 0xa6, 0x0f, 0xf5, 0x07,
- 0x2d, 0xcf, 0xb7, 0xec, 0xed, 0x20, 0x42, 0x31, 0x19, 0x2c, 0x06, 0xbf, 0x54, 0x17, 0xe9, 0x81,
- 0x37, 0x80, 0xdb, 0xa6, 0xd6, 0xbf, 0xd7, 0x4a, 0x8a, 0x65, 0xce, 0xb9, 0x3d, 0x0d, 0xe4, 0xd1,
- 0x2b, 0x3c, 0xb8, 0x2c, 0x0c, 0x5e, 0xc7, 0xed, 0xd7, 0x1d, 0xdc, 0x80, 0xd1, 0x47, 0x7d, 0xe3,
- 0xd3, 0xdc, 0x81, 0xf1, 0xe9, 0x7a, 0x30, 0x6b, 0x79, 0x6b, 0xd6, 0x36, 0x31, 0x8e, 0xe9, 0xf8,
- 0xc1, 0x26, 0x91, 0xc5, 0x84, 0x3a, 0xbc, 0x42, 0x06, 0x8e, 0xe3, 0xc1, 0x62, 0x42, 0x90, 0xa2,
- 0xdd, 0x04, 0xe6, 0xd8, 0x46, 0x46, 0x2e, 0xc1, 0xb5, 0x22, 0xd3, 0x9a, 0x3e, 0x69, 0x37, 0x82,
- 0x05, 0x5e, 0xa7, 0x19, 0x0b, 0x42, 0x0e, 0xba, 0x42, 0xed, 0x06, 0x70, 0xbc, 0xaf, 0x61, 0x05,
- 0x21, 0x63, 0x72, 0x51, 0xc8, 0x98, 0xeb, 0x01, 0x88, 0xb4, 0x78, 0x20, 0x99, 0xeb, 0xc0, 0x4c,
- 0xa8, 0x97, 0x03, 0x33, 0xfc, 0x69, 0x0e, 0x4c, 0x07, 0xca, 0x36, 0x28, 0x03, 0x1a, 0x99, 0x6c,
- 0x66, 0x7f, 0x28, 0x18, 0x99, 0xd8, 0x34, 0x64, 0x26, 0x44, 0x5e, 0xd9, 0x2d, 0xcb, 0xef, 0x06,
- 0x27, 0x1b, 0xfb, 0x93, 0xd5, 0x75, 0x00, 0x2c, 0x8c, 0x51, 0x2b, 0x3a, 0xea, 0x78, 0x7b, 0x8a,
- 0xf6, 0x40, 0xf4, 0x81, 0xa1, 0x71, 0xf6, 0x3b, 0xe8, 0x39, 0xc4, 0x19, 0x50, 0x20, 0x61, 0xfa,
- 0x8f, 0xa9, 0x0b, 0x00, 0xe8, 0xcf, 0x5a, 0xd7, 0x8d, 0xaa, 0x5e, 0x2f, 0xeb, 0x4a, 0x4e, 0x7b,
- 0x85, 0x04, 0x66, 0xc2, 0x46, 0x30, 0xb0, 0x92, 0x3a, 0x55, 0xad, 0xa1, 0xf7, 0x8c, 0x1e, 0x6c,
- 0x54, 0xac, 0x92, 0x3d, 0x15, 0x3c, 0x6a, 0xcf, 0x83, 0xcb, 0x96, 0xeb, 0xf9, 0x86, 0x73, 0x65,
- 0xd9, 0x71, 0xa3, 0x81, 0x95, 0x04, 0xb8, 0x8d, 0x7b, 0x8d, 0x0c, 0xc6, 0x0e, 0xc4, 0x67, 0xde,
- 0xa0, 0x4b, 0x17, 0xfe, 0xa3, 0x04, 0x44, 0xd7, 0x77, 0x4d, 0xdb, 0xeb, 0x39, 0x1e, 0x34, 0x9c,
- 0x2b, 0x5e, 0xc9, 0xee, 0x94, 0x9d, 0xee, 0xde, 0xae, 0xed, 0x51, 0x93, 0x2f, 0xee, 0x35, 0x92,
- 0x0e, 0xbe, 0x45, 0x78, 0x01, 0x80, 0x72, 0xa3, 0x56, 0xd3, 0xcb, 0xad, 0x6a, 0xa3, 0xae, 0x1c,
- 0x43, 0xd2, 0x6a, 0x95, 0x96, 0x6a, 0x48, 0x3a, 0xdf, 0x07, 0xa6, 0x83, 0x36, 0x4d, 0xa3, 0xdc,
- 0xe4, 0x82, 0x28, 0x37, 0x6a, 0x09, 0x4c, 0x07, 0xad, 0x9c, 0x8e, 0x08, 0x8f, 0xed, 0x3f, 0xd5,
- 0xbc, 0x6b, 0xba, 0x3e, 0x36, 0x50, 0x02, 0x22, 0x4b, 0xa6, 0x07, 0x8d, 0xf0, 0xb3, 0xb3, 0x4f,
- 0xa0, 0x1c, 0xa8, 0x60, 0xa1, 0x54, 0xab, 0x6d, 0x36, 0x8c, 0xcd, 0x7a, 0xa3, 0xb5, 0x5a, 0xad,
- 0xaf, 0x90, 0x11, 0xb2, 0xba, 0x52, 0x6f, 0x18, 0x3a, 0x19, 0x20, 0x9b, 0x4a, 0x8e, 0xdc, 0x62,
- 0xbd, 0x34, 0x0d, 0x8a, 0x3d, 0x2c, 0x5d, 0xed, 0x4b, 0x72, 0xca, 0x70, 0x06, 0x21, 0x4e, 0x31,
- 0xf7, 0xec, 0x72, 0x47, 0x0a, 0xa4, 0x01, 0x47, 0x7e, 0xcf, 0x82, 0x39, 0x62, 0xaa, 0x7b, 0x78,
- 0x77, 0x06, 0x23, 0x27, 0x1b, 0x5c, 0x9a, 0xf6, 0x09, 0x29, 0x45, 0x8c, 0x83, 0x81, 0x1c, 0xa5,
- 0x33, 0x2e, 0x7e, 0x2f, 0x37, 0xda, 0xa5, 0x16, 0xd5, 0x7a, 0x4b, 0x37, 0xea, 0xa5, 0x1a, 0xcd,
- 0x22, 0xab, 0xa7, 0xc1, 0xc9, 0x7a, 0x83, 0x86, 0x74, 0x6c, 0x6e, 0xb6, 0x1a, 0x9b, 0xd5, 0xb5,
- 0xf5, 0x86, 0xd1, 0x52, 0x0a, 0xea, 0x29, 0xa0, 0x92, 0xff, 0x9b, 0xd5, 0xe6, 0x66, 0xb9, 0x54,
- 0x2f, 0xeb, 0x35, 0xbd, 0xa2, 0x14, 0xd5, 0xc7, 0x81, 0x1b, 0xc8, 0x25, 0x49, 0x8d, 0xe5, 0x4d,
- 0xa3, 0x71, 0xbe, 0x89, 0x10, 0x34, 0xf4, 0x5a, 0x09, 0x29, 0x12, 0x73, 0x9b, 0xf5, 0x94, 0x7a,
- 0x15, 0x38, 0x8e, 0xaf, 0xba, 0xaf, 0x35, 0x4a, 0x15, 0x5a, 0xde, 0xb4, 0x7a, 0x2d, 0x38, 0x5d,
- 0xad, 0x37, 0x37, 0x96, 0x97, 0xab, 0xe5, 0xaa, 0x5e, 0x6f, 0x6d, 0xae, 0xeb, 0xc6, 0x5a, 0xb5,
- 0xd9, 0x44, 0xdf, 0x2a, 0x33, 0xf8, 0xae, 0x60, 0xd2, 0x67, 0x6a, 0xef, 0x97, 0xc1, 0xfc, 0x39,
- 0xb3, 0x6b, 0xa1, 0x81, 0x02, 0x5f, 0x22, 0xde, 0x77, 0x1a, 0xc8, 0xc7, 0x97, 0x8d, 0xd3, 0xf3,
- 0x04, 0xf8, 0x41, 0xfb, 0x21, 0x39, 0xe5, 0x69, 0x20, 0x0a, 0x04, 0x29, 0x71, 0x91, 0x2b, 0x2d,
- 0x66, 0xee, 0xfa, 0x5a, 0x29, 0xc5, 0x69, 0x20, 0x71, 0xf2, 0xe9, 0xc0, 0xff, 0xf9, 0x71, 0x81,
- 0xaf, 0x80, 0xb9, 0x8d, 0x7a, 0x69, 0xa3, 0xb5, 0xda, 0x30, 0xaa, 0xdf, 0x83, 0x63, 0xd9, 0xcf,
- 0x83, 0x99, 0xe5, 0x86, 0xb1, 0x54, 0xad, 0x54, 0xf4, 0xba, 0x52, 0x50, 0x1f, 0x05, 0xae, 0x6a,
- 0xea, 0xc6, 0xb9, 0x6a, 0x59, 0xdf, 0xdc, 0xa8, 0x97, 0xce, 0x95, 0xaa, 0x35, 0xdc, 0x47, 0x14,
- 0x13, 0x2e, 0x40, 0x9f, 0xd2, 0x7e, 0x20, 0x0f, 0x00, 0xa9, 0x3a, 0xbe, 0xca, 0x89, 0xb9, 0x26,
- 0xfb, 0x0f, 0xd2, 0x4e, 0x1a, 0x22, 0x32, 0x31, 0xed, 0xb7, 0x0a, 0xa6, 0x5d, 0xfa, 0x82, 0xae,
- 0x8e, 0x0d, 0xa3, 0x43, 0xfe, 0x06, 0xd4, 0x8c, 0xf0, 0x73, 0xed, 0x03, 0x69, 0xe6, 0x08, 0xb1,
- 0x8c, 0xa5, 0x43, 0x72, 0x79, 0x3c, 0x40, 0x6a, 0x2f, 0xce, 0x81, 0x05, 0xbe, 0x62, 0xa8, 0x12,
- 0xd8, 0x98, 0x12, 0xab, 0x04, 0xff, 0x31, 0x63, 0x64, 0x9d, 0x7d, 0x12, 0x1d, 0x4e, 0x41, 0xd0,
- 0x32, 0xc9, 0xc1, 0xfe, 0xc0, 0x62, 0x51, 0x72, 0x88, 0x79, 0x64, 0x74, 0x28, 0x92, 0x3a, 0x05,
- 0xe4, 0xd6, 0x83, 0xbe, 0x22, 0x6b, 0x5f, 0x93, 0xc1, 0x3c, 0x77, 0x0f, 0xb7, 0xf6, 0xce, 0x9c,
- 0xc8, 0x1d, 0xb9, 0xcc, 0x0d, 0xdf, 0xb9, 0xc3, 0xde, 0xf0, 0x7d, 0xf6, 0x5e, 0x30, 0x45, 0xd3,
- 0xb0, 0x7c, 0x1b, 0x75, 0x64, 0x0a, 0x1c, 0x07, 0xb3, 0x2b, 0x7a, 0x6b, 0xb3, 0xd9, 0x2a, 0x19,
- 0x2d, 0xbd, 0xa2, 0xe4, 0xd0, 0xc0, 0xa7, 0xaf, 0xad, 0xb7, 0x2e, 0x28, 0x12, 0x1a, 0x13, 0x57,
- 0x36, 0xaa, 0x15, 0x7d, 0xb3, 0x51, 0xaf, 0x5d, 0x50, 0xe4, 0xf4, 0x0e, 0x97, 0xfd, 0x8c, 0x4d,
- 0xd8, 0xe1, 0x32, 0xa9, 0xf8, 0xec, 0xe7, 0xae, 0x9f, 0x93, 0x81, 0x42, 0x38, 0xd0, 0x1f, 0xec,
- 0x41, 0xd7, 0x82, 0x76, 0x1b, 0x6a, 0x97, 0x44, 0x02, 0xc0, 0x1e, 0x08, 0x7d, 0x88, 0xfb, 0x77,
- 0xc6, 0x6a, 0x24, 0x0f, 0x7d, 0x06, 0x77, 0xfe, 0x80, 0xc1, 0xfd, 0x5b, 0x69, 0x3d, 0x2e, 0xfb,
- 0xd9, 0x1d, 0x0b, 0x64, 0x9f, 0x4e, 0xe3, 0x71, 0x39, 0x84, 0x83, 0x89, 0xc4, 0x75, 0x8e, 0x19,
- 0x8f, 0x15, 0x59, 0x7b, 0x91, 0x0c, 0x8e, 0x57, 0x4c, 0x1f, 0x2e, 0xed, 0xb7, 0x82, 0x7b, 0x33,
- 0x63, 0xee, 0xba, 0xce, 0x1d, 0xb8, 0xeb, 0x3a, 0xba, 0x7a, 0x53, 0xea, 0xbb, 0x7a, 0x53, 0x7b,
- 0x4f, 0xda, 0x33, 0x9a, 0x7d, 0x3c, 0x8c, 0x2d, 0xf8, 0x72, 0xba, 0xb3, 0x97, 0xc9, 0x5c, 0x64,
- 0xdf, 0xc0, 0xde, 0x3e, 0x03, 0x14, 0xc2, 0x0a, 0xe3, 0x54, 0xf8, 0x53, 0xf4, 0x7a, 0xf8, 0xcd,
- 0x14, 0x31, 0x1c, 0x83, 0xa8, 0x18, 0x12, 0x1f, 0x15, 0x83, 0x5b, 0xa3, 0x96, 0xfb, 0x1d, 0x41,
- 0xd2, 0x76, 0x86, 0x8c, 0x07, 0x61, 0x7c, 0xd8, 0xdc, 0xec, 0x3a, 0xc3, 0xc4, 0xe2, 0x27, 0x73,
- 0x85, 0x31, 0xbd, 0x35, 0x54, 0x17, 0x45, 0x26, 0xf9, 0xa6, 0xf6, 0xb4, 0xee, 0xe4, 0x9c, 0x07,
- 0x67, 0xc2, 0xf5, 0xe5, 0xd9, 0xb9, 0x93, 0x0f, 0xe3, 0x20, 0x7b, 0x14, 0xbe, 0x25, 0x81, 0x7c,
- 0xd3, 0x71, 0xfd, 0x71, 0x61, 0x90, 0x76, 0x0b, 0x9c, 0x91, 0x40, 0x33, 0x7e, 0x0e, 0x9a, 0xdd,
- 0x16, 0x78, 0x72, 0xf9, 0x13, 0x08, 0x83, 0x79, 0x1c, 0x2c, 0x10, 0x4e, 0xc2, 0x3b, 0x64, 0xfe,
- 0x55, 0x22, 0xfd, 0xd5, 0xfd, 0xa2, 0x88, 0xe0, 0x8d, 0x90, 0x70, 0x0b, 0x3a, 0x00, 0x85, 0x4b,
- 0xd3, 0xde, 0xc8, 0xe2, 0x52, 0xe1, 0x71, 0x19, 0x34, 0x03, 0x0f, 0xaf, 0x61, 0x19, 0x57, 0xcf,
- 0x94, 0x26, 0xa2, 0x66, 0x42, 0xe1, 0xd9, 0x23, 0xf2, 0x90, 0x0c, 0x8a, 0xd4, 0x05, 0x70, 0xac,
- 0x08, 0xa4, 0x6d, 0x19, 0xa1, 0x10, 0xc4, 0x5c, 0x05, 0xe5, 0x71, 0xb7, 0x8c, 0xe4, 0xf2, 0xb3,
- 0xc7, 0xe1, 0xdf, 0xa9, 0x6f, 0x6b, 0xe9, 0xb2, 0x69, 0x75, 0xcd, 0x8b, 0xdd, 0x14, 0x91, 0xac,
- 0x3f, 0x91, 0xf2, 0x34, 0x5f, 0x58, 0x55, 0xae, 0xbc, 0x18, 0x89, 0x7f, 0x17, 0x98, 0x71, 0xb9,
- 0xbd, 0x3f, 0x64, 0x45, 0xf5, 0xf9, 0x15, 0xd3, 0xf7, 0x46, 0x94, 0x33, 0xd5, 0xd1, 0x3d, 0x21,
- 0x7e, 0x26, 0x72, 0xd4, 0x68, 0xb6, 0xd4, 0xe9, 0x2c, 0x43, 0xd3, 0xdf, 0x73, 0x61, 0x27, 0xd5,
- 0x10, 0xe1, 0xf6, 0x6d, 0x8f, 0x32, 0x92, 0xe0, 0x62, 0x49, 0xd6, 0x78, 0x74, 0x9e, 0x32, 0xa4,
- 0x37, 0x08, 0x78, 0x19, 0x4b, 0x97, 0xf4, 0xb6, 0x10, 0x92, 0x06, 0x07, 0xc9, 0xd3, 0x46, 0x63,
- 0x22, 0x7b, 0x40, 0x7e, 0x46, 0x06, 0x0b, 0xc4, 0x4e, 0x18, 0x37, 0x26, 0x1f, 0x4a, 0xe9, 0x32,
- 0xc4, 0xdc, 0xd2, 0xc5, 0xb2, 0x33, 0x16, 0x58, 0xd2, 0x38, 0x18, 0x89, 0xf1, 0x91, 0x3d, 0x32,
- 0xcf, 0x3f, 0x01, 0x00, 0xe3, 0x06, 0xfa, 0x89, 0x62, 0x14, 0xd7, 0x51, 0x7b, 0x27, 0x9d, 0x7f,
- 0x34, 0xb9, 0x20, 0xe3, 0x8c, 0x8b, 0x67, 0xb8, 0x41, 0xc5, 0x27, 0x0a, 0x8d, 0x2a, 0xbf, 0x97,
- 0xd2, 0xe6, 0xa5, 0x4e, 0x98, 0x43, 0x07, 0xf7, 0x11, 0x7b, 0xb9, 0x4f, 0xa6, 0x30, 0x7e, 0x87,
- 0xb1, 0x92, 0x0e, 0xb5, 0xda, 0x08, 0x33, 0xfb, 0xd3, 0xe0, 0xa4, 0xa1, 0x97, 0x2a, 0x8d, 0x7a,
- 0xed, 0x02, 0x7b, 0x65, 0x93, 0x22, 0xb3, 0x93, 0x93, 0x4c, 0x60, 0x7b, 0x5d, 0xca, 0x3e, 0x90,
- 0x97, 0x55, 0xd2, 0x6c, 0x85, 0x59, 0x5c, 0x19, 0xde, 0xab, 0x09, 0x90, 0x3d, 0x4a, 0x14, 0xbe,
- 0x56, 0x04, 0xb3, 0x06, 0x6c, 0x3b, 0xbb, 0xbb, 0xd0, 0xee, 0xc0, 0x8e, 0xf6, 0x3a, 0x19, 0xcc,
- 0x85, 0xfb, 0x7f, 0x4d, 0xe8, 0x6b, 0xdf, 0x1b, 0x61, 0x73, 0x16, 0xcc, 0xa1, 0xca, 0x35, 0xf8,
- 0xc0, 0xf1, 0x5c, 0x9a, 0x7a, 0x2b, 0x38, 0x11, 0xa0, 0xd0, 0xe8, 0x9b, 0xc2, 0x1c, 0x7c, 0xa1,
- 0xbd, 0x97, 0xc5, 0x68, 0x83, 0xc7, 0xe8, 0xde, 0x78, 0x61, 0x86, 0xec, 0x2e, 0xb2, 0xac, 0xc6,
- 0x80, 0xf5, 0x3b, 0x21, 0x58, 0xcf, 0xe2, 0xc0, 0xaa, 0x1c, 0x92, 0xfe, 0x51, 0xa2, 0xf6, 0xcb,
- 0x32, 0x38, 0x19, 0x74, 0xc4, 0x93, 0x43, 0xeb, 0x93, 0x2c, 0x5a, 0xdf, 0xc7, 0xa3, 0xb5, 0x22,
- 0x22, 0xcd, 0x41, 0x2c, 0xc7, 0xa0, 0xf6, 0xc5, 0x10, 0xb5, 0xef, 0xe7, 0x50, 0xab, 0x8d, 0xa9,
- 0x9c, 0xa3, 0x44, 0xef, 0x43, 0x32, 0x38, 0x8d, 0xcc, 0xce, 0xb2, 0x63, 0x6f, 0x75, 0xad, 0xb6,
- 0x6f, 0xd9, 0xdb, 0x91, 0x4b, 0xdb, 0x8a, 0xc8, 0xca, 0x66, 0x3f, 0xb6, 0xd2, 0x41, 0x6c, 0xf9,
- 0x78, 0x1b, 0xa2, 0x6d, 0x2b, 0x8e, 0xad, 0x98, 0x21, 0x8c, 0x71, 0xd6, 0x8e, 0x34, 0x87, 0x4d,
- 0x4a, 0xdf, 0xfa, 0x04, 0x39, 0x38, 0x4a, 0xfc, 0x1e, 0x02, 0x8c, 0xe9, 0xf1, 0x42, 0x19, 0x28,
- 0xd8, 0x7f, 0x12, 0xf7, 0xec, 0xf4, 0x3e, 0xd3, 0x06, 0xef, 0x59, 0xdf, 0x0b, 0x04, 0x14, 0x78,
- 0xd6, 0x07, 0x09, 0xea, 0x4d, 0x60, 0xa1, 0xbd, 0x03, 0xdb, 0x97, 0xaa, 0x76, 0xe0, 0x9b, 0x44,
- 0x1c, 0x59, 0xfa, 0x52, 0xf9, 0xc1, 0xec, 0x7e, 0x1e, 0x4c, 0x7e, 0xe1, 0x91, 0x9b, 0xd8, 0xb0,
- 0x4c, 0xc5, 0x34, 0xb4, 0x5f, 0x0f, 0x01, 0xaa, 0x73, 0x00, 0xdd, 0x35, 0x12, 0xd5, 0x74, 0xb0,
- 0xd4, 0x47, 0x80, 0x45, 0x03, 0xa7, 0x1a, 0xeb, 0xad, 0x6a, 0xa3, 0xbe, 0xb9, 0xd1, 0xd4, 0x2b,
- 0x9b, 0x4b, 0x01, 0x38, 0x4d, 0x45, 0xd6, 0xbe, 0x2a, 0x81, 0x29, 0xc2, 0x96, 0xa7, 0x3d, 0x3e,
- 0x82, 0x60, 0xe8, 0x91, 0x02, 0xed, 0xed, 0xc2, 0x01, 0x82, 0x42, 0x41, 0xd0, 0x72, 0x62, 0x1a,
- 0xc6, 0x53, 0xc1, 0x14, 0x01, 0x39, 0xd8, 0x05, 0x38, 0x13, 0x63, 0xd9, 0x51, 0x32, 0x46, 0x90,
- 0x5d, 0x30, 0x58, 0xd0, 0x10, 0x36, 0xb2, 0xb7, 0xc6, 0x9f, 0x9b, 0x27, 0x4b, 0x07, 0xe7, 0x2d,
- 0x7f, 0x07, 0x9f, 0x38, 0xd0, 0x9e, 0x29, 0xd2, 0x71, 0xdd, 0x0a, 0x0a, 0x97, 0x51, 0xee, 0x21,
- 0xa7, 0x37, 0x48, 0x26, 0xed, 0xe7, 0x85, 0x63, 0x53, 0x73, 0xfa, 0x19, 0xf2, 0x14, 0x03, 0xce,
- 0x1a, 0xc8, 0x77, 0x2d, 0xcf, 0xa7, 0x36, 0xf7, 0x9d, 0xa9, 0x08, 0x05, 0x7f, 0xaa, 0x3e, 0xdc,
- 0x35, 0x30, 0x19, 0xed, 0x3e, 0x64, 0x31, 0x45, 0xa9, 0x02, 0x27, 0x58, 0x4e, 0x83, 0x29, 0x7a,
- 0xb2, 0x9a, 0x6e, 0x4b, 0x05, 0x8f, 0x82, 0x5b, 0x41, 0x42, 0xb5, 0xcd, 0x5e, 0x07, 0xfe, 0xbf,
- 0xe3, 0x60, 0x6a, 0xd5, 0xf2, 0x7c, 0xc7, 0xdd, 0xd7, 0x5e, 0x9f, 0x03, 0x53, 0xe7, 0xa0, 0xeb,
- 0x59, 0x8e, 0x7d, 0xc0, 0x5d, 0xeb, 0x7a, 0x30, 0xdb, 0x73, 0xe1, 0x65, 0xcb, 0xd9, 0xf3, 0x98,
- 0x51, 0x82, 0x49, 0x52, 0x35, 0x30, 0x6d, 0xee, 0xf9, 0x3b, 0x8e, 0x1b, 0x05, 0x64, 0x0a, 0x9e,
- 0xd5, 0x33, 0x00, 0x90, 0xff, 0x75, 0x73, 0x17, 0x06, 0x77, 0xae, 0x47, 0x29, 0xaa, 0x0a, 0xf2,
- 0xbe, 0xb5, 0x0b, 0x69, 0x84, 0x76, 0xfc, 0x1f, 0x09, 0x18, 0x47, 0x3b, 0xa5, 0x51, 0x65, 0x65,
- 0x23, 0x78, 0xd4, 0xfe, 0x50, 0x06, 0xb3, 0x2b, 0xd0, 0xa7, 0xac, 0x7a, 0xda, 0x4b, 0x72, 0x42,
- 0x97, 0x22, 0xa1, 0x79, 0x49, 0xd7, 0xf4, 0x82, 0xef, 0xc2, 0x21, 0x97, 0x4f, 0x8c, 0xc2, 0xc5,
- 0xcb, 0xec, 0x5d, 0x11, 0x38, 0x76, 0xa8, 0x5f, 0x25, 0xce, 0xfc, 0x34, 0x33, 0xdd, 0x38, 0x3e,
- 0xf8, 0x82, 0xb7, 0x89, 0x13, 0xe3, 0x6e, 0x50, 0xd9, 0x2f, 0x32, 0xf5, 0x89, 0xed, 0x8e, 0xa6,
- 0x2f, 0xd3, 0x1c, 0x07, 0xae, 0x01, 0x61, 0x29, 0x51, 0x32, 0x46, 0x98, 0x5b, 0x30, 0x62, 0xc7,
- 0x70, 0x4e, 0x26, 0x70, 0xf1, 0xab, 0x0c, 0x66, 0x9b, 0x3b, 0xce, 0x95, 0x40, 0x8e, 0xdf, 0x27,
- 0x06, 0xec, 0xb5, 0x60, 0xe6, 0x72, 0x1f, 0xa8, 0x51, 0x02, 0x7b, 0xd7, 0x9c, 0xcc, 0xdf, 0x35,
- 0xf7, 0x02, 0x39, 0x2d, 0x4c, 0x0c, 0x73, 0x31, 0x30, 0xf1, 0xd7, 0xc3, 0x49, 0x29, 0xae, 0x87,
- 0x53, 0x9f, 0x02, 0xa6, 0x28, 0xd7, 0x74, 0x99, 0x3a, 0x19, 0xe0, 0x20, 0x33, 0x5b, 0xc1, 0x3c,
- 0x5f, 0xc1, 0x74, 0xc8, 0xc7, 0x57, 0x2e, 0x7b, 0xe4, 0x7f, 0x53, 0xc2, 0xf1, 0x9a, 0x02, 0xe0,
- 0xcb, 0x63, 0x00, 0x5e, 0xfb, 0x66, 0x4e, 0x74, 0x33, 0x27, 0x94, 0x40, 0xc8, 0xc1, 0xa1, 0x2e,
- 0x3c, 0x1b, 0x4a, 0x2e, 0x7b, 0x79, 0xbe, 0x22, 0x0f, 0xe6, 0x2a, 0xd6, 0xd6, 0x56, 0xd8, 0x49,
- 0xbe, 0x54, 0xb0, 0x93, 0x8c, 0x77, 0xa9, 0x42, 0x76, 0xee, 0x9e, 0xeb, 0x42, 0x3b, 0xa8, 0x14,
- 0x6d, 0x4e, 0x7d, 0xa9, 0xea, 0xcd, 0xe0, 0x78, 0x30, 0x2e, 0xb0, 0x1d, 0xe5, 0x8c, 0xd1, 0x9f,
- 0xac, 0x7d, 0x5d, 0xd8, 0x13, 0x20, 0x90, 0x28, 0x5b, 0xa5, 0x98, 0x06, 0x78, 0x37, 0x98, 0xdf,
- 0x21, 0xb9, 0xf1, 0x72, 0x69, 0xd0, 0x59, 0x9e, 0xea, 0x8b, 0x87, 0xbf, 0x06, 0x3d, 0xcf, 0xdc,
- 0x86, 0x06, 0x9f, 0xb9, 0xaf, 0xf9, 0xca, 0x69, 0x6e, 0x77, 0x14, 0x73, 0x2a, 0x10, 0xa8, 0x49,
- 0xf6, 0xda, 0xf1, 0xc5, 0xb3, 0x20, 0xbf, 0x6c, 0x75, 0xa1, 0xf6, 0x23, 0x12, 0x98, 0x41, 0xb3,
- 0x6e, 0xbb, 0x8d, 0x9e, 0x18, 0x07, 0xcb, 0xaf, 0xe5, 0x44, 0x6f, 0x35, 0x46, 0x74, 0x16, 0x43,
- 0x1a, 0x31, 0xed, 0x46, 0xec, 0xf6, 0xe2, 0x44, 0x52, 0x13, 0xb8, 0x83, 0x0a, 0x4d, 0x3d, 0xb6,
- 0xb6, 0xba, 0x8e, 0xc9, 0x6d, 0x18, 0xf4, 0x9b, 0x42, 0xd1, 0xa1, 0xc0, 0xba, 0xe3, 0xaf, 0x5b,
- 0xb6, 0x1d, 0xc6, 0xd9, 0x38, 0x90, 0xce, 0xfb, 0xba, 0x24, 0x86, 0x2a, 0xc3, 0x75, 0xa7, 0xa5,
- 0xc7, 0x68, 0xf6, 0x4d, 0x60, 0xe1, 0xe2, 0xbe, 0x0f, 0x3d, 0x9a, 0x8b, 0x16, 0x9b, 0x37, 0xfa,
- 0x52, 0x99, 0x8b, 0x06, 0x92, 0x42, 0x9a, 0x25, 0x14, 0x98, 0x4e, 0xd4, 0xab, 0x23, 0xcc, 0x00,
- 0x4f, 0x02, 0xa5, 0xde, 0xa8, 0xe8, 0xd8, 0xdf, 0x37, 0xf0, 0xa0, 0xdc, 0xd6, 0x7e, 0x52, 0x06,
- 0x73, 0xd8, 0x01, 0x2f, 0x40, 0xe1, 0x06, 0x81, 0xf9, 0x88, 0xf6, 0x65, 0x61, 0x5f, 0x60, 0x5c,
- 0x65, 0xb6, 0x80, 0x78, 0x41, 0x6f, 0x59, 0xdd, 0x7e, 0x41, 0x17, 0x8c, 0xbe, 0xd4, 0x01, 0x80,
- 0xc8, 0x03, 0x01, 0xf9, 0x65, 0x21, 0x87, 0xe0, 0x61, 0xdc, 0x1d, 0x15, 0x2a, 0xbf, 0x22, 0x83,
- 0x59, 0x34, 0x49, 0x09, 0x40, 0x69, 0x70, 0xa0, 0x38, 0x76, 0x77, 0x3f, 0x5a, 0x16, 0x09, 0x1e,
- 0x53, 0x35, 0x92, 0x3f, 0x12, 0x9e, 0xb9, 0x63, 0x11, 0x31, 0xbc, 0x4c, 0x08, 0xbf, 0x0f, 0x0a,
- 0xcd, 0xe7, 0x87, 0x30, 0x77, 0x54, 0xf0, 0x3d, 0x5c, 0x04, 0xc5, 0x8d, 0x1e, 0x46, 0xee, 0x4b,
- 0xb2, 0xc8, 0xa5, 0x1d, 0x07, 0x0e, 0x83, 0x21, 0x33, 0xab, 0xeb, 0xb4, 0xcd, 0xee, 0x7a, 0x74,
- 0xaa, 0x36, 0x4a, 0x50, 0xef, 0xa2, 0xfe, 0xe1, 0xe4, 0xc4, 0xf9, 0x4d, 0x89, 0xf7, 0x59, 0x60,
- 0x19, 0x31, 0x07, 0xef, 0x6e, 0x05, 0x27, 0x3a, 0x96, 0x67, 0x5e, 0xec, 0x42, 0xdd, 0x6e, 0xbb,
- 0xfb, 0x44, 0x1c, 0x74, 0x5a, 0x75, 0xe0, 0x85, 0x7a, 0x0f, 0x28, 0x78, 0xfe, 0x7e, 0x97, 0xcc,
- 0x13, 0xd9, 0x73, 0x7a, 0xb1, 0x45, 0x35, 0x51, 0x76, 0x83, 0x7c, 0xc5, 0xba, 0x75, 0x4e, 0x89,
- 0xb9, 0x75, 0xaa, 0x4f, 0x02, 0x45, 0xc7, 0xb5, 0xb6, 0x2d, 0x72, 0x45, 0xdd, 0xc2, 0x81, 0xb0,
- 0xad, 0xc4, 0x14, 0x68, 0xe0, 0x2c, 0x06, 0xcd, 0xaa, 0x3e, 0x05, 0xcc, 0x58, 0xbb, 0xe6, 0x36,
- 0xbc, 0xdf, 0xb2, 0xc9, 0xa1, 0xf6, 0x85, 0x3b, 0x4e, 0x1f, 0x38, 0x82, 0x48, 0xdf, 0x1b, 0x51,
- 0x56, 0xf5, 0x6e, 0x70, 0x4d, 0xdb, 0x85, 0xa6, 0x0f, 0x91, 0x80, 0xce, 0x5b, 0x9d, 0x6d, 0xe8,
- 0x57, 0xb7, 0xd6, 0x2c, 0xcf, 0xb3, 0xec, 0x6d, 0x7a, 0x0b, 0x65, 0x7c, 0x06, 0xed, 0x83, 0x92,
- 0x68, 0x64, 0x3a, 0x2c, 0x19, 0xa2, 0x12, 0x23, 0xdc, 0x96, 0xcd, 0x48, 0x51, 0x16, 0x74, 0x8e,
- 0x7d, 0xb5, 0x50, 0xcc, 0xb8, 0x78, 0xb6, 0xb2, 0x1f, 0xfa, 0x7f, 0x5f, 0x02, 0xd3, 0x15, 0xe7,
- 0x8a, 0x8d, 0x9b, 0xc9, 0x9d, 0x62, 0x96, 0xf2, 0x80, 0x63, 0xe6, 0xfc, 0xbd, 0xcb, 0x89, 0x67,
- 0xca, 0x70, 0x6d, 0x83, 0x22, 0x63, 0x60, 0x48, 0x6c, 0x77, 0x82, 0xb7, 0xe1, 0x26, 0x95, 0x93,
- 0xbd, 0x5c, 0x7f, 0x5b, 0x06, 0xf9, 0x8a, 0xeb, 0xf4, 0xb4, 0xb7, 0xe5, 0x52, 0x38, 0x89, 0x75,
- 0x5c, 0xa7, 0xd7, 0xc2, 0xd7, 0x59, 0x46, 0xfb, 0x22, 0x6c, 0x9a, 0x7a, 0x27, 0x98, 0xee, 0x39,
- 0x9e, 0xe5, 0x07, 0x93, 0x90, 0x85, 0x3b, 0x1e, 0x33, 0xb0, 0x2f, 0x58, 0xa7, 0x99, 0x8c, 0x30,
- 0x3b, 0xea, 0xf3, 0xb1, 0x08, 0x91, 0x5c, 0x90, 0x18, 0x83, 0x2b, 0x3d, 0xfb, 0x52, 0xb5, 0x97,
- 0xb1, 0x48, 0x3e, 0x8d, 0x47, 0xf2, 0xb1, 0x03, 0x24, 0xec, 0x3a, 0xbd, 0xb1, 0xb8, 0x75, 0xbc,
- 0x32, 0x44, 0xf5, 0xe9, 0x1c, 0xaa, 0xb7, 0x08, 0x95, 0x99, 0x3d, 0xa2, 0x1f, 0xcc, 0x03, 0x80,
- 0x8d, 0x94, 0x0d, 0x34, 0x7d, 0x12, 0xb3, 0xd0, 0x7e, 0x38, 0xcf, 0xc8, 0xb2, 0xc4, 0xcb, 0xf2,
- 0xf1, 0x31, 0x36, 0x10, 0x26, 0x1f, 0x23, 0xd1, 0x12, 0x28, 0xec, 0xa1, 0xd7, 0x54, 0xa2, 0x82,
- 0x24, 0xf0, 0xa3, 0x41, 0xbe, 0xd4, 0x7e, 0x33, 0x07, 0x0a, 0x38, 0x41, 0x3d, 0x03, 0x00, 0x36,
- 0x0b, 0xc8, 0x91, 0xcc, 0x1c, 0x36, 0x00, 0x98, 0x14, 0xac, 0xad, 0x56, 0x87, 0xbe, 0x26, 0x06,
- 0x77, 0x94, 0x80, 0xbe, 0xc6, 0xc6, 0x02, 0xa6, 0x45, 0xcd, 0x07, 0x26, 0x05, 0x7d, 0x8d, 0x9f,
- 0x6a, 0x70, 0x8b, 0xdc, 0x34, 0x90, 0x37, 0xa2, 0x84, 0xf0, 0xeb, 0x5a, 0x78, 0x3f, 0x65, 0xf0,
- 0x35, 0x4e, 0x41, 0x53, 0x69, 0xac, 0x96, 0x4b, 0x51, 0x11, 0x45, 0x9c, 0xa9, 0x3f, 0x59, 0x7b,
- 0x5d, 0xa8, 0x36, 0x15, 0x4e, 0x6d, 0x6e, 0x4f, 0x21, 0xde, 0xec, 0x95, 0xe7, 0x4f, 0x0b, 0x60,
- 0xa6, 0xee, 0x74, 0xa8, 0xee, 0x30, 0xd3, 0xcd, 0x4f, 0x17, 0x52, 0x4d, 0x37, 0x43, 0x1a, 0x31,
- 0x0a, 0xf2, 0x0c, 0x5e, 0x41, 0xc4, 0x28, 0xb0, 0xfa, 0xa1, 0x2e, 0x81, 0x22, 0xd6, 0xde, 0x83,
- 0x17, 0x1f, 0x26, 0x91, 0xc0, 0xa2, 0x35, 0xe8, 0x97, 0xff, 0xe1, 0x74, 0xec, 0xbf, 0x81, 0x02,
- 0xae, 0x60, 0xc2, 0xde, 0x10, 0x5f, 0x51, 0x29, 0xb9, 0xa2, 0x72, 0x72, 0x45, 0xf3, 0xfd, 0x15,
- 0x4d, 0xb3, 0x8a, 0x10, 0xa7, 0x21, 0xd9, 0xeb, 0xf8, 0xdf, 0x4e, 0x01, 0x50, 0x37, 0x2f, 0x5b,
- 0xdb, 0x64, 0x6f, 0xf9, 0x0f, 0x83, 0xd9, 0x13, 0xdd, 0x05, 0xfe, 0x31, 0x66, 0x20, 0xbc, 0x13,
- 0x4c, 0xd1, 0x71, 0x8f, 0x56, 0xe4, 0x3a, 0xae, 0x22, 0x11, 0x15, 0x62, 0xd4, 0x3e, 0xe8, 0x1b,
- 0x41, 0x7e, 0xee, 0x8e, 0x76, 0xa9, 0xef, 0x8e, 0xf6, 0xc1, 0x3b, 0x18, 0x31, 0x37, 0xb7, 0x6b,
- 0xef, 0x13, 0x3e, 0x43, 0xc5, 0xf0, 0xc3, 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x09, 0x4c, 0x39, 0xe1,
- 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb5, 0xb7, 0x1c, 0x23, 0xc8, 0x29, 0xb8, 0x75, 0x26, 0xc4,
- 0xc7, 0x44, 0x8e, 0x29, 0x9e, 0x5a, 0x09, 0xa2, 0x36, 0xa2, 0x7a, 0x9c, 0xb7, 0xfc, 0x9d, 0x9a,
- 0x65, 0x5f, 0xf2, 0xb4, 0xef, 0x17, 0xb3, 0x20, 0x19, 0xfc, 0xa5, 0x74, 0xf8, 0xf3, 0x51, 0x93,
- 0x9a, 0x3c, 0x6a, 0xf7, 0xc4, 0x51, 0x19, 0xcc, 0x6d, 0x0c, 0x80, 0x77, 0x81, 0x22, 0x61, 0x94,
- 0x76, 0xa2, 0x67, 0x63, 0xf1, 0x0b, 0x29, 0x19, 0xf4, 0x0b, 0xed, 0xbd, 0x21, 0x8e, 0xe7, 0x38,
- 0x1c, 0x97, 0x0e, 0xc5, 0x59, 0xe6, 0x90, 0x9e, 0x7d, 0x22, 0x98, 0xa2, 0x92, 0x56, 0x17, 0xd8,
- 0x56, 0xac, 0x1c, 0x53, 0x01, 0x28, 0xae, 0x39, 0x97, 0x61, 0xcb, 0x51, 0x72, 0xe8, 0x3f, 0xe2,
- 0xaf, 0xe5, 0x28, 0x92, 0xf6, 0xaa, 0x69, 0x30, 0x1d, 0x86, 0xcb, 0xfb, 0x7d, 0x09, 0x28, 0x65,
- 0x3c, 0x43, 0x5b, 0x76, 0x9d, 0x5d, 0x52, 0x23, 0x71, 0x7f, 0xfc, 0x9f, 0x11, 0x76, 0x10, 0x09,
- 0xc3, 0xd8, 0xf5, 0x17, 0x16, 0x83, 0x25, 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42,
- 0x0e, 0x23, 0xa2, 0xa5, 0x64, 0xdf, 0xd4, 0x7e, 0x4b, 0x02, 0x85, 0x72, 0xd7, 0xb1, 0x21, 0x7b,
- 0x68, 0x74, 0xe8, 0xe9, 0xc4, 0xc1, 0xfb, 0x18, 0xda, 0x73, 0x25, 0x51, 0x5b, 0x23, 0x12, 0x00,
- 0x2a, 0x5b, 0x50, 0xb6, 0x62, 0x83, 0x54, 0x22, 0xe9, 0xec, 0x05, 0xfa, 0x55, 0x09, 0xcc, 0x90,
- 0xc8, 0x64, 0xa5, 0x6e, 0x57, 0x7b, 0x4c, 0x24, 0xd4, 0x01, 0x21, 0x07, 0xb5, 0x5f, 0x16, 0x3e,
- 0x14, 0x15, 0xd6, 0x2a, 0xa4, 0x9d, 0x22, 0x44, 0x5b, 0xba, 0x33, 0x3a, 0x62, 0x3b, 0x71, 0x43,
- 0x19, 0xca, 0x5e, 0xd4, 0x7f, 0x20, 0x21, 0x03, 0xc0, 0xbe, 0xb4, 0xee, 0xc2, 0xcb, 0x16, 0xbc,
- 0xa2, 0x3d, 0x3a, 0x12, 0xf6, 0xc1, 0xb0, 0x4b, 0x6f, 0x12, 0x5e, 0xc4, 0x61, 0x48, 0xc6, 0x6e,
- 0x84, 0xcd, 0x76, 0xa3, 0x4c, 0xb4, 0x17, 0xef, 0x8f, 0x85, 0xc5, 0x90, 0x31, 0xd8, 0xec, 0x82,
- 0x6b, 0x36, 0xf1, 0x5c, 0x64, 0x2f, 0xd8, 0x8f, 0x4e, 0x81, 0xe9, 0x0d, 0xdb, 0xeb, 0x75, 0x4d,
- 0x6f, 0x47, 0xfb, 0x57, 0x19, 0x14, 0xc9, 0x75, 0x9b, 0xda, 0x77, 0x71, 0xd1, 0x5d, 0x9e, 0xbd,
- 0x07, 0xdd, 0xc0, 0x81, 0x87, 0x3c, 0x44, 0xf6, 0x91, 0xc4, 0xd8, 0x47, 0xda, 0x07, 0x65, 0xd1,
- 0x49, 0x6a, 0x50, 0x28, 0xbd, 0xdf, 0x33, 0x3e, 0xa0, 0x48, 0xcf, 0x6a, 0xfb, 0x7b, 0x2e, 0xf4,
- 0x06, 0x06, 0x14, 0x89, 0xa5, 0xb2, 0x4e, 0xbe, 0x32, 0xc2, 0xcf, 0x35, 0x13, 0x4c, 0xd1, 0xc4,
- 0x03, 0x9b, 0x51, 0x07, 0x23, 0x1e, 0x9c, 0x02, 0x45, 0xd3, 0xf5, 0x2d, 0xcf, 0xa7, 0xdb, 0xb3,
- 0xf4, 0x09, 0x75, 0x97, 0xe4, 0xdf, 0x86, 0xdb, 0x0d, 0xe2, 0x40, 0x85, 0x09, 0xda, 0xaf, 0x08,
- 0xcd, 0x1f, 0x93, 0x6b, 0x9e, 0x0e, 0xf2, 0xfb, 0x47, 0x58, 0xe1, 0x7e, 0x14, 0xb8, 0xca, 0x28,
- 0xb5, 0xf4, 0x4d, 0x12, 0x36, 0x28, 0x8c, 0x10, 0xd4, 0xd1, 0xde, 0x23, 0x33, 0xeb, 0x77, 0xfb,
- 0xdc, 0x18, 0x41, 0xa5, 0x18, 0x8d, 0x11, 0x61, 0x42, 0xc2, 0x5e, 0x37, 0xb7, 0x84, 0x2b, 0x0b,
- 0x2f, 0xe1, 0x6a, 0xbf, 0x24, 0xbc, 0x17, 0x15, 0x8a, 0x72, 0xc8, 0x1a, 0x60, 0xd2, 0x75, 0x7c,
- 0x1f, 0x16, 0xda, 0x57, 0x1a, 0x56, 0xd2, 0x11, 0xc2, 0xf6, 0xcd, 0x53, 0x40, 0x2a, 0x55, 0xb5,
- 0x1f, 0x9d, 0x02, 0x73, 0xe7, 0x5d, 0xcb, 0xb7, 0xec, 0xed, 0x96, 0xe3, 0x74, 0x3d, 0xed, 0x1b,
- 0xcc, 0x46, 0xc5, 0x53, 0x40, 0xb1, 0xed, 0xd8, 0x5b, 0xd6, 0x36, 0x15, 0xe3, 0x19, 0xae, 0x72,
- 0xa5, 0xea, 0xe2, 0xba, 0xeb, 0x5c, 0xb6, 0x3a, 0xd0, 0x2d, 0xe3, 0x5c, 0x06, 0xcd, 0x8d, 0xf4,
- 0x98, 0x09, 0xbc, 0x76, 0x7b, 0xff, 0x57, 0x6c, 0x79, 0x61, 0xe4, 0x17, 0x9a, 0xc8, 0xc4, 0x5d,
- 0xab, 0x82, 0xe9, 0xae, 0x69, 0x6f, 0xef, 0x05, 0x33, 0xef, 0xfe, 0x5d, 0xd4, 0x38, 0x4a, 0x35,
- 0xfa, 0x91, 0x11, 0x7e, 0x8e, 0x9d, 0xdc, 0x90, 0xa9, 0x4f, 0xda, 0x1e, 0xfe, 0x7f, 0xf6, 0x63,
- 0x39, 0x30, 0xcb, 0x14, 0xaa, 0xce, 0x82, 0xa9, 0x8a, 0xbe, 0x5c, 0xda, 0xa8, 0xb5, 0x94, 0x63,
- 0x48, 0x8a, 0xcd, 0x8d, 0xb5, 0xb5, 0x92, 0x51, 0xfd, 0x1e, 0x5d, 0xc9, 0xa1, 0x77, 0x2b, 0x46,
- 0x09, 0x3d, 0x2b, 0x12, 0x7a, 0x68, 0xae, 0x36, 0x8c, 0x96, 0x5e, 0x57, 0x64, 0x64, 0x8f, 0xea,
- 0xcf, 0x5a, 0x2f, 0xd5, 0x2b, 0x4a, 0x1e, 0xfd, 0x5f, 0xda, 0xa8, 0xd5, 0xf4, 0x96, 0x52, 0x88,
- 0x42, 0xb1, 0x15, 0x51, 0x72, 0xb9, 0xd4, 0xdc, 0x28, 0xd5, 0x94, 0x29, 0x94, 0xbc, 0xbc, 0x51,
- 0xaf, 0x5f, 0x50, 0xa6, 0x51, 0x11, 0xe5, 0x46, 0x7d, 0xb9, 0x5a, 0xd1, 0xeb, 0x2d, 0x65, 0x46,
- 0xbd, 0x0a, 0x1c, 0x6f, 0xb6, 0x8c, 0x52, 0x75, 0x65, 0xb5, 0xb5, 0xdc, 0x30, 0xce, 0x97, 0x8c,
- 0x8a, 0x02, 0x54, 0x05, 0xcc, 0xad, 0x1b, 0x8d, 0x65, 0x1d, 0xc7, 0xf2, 0x28, 0xd5, 0x94, 0x59,
- 0xf4, 0x55, 0xcb, 0x28, 0xd5, 0x9b, 0xb5, 0x52, 0x4b, 0x57, 0xe6, 0xce, 0xde, 0x07, 0xa6, 0x83,
- 0xea, 0xaa, 0x45, 0x20, 0xe9, 0x75, 0xe5, 0x18, 0xfe, 0x6d, 0x2a, 0x39, 0xf4, 0xbb, 0x8c, 0xf8,
- 0x2d, 0x02, 0xa9, 0xa2, 0x2b, 0x32, 0xfa, 0xad, 0xb6, 0x94, 0x3c, 0xfa, 0x5d, 0x47, 0x2c, 0x16,
- 0x81, 0xb4, 0x5a, 0x55, 0x8a, 0xe8, 0xb7, 0xb5, 0xaa, 0x4c, 0xf1, 0xb7, 0x6e, 0x27, 0xf6, 0xc2,
- 0x07, 0x25, 0x1f, 0x63, 0x68, 0xf8, 0xd1, 0x1c, 0x19, 0xff, 0xd7, 0x5e, 0x29, 0x89, 0xf4, 0x75,
- 0xc9, 0xf4, 0xd3, 0x35, 0x9a, 0xb7, 0xe4, 0xc6, 0xd8, 0x6a, 0x54, 0x0d, 0x9c, 0xd2, 0xeb, 0x95,
- 0xf5, 0x46, 0xb5, 0xde, 0x22, 0x01, 0xb3, 0xf4, 0x52, 0x79, 0x15, 0xe3, 0x0c, 0x11, 0x82, 0x6b,
- 0x8d, 0x8a, 0x5e, 0xc3, 0x2f, 0x96, 0x1b, 0x1b, 0xf5, 0x8a, 0xb2, 0x85, 0xca, 0x2a, 0x6d, 0xb4,
- 0x56, 0x37, 0x0d, 0xfd, 0x99, 0x1b, 0x55, 0x43, 0xaf, 0x28, 0xdb, 0x88, 0x46, 0xad, 0x54, 0x5f,
- 0xd9, 0x28, 0xad, 0xd0, 0xfd, 0xc2, 0x8d, 0xf5, 0xf5, 0x06, 0xde, 0x31, 0xdc, 0xd1, 0xfe, 0x21,
- 0x0f, 0xa6, 0x4b, 0x7b, 0xbe, 0xb3, 0x65, 0x75, 0xbb, 0xda, 0x43, 0xd2, 0xe1, 0x9b, 0x62, 0x89,
- 0x6b, 0x8a, 0x07, 0x1a, 0x50, 0x50, 0x56, 0xd8, 0x78, 0x82, 0x04, 0xa6, 0x1d, 0x9e, 0x8e, 0x9c,
- 0xb1, 0x65, 0xba, 0xd3, 0x4c, 0x1e, 0x89, 0x23, 0xae, 0x4d, 0x5b, 0x16, 0x7e, 0x43, 0x1f, 0xcf,
- 0xde, 0x0f, 0xe6, 0x58, 0x4a, 0x38, 0xa8, 0x54, 0x69, 0x85, 0x44, 0x9d, 0x0a, 0xe2, 0xcc, 0x91,
- 0xa8, 0x53, 0xf8, 0x50, 0x80, 0x84, 0xdb, 0x4b, 0xb5, 0x55, 0x43, 0x7a, 0x7a, 0x1c, 0xcc, 0x56,
- 0xf4, 0x66, 0xd9, 0xa8, 0x62, 0x3f, 0x75, 0x25, 0xcf, 0x7b, 0x19, 0x24, 0x5a, 0x66, 0x7c, 0x8d,
- 0x44, 0x95, 0xf2, 0x5b, 0x42, 0xf6, 0x56, 0x3c, 0xed, 0x74, 0x0a, 0xf9, 0x92, 0x47, 0x9a, 0x42,
- 0x6a, 0x2f, 0xc9, 0x93, 0x75, 0xb2, 0xe6, 0xde, 0xee, 0xae, 0xe9, 0xee, 0x73, 0xfe, 0x6a, 0xa3,
- 0xea, 0x5d, 0xfc, 0xf8, 0x9e, 0x18, 0xa1, 0x06, 0x99, 0x50, 0x3d, 0xd7, 0xd9, 0xed, 0x05, 0x7d,
- 0x35, 0x7d, 0xd2, 0xfe, 0x1f, 0xe1, 0x99, 0x63, 0xa9, 0xba, 0xc8, 0x54, 0x66, 0x84, 0xa1, 0xfd,
- 0x07, 0x24, 0x91, 0x59, 0x64, 0x62, 0x31, 0xdf, 0xee, 0x1a, 0xf1, 0x37, 0x79, 0x70, 0x15, 0x8d,
- 0x3e, 0x12, 0xae, 0x3f, 0x20, 0x53, 0xf5, 0x35, 0x99, 0x6a, 0x06, 0x35, 0xa8, 0xe5, 0xc8, 0xa0,
- 0x66, 0x36, 0xbc, 0xf3, 0x82, 0x1b, 0xde, 0x6f, 0x13, 0x3e, 0xf4, 0x50, 0xaa, 0x2e, 0x0e, 0xa8,
- 0xe3, 0x64, 0xb6, 0xe5, 0x5f, 0x20, 0x89, 0xac, 0xb6, 0x0a, 0x71, 0xf8, 0xed, 0xae, 0x6b, 0xef,
- 0xc8, 0x81, 0x05, 0x5e, 0x55, 0xd4, 0x27, 0x83, 0xe9, 0x1e, 0x4d, 0xa1, 0x72, 0x39, 0x1d, 0xa7,
- 0x5c, 0x46, 0x98, 0x13, 0x41, 0x04, 0xed, 0x4e, 0xcf, 0xb1, 0xec, 0x70, 0x5d, 0x3e, 0x78, 0x46,
- 0xf3, 0x4e, 0x3c, 0x75, 0x08, 0x62, 0xd1, 0xe1, 0x87, 0x28, 0x02, 0x69, 0x9e, 0x89, 0x40, 0x8a,
- 0x84, 0xe8, 0xc3, 0x5d, 0x7c, 0xa3, 0xca, 0x9e, 0x4b, 0x1c, 0x5e, 0x24, 0x83, 0x4d, 0x3a, 0xfb,
- 0x74, 0x30, 0x1d, 0x94, 0x8f, 0xac, 0xbb, 0x46, 0xad, 0x56, 0x5a, 0x2b, 0x91, 0x85, 0xca, 0xc6,
- 0xba, 0x5e, 0x2f, 0x55, 0x95, 0x1c, 0x1a, 0xe8, 0x6a, 0x6b, 0xcd, 0xd6, 0x46, 0xa5, 0xda, 0x50,
- 0x24, 0xfc, 0x84, 0x32, 0x95, 0xd7, 0xd7, 0x15, 0x59, 0x7b, 0xe3, 0x14, 0x98, 0x5a, 0x31, 0xbb,
- 0x5d, 0xe8, 0xee, 0x6b, 0x5f, 0x95, 0x80, 0x12, 0xcc, 0x0e, 0xd6, 0x4c, 0xdb, 0xda, 0x82, 0x9e,
- 0x9f, 0xbc, 0x50, 0xf1, 0x3e, 0xe1, 0x6b, 0x96, 0x68, 0x19, 0x8b, 0xfd, 0xf4, 0x63, 0x74, 0xfc,
- 0x36, 0x90, 0xb7, 0xec, 0x2d, 0x87, 0x2e, 0x57, 0xf4, 0xfb, 0xdb, 0x04, 0x1f, 0xe3, 0x6d, 0x03,
- 0x9c, 0x51, 0xf0, 0xa6, 0x25, 0x41, 0x2e, 0xb2, 0x5f, 0xb5, 0x78, 0x47, 0x1e, 0xcc, 0x07, 0x4c,
- 0x54, 0xed, 0x0e, 0x7c, 0x90, 0xdd, 0x06, 0xfd, 0xc9, 0xbc, 0x68, 0xf0, 0x9b, 0xfe, 0xfa, 0x60,
- 0x52, 0x31, 0x22, 0x6d, 0x01, 0xd0, 0x36, 0x7d, 0xb8, 0xed, 0xb8, 0x56, 0xb8, 0x16, 0xf1, 0xe4,
- 0x34, 0xd4, 0xca, 0xe4, 0xeb, 0x7d, 0x83, 0xa1, 0xa3, 0xde, 0x03, 0x66, 0x61, 0x18, 0x6d, 0x30,
- 0xd8, 0x26, 0x4d, 0xc4, 0x8b, 0xcd, 0xaf, 0xfd, 0x81, 0x50, 0x8c, 0x1d, 0x91, 0x6a, 0xa6, 0xc3,
- 0x6c, 0x73, 0xb4, 0xae, 0x67, 0xa3, 0xbe, 0x56, 0x32, 0x9a, 0xab, 0xa5, 0x5a, 0xad, 0x5a, 0x5f,
- 0x09, 0xc3, 0xde, 0xaa, 0x60, 0xa1, 0xd2, 0x38, 0x5f, 0x67, 0xe2, 0x12, 0xe7, 0xb5, 0x75, 0x30,
- 0x1d, 0xc8, 0x6b, 0xd0, 0x29, 0x2a, 0x56, 0x66, 0xf4, 0x14, 0x15, 0x93, 0x84, 0x4c, 0x43, 0xab,
- 0x1d, 0xba, 0xd6, 0xe3, 0xff, 0xda, 0x6f, 0x98, 0xa0, 0x80, 0xfd, 0x59, 0xb4, 0x77, 0xe1, 0x79,
- 0x71, 0xaf, 0x6b, 0xb6, 0xa1, 0xb6, 0x9b, 0x62, 0x25, 0x3c, 0xb8, 0xf7, 0x53, 0x3a, 0x70, 0xef,
- 0x27, 0xfe, 0x4b, 0x47, 0x8c, 0x93, 0x83, 0x7c, 0x68, 0x0c, 0x92, 0x85, 0x0f, 0x47, 0x93, 0xe8,
- 0xd9, 0x44, 0x5c, 0x6f, 0x28, 0x9b, 0x31, 0x2a, 0x19, 0xcf, 0x53, 0xba, 0x55, 0x60, 0x31, 0x1f,
- 0xa8, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f, 0xca, 0x83, 0x42, 0xb3, 0xd7, 0xb5, 0x7c, 0xed, 0xe7,
- 0xa4, 0xb1, 0x60, 0x46, 0xee, 0x6a, 0x95, 0x87, 0xde, 0xd5, 0x1a, 0xf9, 0x4b, 0xe6, 0x05, 0xfc,
- 0x25, 0x5b, 0xf0, 0x41, 0x9f, 0xf7, 0x97, 0xbc, 0x93, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0x63, 0x07,
- 0x88, 0x14, 0x57, 0x6b, 0xc0, 0x9d, 0x08, 0x67, 0x9f, 0x48, 0x43, 0xb3, 0x03, 0x50, 0x5c, 0x6a,
- 0xb4, 0x5a, 0x8d, 0x35, 0xe5, 0x18, 0x9e, 0x7e, 0x35, 0xd6, 0x49, 0xa0, 0xdc, 0x6a, 0xbd, 0xae,
- 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0xb8, 0x2f, 0x71, 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d,
- 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd, 0xb4, 0x0c, 0x0a, 0x6b, 0xd0, 0xdd, 0x86, 0xda, 0xb3,
- 0x53, 0x38, 0xd8, 0x6d, 0x59, 0xae, 0x47, 0x42, 0xeb, 0x47, 0x0e, 0x76, 0x6c, 0x9a, 0x7a, 0x23,
- 0x98, 0xf7, 0x60, 0xdb, 0xb1, 0x3b, 0x41, 0x26, 0xd2, 0x1f, 0xf1, 0x89, 0xda, 0xcb, 0x53, 0x42,
- 0x86, 0x19, 0x1d, 0x8b, 0x97, 0x5c, 0x1a, 0x60, 0x06, 0x95, 0x9a, 0x3d, 0x30, 0x5f, 0x97, 0xd1,
- 0x47, 0xbd, 0x7d, 0xed, 0xe5, 0xc2, 0x9e, 0x8f, 0xb7, 0x82, 0xe2, 0xc5, 0xe0, 0x8e, 0x26, 0x39,
- 0xb6, 0x3f, 0xa6, 0x79, 0xd4, 0x25, 0x70, 0xc2, 0x83, 0x5d, 0xd8, 0xf6, 0x61, 0x07, 0x35, 0x5d,
- 0x63, 0x68, 0xa7, 0x70, 0x30, 0xbb, 0xf6, 0x3b, 0x2c, 0x80, 0x77, 0xf3, 0x00, 0xde, 0x34, 0x40,
- 0x94, 0xa8, 0x42, 0xf1, 0x73, 0x13, 0x54, 0x8d, 0x66, 0xd7, 0x09, 0x0d, 0xdf, 0xe0, 0x19, 0xbd,
- 0xdb, 0xf1, 0x77, 0xbb, 0xf8, 0x1d, 0x3d, 0x1a, 0x1c, 0x3c, 0xab, 0x8b, 0x60, 0xca, 0xb4, 0xf7,
- 0xf1, 0xab, 0x7c, 0x42, 0xad, 0x83, 0x4c, 0xda, 0xab, 0x42, 0xe4, 0xef, 0xe5, 0x90, 0x7f, 0xbc,
- 0x18, 0xbb, 0xd9, 0x03, 0xff, 0x43, 0x53, 0xa0, 0xb0, 0x6e, 0x7a, 0x3e, 0xd4, 0xfe, 0xa7, 0x2c,
- 0x8a, 0xfc, 0x4d, 0x60, 0x61, 0xcb, 0x69, 0xef, 0x79, 0xb0, 0xc3, 0x37, 0xca, 0xbe, 0xd4, 0x71,
- 0x60, 0xae, 0xde, 0x02, 0x94, 0x20, 0x91, 0x92, 0x0d, 0x5c, 0x60, 0x0f, 0xa4, 0xe3, 0x6b, 0xe0,
- 0xbc, 0x75, 0xd3, 0xf5, 0x1b, 0x5b, 0x38, 0x2d, 0xbc, 0x06, 0x8e, 0x4d, 0xe4, 0xa0, 0x2f, 0x26,
- 0x40, 0x3f, 0x15, 0x0f, 0xfd, 0xb4, 0x00, 0xf4, 0x6a, 0x09, 0x4c, 0x6f, 0x59, 0x5d, 0x88, 0x3f,
- 0x98, 0xc1, 0x1f, 0x0c, 0x1a, 0x93, 0xb0, 0xec, 0xc3, 0x31, 0x69, 0xd9, 0xea, 0x42, 0x23, 0xfc,
- 0x2c, 0x98, 0xc8, 0x80, 0x68, 0x22, 0x53, 0x23, 0x27, 0xe1, 0x90, 0xe1, 0x65, 0x9b, 0xbb, 0x30,
- 0xd8, 0xf8, 0xb6, 0xe9, 0xb1, 0xf4, 0x8e, 0xe9, 0x9b, 0x18, 0x8c, 0x39, 0x03, 0xff, 0xe7, 0x7d,
- 0xb2, 0xe5, 0x7e, 0x9f, 0xec, 0xe7, 0xcb, 0xe9, 0x7a, 0xc4, 0x80, 0xd9, 0x98, 0x16, 0x75, 0x31,
- 0x00, 0x88, 0x58, 0x8a, 0xe1, 0x33, 0x02, 0xa6, 0x6d, 0xba, 0xd0, 0x5f, 0x67, 0xbd, 0xa0, 0x0b,
- 0x06, 0x9f, 0x88, 0x0f, 0xe1, 0x78, 0x4d, 0x73, 0x97, 0x5c, 0xf3, 0x56, 0x46, 0xef, 0xe8, 0xe1,
- 0x8a, 0x03, 0xe9, 0x51, 0xff, 0x5b, 0x18, 0x77, 0xff, 0x3b, 0xa8, 0x8e, 0xd9, 0x37, 0xc3, 0xd7,
- 0xe6, 0x81, 0x5c, 0xde, 0xf3, 0x1f, 0xd1, 0xdd, 0xef, 0xb7, 0x84, 0x7d, 0xcc, 0x69, 0x7f, 0xb6,
- 0xe7, 0x1f, 0x6d, 0xef, 0x9b, 0x52, 0x4b, 0xc4, 0x7c, 0xd9, 0xe3, 0xea, 0x96, 0xbd, 0x8e, 0xbc,
- 0x4d, 0x0e, 0x8f, 0x46, 0x3d, 0x94, 0x3b, 0xbc, 0x69, 0xae, 0x91, 0xfe, 0x89, 0xe9, 0x19, 0xc2,
- 0xe7, 0xa0, 0xe3, 0xc9, 0x73, 0x37, 0x13, 0x60, 0xd7, 0x56, 0x2c, 0xca, 0x39, 0x83, 0x3c, 0x68,
- 0xaf, 0x10, 0x3e, 0x30, 0x4a, 0xc4, 0x96, 0x78, 0x8c, 0x27, 0x9d, 0x4d, 0xf5, 0x1a, 0xa1, 0x63,
- 0xa3, 0x09, 0xc5, 0x66, 0x0f, 0xd8, 0xdf, 0xb3, 0xc7, 0x74, 0x4a, 0x87, 0x46, 0x4c, 0x7b, 0xb5,
- 0xf0, 0x82, 0x3e, 0xa9, 0xf6, 0x90, 0xbd, 0xfa, 0x74, 0xf2, 0x16, 0x73, 0x14, 0x4b, 0x2c, 0x78,
- 0x02, 0xf7, 0xd6, 0xca, 0xa0, 0x48, 0x16, 0x7e, 0xb5, 0x37, 0x0b, 0x37, 0x11, 0xd4, 0x1b, 0xf1,
- 0xc7, 0x77, 0xc2, 0xe7, 0x34, 0x6b, 0x0e, 0xdc, 0x31, 0x9f, 0x7c, 0xaa, 0x63, 0x3e, 0x7c, 0x04,
- 0x16, 0x81, 0x76, 0x44, 0xea, 0x98, 0xf1, 0x74, 0x32, 0x4d, 0x0b, 0x1b, 0xc8, 0x50, 0xf6, 0x78,
- 0xbf, 0xb0, 0x00, 0xe6, 0x48, 0xd1, 0xe4, 0x7c, 0xa1, 0xf6, 0x1e, 0xe9, 0xdb, 0x07, 0x75, 0xb5,
- 0x0e, 0xe6, 0xae, 0x60, 0xb6, 0xc9, 0x7d, 0xb4, 0x74, 0xe5, 0xe2, 0x96, 0xc4, 0x75, 0x0f, 0x52,
- 0xcf, 0xe0, 0x06, 0x5b, 0xee, 0x7b, 0x24, 0x63, 0xb2, 0xc1, 0x42, 0x0e, 0x4f, 0x14, 0xb1, 0x91,
- 0xc5, 0x26, 0xa9, 0xa7, 0x40, 0xf1, 0xb2, 0x05, 0xaf, 0x54, 0x3b, 0xd4, 0xba, 0xa5, 0x4f, 0xda,
- 0xaf, 0x0a, 0xfb, 0x4c, 0xb2, 0x70, 0x53, 0x5e, 0xb2, 0xd5, 0x42, 0x31, 0xcf, 0xc9, 0xa1, 0x6c,
- 0x4d, 0x20, 0x1a, 0x90, 0x44, 0xee, 0xcc, 0xa6, 0x61, 0xe6, 0xcb, 0x29, 0x14, 0x31, 0xce, 0x70,
- 0xe6, 0x83, 0xf0, 0x25, 0x9e, 0x35, 0x27, 0x02, 0x88, 0xca, 0x1f, 0x4b, 0x9f, 0x2f, 0x16, 0x19,
- 0x6e, 0x48, 0xd1, 0xd9, 0x4b, 0xfe, 0x75, 0x32, 0x98, 0x69, 0x42, 0x7f, 0xd9, 0x82, 0xdd, 0x8e,
- 0xa7, 0xb9, 0x87, 0x37, 0x8d, 0x6e, 0x03, 0xc5, 0x2d, 0x4c, 0x6c, 0xd8, 0xe6, 0x24, 0xcd, 0xa6,
- 0xbd, 0x56, 0x12, 0xf5, 0x03, 0xa2, 0xab, 0x6f, 0x01, 0xb7, 0x63, 0x81, 0x49, 0xec, 0x34, 0x5d,
- 0x72, 0xc9, 0x13, 0xb8, 0xc6, 0x47, 0x06, 0x73, 0x78, 0xfb, 0x1f, 0xfa, 0xa5, 0xae, 0xb5, 0x6d,
- 0x6b, 0x7b, 0x63, 0x68, 0x21, 0xea, 0xed, 0xa0, 0x60, 0x22, 0x6a, 0xd4, 0xdd, 0x4d, 0x1b, 0xd8,
- 0x79, 0xe2, 0xf2, 0x0c, 0x92, 0x31, 0xc5, 0xa5, 0x19, 0x91, 0x62, 0x07, 0x3c, 0x4f, 0xf0, 0xd2,
- 0x8c, 0xa1, 0x85, 0x67, 0x8f, 0xd8, 0x57, 0x64, 0x70, 0x92, 0x32, 0x70, 0x0e, 0xba, 0xbe, 0xd5,
- 0x36, 0xbb, 0x04, 0xb9, 0x17, 0xe7, 0xc6, 0x01, 0xdd, 0x2a, 0x98, 0xbf, 0xcc, 0x92, 0xa5, 0x10,
- 0x9e, 0x1d, 0x08, 0x21, 0xc7, 0x80, 0xc1, 0x7f, 0x98, 0xe2, 0xf2, 0x01, 0x4e, 0xaa, 0x1c, 0xcd,
- 0x09, 0x5e, 0x3e, 0x20, 0xcc, 0x44, 0xf6, 0x10, 0xbf, 0x8c, 0x06, 0xd5, 0x8c, 0xba, 0xcf, 0x3f,
- 0x14, 0xc6, 0x76, 0x03, 0xcc, 0x62, 0x2c, 0xc9, 0x87, 0x74, 0x19, 0x22, 0x41, 0x89, 0xc3, 0x7e,
- 0x87, 0x5e, 0x97, 0x1e, 0x7e, 0x6b, 0xb0, 0x74, 0xb4, 0xf3, 0x00, 0x44, 0xaf, 0xd8, 0x4e, 0x3a,
- 0x17, 0xd7, 0x49, 0x4b, 0x62, 0x9d, 0xf4, 0x9b, 0x84, 0xc3, 0x1c, 0x0e, 0x66, 0xfb, 0xf0, 0xea,
- 0x21, 0x16, 0xe0, 0x6e, 0x78, 0xe9, 0xd9, 0xeb, 0xc5, 0xab, 0xa8, 0x5e, 0x54, 0xf6, 0x7a, 0x5d,
- 0xab, 0x8d, 0xe6, 0x53, 0x9f, 0x18, 0xcb, 0x7c, 0x8a, 0xed, 0x0f, 0xe4, 0xbe, 0xfe, 0xe0, 0x10,
- 0x96, 0xf4, 0xcd, 0xe0, 0x38, 0x29, 0xa2, 0x1c, 0xb2, 0x55, 0x20, 0x41, 0xdc, 0xfa, 0x92, 0xf9,
- 0x88, 0xe2, 0x82, 0x4a, 0x10, 0x0a, 0x61, 0x84, 0xa5, 0xcf, 0x74, 0xc6, 0x6e, 0x5a, 0x05, 0x89,
- 0xe3, 0x6c, 0x02, 0x47, 0xb2, 0xf2, 0xc4, 0xda, 0xdd, 0xc0, 0x37, 0xda, 0x6b, 0x5f, 0xcc, 0x8f,
- 0x63, 0x44, 0x78, 0x06, 0xf5, 0x34, 0x95, 0x63, 0x97, 0x34, 0xa2, 0x22, 0xc3, 0x7e, 0xa4, 0x05,
- 0x1f, 0xf4, 0x57, 0x8f, 0x11, 0xbf, 0x54, 0xf5, 0x16, 0x70, 0xfc, 0xa2, 0xd9, 0xbe, 0xb4, 0xed,
- 0x3a, 0x7b, 0xf8, 0xee, 0x6f, 0x87, 0x5e, 0x22, 0xbe, 0x7a, 0xcc, 0xe8, 0x7f, 0xa1, 0xde, 0x11,
- 0x98, 0x0e, 0x85, 0x61, 0xa6, 0xc3, 0xea, 0x31, 0x6a, 0x3c, 0xa8, 0x4f, 0x0c, 0x3b, 0x9d, 0x62,
- 0x62, 0xa7, 0xb3, 0x7a, 0x2c, 0xe8, 0x76, 0xd4, 0x0a, 0x98, 0xee, 0x58, 0x97, 0xf1, 0x56, 0x35,
- 0x9e, 0x75, 0x0d, 0x0b, 0x3a, 0x54, 0xb1, 0x2e, 0x93, 0x8d, 0xed, 0xd5, 0x63, 0x46, 0xf8, 0xa5,
- 0xba, 0x02, 0x66, 0xf0, 0xb6, 0x00, 0x26, 0x33, 0x9d, 0x2a, 0xa0, 0xd0, 0xea, 0x31, 0x23, 0xfa,
- 0x16, 0x59, 0x1f, 0x79, 0x7c, 0xee, 0xfa, 0xde, 0x60, 0xbb, 0x3d, 0x97, 0x6a, 0xbb, 0x1d, 0xc9,
- 0x82, 0x6c, 0xb8, 0x9f, 0x02, 0x85, 0x36, 0x96, 0xb0, 0x44, 0x25, 0x4c, 0x1e, 0xd5, 0xbb, 0x41,
- 0x7e, 0xd7, 0x74, 0x83, 0xc9, 0xf3, 0x4d, 0xc3, 0xe9, 0xae, 0x99, 0xee, 0x25, 0x84, 0x20, 0xfa,
- 0x6a, 0x69, 0x0a, 0x14, 0xb0, 0xe0, 0xc2, 0x3f, 0xda, 0xdb, 0xf2, 0xc4, 0x0c, 0x29, 0x3b, 0x36,
- 0x1a, 0xf6, 0x5b, 0x4e, 0x70, 0x38, 0xfd, 0x57, 0x73, 0xe3, 0xb1, 0x20, 0xaf, 0x62, 0xae, 0xfa,
- 0xb0, 0xad, 0x67, 0xef, 0xc1, 0xfb, 0xe1, 0x3e, 0x5d, 0x12, 0x1d, 0xf4, 0x4a, 0x3d, 0x03, 0x80,
- 0x4f, 0x4f, 0xea, 0x85, 0x41, 0x4c, 0x99, 0x94, 0x68, 0xf9, 0xa0, 0x30, 0xdc, 0x51, 0xe5, 0x77,
- 0x46, 0x30, 0x5d, 0xfa, 0x05, 0x11, 0x3f, 0x03, 0xef, 0x5a, 0x36, 0x53, 0xe7, 0xe0, 0x31, 0x65,
- 0xa7, 0x94, 0xd6, 0xa8, 0x19, 0xc2, 0x5e, 0xf6, 0x7d, 0xd3, 0x5b, 0xf2, 0xe4, 0xb6, 0x03, 0x72,
- 0x02, 0x5a, 0x7f, 0xd0, 0xf2, 0x7c, 0xcb, 0xde, 0xa6, 0xe7, 0x9b, 0x3f, 0x3b, 0x16, 0xa5, 0x19,
- 0x30, 0xe0, 0xc8, 0x03, 0x07, 0x9c, 0x03, 0x01, 0x82, 0xf2, 0x43, 0x02, 0x04, 0x15, 0xd2, 0xad,
- 0x1c, 0x7e, 0x84, 0xd5, 0x9f, 0x75, 0x5e, 0x7f, 0xee, 0x8a, 0x01, 0x68, 0x90, 0x5c, 0xc6, 0x62,
- 0xdf, 0xbc, 0x2b, 0xd4, 0x94, 0x26, 0xa7, 0x29, 0xf7, 0x8e, 0xce, 0x48, 0xf6, 0xda, 0xf2, 0xa1,
- 0x3c, 0xb8, 0x2a, 0x62, 0xa6, 0x0e, 0xaf, 0x50, 0x45, 0xf9, 0xfd, 0xb1, 0x28, 0x4a, 0x7a, 0x47,
- 0xe7, 0xac, 0x35, 0xe6, 0x37, 0x85, 0xcf, 0xed, 0xf7, 0x03, 0x15, 0xca, 0x26, 0x46, 0x59, 0x4e,
- 0x81, 0x22, 0xe9, 0x61, 0x28, 0x34, 0xf4, 0x29, 0x65, 0x77, 0x23, 0x76, 0xda, 0x5f, 0x94, 0xb7,
- 0x09, 0xe8, 0x0f, 0x5d, 0xd7, 0x68, 0xed, 0xb9, 0x76, 0xd5, 0xf6, 0x1d, 0xed, 0x07, 0xc7, 0xa2,
- 0x38, 0xa1, 0x37, 0x9c, 0x3c, 0x8a, 0x37, 0xdc, 0x48, 0xab, 0x1c, 0x41, 0x0d, 0x8e, 0x64, 0x95,
- 0x23, 0xa6, 0xf0, 0xec, 0xf1, 0x7b, 0xa7, 0x0c, 0x4e, 0xd1, 0xc9, 0xd6, 0x12, 0x6f, 0x21, 0x6a,
- 0x17, 0xc6, 0x01, 0xe4, 0xc9, 0xc0, 0x4c, 0xa2, 0x7e, 0xf4, 0xf8, 0x81, 0x8f, 0x52, 0x90, 0x78,
- 0x9b, 0x25, 0x37, 0x1d, 0xec, 0xe3, 0x70, 0x2c, 0x48, 0x89, 0x5d, 0x62, 0x99, 0x82, 0x8d, 0xec,
- 0x31, 0x7b, 0xa9, 0x0c, 0x8a, 0x24, 0x46, 0x82, 0xb6, 0x91, 0x89, 0xc3, 0x04, 0x7f, 0x3f, 0x8b,
- 0xc0, 0x8e, 0x1c, 0xe1, 0x26, 0xb3, 0xf8, 0x11, 0x69, 0xf6, 0xe2, 0x06, 0xb2, 0x32, 0x01, 0x17,
- 0x42, 0x09, 0xcc, 0x36, 0xa1, 0x5f, 0x36, 0x5d, 0xd7, 0x32, 0xb7, 0xc7, 0xe5, 0xf1, 0x2d, 0xea,
- 0x3d, 0xac, 0x7d, 0x23, 0x27, 0x7a, 0x96, 0x3d, 0x5c, 0x08, 0x0f, 0x58, 0x8d, 0x89, 0x02, 0xfe,
- 0x7a, 0xa1, 0xf3, 0xea, 0xc3, 0xa8, 0x4d, 0xc0, 0x63, 0x5b, 0x02, 0x53, 0x41, 0x1c, 0x8c, 0xdb,
- 0xb8, 0xd8, 0x28, 0x3b, 0xfe, 0x6e, 0x70, 0x0c, 0x06, 0xff, 0x3f, 0x18, 0x7f, 0x41, 0x7b, 0x65,
- 0x4a, 0x47, 0xf9, 0xe4, 0x20, 0x1e, 0xe9, 0xda, 0x58, 0x1a, 0x77, 0xf8, 0xa3, 0x0a, 0xdb, 0xf1,
- 0xcb, 0x53, 0x74, 0x39, 0xb2, 0x66, 0xfa, 0xf0, 0x41, 0xed, 0x0f, 0x65, 0x30, 0xd5, 0x84, 0x3e,
- 0x1a, 0x6f, 0x11, 0xfb, 0x87, 0xd6, 0x70, 0x95, 0x59, 0xf1, 0xa0, 0x67, 0x6b, 0xd5, 0xfb, 0xc0,
- 0x4c, 0xcf, 0x75, 0xda, 0xd0, 0xf3, 0xe8, 0xea, 0x05, 0xeb, 0xa8, 0x36, 0x68, 0xf4, 0xc7, 0xac,
- 0x2d, 0xae, 0x07, 0xdf, 0x18, 0xd1, 0xe7, 0x69, 0xcd, 0x00, 0x42, 0x89, 0x56, 0x70, 0xd2, 0x66,
- 0x40, 0x52, 0xe1, 0xd9, 0x03, 0xfd, 0xbb, 0x32, 0x98, 0x6b, 0x42, 0x3f, 0x94, 0x62, 0x8a, 0x4d,
- 0x8e, 0x78, 0x78, 0x39, 0x28, 0xe5, 0xc3, 0x41, 0xf9, 0x4e, 0xe1, 0x4b, 0x61, 0x79, 0x69, 0x86,
- 0xc4, 0xc6, 0x82, 0xe7, 0x5b, 0x84, 0xee, 0x82, 0x15, 0xe3, 0x60, 0x02, 0xc7, 0xd7, 0x1e, 0x0b,
- 0x66, 0x30, 0x2f, 0xb8, 0xc1, 0xfe, 0x68, 0x3e, 0x6a, 0xbc, 0x5f, 0xc8, 0xa8, 0xf1, 0xde, 0x03,
- 0x0a, 0xbb, 0xa6, 0x7b, 0x29, 0x38, 0x7c, 0xfb, 0x38, 0xb1, 0xd5, 0x2f, 0xcf, 0x20, 0x5f, 0x0d,
- 0xf6, 0xd3, 0x2c, 0xa4, 0xf3, 0xd3, 0x7c, 0xbd, 0x94, 0x6a, 0x24, 0x24, 0x73, 0x87, 0x31, 0x36,
- 0xf9, 0x14, 0xe3, 0x66, 0x42, 0xd9, 0xd9, 0x2b, 0xc7, 0x8b, 0x65, 0x30, 0x8d, 0xc6, 0x6d, 0x6c,
- 0x8f, 0x9f, 0x3f, 0xbc, 0x3a, 0x0c, 0x36, 0xf4, 0x53, 0xf6, 0xc0, 0x81, 0x44, 0xc6, 0x67, 0xde,
- 0xa7, 0xe8, 0x81, 0x93, 0x0a, 0xcf, 0x1e, 0x8f, 0x77, 0x13, 0x3c, 0x70, 0x7b, 0xd0, 0xde, 0x20,
- 0x03, 0x79, 0x05, 0xfa, 0x93, 0xb6, 0x22, 0xdf, 0x2e, 0x1c, 0x5e, 0x94, 0x13, 0x18, 0xe6, 0x79,
- 0x71, 0x05, 0x8e, 0xa7, 0x01, 0x89, 0xc5, 0x15, 0x15, 0x62, 0x20, 0x7b, 0xd4, 0xde, 0x4f, 0x50,
- 0x23, 0x9b, 0x0b, 0x3f, 0x30, 0x86, 0x5e, 0x75, 0xb2, 0x0b, 0x1f, 0x81, 0x00, 0x31, 0x8d, 0xa3,
- 0x6a, 0x6f, 0x83, 0x0a, 0xcf, 0x1e, 0xb9, 0x9f, 0x91, 0xf1, 0x25, 0x66, 0xe5, 0x1d, 0xd8, 0xbe,
- 0x04, 0x3b, 0xec, 0x45, 0xce, 0xa3, 0x42, 0x77, 0x1a, 0x4c, 0xb5, 0x09, 0x35, 0x0c, 0xde, 0xb4,
- 0x11, 0x3c, 0xf2, 0x37, 0x0b, 0x25, 0xde, 0x9d, 0xc5, 0x77, 0x44, 0xe4, 0xf3, 0xb1, 0xe0, 0x22,
- 0x76, 0xe1, 0x95, 0x40, 0xf1, 0x13, 0x30, 0x5b, 0xc8, 0x2c, 0xa3, 0xda, 0x76, 0x6c, 0xed, 0xbf,
- 0x1e, 0x1e, 0x96, 0x6b, 0xc1, 0x8c, 0xd5, 0x76, 0x6c, 0x1c, 0x02, 0x2e, 0x38, 0x04, 0x14, 0x26,
- 0x04, 0x6f, 0xf5, 0x5d, 0xe7, 0x01, 0x8b, 0xee, 0x9a, 0x47, 0x09, 0xa3, 0x1a, 0x13, 0x88, 0xf5,
- 0xa3, 0x32, 0x26, 0x06, 0x94, 0x9d, 0x3d, 0x64, 0x9f, 0x8c, 0xbc, 0xdb, 0x48, 0x57, 0xf8, 0x88,
- 0x58, 0x05, 0x1e, 0x65, 0x38, 0x63, 0x6b, 0x71, 0x24, 0xc3, 0x59, 0x02, 0x03, 0x13, 0xb8, 0x89,
- 0x30, 0xc2, 0x31, 0xf3, 0x35, 0xe0, 0x43, 0xa0, 0x33, 0x3e, 0xf3, 0x70, 0x44, 0x74, 0x8e, 0xc6,
- 0x44, 0xfc, 0x30, 0x0d, 0x4f, 0x4f, 0x2d, 0x1e, 0xed, 0xbf, 0x8d, 0x03, 0x9c, 0xbb, 0x46, 0xf1,
- 0x57, 0x20, 0xde, 0x0a, 0xda, 0x5b, 0x25, 0xd1, 0x10, 0x28, 0x07, 0x24, 0x88, 0xa8, 0x8c, 0x05,
- 0xc1, 0x37, 0x09, 0xc5, 0x26, 0x11, 0x29, 0x3f, 0x7b, 0x00, 0x5f, 0x24, 0x83, 0x05, 0xec, 0x23,
- 0xd0, 0x85, 0xa6, 0x4b, 0x3a, 0xca, 0xb1, 0x38, 0xca, 0xbf, 0x5b, 0x38, 0xc0, 0x0f, 0x2f, 0x87,
- 0x88, 0x8f, 0xb1, 0x40, 0x21, 0x16, 0xdd, 0x47, 0x90, 0x85, 0x89, 0x6c, 0xa3, 0x28, 0x21, 0x0b,
- 0x54, 0xc5, 0xc7, 0x83, 0x47, 0x4a, 0x8f, 0x5c, 0x5e, 0x18, 0x41, 0x63, 0x9b, 0xb0, 0x47, 0xae,
- 0x08, 0x13, 0xd9, 0x63, 0xf2, 0x86, 0xdb, 0xe9, 0x82, 0x73, 0xcb, 0xbc, 0xd8, 0x85, 0xda, 0xab,
- 0xf3, 0xe1, 0x89, 0xb6, 0xdf, 0x1d, 0x8b, 0x07, 0xe6, 0x21, 0x2e, 0xa3, 0x52, 0x41, 0xde, 0x75,
- 0xae, 0x90, 0xa5, 0xad, 0x79, 0x03, 0xff, 0x27, 0xf1, 0x2c, 0xbb, 0x7b, 0xbb, 0x36, 0x39, 0x19,
- 0x3a, 0x6f, 0x04, 0x8f, 0xea, 0x8d, 0x60, 0xfe, 0x8a, 0xe5, 0xef, 0xac, 0x42, 0xb3, 0x03, 0x5d,
- 0xc3, 0xb9, 0x82, 0x3d, 0xe6, 0xa6, 0x0d, 0x3e, 0x91, 0xf7, 0x5f, 0x11, 0xb0, 0x2f, 0x91, 0x50,
- 0x26, 0x73, 0xfc, 0x2d, 0x8d, 0xe5, 0x19, 0xcf, 0x55, 0xf6, 0x0a, 0xf3, 0x01, 0x19, 0xcc, 0x18,
- 0xce, 0x15, 0xaa, 0x24, 0xff, 0xd7, 0xd1, 0xea, 0x48, 0xea, 0x89, 0x1e, 0x96, 0x5c, 0xc8, 0xfe,
- 0xc4, 0x27, 0x7a, 0x89, 0xc5, 0x4f, 0xe4, 0xe4, 0xd2, 0x9c, 0xe1, 0x5c, 0x69, 0x42, 0x9f, 0xb4,
- 0x08, 0x6d, 0x73, 0x4c, 0x4e, 0xd6, 0x96, 0x47, 0x08, 0xd2, 0x79, 0x78, 0xf8, 0x9c, 0x76, 0x17,
- 0x21, 0x14, 0x50, 0xc8, 0xe2, 0xa4, 0x77, 0x11, 0x86, 0x72, 0x30, 0x81, 0x18, 0x29, 0x32, 0x98,
- 0x35, 0x9c, 0x2b, 0x68, 0x68, 0x58, 0xb6, 0xba, 0xdd, 0xf1, 0x8c, 0x90, 0x69, 0x8d, 0xff, 0x40,
- 0x0c, 0x01, 0x17, 0x13, 0x37, 0xfe, 0x87, 0x30, 0x90, 0x3d, 0x0c, 0xcf, 0x27, 0x8d, 0x25, 0x18,
- 0xa1, 0xed, 0xf1, 0xe0, 0x30, 0x6a, 0x83, 0x08, 0xd9, 0x38, 0xb2, 0x06, 0x11, 0xc7, 0xc1, 0x44,
- 0x76, 0x4e, 0x16, 0xca, 0x78, 0x98, 0x1f, 0x6f, 0x9b, 0x78, 0x6f, 0x3a, 0xd7, 0x44, 0x3a, 0xec,
- 0x72, 0x8c, 0x8c, 0x05, 0x8d, 0x14, 0x2e, 0x88, 0x02, 0x3c, 0x64, 0x8f, 0xc7, 0xc7, 0x64, 0x30,
- 0x47, 0x58, 0x78, 0x84, 0x58, 0x01, 0x23, 0x35, 0x2a, 0xb6, 0x06, 0x47, 0xd3, 0xa8, 0x12, 0x38,
- 0x98, 0xc8, 0x7d, 0xfe, 0xc8, 0x8e, 0x1b, 0xe1, 0xf8, 0x78, 0x1c, 0x82, 0x23, 0x1b, 0x63, 0x63,
- 0x3c, 0x42, 0x3e, 0x8a, 0x31, 0x76, 0x44, 0xc7, 0xc8, 0x9f, 0x1f, 0xb6, 0xa2, 0x71, 0x62, 0x70,
- 0x88, 0xa6, 0x30, 0x46, 0x18, 0x46, 0x6c, 0x0a, 0x47, 0x84, 0xc4, 0x9f, 0xca, 0x00, 0x10, 0x06,
- 0xd6, 0x9c, 0xcb, 0xf8, 0x22, 0xcd, 0x31, 0x74, 0x67, 0xfd, 0x6e, 0xf5, 0xf2, 0x10, 0xb7, 0xfa,
- 0x94, 0x21, 0x5c, 0xd2, 0xae, 0x04, 0x32, 0x52, 0x46, 0x95, 0x9c, 0xf8, 0x4a, 0x60, 0x72, 0xf9,
- 0xd9, 0x63, 0xfc, 0x65, 0x62, 0xcd, 0x45, 0x07, 0x4c, 0x7f, 0x76, 0x2c, 0x28, 0x33, 0xb3, 0x7f,
- 0x99, 0x9f, 0xfd, 0x1f, 0x02, 0xdb, 0x51, 0x6d, 0xc4, 0x61, 0x07, 0x47, 0xb3, 0xb7, 0x11, 0x8f,
- 0xee, 0x80, 0xe8, 0x0f, 0xe4, 0xc1, 0x71, 0xda, 0x89, 0x7c, 0x3b, 0x40, 0x9c, 0xf2, 0x1c, 0x1e,
- 0xd7, 0x49, 0x0e, 0x41, 0x79, 0x5c, 0x0b, 0x52, 0x69, 0x96, 0x32, 0x05, 0xd8, 0x9b, 0xc8, 0xea,
- 0x46, 0x51, 0x7f, 0xb0, 0x67, 0xda, 0x1d, 0xf1, 0x70, 0xbf, 0x43, 0x80, 0x0f, 0xd6, 0x1a, 0x65,
- 0x7e, 0xad, 0x71, 0xc0, 0xca, 0x64, 0xea, 0x9d, 0x6b, 0x2c, 0x32, 0xc2, 0xee, 0xc4, 0x77, 0xae,
- 0xe3, 0xcb, 0xce, 0x1e, 0xa5, 0xf7, 0xca, 0x20, 0xdf, 0x74, 0x5c, 0x5f, 0x7b, 0x41, 0x9a, 0xd6,
- 0x49, 0x24, 0x1f, 0x81, 0x14, 0x3c, 0xab, 0x65, 0x90, 0x47, 0x95, 0xa3, 0x33, 0x86, 0xdb, 0x92,
- 0x8f, 0x3a, 0x9b, 0xbe, 0x89, 0xbd, 0xba, 0x51, 0xf9, 0x8b, 0xad, 0xfd, 0x1e, 0x34, 0xf0, 0xc7,
- 0x69, 0xe3, 0xe9, 0x10, 0xf9, 0x35, 0xe3, 0x0f, 0x60, 0x64, 0x16, 0x4f, 0x27, 0xb6, 0xe4, 0xec,
- 0x71, 0x7b, 0xf8, 0x38, 0xf5, 0x6d, 0x5d, 0xb6, 0xba, 0x50, 0x7b, 0x01, 0x71, 0x19, 0xa9, 0x9b,
- 0xbb, 0x50, 0xfc, 0x48, 0x4c, 0xa2, 0x6b, 0x2b, 0x8e, 0x2f, 0x2b, 0x47, 0xf1, 0x65, 0xd3, 0x36,
- 0x28, 0x72, 0x00, 0x9d, 0xb0, 0x34, 0xe9, 0x06, 0x95, 0x50, 0xf6, 0x44, 0xe2, 0x74, 0x9e, 0x68,
- 0x42, 0x9f, 0x18, 0x95, 0x8d, 0xe0, 0x8a, 0xa4, 0xef, 0x1b, 0x4b, 0xc4, 0xce, 0xf0, 0x42, 0x1d,
- 0xb9, 0xef, 0x06, 0xa6, 0x0f, 0xb0, 0xe0, 0xac, 0xf1, 0xe0, 0x7c, 0x77, 0xbc, 0x80, 0x78, 0x26,
- 0xc7, 0x02, 0xd3, 0xdb, 0x43, 0x98, 0xd6, 0x39, 0x98, 0xee, 0x1e, 0x91, 0x8b, 0xec, 0x01, 0xfb,
- 0xf1, 0x02, 0x38, 0x4e, 0x26, 0xfd, 0x25, 0xbb, 0x43, 0x23, 0xac, 0xbe, 0x59, 0x3a, 0xe2, 0xcd,
- 0xb6, 0x83, 0x21, 0x58, 0xb9, 0x58, 0xce, 0x85, 0xbe, 0x58, 0xce, 0xea, 0x12, 0x09, 0xe7, 0x8a,
- 0x3a, 0x51, 0xbc, 0xd3, 0x36, 0x2c, 0xcc, 0x04, 0x96, 0x3d, 0xee, 0x72, 0xc3, 0xef, 0xf8, 0x7b,
- 0x44, 0xa7, 0xc4, 0xef, 0x11, 0xfd, 0xed, 0x74, 0xeb, 0x76, 0xb8, 0xe8, 0x3e, 0x81, 0x67, 0x6c,
- 0x3b, 0xa5, 0x58, 0xd1, 0x13, 0xe0, 0xee, 0x3f, 0x87, 0x3b, 0x59, 0x14, 0x41, 0x64, 0x44, 0x77,
- 0x32, 0x4c, 0xe0, 0x28, 0xdd, 0xc9, 0x86, 0x31, 0x90, 0x3d, 0x8e, 0xbf, 0x5d, 0xa0, 0xbb, 0xf9,
- 0xb8, 0xdd, 0x68, 0x7f, 0x2c, 0x65, 0x3e, 0x4a, 0x7f, 0x33, 0x97, 0xca, 0xff, 0x19, 0xf3, 0x95,
- 0x3c, 0x4c, 0xa7, 0xf1, 0x68, 0x4e, 0x22, 0x37, 0x81, 0x75, 0x23, 0x09, 0xfb, 0xa2, 0x9f, 0xb7,
- 0x3a, 0xfe, 0xce, 0x98, 0x4e, 0x74, 0x5c, 0x41, 0xb4, 0x68, 0xbc, 0x7a, 0xf2, 0xa0, 0xfd, 0xaf,
- 0x5c, 0xaa, 0x10, 0x52, 0xa1, 0x48, 0x30, 0x5b, 0x31, 0x22, 0x4e, 0x11, 0xf8, 0x29, 0x91, 0xde,
- 0x04, 0x35, 0xfa, 0x9c, 0xd5, 0x81, 0xce, 0x23, 0x50, 0xa3, 0x31, 0x5f, 0xe3, 0xd3, 0xe8, 0x24,
- 0x72, 0xff, 0x49, 0x35, 0x3a, 0x14, 0xc9, 0x98, 0x34, 0x3a, 0x91, 0x5e, 0xf6, 0x32, 0x7e, 0xe5,
- 0x1c, 0x9d, 0x48, 0xd5, 0x2c, 0xfb, 0x92, 0xf6, 0x4f, 0x45, 0xa0, 0x04, 0x71, 0x84, 0xfd, 0x1d,
- 0x1a, 0x0b, 0xe6, 0x43, 0xc2, 0x77, 0xa3, 0x8c, 0x10, 0xef, 0x85, 0x0f, 0x27, 0x55, 0x38, 0x10,
- 0x4e, 0xaa, 0x04, 0xe6, 0x2d, 0xdb, 0x87, 0xae, 0x6d, 0x76, 0x97, 0xbb, 0xe6, 0xb6, 0x77, 0x7a,
- 0x6a, 0xe0, 0xe5, 0x75, 0x55, 0x26, 0x8f, 0xc1, 0x7f, 0xc1, 0x5e, 0x20, 0x3a, 0xcd, 0x5f, 0x20,
- 0x1a, 0x13, 0xfd, 0x6a, 0x26, 0x3e, 0xfa, 0x55, 0x18, 0xdd, 0x0a, 0x0c, 0x0f, 0x8e, 0x2d, 0x6a,
- 0x1b, 0xa7, 0x0c, 0xf7, 0x77, 0x9b, 0x60, 0x14, 0xb6, 0x30, 0xf4, 0xe3, 0x6b, 0xe4, 0x54, 0xab,
- 0x7b, 0x48, 0x11, 0x16, 0xfb, 0x95, 0x20, 0xb5, 0x85, 0xca, 0x56, 0x5e, 0xee, 0xab, 0x7c, 0x68,
- 0xf2, 0xe4, 0x05, 0x4c, 0x1e, 0x56, 0xa9, 0x0a, 0xa2, 0x77, 0xba, 0x8a, 0x2f, 0x16, 0x8a, 0xd4,
- 0x76, 0x02, 0xa7, 0x91, 0x0a, 0xe0, 0x44, 0x10, 0xed, 0xb6, 0xd7, 0x83, 0xa6, 0x6b, 0xda, 0x6d,
- 0xa8, 0x7d, 0x52, 0x1a, 0x87, 0xd9, 0xbb, 0x0c, 0xa6, 0xad, 0xb6, 0x63, 0x37, 0xad, 0xe7, 0x04,
- 0x97, 0xcb, 0x25, 0x07, 0x59, 0xc7, 0x12, 0xa9, 0xd2, 0x2f, 0x8c, 0xf0, 0x5b, 0xb5, 0x0a, 0x66,
- 0xda, 0xa6, 0xdb, 0x21, 0x41, 0xf8, 0x0a, 0x7d, 0x17, 0x39, 0xc5, 0x12, 0x2a, 0x07, 0x9f, 0x18,
- 0xd1, 0xd7, 0x6a, 0x83, 0x17, 0x62, 0xb1, 0x2f, 0x9a, 0x47, 0x2c, 0xb1, 0x4a, 0xf4, 0x11, 0x27,
- 0x73, 0x24, 0x1d, 0x17, 0x76, 0x4d, 0x72, 0xe9, 0xf8, 0x14, 0xb9, 0x23, 0x3a, 0x4c, 0x48, 0xbb,
- 0x3c, 0x80, 0x8b, 0x3a, 0x80, 0xc6, 0xa4, 0x97, 0x07, 0x84, 0xb8, 0xc8, 0x5e, 0x33, 0xdf, 0x55,
- 0x04, 0xf3, 0xa4, 0x57, 0xa3, 0xe2, 0xd4, 0x5e, 0x24, 0x83, 0x62, 0x13, 0xfa, 0xf7, 0xc3, 0x7d,
- 0xad, 0x79, 0xf8, 0x31, 0x59, 0x01, 0xf2, 0xa5, 0x30, 0xe0, 0x20, 0xfa, 0x9b, 0x76, 0xdf, 0x3e,
- 0xe0, 0x6b, 0x91, 0xf0, 0x34, 0xe9, 0x7d, 0xfb, 0xe4, 0xe2, 0xb3, 0xc7, 0xe7, 0x27, 0x64, 0x20,
- 0x97, 0x3a, 0x1d, 0xad, 0x7d, 0x78, 0x28, 0xae, 0x07, 0xb3, 0x41, 0x9b, 0x89, 0x62, 0x40, 0xb2,
- 0x49, 0x69, 0x17, 0x41, 0x43, 0xd9, 0x94, 0x3a, 0x13, 0xdf, 0x55, 0x48, 0x28, 0x3b, 0x7b, 0x50,
- 0xbe, 0x30, 0x45, 0x1b, 0xcd, 0x92, 0xe3, 0x5c, 0xc2, 0x47, 0x65, 0x7e, 0x51, 0x06, 0x85, 0x65,
- 0xe8, 0xb7, 0x77, 0x34, 0x6f, 0x2c, 0x6d, 0xa6, 0xef, 0xde, 0xf3, 0x21, 0x41, 0x39, 0xd3, 0x46,
- 0x7f, 0x0e, 0xd8, 0x5e, 0xc4, 0x2c, 0x4f, 0x3a, 0xfa, 0x73, 0x62, 0xe9, 0x13, 0x38, 0x04, 0x97,
- 0x07, 0x0b, 0xe1, 0x0a, 0x18, 0xc1, 0xec, 0x1d, 0xb9, 0x47, 0xdc, 0x7a, 0xe8, 0x10, 0xbb, 0x59,
- 0xfb, 0xfd, 0x74, 0x21, 0xd6, 0x42, 0x99, 0xf3, 0x35, 0xcf, 0x78, 0x61, 0x32, 0x45, 0xf0, 0x35,
- 0x31, 0x06, 0x27, 0xb0, 0x02, 0x20, 0x83, 0x69, 0xcc, 0x50, 0xc5, 0xba, 0x8c, 0x5d, 0x0f, 0xb9,
- 0x85, 0xca, 0xe7, 0x8e, 0x65, 0xa1, 0xf2, 0x6e, 0x7e, 0xa1, 0x52, 0x30, 0x62, 0x72, 0xb0, 0x4e,
- 0x99, 0xd2, 0x17, 0x07, 0x7d, 0x3f, 0xf6, 0x65, 0xca, 0x14, 0xbe, 0x38, 0x43, 0xca, 0xcf, 0x1e,
- 0xd1, 0x37, 0xfe, 0x17, 0xda, 0x59, 0x07, 0x1b, 0xb2, 0xda, 0xff, 0x38, 0x01, 0xf2, 0xe7, 0xd0,
- 0x9f, 0x7f, 0x8c, 0x6e, 0xd4, 0x7a, 0xf9, 0x18, 0x82, 0x3b, 0x3c, 0x1d, 0xe4, 0x11, 0x7d, 0x3a,
- 0xed, 0xb9, 0x45, 0x6c, 0x77, 0x18, 0x31, 0x62, 0xe0, 0xef, 0xd4, 0x53, 0xa0, 0xe8, 0x39, 0x7b,
- 0x6e, 0x1b, 0x99, 0xdf, 0x48, 0x63, 0xe8, 0x53, 0xda, 0xa0, 0xa6, 0x1c, 0xe9, 0xc5, 0xf1, 0xb9,
- 0x9c, 0x32, 0x17, 0x2c, 0xc9, 0xdc, 0x05, 0x4b, 0x29, 0xf6, 0x1f, 0x04, 0x78, 0xcb, 0x5e, 0x23,
- 0xfe, 0x18, 0xdf, 0x35, 0xd8, 0x19, 0x17, 0xec, 0x31, 0x62, 0x39, 0xac, 0x3a, 0xa4, 0x75, 0x18,
- 0xe7, 0x45, 0x1b, 0xc6, 0x91, 0x9f, 0xa8, 0xc3, 0xb8, 0x00, 0x0f, 0x13, 0x39, 0xe5, 0x5e, 0xa4,
- 0x4e, 0xae, 0x17, 0xc6, 0x89, 0x6e, 0x9e, 0x53, 0xfa, 0x43, 0xa1, 0x33, 0x46, 0xe7, 0xd7, 0x91,
- 0xd1, 0x39, 0x22, 0xf7, 0xd7, 0x5f, 0x93, 0x71, 0x24, 0xcd, 0xc0, 0x08, 0x12, 0xbf, 0x28, 0x29,
- 0x35, 0x44, 0x68, 0x0c, 0xe6, 0xe2, 0x48, 0xcf, 0x8f, 0x1e, 0x5a, 0x9c, 0x17, 0x1d, 0xc3, 0xff,
- 0xa4, 0x43, 0x8b, 0x8b, 0x32, 0x92, 0x3d, 0x90, 0xbf, 0x40, 0x2e, 0x26, 0x2b, 0xb5, 0x7d, 0xeb,
- 0xf2, 0x98, 0x5b, 0x1a, 0x3f, 0xbc, 0xa4, 0x8c, 0x26, 0x7c, 0x40, 0x42, 0x84, 0xc3, 0x49, 0x47,
- 0x13, 0x16, 0x63, 0x23, 0x7b, 0x98, 0x7e, 0x0c, 0x20, 0xe9, 0xd1, 0xb5, 0x9d, 0x37, 0xc8, 0x40,
- 0x6e, 0x42, 0x5f, 0x83, 0x87, 0x47, 0xeb, 0x2c, 0x98, 0x63, 0x96, 0x0e, 0x82, 0x0b, 0x6f, 0xb8,
- 0xb4, 0xb4, 0x07, 0xe5, 0x43, 0x91, 0xb1, 0x8b, 0x2e, 0x93, 0x3e, 0x28, 0x2f, 0xc2, 0xc4, 0x04,
- 0x0e, 0xca, 0xd3, 0x65, 0x9f, 0x6f, 0x17, 0xa0, 0xc6, 0xb5, 0x02, 0x74, 0x28, 0xa0, 0x8e, 0x62,
- 0x29, 0xe8, 0xed, 0x91, 0xb1, 0x31, 0x21, 0xac, 0x3e, 0xc4, 0x62, 0xd5, 0xe0, 0xb1, 0xba, 0x53,
- 0x44, 0x4c, 0x62, 0xc6, 0x87, 0xd0, 0x04, 0xff, 0x9d, 0x21, 0x5c, 0x06, 0x07, 0xd7, 0xd3, 0x47,
- 0xe6, 0x23, 0x7b, 0xc4, 0x7e, 0x8e, 0x8c, 0x5b, 0x4d, 0x32, 0xb7, 0x1a, 0xcf, 0xb8, 0x45, 0xa7,
- 0x6d, 0x32, 0x37, 0x6d, 0x4b, 0x79, 0xb0, 0x22, 0xf2, 0x17, 0x0e, 0x98, 0x1b, 0x06, 0x51, 0x7e,
- 0xcc, 0x07, 0x2b, 0x86, 0x72, 0x90, 0x3d, 0x38, 0x5f, 0x93, 0x01, 0x58, 0x71, 0x9d, 0xbd, 0x5e,
- 0xc3, 0xed, 0x40, 0x57, 0xfb, 0xb3, 0x68, 0xa6, 0xf6, 0x93, 0x63, 0x98, 0xa9, 0xad, 0x03, 0xb0,
- 0x1d, 0x12, 0xa7, 0x1a, 0x7e, 0xbb, 0xd8, 0xbc, 0x2c, 0x62, 0xca, 0x60, 0x68, 0xf0, 0x77, 0x0b,
- 0x3f, 0x93, 0xc7, 0x38, 0xa9, 0xcf, 0x8a, 0xc8, 0x8d, 0x73, 0xa6, 0xf6, 0xee, 0x10, 0xeb, 0x16,
- 0x87, 0xf5, 0x33, 0x0e, 0xc1, 0x49, 0xf6, 0x98, 0xff, 0xc3, 0x14, 0x98, 0x25, 0xfb, 0xb2, 0x44,
- 0xa6, 0x7f, 0x13, 0x81, 0xfe, 0xb3, 0x63, 0x00, 0x7d, 0x03, 0xcc, 0x39, 0x11, 0x75, 0xd2, 0xa7,
- 0xb2, 0x2b, 0x65, 0x89, 0xb0, 0x33, 0x7c, 0x19, 0x1c, 0x19, 0xed, 0xe3, 0x2c, 0xf2, 0x06, 0x8f,
- 0xfc, 0xdd, 0x09, 0xf2, 0x66, 0x28, 0x8e, 0x13, 0xfa, 0xf7, 0x84, 0xd0, 0x6f, 0x70, 0xd0, 0x97,
- 0x0e, 0xc3, 0xca, 0x04, 0xee, 0x55, 0x90, 0x41, 0x1e, 0x1f, 0x83, 0x7c, 0x4b, 0x86, 0x0b, 0x31,
- 0xa7, 0xc1, 0x14, 0x6e, 0xb2, 0xe1, 0x04, 0x31, 0x78, 0x44, 0x6f, 0xcc, 0x2d, 0x1f, 0xba, 0xe1,
- 0x12, 0x7b, 0xf0, 0x88, 0x78, 0x08, 0xdc, 0xcf, 0xbd, 0xd3, 0x45, 0xb2, 0xe3, 0x1c, 0x26, 0x8c,
- 0x3c, 0x7b, 0x64, 0x25, 0x3e, 0xb6, 0x83, 0x91, 0xa3, 0xcc, 0x1e, 0x87, 0x30, 0x92, 0x3d, 0xf0,
- 0x5f, 0xcc, 0x83, 0xd3, 0x64, 0xf9, 0x6f, 0xd9, 0x75, 0x76, 0xfb, 0xae, 0x31, 0xb3, 0x0e, 0xaf,
- 0x0b, 0x37, 0x81, 0x05, 0x9f, 0x73, 0xbc, 0xa7, 0x3a, 0xd1, 0x97, 0xaa, 0xfd, 0x0e, 0xeb, 0x3c,
- 0xf3, 0x2c, 0x1e, 0xc9, 0xa5, 0x04, 0x01, 0xc6, 0xf1, 0x9e, 0x7a, 0x47, 0x45, 0x90, 0x51, 0x66,
- 0x35, 0x51, 0x1e, 0x69, 0x71, 0x39, 0xd4, 0xa9, 0x82, 0x88, 0x4e, 0x7d, 0x30, 0xd4, 0xa9, 0xef,
- 0xe5, 0x74, 0x6a, 0xe5, 0xf0, 0x22, 0x99, 0xc0, 0x12, 0xd3, 0x02, 0x28, 0x2e, 0x5b, 0x5d, 0x1f,
- 0xba, 0xda, 0x97, 0xe9, 0x3c, 0xea, 0xd5, 0x19, 0x76, 0x2f, 0x15, 0x50, 0xdc, 0xc2, 0xa5, 0x51,
- 0x83, 0xec, 0x56, 0x31, 0x6c, 0x08, 0x87, 0x06, 0xfd, 0x36, 0x6d, 0x90, 0xbf, 0x3e, 0x32, 0x63,
- 0x9b, 0x80, 0xa5, 0x08, 0xf2, 0x37, 0x9c, 0x85, 0x89, 0xdc, 0x6f, 0x55, 0x34, 0xe0, 0x2e, 0x1a,
- 0x41, 0x2e, 0x65, 0x87, 0xb0, 0x02, 0x64, 0xab, 0xe3, 0xe1, 0xa6, 0x37, 0x63, 0xa0, 0xbf, 0x69,
- 0x5d, 0x8e, 0xfa, 0x45, 0x45, 0x58, 0x9e, 0xb4, 0xcb, 0x91, 0x10, 0x17, 0xd9, 0x63, 0xf6, 0x4d,
- 0xec, 0x6f, 0xda, 0xeb, 0x9a, 0x6d, 0x88, 0xb8, 0xcf, 0x0c, 0xb5, 0x05, 0x20, 0x59, 0xc1, 0x88,
- 0x2f, 0x59, 0x6c, 0x3b, 0x2d, 0x1c, 0xa2, 0x9d, 0x8e, 0xba, 0x1a, 0x19, 0xca, 0x1c, 0x57, 0xfc,
- 0xc8, 0x56, 0x23, 0x13, 0xd9, 0x98, 0xc0, 0xed, 0xa5, 0xc1, 0x79, 0xdc, 0x89, 0xb6, 0xd6, 0x51,
- 0xf7, 0x6a, 0xa8, 0xb0, 0xc6, 0x76, 0xf6, 0x76, 0x94, 0xbd, 0x9a, 0x78, 0x1e, 0x26, 0x80, 0xd6,
- 0x02, 0x45, 0xeb, 0xf3, 0x74, 0x18, 0xcd, 0x78, 0xbb, 0xd4, 0x73, 0x5c, 0x3f, 0xdd, 0x76, 0x29,
- 0xe2, 0xce, 0xc0, 0xdf, 0xa5, 0x3d, 0xbf, 0xc5, 0x1f, 0xcf, 0x1e, 0xd7, 0xf0, 0x99, 0xe2, 0xfc,
- 0xd6, 0x30, 0x06, 0xb2, 0x87, 0xf7, 0xad, 0x47, 0x34, 0x78, 0x8e, 0xda, 0x1c, 0x69, 0x1b, 0x18,
- 0xdb, 0xd0, 0x39, 0x4a, 0x73, 0x8c, 0xe7, 0x21, 0x7b, 0xbc, 0xfe, 0x9e, 0x19, 0x38, 0xdf, 0x34,
- 0xc1, 0x81, 0x33, 0x68, 0x99, 0x85, 0x11, 0x5b, 0xe6, 0xa8, 0xbb, 0x0b, 0x54, 0xd6, 0xe3, 0x1b,
- 0x30, 0x47, 0xd9, 0x5d, 0x48, 0x60, 0x22, 0x7b, 0xc4, 0xdf, 0x2c, 0x83, 0x42, 0x73, 0xf2, 0xe3,
- 0xe5, 0xa8, 0x73, 0x11, 0x2c, 0xab, 0xe6, 0xd8, 0x86, 0xcb, 0x51, 0xe6, 0x22, 0xb1, 0x2c, 0x4c,
- 0x20, 0x7e, 0xff, 0x71, 0x30, 0x87, 0x27, 0xdc, 0xc1, 0x6e, 0xeb, 0xdf, 0xd3, 0x51, 0xf3, 0xf5,
- 0x19, 0xb6, 0xd5, 0xfb, 0xc0, 0x74, 0xb0, 0x3b, 0x44, 0x47, 0xce, 0x45, 0xb1, 0xf6, 0x19, 0x70,
- 0x69, 0x84, 0xdf, 0x1f, 0xca, 0x27, 0x62, 0xec, 0x3b, 0x81, 0xa3, 0xfa, 0x44, 0x1c, 0xe9, 0x6e,
- 0xe0, 0x6f, 0x47, 0x23, 0xea, 0x7f, 0xcd, 0x0e, 0xf3, 0xfe, 0x5d, 0xc2, 0xfc, 0x80, 0x5d, 0xc2,
- 0x4f, 0xb2, 0x58, 0x36, 0x79, 0x2c, 0xef, 0x11, 0x15, 0xe1, 0x18, 0xc7, 0xda, 0xf7, 0x86, 0x70,
- 0x9e, 0xe3, 0xe0, 0x5c, 0x3a, 0x14, 0x2f, 0x13, 0x38, 0x3f, 0x99, 0x8f, 0xc6, 0xdc, 0x4f, 0x65,
- 0xd8, 0x8e, 0xfb, 0x0e, 0x67, 0xe4, 0x0f, 0x1c, 0xce, 0xe0, 0x5a, 0x7a, 0xe1, 0x90, 0x2d, 0xfd,
- 0x53, 0xac, 0x76, 0xb4, 0x78, 0xed, 0x78, 0xba, 0x38, 0x22, 0xe3, 0x1b, 0x99, 0xdf, 0x17, 0xaa,
- 0xc7, 0x79, 0x4e, 0x3d, 0xca, 0x87, 0x63, 0x26, 0x7b, 0xfd, 0xf8, 0xf5, 0x60, 0x42, 0x7b, 0xc4,
- 0xed, 0x7d, 0xd4, 0x8d, 0x48, 0x4e, 0x88, 0x63, 0x1b, 0xb9, 0x47, 0xd9, 0x88, 0x1c, 0xc6, 0xc9,
- 0x04, 0x42, 0xba, 0xcd, 0x83, 0x59, 0xcc, 0xd3, 0x79, 0xab, 0xb3, 0x0d, 0x7d, 0xed, 0x35, 0xc4,
- 0x55, 0x31, 0x08, 0xa0, 0x39, 0xa6, 0x28, 0x47, 0x71, 0xc7, 0x66, 0xd3, 0xfa, 0x0b, 0x10, 0x26,
- 0x17, 0x19, 0x06, 0x27, 0x1d, 0x88, 0x71, 0x28, 0x07, 0xd9, 0x43, 0xf6, 0x71, 0xe2, 0xcc, 0x51,
- 0x33, 0xf7, 0x9d, 0x3d, 0x5f, 0x7b, 0x68, 0x0c, 0x1d, 0xf4, 0x12, 0x28, 0x76, 0x31, 0x35, 0x7a,
- 0x3a, 0x23, 0x79, 0xba, 0x43, 0x45, 0x40, 0xca, 0x37, 0xe8, 0x97, 0x69, 0x8f, 0x68, 0x44, 0x72,
- 0x24, 0x74, 0x26, 0x7d, 0x44, 0x63, 0x48, 0xf9, 0x13, 0xb9, 0xaa, 0x67, 0x1a, 0x95, 0x6e, 0xed,
- 0x5a, 0xfe, 0x98, 0x02, 0x41, 0x74, 0x11, 0xad, 0x20, 0x10, 0x04, 0x7e, 0x48, 0x7b, 0xf0, 0x94,
- 0x91, 0x0a, 0xfa, 0x7c, 0xd2, 0x07, 0x4f, 0x93, 0x8b, 0xcf, 0x1e, 0x93, 0x9f, 0x26, 0x2d, 0xeb,
- 0x1c, 0xf1, 0xc1, 0xcd, 0xd0, 0xbd, 0x77, 0xe4, 0xc6, 0x42, 0x58, 0x3b, 0xba, 0xc6, 0x32, 0xb0,
- 0xfc, 0xec, 0x81, 0xf9, 0xc5, 0xef, 0x04, 0x85, 0x0a, 0xbc, 0xb8, 0xb7, 0xad, 0xdd, 0x0d, 0xa6,
- 0x5b, 0x2e, 0x84, 0x55, 0x7b, 0xcb, 0x41, 0xd2, 0xf5, 0xd1, 0xff, 0x00, 0x12, 0xfa, 0x84, 0xf0,
- 0xd8, 0x81, 0x66, 0x27, 0x3a, 0x86, 0x16, 0x3c, 0x6a, 0x2f, 0x97, 0x40, 0xbe, 0xe9, 0x9b, 0xbe,
- 0x36, 0x13, 0x62, 0xab, 0x3d, 0xc4, 0x62, 0x71, 0x37, 0x8f, 0xc5, 0x4d, 0x9c, 0x2c, 0x30, 0x07,
- 0x8b, 0xe8, 0xfb, 0x18, 0x00, 0x34, 0x30, 0xfd, 0x80, 0xe7, 0xd8, 0x28, 0x47, 0x70, 0x52, 0x32,
- 0x78, 0xd6, 0x5e, 0x15, 0x8a, 0xfb, 0x5e, 0x4e, 0xdc, 0x8f, 0x17, 0x2b, 0x62, 0x02, 0x2b, 0x6d,
- 0x12, 0x98, 0x41, 0xa2, 0x5d, 0x85, 0x66, 0xc7, 0xd3, 0xbe, 0x23, 0x52, 0xfe, 0x18, 0x31, 0x6b,
- 0x1f, 0x16, 0x8e, 0xe9, 0x49, 0x6a, 0x15, 0x12, 0x8f, 0xf7, 0x17, 0x08, 0x62, 0x9a, 0x48, 0x7c,
- 0x4c, 0x93, 0xdb, 0x40, 0xde, 0xb2, 0xb7, 0x1c, 0xea, 0xbd, 0xf6, 0xe8, 0x18, 0xda, 0x48, 0x27,
- 0x0c, 0x9c, 0x51, 0x30, 0xe0, 0x67, 0x32, 0x5b, 0x13, 0xb9, 0x3b, 0x2f, 0x8f, 0x4a, 0xd7, 0xfe,
- 0xcf, 0xa1, 0xc2, 0x56, 0x55, 0x90, 0xef, 0x99, 0xfe, 0x0e, 0x2d, 0x1a, 0xff, 0x47, 0x36, 0xf2,
- 0x9e, 0x6d, 0xda, 0x8e, 0xbd, 0xbf, 0x6b, 0x3d, 0x27, 0xbc, 0xa2, 0x97, 0x4b, 0x43, 0x9c, 0x6f,
- 0x43, 0x1b, 0xba, 0xa6, 0x0f, 0x9b, 0x97, 0xb7, 0xf1, 0x1c, 0x6b, 0xda, 0x60, 0x93, 0x52, 0xeb,
- 0x3f, 0xe2, 0x38, 0x5e, 0xff, 0xb7, 0xac, 0x2e, 0xc4, 0x01, 0x9f, 0xa8, 0xfe, 0x07, 0xcf, 0xa9,
- 0xf4, 0x7f, 0x40, 0x11, 0xd9, 0xa3, 0xf1, 0xaf, 0x12, 0x98, 0x6b, 0x22, 0x85, 0x6b, 0xee, 0xed,
- 0xee, 0x9a, 0xee, 0xbe, 0x76, 0x43, 0x84, 0x0a, 0xa3, 0x9a, 0x39, 0x4e, 0x35, 0xb5, 0x5f, 0x13,
- 0xbe, 0x9d, 0x9a, 0x36, 0x6d, 0xa6, 0x84, 0xd4, 0xed, 0xe0, 0x89, 0xa0, 0x80, 0xd4, 0x3b, 0xf0,
- 0xe7, 0x4b, 0x6c, 0x08, 0x24, 0xa7, 0x60, 0x60, 0xac, 0xa1, 0xbc, 0x4d, 0x20, 0x28, 0x87, 0x04,
- 0x8e, 0x37, 0x7d, 0xb3, 0x7d, 0x69, 0xc5, 0x71, 0x9d, 0x3d, 0xdf, 0xb2, 0xa1, 0xa7, 0x3d, 0x26,
- 0x42, 0x20, 0xd0, 0xff, 0x5c, 0xa4, 0xff, 0xda, 0xbf, 0xe7, 0x44, 0x47, 0xd1, 0xb0, 0x5b, 0x65,
- 0xc9, 0xc7, 0xc4, 0xb9, 0x12, 0x1b, 0x17, 0x45, 0x28, 0x66, 0x2f, 0xb4, 0x37, 0xc9, 0x40, 0xd1,
- 0x1f, 0xec, 0x39, 0xae, 0x5f, 0x73, 0xda, 0x66, 0xd7, 0xf3, 0x1d, 0x17, 0x6a, 0x8d, 0x44, 0xa9,
- 0xa1, 0x1e, 0xa6, 0xe3, 0xb4, 0xa3, 0xc1, 0x91, 0x3e, 0xb1, 0x6a, 0x27, 0xf3, 0x3a, 0xfe, 0x71,
- 0xe1, 0x5d, 0x46, 0x22, 0x95, 0x7e, 0x8e, 0x62, 0xf4, 0x7c, 0x50, 0x97, 0x96, 0xce, 0x15, 0x5f,
- 0x6c, 0xe7, 0x51, 0x88, 0xa9, 0x09, 0x2c, 0x95, 0x4b, 0x60, 0xbe, 0xb9, 0x77, 0x31, 0x24, 0xe2,
- 0xb1, 0x46, 0xc8, 0x6b, 0x85, 0x83, 0x59, 0x50, 0xc5, 0x63, 0x09, 0xc5, 0xc8, 0xf7, 0x46, 0x30,
- 0xef, 0xb1, 0xd9, 0x28, 0xde, 0x7c, 0xa2, 0x60, 0x10, 0x8b, 0xe1, 0xa5, 0x66, 0x2f, 0xc0, 0xf7,
- 0x49, 0x60, 0xbe, 0xd1, 0x83, 0x36, 0xec, 0x10, 0x1f, 0x3b, 0x4e, 0x80, 0x2f, 0x4f, 0x29, 0x40,
- 0x8e, 0x50, 0x8c, 0x00, 0x23, 0x7f, 0xd8, 0x4a, 0x20, 0xbc, 0x28, 0x21, 0x95, 0xe0, 0x92, 0x4a,
- 0xcb, 0x5e, 0x70, 0x5f, 0x92, 0xc0, 0xac, 0xb1, 0x67, 0xaf, 0xbb, 0x0e, 0x1a, 0x8d, 0x5d, 0xed,
- 0x9e, 0xa8, 0x83, 0xb8, 0x15, 0x9c, 0xe8, 0xec, 0xb9, 0x78, 0xfd, 0xa9, 0x6a, 0x37, 0x61, 0xdb,
- 0xb1, 0x3b, 0x1e, 0xae, 0x47, 0xc1, 0x38, 0xf8, 0xe2, 0xae, 0xfc, 0x0b, 0xfe, 0x4a, 0xce, 0x69,
- 0x2f, 0x12, 0x8e, 0x98, 0x43, 0x2a, 0xcf, 0x14, 0x2d, 0xde, 0x13, 0x08, 0xc6, 0xc5, 0x19, 0x56,
- 0x42, 0xf6, 0xc2, 0xfd, 0xbc, 0x04, 0xd4, 0x52, 0xbb, 0xed, 0xec, 0xd9, 0x7e, 0x13, 0x76, 0x61,
- 0xdb, 0x6f, 0xb9, 0x66, 0x1b, 0xb2, 0xf6, 0xb3, 0x02, 0xe4, 0x8e, 0xe5, 0xd2, 0x3e, 0x18, 0xfd,
- 0xa5, 0x72, 0x7c, 0xb9, 0xf0, 0x8e, 0x23, 0xa9, 0xe5, 0xc1, 0x52, 0x52, 0x88, 0x53, 0x6c, 0x5f,
- 0x51, 0xb0, 0xa0, 0xec, 0xa5, 0xfa, 0x29, 0x09, 0xcc, 0x04, 0x3d, 0xf6, 0xb6, 0x88, 0x30, 0x7f,
- 0x3a, 0xe5, 0x64, 0x24, 0x24, 0x9e, 0x42, 0x86, 0xef, 0x4a, 0x31, 0xab, 0x88, 0xa3, 0x9f, 0x4e,
- 0x74, 0xa5, 0xf4, 0xa2, 0x43, 0x8f, 0xf5, 0xc6, 0xe6, 0x72, 0xa3, 0x56, 0xd1, 0x0d, 0x45, 0xd6,
- 0xbe, 0x2c, 0x81, 0xfc, 0xba, 0x65, 0x6f, 0xb3, 0x81, 0xcd, 0x4e, 0x22, 0x3b, 0xb2, 0x03, 0x1f,
- 0xa4, 0x2d, 0x9d, 0x3c, 0xa8, 0x77, 0x80, 0x93, 0xf6, 0xde, 0xee, 0x45, 0xe8, 0x36, 0xb6, 0xf0,
- 0x28, 0xeb, 0xb5, 0x9c, 0x26, 0xb4, 0x89, 0x11, 0x5a, 0x30, 0x06, 0xbe, 0xe3, 0x4d, 0x30, 0x81,
- 0xc9, 0x03, 0xe2, 0x24, 0x46, 0xe2, 0x21, 0x53, 0x12, 0xc3, 0x54, 0xaa, 0x69, 0xc3, 0x00, 0xe2,
- 0xd9, 0x6b, 0xea, 0x6f, 0x14, 0xc0, 0xd5, 0x25, 0x7b, 0x1f, 0xdb, 0x14, 0xa4, 0x83, 0x2f, 0xef,
- 0x98, 0xf6, 0x36, 0xc4, 0x03, 0x44, 0x28, 0x71, 0x36, 0xd2, 0x7f, 0x8e, 0x8f, 0xf4, 0xaf, 0x1a,
- 0x60, 0xca, 0x71, 0x3b, 0xd0, 0x5d, 0xda, 0xc7, 0x3c, 0xf5, 0x2f, 0x3b, 0xd3, 0x36, 0x39, 0xa8,
- 0x88, 0x45, 0x4a, 0x7e, 0xb1, 0x41, 0xbe, 0x37, 0x02, 0x42, 0x67, 0x6f, 0x05, 0x53, 0x34, 0x4d,
- 0x9d, 0x03, 0xd3, 0x0d, 0xa3, 0xa2, 0x1b, 0x9b, 0xd5, 0x8a, 0x72, 0x4c, 0xbd, 0x0a, 0x1c, 0xaf,
- 0xb6, 0x74, 0xa3, 0xd4, 0xaa, 0x36, 0xea, 0x9b, 0x38, 0x5d, 0xc9, 0x69, 0xcf, 0xcf, 0x8b, 0x7a,
- 0xf6, 0x26, 0x33, 0x33, 0x08, 0x56, 0x03, 0x4c, 0xb5, 0x49, 0x06, 0x3c, 0x84, 0xce, 0xa6, 0xaa,
- 0x1d, 0x25, 0x48, 0x12, 0x8c, 0x80, 0x90, 0x7a, 0x06, 0x80, 0x2b, 0xae, 0x63, 0x6f, 0x47, 0x67,
- 0xda, 0xa6, 0x0d, 0x26, 0x45, 0x7b, 0x28, 0x07, 0x8a, 0xe4, 0x1b, 0x7c, 0xb3, 0x09, 0xfe, 0x17,
- 0x09, 0x3e, 0x78, 0x46, 0x16, 0x2f, 0x96, 0x57, 0x34, 0xd1, 0xa2, 0x8f, 0x48, 0x17, 0x89, 0x0c,
- 0x88, 0x25, 0x4c, 0xab, 0x72, 0x1b, 0x28, 0x92, 0x6f, 0xa9, 0xd7, 0x41, 0x7c, 0x94, 0x52, 0x92,
- 0x4d, 0xd0, 0x4f, 0x59, 0x5c, 0xa6, 0xd9, 0x6b, 0xf3, 0x47, 0x24, 0x30, 0x5d, 0x87, 0x7e, 0x79,
- 0x07, 0xb6, 0x2f, 0x69, 0x8f, 0xe3, 0x17, 0x40, 0xbb, 0x16, 0xb4, 0xfd, 0x0b, 0xbb, 0xdd, 0x70,
- 0x01, 0x34, 0x48, 0xd0, 0x5e, 0xc8, 0x76, 0xbe, 0xcf, 0xe0, 0xf5, 0xe7, 0x96, 0x01, 0x75, 0x0d,
- 0x4a, 0x88, 0x51, 0x99, 0x53, 0xa0, 0xe8, 0x42, 0x6f, 0xaf, 0x1b, 0x2c, 0xa2, 0xd1, 0x27, 0xed,
- 0xe1, 0x50, 0x9c, 0x65, 0x4e, 0x9c, 0xb7, 0x89, 0x17, 0x31, 0x81, 0xb0, 0xa7, 0x79, 0x30, 0x55,
- 0xb5, 0x2d, 0xdf, 0x32, 0xbb, 0xda, 0x8b, 0xf2, 0x60, 0xbe, 0x09, 0xfd, 0x75, 0xd3, 0x35, 0x77,
- 0xa1, 0x0f, 0x5d, 0x4f, 0xfb, 0x06, 0xdf, 0x27, 0xf4, 0xba, 0xa6, 0xbf, 0xe5, 0xb8, 0xbb, 0x81,
- 0x6a, 0x06, 0xcf, 0x48, 0x35, 0x2f, 0x43, 0xd7, 0x8b, 0xf8, 0x0a, 0x1e, 0xd1, 0x9b, 0x2b, 0x8e,
- 0x7b, 0x09, 0x0d, 0x82, 0x74, 0x9a, 0x46, 0x1f, 0x11, 0xbd, 0xae, 0xb3, 0x5d, 0x83, 0x97, 0x61,
- 0x10, 0x55, 0x2d, 0x7c, 0x46, 0x73, 0x81, 0x8e, 0x53, 0x77, 0x7c, 0xd4, 0x69, 0xd7, 0x9c, 0x6d,
- 0x12, 0x76, 0x76, 0xda, 0xe0, 0x13, 0xa3, 0x5c, 0xe6, 0x65, 0x88, 0x73, 0x15, 0xd9, 0x5c, 0x34,
- 0x51, 0x5d, 0x04, 0x6a, 0xf8, 0x59, 0x0b, 0x76, 0xe1, 0x2e, 0xf4, 0xdd, 0x7d, 0x7c, 0xbb, 0xc4,
- 0xb4, 0x31, 0xe0, 0x0d, 0x1d, 0xa0, 0xc5, 0x27, 0xeb, 0x54, 0x7a, 0x8b, 0x9c, 0xe4, 0x0e, 0x35,
- 0x59, 0x17, 0xa1, 0x38, 0x91, 0xdb, 0xb3, 0x64, 0x64, 0xcd, 0xbc, 0x42, 0x06, 0x79, 0x3c, 0x78,
- 0xbe, 0x39, 0xc7, 0xad, 0x30, 0xed, 0x42, 0xcf, 0x33, 0xb7, 0x61, 0xb0, 0xc2, 0x44, 0x1f, 0xd5,
- 0x3b, 0x41, 0xa1, 0x8b, 0x31, 0x25, 0x83, 0xc3, 0x0d, 0x5c, 0xcd, 0x90, 0x81, 0x81, 0x68, 0x85,
- 0x23, 0x01, 0x86, 0xdb, 0x20, 0x5f, 0x9c, 0xbd, 0x0f, 0x14, 0x08, 0xfc, 0x33, 0xa0, 0x50, 0xd1,
- 0x97, 0x36, 0x56, 0x94, 0x63, 0xe8, 0x6f, 0xc0, 0xdf, 0x0c, 0x28, 0x2c, 0x97, 0x5a, 0xa5, 0x9a,
- 0x22, 0xa1, 0x7a, 0x54, 0xeb, 0xcb, 0x0d, 0x45, 0x46, 0x89, 0xeb, 0xa5, 0x7a, 0xb5, 0xac, 0xe4,
- 0xd5, 0x59, 0x30, 0x75, 0xbe, 0x64, 0xd4, 0xab, 0xf5, 0x15, 0xa5, 0xa0, 0xfd, 0x25, 0x8b, 0xdf,
- 0x5d, 0x3c, 0x7e, 0x37, 0xc6, 0xf1, 0x34, 0x08, 0xb2, 0x9f, 0x0f, 0x21, 0xbb, 0x87, 0x83, 0xec,
- 0x3b, 0x45, 0x88, 0x4c, 0xc0, 0x9d, 0xa9, 0x08, 0xa6, 0xd6, 0x5d, 0xa7, 0x0d, 0x3d, 0x4f, 0xfb,
- 0x19, 0x09, 0x14, 0xcb, 0xa6, 0xdd, 0x86, 0x5d, 0xed, 0x9a, 0x08, 0x2a, 0xe2, 0x2a, 0x9a, 0x0b,
- 0x5c, 0x45, 0xb5, 0xaf, 0xe5, 0x44, 0x7b, 0x3f, 0x4a, 0x77, 0x91, 0xd0, 0x8c, 0x91, 0x8f, 0x58,
- 0x2f, 0x97, 0x48, 0x6a, 0x02, 0x37, 0xec, 0x48, 0x60, 0x86, 0xae, 0x06, 0x5c, 0x84, 0xec, 0x3c,
- 0xfc, 0x1b, 0x39, 0xd1, 0xc9, 0x61, 0x50, 0x83, 0x90, 0x4c, 0x8c, 0x3c, 0xc4, 0x26, 0x82, 0xc3,
- 0xa8, 0x4d, 0x60, 0xf3, 0x50, 0x02, 0xb3, 0x1b, 0xb6, 0x37, 0x48, 0x28, 0xe2, 0xe1, 0xf8, 0x83,
- 0x6a, 0x30, 0x84, 0x0e, 0x15, 0x8e, 0x7f, 0x38, 0xbd, 0xec, 0x05, 0xf3, 0x8d, 0x1c, 0x38, 0xb9,
- 0x02, 0x6d, 0xe8, 0x5a, 0x6d, 0x52, 0x83, 0x40, 0x12, 0xf7, 0xf0, 0x92, 0x78, 0x1c, 0xc7, 0xf9,
- 0xa0, 0x2f, 0x78, 0x09, 0xbc, 0x3a, 0x94, 0xc0, 0x33, 0x38, 0x09, 0xdc, 0x2a, 0x48, 0x67, 0x02,
- 0xd7, 0xaa, 0xcf, 0x80, 0xb9, 0xba, 0xe3, 0x5b, 0x5b, 0x56, 0x9b, 0xf8, 0xa0, 0xfd, 0x9c, 0x0c,
- 0xf2, 0x35, 0xcb, 0xf3, 0xb5, 0x52, 0xd4, 0x9d, 0x5c, 0x0f, 0x66, 0x2d, 0xbb, 0xdd, 0xdd, 0xeb,
- 0x40, 0x03, 0x9a, 0xa4, 0x5f, 0x99, 0x36, 0xd8, 0xa4, 0x68, 0x6b, 0x1f, 0xb1, 0x25, 0x07, 0x5b,
- 0xfb, 0xbf, 0x25, 0xbc, 0x0c, 0xc3, 0xb2, 0x80, 0xe3, 0x52, 0xc6, 0xd8, 0x5d, 0x25, 0x30, 0x6f,
- 0x33, 0x59, 0x03, 0x83, 0xbd, 0xff, 0x5e, 0x02, 0x96, 0x9c, 0xc1, 0x7f, 0xa1, 0x7d, 0x40, 0xa8,
- 0xb1, 0x0e, 0x63, 0x28, 0x1d, 0x32, 0xcb, 0x23, 0x4c, 0x92, 0x55, 0xb0, 0x50, 0xad, 0xb7, 0x74,
- 0xa3, 0x5e, 0xaa, 0xd1, 0x2c, 0xb2, 0xf6, 0xaf, 0x12, 0x28, 0x18, 0xb0, 0xd7, 0xdd, 0x67, 0x03,
- 0x4f, 0x53, 0x47, 0xf1, 0x5c, 0xe8, 0x28, 0xae, 0x2e, 0x03, 0x60, 0xb6, 0x51, 0xc1, 0xf8, 0x66,
- 0x2e, 0x69, 0x60, 0x38, 0x53, 0xae, 0x82, 0xa5, 0x30, 0xb7, 0xc1, 0x7c, 0xa9, 0xbd, 0x58, 0x78,
- 0xe7, 0x88, 0xa3, 0x86, 0x39, 0x8c, 0xe9, 0x13, 0x3e, 0x28, 0xb4, 0xd9, 0x33, 0x94, 0xdc, 0xd1,
- 0x88, 0xff, 0x2b, 0x12, 0xc8, 0xb7, 0x50, 0x6f, 0xc9, 0x74, 0x9c, 0x9f, 0x1d, 0x4d, 0xc7, 0x11,
- 0x99, 0x18, 0x1d, 0xbf, 0x17, 0xcc, 0xb1, 0x1a, 0x4b, 0x5d, 0x25, 0x12, 0x55, 0x9c, 0xfb, 0x60,
- 0x14, 0x0d, 0x1f, 0xc0, 0xce, 0xd1, 0x88, 0xf8, 0xd3, 0x8f, 0x07, 0x60, 0x0d, 0xee, 0x5e, 0x84,
- 0xae, 0xb7, 0x63, 0xf5, 0xb4, 0xbf, 0x96, 0xc1, 0xcc, 0x0a, 0xf4, 0x9b, 0xbe, 0xe9, 0xef, 0x79,
- 0x7d, 0xdb, 0x9d, 0xb6, 0x53, 0x36, 0xdb, 0x3b, 0x90, 0x76, 0x47, 0xc1, 0xa3, 0xf6, 0x1e, 0x59,
- 0xd4, 0x9f, 0x28, 0x2a, 0x67, 0x31, 0x2c, 0x23, 0x06, 0x93, 0x27, 0x80, 0x7c, 0xc7, 0xf4, 0x4d,
- 0x8a, 0xc5, 0x35, 0x7d, 0x58, 0x44, 0x84, 0x0c, 0x9c, 0x4d, 0x7b, 0x87, 0x24, 0xe2, 0x50, 0x24,
- 0x50, 0x7e, 0x3a, 0x10, 0x3e, 0x90, 0x1b, 0x01, 0x85, 0x13, 0x60, 0xbe, 0xde, 0x68, 0x6d, 0xd6,
- 0x1a, 0x2b, 0x2b, 0x3a, 0x4a, 0x55, 0x64, 0xf5, 0x14, 0x50, 0xd7, 0x4b, 0x17, 0xd6, 0xf4, 0x7a,
- 0x6b, 0xb3, 0xde, 0xa8, 0xe8, 0xf4, 0xcb, 0xbc, 0x7a, 0x1c, 0xcc, 0x96, 0x4b, 0xe5, 0xd5, 0x20,
- 0xa1, 0xa0, 0x9e, 0x06, 0x27, 0xd7, 0xf4, 0xb5, 0x25, 0xdd, 0x68, 0xae, 0x56, 0xd7, 0x37, 0x11,
- 0x99, 0xe5, 0xc6, 0x46, 0xbd, 0xa2, 0x14, 0x55, 0x0d, 0x9c, 0x62, 0xde, 0x9c, 0x37, 0x1a, 0xf5,
- 0x95, 0xcd, 0x66, 0xab, 0xd4, 0xd2, 0x95, 0x29, 0xf5, 0x2a, 0x70, 0xbc, 0x5c, 0xaa, 0xe3, 0xec,
- 0xe5, 0x46, 0xbd, 0xae, 0x97, 0x5b, 0xca, 0xb4, 0xf6, 0xef, 0x79, 0x30, 0x5b, 0xf5, 0xea, 0xe6,
- 0x2e, 0x3c, 0x67, 0x76, 0xad, 0x8e, 0xf6, 0x22, 0x66, 0xe6, 0x71, 0x23, 0x98, 0x77, 0xc9, 0x5f,
- 0xd8, 0x69, 0x59, 0x90, 0xa0, 0x39, 0x6f, 0xf0, 0x89, 0x68, 0x4e, 0x6e, 0x63, 0x02, 0xc1, 0x9c,
- 0x9c, 0x3c, 0xa9, 0x4b, 0x00, 0x90, 0x7f, 0xad, 0xe8, 0x8e, 0xd8, 0xb3, 0xfd, 0xad, 0xc9, 0xdc,
- 0x85, 0x1e, 0x74, 0x2f, 0x5b, 0x6d, 0x18, 0xe4, 0x34, 0x98, 0xaf, 0xb4, 0x3f, 0x95, 0x45, 0xf7,
- 0x17, 0x19, 0x50, 0x99, 0xea, 0xc4, 0xf4, 0x86, 0x3f, 0x22, 0x8b, 0xec, 0x0e, 0x0a, 0x91, 0x4c,
- 0xa7, 0x29, 0x2f, 0x95, 0x46, 0x5b, 0xb6, 0x6d, 0x35, 0x1a, 0x9b, 0xcd, 0xd5, 0x86, 0xd1, 0x52,
- 0x64, 0x75, 0x0e, 0x4c, 0xa3, 0xc7, 0x5a, 0xa3, 0xbe, 0xa2, 0xe4, 0xd5, 0xab, 0xc1, 0x89, 0xd5,
- 0x52, 0x73, 0xb3, 0x5a, 0x3f, 0x57, 0xaa, 0x55, 0x2b, 0x9b, 0xe5, 0xd5, 0x92, 0xd1, 0x54, 0x0a,
- 0xea, 0x35, 0xe0, 0xea, 0x56, 0x55, 0x37, 0x36, 0x97, 0xf5, 0x52, 0x6b, 0xc3, 0xd0, 0x9b, 0x9b,
- 0xf5, 0xc6, 0x66, 0xbd, 0xb4, 0xa6, 0x2b, 0x45, 0xd4, 0xfc, 0xf1, 0xab, 0x48, 0x6d, 0xa6, 0x0e,
- 0x2a, 0xe3, 0x74, 0x8c, 0x32, 0xce, 0xf4, 0x2b, 0x23, 0x60, 0xd5, 0xca, 0xd0, 0x9b, 0xba, 0x71,
- 0x4e, 0x57, 0x66, 0x07, 0xe9, 0xda, 0x9c, 0x7a, 0x12, 0x28, 0x88, 0x87, 0xcd, 0x6a, 0x33, 0xc8,
- 0x59, 0x51, 0xe6, 0xb5, 0x4f, 0x15, 0xc1, 0x29, 0x03, 0x6e, 0x5b, 0x9e, 0x0f, 0xdd, 0x75, 0x73,
- 0x7f, 0x17, 0xda, 0x7e, 0xd0, 0xc9, 0xff, 0x73, 0x6a, 0x65, 0x5c, 0x03, 0xf3, 0x3d, 0x42, 0x63,
- 0x0d, 0xfa, 0x3b, 0x4e, 0x87, 0x8e, 0xc2, 0x8f, 0x8b, 0xed, 0x39, 0x16, 0xd7, 0xd9, 0xec, 0x06,
- 0xff, 0x35, 0xa3, 0xdb, 0x72, 0x82, 0x6e, 0xe7, 0x47, 0xd1, 0x6d, 0xf5, 0x5a, 0x30, 0xb3, 0xe7,
- 0x41, 0x57, 0xdf, 0x35, 0xad, 0x6e, 0x70, 0xc7, 0x67, 0x98, 0xa0, 0xbd, 0x33, 0x2f, 0x7a, 0x62,
- 0x85, 0xa9, 0xcb, 0x60, 0x31, 0xc6, 0xf4, 0xad, 0x67, 0x00, 0xa0, 0x95, 0xdd, 0x70, 0xbb, 0x54,
- 0x59, 0x99, 0x14, 0xc4, 0xdf, 0x45, 0xab, 0xdb, 0xb5, 0xec, 0xed, 0x70, 0xdf, 0x3f, 0x4a, 0xd0,
- 0x5e, 0x2a, 0x8b, 0x9c, 0x60, 0x49, 0xcb, 0x5b, 0xba, 0xd6, 0xf4, 0x62, 0x69, 0xc2, 0xfd, 0xee,
- 0xc1, 0xa6, 0x53, 0x54, 0x15, 0x30, 0x87, 0xd3, 0x68, 0x0b, 0x54, 0xa6, 0x50, 0x1f, 0x1c, 0x90,
- 0x5b, 0xd3, 0x5b, 0xab, 0x8d, 0x4a, 0xf8, 0x6e, 0x1a, 0x91, 0x44, 0xcc, 0x94, 0xea, 0x17, 0x70,
- 0x6b, 0x9c, 0x51, 0x1f, 0x03, 0xae, 0x61, 0x3a, 0xec, 0x52, 0xcd, 0xd0, 0x4b, 0x95, 0x0b, 0x9b,
- 0xfa, 0xb3, 0xaa, 0xcd, 0x56, 0x93, 0x6f, 0x5c, 0x41, 0x3b, 0x9a, 0x45, 0xfc, 0xea, 0x6b, 0xa5,
- 0x6a, 0x8d, 0xf6, 0xef, 0xcb, 0x0d, 0x63, 0xad, 0xd4, 0x52, 0xe6, 0xb4, 0x57, 0xc8, 0x40, 0x59,
- 0x81, 0xfe, 0xba, 0xe3, 0xfa, 0x66, 0xb7, 0x66, 0xd9, 0x97, 0x36, 0xdc, 0x2e, 0x37, 0xd9, 0x14,
- 0x0e, 0xd3, 0xc1, 0x0f, 0x91, 0x1c, 0xc1, 0xf8, 0x1d, 0xf1, 0x1e, 0xce, 0x16, 0x29, 0x53, 0x94,
- 0xa0, 0x3d, 0x57, 0x12, 0x59, 0xee, 0x16, 0x2f, 0x35, 0x9d, 0x9e, 0x3c, 0x6f, 0xd2, 0xe3, 0xf3,
- 0x00, 0xd4, 0x8a, 0xda, 0x0b, 0xf2, 0x60, 0x7a, 0xd9, 0xb2, 0xcd, 0xae, 0xf5, 0x1c, 0x2e, 0x3a,
- 0x66, 0xd4, 0xc7, 0xe4, 0x12, 0xfa, 0x18, 0x69, 0xa4, 0xf1, 0xf3, 0xa7, 0x64, 0xd1, 0xe5, 0x05,
- 0x46, 0xf6, 0x01, 0x93, 0x31, 0x83, 0xe7, 0x47, 0x25, 0x91, 0xe5, 0x85, 0xe1, 0xf4, 0xd2, 0x61,
- 0xf8, 0x99, 0x6f, 0x0f, 0x1b, 0xab, 0xaf, 0x7d, 0x4f, 0x0f, 0x52, 0x85, 0x19, 0xed, 0xf7, 0x64,
- 0xa0, 0xad, 0x40, 0xff, 0x1c, 0x74, 0xc3, 0xa9, 0x00, 0xee, 0xf5, 0xa9, 0xbd, 0xcd, 0x34, 0xd9,
- 0x37, 0xb3, 0x00, 0x9e, 0xe7, 0x01, 0x2c, 0x25, 0x34, 0x9e, 0x18, 0xd2, 0x31, 0x8d, 0xb7, 0x0a,
- 0x8a, 0x1e, 0x7e, 0x4f, 0xd5, 0xec, 0x89, 0xf1, 0xc3, 0x25, 0x26, 0xc6, 0x52, 0x27, 0x84, 0x0d,
- 0x4a, 0x40, 0xfb, 0x66, 0x38, 0x09, 0xfa, 0x1e, 0x4e, 0x3b, 0x96, 0x0f, 0xcd, 0x6c, 0x3a, 0x7d,
- 0x71, 0xb3, 0x55, 0x97, 0x41, 0xf6, 0x8d, 0xf6, 0xd1, 0x02, 0x38, 0x39, 0xa8, 0x3a, 0xda, 0x2f,
- 0xe7, 0xb8, 0x1d, 0x76, 0x88, 0x87, 0xfc, 0x1c, 0xdd, 0x40, 0x44, 0x0f, 0xea, 0x93, 0xc1, 0xd5,
- 0xe1, 0x32, 0x5c, 0xcb, 0xa9, 0xc3, 0x2b, 0x5e, 0x17, 0xfa, 0x3e, 0x74, 0x71, 0xd5, 0xa6, 0x8d,
- 0xc1, 0x2f, 0xd5, 0xa7, 0x82, 0x47, 0x59, 0xb6, 0x67, 0x75, 0xa0, 0xdb, 0xb2, 0x7a, 0x5e, 0xc9,
- 0xee, 0xb4, 0xf6, 0x7c, 0xc7, 0xb5, 0x4c, 0x7a, 0x23, 0xe5, 0xb4, 0x11, 0xf7, 0x5a, 0xbd, 0x05,
- 0x28, 0x96, 0xd7, 0xb0, 0x2f, 0x3a, 0xa6, 0xdb, 0xb1, 0xec, 0xed, 0x9a, 0xe5, 0xf9, 0xd4, 0x03,
- 0xf8, 0x40, 0xba, 0xf6, 0x37, 0xb2, 0xe8, 0x61, 0xba, 0x21, 0xb0, 0xc6, 0x74, 0x28, 0x2f, 0x94,
- 0x45, 0x8e, 0xc7, 0xa5, 0xa3, 0x9d, 0x4e, 0x59, 0x9e, 0x3f, 0x69, 0x43, 0x62, 0xf0, 0x08, 0x8e,
- 0xbb, 0x16, 0x92, 0x1e, 0x18, 0x02, 0xe7, 0x74, 0xa3, 0xba, 0x5c, 0xd5, 0x91, 0x59, 0x71, 0x35,
- 0x38, 0x11, 0xbd, 0xab, 0x5c, 0xd8, 0x6c, 0xea, 0xf5, 0x96, 0x32, 0x8d, 0xfa, 0x29, 0x92, 0xbc,
- 0x5c, 0xaa, 0xd6, 0xf4, 0xca, 0x66, 0xab, 0x81, 0xde, 0x54, 0x46, 0x33, 0x2d, 0xb4, 0x87, 0xf2,
- 0xe0, 0x38, 0x96, 0xed, 0x3e, 0x96, 0x2a, 0x12, 0x4a, 0x9f, 0xaf, 0x6d, 0x08, 0xd0, 0x0c, 0x11,
- 0xaf, 0xf6, 0xbb, 0xc2, 0x17, 0x6e, 0x32, 0x10, 0xf6, 0x95, 0x11, 0xa3, 0x19, 0xdf, 0x90, 0x44,
- 0x22, 0x54, 0x08, 0x93, 0x4d, 0xa7, 0x14, 0xff, 0x32, 0xe9, 0x11, 0x27, 0x1e, 0x7c, 0x6c, 0x65,
- 0x96, 0xf1, 0xc7, 0xcf, 0x5a, 0xaf, 0x1a, 0x58, 0x1d, 0x16, 0x00, 0xc0, 0x29, 0x58, 0x83, 0x88,
- 0x1e, 0x0c, 0x1c, 0xaf, 0xe2, 0xf4, 0xa0, 0x54, 0x6e, 0x55, 0xcf, 0xe9, 0x71, 0x7a, 0xf0, 0x39,
- 0x19, 0x4c, 0xaf, 0x40, 0x1f, 0xcd, 0xa9, 0x3c, 0xed, 0x69, 0x02, 0xeb, 0x3f, 0xc8, 0x8c, 0xe9,
- 0x3a, 0x6d, 0xb3, 0x1b, 0x2e, 0x03, 0x90, 0x27, 0xed, 0x87, 0x47, 0x31, 0x41, 0x82, 0xa2, 0x63,
- 0xc6, 0xab, 0xef, 0x06, 0x05, 0x1f, 0xbd, 0xa6, 0xcb, 0xd0, 0xdf, 0x11, 0x3b, 0x5c, 0x21, 0x22,
- 0x15, 0xd3, 0x37, 0x0d, 0x92, 0x9f, 0x19, 0x9d, 0x04, 0x6d, 0x97, 0x18, 0x46, 0xbe, 0x1d, 0xed,
- 0xcf, 0xbf, 0x94, 0xc1, 0xd5, 0xa4, 0x7d, 0x94, 0x7a, 0xbd, 0xa6, 0xef, 0xb8, 0xd0, 0x80, 0x6d,
- 0x68, 0xf5, 0xfc, 0xbe, 0xf5, 0x3d, 0x97, 0xa4, 0x06, 0x9b, 0xcd, 0xf4, 0x51, 0x7b, 0x83, 0x2c,
- 0x1a, 0xe1, 0xf7, 0x40, 0x7b, 0xec, 0x2b, 0x2f, 0xa6, 0xb1, 0x7f, 0x52, 0x12, 0x89, 0xd9, 0x9b,
- 0x92, 0x78, 0x3a, 0xa0, 0x3e, 0x76, 0x04, 0x40, 0x05, 0x2b, 0x37, 0x86, 0x5e, 0xd6, 0xab, 0xeb,
- 0x68, 0x10, 0xb8, 0x0e, 0x3c, 0x7a, 0x7d, 0xc3, 0x28, 0xaf, 0x96, 0x9a, 0xfa, 0xa6, 0xa1, 0xaf,
- 0x54, 0x9b, 0x2d, 0xea, 0x94, 0x45, 0xbe, 0x9a, 0x52, 0xaf, 0x05, 0xa7, 0x9b, 0x1b, 0x4b, 0xcd,
- 0xb2, 0x51, 0x5d, 0xc7, 0xe9, 0x86, 0x5e, 0xd7, 0xcf, 0xd3, 0xb7, 0xd3, 0xda, 0x87, 0x15, 0x30,
- 0x8b, 0x26, 0x00, 0x4d, 0x32, 0x2f, 0xd0, 0xfe, 0x2e, 0x0f, 0x66, 0x0d, 0xe8, 0x39, 0xdd, 0xcb,
- 0x78, 0x8e, 0x30, 0xa9, 0xa9, 0xc7, 0xd7, 0x65, 0xd1, 0xf3, 0xdb, 0x0c, 0xb3, 0x8b, 0x0c, 0xa3,
- 0xf1, 0x13, 0x4d, 0xf3, 0xb2, 0x69, 0x75, 0xcd, 0x8b, 0xb4, 0xab, 0x99, 0x36, 0xa2, 0x04, 0x75,
- 0x11, 0xa8, 0xce, 0x15, 0x1b, 0xba, 0xcd, 0xf6, 0x15, 0xdd, 0xdf, 0x29, 0x75, 0x3a, 0x2e, 0xf4,
- 0x3c, 0xba, 0x7a, 0x31, 0xe0, 0x8d, 0x7a, 0x33, 0x38, 0x8e, 0x53, 0x99, 0xcc, 0xc4, 0x41, 0xa6,
- 0x3f, 0x39, 0xcc, 0x59, 0xb2, 0xf7, 0x83, 0x9c, 0x05, 0x26, 0x67, 0x94, 0xcc, 0x1e, 0x97, 0x28,
- 0xf2, 0xa7, 0x74, 0xae, 0x07, 0xb3, 0xb6, 0xb9, 0x0b, 0xf5, 0x07, 0x7b, 0x96, 0x0b, 0x3d, 0xec,
- 0x18, 0x23, 0x1b, 0x6c, 0x92, 0xf6, 0x51, 0xa1, 0xf3, 0xe6, 0x62, 0x12, 0x4b, 0xa7, 0xfb, 0x2b,
- 0x23, 0xa8, 0xfe, 0x80, 0x7e, 0x46, 0xd6, 0x3e, 0x2c, 0x83, 0x39, 0xca, 0x54, 0xc9, 0xde, 0xaf,
- 0x76, 0xb4, 0xeb, 0x38, 0xe3, 0xd7, 0x44, 0x69, 0x81, 0xf1, 0x8b, 0x1f, 0xb4, 0x1f, 0x95, 0x45,
- 0xdd, 0x9d, 0x07, 0x54, 0x1c, 0x97, 0x11, 0xef, 0x38, 0xba, 0xe5, 0xec, 0x51, 0x47, 0xd5, 0x69,
- 0x83, 0x3c, 0x64, 0xb9, 0xa8, 0xa7, 0xfd, 0xaa, 0x90, 0x33, 0xb5, 0x60, 0x35, 0x8e, 0x08, 0xc0,
- 0x4f, 0xcb, 0x60, 0x81, 0x72, 0xd5, 0xa4, 0xe7, 0x7c, 0x84, 0x0e, 0xbc, 0xfd, 0xb8, 0xb0, 0x21,
- 0x38, 0xa0, 0xfe, 0xb4, 0xa4, 0x47, 0x0c, 0x90, 0x1f, 0x17, 0x0a, 0x8e, 0x26, 0x5c, 0x91, 0x23,
- 0x82, 0xf2, 0x5d, 0x79, 0x30, 0xbb, 0xe1, 0x41, 0x97, 0xfa, 0xed, 0x6b, 0x0f, 0xe7, 0x81, 0xbc,
- 0x02, 0xb9, 0x8d, 0xd4, 0x97, 0x08, 0x7b, 0xf8, 0xb2, 0x95, 0x65, 0x88, 0x22, 0x1b, 0x29, 0x06,
- 0xb6, 0x9b, 0xc0, 0x02, 0x11, 0x69, 0xc9, 0xf7, 0x91, 0x91, 0x18, 0x78, 0xd3, 0xf6, 0xa5, 0x8e,
- 0x63, 0xab, 0x08, 0x97, 0x85, 0xb2, 0x94, 0x11, 0x4f, 0x35, 0xb8, 0x45, 0xe6, 0xb3, 0x79, 0xa3,
- 0x2f, 0x55, 0xbd, 0x1d, 0x5c, 0xe5, 0xf4, 0x20, 0x39, 0xbf, 0xc2, 0x64, 0x2e, 0xe0, 0xcc, 0x83,
- 0x5e, 0x69, 0x7f, 0x27, 0xe4, 0xab, 0x2b, 0x2e, 0x9d, 0x74, 0xba, 0xd0, 0x1b, 0x8f, 0x49, 0x72,
- 0x12, 0x28, 0x28, 0x07, 0xde, 0x7f, 0x31, 0xf4, 0x66, 0xa3, 0x76, 0x4e, 0x1f, 0xbc, 0x8c, 0x51,
- 0xd0, 0x9e, 0x2f, 0x83, 0x99, 0x25, 0xd7, 0x31, 0x3b, 0x6d, 0xd3, 0xf3, 0xb5, 0x6f, 0x4a, 0x60,
- 0x6e, 0xdd, 0xdc, 0xef, 0x3a, 0x66, 0x07, 0xfb, 0xf7, 0xf7, 0xf5, 0x05, 0x3d, 0xf2, 0x2a, 0xe8,
- 0x0b, 0xe8, 0x23, 0x7f, 0x30, 0x30, 0x3c, 0xba, 0x97, 0x13, 0xb9, 0x57, 0x33, 0xdc, 0xe6, 0x93,
- 0x06, 0x05, 0x2b, 0x0d, 0xf8, 0x5a, 0x64, 0x79, 0x8a, 0xb1, 0x28, 0x3f, 0x2c, 0x16, 0x7e, 0x54,
- 0x84, 0xe4, 0xd1, 0xec, 0xca, 0xbf, 0x60, 0x1a, 0x14, 0x2b, 0x10, 0x5b, 0x71, 0xff, 0x5d, 0x02,
- 0x53, 0x4d, 0xe8, 0x63, 0x0b, 0xee, 0x4e, 0xce, 0x53, 0xb8, 0x83, 0x33, 0x44, 0x4e, 0xec, 0xc1,
- 0x33, 0x9a, 0xac, 0x33, 0xe7, 0xad, 0xf1, 0xff, 0x14, 0x1e, 0x89, 0xa4, 0xdc, 0x45, 0x5a, 0xe6,
- 0xa1, 0x3c, 0x12, 0x13, 0x49, 0x65, 0xef, 0x6b, 0xf5, 0x1e, 0x89, 0xba, 0x56, 0x31, 0xbd, 0xde,
- 0x6b, 0x58, 0xfd, 0x4c, 0xf4, 0x36, 0xa3, 0xcc, 0x27, 0x38, 0x47, 0x3d, 0x09, 0x4c, 0x11, 0x99,
- 0x07, 0xf3, 0xd1, 0x7e, 0x3f, 0x05, 0x42, 0x02, 0x9f, 0xbd, 0x0e, 0x72, 0x0a, 0xba, 0xa8, 0xc5,
- 0x17, 0x3e, 0x91, 0x18, 0x04, 0x73, 0x75, 0xe8, 0x5f, 0x71, 0xdc, 0x4b, 0x4d, 0xdf, 0xf4, 0xa1,
- 0xf6, 0x2f, 0x12, 0xb9, 0x2e, 0x8f, 0x89, 0x7e, 0x52, 0x07, 0x27, 0x48, 0x85, 0x68, 0x46, 0xdc,
- 0x7f, 0x93, 0x8a, 0x5c, 0x3f, 0x50, 0x08, 0x4c, 0x3e, 0xe3, 0xe0, 0xa7, 0xda, 0xcf, 0x0c, 0x0c,
- 0xfa, 0x24, 0x0d, 0x98, 0x34, 0x50, 0xc9, 0xb0, 0x0c, 0xc6, 0xdf, 0x8f, 0xa7, 0x7d, 0x44, 0xc8,
- 0xac, 0x16, 0xa3, 0x79, 0x34, 0x5d, 0xc1, 0xbf, 0x3d, 0x0e, 0xe4, 0xcb, 0x3b, 0xa6, 0xaf, 0xbd,
- 0x5b, 0x06, 0xa0, 0xd4, 0xe9, 0xac, 0x11, 0x1f, 0x70, 0xd6, 0x21, 0xed, 0x2c, 0x98, 0x6b, 0xef,
- 0x98, 0xd1, 0xcd, 0x19, 0xa4, 0x3f, 0xe0, 0xd2, 0xd4, 0x27, 0x47, 0xce, 0xe4, 0x44, 0xaa, 0x5a,
- 0x1f, 0x4c, 0xa8, 0x0c, 0x4a, 0x3b, 0x74, 0x34, 0xe7, 0x43, 0x61, 0x26, 0x1e, 0xa1, 0x43, 0x9f,
- 0x2f, 0x46, 0xec, 0xc5, 0xcf, 0xe1, 0x28, 0xe9, 0xf0, 0x80, 0x4d, 0x94, 0x90, 0xf2, 0xa4, 0xb7,
- 0x58, 0x40, 0x8f, 0x64, 0xbe, 0x26, 0x12, 0xba, 0x56, 0xd5, 0x3b, 0x56, 0x20, 0x5a, 0x1a, 0x30,
- 0x4b, 0x7b, 0x71, 0x2e, 0x1d, 0x7c, 0xc9, 0x82, 0x7b, 0x06, 0x98, 0x87, 0x1d, 0xcb, 0x87, 0x41,
- 0x2d, 0xa9, 0x00, 0x93, 0x20, 0xe6, 0x3f, 0xd0, 0x9e, 0x27, 0x1c, 0x74, 0x0d, 0x0b, 0xf4, 0x60,
- 0x8d, 0x62, 0xda, 0x9f, 0x58, 0x18, 0x35, 0x31, 0x9a, 0xd9, 0x83, 0xf5, 0xc3, 0x32, 0xb8, 0xba,
- 0xe5, 0x6c, 0x6f, 0x77, 0x61, 0x20, 0x26, 0x48, 0xbc, 0x33, 0x35, 0x73, 0x9c, 0x70, 0xe1, 0x9d,
- 0x20, 0xe7, 0x01, 0x2b, 0x3c, 0x4a, 0x86, 0x1e, 0xf8, 0x13, 0x53, 0x89, 0xb3, 0x28, 0x2c, 0xae,
- 0x81, 0x7c, 0xc6, 0xa0, 0x20, 0x16, 0xf0, 0x59, 0x98, 0x6c, 0xf6, 0x40, 0x7c, 0x41, 0x02, 0xf3,
- 0xe4, 0x5e, 0xc4, 0x40, 0x41, 0xef, 0x1f, 0x23, 0x00, 0xda, 0x37, 0x73, 0xa2, 0x7e, 0xb6, 0x58,
- 0x26, 0x1c, 0x27, 0x31, 0x22, 0x16, 0x0b, 0xaa, 0x32, 0x94, 0xdc, 0x04, 0x6e, 0xea, 0xcc, 0x83,
- 0xd9, 0x15, 0x18, 0xb4, 0x34, 0x4f, 0x7b, 0x7f, 0xca, 0x9e, 0xe8, 0x2c, 0x98, 0xc3, 0x97, 0x83,
- 0x35, 0xe8, 0x31, 0x49, 0xb2, 0x6a, 0xc6, 0xa5, 0xa9, 0x37, 0x82, 0xf9, 0x8b, 0x70, 0xcb, 0x71,
- 0x61, 0x83, 0x3b, 0x4b, 0xc9, 0x27, 0x0e, 0x0e, 0x4f, 0xa7, 0xde, 0x0c, 0x8e, 0x53, 0x47, 0xf7,
- 0x25, 0x34, 0xd7, 0x37, 0xdd, 0x7d, 0x7a, 0x30, 0xad, 0x3f, 0x59, 0xfb, 0x4b, 0xb6, 0xc1, 0x2c,
- 0xf1, 0x28, 0xde, 0x7a, 0x50, 0xec, 0x4c, 0xa5, 0x63, 0x46, 0xa7, 0xa7, 0x80, 0x69, 0xaa, 0x23,
- 0x81, 0x41, 0x97, 0xd4, 0x83, 0x86, 0x79, 0xd5, 0xa7, 0x80, 0x19, 0x24, 0x22, 0x6c, 0x37, 0xd0,
- 0xae, 0xf7, 0xf4, 0x80, 0x0f, 0xf1, 0x7b, 0x23, 0xca, 0xaa, 0xfd, 0x42, 0xa8, 0x33, 0x3a, 0xa7,
- 0x33, 0x4f, 0x4c, 0xc3, 0xfc, 0x44, 0x2e, 0x92, 0x57, 0x98, 0xf2, 0x97, 0xf6, 0xab, 0x1d, 0x4f,
- 0x5b, 0x4b, 0xa7, 0x35, 0x67, 0x00, 0x08, 0x9b, 0x5f, 0x10, 0x38, 0x83, 0x49, 0xe1, 0x63, 0xe3,
- 0x27, 0x1e, 0x05, 0xec, 0x17, 0x07, 0x66, 0x67, 0xbc, 0x80, 0x0a, 0x1e, 0x21, 0x14, 0xe1, 0x24,
- 0x7b, 0x74, 0x7e, 0x3e, 0x0f, 0xae, 0x0e, 0x4f, 0x38, 0xd5, 0x4c, 0x2f, 0x6a, 0xd9, 0x17, 0xd2,
- 0x41, 0xc4, 0x1d, 0x29, 0x09, 0x9b, 0xe3, 0x49, 0x50, 0xf0, 0xf6, 0x2e, 0x86, 0x8e, 0x80, 0xe4,
- 0x41, 0x7b, 0xa3, 0x9c, 0x6a, 0xac, 0x1a, 0xc8, 0xdf, 0x98, 0x1b, 0xe1, 0xad, 0xe0, 0x84, 0xbd,
- 0xb7, 0x1b, 0x62, 0x81, 0x7b, 0x1a, 0xda, 0xb3, 0x1c, 0x7c, 0xc1, 0x37, 0xd9, 0xbc, 0x78, 0x93,
- 0x4d, 0x31, 0x92, 0x8a, 0x54, 0x3a, 0x7b, 0xf5, 0xf8, 0x4c, 0xdf, 0x11, 0xb4, 0x72, 0x6a, 0xa5,
- 0x20, 0xf0, 0x4b, 0x2c, 0xfc, 0xff, 0x94, 0x4b, 0xd5, 0xf3, 0x0e, 0x3f, 0xb9, 0x96, 0xa2, 0x27,
- 0x3c, 0xca, 0x63, 0x6b, 0x9f, 0x97, 0x80, 0xd6, 0x8c, 0x1c, 0x72, 0x28, 0xa8, 0xeb, 0x2e, 0xbc,
- 0x6c, 0xc1, 0x2b, 0x9c, 0xfb, 0xd6, 0x9b, 0x84, 0xe3, 0x50, 0xf3, 0xba, 0x72, 0x80, 0x68, 0xfc,
- 0xba, 0xf8, 0x00, 0x5c, 0xc4, 0xe2, 0x4d, 0xa7, 0x2b, 0x71, 0x02, 0xb1, 0xc3, 0x25, 0x70, 0x86,
- 0x41, 0x75, 0xd9, 0x75, 0x76, 0x13, 0x24, 0xfb, 0x0a, 0x56, 0xb2, 0x1b, 0xbc, 0x64, 0xef, 0x4d,
- 0x54, 0x97, 0x01, 0x84, 0x63, 0xd4, 0xf1, 0xfd, 0xa1, 0x1c, 0x9f, 0xc5, 0xc9, 0xb1, 0x72, 0x48,
- 0xfa, 0xd9, 0xcb, 0xf2, 0x0f, 0xf2, 0x60, 0xce, 0x80, 0x66, 0x27, 0x1c, 0x04, 0xfe, 0x6f, 0xc6,
- 0xbc, 0x7b, 0x1a, 0xc8, 0xfb, 0xd1, 0x3a, 0xcd, 0xe3, 0x0e, 0x56, 0x86, 0xfd, 0x12, 0x3f, 0xe0,
- 0xe5, 0x1a, 0xfc, 0xd1, 0x81, 0xde, 0x42, 0x12, 0xb0, 0x0d, 0x65, 0x11, 0xdb, 0x30, 0x3f, 0xc8,
- 0x36, 0xbc, 0x19, 0x1c, 0xef, 0x9a, 0x9e, 0x5f, 0xb9, 0xd8, 0xb2, 0x76, 0xa1, 0xe7, 0x9b, 0xbb,
- 0x3d, 0x6c, 0x05, 0xca, 0x46, 0x7f, 0x32, 0x7f, 0x0f, 0x7c, 0xe2, 0x79, 0xb0, 0x41, 0x55, 0x3c,
- 0x7c, 0xcc, 0xdc, 0x0f, 0x09, 0x1d, 0xfe, 0x1a, 0x56, 0x76, 0x3a, 0xcd, 0xb8, 0x6f, 0x84, 0xb5,
- 0xa5, 0x53, 0x40, 0x5d, 0xd3, 0x9b, 0xcd, 0xd2, 0x0a, 0x3e, 0x13, 0x12, 0x38, 0x09, 0x75, 0xce,
- 0x3e, 0x16, 0x89, 0x8f, 0x20, 0xad, 0xce, 0x45, 0x63, 0xaf, 0x72, 0x4c, 0x9d, 0x05, 0x53, 0x2e,
- 0xec, 0x75, 0x2d, 0xe8, 0x29, 0x39, 0xed, 0x1b, 0x12, 0x28, 0x6e, 0xd8, 0x2e, 0x34, 0x3b, 0xda,
- 0x33, 0xe3, 0x87, 0x90, 0x11, 0x95, 0x82, 0x8f, 0x7b, 0x95, 0xb8, 0x2a, 0x4b, 0x1b, 0x1d, 0x62,
- 0x64, 0x2c, 0xf0, 0x89, 0x2d, 0xc7, 0xc6, 0x97, 0x9a, 0x79, 0x93, 0x3e, 0x3b, 0x05, 0x0a, 0xfa,
- 0x6e, 0xcf, 0xdf, 0x3f, 0xfb, 0x58, 0x30, 0xdf, 0xf4, 0x5d, 0x68, 0xee, 0x32, 0x9b, 0xea, 0xbe,
- 0x73, 0x09, 0xda, 0xc1, 0xa6, 0x3a, 0x7e, 0xb8, 0xeb, 0x4e, 0x30, 0x65, 0x3b, 0x9b, 0xe6, 0x9e,
- 0xbf, 0xa3, 0x5e, 0x77, 0x20, 0x1a, 0x0d, 0x55, 0xbf, 0x06, 0x0d, 0xff, 0xf7, 0xa7, 0x77, 0xe3,
- 0xa9, 0x55, 0xd1, 0x76, 0x4a, 0x7b, 0xfe, 0xce, 0xd2, 0xb5, 0x9f, 0xfe, 0xb3, 0x33, 0xb9, 0xcf,
- 0xfd, 0xd9, 0x99, 0xdc, 0x57, 0xfe, 0xec, 0x4c, 0xee, 0xc7, 0xff, 0xfc, 0xcc, 0xb1, 0xcf, 0xfd,
- 0xf9, 0x99, 0x63, 0x5f, 0xf8, 0xf3, 0x33, 0xc7, 0xbe, 0x47, 0xea, 0x5d, 0xbc, 0x58, 0xc4, 0x54,
- 0x9e, 0xf4, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xca, 0x85, 0x9f, 0xc3, 0x2b, 0x02, 0x00,
+ // 21513 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xfd, 0x7b, 0x9c, 0x24, 0x49,
+ 0x59, 0x37, 0x8a, 0x4f, 0x65, 0x56, 0x55, 0x77, 0x47, 0x5f, 0x26, 0x27, 0x77, 0x76, 0x98, 0x4d,
+ 0x96, 0xd9, 0x75, 0x76, 0x59, 0xd6, 0x65, 0xe9, 0x5d, 0x16, 0x44, 0x76, 0xd9, 0x65, 0xa9, 0xae,
+ 0xca, 0xee, 0xae, 0xdd, 0xea, 0xaa, 0x26, 0xab, 0x7a, 0x86, 0xf1, 0x7d, 0xfd, 0xb5, 0x39, 0x55,
+ 0xd1, 0xdd, 0xb9, 0x53, 0x9d, 0x59, 0x64, 0x66, 0xcf, 0x6c, 0xf3, 0xfb, 0x78, 0x5e, 0x11, 0x57,
+ 0x40, 0x44, 0x44, 0x45, 0x45, 0xe4, 0xb6, 0x08, 0x08, 0xc8, 0xfd, 0xf6, 0x82, 0x02, 0xca, 0x45,
+ 0x10, 0x11, 0x51, 0xbc, 0x00, 0xca, 0x11, 0xef, 0xf8, 0x1e, 0x3d, 0xbe, 0x78, 0x14, 0x44, 0x45,
+ 0xcf, 0x27, 0x2e, 0x99, 0x19, 0x51, 0x5d, 0x99, 0x15, 0x59, 0x5d, 0x59, 0xbd, 0xe8, 0xf9, 0xab,
+ 0x2a, 0x23, 0x23, 0x9f, 0x78, 0xe2, 0xf9, 0x3e, 0x11, 0xf1, 0x44, 0xc4, 0x13, 0x4f, 0x80, 0xd3,
+ 0xbd, 0x8b, 0xb7, 0xf5, 0x5c, 0xc7, 0x77, 0xbc, 0xdb, 0xda, 0xce, 0xee, 0xae, 0x69, 0x77, 0xbc,
+ 0x45, 0xfc, 0xac, 0x4e, 0x99, 0xf6, 0xbe, 0xbf, 0xdf, 0x83, 0xda, 0x8d, 0xbd, 0x4b, 0xdb, 0xb7,
+ 0x75, 0xad, 0x8b, 0xb7, 0xf5, 0x2e, 0xde, 0xb6, 0xeb, 0x74, 0x60, 0x37, 0xf8, 0x00, 0x3f, 0xd0,
+ 0xec, 0xda, 0xcd, 0x71, 0xb9, 0xba, 0x4e, 0xdb, 0xec, 0x7a, 0xbe, 0xe3, 0x42, 0x9a, 0xf3, 0x54,
+ 0x54, 0x24, 0xbc, 0x0c, 0x6d, 0x3f, 0xa0, 0x70, 0xed, 0xb6, 0xe3, 0x6c, 0x77, 0x21, 0x79, 0x77,
+ 0x71, 0x6f, 0xeb, 0x36, 0xcf, 0x77, 0xf7, 0xda, 0x3e, 0x7d, 0x7b, 0x7d, 0xff, 0xdb, 0x0e, 0xf4,
+ 0xda, 0xae, 0xd5, 0xf3, 0x1d, 0x97, 0xe4, 0x38, 0xfb, 0xb5, 0xdf, 0x9b, 0x06, 0xb2, 0xd1, 0x6b,
+ 0x6b, 0x5f, 0x9f, 0x02, 0x72, 0xa9, 0xd7, 0xd3, 0x3e, 0x21, 0x01, 0xb0, 0x02, 0xfd, 0x73, 0xd0,
+ 0xf5, 0x2c, 0xc7, 0xd6, 0x8e, 0x83, 0x29, 0x03, 0x3e, 0x7b, 0x0f, 0x7a, 0xfe, 0x5d, 0xf9, 0x17,
+ 0xfc, 0x95, 0x9c, 0xd3, 0x5e, 0x2f, 0x81, 0x69, 0x03, 0x7a, 0x3d, 0xc7, 0xf6, 0xa0, 0xfa, 0x0c,
+ 0x50, 0x80, 0xae, 0xeb, 0xb8, 0xa7, 0x73, 0xd7, 0xe7, 0x6e, 0x9e, 0xbd, 0xe3, 0x96, 0x45, 0x5a,
+ 0xfd, 0x45, 0xa3, 0xd7, 0x5e, 0x2c, 0xf5, 0x7a, 0x8b, 0x11, 0xa5, 0xc5, 0xe0, 0xa3, 0x45, 0x1d,
+ 0x7d, 0x61, 0x90, 0x0f, 0xd5, 0xd3, 0x60, 0xea, 0x32, 0xc9, 0x70, 0x5a, 0xba, 0x3e, 0x77, 0xf3,
+ 0x8c, 0x11, 0x3c, 0xa2, 0x37, 0x1d, 0xe8, 0x9b, 0x56, 0xd7, 0x3b, 0x2d, 0x93, 0x37, 0xf4, 0x51,
+ 0x7b, 0x38, 0x07, 0x0a, 0x98, 0x88, 0x5a, 0x06, 0xf9, 0xb6, 0xd3, 0x81, 0xb8, 0xf8, 0x85, 0x3b,
+ 0x6e, 0x13, 0x2f, 0x7e, 0xb1, 0xec, 0x74, 0xa0, 0x81, 0x3f, 0x56, 0xaf, 0x07, 0xb3, 0x81, 0x58,
+ 0x22, 0x36, 0xd8, 0xa4, 0xb3, 0x77, 0x80, 0x3c, 0xca, 0xaf, 0x4e, 0x83, 0x7c, 0x7d, 0xa3, 0x56,
+ 0x53, 0x8e, 0xa9, 0x27, 0xc0, 0xfc, 0x46, 0xfd, 0xfe, 0x7a, 0xe3, 0x7c, 0x7d, 0x53, 0x37, 0x8c,
+ 0x86, 0xa1, 0xe4, 0xd4, 0x79, 0x30, 0xb3, 0x54, 0xaa, 0x6c, 0x56, 0xeb, 0xeb, 0x1b, 0x2d, 0x45,
+ 0xd2, 0x5e, 0x25, 0x83, 0x85, 0x26, 0xf4, 0x2b, 0xf0, 0xb2, 0xd5, 0x86, 0x4d, 0xdf, 0xf4, 0xa1,
+ 0xf6, 0x92, 0x5c, 0x28, 0x4c, 0x75, 0x03, 0x15, 0x1a, 0xbe, 0xa2, 0x15, 0x78, 0xd2, 0x81, 0x0a,
+ 0xf0, 0x14, 0x16, 0xe9, 0xd7, 0x8b, 0x4c, 0x9a, 0xc1, 0xd2, 0x39, 0xfb, 0x04, 0x30, 0xcb, 0xbc,
+ 0x53, 0x17, 0x00, 0x58, 0x2a, 0x95, 0xef, 0x5f, 0x31, 0x1a, 0x1b, 0xf5, 0x8a, 0x72, 0x0c, 0x3d,
+ 0x2f, 0x37, 0x0c, 0x9d, 0x3e, 0xe7, 0xb4, 0x6f, 0xe6, 0x18, 0x30, 0x2b, 0x3c, 0x98, 0x8b, 0xc3,
+ 0x99, 0x19, 0x00, 0xa8, 0xf6, 0x86, 0x10, 0x9c, 0x15, 0x0e, 0x9c, 0x27, 0xa5, 0x23, 0x97, 0x3d,
+ 0x40, 0x0f, 0x49, 0x60, 0xba, 0xb9, 0xb3, 0xe7, 0x77, 0x9c, 0x2b, 0xb6, 0x36, 0x13, 0x22, 0xa3,
+ 0xfd, 0x1d, 0x2b, 0x93, 0xa7, 0xf3, 0x32, 0xb9, 0xf9, 0x60, 0x25, 0x28, 0x85, 0x18, 0x69, 0xbc,
+ 0x26, 0x94, 0x46, 0x89, 0x93, 0xc6, 0x13, 0x44, 0x09, 0x65, 0x2f, 0x87, 0x2f, 0xdc, 0x0d, 0x0a,
+ 0xcd, 0x9e, 0xd9, 0x86, 0xda, 0x67, 0x64, 0x30, 0x57, 0x83, 0xe6, 0x65, 0x58, 0xea, 0xf5, 0x5c,
+ 0xe7, 0x32, 0xd4, 0xca, 0x91, 0xbe, 0x9e, 0x06, 0x53, 0x1e, 0xca, 0x54, 0xed, 0xe0, 0x1a, 0xcc,
+ 0x18, 0xc1, 0xa3, 0x7a, 0x06, 0x00, 0xab, 0x03, 0x6d, 0xdf, 0xf2, 0x2d, 0xe8, 0x9d, 0x96, 0xae,
+ 0x97, 0x6f, 0x9e, 0x31, 0x98, 0x14, 0xed, 0xeb, 0x92, 0xa8, 0x8e, 0x61, 0x2e, 0x16, 0x59, 0x0e,
+ 0x62, 0xa4, 0xfa, 0x3a, 0x49, 0x44, 0xc7, 0x86, 0x92, 0x4b, 0x27, 0xdb, 0xb7, 0xe5, 0xd2, 0x0b,
+ 0x17, 0xe5, 0xa8, 0x37, 0x36, 0x9b, 0x1b, 0xe5, 0xd5, 0xcd, 0xe6, 0x7a, 0xa9, 0xac, 0x2b, 0x50,
+ 0x3d, 0x09, 0x14, 0xfc, 0x77, 0xb3, 0xda, 0xdc, 0xac, 0xe8, 0x35, 0xbd, 0xa5, 0x57, 0x94, 0x2d,
+ 0x55, 0x05, 0x0b, 0x86, 0xfe, 0xcc, 0x0d, 0xbd, 0xd9, 0xda, 0x5c, 0x2e, 0x55, 0x6b, 0x7a, 0x45,
+ 0xd9, 0x46, 0x1f, 0xd7, 0xaa, 0x6b, 0xd5, 0xd6, 0xa6, 0xa1, 0x97, 0xca, 0xab, 0x7a, 0x45, 0xd9,
+ 0x51, 0x1f, 0x05, 0xae, 0xaa, 0x37, 0x36, 0x4b, 0xeb, 0xeb, 0x46, 0xe3, 0x9c, 0xbe, 0x49, 0xbf,
+ 0x68, 0x2a, 0x16, 0x29, 0xa8, 0xb5, 0xd9, 0x5c, 0x2d, 0x19, 0x7a, 0x69, 0xa9, 0xa6, 0x2b, 0x0f,
+ 0x68, 0xcf, 0x93, 0xc1, 0xfc, 0x9a, 0x79, 0x09, 0x36, 0x77, 0x4c, 0x17, 0x9a, 0x17, 0xbb, 0x50,
+ 0xbb, 0x41, 0x00, 0x4f, 0xed, 0x33, 0x2c, 0x5e, 0x3a, 0x8f, 0xd7, 0x6d, 0x03, 0x04, 0xcc, 0x15,
+ 0x11, 0x03, 0xd8, 0x3f, 0x87, 0xcd, 0x60, 0x95, 0x03, 0xec, 0xc9, 0x29, 0xe9, 0xa5, 0x43, 0xec,
+ 0x07, 0x1f, 0x01, 0x88, 0x69, 0x5f, 0xcc, 0x83, 0x85, 0xaa, 0x7d, 0xd9, 0xf2, 0xe1, 0x0a, 0xb4,
+ 0xa1, 0x8b, 0xc6, 0x81, 0x57, 0xe5, 0x44, 0xda, 0x55, 0x0b, 0x00, 0x0b, 0x7f, 0xd7, 0xda, 0xef,
+ 0x41, 0x5c, 0xbd, 0xc1, 0xf2, 0xe2, 0x89, 0x87, 0x43, 0x44, 0x35, 0xfc, 0xd6, 0x60, 0xe8, 0x9c,
+ 0xbd, 0x01, 0x80, 0xe8, 0x8d, 0x0a, 0x40, 0x71, 0x0d, 0xee, 0x5e, 0x84, 0xae, 0x72, 0x4c, 0x9d,
+ 0x01, 0x85, 0x15, 0xf4, 0xa5, 0x92, 0xd3, 0x5e, 0x2f, 0x33, 0x2a, 0xb0, 0xcc, 0xab, 0xc0, 0xed,
+ 0x22, 0x2c, 0x0c, 0x1a, 0xe9, 0xaf, 0x05, 0x33, 0x84, 0x8f, 0xb2, 0xd5, 0xa1, 0x68, 0x45, 0x09,
+ 0xea, 0x8d, 0x60, 0x9e, 0x3c, 0x2c, 0x5b, 0x5d, 0x78, 0x3f, 0xdc, 0xa7, 0x63, 0x3e, 0x9f, 0xa8,
+ 0xfd, 0x68, 0xd8, 0xf0, 0xab, 0x9c, 0x1e, 0x7d, 0x57, 0x5a, 0xa6, 0xd2, 0x29, 0xd2, 0xcb, 0x1e,
+ 0x09, 0x4d, 0xff, 0x40, 0x0b, 0xb7, 0xb4, 0x6f, 0x49, 0x60, 0xb6, 0xe9, 0x3b, 0x3d, 0xd4, 0x5c,
+ 0x2c, 0x7b, 0x5b, 0xac, 0x7d, 0x7f, 0x8a, 0x6d, 0xdf, 0x65, 0x1e, 0xdc, 0x27, 0x0c, 0x90, 0x23,
+ 0x53, 0x40, 0x4c, 0xeb, 0xfe, 0x7a, 0xd8, 0xba, 0x97, 0x39, 0x54, 0xee, 0x48, 0x45, 0xed, 0xdb,
+ 0xb0, 0x6d, 0xbf, 0x4c, 0x06, 0x4a, 0xa0, 0x66, 0x7e, 0x79, 0xcf, 0x75, 0xa1, 0xed, 0x8b, 0x81,
+ 0xf0, 0x47, 0x2c, 0x08, 0xab, 0x3c, 0x08, 0x77, 0x24, 0x28, 0x73, 0x50, 0x4a, 0x86, 0x6d, 0xec,
+ 0x57, 0x43, 0x34, 0xef, 0xe7, 0xd0, 0xfc, 0xee, 0xf4, 0x6c, 0xa5, 0x83, 0x74, 0x75, 0x04, 0x44,
+ 0x4f, 0x02, 0x05, 0x8d, 0x87, 0xe5, 0x56, 0xf5, 0x9c, 0xbe, 0x59, 0xad, 0x9f, 0xab, 0xb6, 0x74,
+ 0x05, 0x6a, 0x2f, 0x95, 0xa3, 0x3e, 0xd7, 0xc7, 0x9d, 0x9a, 0x18, 0x2a, 0x5f, 0x94, 0x46, 0xeb,
+ 0xf7, 0x48, 0x19, 0x13, 0xc1, 0x44, 0xbc, 0xdf, 0x1b, 0xc8, 0x54, 0x3a, 0x44, 0xee, 0x1b, 0x01,
+ 0x91, 0x53, 0x40, 0xad, 0xd6, 0xcf, 0x95, 0x6a, 0xd5, 0x0a, 0x69, 0x63, 0x9b, 0xad, 0x0b, 0xeb,
+ 0x08, 0x93, 0x9f, 0x94, 0xc1, 0x1c, 0x61, 0xcd, 0x80, 0x97, 0x9d, 0x4b, 0x82, 0xc6, 0xc8, 0x97,
+ 0x53, 0x1a, 0x8f, 0x6c, 0x09, 0x31, 0xbd, 0xd5, 0x8f, 0xa4, 0x30, 0x1e, 0x13, 0xc8, 0x3d, 0x92,
+ 0x46, 0x90, 0x03, 0x5d, 0xd3, 0xf6, 0x80, 0x1e, 0x6c, 0xe0, 0x08, 0xf2, 0xb1, 0x7c, 0x60, 0x0f,
+ 0x9c, 0xb3, 0xe0, 0x15, 0x6d, 0x2d, 0xc2, 0x84, 0x53, 0xdb, 0xdc, 0x50, 0xb5, 0x95, 0x06, 0xa9,
+ 0xed, 0x5f, 0xb2, 0x76, 0xc4, 0x12, 0x8f, 0xde, 0xad, 0xb1, 0xe2, 0x46, 0x9c, 0xc4, 0xaf, 0x16,
+ 0x04, 0x8a, 0x22, 0xf1, 0xd6, 0xd2, 0xb5, 0x60, 0x06, 0xff, 0xad, 0x9b, 0xbb, 0x90, 0xb6, 0xa1,
+ 0x28, 0x41, 0x3d, 0x0b, 0xe6, 0x48, 0xc6, 0xb6, 0x63, 0xa3, 0xfa, 0xe4, 0x71, 0x06, 0x2e, 0x0d,
+ 0x81, 0xd8, 0x76, 0xa1, 0xe9, 0x3b, 0x2e, 0xa6, 0x51, 0x20, 0x20, 0x32, 0x49, 0xea, 0xad, 0xe0,
+ 0x84, 0xe5, 0xe1, 0x56, 0xb5, 0xe1, 0x41, 0x97, 0x30, 0x7b, 0xba, 0x78, 0x7d, 0xee, 0xe6, 0x69,
+ 0xe3, 0xe0, 0x0b, 0xed, 0xab, 0x61, 0x9b, 0xd5, 0x39, 0x3d, 0x7b, 0x62, 0x9a, 0x8a, 0xa7, 0xd3,
+ 0xb2, 0xcb, 0xa3, 0xf5, 0xa0, 0xa4, 0xdf, 0xdc, 0x44, 0xba, 0xb1, 0x8c, 0x17, 0x06, 0x20, 0x6d,
+ 0xc5, 0x28, 0x15, 0xe5, 0x2d, 0x37, 0xea, 0x2d, 0xbd, 0xde, 0x52, 0xb6, 0x06, 0xea, 0xdf, 0xb6,
+ 0xf6, 0xba, 0x3c, 0xc8, 0xdf, 0xe7, 0x58, 0xb6, 0xf6, 0x50, 0x8e, 0x53, 0x20, 0x1b, 0xfa, 0x57,
+ 0x1c, 0xf7, 0x52, 0xd8, 0xac, 0xa3, 0x84, 0x64, 0x24, 0x23, 0xc5, 0x93, 0x87, 0x2a, 0x5e, 0x7e,
+ 0x90, 0xe2, 0xfd, 0x04, 0xab, 0x78, 0x77, 0xf3, 0x8a, 0x77, 0xd3, 0x00, 0xf9, 0x23, 0xe6, 0x63,
+ 0xba, 0x8b, 0x4f, 0x86, 0xdd, 0xc5, 0xbd, 0x1c, 0x8c, 0x8f, 0x17, 0x23, 0x93, 0x0e, 0xc0, 0x2f,
+ 0x65, 0xda, 0x4d, 0x0c, 0x82, 0x7a, 0x3b, 0x06, 0xea, 0x9d, 0x01, 0x3d, 0x88, 0x75, 0xb0, 0xa3,
+ 0x79, 0xe0, 0x60, 0xa7, 0x72, 0x49, 0xbd, 0x1a, 0x9c, 0xa8, 0x54, 0x97, 0x97, 0x75, 0x43, 0xaf,
+ 0xb7, 0x36, 0xeb, 0x7a, 0xeb, 0x7c, 0xc3, 0xb8, 0x5f, 0xe9, 0x6a, 0x0f, 0xcb, 0x00, 0x20, 0x09,
+ 0x95, 0x4d, 0xbb, 0x0d, 0xbb, 0x62, 0xfd, 0xff, 0xff, 0x2d, 0xa5, 0xeb, 0x41, 0x22, 0xfa, 0x31,
+ 0x70, 0xbe, 0x52, 0x12, 0x6f, 0x95, 0xb1, 0xc4, 0xd2, 0x81, 0xfa, 0xe6, 0x47, 0xc2, 0xec, 0xe1,
+ 0x2a, 0x70, 0x3c, 0xa0, 0x47, 0xb3, 0x0f, 0x5e, 0x34, 0x78, 0x7b, 0x1e, 0x2c, 0x50, 0x58, 0x82,
+ 0x55, 0xa0, 0x17, 0x08, 0x4d, 0x57, 0x35, 0x30, 0x4d, 0x17, 0x7d, 0x82, 0xc1, 0x20, 0x7c, 0x56,
+ 0x57, 0xc0, 0x6c, 0x0f, 0xba, 0xbb, 0x96, 0xe7, 0x59, 0x8e, 0x4d, 0x96, 0x73, 0x17, 0xee, 0x78,
+ 0x6c, 0x28, 0x71, 0xbc, 0xf2, 0xbd, 0xb8, 0x6e, 0xba, 0xbe, 0xd5, 0xb6, 0x7a, 0xa6, 0xed, 0xaf,
+ 0x47, 0x99, 0x0d, 0xf6, 0x4b, 0x64, 0xd8, 0xa5, 0x32, 0xd0, 0xf8, 0x9a, 0xc4, 0xa8, 0xc4, 0xaf,
+ 0xa4, 0x98, 0x54, 0x26, 0x12, 0x4c, 0xa7, 0x16, 0x9f, 0xc8, 0x54, 0x2d, 0x06, 0xe0, 0xbd, 0xad,
+ 0x5e, 0x03, 0xae, 0xae, 0xd6, 0xcb, 0x0d, 0xc3, 0xd0, 0xcb, 0xad, 0xcd, 0x75, 0xdd, 0x58, 0xab,
+ 0x36, 0x9b, 0xd5, 0x46, 0xbd, 0x79, 0x98, 0xd6, 0xae, 0x7d, 0x5a, 0x0e, 0x35, 0xa6, 0x02, 0xdb,
+ 0x5d, 0xcb, 0x86, 0xda, 0xbd, 0x87, 0x54, 0x18, 0x7e, 0xcd, 0x50, 0x1c, 0x67, 0x5a, 0x7e, 0x0c,
+ 0xce, 0xaf, 0x4d, 0x8f, 0xf3, 0x60, 0x82, 0xff, 0x89, 0x9b, 0xff, 0x97, 0x65, 0x70, 0x82, 0x69,
+ 0x88, 0x06, 0xdc, 0x1d, 0xdb, 0x3a, 0xf0, 0x0f, 0xb2, 0x6d, 0xb7, 0xca, 0x63, 0x3a, 0xc8, 0xf6,
+ 0x3e, 0xc0, 0x46, 0x0c, 0xac, 0x6f, 0x0e, 0x61, 0xad, 0x71, 0xb0, 0x3e, 0x75, 0x04, 0x9a, 0xe9,
+ 0x90, 0x7d, 0x47, 0xa6, 0xc8, 0x5e, 0x03, 0xae, 0x5e, 0x2f, 0x19, 0xad, 0x6a, 0xb9, 0xba, 0x5e,
+ 0x42, 0xe3, 0x28, 0x33, 0x64, 0xc7, 0x18, 0xf7, 0x3c, 0xe8, 0x03, 0xf1, 0xfd, 0x48, 0x1e, 0x5c,
+ 0x3b, 0xb8, 0xa3, 0x2d, 0xef, 0x98, 0xf6, 0x36, 0xd4, 0x2c, 0x11, 0xa8, 0x2b, 0x60, 0xaa, 0x8d,
+ 0xb3, 0x13, 0x9c, 0xd9, 0x8d, 0xbf, 0x84, 0xbe, 0x9c, 0x94, 0x60, 0x04, 0x9f, 0x6a, 0xef, 0x66,
+ 0x15, 0xa2, 0xc5, 0x2b, 0xc4, 0xd3, 0x93, 0xc1, 0x3b, 0xc0, 0x77, 0x8c, 0x6e, 0x7c, 0x2e, 0xd4,
+ 0x8d, 0xf3, 0x9c, 0x6e, 0x94, 0x0f, 0x47, 0x3e, 0x9d, 0x9a, 0xfc, 0xe6, 0x23, 0xa1, 0x03, 0x88,
+ 0xd5, 0x26, 0x2b, 0x7e, 0x54, 0x18, 0xd8, 0xdd, 0xbf, 0x5a, 0x06, 0xc5, 0x0a, 0xec, 0x42, 0x5f,
+ 0x70, 0x06, 0xff, 0xf7, 0x92, 0xe8, 0x76, 0x1a, 0x81, 0x81, 0xd0, 0x8e, 0x5f, 0x4b, 0xf1, 0xad,
+ 0x5d, 0xe8, 0xf9, 0xe6, 0x6e, 0x0f, 0x8b, 0x5a, 0x36, 0xa2, 0x04, 0xed, 0x87, 0x24, 0x91, 0xcd,
+ 0xb6, 0x84, 0x62, 0xfe, 0x73, 0xac, 0x0a, 0x7f, 0x5e, 0x02, 0xd3, 0x4d, 0xe8, 0x37, 0xdc, 0x0e,
+ 0x74, 0xb5, 0x66, 0x84, 0xd1, 0xf5, 0x60, 0x16, 0x83, 0x82, 0xa6, 0x99, 0x21, 0x4e, 0x6c, 0x92,
+ 0x7a, 0x13, 0x58, 0x08, 0x1f, 0xf1, 0xe7, 0xb4, 0x1b, 0xef, 0x4b, 0xd5, 0xbe, 0x96, 0x13, 0xf5,
+ 0x01, 0xa0, 0x8b, 0xbe, 0x94, 0x9b, 0x98, 0x56, 0x2a, 0xb6, 0x9f, 0x9f, 0x48, 0x2a, 0xfb, 0x6d,
+ 0xd2, 0x77, 0x4a, 0x00, 0x6c, 0xd8, 0x5e, 0x20, 0xd7, 0xc7, 0xa7, 0x90, 0xab, 0xf6, 0x4f, 0xb9,
+ 0x74, 0xb3, 0x98, 0xa8, 0x9c, 0x18, 0x89, 0xfd, 0x42, 0x8a, 0xb5, 0x85, 0x58, 0x62, 0x13, 0xd8,
+ 0x5a, 0x3e, 0x0e, 0x8a, 0xe7, 0xcd, 0x6e, 0x17, 0xfa, 0xda, 0xab, 0x64, 0x50, 0x2c, 0xbb, 0xd0,
+ 0xf4, 0xa1, 0x06, 0x23, 0xd1, 0x69, 0x60, 0xda, 0x75, 0x1c, 0x7f, 0xdd, 0xf4, 0x77, 0xa8, 0xdc,
+ 0xc2, 0x67, 0xf5, 0xa9, 0xe0, 0x51, 0x5b, 0x7b, 0xdd, 0xae, 0x0f, 0x1f, 0xf4, 0xd7, 0x5d, 0x6b,
+ 0xd7, 0x74, 0xf7, 0x6b, 0xa6, 0xbd, 0xbd, 0x67, 0x6e, 0x43, 0xca, 0x5e, 0xdc, 0x6b, 0xea, 0xa8,
+ 0xf2, 0x4b, 0x6c, 0xc7, 0x73, 0x2f, 0x2f, 0xf4, 0xef, 0xe4, 0xe4, 0x44, 0x58, 0x5c, 0x24, 0xec,
+ 0xc5, 0xf4, 0x3c, 0x1a, 0x98, 0xde, 0xb5, 0xe1, 0xae, 0x63, 0x5b, 0xed, 0xc0, 0x5a, 0x0d, 0x9e,
+ 0xb5, 0x8f, 0x86, 0x68, 0x2c, 0x71, 0x68, 0x2c, 0x0a, 0x97, 0x92, 0x0e, 0x8a, 0xe6, 0x08, 0xfd,
+ 0xce, 0x75, 0xe0, 0xd1, 0xa4, 0x1b, 0xd9, 0x6c, 0x35, 0x36, 0xcb, 0x86, 0x5e, 0x6a, 0xe9, 0x9b,
+ 0xb5, 0x46, 0xb9, 0x54, 0xdb, 0x34, 0xf4, 0xf5, 0x86, 0x02, 0xd1, 0xec, 0x7c, 0xca, 0x80, 0x6d,
+ 0xe7, 0x32, 0x74, 0xb5, 0xe7, 0xe6, 0xc4, 0x20, 0x4a, 0x10, 0x4a, 0x12, 0x7c, 0xb2, 0x08, 0x7c,
+ 0x3f, 0x21, 0xec, 0x67, 0x44, 0x05, 0x4b, 0x99, 0x8f, 0x69, 0x31, 0x1f, 0x13, 0xea, 0x63, 0x12,
+ 0x49, 0x3d, 0x02, 0x40, 0xfa, 0x47, 0x09, 0x4c, 0x95, 0x1d, 0xfb, 0x32, 0x74, 0x7d, 0x76, 0x92,
+ 0xc5, 0xe2, 0x90, 0xeb, 0xc3, 0xe1, 0x34, 0x98, 0x82, 0xb6, 0xef, 0x3a, 0xbd, 0x60, 0x96, 0x15,
+ 0x3c, 0x6a, 0x6f, 0x4c, 0x2b, 0x61, 0x5a, 0x72, 0xfc, 0xda, 0xec, 0xe0, 0x82, 0x38, 0xf6, 0xe4,
+ 0xbe, 0xb6, 0xf3, 0x70, 0x1a, 0x5c, 0x06, 0x33, 0x90, 0x7d, 0x3f, 0xf6, 0x15, 0x19, 0xcc, 0x93,
+ 0x76, 0xdb, 0x84, 0xd8, 0x2c, 0xd4, 0x1a, 0xec, 0x3a, 0x67, 0x9f, 0xf0, 0x57, 0x8f, 0x71, 0xe2,
+ 0x2f, 0x9a, 0xbd, 0x5e, 0xb8, 0x42, 0xbe, 0x7a, 0xcc, 0xa0, 0xcf, 0x44, 0xcd, 0x97, 0x8a, 0x20,
+ 0x6f, 0xee, 0xf9, 0x3b, 0xda, 0xb7, 0x84, 0x67, 0xbc, 0x5c, 0x3f, 0x42, 0xf9, 0x89, 0x81, 0xe4,
+ 0x24, 0x28, 0xf8, 0xce, 0x25, 0x18, 0xc8, 0x81, 0x3c, 0x20, 0x38, 0xcc, 0x5e, 0xaf, 0x85, 0x5f,
+ 0x50, 0x38, 0x82, 0x67, 0x64, 0x60, 0x99, 0xed, 0xb6, 0xb3, 0x67, 0xfb, 0xd5, 0x60, 0x95, 0x3c,
+ 0x4a, 0xd0, 0xbe, 0x20, 0xb4, 0x0d, 0x25, 0xc0, 0x60, 0x3a, 0xc8, 0x2e, 0x8e, 0xd0, 0x94, 0x16,
+ 0xc1, 0x2d, 0xa5, 0xf5, 0xf5, 0xcd, 0x56, 0xe3, 0x7e, 0xbd, 0x1e, 0x59, 0xbb, 0x9b, 0xd5, 0xfa,
+ 0x66, 0x6b, 0x55, 0xdf, 0x2c, 0x6f, 0x18, 0x78, 0x71, 0xb2, 0x54, 0x2e, 0x37, 0x36, 0xea, 0x2d,
+ 0x05, 0x6a, 0x6f, 0x95, 0xc0, 0x5c, 0xb9, 0xeb, 0x78, 0x21, 0xc2, 0xd7, 0x45, 0x08, 0x87, 0x62,
+ 0xcc, 0x31, 0x62, 0xd4, 0xfe, 0x35, 0x27, 0xea, 0x27, 0x13, 0x08, 0x84, 0x21, 0x1f, 0xd3, 0x4b,
+ 0xbd, 0x51, 0xc8, 0x4f, 0x66, 0x38, 0xbd, 0xec, 0x9b, 0xc4, 0x67, 0x96, 0xc1, 0x54, 0x89, 0x28,
+ 0x86, 0xf6, 0x27, 0x39, 0x50, 0x2c, 0x3b, 0xf6, 0x96, 0xb5, 0x8d, 0x2c, 0x48, 0x68, 0x9b, 0x17,
+ 0xbb, 0xb0, 0x62, 0xfa, 0xe6, 0x65, 0x0b, 0x5e, 0xc1, 0x15, 0x98, 0x36, 0xfa, 0x52, 0x11, 0x53,
+ 0x34, 0x05, 0x5e, 0xdc, 0xdb, 0xc6, 0x4c, 0x4d, 0x1b, 0x6c, 0x12, 0x1a, 0x3f, 0xc8, 0xe3, 0xba,
+ 0x0b, 0x5d, 0xd8, 0x85, 0xa6, 0x07, 0xd1, 0x5c, 0xcc, 0x86, 0x5d, 0xac, 0xb4, 0xd3, 0x46, 0xdc,
+ 0x6b, 0xf5, 0x2c, 0x98, 0x23, 0xaf, 0xb0, 0xfd, 0xe3, 0x61, 0x35, 0x9e, 0x36, 0xb8, 0x34, 0xf5,
+ 0x09, 0xa0, 0x00, 0x1f, 0xf4, 0x5d, 0xf3, 0x74, 0x07, 0xe3, 0xf5, 0xa8, 0x45, 0xe2, 0x28, 0xbb,
+ 0x18, 0x38, 0xca, 0x2e, 0x36, 0xb1, 0x1b, 0xad, 0x41, 0x72, 0x69, 0xff, 0x7b, 0x3a, 0xb4, 0x5e,
+ 0x3e, 0x2f, 0x47, 0x8a, 0xa1, 0x82, 0xbc, 0x6d, 0xee, 0x42, 0xaa, 0x17, 0xf8, 0xbf, 0x7a, 0x0b,
+ 0x38, 0x6e, 0x5e, 0x36, 0x7d, 0xd3, 0xad, 0x39, 0x6d, 0xb3, 0x8b, 0x87, 0xcd, 0xa0, 0xe5, 0xf7,
+ 0xbf, 0xc0, 0x9b, 0x56, 0xbe, 0xe3, 0x42, 0x9c, 0x2b, 0xd8, 0xb4, 0x0a, 0x12, 0x10, 0x75, 0xab,
+ 0xed, 0xd8, 0x98, 0x7f, 0xd9, 0xc0, 0xff, 0x91, 0x54, 0x3a, 0x96, 0x87, 0x2a, 0x82, 0xa9, 0xd4,
+ 0xc9, 0x7e, 0x4a, 0x73, 0xdf, 0x6e, 0xe3, 0x0d, 0xab, 0x69, 0x23, 0xee, 0xb5, 0xba, 0x04, 0x66,
+ 0xe9, 0xee, 0xcb, 0x1a, 0xd2, 0xab, 0x22, 0xd6, 0xab, 0xeb, 0x79, 0x37, 0x44, 0x82, 0xe7, 0x62,
+ 0x3d, 0xca, 0x67, 0xb0, 0x1f, 0xa9, 0xcf, 0x00, 0x8f, 0xa6, 0x8f, 0xe5, 0x3d, 0xcf, 0x77, 0x76,
+ 0x09, 0xe8, 0xcb, 0x56, 0x97, 0xd4, 0x60, 0x0a, 0xd7, 0x20, 0x29, 0x8b, 0x7a, 0x07, 0x38, 0xd9,
+ 0x73, 0xe1, 0x16, 0x74, 0x2f, 0x98, 0xbb, 0x7b, 0x0f, 0xb6, 0x5c, 0xd3, 0xf6, 0x7a, 0x8e, 0xeb,
+ 0x9f, 0x9e, 0xc6, 0xcc, 0x0f, 0x7c, 0xa7, 0xde, 0x0a, 0x4e, 0x3c, 0xe0, 0x39, 0x76, 0xa9, 0x67,
+ 0xd5, 0x2c, 0xcf, 0x87, 0x76, 0xa9, 0xd3, 0x71, 0x4f, 0xcf, 0xe0, 0xb2, 0x0e, 0xbe, 0x50, 0x6f,
+ 0x04, 0xf3, 0x0f, 0x38, 0x96, 0xdd, 0xf4, 0x5d, 0x68, 0xee, 0x6e, 0xb8, 0xdd, 0xd3, 0x80, 0x6c,
+ 0x10, 0x71, 0x89, 0xb4, 0xf3, 0x9d, 0x06, 0x45, 0x02, 0x89, 0xf6, 0x92, 0x82, 0xb0, 0x57, 0x33,
+ 0x15, 0x52, 0xa2, 0xb5, 0x78, 0x3b, 0x98, 0xa2, 0xbd, 0x26, 0x06, 0x7f, 0xf6, 0x8e, 0x53, 0x7d,
+ 0x0b, 0x24, 0x94, 0x8a, 0x11, 0x64, 0x53, 0x9f, 0x04, 0x8a, 0x6d, 0x2c, 0x2a, 0xac, 0x07, 0xb3,
+ 0x77, 0x3c, 0x7a, 0x70, 0xa1, 0x38, 0x8b, 0x41, 0xb3, 0x6a, 0x5f, 0x94, 0x85, 0x1c, 0xa1, 0x93,
+ 0x38, 0x4e, 0xd7, 0x53, 0x7c, 0x55, 0x1a, 0xa1, 0x2b, 0xbe, 0x15, 0xdc, 0x4c, 0xfb, 0x59, 0x6a,
+ 0xd3, 0x54, 0x36, 0x97, 0x36, 0x82, 0x59, 0x2d, 0xb2, 0x74, 0x9a, 0xad, 0x92, 0xd1, 0xda, 0xac,
+ 0x37, 0x2a, 0x68, 0x36, 0x7c, 0x0b, 0xb8, 0x69, 0x48, 0x6e, 0xbd, 0xb5, 0x59, 0x2f, 0xad, 0xe9,
+ 0xca, 0x16, 0x6f, 0x2f, 0x35, 0x5b, 0x8d, 0xf5, 0x4d, 0x63, 0xa3, 0x5e, 0xaf, 0xd6, 0x57, 0x08,
+ 0x31, 0x64, 0xa0, 0x9e, 0x8a, 0x32, 0x9c, 0x37, 0xaa, 0x2d, 0x7d, 0xb3, 0xdc, 0xa8, 0x2f, 0x57,
+ 0x57, 0x14, 0x6b, 0x98, 0xb1, 0xf5, 0x80, 0x7a, 0x3d, 0xb8, 0x96, 0xe3, 0xa4, 0xda, 0xa8, 0xa3,
+ 0x29, 0x7a, 0xb9, 0x54, 0x2f, 0xeb, 0x68, 0x3e, 0x7e, 0x49, 0xd5, 0xc0, 0xd5, 0x84, 0xdc, 0xe6,
+ 0x72, 0xb5, 0xc6, 0xee, 0xaa, 0x7d, 0x2a, 0xa7, 0x9e, 0x06, 0x57, 0xb1, 0xef, 0xa8, 0x4f, 0x84,
+ 0xf2, 0x1b, 0x39, 0xf5, 0x46, 0x70, 0x1d, 0xf7, 0x15, 0xd9, 0x20, 0xdb, 0xac, 0x56, 0x36, 0xd7,
+ 0xaa, 0xcd, 0xb5, 0x52, 0xab, 0xbc, 0xaa, 0x7c, 0x1a, 0x4f, 0x5f, 0x42, 0x7b, 0x9c, 0xf1, 0x4e,
+ 0x7e, 0x19, 0x6b, 0x27, 0x94, 0x78, 0x45, 0x7d, 0xfc, 0x40, 0xd8, 0x93, 0xed, 0xe2, 0x4f, 0x84,
+ 0x23, 0x4e, 0x85, 0x53, 0xa1, 0xdb, 0x53, 0xd0, 0x4a, 0xa7, 0x43, 0xad, 0x11, 0x54, 0xe8, 0x7a,
+ 0x70, 0x6d, 0x5d, 0x27, 0x48, 0x19, 0x7a, 0xb9, 0x71, 0x4e, 0x37, 0x36, 0xcf, 0x97, 0x6a, 0x35,
+ 0xbd, 0xb5, 0xb9, 0x5c, 0x35, 0x9a, 0x2d, 0x65, 0x4b, 0xfb, 0x27, 0x29, 0x5c, 0x96, 0x62, 0xa4,
+ 0xf5, 0x27, 0x52, 0xda, 0x66, 0x9d, 0xb8, 0xfc, 0xf4, 0x5d, 0xa0, 0xe8, 0xf9, 0xa6, 0xbf, 0xe7,
+ 0xd1, 0x56, 0xfd, 0x98, 0xc1, 0xad, 0x7a, 0xb1, 0x89, 0x33, 0x19, 0x34, 0xb3, 0xf6, 0xc5, 0x5c,
+ 0x9a, 0x66, 0x3a, 0x86, 0x95, 0x29, 0x6b, 0x04, 0x11, 0x9f, 0x01, 0x5a, 0xa0, 0xed, 0xd5, 0xe6,
+ 0x66, 0xa9, 0x66, 0xe8, 0xa5, 0xca, 0x85, 0x70, 0x3d, 0x0a, 0xaa, 0x57, 0x83, 0x13, 0x1b, 0xf5,
+ 0xd2, 0x52, 0x4d, 0xc7, 0xcd, 0xa5, 0x51, 0xaf, 0xeb, 0x65, 0x24, 0xf7, 0x1f, 0xc2, 0xbb, 0x3f,
+ 0xc8, 0x2a, 0xc7, 0x7c, 0x23, 0xcb, 0x89, 0x91, 0xff, 0x5f, 0x09, 0xbb, 0xb9, 0x45, 0x1a, 0xc6,
+ 0xd2, 0x1a, 0x2f, 0x0e, 0x5f, 0x10, 0xf2, 0x6c, 0x13, 0xe2, 0x24, 0x1d, 0x1e, 0xdf, 0x37, 0x02,
+ 0x1e, 0x57, 0x83, 0x13, 0x2c, 0x1e, 0xd8, 0xc3, 0x2d, 0x1e, 0x86, 0x3f, 0x96, 0xc1, 0xd4, 0x9a,
+ 0xb5, 0x8d, 0xdd, 0x8b, 0xf7, 0x22, 0x03, 0x65, 0x01, 0x48, 0xa1, 0xf7, 0x8e, 0x64, 0x75, 0xb8,
+ 0xc9, 0xbc, 0x24, 0xbe, 0xde, 0x22, 0x34, 0x61, 0xff, 0x62, 0xea, 0x9e, 0x89, 0x32, 0x1c, 0xd3,
+ 0x33, 0xbd, 0x50, 0x4a, 0xd3, 0x33, 0x0d, 0xa6, 0x95, 0x0a, 0x26, 0x64, 0x3a, 0xb8, 0xf0, 0xd9,
+ 0x7b, 0x96, 0x0b, 0x3b, 0xd8, 0x4c, 0xc4, 0xf5, 0x96, 0x0d, 0x3e, 0xf1, 0xac, 0x7b, 0x38, 0x30,
+ 0x59, 0x2f, 0x9b, 0x39, 0x30, 0x1d, 0x8e, 0x26, 0x78, 0xc3, 0x07, 0xbd, 0xd4, 0xeb, 0x8d, 0x8d,
+ 0x95, 0xd5, 0xcd, 0x65, 0x43, 0xd7, 0xe9, 0x12, 0xf1, 0xb6, 0xf6, 0x2e, 0x09, 0xcc, 0xd3, 0x1a,
+ 0x52, 0xef, 0x89, 0xeb, 0x62, 0x41, 0xa6, 0x70, 0xfc, 0x07, 0x3b, 0x3d, 0x59, 0xe1, 0xe1, 0x78,
+ 0x62, 0x92, 0x08, 0x13, 0xdd, 0x27, 0xde, 0x14, 0x36, 0xa1, 0xfb, 0x38, 0x50, 0x9e, 0x92, 0x9a,
+ 0x62, 0xf6, 0x53, 0x94, 0x97, 0x00, 0x50, 0x6c, 0xc2, 0x2e, 0x6c, 0xfb, 0xda, 0x87, 0xe4, 0x91,
+ 0xdb, 0x44, 0x9c, 0xb9, 0x2d, 0xa7, 0x32, 0xb7, 0xf3, 0x19, 0x98, 0xdb, 0x85, 0xd1, 0xcd, 0xed,
+ 0x62, 0x5a, 0x73, 0x7b, 0x2a, 0xce, 0xdc, 0x4e, 0xe8, 0x35, 0xa6, 0x13, 0x7b, 0x8d, 0x3e, 0x43,
+ 0xdd, 0xa8, 0x51, 0x93, 0x9e, 0x4f, 0xa4, 0xca, 0xfc, 0xf1, 0x62, 0xda, 0x71, 0x9c, 0x00, 0x7f,
+ 0xb4, 0xe6, 0xf9, 0x8f, 0x15, 0xd2, 0x8c, 0xfb, 0x03, 0x39, 0x4e, 0xd7, 0x4a, 0x5e, 0x99, 0xcf,
+ 0x60, 0xd1, 0x51, 0xbd, 0x01, 0x5c, 0x17, 0x3d, 0x6f, 0xea, 0xcf, 0xaa, 0x36, 0x5b, 0x4d, 0x6c,
+ 0x93, 0x97, 0x1b, 0x86, 0xb1, 0xb1, 0x4e, 0xb6, 0xab, 0x4e, 0x01, 0x35, 0xa2, 0x62, 0x6c, 0xd4,
+ 0x89, 0x05, 0xbe, 0xcd, 0x53, 0x5f, 0xae, 0xd6, 0x2b, 0x9b, 0xe1, 0xa8, 0x56, 0x5f, 0x6e, 0x28,
+ 0x3b, 0xea, 0x22, 0xb8, 0x85, 0xa1, 0x8e, 0x3b, 0x40, 0x52, 0x42, 0xa9, 0x5e, 0xd9, 0x5c, 0xab,
+ 0xeb, 0x6b, 0x8d, 0x7a, 0xb5, 0x8c, 0xd3, 0x9b, 0x7a, 0x4b, 0xb1, 0x90, 0x29, 0xd8, 0x67, 0xf3,
+ 0x37, 0xf5, 0x92, 0x51, 0x5e, 0xd5, 0x0d, 0x52, 0xe4, 0x03, 0xea, 0x4d, 0xe0, 0x6c, 0xa9, 0xde,
+ 0x68, 0xa1, 0x94, 0x52, 0xfd, 0x42, 0xeb, 0xc2, 0xba, 0xbe, 0xb9, 0x6e, 0x34, 0xca, 0x7a, 0xb3,
+ 0x89, 0x46, 0x52, 0x3a, 0x43, 0x50, 0xba, 0xea, 0xd3, 0xc1, 0x5d, 0x0c, 0x6b, 0x7a, 0x0b, 0xfb,
+ 0x46, 0xac, 0x35, 0xb0, 0x7b, 0x5c, 0x45, 0xdf, 0x5c, 0x2d, 0x35, 0x37, 0xab, 0xf5, 0x72, 0x63,
+ 0x6d, 0xbd, 0xd4, 0xaa, 0xa2, 0x01, 0x77, 0xdd, 0x68, 0xb4, 0x1a, 0x9b, 0xe7, 0x74, 0xa3, 0x59,
+ 0x6d, 0xd4, 0x15, 0x1b, 0x55, 0x99, 0x19, 0xa1, 0x03, 0x4b, 0xc9, 0x51, 0xaf, 0x05, 0xa7, 0x83,
+ 0xf4, 0x5a, 0x03, 0x09, 0x9a, 0x99, 0x33, 0xf4, 0x58, 0x3b, 0xab, 0xd9, 0x6a, 0x18, 0x64, 0xd6,
+ 0xb0, 0x56, 0x5d, 0x31, 0xd0, 0x54, 0x47, 0x79, 0x76, 0xa6, 0x73, 0x8a, 0x7f, 0x91, 0x40, 0xbe,
+ 0xe9, 0x3b, 0x3d, 0xed, 0x3b, 0xa3, 0xee, 0xf0, 0x0c, 0x00, 0x2e, 0x76, 0x85, 0xa8, 0x98, 0xbe,
+ 0x49, 0x57, 0x6b, 0x98, 0x14, 0xed, 0xd7, 0x85, 0xf7, 0x6f, 0x23, 0xab, 0xcb, 0xe9, 0xc5, 0x0c,
+ 0x1f, 0xdf, 0x14, 0x3b, 0x0e, 0x19, 0x4f, 0x28, 0x5d, 0x7b, 0xf8, 0x91, 0x51, 0x76, 0x68, 0x35,
+ 0x70, 0x8a, 0x81, 0x15, 0xc9, 0x3f, 0x50, 0x19, 0xa8, 0x3e, 0x0a, 0x5c, 0xd5, 0xa7, 0x7c, 0x58,
+ 0xe7, 0xb6, 0xd4, 0xef, 0x00, 0x8f, 0x61, 0xd4, 0x5f, 0x5f, 0x6b, 0x9c, 0xd3, 0x43, 0x45, 0xaf,
+ 0x94, 0x5a, 0x25, 0x65, 0x5b, 0xfb, 0xbc, 0x0c, 0xf2, 0x6b, 0xce, 0xe5, 0xfe, 0x6d, 0x73, 0x1b,
+ 0x5e, 0x61, 0xf6, 0x56, 0x82, 0x47, 0xfe, 0x08, 0x96, 0x90, 0xd8, 0xd7, 0xe2, 0x5d, 0x64, 0xbe,
+ 0x20, 0xa5, 0x11, 0xfb, 0xda, 0x61, 0xfd, 0x62, 0xfe, 0x66, 0x14, 0xb1, 0xc7, 0x88, 0x16, 0xaa,
+ 0x67, 0xc1, 0x99, 0xe8, 0x45, 0xb5, 0xa2, 0xd7, 0x5b, 0xd5, 0xe5, 0x0b, 0x91, 0x70, 0xab, 0x86,
+ 0x90, 0xf8, 0x87, 0x75, 0x73, 0xc9, 0x6b, 0x05, 0xa7, 0xc1, 0xc9, 0xe8, 0xdd, 0x8a, 0xde, 0x0a,
+ 0xde, 0x3c, 0xa0, 0x3d, 0x54, 0x00, 0x73, 0xa4, 0xdb, 0xdf, 0xe8, 0x75, 0x90, 0xf5, 0xfd, 0xa4,
+ 0x08, 0xdd, 0x9b, 0xc1, 0xf1, 0xea, 0xfa, 0x72, 0xb3, 0xe9, 0x3b, 0xae, 0xb9, 0x0d, 0xf1, 0x38,
+ 0x4a, 0xa4, 0xd5, 0x9f, 0xac, 0xbd, 0x57, 0x78, 0xf5, 0x9f, 0x1f, 0x6a, 0x48, 0x99, 0x31, 0xa8,
+ 0x7f, 0x45, 0x68, 0xb5, 0x5e, 0x80, 0x60, 0x3a, 0xf4, 0x1f, 0x18, 0x73, 0x9b, 0x8b, 0xc7, 0x65,
+ 0xeb, 0xec, 0xf3, 0x25, 0x30, 0xd3, 0xb2, 0x76, 0xe1, 0x73, 0x1c, 0x1b, 0x7a, 0xea, 0x14, 0x90,
+ 0x57, 0xd6, 0x5a, 0xca, 0x31, 0xf4, 0x07, 0x4d, 0x8b, 0x72, 0xf8, 0x8f, 0x8e, 0x0a, 0x40, 0x7f,
+ 0x4a, 0x2d, 0x45, 0x46, 0x7f, 0xd6, 0xf4, 0x96, 0x92, 0x47, 0x7f, 0xea, 0x7a, 0x4b, 0x29, 0xa0,
+ 0x3f, 0xeb, 0xb5, 0x96, 0x52, 0x44, 0x7f, 0xaa, 0xcd, 0x96, 0x32, 0x85, 0xfe, 0x2c, 0x35, 0x5b,
+ 0xca, 0x34, 0xfa, 0x73, 0xae, 0xd9, 0x52, 0x66, 0xd0, 0x9f, 0x72, 0xab, 0xa5, 0x00, 0xf4, 0xe7,
+ 0xbe, 0x66, 0x4b, 0x99, 0x45, 0x7f, 0x4a, 0xe5, 0x96, 0x32, 0x87, 0xff, 0xe8, 0x2d, 0x65, 0x1e,
+ 0xfd, 0x69, 0x36, 0x5b, 0xca, 0x02, 0xa6, 0xdc, 0x6c, 0x29, 0xc7, 0x71, 0x59, 0xd5, 0x96, 0xa2,
+ 0xa0, 0x3f, 0xab, 0xcd, 0x96, 0x72, 0x02, 0x67, 0x6e, 0xb6, 0x14, 0x15, 0x17, 0xda, 0x6c, 0x29,
+ 0x57, 0xe1, 0x3c, 0xcd, 0x96, 0x72, 0x12, 0x17, 0xd1, 0x6c, 0x29, 0x57, 0x63, 0x36, 0xf4, 0x96,
+ 0x72, 0x0a, 0xe7, 0x31, 0x5a, 0xca, 0xa3, 0xf0, 0xab, 0x7a, 0x4b, 0x39, 0x8d, 0x19, 0xd3, 0x5b,
+ 0xca, 0x35, 0xf8, 0x8f, 0xd1, 0x52, 0x34, 0xfc, 0xaa, 0xd4, 0x52, 0x1e, 0xad, 0x3d, 0x06, 0xcc,
+ 0xac, 0x40, 0x9f, 0x80, 0xa8, 0x29, 0x40, 0x5e, 0x81, 0x3e, 0x3b, 0x11, 0x7f, 0x55, 0x1e, 0x3c,
+ 0x8a, 0x2e, 0xde, 0x2c, 0xbb, 0xce, 0x6e, 0x0d, 0x6e, 0x9b, 0xed, 0x7d, 0xfd, 0x41, 0x64, 0xf0,
+ 0x69, 0x2f, 0xce, 0x71, 0x2b, 0xda, 0xbd, 0xa8, 0x37, 0xc2, 0xff, 0x13, 0x0d, 0xe4, 0x60, 0x8d,
+ 0x5a, 0xe6, 0xd7, 0xa8, 0xe3, 0x4c, 0xc2, 0xbc, 0xc8, 0x44, 0xf2, 0x1f, 0xd8, 0xc6, 0xc0, 0x6d,
+ 0x48, 0xe5, 0xfa, 0x36, 0xa4, 0x50, 0x0b, 0xeb, 0x41, 0xd7, 0x73, 0x6c, 0xb3, 0xdb, 0xa4, 0xee,
+ 0x47, 0x64, 0xae, 0xda, 0x9f, 0xac, 0x3e, 0x33, 0x68, 0x54, 0xc4, 0xe0, 0x7b, 0x5a, 0xd2, 0xf2,
+ 0x56, 0xbf, 0x84, 0x62, 0xda, 0xd7, 0xa7, 0xc3, 0xf6, 0xd5, 0xe2, 0xda, 0xd7, 0x33, 0x0e, 0x41,
+ 0x3b, 0x5d, 0x53, 0xab, 0x8e, 0x36, 0x15, 0x8d, 0x9c, 0xf3, 0x83, 0xfd, 0x2f, 0x59, 0xfb, 0xbc,
+ 0x04, 0x4e, 0xe9, 0xf6, 0xa0, 0xa9, 0x0c, 0xab, 0x46, 0x6f, 0x65, 0xa1, 0x59, 0xe7, 0x45, 0x7a,
+ 0xd7, 0xc0, 0x6a, 0x0f, 0xa6, 0x19, 0x23, 0xd1, 0xcf, 0x86, 0x12, 0x6d, 0x72, 0x12, 0xbd, 0x77,
+ 0x74, 0xd2, 0xe9, 0x04, 0x5a, 0x1f, 0x6b, 0xdf, 0x95, 0xd7, 0xfe, 0x42, 0x02, 0x27, 0x88, 0x07,
+ 0xe1, 0x7d, 0x64, 0xe6, 0x84, 0x7b, 0x7b, 0xde, 0xfa, 0xea, 0x46, 0xb3, 0x2c, 0xa2, 0xdf, 0x4c,
+ 0x8a, 0xf6, 0x3a, 0x56, 0xe0, 0xf7, 0xf3, 0x02, 0x8f, 0xe9, 0xc7, 0xfb, 0x8b, 0x8b, 0x91, 0xf5,
+ 0x6f, 0x84, 0xb2, 0xae, 0x73, 0xb2, 0xbe, 0x6b, 0x24, 0xaa, 0x47, 0x2b, 0xe6, 0xaf, 0xe6, 0xc1,
+ 0x63, 0x08, 0x87, 0x54, 0x11, 0x48, 0x3f, 0x58, 0xb2, 0x3b, 0x06, 0xf4, 0x7c, 0xd3, 0xf5, 0xb9,
+ 0xd0, 0x2b, 0x7d, 0x53, 0xf3, 0x5c, 0x06, 0x53, 0x73, 0x69, 0xe8, 0xd4, 0x5c, 0x7b, 0x0f, 0x6b,
+ 0xe0, 0x9d, 0xe7, 0x91, 0x2d, 0x25, 0x60, 0x10, 0x53, 0xc3, 0xb8, 0x16, 0x15, 0x5a, 0x7e, 0xdf,
+ 0xc3, 0xa1, 0xbc, 0x7c, 0xe8, 0x12, 0xd2, 0x21, 0xfe, 0xeb, 0xe3, 0xb5, 0xc4, 0xf3, 0xec, 0x3b,
+ 0xde, 0x6c, 0x54, 0x3a, 0x99, 0x4e, 0xa1, 0x5e, 0x3a, 0x0d, 0x66, 0x70, 0x97, 0x53, 0xb3, 0xec,
+ 0x4b, 0xda, 0x9f, 0xcb, 0x60, 0xae, 0x0e, 0xaf, 0x94, 0x77, 0xcc, 0x6e, 0x17, 0xda, 0xdb, 0x50,
+ 0x7b, 0x80, 0xb3, 0xed, 0xcd, 0x5e, 0xaf, 0x1e, 0xed, 0x0f, 0x07, 0x8f, 0xea, 0xbd, 0xa0, 0xe0,
+ 0xb5, 0x9d, 0x30, 0xa8, 0xc3, 0x77, 0xc6, 0xac, 0x5e, 0x97, 0xf6, 0xfc, 0x9d, 0x45, 0x5c, 0x56,
+ 0xa9, 0x67, 0x35, 0xd1, 0x07, 0x06, 0xf9, 0x8e, 0x8e, 0x93, 0x7f, 0x35, 0xb0, 0x33, 0xce, 0x25,
+ 0x74, 0xc6, 0x21, 0xe3, 0x8b, 0x2c, 0xd3, 0x31, 0x8b, 0x24, 0xd7, 0x83, 0xd9, 0x76, 0x90, 0x25,
+ 0x3c, 0xa5, 0xc7, 0x26, 0x69, 0x7f, 0x99, 0xaa, 0xbb, 0x16, 0x2a, 0x3c, 0x9d, 0x56, 0xc1, 0x31,
+ 0x9b, 0x9a, 0x57, 0x83, 0x13, 0xad, 0x46, 0x63, 0x73, 0xad, 0x54, 0xbf, 0x10, 0xc5, 0x56, 0xd9,
+ 0xd2, 0x5e, 0x99, 0x07, 0x0b, 0x4d, 0xa7, 0x7b, 0x19, 0x46, 0x38, 0x57, 0x39, 0xf7, 0x4f, 0x56,
+ 0x4e, 0xb9, 0x03, 0x72, 0x52, 0x4f, 0x81, 0xa2, 0x69, 0x7b, 0x57, 0x60, 0x60, 0xfe, 0xd3, 0x27,
+ 0x0a, 0xe3, 0x47, 0xd8, 0x8e, 0xc0, 0xe0, 0x61, 0xbc, 0x7b, 0x88, 0x24, 0x79, 0xae, 0x62, 0x80,
+ 0x3c, 0x0b, 0xe6, 0x3c, 0xe2, 0x25, 0xd2, 0x62, 0x9c, 0x81, 0xb8, 0x34, 0xcc, 0x22, 0x71, 0x53,
+ 0x92, 0x29, 0x8b, 0xf8, 0x49, 0x7b, 0x38, 0xec, 0x3f, 0x36, 0x38, 0x88, 0x4b, 0x87, 0x61, 0x2c,
+ 0x1d, 0xc8, 0xaf, 0x1e, 0xf7, 0x24, 0xfe, 0x34, 0x38, 0x19, 0x9c, 0x50, 0x2f, 0xaf, 0x96, 0x6a,
+ 0x35, 0xbd, 0xbe, 0xa2, 0x6f, 0x56, 0x2b, 0x64, 0x3f, 0x39, 0x4a, 0x29, 0xb5, 0x5a, 0xfa, 0xda,
+ 0x7a, 0xab, 0xb9, 0xa9, 0x3f, 0xab, 0xac, 0xeb, 0x15, 0xec, 0x80, 0x8d, 0x4f, 0x50, 0x06, 0xae,
+ 0xf2, 0xa5, 0x7a, 0xf3, 0xbc, 0x6e, 0x28, 0x3b, 0x67, 0x4b, 0x60, 0x96, 0x19, 0x28, 0x10, 0x77,
+ 0x15, 0xb8, 0x65, 0xee, 0x75, 0xa9, 0x39, 0xae, 0x1c, 0x43, 0xdc, 0x61, 0xd9, 0x34, 0xec, 0xee,
+ 0xbe, 0x92, 0x53, 0x15, 0x30, 0xc7, 0x8e, 0x09, 0x8a, 0xa4, 0xbd, 0xf3, 0x5a, 0x30, 0x73, 0xde,
+ 0x71, 0x2f, 0x61, 0xaf, 0x61, 0xed, 0x03, 0x24, 0x06, 0x5b, 0x10, 0x51, 0x82, 0x31, 0xc0, 0x5e,
+ 0x2d, 0xee, 0x26, 0x16, 0x50, 0x5b, 0x1c, 0x1a, 0x35, 0xe2, 0x7a, 0x30, 0x7b, 0x25, 0xc8, 0x1d,
+ 0xb5, 0x74, 0x26, 0x49, 0xfb, 0x45, 0x31, 0xc7, 0xaf, 0xe1, 0x45, 0x66, 0xbf, 0xea, 0xff, 0x76,
+ 0x09, 0x14, 0x57, 0xa0, 0x5f, 0xea, 0x76, 0x59, 0xb9, 0xbd, 0x5c, 0xf8, 0x1c, 0x29, 0x57, 0x89,
+ 0x52, 0xb7, 0x1b, 0xdf, 0xa8, 0x18, 0x01, 0x05, 0xe7, 0x9d, 0xb8, 0x34, 0x41, 0x2f, 0xed, 0x21,
+ 0x05, 0x66, 0x2f, 0xb1, 0x8f, 0x46, 0xae, 0xd9, 0xaf, 0x67, 0xcc, 0xa4, 0x27, 0x46, 0xf1, 0xf7,
+ 0x72, 0xc9, 0x4e, 0x52, 0x41, 0x3e, 0xf5, 0x7e, 0x30, 0xb5, 0xe7, 0xc1, 0xb2, 0xe9, 0x05, 0x43,
+ 0x1b, 0x5f, 0xd3, 0xc6, 0xc5, 0x07, 0x60, 0xdb, 0x5f, 0xac, 0xee, 0xa2, 0x89, 0xcf, 0x06, 0xc9,
+ 0x18, 0xc6, 0x2b, 0xa2, 0xcf, 0x46, 0x40, 0x01, 0x4d, 0x3b, 0xaf, 0x58, 0xfe, 0x4e, 0x79, 0xc7,
+ 0xf4, 0xe9, 0x66, 0x4b, 0xf8, 0xac, 0xbd, 0x64, 0x04, 0x38, 0x13, 0x1d, 0x76, 0x62, 0x8f, 0xa3,
+ 0xa7, 0x06, 0x71, 0x0c, 0x5e, 0x36, 0xa3, 0x80, 0xf8, 0xb7, 0x12, 0xc8, 0x37, 0x7a, 0xd0, 0x16,
+ 0x3e, 0x7b, 0x19, 0xca, 0x56, 0xea, 0x93, 0xed, 0xc3, 0xe2, 0x6e, 0xc1, 0x61, 0xa5, 0x51, 0xc9,
+ 0x31, 0x92, 0xbd, 0x0d, 0xe4, 0x2d, 0x7b, 0xcb, 0xa1, 0x96, 0xed, 0xa3, 0x63, 0x6c, 0x9d, 0xaa,
+ 0xbd, 0xe5, 0x18, 0x38, 0xa3, 0xa8, 0x47, 0x70, 0x52, 0xd9, 0xd9, 0x8b, 0xfb, 0xef, 0xa6, 0x41,
+ 0x91, 0xa8, 0xb3, 0xf6, 0x32, 0x19, 0xc8, 0xa5, 0x4e, 0x27, 0x46, 0xf0, 0xd2, 0x01, 0xc1, 0x3b,
+ 0xf8, 0xb3, 0x10, 0x93, 0xf0, 0x99, 0x0f, 0xbc, 0x26, 0xd8, 0xb7, 0xd3, 0x26, 0x55, 0xea, 0x74,
+ 0xe2, 0xcf, 0x2d, 0x84, 0x05, 0x4a, 0x7c, 0x81, 0x6c, 0x0b, 0x97, 0xc5, 0x5a, 0x78, 0xea, 0x81,
+ 0x20, 0x96, 0xbf, 0xec, 0x21, 0xfa, 0x07, 0x09, 0x4c, 0xd5, 0x2c, 0xcf, 0x47, 0xd8, 0x94, 0x44,
+ 0xb0, 0xb9, 0x16, 0xcc, 0x04, 0xa2, 0x41, 0x5d, 0x1e, 0xea, 0xcf, 0xa3, 0x04, 0x7e, 0x26, 0x7e,
+ 0x1f, 0x8f, 0xce, 0x93, 0x93, 0x6b, 0x4f, 0xb9, 0x88, 0x3f, 0xd3, 0x16, 0x15, 0x2b, 0xf5, 0x17,
+ 0xfb, 0x4b, 0xa1, 0xc0, 0xd7, 0x38, 0x81, 0xdf, 0x39, 0x4a, 0x91, 0xd9, 0x0b, 0xfd, 0xf7, 0x25,
+ 0x00, 0x50, 0xd9, 0xf4, 0xe0, 0xf0, 0xe3, 0xb8, 0x70, 0x20, 0x09, 0xd2, 0x7d, 0x25, 0x2b, 0xdd,
+ 0x35, 0x5e, 0xba, 0xdf, 0x3d, 0xbc, 0xaa, 0x49, 0x07, 0x84, 0x55, 0x05, 0xc8, 0x56, 0x28, 0x5a,
+ 0xf4, 0x57, 0x7b, 0x7b, 0x28, 0xd4, 0x75, 0x4e, 0xa8, 0x77, 0x8f, 0x58, 0x52, 0xf6, 0x72, 0xfd,
+ 0x23, 0x09, 0x4c, 0x35, 0xa1, 0x8f, 0xba, 0x49, 0xed, 0x9c, 0x48, 0x0f, 0xcf, 0xb4, 0x6d, 0x49,
+ 0xb0, 0x6d, 0x7f, 0x23, 0x27, 0x1a, 0x18, 0x2e, 0x92, 0x0c, 0xe5, 0x29, 0x66, 0xf5, 0xe1, 0xf5,
+ 0x42, 0x81, 0xe1, 0x86, 0x51, 0xcb, 0x5e, 0xba, 0x6f, 0x95, 0x42, 0x4f, 0x11, 0xfe, 0x5c, 0x1f,
+ 0x6b, 0x16, 0xe7, 0x0e, 0x9a, 0xc5, 0xe2, 0xe7, 0xfa, 0xd8, 0x3a, 0xc6, 0x3b, 0x26, 0xa4, 0x36,
+ 0x36, 0xc6, 0xe0, 0x33, 0x30, 0x8a, 0xbc, 0x9e, 0x27, 0x83, 0x22, 0xdd, 0x3c, 0xb8, 0x37, 0x79,
+ 0xef, 0x60, 0xf8, 0xd4, 0xe2, 0xfd, 0x23, 0x98, 0x72, 0x49, 0xcb, 0xf2, 0x21, 0x1b, 0x12, 0xc3,
+ 0xc6, 0xad, 0xa0, 0x80, 0xa3, 0x66, 0xd3, 0x71, 0x2e, 0x72, 0xf7, 0x08, 0x48, 0xe8, 0xe8, 0xad,
+ 0x41, 0x32, 0xa5, 0x46, 0x61, 0x0c, 0x2b, 0xf9, 0xa3, 0xa0, 0xf0, 0x75, 0x15, 0x80, 0xf5, 0xbd,
+ 0x8b, 0x5d, 0xcb, 0xdb, 0xb1, 0x6c, 0xec, 0x23, 0x36, 0x47, 0x1f, 0x49, 0xf0, 0xe7, 0x44, 0xf3,
+ 0x2f, 0xd6, 0x28, 0x50, 0x80, 0xbc, 0xe7, 0x5a, 0x74, 0x19, 0x00, 0xfd, 0x55, 0xef, 0x09, 0xbd,
+ 0x2d, 0xf3, 0x7d, 0x81, 0x5b, 0x90, 0x18, 0x22, 0x0e, 0x16, 0x99, 0xd2, 0x23, 0xaf, 0x4b, 0x36,
+ 0xc2, 0x77, 0x81, 0x8f, 0xf0, 0xcd, 0x9d, 0xe6, 0x2e, 0xf6, 0x9d, 0xe6, 0x46, 0x38, 0x7a, 0xd6,
+ 0x73, 0x20, 0x76, 0x3d, 0x92, 0x0d, 0xfc, 0x1f, 0x7d, 0x81, 0xdd, 0x83, 0xb0, 0x77, 0x1e, 0x39,
+ 0x33, 0x10, 0x25, 0xb0, 0x7d, 0xde, 0x8c, 0x60, 0x9f, 0xf7, 0xd9, 0x68, 0xee, 0xf3, 0xfd, 0x82,
+ 0x86, 0x73, 0x0a, 0xc9, 0xdd, 0x02, 0x14, 0xcb, 0x6e, 0x77, 0xf7, 0x3a, 0xe4, 0xd8, 0x09, 0xea,
+ 0xdb, 0xe8, 0x69, 0x94, 0x03, 0xe9, 0xda, 0xc7, 0x85, 0xc3, 0x72, 0x32, 0x12, 0x4f, 0x9c, 0xd3,
+ 0x50, 0x7e, 0xa4, 0x90, 0x1f, 0x66, 0x47, 0x38, 0xa9, 0x3f, 0x1e, 0x46, 0x3f, 0x9d, 0x66, 0xef,
+ 0x8e, 0xb0, 0x7a, 0xa3, 0x82, 0x85, 0xe0, 0x90, 0x7c, 0x63, 0xe9, 0x3e, 0xbd, 0xdc, 0x52, 0xe0,
+ 0xc1, 0x83, 0xf3, 0xf8, 0x88, 0x3c, 0x39, 0x0e, 0x1f, 0xad, 0xd0, 0x68, 0xff, 0x4b, 0x02, 0x45,
+ 0x6a, 0x7c, 0xdc, 0x7b, 0x48, 0x40, 0xb5, 0x57, 0x8d, 0x02, 0x49, 0x62, 0xac, 0x92, 0xcf, 0xa4,
+ 0x05, 0x60, 0x0c, 0xe6, 0xc6, 0x85, 0xcc, 0x00, 0xd0, 0xfe, 0x59, 0x02, 0x79, 0x64, 0x14, 0x89,
+ 0x45, 0x82, 0xf8, 0xb4, 0xb0, 0x83, 0x30, 0x23, 0x00, 0x44, 0x3e, 0x46, 0xbf, 0x97, 0xc0, 0x4c,
+ 0x8f, 0x64, 0x0c, 0xe3, 0x90, 0xdc, 0x28, 0xd0, 0x35, 0x41, 0x23, 0xfa, 0x4c, 0x7b, 0x9f, 0xd0,
+ 0xf1, 0x87, 0x64, 0x7e, 0xd2, 0xc1, 0xa1, 0x8f, 0x23, 0x68, 0xc4, 0x96, 0xf6, 0x6f, 0x12, 0x00,
+ 0x06, 0xf4, 0x9c, 0xee, 0x65, 0xb8, 0xe1, 0x5a, 0xda, 0xa3, 0x23, 0x00, 0x68, 0xb3, 0xcf, 0x45,
+ 0xcd, 0xfe, 0x73, 0x92, 0xa8, 0x2b, 0x30, 0xa7, 0x79, 0x01, 0xf1, 0x18, 0xf1, 0x3f, 0x1d, 0x4c,
+ 0x51, 0x39, 0x52, 0x0b, 0x53, 0x4c, 0xf8, 0xc1, 0x47, 0xda, 0x07, 0x85, 0x5c, 0x89, 0x45, 0x38,
+ 0x4a, 0x07, 0x40, 0x79, 0x04, 0x00, 0x8e, 0x83, 0xd9, 0x00, 0x80, 0x0d, 0xa3, 0xaa, 0x40, 0xed,
+ 0xdd, 0x32, 0xf6, 0xb7, 0x20, 0x43, 0xdd, 0xe1, 0x7b, 0x9a, 0xbf, 0x10, 0x9e, 0xfa, 0x33, 0xf2,
+ 0x08, 0xcb, 0xcf, 0x08, 0xa0, 0xdf, 0x16, 0x9a, 0xeb, 0x0b, 0x30, 0xf4, 0x48, 0xe9, 0xaf, 0xce,
+ 0xea, 0x60, 0x9e, 0xb3, 0x51, 0xd4, 0xd3, 0xe0, 0x24, 0x97, 0x40, 0xc6, 0xbb, 0x8e, 0x72, 0x4c,
+ 0xd5, 0xc0, 0x29, 0xee, 0x0d, 0x7d, 0x80, 0x1d, 0x25, 0xa7, 0x3d, 0xfc, 0x85, 0x5c, 0xb8, 0xfa,
+ 0xf3, 0xfe, 0x3c, 0x5d, 0x77, 0xfb, 0x24, 0x1f, 0xfa, 0xb2, 0xed, 0xd8, 0x3e, 0x7c, 0x90, 0x71,
+ 0x5a, 0x09, 0x13, 0x12, 0x6d, 0x88, 0xd3, 0x60, 0xca, 0x77, 0x59, 0x47, 0x96, 0xe0, 0x91, 0x55,
+ 0xac, 0x02, 0xaf, 0x58, 0x75, 0x70, 0x96, 0x5a, 0x13, 0x06, 0xec, 0x9a, 0x48, 0x86, 0x5e, 0xc9,
+ 0xab, 0xc0, 0x1e, 0xb4, 0x3b, 0xd0, 0xf6, 0x09, 0x9f, 0xc1, 0x29, 0x58, 0x81, 0x9c, 0xbc, 0x32,
+ 0xde, 0xc3, 0x2b, 0xe3, 0xe3, 0x06, 0x2d, 0xe8, 0x26, 0xac, 0xfe, 0xdd, 0x09, 0x00, 0xa9, 0xdb,
+ 0x39, 0x0b, 0x5e, 0xa1, 0x6a, 0x78, 0x4d, 0xdf, 0x1a, 0x60, 0x23, 0xcc, 0x60, 0x30, 0x99, 0xb5,
+ 0x2f, 0x87, 0xea, 0xf7, 0x0c, 0x4e, 0xfd, 0x6e, 0x15, 0x64, 0x21, 0x9d, 0xd6, 0xf5, 0x46, 0xd0,
+ 0xba, 0x79, 0x30, 0x13, 0xed, 0x2d, 0xcb, 0xea, 0x35, 0xe0, 0xea, 0xc0, 0xdf, 0xb8, 0xae, 0xeb,
+ 0x95, 0xe6, 0xe6, 0xc6, 0xfa, 0x8a, 0x51, 0xaa, 0xe8, 0x0a, 0x40, 0xfa, 0x49, 0xf4, 0x32, 0x74,
+ 0x13, 0xce, 0x6b, 0x7f, 0x20, 0x81, 0x02, 0x3e, 0xc2, 0xad, 0x7d, 0xef, 0x98, 0x34, 0xc7, 0xe3,
+ 0x5c, 0xa0, 0xc2, 0x71, 0x57, 0xfc, 0x42, 0x13, 0x2a, 0x4c, 0xcc, 0xd5, 0xa1, 0x2e, 0x34, 0x49,
+ 0x20, 0x94, 0xfd, 0xbc, 0x08, 0x35, 0xc9, 0xe6, 0x8e, 0x73, 0xe5, 0xbf, 0x72, 0x93, 0x44, 0xf5,
+ 0x3f, 0xe2, 0x26, 0x39, 0x80, 0x85, 0x89, 0x37, 0xc9, 0x01, 0xed, 0x2e, 0xa1, 0x99, 0x6a, 0x1f,
+ 0x29, 0x84, 0xb3, 0xc1, 0x4f, 0x48, 0x87, 0xda, 0x09, 0x2b, 0x81, 0x79, 0xcb, 0xf6, 0xa1, 0x6b,
+ 0x9b, 0xdd, 0xe5, 0xae, 0xb9, 0x1d, 0xd8, 0xa7, 0xfd, 0xdb, 0x1f, 0x55, 0x26, 0x8f, 0xc1, 0x7f,
+ 0xa1, 0x9e, 0x01, 0xc0, 0x87, 0xbb, 0xbd, 0xae, 0xe9, 0x47, 0xaa, 0xc7, 0xa4, 0xb0, 0xda, 0x97,
+ 0xe7, 0xb5, 0xef, 0x76, 0x70, 0x15, 0x01, 0xad, 0xb5, 0xdf, 0x83, 0x1b, 0xb6, 0xf5, 0xec, 0x3d,
+ 0x1c, 0x29, 0x99, 0xe8, 0xe8, 0xa0, 0x57, 0xdc, 0x7e, 0x50, 0x91, 0xdf, 0x0f, 0x52, 0xef, 0x06,
+ 0xd7, 0xe0, 0x20, 0xd8, 0xf8, 0xc6, 0x90, 0xf3, 0x56, 0x67, 0x1b, 0xfa, 0xd5, 0xad, 0x35, 0xcb,
+ 0xf3, 0x2c, 0x7b, 0x1b, 0x4f, 0xce, 0xa7, 0x8d, 0xf8, 0x0c, 0xda, 0xdf, 0x0a, 0x47, 0x61, 0x0a,
+ 0xfa, 0x8c, 0x21, 0x51, 0x98, 0xc2, 0x76, 0x2a, 0xf7, 0xb5, 0xd3, 0x70, 0x8d, 0x27, 0x2f, 0xb0,
+ 0xc6, 0xc3, 0x62, 0x5a, 0x10, 0x5c, 0x2b, 0x78, 0xad, 0x50, 0x98, 0xa7, 0xa4, 0x6a, 0x4c, 0x60,
+ 0x4d, 0x48, 0x06, 0x0b, 0xa4, 0xe8, 0x25, 0xc7, 0xb9, 0xb4, 0x6b, 0xba, 0x97, 0xb4, 0x9f, 0x38,
+ 0xdc, 0x9e, 0x6e, 0xe2, 0x5e, 0x56, 0xdc, 0x06, 0x6d, 0x9f, 0xf2, 0xe6, 0xfb, 0x95, 0x57, 0xfb,
+ 0xac, 0xf0, 0x94, 0x84, 0x93, 0x67, 0x50, 0xa9, 0xc9, 0x6c, 0x76, 0x89, 0x1d, 0x76, 0x14, 0x61,
+ 0x30, 0x7b, 0xe0, 0x7f, 0x33, 0x04, 0x3e, 0x18, 0x47, 0xd8, 0x7d, 0x82, 0x71, 0xe2, 0xae, 0x7d,
+ 0x65, 0x34, 0xec, 0x02, 0xbe, 0x46, 0xc0, 0x4e, 0x01, 0xf2, 0xa5, 0xd0, 0x35, 0x09, 0xfd, 0x65,
+ 0x2b, 0x94, 0xcf, 0x0e, 0xcd, 0x18, 0x96, 0x27, 0x82, 0xe6, 0x49, 0x9e, 0x85, 0x46, 0x2f, 0x53,
+ 0x4c, 0xbf, 0x24, 0xbc, 0xff, 0x36, 0x50, 0x40, 0x84, 0xbb, 0xc9, 0xb4, 0x4a, 0xb1, 0xcd, 0x3b,
+ 0x71, 0x36, 0xb3, 0x47, 0xf3, 0xc5, 0x05, 0x30, 0x13, 0x44, 0xc3, 0xc2, 0xf7, 0x0b, 0x86, 0x18,
+ 0x9e, 0x02, 0x45, 0xcf, 0xd9, 0x73, 0xdb, 0x90, 0xee, 0x88, 0xd2, 0xa7, 0x11, 0x76, 0xef, 0x86,
+ 0x9a, 0x0b, 0x07, 0x2c, 0x92, 0x7c, 0x6a, 0x8b, 0x24, 0xde, 0xde, 0x4d, 0xb0, 0x1f, 0xb4, 0x97,
+ 0x08, 0x5f, 0x02, 0xc2, 0x61, 0xd6, 0x84, 0xfe, 0x23, 0xd1, 0x08, 0xf8, 0x35, 0xa1, 0xbd, 0xa1,
+ 0x21, 0x35, 0x49, 0xa7, 0x72, 0x8d, 0x11, 0xec, 0xe0, 0x47, 0x83, 0x47, 0x05, 0x39, 0xa8, 0x01,
+ 0x8c, 0x0d, 0xde, 0x0d, 0xa3, 0xa6, 0xc8, 0xda, 0xf3, 0xf2, 0x40, 0x21, 0xac, 0x35, 0x42, 0x5b,
+ 0x50, 0x7b, 0x79, 0xee, 0xa8, 0x0d, 0xde, 0xf8, 0x19, 0xec, 0xef, 0x4a, 0xa2, 0xa1, 0xc3, 0x39,
+ 0xc1, 0x47, 0xb5, 0x8b, 0xd1, 0xa4, 0x11, 0x9a, 0x59, 0x82, 0xf2, 0x69, 0x6f, 0xc9, 0x89, 0x44,
+ 0x22, 0x17, 0x63, 0x31, 0xfb, 0x5e, 0xe9, 0x1b, 0xf9, 0x20, 0xa8, 0xe1, 0xb2, 0xeb, 0xec, 0x6e,
+ 0xb8, 0x5d, 0xed, 0xdf, 0x85, 0x2e, 0x7a, 0x88, 0x99, 0x5d, 0x48, 0xf1, 0xb3, 0x0b, 0xbc, 0x22,
+ 0xdd, 0x8d, 0x36, 0xc6, 0xba, 0x23, 0x0c, 0xdf, 0xea, 0x4d, 0x60, 0xc1, 0xec, 0x74, 0xd6, 0xcd,
+ 0x6d, 0x58, 0x46, 0xd3, 0x76, 0xdb, 0xa7, 0x01, 0xcf, 0xfa, 0x52, 0x13, 0xa7, 0x32, 0x7c, 0x1f,
+ 0x39, 0x75, 0xc0, 0x2a, 0x15, 0x5f, 0x86, 0xe5, 0x40, 0xa4, 0xf2, 0x9b, 0xc8, 0xf0, 0x87, 0x86,
+ 0x8c, 0xf6, 0x8e, 0x19, 0x85, 0x67, 0xa4, 0x4f, 0x82, 0x9e, 0x59, 0x02, 0x7c, 0x67, 0xaf, 0x79,
+ 0xbf, 0x22, 0x81, 0x29, 0x84, 0x47, 0xa9, 0xd3, 0xd1, 0x1e, 0xcb, 0x45, 0x31, 0x8d, 0xf5, 0x8d,
+ 0x7b, 0xa1, 0xb0, 0x53, 0x62, 0x50, 0x43, 0x42, 0x3f, 0x06, 0x93, 0x48, 0x88, 0x12, 0x27, 0x44,
+ 0x31, 0xdf, 0xc3, 0xc4, 0x22, 0xb2, 0x17, 0xdf, 0xa7, 0x25, 0x30, 0x1f, 0xcc, 0x33, 0x96, 0xa1,
+ 0xdf, 0xde, 0xd1, 0xee, 0x14, 0x5d, 0xe7, 0xa2, 0x2d, 0x31, 0xdc, 0x12, 0xee, 0x6a, 0xdf, 0xca,
+ 0xa5, 0x54, 0x79, 0xae, 0xe4, 0x98, 0x45, 0xc2, 0x54, 0xba, 0x98, 0x44, 0x30, 0x7b, 0x61, 0x7e,
+ 0x59, 0x02, 0xa0, 0xe5, 0x84, 0x93, 0xe5, 0x43, 0x48, 0xf2, 0x27, 0x85, 0x77, 0x8b, 0x69, 0xc5,
+ 0xa3, 0x62, 0xd3, 0xf7, 0x1c, 0x82, 0xae, 0x55, 0xc3, 0x4a, 0x9a, 0x48, 0x5b, 0x9f, 0xa9, 0xec,
+ 0xf5, 0xba, 0x56, 0xdb, 0xf4, 0xfb, 0xfd, 0x01, 0xe3, 0xc5, 0x8b, 0x2f, 0xe7, 0x4e, 0x65, 0x34,
+ 0x86, 0x65, 0xc4, 0xc8, 0x92, 0x44, 0xfd, 0x91, 0x82, 0xa8, 0x3f, 0x82, 0x3e, 0x3e, 0x43, 0x88,
+ 0x4f, 0x40, 0x3d, 0x65, 0x70, 0xbc, 0xd1, 0x83, 0xf6, 0x92, 0x0b, 0xcd, 0x4e, 0xdb, 0xdd, 0xdb,
+ 0xbd, 0xe8, 0xb1, 0xce, 0xac, 0xc9, 0x3a, 0xca, 0xac, 0x5c, 0x4b, 0xdc, 0xca, 0xb5, 0xf6, 0xc3,
+ 0xb2, 0x68, 0x5c, 0x36, 0x66, 0x7f, 0x85, 0xe1, 0x61, 0x84, 0xa1, 0x2e, 0x95, 0x0b, 0x56, 0xdf,
+ 0x22, 0x75, 0x3e, 0xcd, 0x22, 0xf5, 0x9b, 0x85, 0xa2, 0xbc, 0x09, 0xd5, 0x6b, 0x22, 0x9e, 0x74,
+ 0x0b, 0x4d, 0xe8, 0xc7, 0xc0, 0x7b, 0x23, 0x98, 0xbf, 0x18, 0xbd, 0x09, 0x21, 0xe6, 0x13, 0x07,
+ 0xf8, 0xb7, 0xbe, 0x35, 0xed, 0x0a, 0x0d, 0xcf, 0x42, 0x0c, 0xba, 0x21, 0x82, 0x92, 0x88, 0x13,
+ 0x5d, 0xaa, 0xe5, 0x96, 0xc4, 0xf2, 0xb3, 0x47, 0xe1, 0xe3, 0x12, 0x98, 0xc5, 0x57, 0x8e, 0x2f,
+ 0xed, 0xe3, 0x63, 0x9d, 0x82, 0x46, 0xc9, 0x8b, 0x59, 0x31, 0xab, 0x20, 0xdf, 0xb5, 0xec, 0x4b,
+ 0x81, 0xf7, 0x23, 0xfa, 0x1f, 0x5d, 0x58, 0x2a, 0x0d, 0xb8, 0xb0, 0x34, 0xdc, 0x26, 0x09, 0xcb,
+ 0x8d, 0x19, 0x4d, 0xdf, 0x90, 0x13, 0xb9, 0xb0, 0x74, 0x28, 0xb9, 0xec, 0xc5, 0xf8, 0xd7, 0x79,
+ 0x50, 0x6c, 0x42, 0xd3, 0x6d, 0xef, 0x68, 0xef, 0x97, 0x06, 0x4e, 0x25, 0xa6, 0xf9, 0xa9, 0xc4,
+ 0x32, 0x98, 0xda, 0xb2, 0xba, 0x3e, 0x74, 0x89, 0x47, 0x38, 0xdb, 0xb5, 0x93, 0x26, 0xbe, 0xd4,
+ 0x75, 0xda, 0x97, 0x16, 0xa9, 0x69, 0xbf, 0x18, 0x44, 0x8f, 0x5e, 0x5c, 0xc6, 0x1f, 0x19, 0xc1,
+ 0xc7, 0xc8, 0x20, 0xf4, 0x1c, 0xd7, 0x8f, 0xbb, 0x8d, 0x28, 0x86, 0x4a, 0xd3, 0x71, 0x7d, 0x83,
+ 0x7c, 0x88, 0x60, 0xde, 0xda, 0xeb, 0x76, 0x5b, 0xf0, 0x41, 0x3f, 0x98, 0xd6, 0x05, 0xcf, 0xc8,
+ 0x58, 0x74, 0xb6, 0xb6, 0x3c, 0x48, 0x16, 0x15, 0x0a, 0x06, 0x7d, 0x52, 0x4f, 0x82, 0x42, 0xd7,
+ 0xda, 0xb5, 0xc8, 0x44, 0xa4, 0x60, 0x90, 0x07, 0xf5, 0x16, 0xa0, 0x44, 0x73, 0x20, 0xc2, 0xe8,
+ 0xe9, 0x22, 0x6e, 0x9a, 0x07, 0xd2, 0x91, 0xce, 0x5c, 0x82, 0xfb, 0xde, 0xe9, 0x29, 0xfc, 0x1e,
+ 0xff, 0xe7, 0x8f, 0xdf, 0x88, 0x6c, 0x98, 0x10, 0x89, 0xc7, 0xcf, 0x70, 0x5d, 0xd8, 0x76, 0xdc,
+ 0x4e, 0x20, 0x9b, 0xf8, 0x09, 0x06, 0xcd, 0x97, 0x6e, 0x9b, 0x63, 0x60, 0xe1, 0xd9, 0x6b, 0xda,
+ 0x7b, 0x8a, 0xa8, 0xdb, 0x44, 0x45, 0x9f, 0xb7, 0xfc, 0x9d, 0x35, 0xe8, 0x9b, 0xda, 0x5f, 0xcb,
+ 0x03, 0x35, 0x6e, 0xf6, 0xff, 0xd3, 0xb8, 0x21, 0x1a, 0x47, 0x22, 0x80, 0xf9, 0x7b, 0xae, 0x8d,
+ 0xe4, 0x48, 0xbd, 0x6a, 0x99, 0x14, 0xf5, 0x6e, 0x70, 0x4d, 0xf4, 0x14, 0x2c, 0xa5, 0x56, 0x18,
+ 0x47, 0xdb, 0x69, 0x23, 0x3e, 0x83, 0xba, 0x0e, 0x6e, 0x20, 0x2f, 0x57, 0x5b, 0x6b, 0xb5, 0x55,
+ 0x6b, 0x7b, 0xa7, 0x6b, 0x6d, 0xef, 0xf8, 0x5e, 0xd5, 0xf6, 0x7c, 0x68, 0x76, 0x1a, 0x5b, 0x06,
+ 0xb9, 0x47, 0x0c, 0x60, 0x3a, 0x22, 0x59, 0x79, 0x8f, 0x71, 0xb1, 0xd1, 0x8d, 0xd5, 0x94, 0x98,
+ 0x96, 0xf2, 0x14, 0xd4, 0x52, 0xbc, 0xbd, 0x6e, 0x88, 0xe9, 0xb5, 0x7d, 0x98, 0x46, 0xaa, 0xbe,
+ 0xd7, 0xc5, 0xcd, 0x05, 0x67, 0x4e, 0x3b, 0xce, 0x25, 0x70, 0x92, 0x7d, 0xb3, 0xf9, 0xf7, 0x22,
+ 0x28, 0xac, 0xb8, 0x66, 0x6f, 0x47, 0x7b, 0x1e, 0xd3, 0x3f, 0x8f, 0xab, 0x4d, 0x84, 0xda, 0x29,
+ 0x0d, 0xd3, 0x4e, 0x79, 0x88, 0x76, 0xe6, 0x19, 0xed, 0x8c, 0x5f, 0x74, 0x3e, 0x0b, 0xe6, 0xda,
+ 0x4e, 0xb7, 0x0b, 0xdb, 0x48, 0x1e, 0xd5, 0x0e, 0x5e, 0xed, 0x99, 0x31, 0xb8, 0x34, 0x1c, 0x61,
+ 0x1f, 0xfa, 0x4d, 0xb2, 0xc6, 0x4e, 0x94, 0x3e, 0x4a, 0xd0, 0x5e, 0x2e, 0x81, 0xbc, 0xde, 0xd9,
+ 0x86, 0xdc, 0x3a, 0x7c, 0x8e, 0x59, 0x87, 0x3f, 0x05, 0x8a, 0xbe, 0xe9, 0x6e, 0x43, 0x3f, 0x58,
+ 0x27, 0x20, 0x4f, 0x61, 0xe0, 0x7f, 0x99, 0x09, 0xfc, 0xff, 0xdd, 0x20, 0x8f, 0x64, 0x46, 0x9d,
+ 0xe4, 0x6f, 0x18, 0x04, 0x3f, 0x96, 0xfd, 0x22, 0x2a, 0x71, 0x11, 0xd5, 0xda, 0xc0, 0x1f, 0xf4,
+ 0x63, 0x5d, 0x38, 0x18, 0x98, 0xf6, 0x5a, 0x30, 0x63, 0xb5, 0x1d, 0xbb, 0xba, 0x6b, 0x6e, 0x43,
+ 0x5a, 0xcd, 0x28, 0x21, 0x78, 0xab, 0xef, 0x3a, 0x0f, 0x58, 0x74, 0x51, 0x2b, 0x4a, 0x40, 0x55,
+ 0xd8, 0xb1, 0x3a, 0x1d, 0x68, 0xd3, 0x96, 0x4d, 0x9f, 0xce, 0x9e, 0x01, 0x79, 0xc4, 0x03, 0xd2,
+ 0x1f, 0x64, 0x2c, 0x28, 0xc7, 0xd4, 0x39, 0xd4, 0xac, 0x48, 0xe3, 0x55, 0x72, 0xfc, 0x9a, 0xab,
+ 0x88, 0xd7, 0x10, 0xa9, 0xdc, 0xe0, 0xc6, 0xf5, 0x04, 0x50, 0xb0, 0x9d, 0x0e, 0x1c, 0x3a, 0x08,
+ 0x91, 0x5c, 0xea, 0x93, 0x41, 0x01, 0x76, 0x50, 0xaf, 0x20, 0xe3, 0xec, 0x67, 0x92, 0x65, 0x69,
+ 0x90, 0xcc, 0xe9, 0x5c, 0x93, 0x06, 0x71, 0x9b, 0x7d, 0x03, 0xfc, 0xd1, 0x29, 0x70, 0x9c, 0xf4,
+ 0x01, 0xcd, 0xbd, 0x8b, 0x88, 0xd4, 0x45, 0xa8, 0xbd, 0x7e, 0xf0, 0xc0, 0x75, 0x9c, 0x57, 0xf6,
+ 0x93, 0xa0, 0xe0, 0xed, 0x5d, 0x0c, 0x8d, 0x50, 0xf2, 0xc0, 0x36, 0x5d, 0x69, 0x2c, 0xc3, 0x99,
+ 0x3c, 0xea, 0x70, 0xc6, 0x0d, 0x4d, 0x72, 0xd0, 0xf8, 0xa3, 0x81, 0x8c, 0x1c, 0xef, 0x08, 0x06,
+ 0xb2, 0x41, 0xc3, 0xd0, 0x69, 0x30, 0x65, 0x6e, 0xf9, 0xd0, 0x8d, 0xcc, 0x44, 0xfa, 0x88, 0x86,
+ 0xca, 0x8b, 0x70, 0xcb, 0x71, 0x91, 0x58, 0x48, 0x90, 0xd8, 0xf0, 0x99, 0x69, 0xb9, 0x80, 0xdb,
+ 0x41, 0xbb, 0x15, 0x9c, 0xb0, 0x9d, 0x0a, 0xec, 0x51, 0x39, 0x13, 0x14, 0xe7, 0xc9, 0x5d, 0xed,
+ 0x07, 0x5e, 0x1c, 0xe8, 0x4a, 0x16, 0x0e, 0x76, 0x25, 0xda, 0xe7, 0xd2, 0xce, 0x99, 0xfb, 0x80,
+ 0x1e, 0x9b, 0x85, 0xa6, 0x3e, 0x0d, 0xcc, 0x75, 0xa8, 0x87, 0x58, 0xdb, 0x0a, 0x5b, 0x49, 0xec,
+ 0x77, 0x5c, 0xe6, 0x48, 0x91, 0xf2, 0xac, 0x22, 0xad, 0x80, 0x69, 0x7c, 0x10, 0x1b, 0x69, 0x52,
+ 0xa1, 0xcf, 0x23, 0x1f, 0x4f, 0xeb, 0xc2, 0x4a, 0x31, 0x62, 0x5b, 0x2c, 0xd3, 0x4f, 0x8c, 0xf0,
+ 0xe3, 0x74, 0xb3, 0xef, 0x64, 0x09, 0x65, 0xdf, 0x1c, 0x7f, 0xa9, 0x08, 0xae, 0x29, 0xbb, 0x8e,
+ 0xe7, 0xe1, 0x63, 0x38, 0xfd, 0x0d, 0xf3, 0x8d, 0x12, 0x77, 0x05, 0xd0, 0x23, 0xba, 0xf9, 0x0d,
+ 0x6a, 0x50, 0x93, 0x6b, 0x1a, 0x7f, 0x21, 0x1c, 0xc2, 0x26, 0xdc, 0x7f, 0x88, 0x11, 0xfa, 0x7f,
+ 0x8d, 0x46, 0xf2, 0x9e, 0x9c, 0x48, 0x54, 0x9d, 0x94, 0xb2, 0xca, 0xbe, 0xb9, 0x7c, 0x49, 0x02,
+ 0x8f, 0xee, 0xe7, 0x66, 0xc3, 0xf6, 0xc2, 0x06, 0x73, 0xdd, 0x90, 0xf6, 0xc2, 0x47, 0x61, 0x49,
+ 0xbc, 0xf1, 0x37, 0xa6, 0xee, 0x4c, 0x69, 0x31, 0x8b, 0x25, 0xd1, 0x81, 0x9e, 0xa4, 0x1b, 0x7f,
+ 0x53, 0x93, 0xcf, 0x5e, 0xb8, 0xbf, 0x9b, 0x07, 0xc7, 0x57, 0x5c, 0x67, 0xaf, 0xe7, 0x45, 0x3d,
+ 0xd0, 0x9f, 0x0c, 0xde, 0x90, 0x2d, 0x8a, 0x98, 0x06, 0xd7, 0x83, 0x59, 0x97, 0x5a, 0x73, 0xd1,
+ 0xf6, 0x2c, 0x9b, 0xc4, 0xf6, 0x5e, 0xf2, 0x61, 0x7a, 0xaf, 0xa8, 0x9f, 0xc9, 0x73, 0xfd, 0x4c,
+ 0x7f, 0xcf, 0x51, 0x18, 0xd0, 0x73, 0xfc, 0xb1, 0x94, 0x72, 0x50, 0xed, 0x13, 0x51, 0x4c, 0x7f,
+ 0x51, 0x06, 0xc5, 0x6d, 0x9c, 0x91, 0x76, 0x17, 0x8f, 0x17, 0xab, 0x19, 0x26, 0x6e, 0xd0, 0x4f,
+ 0x23, 0xb9, 0xca, 0xac, 0x0e, 0xa7, 0x1a, 0xe0, 0x92, 0xb9, 0xcd, 0x5e, 0xa9, 0x1e, 0xce, 0x83,
+ 0xb9, 0xb0, 0xf4, 0x6a, 0xc7, 0xe3, 0x62, 0xbd, 0x32, 0x1a, 0x35, 0x2f, 0xa2, 0x51, 0x07, 0xd6,
+ 0x99, 0xc3, 0x51, 0x47, 0x66, 0x46, 0x9d, 0x81, 0xa3, 0xcb, 0x5c, 0xcc, 0xe8, 0xa2, 0x3d, 0x57,
+ 0x16, 0xbd, 0x44, 0x8f, 0xef, 0x5a, 0x71, 0x6d, 0x1e, 0xc9, 0x83, 0x85, 0xe0, 0x55, 0x7e, 0xc3,
+ 0x6b, 0x95, 0xbd, 0x92, 0x7c, 0x58, 0x02, 0x27, 0x0e, 0x76, 0xe6, 0xdf, 0xc1, 0x7b, 0xa9, 0xa1,
+ 0x3a, 0x79, 0xa1, 0x97, 0x1a, 0x7e, 0xe2, 0x37, 0xe9, 0x12, 0x43, 0xa2, 0x70, 0xf6, 0xde, 0xf0,
+ 0x4e, 0x5c, 0x2c, 0xe8, 0x89, 0x20, 0xd1, 0xec, 0x05, 0xf8, 0x53, 0x32, 0x98, 0x69, 0x42, 0xbf,
+ 0x66, 0xee, 0x3b, 0x7b, 0xbe, 0x66, 0x8a, 0x6e, 0xcf, 0x3d, 0x15, 0x14, 0xbb, 0xf8, 0x13, 0xdc,
+ 0xc1, 0xb0, 0x21, 0x48, 0xd9, 0xfd, 0x2d, 0xec, 0x1b, 0x44, 0x48, 0x1b, 0x34, 0x3f, 0x1f, 0x8b,
+ 0x46, 0x64, 0x77, 0x34, 0xe4, 0x6e, 0x2c, 0x5b, 0x3b, 0xa9, 0xf6, 0x4e, 0xe3, 0x8a, 0xce, 0x1e,
+ 0x96, 0x1f, 0x96, 0xc1, 0x7c, 0x13, 0xfa, 0x55, 0x6f, 0xd9, 0xbc, 0xec, 0xb8, 0x96, 0x0f, 0xb5,
+ 0x15, 0x51, 0x68, 0xce, 0x00, 0x60, 0x85, 0x9f, 0xd1, 0x08, 0x59, 0x4c, 0x8a, 0xf6, 0x96, 0xb4,
+ 0x8e, 0x42, 0x1c, 0x1f, 0x63, 0x01, 0x21, 0x95, 0x8f, 0x45, 0x52, 0xf1, 0x13, 0xb8, 0x06, 0x5c,
+ 0xa2, 0x40, 0x94, 0xdc, 0xf6, 0x8e, 0x75, 0x19, 0x76, 0x52, 0x02, 0x11, 0x7c, 0x16, 0x01, 0x11,
+ 0x12, 0x4a, 0xed, 0xbe, 0xc2, 0xf1, 0x31, 0x0e, 0xf7, 0x95, 0x24, 0x82, 0x13, 0x09, 0x72, 0x85,
+ 0xba, 0x1e, 0xba, 0x9e, 0x79, 0xaf, 0xa8, 0x58, 0x23, 0x93, 0x4d, 0x62, 0x4d, 0xb6, 0x91, 0x3a,
+ 0x16, 0x52, 0xf6, 0x30, 0x9d, 0xce, 0x67, 0xd1, 0xb1, 0x0c, 0x2c, 0x3a, 0x7b, 0xa1, 0xbf, 0x4f,
+ 0x06, 0x57, 0x87, 0xd1, 0x5f, 0x9a, 0xd0, 0xaf, 0x98, 0xde, 0xce, 0x45, 0xc7, 0x74, 0x3b, 0x5a,
+ 0x79, 0x0c, 0x07, 0x0e, 0xb5, 0x3f, 0x64, 0x41, 0xa8, 0xf3, 0x20, 0x0c, 0x74, 0x25, 0x1d, 0xc8,
+ 0xcb, 0x38, 0x3a, 0x99, 0x44, 0x6f, 0xd7, 0x77, 0x84, 0x60, 0x3d, 0x93, 0x03, 0xeb, 0x9e, 0x51,
+ 0x59, 0xcc, 0x1e, 0xb8, 0x9f, 0x25, 0x23, 0x02, 0xe3, 0xf5, 0x7c, 0x41, 0x14, 0xb0, 0x18, 0xaf,
+ 0x57, 0x39, 0xd6, 0xeb, 0x75, 0xa4, 0x31, 0x62, 0xa8, 0xc7, 0x72, 0xb6, 0x63, 0xc4, 0x11, 0x7a,
+ 0x23, 0xbf, 0x4b, 0x06, 0x0a, 0x0e, 0xff, 0xc5, 0x78, 0x84, 0xb3, 0xd1, 0xb4, 0x93, 0xd1, 0x39,
+ 0xe0, 0x7d, 0x3e, 0x95, 0xd6, 0xfb, 0x5c, 0x7b, 0x67, 0x5a, 0x1f, 0xf3, 0x7e, 0x6e, 0xc7, 0x82,
+ 0x58, 0x2a, 0x17, 0xf2, 0x21, 0x1c, 0x64, 0x0f, 0xda, 0x8f, 0xc9, 0x00, 0xa0, 0x06, 0x4d, 0xcf,
+ 0x46, 0x3c, 0x4b, 0x14, 0xae, 0xdb, 0x58, 0xbf, 0x7b, 0x04, 0xd4, 0xd5, 0x7d, 0x40, 0x11, 0x8a,
+ 0xd1, 0xa9, 0x8b, 0xd7, 0xa7, 0xf5, 0xad, 0x8c, 0xb8, 0x1a, 0x0b, 0x2c, 0xa9, 0xbc, 0x2d, 0x63,
+ 0xcb, 0xce, 0x1e, 0x90, 0xff, 0x29, 0x81, 0x42, 0xcb, 0x69, 0x42, 0xff, 0xf0, 0xa6, 0x40, 0xea,
+ 0xa8, 0x01, 0xb8, 0xdc, 0x71, 0x44, 0x0d, 0x18, 0x44, 0x28, 0x7b, 0xd1, 0xbd, 0x57, 0x02, 0x73,
+ 0x2d, 0xa7, 0x1c, 0x2e, 0x4e, 0x89, 0xfb, 0xaa, 0xfe, 0x6b, 0x2e, 0xe5, 0x1a, 0x06, 0x5b, 0x4c,
+ 0x8c, 0xc0, 0x52, 0xad, 0x1e, 0x24, 0xd0, 0xcb, 0x5e, 0x6e, 0x77, 0x82, 0xe3, 0x1b, 0x76, 0xc7,
+ 0x31, 0x60, 0xc7, 0xa1, 0x2b, 0xdd, 0xaa, 0x0a, 0xf2, 0x7b, 0x76, 0xc7, 0xc1, 0x2c, 0x17, 0x0c,
+ 0xfc, 0x1f, 0xa5, 0xb9, 0xb0, 0xe3, 0x50, 0xdf, 0x00, 0xfc, 0x5f, 0xfb, 0x0b, 0x19, 0xe4, 0xd1,
+ 0xb7, 0xe2, 0xa2, 0x7e, 0x97, 0x9c, 0x32, 0x0e, 0x02, 0x22, 0x3f, 0x16, 0x4b, 0xe8, 0x5e, 0x66,
+ 0xed, 0x9f, 0x78, 0xb0, 0xde, 0x10, 0x57, 0x1e, 0x23, 0x8a, 0x68, 0xcd, 0x5f, 0x3d, 0x0d, 0xa6,
+ 0x2e, 0x76, 0x9d, 0xf6, 0xa5, 0xe8, 0xb8, 0x3e, 0x7d, 0x54, 0x6f, 0x01, 0x05, 0xd7, 0xb4, 0xb7,
+ 0x21, 0xdd, 0x53, 0x38, 0xd9, 0xd7, 0x17, 0x62, 0xaf, 0x17, 0x83, 0x64, 0xd1, 0xde, 0x99, 0x26,
+ 0x02, 0xc3, 0x80, 0xca, 0xa7, 0xd3, 0x87, 0xca, 0x08, 0x27, 0xcf, 0x14, 0x30, 0x57, 0x2e, 0xd5,
+ 0xc9, 0xad, 0x86, 0x8d, 0x73, 0xba, 0x22, 0x63, 0x98, 0x91, 0x4c, 0x32, 0x84, 0x19, 0x91, 0xff,
+ 0x2f, 0x0b, 0xf3, 0x80, 0xca, 0x1f, 0x05, 0xcc, 0x9f, 0x96, 0xc0, 0x7c, 0xcd, 0xf2, 0xfc, 0x38,
+ 0x6f, 0xff, 0x84, 0xe8, 0xbf, 0x2f, 0x49, 0x6b, 0x2a, 0x73, 0xe5, 0x08, 0x87, 0xfd, 0x4d, 0x65,
+ 0x0e, 0x27, 0x15, 0x31, 0x99, 0x63, 0x29, 0x98, 0x03, 0x72, 0xa5, 0xbd, 0xb0, 0x24, 0x53, 0x1b,
+ 0x4a, 0x51, 0x21, 0x93, 0x37, 0x94, 0x62, 0xcb, 0xce, 0x5e, 0xbe, 0x7f, 0x21, 0x81, 0x13, 0xa8,
+ 0xf8, 0xa4, 0x65, 0xa9, 0x78, 0x31, 0x0f, 0x5d, 0x96, 0x4a, 0xbd, 0x32, 0x7e, 0x80, 0x97, 0x71,
+ 0xac, 0x8c, 0x0f, 0x23, 0x3a, 0x61, 0x31, 0xc7, 0x2c, 0xc3, 0x0e, 0x13, 0x73, 0xc2, 0x32, 0xec,
+ 0xe8, 0x62, 0x4e, 0x5e, 0x8a, 0x1d, 0x51, 0xcc, 0x47, 0xb6, 0xc0, 0xfa, 0x0b, 0x72, 0x28, 0xe6,
+ 0xd8, 0xb5, 0x8d, 0x04, 0x31, 0xa7, 0x3e, 0xd1, 0xab, 0xbd, 0x7b, 0x44, 0xc1, 0x8f, 0x79, 0x7d,
+ 0x63, 0x14, 0x98, 0x8e, 0x70, 0x8d, 0xe3, 0xe7, 0x64, 0xb0, 0x40, 0xb9, 0x18, 0x3c, 0x65, 0x4e,
+ 0xc0, 0x28, 0xf5, 0x94, 0x39, 0xf5, 0x19, 0x20, 0x9e, 0xb3, 0xc9, 0x9f, 0x01, 0x4a, 0x2c, 0x3f,
+ 0x7b, 0x70, 0xfe, 0x2a, 0x0f, 0x4e, 0x21, 0x16, 0xd6, 0x9c, 0x8e, 0xb5, 0xb5, 0x4f, 0xb8, 0x38,
+ 0x67, 0x76, 0xf7, 0xa0, 0xa7, 0x7d, 0x40, 0x12, 0x45, 0xe9, 0xbf, 0x03, 0xe0, 0xf4, 0xa0, 0x4b,
+ 0xe2, 0xb8, 0x51, 0xa0, 0xee, 0x8e, 0xab, 0xec, 0xc1, 0x92, 0xc2, 0xcb, 0x70, 0x1a, 0x01, 0x11,
+ 0x83, 0xa1, 0x87, 0xac, 0xc2, 0x99, 0xf0, 0x4d, 0xbf, 0x83, 0x47, 0xee, 0xa0, 0x83, 0xc7, 0xcd,
+ 0x40, 0x36, 0x3b, 0x9d, 0x10, 0xaa, 0xfe, 0xcd, 0x6c, 0x5c, 0xa6, 0x81, 0xb2, 0xa0, 0x9c, 0x1e,
+ 0x8c, 0x8e, 0xe6, 0xc5, 0xe4, 0xf4, 0xa0, 0xaf, 0x2e, 0x82, 0x22, 0xb9, 0x1c, 0x3c, 0x5c, 0xd1,
+ 0x1f, 0x9c, 0x99, 0xe6, 0xe2, 0x4d, 0xbb, 0x06, 0xaf, 0x86, 0x77, 0xa6, 0x92, 0xcc, 0xa0, 0x7e,
+ 0x3a, 0xb2, 0x93, 0x0d, 0x4e, 0xc1, 0x9e, 0x3e, 0x32, 0xe5, 0xc9, 0xec, 0x86, 0x95, 0x7a, 0xbd,
+ 0xee, 0x7e, 0x8b, 0x06, 0x1e, 0x48, 0xb5, 0x1b, 0xc6, 0xc4, 0x2f, 0x90, 0x0e, 0xc4, 0x2f, 0x48,
+ 0xbd, 0x1b, 0xc6, 0xf1, 0x31, 0x8e, 0xdd, 0xb0, 0x24, 0x82, 0x13, 0xb9, 0x95, 0x07, 0x5b, 0xcd,
+ 0xf4, 0x6e, 0x82, 0x7f, 0x1c, 0xec, 0x59, 0x0d, 0x78, 0x67, 0x97, 0x41, 0xd7, 0x16, 0x24, 0xde,
+ 0xc9, 0xa2, 0x3e, 0x19, 0x14, 0xb7, 0x1c, 0x77, 0xd7, 0x0c, 0x36, 0xee, 0xfb, 0x4f, 0x8a, 0xd0,
+ 0xfb, 0x00, 0x96, 0x71, 0x1e, 0x83, 0xe6, 0x45, 0xf3, 0x91, 0xe7, 0x58, 0x3d, 0x1a, 0xf4, 0x11,
+ 0xfd, 0x55, 0x6f, 0x04, 0xf3, 0x34, 0xf6, 0x63, 0x1d, 0x7a, 0x3e, 0xec, 0xd0, 0x88, 0x16, 0x7c,
+ 0xa2, 0x7a, 0x16, 0xcc, 0xd1, 0x84, 0x65, 0xab, 0x0b, 0x3d, 0x1a, 0xd4, 0x82, 0x4b, 0x53, 0x4f,
+ 0x81, 0xa2, 0xe5, 0xdd, 0xe7, 0x39, 0x36, 0x0d, 0xc8, 0x47, 0x9f, 0xd4, 0x9b, 0xc1, 0x71, 0x9a,
+ 0x2f, 0x34, 0x56, 0xc9, 0x81, 0x9d, 0xfe, 0x64, 0xa4, 0x5a, 0xb6, 0xb3, 0xee, 0x3a, 0xdb, 0x2e,
+ 0xf4, 0x3c, 0x7c, 0x6a, 0x6a, 0xda, 0x60, 0x52, 0xd4, 0x0b, 0xe0, 0x44, 0xd7, 0xb2, 0x2f, 0x79,
+ 0x38, 0x46, 0xf0, 0x32, 0x75, 0x1b, 0x9b, 0x1b, 0x10, 0xbb, 0x9b, 0x69, 0x6c, 0x54, 0x0e, 0xec,
+ 0x27, 0xc6, 0x41, 0x2a, 0x4c, 0x94, 0xfc, 0x25, 0xb3, 0x7d, 0x09, 0xbf, 0xa7, 0xee, 0xa8, 0x07,
+ 0xd2, 0x19, 0x61, 0x90, 0x3b, 0x00, 0x16, 0x38, 0x61, 0xe0, 0x34, 0xed, 0x65, 0x39, 0x30, 0xc7,
+ 0x15, 0x60, 0x02, 0x35, 0xe8, 0x16, 0xbd, 0xf3, 0x3b, 0x96, 0x0f, 0x11, 0x73, 0xf4, 0xac, 0xcb,
+ 0x13, 0x87, 0x30, 0x6f, 0x1c, 0xf8, 0xd0, 0x18, 0x40, 0x0c, 0xf1, 0x45, 0x3a, 0x3c, 0xec, 0x59,
+ 0xe6, 0x51, 0x5b, 0x95, 0x4b, 0xd3, 0x9e, 0x03, 0xd4, 0x83, 0xd4, 0x18, 0x2f, 0x90, 0x5c, 0x3a,
+ 0x2f, 0x10, 0x24, 0x37, 0xb3, 0xdb, 0x75, 0xae, 0xc0, 0x4e, 0x48, 0x96, 0xea, 0xea, 0x81, 0x74,
+ 0xed, 0xf3, 0xa3, 0xcc, 0x0b, 0x53, 0x5f, 0xb3, 0x81, 0x1a, 0xd9, 0x5e, 0xbb, 0x0d, 0x61, 0x87,
+ 0x1e, 0x5c, 0x0b, 0x1e, 0x53, 0x5e, 0xc0, 0x91, 0x7a, 0x16, 0x79, 0x44, 0x37, 0x70, 0x7c, 0xf4,
+ 0x6a, 0x50, 0x24, 0xb7, 0xd9, 0x69, 0x2f, 0x5b, 0x18, 0xd8, 0xd7, 0x2c, 0xf0, 0x7d, 0xcd, 0x06,
+ 0x98, 0xb3, 0x1d, 0x54, 0xdc, 0xba, 0xe9, 0x9a, 0xbb, 0x5e, 0xd2, 0x22, 0x31, 0xa1, 0x1b, 0x5a,
+ 0x04, 0x75, 0xe6, 0xb3, 0xd5, 0x63, 0x06, 0x47, 0x46, 0xfd, 0xff, 0x81, 0xe3, 0x17, 0x69, 0x80,
+ 0x07, 0x8f, 0x52, 0x96, 0xe2, 0x5d, 0x28, 0xfb, 0x28, 0x2f, 0xf1, 0x5f, 0xae, 0x1e, 0x33, 0xfa,
+ 0x89, 0xa9, 0xff, 0x0d, 0x2c, 0xa0, 0xc7, 0x8e, 0x73, 0x25, 0x60, 0x5c, 0x8e, 0xb7, 0x23, 0xfb,
+ 0xc8, 0xaf, 0x71, 0x1f, 0xae, 0x1e, 0x33, 0xfa, 0x48, 0xa9, 0x0d, 0x00, 0x76, 0xfc, 0xdd, 0x2e,
+ 0x25, 0x9c, 0x8f, 0x57, 0xc9, 0x3e, 0xc2, 0xab, 0xe1, 0x47, 0xab, 0xc7, 0x0c, 0x86, 0x84, 0x5a,
+ 0x03, 0x33, 0xfe, 0x83, 0x3e, 0xa5, 0x57, 0x88, 0xf7, 0x5d, 0xe8, 0xa3, 0xd7, 0x0a, 0xbe, 0x59,
+ 0x3d, 0x66, 0x44, 0x04, 0xd4, 0x2a, 0x98, 0xee, 0x5d, 0xa4, 0xc4, 0x8a, 0xf1, 0xfd, 0x5d, 0x1f,
+ 0xb1, 0xf5, 0x8b, 0x21, 0xad, 0xf0, 0x73, 0xc4, 0x58, 0xdb, 0xbb, 0x4c, 0x69, 0x4d, 0x09, 0x33,
+ 0x56, 0x0e, 0xbe, 0x41, 0x8c, 0x85, 0x04, 0xd4, 0x2a, 0x98, 0xf1, 0x6c, 0xb3, 0xe7, 0xed, 0x38,
+ 0xbe, 0x77, 0x7a, 0xba, 0xcf, 0xcd, 0x35, 0x9e, 0x5a, 0x93, 0x7e, 0x63, 0x44, 0x5f, 0xab, 0x4f,
+ 0x06, 0x57, 0xef, 0xf5, 0x3a, 0xa6, 0x0f, 0xf5, 0x07, 0x2d, 0xcf, 0xb7, 0xec, 0xed, 0x20, 0x42,
+ 0x31, 0x19, 0x2c, 0x06, 0xbf, 0x54, 0x17, 0xe9, 0x81, 0x37, 0x80, 0xdb, 0xa6, 0xd6, 0xbf, 0xd7,
+ 0x4a, 0x8a, 0x65, 0xce, 0xb9, 0x3d, 0x0d, 0xe4, 0xd1, 0x2b, 0x3c, 0xb8, 0x2c, 0x0c, 0x5e, 0xc7,
+ 0xed, 0xd7, 0x1d, 0xdc, 0x80, 0xd1, 0x47, 0x7d, 0xe3, 0xd3, 0xdc, 0x81, 0xf1, 0xe9, 0x7a, 0x30,
+ 0x6b, 0x79, 0x6b, 0xd6, 0x36, 0x31, 0x8e, 0xe9, 0xf8, 0xc1, 0x26, 0x91, 0xc5, 0x84, 0x3a, 0xbc,
+ 0x42, 0x06, 0x8e, 0xe3, 0xc1, 0x62, 0x42, 0x90, 0xa2, 0xdd, 0x04, 0xe6, 0xd8, 0x46, 0x46, 0xae,
+ 0xc4, 0xb5, 0x22, 0xd3, 0x9a, 0x3e, 0x69, 0x37, 0x82, 0x05, 0x5e, 0xa7, 0x19, 0x0b, 0x42, 0x0e,
+ 0xba, 0x42, 0xed, 0x06, 0x70, 0xbc, 0xaf, 0x61, 0x05, 0x21, 0x63, 0x72, 0x51, 0xc8, 0x98, 0xeb,
+ 0x01, 0x88, 0xb4, 0x78, 0x20, 0x99, 0xeb, 0xc0, 0x4c, 0xa8, 0x97, 0x03, 0x33, 0xfc, 0x69, 0x0e,
+ 0x4c, 0x07, 0xca, 0x36, 0x28, 0x03, 0x1a, 0x99, 0x6c, 0x66, 0x7f, 0x28, 0x18, 0x99, 0xd8, 0x34,
+ 0x64, 0x26, 0x44, 0x5e, 0xd9, 0x2d, 0xcb, 0xef, 0x06, 0x27, 0x1b, 0xfb, 0x93, 0xd5, 0x75, 0x00,
+ 0x2c, 0x8c, 0x51, 0x2b, 0x3a, 0xea, 0x78, 0x7b, 0x8a, 0xf6, 0x40, 0xf4, 0x81, 0xa1, 0x71, 0xf6,
+ 0x3b, 0xe8, 0x39, 0xc4, 0x19, 0x50, 0x20, 0x61, 0xfa, 0x8f, 0xa9, 0x0b, 0x00, 0xe8, 0xcf, 0x5a,
+ 0xd7, 0x8d, 0xaa, 0x5e, 0x2f, 0xeb, 0x4a, 0x4e, 0x7b, 0x85, 0x04, 0x66, 0xc2, 0x46, 0x30, 0xb0,
+ 0x92, 0x3a, 0x55, 0xad, 0xa1, 0xb7, 0x8e, 0x1e, 0x6c, 0x54, 0xac, 0x92, 0x3d, 0x15, 0x3c, 0x6a,
+ 0xcf, 0x83, 0xcb, 0x96, 0xeb, 0xf9, 0x86, 0x73, 0x65, 0xd9, 0x71, 0xa3, 0x81, 0x95, 0x04, 0xb8,
+ 0x8d, 0x7b, 0x8d, 0x0c, 0xc6, 0x0e, 0xc4, 0x67, 0xde, 0xa0, 0x4b, 0x17, 0xfe, 0xa3, 0x04, 0x44,
+ 0xd7, 0x77, 0x4d, 0xdb, 0xeb, 0x39, 0x1e, 0x34, 0x9c, 0x2b, 0x5e, 0xc9, 0xee, 0x94, 0x9d, 0xee,
+ 0xde, 0xae, 0xed, 0x51, 0x93, 0x2f, 0xee, 0x35, 0x92, 0x0e, 0xbe, 0x53, 0x78, 0x01, 0x80, 0x72,
+ 0xa3, 0x56, 0xd3, 0xcb, 0xad, 0x6a, 0xa3, 0xae, 0x1c, 0x43, 0xd2, 0x6a, 0x95, 0x96, 0x6a, 0x48,
+ 0x3a, 0xdf, 0x0b, 0xa6, 0x83, 0x36, 0x4d, 0xa3, 0xdc, 0xe4, 0x82, 0x28, 0x37, 0x6a, 0x09, 0x4c,
+ 0x07, 0xad, 0x9c, 0x8e, 0x08, 0x8f, 0xed, 0x3f, 0xd5, 0xbc, 0x6b, 0xba, 0x3e, 0x36, 0x50, 0x02,
+ 0x22, 0x4b, 0xa6, 0x07, 0x8d, 0xf0, 0xb3, 0xb3, 0x4f, 0xa0, 0x1c, 0xa8, 0x60, 0xa1, 0x54, 0xab,
+ 0x6d, 0x36, 0x8c, 0xcd, 0x7a, 0xa3, 0xb5, 0x5a, 0xad, 0xaf, 0x90, 0x11, 0xb2, 0xba, 0x52, 0x6f,
+ 0x18, 0x3a, 0x19, 0x20, 0x9b, 0x4a, 0x8e, 0xdc, 0x69, 0xbd, 0x34, 0x0d, 0x8a, 0x3d, 0x2c, 0x5d,
+ 0xed, 0x4b, 0x72, 0xca, 0x70, 0x06, 0x21, 0x4e, 0x31, 0xb7, 0xee, 0x72, 0x47, 0x0a, 0xa4, 0x01,
+ 0x47, 0x7e, 0xcf, 0x82, 0x39, 0x62, 0xaa, 0x7b, 0x78, 0x77, 0x06, 0x23, 0x27, 0x1b, 0x5c, 0x9a,
+ 0xf6, 0x71, 0x29, 0x45, 0x8c, 0x83, 0x81, 0x1c, 0xa5, 0x33, 0x2e, 0x7e, 0x2f, 0x37, 0xda, 0xa5,
+ 0x16, 0xd5, 0x7a, 0x4b, 0x37, 0xea, 0xa5, 0x1a, 0xcd, 0x22, 0xab, 0xa7, 0xc1, 0xc9, 0x7a, 0x83,
+ 0x86, 0x74, 0x6c, 0x6e, 0xb6, 0x1a, 0x9b, 0xd5, 0xb5, 0xf5, 0x86, 0xd1, 0x52, 0x0a, 0xea, 0x29,
+ 0xa0, 0x92, 0xff, 0x9b, 0xd5, 0xe6, 0x66, 0xb9, 0x54, 0x2f, 0xeb, 0x35, 0xbd, 0xa2, 0x14, 0xd5,
+ 0xc7, 0x81, 0x1b, 0xc8, 0x25, 0x49, 0x8d, 0xe5, 0x4d, 0xa3, 0x71, 0xbe, 0x89, 0x10, 0x34, 0xf4,
+ 0x5a, 0x09, 0x29, 0x12, 0x73, 0xb7, 0xf5, 0x94, 0x7a, 0x15, 0x38, 0x8e, 0x2f, 0xbe, 0xaf, 0x35,
+ 0x4a, 0x15, 0x5a, 0xde, 0xb4, 0x7a, 0x2d, 0x38, 0x5d, 0xad, 0x37, 0x37, 0x96, 0x97, 0xab, 0xe5,
+ 0xaa, 0x5e, 0x6f, 0x6d, 0xae, 0xeb, 0xc6, 0x5a, 0xb5, 0xd9, 0x44, 0xdf, 0x2a, 0x33, 0xf8, 0xe6,
+ 0x60, 0xd2, 0x67, 0x6a, 0xef, 0x97, 0xc1, 0xfc, 0x39, 0xb3, 0x6b, 0xa1, 0x81, 0x02, 0x5f, 0x29,
+ 0xde, 0x77, 0x1a, 0xc8, 0xc7, 0x57, 0x8f, 0xd3, 0xf3, 0x04, 0xf8, 0x41, 0xfb, 0x21, 0x39, 0xe5,
+ 0x69, 0x20, 0x0a, 0x04, 0x29, 0x71, 0x91, 0x2b, 0x2d, 0x66, 0xee, 0xfa, 0x5a, 0x29, 0xc5, 0x69,
+ 0x20, 0x71, 0xf2, 0xe9, 0xc0, 0xff, 0xf9, 0x71, 0x81, 0xaf, 0x80, 0xb9, 0x8d, 0x7a, 0x69, 0xa3,
+ 0xb5, 0xda, 0x30, 0xaa, 0xdf, 0x83, 0x63, 0xd9, 0xcf, 0x83, 0x99, 0xe5, 0x86, 0xb1, 0x54, 0xad,
+ 0x54, 0xf4, 0xba, 0x52, 0x50, 0x1f, 0x05, 0xae, 0x6a, 0xea, 0xc6, 0xb9, 0x6a, 0x59, 0xdf, 0xdc,
+ 0xa8, 0x97, 0xce, 0x95, 0xaa, 0x35, 0xdc, 0x47, 0x14, 0x13, 0xae, 0x43, 0x9f, 0xd2, 0x7e, 0x20,
+ 0x0f, 0x00, 0xa9, 0x3a, 0xbe, 0xca, 0x89, 0xb9, 0x34, 0xfb, 0x0f, 0xd2, 0x4e, 0x1a, 0x22, 0x32,
+ 0x31, 0xed, 0xb7, 0x0a, 0xa6, 0x5d, 0xfa, 0x82, 0xae, 0x8e, 0x0d, 0xa3, 0x43, 0xfe, 0x06, 0xd4,
+ 0x8c, 0xf0, 0x73, 0xed, 0x03, 0x69, 0xe6, 0x08, 0xb1, 0x8c, 0xa5, 0x43, 0x72, 0x79, 0x3c, 0x40,
+ 0x6a, 0x2f, 0xce, 0x81, 0x05, 0xbe, 0x62, 0xa8, 0x12, 0xd8, 0x98, 0x12, 0xab, 0x04, 0xff, 0x31,
+ 0x63, 0x64, 0x9d, 0x7d, 0x12, 0x1d, 0x4e, 0x41, 0xd0, 0x32, 0xc9, 0xc1, 0xfe, 0xc0, 0x62, 0x51,
+ 0x72, 0x88, 0x79, 0x64, 0x74, 0x28, 0x92, 0x3a, 0x05, 0xe4, 0xd6, 0x83, 0xbe, 0x22, 0x6b, 0x5f,
+ 0x93, 0xc1, 0x3c, 0x77, 0x2b, 0xb7, 0xf6, 0xce, 0x9c, 0xc8, 0x8d, 0xb9, 0xcc, 0x7d, 0xdf, 0xb9,
+ 0xc3, 0xde, 0xf7, 0x7d, 0xf6, 0x5e, 0x30, 0x45, 0xd3, 0xb0, 0x7c, 0x1b, 0x75, 0x64, 0x0a, 0x1c,
+ 0x07, 0xb3, 0x2b, 0x7a, 0x6b, 0xb3, 0xd9, 0x2a, 0x19, 0x2d, 0xbd, 0xa2, 0xe4, 0xd0, 0xc0, 0xa7,
+ 0xaf, 0xad, 0xb7, 0x2e, 0x28, 0x12, 0x1a, 0x13, 0x57, 0x36, 0xaa, 0x15, 0x7d, 0xb3, 0x51, 0xaf,
+ 0x5d, 0x50, 0xe4, 0xf4, 0x0e, 0x97, 0xfd, 0x8c, 0x4d, 0xd8, 0xe1, 0x32, 0xa9, 0xf8, 0xec, 0xe7,
+ 0xae, 0x9f, 0x93, 0x81, 0x42, 0x38, 0xd0, 0x1f, 0xec, 0x41, 0xd7, 0x82, 0x76, 0x1b, 0x6a, 0x97,
+ 0x44, 0x02, 0xc0, 0x1e, 0x08, 0x7d, 0x88, 0xfb, 0x77, 0xc6, 0x6a, 0x24, 0x0f, 0x7d, 0x06, 0x77,
+ 0xfe, 0x80, 0xc1, 0xfd, 0xd9, 0xb4, 0x1e, 0x97, 0xfd, 0xec, 0x8e, 0x05, 0xb2, 0x4f, 0xa5, 0xf1,
+ 0xb8, 0x1c, 0xc2, 0xc1, 0x44, 0xe2, 0x3a, 0xc7, 0x8c, 0xc7, 0x8a, 0xac, 0xbd, 0x48, 0x06, 0xc7,
+ 0x2b, 0xa6, 0x0f, 0x97, 0xf6, 0x5b, 0xc1, 0x2d, 0x9a, 0x31, 0x37, 0x5f, 0xe7, 0x0e, 0xdc, 0x7c,
+ 0x1d, 0x5d, 0xc4, 0x29, 0xf5, 0x5d, 0xc4, 0xa9, 0xbd, 0x27, 0xed, 0x19, 0xcd, 0x3e, 0x1e, 0xc6,
+ 0x16, 0x7c, 0x39, 0xdd, 0xd9, 0xcb, 0x64, 0x2e, 0xb2, 0x6f, 0x60, 0x6f, 0x9f, 0x01, 0x0a, 0x61,
+ 0x85, 0x71, 0x2a, 0xfc, 0x29, 0x7a, 0x59, 0xfc, 0x66, 0x8a, 0x18, 0x8e, 0x41, 0x54, 0x0c, 0x89,
+ 0x8f, 0x8a, 0xc1, 0xad, 0x51, 0xcb, 0xfd, 0x8e, 0x20, 0x69, 0x3b, 0x43, 0xc6, 0x83, 0x30, 0x3e,
+ 0x6c, 0x6e, 0x76, 0x9d, 0x61, 0x62, 0xf1, 0x93, 0xb9, 0xd0, 0x98, 0xde, 0x1a, 0xaa, 0x8b, 0x22,
+ 0x93, 0x7c, 0x6f, 0x7b, 0x5a, 0x77, 0x72, 0xce, 0x83, 0x33, 0xe1, 0x32, 0xf3, 0xec, 0xdc, 0xc9,
+ 0x87, 0x71, 0x90, 0x3d, 0x0a, 0xdf, 0x92, 0x40, 0xbe, 0xe9, 0xb8, 0xfe, 0xb8, 0x30, 0x48, 0xbb,
+ 0x05, 0xce, 0x48, 0xa0, 0x19, 0x3f, 0x07, 0xcd, 0x6e, 0x0b, 0x3c, 0xb9, 0xfc, 0x09, 0x84, 0xc1,
+ 0x3c, 0x0e, 0x16, 0x08, 0x27, 0xe1, 0x1d, 0x32, 0xff, 0x26, 0x91, 0xfe, 0xea, 0x7e, 0x51, 0x44,
+ 0xf0, 0x46, 0x48, 0xb8, 0x05, 0x1d, 0x80, 0xc2, 0xa5, 0x69, 0x6f, 0x64, 0x71, 0xa9, 0xf0, 0xb8,
+ 0x0c, 0x9a, 0x81, 0x87, 0xd7, 0xb0, 0x8c, 0xab, 0x67, 0x4a, 0x13, 0x51, 0x33, 0xa1, 0xf0, 0xec,
+ 0x11, 0x79, 0x48, 0x06, 0x45, 0xea, 0x02, 0x38, 0x56, 0x04, 0xd2, 0xb6, 0x8c, 0x50, 0x08, 0x62,
+ 0xae, 0x82, 0xf2, 0xb8, 0x5b, 0x46, 0x72, 0xf9, 0xd9, 0xe3, 0xf0, 0x1f, 0xd4, 0xb7, 0xb5, 0x74,
+ 0xd9, 0xb4, 0xba, 0xe6, 0xc5, 0x6e, 0x8a, 0x48, 0xd6, 0x1f, 0x4f, 0x79, 0x9a, 0x2f, 0xac, 0x2a,
+ 0x57, 0x5e, 0x8c, 0xc4, 0xbf, 0x0b, 0xcc, 0xb8, 0xdc, 0xde, 0x1f, 0xb2, 0xa2, 0xfa, 0xfc, 0x8a,
+ 0xe9, 0x7b, 0x23, 0xca, 0x99, 0xea, 0xe8, 0x9e, 0x10, 0x3f, 0x13, 0x39, 0x6a, 0x34, 0x5b, 0xea,
+ 0x74, 0x96, 0xa1, 0xe9, 0xef, 0xb9, 0xb0, 0x93, 0x6a, 0x88, 0x70, 0xfb, 0xb6, 0x47, 0x19, 0x49,
+ 0x70, 0xb1, 0x24, 0x6b, 0x3c, 0x3a, 0x4f, 0x19, 0xd2, 0x1b, 0x04, 0xbc, 0x8c, 0xa5, 0x4b, 0x7a,
+ 0x5b, 0x08, 0x49, 0x83, 0x83, 0xe4, 0x69, 0xa3, 0x31, 0x91, 0x3d, 0x20, 0x3f, 0x23, 0x83, 0x05,
+ 0x62, 0x27, 0x8c, 0x1b, 0x93, 0x0f, 0xa5, 0x74, 0x19, 0x62, 0x6e, 0xe9, 0x62, 0xd9, 0x19, 0x0b,
+ 0x2c, 0x69, 0x1c, 0x8c, 0xc4, 0xf8, 0xc8, 0x1e, 0x99, 0xe7, 0x9f, 0x00, 0x80, 0x71, 0x03, 0xfd,
+ 0x78, 0x31, 0x8a, 0xeb, 0xa8, 0xbd, 0x93, 0xce, 0x3f, 0x9a, 0x5c, 0x90, 0x71, 0xc6, 0xc5, 0x33,
+ 0xdc, 0xa0, 0xe2, 0x13, 0x85, 0x46, 0x95, 0xdf, 0x4b, 0x69, 0xf3, 0x52, 0x27, 0xcc, 0xa1, 0x83,
+ 0xfb, 0x88, 0xbd, 0xdc, 0x27, 0x52, 0x18, 0xbf, 0xc3, 0x58, 0x49, 0x87, 0x5a, 0x6d, 0x84, 0x99,
+ 0xfd, 0x69, 0x70, 0xd2, 0xd0, 0x4b, 0x95, 0x46, 0xbd, 0x76, 0x81, 0xbd, 0xb2, 0x49, 0x91, 0xd9,
+ 0xc9, 0x49, 0x26, 0xb0, 0xbd, 0x2e, 0x65, 0x1f, 0xc8, 0xcb, 0x2a, 0x69, 0xb6, 0xc2, 0x2c, 0xae,
+ 0x0c, 0xef, 0xd5, 0x04, 0xc8, 0x1e, 0x25, 0x0a, 0x5f, 0x2b, 0x82, 0x59, 0x03, 0xb6, 0x9d, 0xdd,
+ 0x5d, 0x68, 0x77, 0x60, 0x47, 0x7b, 0x9d, 0x0c, 0xe6, 0xc2, 0xfd, 0xbf, 0x26, 0xf4, 0xb5, 0xff,
+ 0x16, 0x61, 0x73, 0x16, 0xcc, 0xa1, 0xca, 0x35, 0xf8, 0xc0, 0xf1, 0x5c, 0x9a, 0x7a, 0x2b, 0x38,
+ 0x11, 0xa0, 0xd0, 0xe8, 0x9b, 0xc2, 0x1c, 0x7c, 0xa1, 0xbd, 0x97, 0xc5, 0x68, 0x83, 0xc7, 0xe8,
+ 0xde, 0x78, 0x61, 0x86, 0xec, 0x2e, 0xb2, 0xac, 0xc6, 0x80, 0xf5, 0x3b, 0x21, 0x58, 0xcf, 0xe2,
+ 0xc0, 0xaa, 0x1c, 0x92, 0xfe, 0x51, 0xa2, 0xf6, 0xcb, 0x32, 0x38, 0x19, 0x74, 0xc4, 0x93, 0x43,
+ 0xeb, 0x13, 0x2c, 0x5a, 0xdf, 0xcb, 0xa3, 0xb5, 0x22, 0x22, 0xcd, 0x41, 0x2c, 0xc7, 0xa0, 0xf6,
+ 0xc5, 0x10, 0xb5, 0xef, 0xe3, 0x50, 0xab, 0x8d, 0xa9, 0x9c, 0xa3, 0x44, 0xef, 0x43, 0x32, 0x38,
+ 0x8d, 0xcc, 0xce, 0xb2, 0x63, 0x6f, 0x75, 0xad, 0xb6, 0x6f, 0xd9, 0xdb, 0x91, 0x4b, 0xdb, 0x8a,
+ 0xc8, 0xca, 0x66, 0x3f, 0xb6, 0xd2, 0x41, 0x6c, 0xf9, 0x78, 0x1b, 0xa2, 0x6d, 0x2b, 0x8e, 0xad,
+ 0x98, 0x21, 0x8c, 0x71, 0xd6, 0x8e, 0x34, 0x87, 0x4d, 0x4a, 0xdf, 0xfa, 0x04, 0x39, 0x38, 0x4a,
+ 0xfc, 0x1e, 0x02, 0x8c, 0xe9, 0xf1, 0x42, 0x19, 0x28, 0xd8, 0x7f, 0x12, 0xf7, 0xec, 0xf4, 0x3e,
+ 0xd3, 0x06, 0xef, 0x59, 0xdf, 0x0b, 0x04, 0x14, 0x78, 0xd6, 0x07, 0x09, 0xea, 0x4d, 0x60, 0xa1,
+ 0xbd, 0x03, 0xdb, 0x97, 0xaa, 0x76, 0xe0, 0x9b, 0x44, 0x1c, 0x59, 0xfa, 0x52, 0xf9, 0xc1, 0xec,
+ 0x7e, 0x1e, 0x4c, 0x7e, 0xe1, 0x91, 0x9b, 0xd8, 0xb0, 0x4c, 0xc5, 0x34, 0xb4, 0xdf, 0x08, 0x01,
+ 0xaa, 0x73, 0x00, 0xdd, 0x35, 0x12, 0xd5, 0x74, 0xb0, 0xd4, 0x47, 0x80, 0x45, 0x03, 0xa7, 0x1a,
+ 0xeb, 0xad, 0x6a, 0xa3, 0xbe, 0xb9, 0xd1, 0xd4, 0x2b, 0x9b, 0x4b, 0x01, 0x38, 0x4d, 0x45, 0xd6,
+ 0xbe, 0x2a, 0x81, 0x29, 0xc2, 0x96, 0xa7, 0x3d, 0x3e, 0x82, 0x60, 0xe8, 0x91, 0x02, 0xed, 0xed,
+ 0xc2, 0x01, 0x82, 0x42, 0x41, 0xd0, 0x72, 0x62, 0x1a, 0xc6, 0x53, 0xc1, 0x14, 0x01, 0x39, 0xd8,
+ 0x05, 0x38, 0x13, 0x63, 0xd9, 0x51, 0x32, 0x46, 0x90, 0x5d, 0x30, 0x58, 0xd0, 0x10, 0x36, 0xb2,
+ 0xb7, 0xc6, 0x9f, 0x9b, 0x27, 0x4b, 0x07, 0xe7, 0x2d, 0x7f, 0x07, 0x9f, 0x38, 0xd0, 0x9e, 0x29,
+ 0xd2, 0x71, 0xdd, 0x0a, 0x0a, 0x97, 0x51, 0xee, 0x21, 0xa7, 0x37, 0x48, 0x26, 0xed, 0xe7, 0x85,
+ 0x63, 0x53, 0x73, 0xfa, 0x19, 0xf2, 0x14, 0x03, 0xce, 0x1a, 0xc8, 0x77, 0x2d, 0xcf, 0xa7, 0x36,
+ 0xf7, 0x9d, 0xa9, 0x08, 0x05, 0x7f, 0xaa, 0x3e, 0xdc, 0x35, 0x30, 0x19, 0xed, 0x3e, 0x64, 0x31,
+ 0x45, 0xa9, 0x02, 0x27, 0x58, 0x4e, 0x83, 0x29, 0x7a, 0xb2, 0x9a, 0x6e, 0x4b, 0x05, 0x8f, 0x82,
+ 0x5b, 0x41, 0x42, 0xb5, 0xcd, 0x5e, 0x07, 0xfe, 0x9f, 0xe3, 0x60, 0x6a, 0xd5, 0xf2, 0x7c, 0xc7,
+ 0xdd, 0xd7, 0x5e, 0x9f, 0x03, 0x53, 0xe7, 0xa0, 0xeb, 0x59, 0x8e, 0x7d, 0xc0, 0x5d, 0xeb, 0x7a,
+ 0x30, 0xdb, 0x73, 0xe1, 0x65, 0xcb, 0xd9, 0xf3, 0x98, 0x51, 0x82, 0x49, 0x52, 0x35, 0x30, 0x6d,
+ 0xee, 0xf9, 0x3b, 0x8e, 0x1b, 0x05, 0x64, 0x0a, 0x9e, 0xd5, 0x33, 0x00, 0x90, 0xff, 0x75, 0x73,
+ 0x17, 0x06, 0x77, 0xae, 0x47, 0x29, 0xaa, 0x0a, 0xf2, 0xbe, 0xb5, 0x0b, 0x69, 0x84, 0x76, 0xfc,
+ 0x1f, 0x09, 0x18, 0x47, 0x3b, 0xa5, 0x51, 0x65, 0x65, 0x23, 0x78, 0xd4, 0xfe, 0x50, 0x06, 0xb3,
+ 0x2b, 0xd0, 0xa7, 0xac, 0x7a, 0xda, 0x4b, 0x72, 0x42, 0x97, 0x22, 0xa1, 0x79, 0x49, 0xd7, 0xf4,
+ 0x82, 0xef, 0xc2, 0x21, 0x97, 0x4f, 0x8c, 0xc2, 0xc5, 0xcb, 0xec, 0x5d, 0x11, 0x38, 0x76, 0xa8,
+ 0x5f, 0x25, 0xce, 0xfc, 0x34, 0x33, 0xdd, 0x38, 0x3e, 0xf8, 0x82, 0xb7, 0x89, 0x13, 0xe3, 0x6e,
+ 0x50, 0xd9, 0x2f, 0x32, 0xf5, 0x89, 0xed, 0x8e, 0xa6, 0x2f, 0xd3, 0x1c, 0x07, 0xae, 0x01, 0x61,
+ 0x29, 0x51, 0x32, 0x46, 0x98, 0x5b, 0x30, 0x62, 0xc7, 0x70, 0x4e, 0x26, 0x70, 0xf1, 0xab, 0x0c,
+ 0x66, 0x9b, 0x3b, 0xce, 0x95, 0x40, 0x8e, 0xdf, 0x2b, 0x06, 0xec, 0xb5, 0x60, 0xe6, 0x72, 0x1f,
+ 0xa8, 0x51, 0x02, 0x7b, 0xd7, 0x9c, 0xcc, 0xdf, 0x35, 0xf7, 0x02, 0x39, 0x2d, 0x4c, 0x0c, 0x73,
+ 0x31, 0x30, 0xf1, 0xd7, 0xc3, 0x49, 0x29, 0xae, 0x87, 0x53, 0x9f, 0x02, 0xa6, 0x28, 0xd7, 0x74,
+ 0x99, 0x3a, 0x19, 0xe0, 0x20, 0x33, 0x5b, 0xc1, 0x3c, 0x5f, 0xc1, 0x74, 0xc8, 0xc7, 0x57, 0x2e,
+ 0x7b, 0xe4, 0x7f, 0x4b, 0xc2, 0xf1, 0x9a, 0x02, 0xe0, 0xcb, 0x63, 0x00, 0x5e, 0xfb, 0x66, 0x4e,
+ 0x74, 0x33, 0x27, 0x94, 0x40, 0xc8, 0xc1, 0xa1, 0x2e, 0x3c, 0x1b, 0x4a, 0x2e, 0x7b, 0x79, 0xbe,
+ 0x22, 0x0f, 0xe6, 0x2a, 0xd6, 0xd6, 0x56, 0xd8, 0x49, 0xbe, 0x54, 0xb0, 0x93, 0x8c, 0x77, 0xa9,
+ 0x42, 0x76, 0xee, 0x9e, 0xeb, 0x42, 0x3b, 0xa8, 0x14, 0x6d, 0x4e, 0x7d, 0xa9, 0xea, 0xcd, 0xe0,
+ 0x78, 0x30, 0x2e, 0xb0, 0x1d, 0xe5, 0x8c, 0xd1, 0x9f, 0xac, 0x7d, 0x5d, 0xd8, 0x13, 0x20, 0x90,
+ 0x28, 0x5b, 0xa5, 0x98, 0x06, 0x78, 0x37, 0x98, 0xdf, 0x21, 0xb9, 0xf1, 0x72, 0x69, 0xd0, 0x59,
+ 0x9e, 0xea, 0x8b, 0x87, 0xbf, 0x06, 0x3d, 0xcf, 0xdc, 0x86, 0x06, 0x9f, 0xb9, 0xaf, 0xf9, 0xca,
+ 0x69, 0x6e, 0x77, 0x14, 0x73, 0x2a, 0x10, 0xa8, 0x49, 0xf6, 0xda, 0xf1, 0xc5, 0xb3, 0x20, 0xbf,
+ 0x6c, 0x75, 0xa1, 0xf6, 0x23, 0x12, 0x98, 0x41, 0xb3, 0x6e, 0xbb, 0x8d, 0x9e, 0x18, 0x07, 0xcb,
+ 0xaf, 0xe5, 0x44, 0x6f, 0x35, 0x46, 0x74, 0x16, 0x43, 0x1a, 0x31, 0xed, 0x46, 0xec, 0xf6, 0xe2,
+ 0x44, 0x52, 0x13, 0xb8, 0x83, 0x0a, 0x4d, 0x3d, 0xb6, 0xb6, 0xba, 0x8e, 0xc9, 0x6d, 0x18, 0xf4,
+ 0x9b, 0x42, 0xd1, 0xa1, 0xc0, 0xba, 0xe3, 0xaf, 0x5b, 0xb6, 0x1d, 0xc6, 0xd9, 0x38, 0x90, 0xce,
+ 0xfb, 0xba, 0x24, 0x86, 0x2a, 0xc3, 0x75, 0xa7, 0xa5, 0xc7, 0x68, 0xf6, 0x4d, 0x60, 0xe1, 0xe2,
+ 0xbe, 0x0f, 0x3d, 0x9a, 0x8b, 0x16, 0x9b, 0x37, 0xfa, 0x52, 0x99, 0x8b, 0x06, 0x92, 0x42, 0x9a,
+ 0x25, 0x14, 0x98, 0x4e, 0xd4, 0xab, 0x23, 0xcc, 0x00, 0x4f, 0x02, 0xa5, 0xde, 0xa8, 0xe8, 0xd8,
+ 0xdf, 0x37, 0xf0, 0xa0, 0xdc, 0xd6, 0x7e, 0x52, 0x06, 0x73, 0xd8, 0x01, 0x2f, 0x40, 0xe1, 0x06,
+ 0x81, 0xf9, 0x88, 0xf6, 0x65, 0x61, 0x5f, 0x60, 0x5c, 0x65, 0xb6, 0x80, 0x78, 0x41, 0x6f, 0x59,
+ 0xdd, 0x7e, 0x41, 0x17, 0x8c, 0xbe, 0xd4, 0x01, 0x80, 0xc8, 0x03, 0x01, 0xf9, 0x65, 0x21, 0x87,
+ 0xe0, 0x61, 0xdc, 0x1d, 0x15, 0x2a, 0xbf, 0x22, 0x83, 0x59, 0x34, 0x49, 0x09, 0x40, 0x69, 0x70,
+ 0xa0, 0x38, 0x76, 0x77, 0x3f, 0x5a, 0x16, 0x09, 0x1e, 0x53, 0x35, 0x92, 0x3f, 0x12, 0x9e, 0xb9,
+ 0x63, 0x11, 0x31, 0xbc, 0x4c, 0x08, 0xbf, 0x0f, 0x0a, 0xcd, 0xe7, 0x87, 0x30, 0x77, 0x54, 0xf0,
+ 0x3d, 0x5c, 0x04, 0xc5, 0x8d, 0x1e, 0x46, 0xee, 0x4b, 0xb2, 0xc8, 0xa5, 0x1d, 0x07, 0x0e, 0x83,
+ 0x21, 0x33, 0xab, 0xeb, 0xb4, 0xcd, 0xee, 0x7a, 0x74, 0xaa, 0x36, 0x4a, 0x50, 0xef, 0xa2, 0xfe,
+ 0xe1, 0xe4, 0xc4, 0xf9, 0x4d, 0x89, 0xf7, 0x59, 0x60, 0x19, 0x31, 0x07, 0xef, 0x6e, 0x05, 0x27,
+ 0x3a, 0x96, 0x67, 0x5e, 0xec, 0x42, 0xdd, 0x6e, 0xbb, 0xfb, 0x44, 0x1c, 0x74, 0x5a, 0x75, 0xe0,
+ 0x85, 0x7a, 0x0f, 0x28, 0x78, 0xfe, 0x7e, 0x97, 0xcc, 0x13, 0xd9, 0x73, 0x7a, 0xb1, 0x45, 0x35,
+ 0x51, 0x76, 0x83, 0x7c, 0xc5, 0xba, 0x75, 0x4e, 0x89, 0xb9, 0x75, 0xaa, 0x4f, 0x02, 0x45, 0xc7,
+ 0xb5, 0xb6, 0x2d, 0x72, 0x45, 0xdd, 0xc2, 0x81, 0xb0, 0xad, 0xc4, 0x14, 0x68, 0xe0, 0x2c, 0x06,
+ 0xcd, 0xaa, 0x3e, 0x05, 0xcc, 0x58, 0xbb, 0xe6, 0x36, 0xbc, 0xdf, 0xb2, 0xc9, 0xa1, 0xf6, 0x85,
+ 0x3b, 0x4e, 0x1f, 0x38, 0x82, 0x48, 0xdf, 0x1b, 0x51, 0x56, 0xf5, 0x6e, 0x70, 0x4d, 0xdb, 0x85,
+ 0xa6, 0x0f, 0x91, 0x80, 0xce, 0x5b, 0x9d, 0x6d, 0xe8, 0x57, 0xb7, 0xd6, 0x2c, 0xcf, 0xb3, 0xec,
+ 0x6d, 0x7a, 0x0b, 0x65, 0x7c, 0x06, 0xed, 0x83, 0x92, 0x68, 0x64, 0x3a, 0x2c, 0x19, 0xa2, 0x12,
+ 0x23, 0xdc, 0x96, 0xcd, 0x48, 0x51, 0x16, 0x74, 0x8e, 0x7d, 0xb5, 0x50, 0xcc, 0xb8, 0x78, 0xb6,
+ 0xb2, 0x1f, 0xfa, 0x7f, 0x5f, 0x02, 0xd3, 0x15, 0xe7, 0x8a, 0x8d, 0x9b, 0xc9, 0x9d, 0x62, 0x96,
+ 0xf2, 0x80, 0x63, 0xe6, 0xfc, 0xbd, 0xcb, 0x89, 0x67, 0xca, 0x70, 0x6d, 0x83, 0x22, 0x63, 0x60,
+ 0x48, 0x6c, 0x77, 0x82, 0xb7, 0xe1, 0x26, 0x95, 0x93, 0xbd, 0x5c, 0x7f, 0x5b, 0x06, 0xf9, 0x8a,
+ 0xeb, 0xf4, 0xb4, 0xb7, 0xe5, 0x52, 0x38, 0x89, 0x75, 0x5c, 0xa7, 0xd7, 0xc2, 0xd7, 0x59, 0x46,
+ 0xfb, 0x22, 0x6c, 0x9a, 0x7a, 0x27, 0x98, 0xee, 0x39, 0x9e, 0xe5, 0x07, 0x93, 0x90, 0x85, 0x3b,
+ 0x1e, 0x33, 0xb0, 0x2f, 0x58, 0xa7, 0x99, 0x8c, 0x30, 0x3b, 0xea, 0xf3, 0xb1, 0x08, 0x91, 0x5c,
+ 0x90, 0x18, 0x83, 0x2b, 0x3d, 0xfb, 0x52, 0xb5, 0x97, 0xb1, 0x48, 0x3e, 0x8d, 0x47, 0xf2, 0xb1,
+ 0x03, 0x24, 0xec, 0x3a, 0xbd, 0xb1, 0xb8, 0x75, 0xbc, 0x32, 0x44, 0xf5, 0xe9, 0x1c, 0xaa, 0xb7,
+ 0x08, 0x95, 0x99, 0x3d, 0xa2, 0x1f, 0xcc, 0x03, 0x80, 0x8d, 0x94, 0x0d, 0x34, 0x7d, 0x12, 0xb3,
+ 0xd0, 0x7e, 0x38, 0xcf, 0xc8, 0xb2, 0xc4, 0xcb, 0xf2, 0xf1, 0x31, 0x36, 0x10, 0x26, 0x1f, 0x23,
+ 0xd1, 0x12, 0x28, 0xec, 0xa1, 0xd7, 0x54, 0xa2, 0x82, 0x24, 0xf0, 0xa3, 0x41, 0xbe, 0xd4, 0x7e,
+ 0x2b, 0x07, 0x0a, 0x38, 0x41, 0x3d, 0x03, 0x00, 0x36, 0x0b, 0xc8, 0x91, 0xcc, 0x1c, 0x36, 0x00,
+ 0x98, 0x14, 0xac, 0xad, 0x56, 0x87, 0xbe, 0x26, 0x06, 0x77, 0x94, 0x80, 0xbe, 0xc6, 0xc6, 0x02,
+ 0xa6, 0x45, 0xcd, 0x07, 0x26, 0x05, 0x7d, 0x8d, 0x9f, 0x6a, 0x70, 0x8b, 0xdc, 0x34, 0x90, 0x37,
+ 0xa2, 0x84, 0xf0, 0xeb, 0x5a, 0x78, 0x3f, 0x65, 0xf0, 0x35, 0x4e, 0x41, 0x53, 0x69, 0xac, 0x96,
+ 0x4b, 0x51, 0x11, 0x45, 0x9c, 0xa9, 0x3f, 0x59, 0x7b, 0x5d, 0xa8, 0x36, 0x15, 0x4e, 0x6d, 0x6e,
+ 0x4f, 0x21, 0xde, 0xec, 0x95, 0xe7, 0x4f, 0x0b, 0x60, 0xa6, 0xee, 0x74, 0xa8, 0xee, 0x30, 0xd3,
+ 0xcd, 0x4f, 0x15, 0x52, 0x4d, 0x37, 0x43, 0x1a, 0x31, 0x0a, 0xf2, 0x0c, 0x5e, 0x41, 0xc4, 0x28,
+ 0xb0, 0xfa, 0xa1, 0x2e, 0x81, 0x22, 0xd6, 0xde, 0x83, 0x17, 0x1f, 0x26, 0x91, 0xc0, 0xa2, 0x35,
+ 0xe8, 0x97, 0xff, 0xe9, 0x74, 0xec, 0x7f, 0x80, 0x02, 0xae, 0x60, 0xc2, 0xde, 0x10, 0x5f, 0x51,
+ 0x29, 0xb9, 0xa2, 0x72, 0x72, 0x45, 0xf3, 0xfd, 0x15, 0x4d, 0xb3, 0x8a, 0x10, 0xa7, 0x21, 0xd9,
+ 0xeb, 0xf8, 0xdf, 0x4e, 0x01, 0x50, 0x37, 0x2f, 0x5b, 0xdb, 0x64, 0x6f, 0xf9, 0x0f, 0x83, 0xd9,
+ 0x13, 0xdd, 0x05, 0xfe, 0x31, 0x66, 0x20, 0xbc, 0x13, 0x4c, 0xd1, 0x71, 0x8f, 0x56, 0xe4, 0x3a,
+ 0xae, 0x22, 0x11, 0x15, 0x62, 0xd4, 0x3e, 0xe8, 0x1b, 0x41, 0x7e, 0xee, 0x8e, 0x76, 0xa9, 0xef,
+ 0x8e, 0xf6, 0xc1, 0x3b, 0x18, 0x31, 0x37, 0xb7, 0x6b, 0xef, 0x13, 0x3e, 0x43, 0xc5, 0xf0, 0xc3,
+ 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x09, 0x4c, 0x39, 0xe1, 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb5,
+ 0xb7, 0x1c, 0x23, 0xc8, 0x29, 0xb8, 0x75, 0x26, 0xc4, 0xc7, 0x44, 0x8e, 0x29, 0x9e, 0x5a, 0x09,
+ 0xa2, 0x36, 0xa2, 0x7a, 0x9c, 0xb7, 0xfc, 0x9d, 0x9a, 0x65, 0x5f, 0xf2, 0xb4, 0xef, 0x13, 0xb3,
+ 0x20, 0x19, 0xfc, 0xa5, 0x74, 0xf8, 0xf3, 0x51, 0x93, 0x9a, 0x3c, 0x6a, 0xf7, 0xc4, 0x51, 0x19,
+ 0xcc, 0x6d, 0x0c, 0x80, 0x77, 0x81, 0x22, 0x61, 0x94, 0x76, 0xa2, 0x67, 0x63, 0xf1, 0x0b, 0x29,
+ 0x19, 0xf4, 0x0b, 0xed, 0xbd, 0x21, 0x8e, 0xe7, 0x38, 0x1c, 0x97, 0x0e, 0xc5, 0x59, 0xe6, 0x90,
+ 0x9e, 0x7d, 0x22, 0x98, 0xa2, 0x92, 0x56, 0x17, 0xd8, 0x56, 0xac, 0x1c, 0x53, 0x01, 0x28, 0xae,
+ 0x39, 0x97, 0x61, 0xcb, 0x51, 0x72, 0xe8, 0x3f, 0xe2, 0xaf, 0xe5, 0x28, 0x92, 0xf6, 0xaa, 0x69,
+ 0x30, 0x1d, 0x86, 0xcb, 0xfb, 0x7d, 0x09, 0x28, 0x65, 0x3c, 0x43, 0x5b, 0x76, 0x9d, 0x5d, 0x52,
+ 0x23, 0x71, 0x7f, 0xfc, 0x9f, 0x11, 0x76, 0x10, 0x09, 0xc3, 0xd8, 0xf5, 0x17, 0x16, 0x83, 0x25,
+ 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42, 0x0e, 0x23, 0xa2, 0xa5, 0x64, 0xdf, 0xd4,
+ 0x3e, 0x2b, 0x81, 0x42, 0xb9, 0xeb, 0xd8, 0x90, 0x3d, 0x34, 0x3a, 0xf4, 0x74, 0xe2, 0xe0, 0x7d,
+ 0x0c, 0xed, 0xb9, 0x92, 0xa8, 0xad, 0x11, 0x09, 0x00, 0x95, 0x2d, 0x28, 0x5b, 0xb1, 0x41, 0x2a,
+ 0x91, 0x74, 0xf6, 0x02, 0xfd, 0xaa, 0x04, 0x66, 0x48, 0x64, 0xb2, 0x52, 0xb7, 0xab, 0x3d, 0x26,
+ 0x12, 0xea, 0x80, 0x90, 0x83, 0xda, 0x2f, 0x0b, 0x1f, 0x8a, 0x0a, 0x6b, 0x15, 0xd2, 0x4e, 0x11,
+ 0xa2, 0x2d, 0xdd, 0x19, 0x1d, 0xb1, 0x9d, 0xb8, 0xa1, 0x0c, 0x65, 0x2f, 0xea, 0x3f, 0x90, 0x90,
+ 0x01, 0x60, 0x5f, 0x5a, 0x77, 0xe1, 0x65, 0x0b, 0x5e, 0xd1, 0x1e, 0x1d, 0x09, 0xfb, 0x60, 0xd8,
+ 0xa5, 0x37, 0x09, 0x2f, 0xe2, 0x30, 0x24, 0x63, 0x37, 0xc2, 0x66, 0xbb, 0x51, 0x26, 0xda, 0x8b,
+ 0xf7, 0xc7, 0xc2, 0x62, 0xc8, 0x18, 0x6c, 0x76, 0xc1, 0x35, 0x9b, 0x78, 0x2e, 0xb2, 0x17, 0xec,
+ 0xaf, 0x4e, 0x81, 0xe9, 0x0d, 0xdb, 0xeb, 0x75, 0x4d, 0x6f, 0x47, 0xfb, 0x37, 0x19, 0x14, 0xc9,
+ 0x75, 0x9b, 0xda, 0x77, 0x71, 0xd1, 0x5d, 0x9e, 0xbd, 0x07, 0xdd, 0xc0, 0x81, 0x87, 0x3c, 0x44,
+ 0xf6, 0x91, 0xc4, 0xd8, 0x47, 0xda, 0x07, 0x65, 0xd1, 0x49, 0x6a, 0x50, 0x28, 0xbd, 0xdf, 0x33,
+ 0x3e, 0xa0, 0x48, 0xcf, 0x6a, 0xfb, 0x7b, 0x2e, 0xf4, 0x06, 0x06, 0x14, 0x89, 0xa5, 0xb2, 0x4e,
+ 0xbe, 0x32, 0xc2, 0xcf, 0x35, 0x13, 0x4c, 0xd1, 0xc4, 0x03, 0x9b, 0x51, 0x07, 0x23, 0x1e, 0x9c,
+ 0x02, 0x45, 0xd3, 0xf5, 0x2d, 0xcf, 0xa7, 0xdb, 0xb3, 0xf4, 0x09, 0x75, 0x97, 0xe4, 0xdf, 0x86,
+ 0xdb, 0x0d, 0xe2, 0x40, 0x85, 0x09, 0xda, 0xaf, 0x08, 0xcd, 0x1f, 0x93, 0x6b, 0x9e, 0x0e, 0xf2,
+ 0xfb, 0x47, 0x58, 0xe1, 0x7e, 0x14, 0xb8, 0xca, 0x28, 0xb5, 0xf4, 0x4d, 0x12, 0x36, 0x28, 0x8c,
+ 0x10, 0xd4, 0xd1, 0xde, 0x23, 0x33, 0xeb, 0x77, 0xfb, 0xdc, 0x18, 0x41, 0xa5, 0x18, 0x8d, 0x11,
+ 0x61, 0x42, 0xc2, 0x5e, 0x37, 0xb7, 0x84, 0x2b, 0x0b, 0x2f, 0xe1, 0x6a, 0xbf, 0x24, 0xbc, 0x17,
+ 0x15, 0x8a, 0x72, 0xc8, 0x1a, 0x60, 0xd2, 0x75, 0x7c, 0x1f, 0x16, 0xda, 0x57, 0x1a, 0x56, 0xd2,
+ 0x11, 0xc2, 0xf6, 0xcd, 0x53, 0x40, 0x2a, 0x55, 0xb5, 0x1f, 0x9d, 0x02, 0x73, 0xe7, 0x5d, 0xcb,
+ 0xb7, 0xec, 0xed, 0x96, 0xe3, 0x74, 0x3d, 0xed, 0x1b, 0xcc, 0x46, 0xc5, 0x53, 0x40, 0xb1, 0xed,
+ 0xd8, 0x5b, 0xd6, 0x36, 0x15, 0xe3, 0x19, 0xae, 0x72, 0xa5, 0xea, 0xe2, 0xba, 0xeb, 0x5c, 0xb6,
+ 0x3a, 0xd0, 0x2d, 0xe3, 0x5c, 0x06, 0xcd, 0x8d, 0xf4, 0x98, 0x09, 0xbc, 0x76, 0x7b, 0xff, 0x57,
+ 0x6c, 0x79, 0x61, 0xe4, 0x17, 0x9a, 0xc8, 0xc4, 0x5d, 0xab, 0x82, 0xe9, 0xae, 0x69, 0x6f, 0xef,
+ 0x05, 0x33, 0xef, 0xfe, 0x5d, 0xd4, 0x38, 0x4a, 0x35, 0xfa, 0x91, 0x11, 0x7e, 0x8e, 0x9d, 0xdc,
+ 0x90, 0xa9, 0x4f, 0xda, 0x1e, 0xfe, 0x7f, 0xf6, 0xa3, 0x39, 0x30, 0xcb, 0x14, 0xaa, 0xce, 0x82,
+ 0xa9, 0x8a, 0xbe, 0x5c, 0xda, 0xa8, 0xb5, 0x94, 0x63, 0x48, 0x8a, 0xcd, 0x8d, 0xb5, 0xb5, 0x92,
+ 0x51, 0xfd, 0x1e, 0x5d, 0xc9, 0xa1, 0x77, 0x2b, 0x46, 0x09, 0x3d, 0x2b, 0x12, 0x7a, 0x68, 0xae,
+ 0x36, 0x8c, 0x96, 0x5e, 0x57, 0x64, 0x64, 0x8f, 0xea, 0xcf, 0x5a, 0x2f, 0xd5, 0x2b, 0x4a, 0x1e,
+ 0xfd, 0x5f, 0xda, 0xa8, 0xd5, 0xf4, 0x96, 0x52, 0x88, 0x42, 0xb1, 0x15, 0x51, 0x72, 0xb9, 0xd4,
+ 0xdc, 0x28, 0xd5, 0x94, 0x29, 0x94, 0xbc, 0xbc, 0x51, 0xaf, 0x5f, 0x50, 0xa6, 0x51, 0x11, 0xe5,
+ 0x46, 0x7d, 0xb9, 0x5a, 0xd1, 0xeb, 0x2d, 0x65, 0x46, 0xbd, 0x0a, 0x1c, 0x6f, 0xb6, 0x8c, 0x52,
+ 0x75, 0x65, 0xb5, 0xb5, 0xdc, 0x30, 0xce, 0x97, 0x8c, 0x8a, 0x02, 0x54, 0x05, 0xcc, 0xad, 0x1b,
+ 0x8d, 0x65, 0x1d, 0xc7, 0xf2, 0x28, 0xd5, 0x94, 0x59, 0xf4, 0x55, 0xcb, 0x28, 0xd5, 0x9b, 0xb5,
+ 0x52, 0x4b, 0x57, 0xe6, 0xce, 0xde, 0x07, 0xa6, 0x83, 0xea, 0xaa, 0x45, 0x20, 0xe9, 0x75, 0xe5,
+ 0x18, 0xfe, 0x6d, 0x2a, 0x39, 0xf4, 0xbb, 0x8c, 0xf8, 0x2d, 0x02, 0xa9, 0xa2, 0x2b, 0x32, 0xfa,
+ 0xad, 0xb6, 0x94, 0x3c, 0xfa, 0x5d, 0x47, 0x2c, 0x16, 0x81, 0xb4, 0x5a, 0x55, 0x8a, 0xe8, 0xb7,
+ 0xb5, 0xaa, 0x4c, 0xf1, 0xb7, 0x6e, 0x27, 0xf6, 0xc2, 0x07, 0x25, 0x1f, 0x63, 0x68, 0xf8, 0xd1,
+ 0x1c, 0x19, 0xff, 0xd7, 0x5e, 0x29, 0x89, 0xf4, 0x75, 0xc9, 0xf4, 0xd3, 0x35, 0x9a, 0xb7, 0xe4,
+ 0xc6, 0xd8, 0x6a, 0x54, 0x0d, 0x9c, 0xd2, 0xeb, 0x95, 0xf5, 0x46, 0xb5, 0xde, 0x22, 0x01, 0xb3,
+ 0xf4, 0x52, 0x79, 0x15, 0xe3, 0x0c, 0x11, 0x82, 0x6b, 0x8d, 0x8a, 0x5e, 0xc3, 0x2f, 0x96, 0x1b,
+ 0x1b, 0xf5, 0x8a, 0xb2, 0x85, 0xca, 0x2a, 0x6d, 0xb4, 0x56, 0x37, 0x0d, 0xfd, 0x99, 0x1b, 0x55,
+ 0x43, 0xaf, 0x28, 0xdb, 0x88, 0x46, 0xad, 0x54, 0x5f, 0xd9, 0x28, 0xad, 0xd0, 0xfd, 0xc2, 0x8d,
+ 0xf5, 0xf5, 0x06, 0xde, 0x31, 0xdc, 0xd1, 0xfe, 0x21, 0x0f, 0xa6, 0x4b, 0x7b, 0xbe, 0xb3, 0x65,
+ 0x75, 0xbb, 0xda, 0x43, 0xd2, 0xe1, 0x9b, 0x62, 0x89, 0x6b, 0x8a, 0x07, 0x1a, 0x50, 0x50, 0x56,
+ 0xd8, 0x78, 0x82, 0x04, 0xa6, 0x1d, 0x9e, 0x8e, 0x9c, 0xb1, 0x65, 0xba, 0xd3, 0x4c, 0x1e, 0x89,
+ 0x23, 0xae, 0x4d, 0x5b, 0x16, 0x7e, 0x43, 0x1f, 0xcf, 0xde, 0x0f, 0xe6, 0x58, 0x4a, 0x38, 0xa8,
+ 0x54, 0x69, 0x85, 0x44, 0x9d, 0x0a, 0xe2, 0xcc, 0x91, 0xa8, 0x53, 0xf8, 0x50, 0x80, 0x84, 0xdb,
+ 0x4b, 0xb5, 0x55, 0x43, 0x7a, 0x7a, 0x1c, 0xcc, 0x56, 0xf4, 0x66, 0xd9, 0xa8, 0x62, 0x3f, 0x75,
+ 0x25, 0xcf, 0x7b, 0x19, 0x24, 0x5a, 0x66, 0x7c, 0x8d, 0x44, 0x95, 0xf2, 0x5b, 0x42, 0xf6, 0x56,
+ 0x3c, 0xed, 0x74, 0x0a, 0xf9, 0x92, 0x47, 0x9a, 0x42, 0x6a, 0x2f, 0xc9, 0x93, 0x75, 0xb2, 0xe6,
+ 0xde, 0xee, 0xae, 0xe9, 0xee, 0x73, 0xfe, 0x6a, 0xa3, 0xea, 0x5d, 0xfc, 0xf8, 0x9e, 0x18, 0xa1,
+ 0x06, 0x99, 0x50, 0x3d, 0xd7, 0xd9, 0xed, 0x05, 0x7d, 0x35, 0x7d, 0xd2, 0xfe, 0x2f, 0xe1, 0x99,
+ 0x63, 0xa9, 0xba, 0xc8, 0x54, 0x66, 0x84, 0xa1, 0xfd, 0x07, 0x24, 0x91, 0x59, 0x64, 0x62, 0x31,
+ 0xdf, 0xee, 0x1a, 0xf1, 0x37, 0x79, 0x70, 0x15, 0x8d, 0x3e, 0x12, 0xae, 0x3f, 0x20, 0x53, 0xf5,
+ 0x35, 0x99, 0x6a, 0x06, 0x35, 0xa8, 0xe5, 0xc8, 0xa0, 0x66, 0x36, 0xbc, 0xf3, 0x82, 0x1b, 0xde,
+ 0x6f, 0x13, 0x3e, 0xf4, 0x50, 0xaa, 0x2e, 0x0e, 0xa8, 0xe3, 0x64, 0xb6, 0xe5, 0x5f, 0x20, 0x89,
+ 0xac, 0xb6, 0x0a, 0x71, 0xf8, 0xed, 0xae, 0x6b, 0xef, 0xc8, 0x81, 0x05, 0x5e, 0x55, 0xd4, 0x27,
+ 0x83, 0xe9, 0x1e, 0x4d, 0xa1, 0x72, 0x39, 0x1d, 0xa7, 0x5c, 0x46, 0x98, 0x13, 0x41, 0x04, 0xed,
+ 0x4e, 0xcf, 0xb1, 0xec, 0x70, 0x5d, 0x3e, 0x78, 0x46, 0xf3, 0x4e, 0x3c, 0x75, 0x08, 0x62, 0xd1,
+ 0xe1, 0x87, 0x28, 0x02, 0x69, 0x9e, 0x89, 0x40, 0x8a, 0x84, 0xe8, 0xc3, 0x5d, 0x7c, 0xa3, 0xca,
+ 0x9e, 0x4b, 0x1c, 0x5e, 0x24, 0x83, 0x4d, 0x3a, 0xfb, 0x74, 0x30, 0x1d, 0x94, 0x8f, 0xac, 0xbb,
+ 0x46, 0xad, 0x56, 0x5a, 0x2b, 0x91, 0x85, 0xca, 0xc6, 0xba, 0x5e, 0x2f, 0x55, 0x95, 0x1c, 0x1a,
+ 0xe8, 0x6a, 0x6b, 0xcd, 0xd6, 0x46, 0xa5, 0xda, 0x50, 0x24, 0xfc, 0x84, 0x32, 0x95, 0xd7, 0xd7,
+ 0x15, 0x59, 0x7b, 0xe3, 0x14, 0x98, 0x5a, 0x31, 0xbb, 0x5d, 0xe8, 0xee, 0x6b, 0x5f, 0x95, 0x80,
+ 0x12, 0xcc, 0x0e, 0xd6, 0x4c, 0xdb, 0xda, 0x82, 0x9e, 0x9f, 0xbc, 0x50, 0xf1, 0x3e, 0xe1, 0x6b,
+ 0x96, 0x68, 0x19, 0x8b, 0xfd, 0xf4, 0x63, 0x74, 0xfc, 0x36, 0x90, 0xb7, 0xec, 0x2d, 0x87, 0x2e,
+ 0x57, 0xf4, 0xfb, 0xdb, 0x04, 0x1f, 0xe3, 0x6d, 0x03, 0x9c, 0x51, 0xf0, 0xa6, 0x25, 0x41, 0x2e,
+ 0xb2, 0x5f, 0xb5, 0x78, 0x47, 0x1e, 0xcc, 0x07, 0x4c, 0x54, 0xed, 0x0e, 0x7c, 0x90, 0xdd, 0x06,
+ 0xfd, 0xc9, 0xbc, 0x68, 0xf0, 0x9b, 0xfe, 0xfa, 0x60, 0x52, 0x31, 0x22, 0x6d, 0x01, 0xd0, 0x36,
+ 0x7d, 0xb8, 0xed, 0xb8, 0x56, 0xb8, 0x16, 0xf1, 0xe4, 0x34, 0xd4, 0xca, 0xe4, 0xeb, 0x7d, 0x83,
+ 0xa1, 0xa3, 0xde, 0x03, 0x66, 0x61, 0x18, 0x6d, 0x30, 0xd8, 0x26, 0x4d, 0xc4, 0x8b, 0xcd, 0xaf,
+ 0xfd, 0x81, 0x50, 0x8c, 0x1d, 0x91, 0x6a, 0xa6, 0xc3, 0x6c, 0x73, 0xb4, 0xae, 0x67, 0xa3, 0xbe,
+ 0x56, 0x32, 0x9a, 0xab, 0xa5, 0x5a, 0xad, 0x5a, 0x5f, 0x09, 0xc3, 0xde, 0xaa, 0x60, 0xa1, 0xd2,
+ 0x38, 0x5f, 0x67, 0xe2, 0x12, 0xe7, 0xb5, 0x75, 0x30, 0x1d, 0xc8, 0x6b, 0xd0, 0x29, 0x2a, 0x56,
+ 0x66, 0xf4, 0x14, 0x15, 0x93, 0x84, 0x4c, 0x43, 0xab, 0x1d, 0xba, 0xd6, 0xe3, 0xff, 0xda, 0x6f,
+ 0x9a, 0xa0, 0x80, 0xfd, 0x59, 0xb4, 0x77, 0xe1, 0x79, 0x71, 0xaf, 0x6b, 0xb6, 0xa1, 0xb6, 0x9b,
+ 0x62, 0x25, 0x3c, 0xb8, 0xf7, 0x53, 0x3a, 0x70, 0xef, 0x27, 0xfe, 0x4b, 0x47, 0x8c, 0x93, 0x83,
+ 0x7c, 0x68, 0x0c, 0x92, 0x85, 0x0f, 0x47, 0x93, 0xe8, 0xd9, 0x44, 0x5c, 0x6f, 0x28, 0x9b, 0x31,
+ 0x2a, 0x19, 0xcf, 0x53, 0xba, 0x55, 0x60, 0x31, 0x1f, 0xa8, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f,
+ 0xca, 0x83, 0x42, 0xb3, 0xd7, 0xb5, 0x7c, 0xed, 0xe7, 0xa4, 0xb1, 0x60, 0x46, 0xee, 0x6a, 0x95,
+ 0x87, 0xde, 0xd5, 0x1a, 0xf9, 0x4b, 0xe6, 0x05, 0xfc, 0x25, 0x5b, 0xf0, 0x41, 0x9f, 0xf7, 0x97,
+ 0xbc, 0x93, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0x63, 0x07, 0x88, 0x14, 0x57, 0x6b, 0xc0, 0x9d, 0x08,
+ 0x67, 0x9f, 0x48, 0x43, 0xb3, 0x03, 0x50, 0x5c, 0x6a, 0xb4, 0x5a, 0x8d, 0x35, 0xe5, 0x18, 0x9e,
+ 0x7e, 0x35, 0xd6, 0x49, 0xa0, 0xdc, 0x6a, 0xbd, 0xae, 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0xb8, 0x2f,
+ 0x71, 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d, 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd,
+ 0xb4, 0x0c, 0x0a, 0x6b, 0xd0, 0xdd, 0x86, 0xda, 0xb3, 0x53, 0x38, 0xd8, 0x6d, 0x59, 0xae, 0x47,
+ 0x42, 0xeb, 0x47, 0x0e, 0x76, 0x6c, 0x9a, 0x7a, 0x23, 0x98, 0xf7, 0x60, 0xdb, 0xb1, 0x3b, 0x41,
+ 0x26, 0xd2, 0x1f, 0xf1, 0x89, 0xda, 0xcb, 0x53, 0x42, 0x86, 0x19, 0x1d, 0x8b, 0x97, 0x5c, 0x1a,
+ 0x60, 0x06, 0x95, 0x9a, 0x3d, 0x30, 0x5f, 0x97, 0xd1, 0x47, 0xbd, 0x7d, 0xed, 0xe5, 0xc2, 0x9e,
+ 0x8f, 0xb7, 0x82, 0xe2, 0xc5, 0xe0, 0x8e, 0x26, 0x39, 0xb6, 0x3f, 0xa6, 0x79, 0xd4, 0x25, 0x70,
+ 0xc2, 0x83, 0x5d, 0xd8, 0xf6, 0x61, 0x07, 0x35, 0x5d, 0x63, 0x68, 0xa7, 0x70, 0x30, 0xbb, 0xf6,
+ 0x3b, 0x2c, 0x80, 0x77, 0xf3, 0x00, 0xde, 0x34, 0x40, 0x94, 0xa8, 0x42, 0xf1, 0x73, 0x13, 0x54,
+ 0x8d, 0x66, 0xd7, 0x09, 0x0d, 0xdf, 0xe0, 0x19, 0xbd, 0xdb, 0xf1, 0x77, 0xbb, 0xf8, 0x1d, 0x3d,
+ 0x1a, 0x1c, 0x3c, 0xab, 0x8b, 0x60, 0xca, 0xb4, 0xf7, 0xf1, 0xab, 0x7c, 0x42, 0xad, 0x83, 0x4c,
+ 0xda, 0xab, 0x42, 0xe4, 0xef, 0xe5, 0x90, 0x7f, 0xbc, 0x18, 0xbb, 0xd9, 0x03, 0xff, 0x43, 0x53,
+ 0xa0, 0xb0, 0x6e, 0x7a, 0x3e, 0xd4, 0xfe, 0xb7, 0x2c, 0x8a, 0xfc, 0x4d, 0x60, 0x61, 0xcb, 0x69,
+ 0xef, 0x79, 0xb0, 0xc3, 0x37, 0xca, 0xbe, 0xd4, 0x71, 0x60, 0xae, 0xde, 0x02, 0x94, 0x20, 0x91,
+ 0x92, 0x0d, 0x5c, 0x60, 0x0f, 0xa4, 0xe3, 0x6b, 0xe0, 0xbc, 0x75, 0xd3, 0xf5, 0x1b, 0x5b, 0x38,
+ 0x2d, 0xbc, 0x06, 0x8e, 0x4d, 0xe4, 0xa0, 0x2f, 0x26, 0x40, 0x3f, 0x15, 0x0f, 0xfd, 0xb4, 0x00,
+ 0xf4, 0x6a, 0x09, 0x4c, 0x6f, 0x59, 0x5d, 0x88, 0x3f, 0x98, 0xc1, 0x1f, 0x0c, 0x1a, 0x93, 0xb0,
+ 0xec, 0xc3, 0x31, 0x69, 0xd9, 0xea, 0x42, 0x23, 0xfc, 0x2c, 0x98, 0xc8, 0x80, 0x68, 0x22, 0x53,
+ 0x23, 0x27, 0xe1, 0x90, 0xe1, 0x65, 0x9b, 0xbb, 0x30, 0xd8, 0xf8, 0xb6, 0xe9, 0xb1, 0xf4, 0x8e,
+ 0xe9, 0x9b, 0x18, 0x8c, 0x39, 0x03, 0xff, 0xe7, 0x7d, 0xb2, 0xe5, 0x7e, 0x9f, 0xec, 0xe7, 0xcb,
+ 0xe9, 0x7a, 0xc4, 0x80, 0xd9, 0x98, 0x16, 0x75, 0x31, 0x00, 0x88, 0x58, 0x8a, 0xe1, 0x33, 0x02,
+ 0xa6, 0x6d, 0xba, 0xd0, 0x5f, 0x67, 0xbd, 0xa0, 0x0b, 0x06, 0x9f, 0x88, 0x0f, 0xe1, 0x78, 0x4d,
+ 0x73, 0x97, 0x5c, 0xf3, 0x56, 0x46, 0xef, 0xe8, 0xe1, 0x8a, 0x03, 0xe9, 0x51, 0xff, 0x5b, 0x18,
+ 0x77, 0xff, 0x3b, 0xa8, 0x8e, 0xd9, 0x37, 0xc3, 0xd7, 0xe6, 0x81, 0x5c, 0xde, 0xf3, 0x1f, 0xd1,
+ 0xdd, 0xef, 0xb7, 0x84, 0x7d, 0xcc, 0x69, 0x7f, 0xb6, 0xe7, 0x1f, 0x6d, 0xef, 0x9b, 0x52, 0x4b,
+ 0xc4, 0x7c, 0xd9, 0xe3, 0xea, 0x96, 0xbd, 0x8e, 0xbc, 0x4d, 0x0e, 0x8f, 0x46, 0x3d, 0x94, 0x3b,
+ 0xbc, 0x69, 0xae, 0x91, 0xfe, 0x89, 0xe9, 0x19, 0xc2, 0xe7, 0xa0, 0xe3, 0xc9, 0x73, 0x37, 0x13,
+ 0x60, 0xd7, 0x56, 0x2c, 0xca, 0x39, 0x83, 0x3c, 0x68, 0xaf, 0x10, 0x3e, 0x30, 0x4a, 0xc4, 0x96,
+ 0x78, 0x8c, 0x27, 0x9d, 0x4d, 0xf5, 0x1a, 0xa1, 0x63, 0xa3, 0x09, 0xc5, 0x66, 0x0f, 0xd8, 0xdf,
+ 0xb3, 0xc7, 0x74, 0x4a, 0x87, 0x46, 0x4c, 0x7b, 0xb5, 0xf0, 0x82, 0x3e, 0xa9, 0xf6, 0x90, 0xbd,
+ 0xfa, 0x74, 0xf2, 0x16, 0x73, 0x14, 0x4b, 0x2c, 0x78, 0x02, 0xf7, 0xd6, 0xca, 0xa0, 0x48, 0x16,
+ 0x7e, 0xb5, 0x37, 0x0b, 0x37, 0x11, 0xd4, 0x1b, 0xf1, 0xc7, 0x77, 0xc2, 0xe7, 0x34, 0x6b, 0x0e,
+ 0xdc, 0x31, 0x9f, 0x7c, 0xaa, 0x63, 0x3e, 0x7c, 0x04, 0x16, 0x81, 0x76, 0x44, 0xea, 0x98, 0xf1,
+ 0x74, 0x32, 0x4d, 0x0b, 0x1b, 0xc8, 0x50, 0xf6, 0x78, 0xbf, 0xb0, 0x00, 0xe6, 0x48, 0xd1, 0xe4,
+ 0x7c, 0xa1, 0xf6, 0x1e, 0xe9, 0xdb, 0x07, 0x75, 0xb5, 0x0e, 0xe6, 0xae, 0x60, 0xb6, 0xc9, 0x7d,
+ 0xb4, 0x74, 0xe5, 0xe2, 0x96, 0xc4, 0x75, 0x0f, 0x52, 0xcf, 0xe0, 0x06, 0x5b, 0xee, 0x7b, 0x24,
+ 0x63, 0xb2, 0xc1, 0x42, 0x0e, 0x4f, 0x14, 0xb1, 0x91, 0xc5, 0x26, 0xa9, 0xa7, 0x40, 0xf1, 0xb2,
+ 0x05, 0xaf, 0x54, 0x3b, 0xd4, 0xba, 0xa5, 0x4f, 0xda, 0xaf, 0x09, 0xfb, 0x4c, 0xb2, 0x70, 0x53,
+ 0x5e, 0xb2, 0xd5, 0x42, 0x31, 0xcf, 0xc9, 0xa1, 0x6c, 0x4d, 0x20, 0x1a, 0x90, 0x44, 0xee, 0xcc,
+ 0xa6, 0x61, 0xe6, 0xcb, 0x29, 0x14, 0x31, 0xce, 0x70, 0xe6, 0x83, 0xf0, 0x25, 0x9e, 0x35, 0x27,
+ 0x02, 0x88, 0xca, 0x1f, 0x4b, 0x9f, 0x2f, 0x16, 0x19, 0x6e, 0x48, 0xd1, 0xd9, 0x4b, 0xfe, 0x75,
+ 0x32, 0x98, 0x69, 0x42, 0x7f, 0xd9, 0x82, 0xdd, 0x8e, 0xa7, 0xb9, 0x87, 0x37, 0x8d, 0x6e, 0x03,
+ 0xc5, 0x2d, 0x4c, 0x6c, 0xd8, 0xe6, 0x24, 0xcd, 0xa6, 0xbd, 0x56, 0x12, 0xf5, 0x03, 0xa2, 0xab,
+ 0x6f, 0x01, 0xb7, 0x63, 0x81, 0x49, 0xec, 0x34, 0x5d, 0x72, 0xc9, 0x13, 0xb8, 0xc6, 0x47, 0x06,
+ 0x73, 0x78, 0xfb, 0x1f, 0xfa, 0xa5, 0xae, 0xb5, 0x6d, 0x6b, 0x7b, 0x63, 0x68, 0x21, 0xea, 0xed,
+ 0xa0, 0x60, 0x22, 0x6a, 0xd4, 0xdd, 0x4d, 0x1b, 0xd8, 0x79, 0xe2, 0xf2, 0x0c, 0x92, 0x31, 0xc5,
+ 0xa5, 0x19, 0x91, 0x62, 0x07, 0x3c, 0x4f, 0xf0, 0xd2, 0x8c, 0xa1, 0x85, 0x67, 0x8f, 0xd8, 0x57,
+ 0x64, 0x70, 0x92, 0x32, 0x70, 0x0e, 0xba, 0xbe, 0xd5, 0x36, 0xbb, 0x04, 0xb9, 0x17, 0xe7, 0xc6,
+ 0x01, 0xdd, 0x2a, 0x98, 0xbf, 0xcc, 0x92, 0xa5, 0x10, 0x9e, 0x1d, 0x08, 0x21, 0xc7, 0x80, 0xc1,
+ 0x7f, 0x98, 0xe2, 0xf2, 0x01, 0x4e, 0xaa, 0x1c, 0xcd, 0x09, 0x5e, 0x3e, 0x20, 0xcc, 0x44, 0xf6,
+ 0x10, 0xbf, 0x8c, 0x06, 0xd5, 0x8c, 0xba, 0xcf, 0x3f, 0x14, 0xc6, 0x76, 0x03, 0xcc, 0x62, 0x2c,
+ 0xc9, 0x87, 0x74, 0x19, 0x22, 0x41, 0x89, 0xc3, 0x7e, 0x87, 0x5e, 0x97, 0x1e, 0x7e, 0x6b, 0xb0,
+ 0x74, 0xb4, 0xf3, 0x00, 0x44, 0xaf, 0xd8, 0x4e, 0x3a, 0x17, 0xd7, 0x49, 0x4b, 0x62, 0x9d, 0xf4,
+ 0x9b, 0x84, 0xc3, 0x1c, 0x0e, 0x66, 0xfb, 0xf0, 0xea, 0x21, 0x16, 0xe0, 0x6e, 0x78, 0xe9, 0xd9,
+ 0xeb, 0xc5, 0xab, 0xa8, 0x5e, 0x54, 0xf6, 0x7a, 0x5d, 0xab, 0x8d, 0xe6, 0x53, 0x1f, 0x1f, 0xcb,
+ 0x7c, 0x8a, 0xed, 0x0f, 0xe4, 0xbe, 0xfe, 0xe0, 0x10, 0x96, 0xf4, 0xcd, 0xe0, 0x38, 0x29, 0xa2,
+ 0x1c, 0xb2, 0x55, 0x20, 0x41, 0xdc, 0xfa, 0x92, 0xf9, 0x88, 0xe2, 0x82, 0x4a, 0x10, 0x0a, 0x61,
+ 0x84, 0xa5, 0xcf, 0x74, 0xc6, 0x6e, 0x5a, 0x05, 0x89, 0xe3, 0x6c, 0x02, 0x47, 0xb2, 0xf2, 0xc4,
+ 0xda, 0xdd, 0xc0, 0x37, 0xda, 0x6b, 0x5f, 0xcc, 0x8f, 0x63, 0x44, 0x78, 0x06, 0xf5, 0x34, 0x95,
+ 0x63, 0x97, 0x34, 0xa2, 0x22, 0xc3, 0x7e, 0xa4, 0x05, 0x1f, 0xf4, 0x57, 0x8f, 0x11, 0xbf, 0x54,
+ 0xf5, 0x16, 0x70, 0xfc, 0xa2, 0xd9, 0xbe, 0xb4, 0xed, 0x3a, 0x7b, 0xf8, 0xee, 0x6f, 0x87, 0x5e,
+ 0x22, 0xbe, 0x7a, 0xcc, 0xe8, 0x7f, 0xa1, 0xde, 0x11, 0x98, 0x0e, 0x85, 0x61, 0xa6, 0xc3, 0xea,
+ 0x31, 0x6a, 0x3c, 0xa8, 0x4f, 0x0c, 0x3b, 0x9d, 0x62, 0x62, 0xa7, 0xb3, 0x7a, 0x2c, 0xe8, 0x76,
+ 0xd4, 0x0a, 0x98, 0xee, 0x58, 0x97, 0xf1, 0x56, 0x35, 0x9e, 0x75, 0x0d, 0x0b, 0x3a, 0x54, 0xb1,
+ 0x2e, 0x93, 0x8d, 0xed, 0xd5, 0x63, 0x46, 0xf8, 0xa5, 0xba, 0x02, 0x66, 0xf0, 0xb6, 0x00, 0x26,
+ 0x33, 0x9d, 0x2a, 0xa0, 0xd0, 0xea, 0x31, 0x23, 0xfa, 0x16, 0x59, 0x1f, 0x79, 0x7c, 0xee, 0xfa,
+ 0xde, 0x60, 0xbb, 0x3d, 0x97, 0x6a, 0xbb, 0x1d, 0xc9, 0x82, 0x6c, 0xb8, 0x9f, 0x02, 0x85, 0x36,
+ 0x96, 0xb0, 0x44, 0x25, 0x4c, 0x1e, 0xd5, 0xbb, 0x41, 0x7e, 0xd7, 0x74, 0x83, 0xc9, 0xf3, 0x4d,
+ 0xc3, 0xe9, 0xae, 0x99, 0xee, 0x25, 0x84, 0x20, 0xfa, 0x6a, 0x69, 0x0a, 0x14, 0xb0, 0xe0, 0xc2,
+ 0x3f, 0xda, 0xdb, 0xf2, 0xc4, 0x0c, 0x29, 0x3b, 0x36, 0x1a, 0xf6, 0x5b, 0x4e, 0x70, 0x38, 0xfd,
+ 0xd7, 0x72, 0xe3, 0xb1, 0x20, 0xaf, 0x62, 0xae, 0xfa, 0xb0, 0xad, 0x67, 0xef, 0xc1, 0xfb, 0xe1,
+ 0x3e, 0x5d, 0x12, 0x1d, 0xf4, 0x4a, 0x3d, 0x03, 0x80, 0x4f, 0x4f, 0xea, 0x85, 0x41, 0x4c, 0x99,
+ 0x94, 0x68, 0xf9, 0xa0, 0x30, 0xdc, 0x51, 0xe5, 0x77, 0x46, 0x30, 0x5d, 0xfa, 0x05, 0x11, 0x3f,
+ 0x03, 0xef, 0x5a, 0x36, 0x53, 0xe7, 0xe0, 0x31, 0x65, 0xa7, 0x94, 0xd6, 0xa8, 0x19, 0xc2, 0x5e,
+ 0xf6, 0x7d, 0xd3, 0x5b, 0xf2, 0xe4, 0xb6, 0x03, 0x72, 0x02, 0x5a, 0x7f, 0xd0, 0xf2, 0x7c, 0xcb,
+ 0xde, 0xa6, 0xe7, 0x9b, 0x3f, 0x33, 0x16, 0xa5, 0x19, 0x30, 0xe0, 0xc8, 0x03, 0x07, 0x9c, 0x03,
+ 0x01, 0x82, 0xf2, 0x43, 0x02, 0x04, 0x15, 0xd2, 0xad, 0x1c, 0x7e, 0x84, 0xd5, 0x9f, 0x75, 0x5e,
+ 0x7f, 0xee, 0x8a, 0x01, 0x68, 0x90, 0x5c, 0xc6, 0x62, 0xdf, 0xbc, 0x2b, 0xd4, 0x94, 0x26, 0xa7,
+ 0x29, 0xf7, 0x8e, 0xce, 0x48, 0xf6, 0xda, 0xf2, 0xa1, 0x3c, 0xb8, 0x2a, 0x62, 0xa6, 0x0e, 0xaf,
+ 0x50, 0x45, 0xf9, 0xfd, 0xb1, 0x28, 0x4a, 0x7a, 0x47, 0xe7, 0xac, 0x35, 0xe6, 0xb7, 0x84, 0xcf,
+ 0xed, 0xf7, 0x03, 0x15, 0xca, 0x26, 0x46, 0x59, 0x4e, 0x81, 0x22, 0xe9, 0x61, 0x28, 0x34, 0xf4,
+ 0x29, 0x65, 0x77, 0x23, 0x76, 0xda, 0x5f, 0x94, 0xb7, 0x09, 0xe8, 0x0f, 0x5d, 0xd7, 0x68, 0xed,
+ 0xb9, 0x76, 0xd5, 0xf6, 0x1d, 0xed, 0x07, 0xc7, 0xa2, 0x38, 0xa1, 0x37, 0x9c, 0x3c, 0x8a, 0x37,
+ 0xdc, 0x48, 0xab, 0x1c, 0x41, 0x0d, 0x8e, 0x64, 0x95, 0x23, 0xa6, 0xf0, 0xec, 0xf1, 0x7b, 0xa7,
+ 0x0c, 0x4e, 0xd1, 0xc9, 0xd6, 0x12, 0x6f, 0x21, 0x6a, 0x17, 0xc6, 0x01, 0xe4, 0xc9, 0xc0, 0x4c,
+ 0xa2, 0x7e, 0xf4, 0xf8, 0x81, 0x8f, 0x52, 0x90, 0x78, 0x9b, 0x25, 0x37, 0x1d, 0xec, 0xe3, 0x70,
+ 0x2c, 0x48, 0x89, 0x5d, 0x62, 0x99, 0x82, 0x8d, 0xec, 0x31, 0x7b, 0xa9, 0x0c, 0x8a, 0x24, 0x46,
+ 0x82, 0xb6, 0x91, 0x89, 0xc3, 0x04, 0x7f, 0x3f, 0x8b, 0xc0, 0x8e, 0x1c, 0xe1, 0x26, 0xb3, 0xf8,
+ 0x11, 0x69, 0xf6, 0xe2, 0x06, 0xb2, 0x32, 0x01, 0x17, 0x42, 0x09, 0xcc, 0x36, 0xa1, 0x5f, 0x36,
+ 0x5d, 0xd7, 0x32, 0xb7, 0xc7, 0xe5, 0xf1, 0x2d, 0xea, 0x3d, 0xac, 0x7d, 0x23, 0x27, 0x7a, 0x96,
+ 0x3d, 0x5c, 0x08, 0x0f, 0x58, 0x8d, 0x89, 0x02, 0xfe, 0x7a, 0xa1, 0xf3, 0xea, 0xc3, 0xa8, 0x4d,
+ 0xc0, 0x63, 0x5b, 0x02, 0x53, 0x41, 0x1c, 0x8c, 0xdb, 0xb8, 0xd8, 0x28, 0x3b, 0xfe, 0x6e, 0x70,
+ 0x0c, 0x06, 0xff, 0x3f, 0x18, 0x7f, 0x41, 0x7b, 0x65, 0x4a, 0x47, 0xf9, 0xe4, 0x20, 0x1e, 0xe9,
+ 0xda, 0x58, 0x1a, 0x77, 0xf8, 0xa3, 0x0a, 0xdb, 0xf1, 0xcb, 0x53, 0x74, 0x39, 0xb2, 0x66, 0xfa,
+ 0xf0, 0x41, 0xed, 0x0f, 0x65, 0x30, 0xd5, 0x84, 0x3e, 0x1a, 0x6f, 0x11, 0xfb, 0x87, 0xd6, 0x70,
+ 0x95, 0x59, 0xf1, 0xa0, 0x67, 0x6b, 0xd5, 0xfb, 0xc0, 0x4c, 0xcf, 0x75, 0xda, 0xd0, 0xf3, 0xe8,
+ 0xea, 0x05, 0xeb, 0xa8, 0x36, 0x68, 0xf4, 0xc7, 0xac, 0x2d, 0xae, 0x07, 0xdf, 0x18, 0xd1, 0xe7,
+ 0x69, 0xcd, 0x00, 0x42, 0x89, 0x56, 0x70, 0xd2, 0x66, 0x40, 0x52, 0xe1, 0xd9, 0x03, 0xfd, 0xbb,
+ 0x32, 0x98, 0x6b, 0x42, 0x3f, 0x94, 0x62, 0x8a, 0x4d, 0x8e, 0x78, 0x78, 0x39, 0x28, 0xe5, 0xc3,
+ 0x41, 0xf9, 0x4e, 0xe1, 0x4b, 0x61, 0x79, 0x69, 0x86, 0xc4, 0xc6, 0x82, 0xe7, 0x5b, 0x84, 0xee,
+ 0x82, 0x15, 0xe3, 0x60, 0x02, 0xc7, 0xd7, 0x1e, 0x0b, 0x66, 0x30, 0x2f, 0xb8, 0xc1, 0xfe, 0x68,
+ 0x3e, 0x6a, 0xbc, 0x5f, 0xc8, 0xa8, 0xf1, 0xde, 0x03, 0x0a, 0xbb, 0xa6, 0x7b, 0x29, 0x38, 0x7c,
+ 0xfb, 0x38, 0xb1, 0xd5, 0x2f, 0xcf, 0x20, 0x5f, 0x0d, 0xf6, 0xd3, 0x2c, 0xa4, 0xf3, 0xd3, 0x7c,
+ 0xbd, 0x94, 0x6a, 0x24, 0x24, 0x73, 0x87, 0x31, 0x36, 0xf9, 0x14, 0xe3, 0x66, 0x42, 0xd9, 0xd9,
+ 0x2b, 0xc7, 0x8b, 0x65, 0x30, 0x8d, 0xc6, 0x6d, 0x6c, 0x8f, 0x9f, 0x3f, 0xbc, 0x3a, 0x0c, 0x36,
+ 0xf4, 0x53, 0xf6, 0xc0, 0x81, 0x44, 0xc6, 0x67, 0xde, 0xa7, 0xe8, 0x81, 0x93, 0x0a, 0xcf, 0x1e,
+ 0x8f, 0x77, 0x13, 0x3c, 0x70, 0x7b, 0xd0, 0xde, 0x20, 0x03, 0x79, 0x05, 0xfa, 0x93, 0xb6, 0x22,
+ 0xdf, 0x2e, 0x1c, 0x5e, 0x94, 0x13, 0x18, 0xe6, 0x79, 0x71, 0x05, 0x8e, 0xa7, 0x01, 0x89, 0xc5,
+ 0x15, 0x15, 0x62, 0x20, 0x7b, 0xd4, 0xde, 0x4f, 0x50, 0x23, 0x9b, 0x0b, 0x3f, 0x30, 0x86, 0x5e,
+ 0x75, 0xb2, 0x0b, 0x1f, 0x81, 0x00, 0x31, 0x8d, 0xa3, 0x6a, 0x6f, 0x83, 0x0a, 0xcf, 0x1e, 0xb9,
+ 0x9f, 0x91, 0xf1, 0x25, 0x66, 0xe5, 0x1d, 0xd8, 0xbe, 0x04, 0x3b, 0xec, 0x45, 0xce, 0xa3, 0x42,
+ 0x77, 0x1a, 0x4c, 0xb5, 0x09, 0x35, 0x0c, 0xde, 0xb4, 0x11, 0x3c, 0xf2, 0x37, 0x0b, 0x25, 0xde,
+ 0x9d, 0xc5, 0x77, 0x44, 0xe4, 0xf3, 0xb1, 0xe0, 0x22, 0x76, 0xe1, 0x95, 0x40, 0xf1, 0x13, 0x30,
+ 0x5b, 0xc8, 0x2c, 0xa3, 0xda, 0x76, 0x6c, 0xed, 0xfb, 0x0f, 0x0f, 0xcb, 0xb5, 0x60, 0xc6, 0x6a,
+ 0x3b, 0x36, 0x0e, 0x01, 0x17, 0x1c, 0x02, 0x0a, 0x13, 0x82, 0xb7, 0xfa, 0xae, 0xf3, 0x80, 0x45,
+ 0x77, 0xcd, 0xa3, 0x84, 0x51, 0x8d, 0x09, 0xc4, 0xfa, 0x51, 0x19, 0x13, 0x03, 0xca, 0xce, 0x1e,
+ 0xb2, 0x4f, 0x44, 0xde, 0x6d, 0xa4, 0x2b, 0x7c, 0x44, 0xac, 0x02, 0x8f, 0x32, 0x9c, 0xb1, 0xb5,
+ 0x38, 0x92, 0xe1, 0x2c, 0x81, 0x81, 0x09, 0xdc, 0x44, 0x18, 0xe1, 0x98, 0xf9, 0x1a, 0xf0, 0x21,
+ 0xd0, 0x19, 0x9f, 0x79, 0x38, 0x22, 0x3a, 0x47, 0x63, 0x22, 0x7e, 0x98, 0x86, 0xa7, 0xa7, 0x16,
+ 0x8f, 0xf6, 0x3f, 0xc6, 0x01, 0xce, 0x5d, 0xa3, 0xf8, 0x2b, 0x10, 0x6f, 0x05, 0xed, 0xad, 0x92,
+ 0x68, 0x08, 0x94, 0x03, 0x12, 0x44, 0x54, 0xc6, 0x82, 0xe0, 0x9b, 0x84, 0x62, 0x93, 0x88, 0x94,
+ 0x9f, 0x3d, 0x80, 0x2f, 0x92, 0xc1, 0x02, 0xf6, 0x11, 0xe8, 0x42, 0xd3, 0x25, 0x1d, 0xe5, 0x58,
+ 0x1c, 0xe5, 0xdf, 0x2d, 0x1c, 0xe0, 0x87, 0x97, 0x43, 0xc4, 0xc7, 0x58, 0xa0, 0x10, 0x8b, 0xee,
+ 0x23, 0xc8, 0xc2, 0x44, 0xb6, 0x51, 0x94, 0x90, 0x05, 0xaa, 0xe2, 0xe3, 0xc1, 0x23, 0xa5, 0x47,
+ 0x2e, 0x2f, 0x8c, 0xa0, 0xb1, 0x4d, 0xd8, 0x23, 0x57, 0x84, 0x89, 0xec, 0x31, 0x79, 0xc3, 0xed,
+ 0x74, 0xc1, 0xb9, 0x65, 0x5e, 0xec, 0x42, 0xed, 0xd5, 0xf9, 0xf0, 0x44, 0xdb, 0xef, 0x8e, 0xc5,
+ 0x03, 0xf3, 0x10, 0x97, 0x51, 0xa9, 0x20, 0xef, 0x3a, 0x57, 0xc8, 0xd2, 0xd6, 0xbc, 0x81, 0xff,
+ 0x93, 0x78, 0x96, 0xdd, 0xbd, 0x5d, 0x9b, 0x9c, 0x0c, 0x9d, 0x37, 0x82, 0x47, 0xf5, 0x46, 0x30,
+ 0x7f, 0xc5, 0xf2, 0x77, 0x56, 0xa1, 0xd9, 0x81, 0xae, 0xe1, 0x5c, 0xc1, 0x1e, 0x73, 0xd3, 0x06,
+ 0x9f, 0xc8, 0xfb, 0xaf, 0x08, 0xd8, 0x97, 0x48, 0x28, 0x93, 0x39, 0xfe, 0x96, 0xc6, 0xf2, 0x8c,
+ 0xe7, 0x2a, 0x7b, 0x85, 0xf9, 0x80, 0x0c, 0x66, 0x0c, 0xe7, 0x0a, 0x55, 0x92, 0xff, 0xe3, 0x68,
+ 0x75, 0x24, 0xf5, 0x44, 0x0f, 0x4b, 0x2e, 0x64, 0x7f, 0xe2, 0x13, 0xbd, 0xc4, 0xe2, 0x27, 0x72,
+ 0x72, 0x69, 0xce, 0x70, 0xae, 0x34, 0xa1, 0x4f, 0x5a, 0x84, 0xb6, 0x39, 0x26, 0x27, 0x6b, 0xcb,
+ 0x23, 0x04, 0xe9, 0x3c, 0x3c, 0x7c, 0x4e, 0xbb, 0x8b, 0x10, 0x0a, 0x28, 0x64, 0x71, 0xd2, 0xbb,
+ 0x08, 0x43, 0x39, 0x98, 0x40, 0x8c, 0x14, 0x19, 0xcc, 0x1a, 0xce, 0x15, 0x34, 0x34, 0x2c, 0x5b,
+ 0xdd, 0xee, 0x78, 0x46, 0xc8, 0xb4, 0xc6, 0x7f, 0x20, 0x86, 0x80, 0x8b, 0x89, 0x1b, 0xff, 0x43,
+ 0x18, 0xc8, 0x1e, 0x86, 0xe7, 0x93, 0xc6, 0x12, 0x8c, 0xd0, 0xf6, 0x78, 0x70, 0x18, 0xb5, 0x41,
+ 0x84, 0x6c, 0x1c, 0x59, 0x83, 0x88, 0xe3, 0x60, 0x22, 0x3b, 0x27, 0x0b, 0x65, 0x3c, 0xcc, 0x8f,
+ 0xb7, 0x4d, 0xbc, 0x37, 0x9d, 0x6b, 0x22, 0x1d, 0x76, 0x39, 0x46, 0xc6, 0x82, 0x46, 0x0a, 0x17,
+ 0x44, 0x01, 0x1e, 0xb2, 0xc7, 0xe3, 0xa3, 0x32, 0x98, 0x23, 0x2c, 0x3c, 0x42, 0xac, 0x80, 0x91,
+ 0x1a, 0x15, 0x5b, 0x83, 0xa3, 0x69, 0x54, 0x09, 0x1c, 0x4c, 0xe4, 0x3e, 0x7f, 0x64, 0xc7, 0x8d,
+ 0x70, 0x7c, 0x3c, 0x0e, 0xc1, 0x91, 0x8d, 0xb1, 0x31, 0x1e, 0x21, 0x1f, 0xc5, 0x18, 0x3b, 0xa2,
+ 0x63, 0xe4, 0xcf, 0x0f, 0x5b, 0xd1, 0x38, 0x31, 0x38, 0x44, 0x53, 0x18, 0x23, 0x0c, 0x23, 0x36,
+ 0x85, 0x23, 0x42, 0xe2, 0x4f, 0x65, 0x00, 0x08, 0x03, 0x6b, 0xce, 0x65, 0x7c, 0x91, 0xe6, 0x18,
+ 0xba, 0xb3, 0x7e, 0xb7, 0x7a, 0x79, 0x88, 0x5b, 0x7d, 0xca, 0x10, 0x2e, 0x69, 0x57, 0x02, 0x19,
+ 0x29, 0xa3, 0x4a, 0x4e, 0x7c, 0x25, 0x30, 0xb9, 0xfc, 0xec, 0x31, 0xfe, 0x32, 0xb1, 0xe6, 0xa2,
+ 0x03, 0xa6, 0x3f, 0x3b, 0x16, 0x94, 0x99, 0xd9, 0xbf, 0xcc, 0xcf, 0xfe, 0x0f, 0x81, 0xed, 0xa8,
+ 0x36, 0xe2, 0xb0, 0x83, 0xa3, 0xd9, 0xdb, 0x88, 0x47, 0x77, 0x40, 0xf4, 0x07, 0xf2, 0xe0, 0x38,
+ 0xed, 0x44, 0xbe, 0x1d, 0x20, 0x4e, 0x79, 0x0e, 0x8f, 0xeb, 0x24, 0x87, 0xa0, 0x3c, 0xae, 0x05,
+ 0xa9, 0x34, 0x4b, 0x99, 0x02, 0xec, 0x4d, 0x64, 0x75, 0xa3, 0xa8, 0x3f, 0xd8, 0x33, 0xed, 0x8e,
+ 0x78, 0xb8, 0xdf, 0x21, 0xc0, 0x07, 0x6b, 0x8d, 0x32, 0xbf, 0xd6, 0x38, 0x60, 0x65, 0x32, 0xf5,
+ 0xce, 0x35, 0x16, 0x19, 0x61, 0x77, 0xe2, 0x3b, 0xd7, 0xf1, 0x65, 0x67, 0x8f, 0xd2, 0x7b, 0x65,
+ 0x90, 0x6f, 0x3a, 0xae, 0xaf, 0xbd, 0x20, 0x4d, 0xeb, 0x24, 0x92, 0x8f, 0x40, 0x0a, 0x9e, 0xd5,
+ 0x32, 0xc8, 0xa3, 0xca, 0xd1, 0x19, 0xc3, 0x6d, 0xc9, 0x47, 0x9d, 0x4d, 0xdf, 0xc4, 0x5e, 0xdd,
+ 0xa8, 0xfc, 0xc5, 0xd6, 0x7e, 0x0f, 0x1a, 0xf8, 0xe3, 0xb4, 0xf1, 0x74, 0x88, 0xfc, 0x9a, 0xf1,
+ 0x07, 0x30, 0x32, 0x8b, 0xa7, 0x13, 0x5b, 0x72, 0xf6, 0xb8, 0x3d, 0x7c, 0x9c, 0xfa, 0xb6, 0x2e,
+ 0x5b, 0x5d, 0xa8, 0xbd, 0x80, 0xb8, 0x8c, 0xd4, 0xcd, 0x5d, 0x28, 0x7e, 0x24, 0x26, 0xd1, 0xb5,
+ 0x15, 0xc7, 0x97, 0x95, 0xa3, 0xf8, 0xb2, 0x69, 0x1b, 0x14, 0x39, 0x80, 0x4e, 0x58, 0x9a, 0x74,
+ 0x83, 0x4a, 0x28, 0x7b, 0x22, 0x71, 0x3a, 0x4f, 0x34, 0xa1, 0x4f, 0x8c, 0xca, 0x46, 0x70, 0x45,
+ 0xd2, 0xf7, 0x8e, 0x25, 0x62, 0x67, 0x78, 0xa1, 0x8e, 0xdc, 0x77, 0x03, 0xd3, 0x07, 0x58, 0x70,
+ 0xd6, 0x78, 0x70, 0xbe, 0x3b, 0x5e, 0x40, 0x3c, 0x93, 0x63, 0x81, 0xe9, 0xed, 0x21, 0x4c, 0xeb,
+ 0x1c, 0x4c, 0x77, 0x8f, 0xc8, 0x45, 0xf6, 0x80, 0xfd, 0x78, 0x01, 0x1c, 0x27, 0x93, 0xfe, 0x92,
+ 0xdd, 0xa1, 0x11, 0x56, 0xdf, 0x2c, 0x1d, 0xf1, 0x66, 0xdb, 0xc1, 0x10, 0xac, 0x5c, 0x2c, 0xe7,
+ 0x42, 0x5f, 0x2c, 0x67, 0x75, 0x89, 0x84, 0x73, 0x45, 0x9d, 0x28, 0xde, 0x69, 0x1b, 0x16, 0x66,
+ 0x02, 0xcb, 0x1e, 0x77, 0xb9, 0xe1, 0x77, 0xfc, 0x3d, 0xa2, 0x53, 0xe2, 0xf7, 0x88, 0xfe, 0x76,
+ 0xba, 0x75, 0x3b, 0x5c, 0x74, 0x9f, 0xc0, 0x33, 0xb6, 0x9d, 0x52, 0xac, 0xe8, 0x09, 0x70, 0xf7,
+ 0x5f, 0xc3, 0x9d, 0x2c, 0x8a, 0x20, 0x32, 0xa2, 0x3b, 0x19, 0x26, 0x70, 0x94, 0xee, 0x64, 0xc3,
+ 0x18, 0xc8, 0x1e, 0xc7, 0xdf, 0x2e, 0xd0, 0xdd, 0x7c, 0xdc, 0x6e, 0xb4, 0x3f, 0x96, 0x32, 0x1f,
+ 0xa5, 0xbf, 0x99, 0x4b, 0xe5, 0xff, 0x8c, 0xf9, 0x4a, 0x1e, 0xa6, 0xd3, 0x78, 0x34, 0x27, 0x91,
+ 0x9b, 0xc0, 0xba, 0x91, 0x84, 0x7d, 0xd1, 0xcf, 0x5b, 0x1d, 0x7f, 0x67, 0x4c, 0x27, 0x3a, 0xae,
+ 0x20, 0x5a, 0x34, 0x5e, 0x3d, 0x79, 0xd0, 0xfe, 0x35, 0x97, 0x2a, 0x84, 0x54, 0x28, 0x12, 0xcc,
+ 0x56, 0x8c, 0x88, 0x53, 0x04, 0x7e, 0x4a, 0xa4, 0x37, 0x41, 0x8d, 0x3e, 0x67, 0x75, 0xa0, 0xf3,
+ 0x08, 0xd4, 0x68, 0xcc, 0xd7, 0xf8, 0x34, 0x3a, 0x89, 0xdc, 0x7f, 0x51, 0x8d, 0x0e, 0x45, 0x32,
+ 0x26, 0x8d, 0x4e, 0xa4, 0x97, 0xbd, 0x8c, 0x5f, 0x39, 0x47, 0x27, 0x52, 0x35, 0xcb, 0xbe, 0xa4,
+ 0xfd, 0x53, 0x11, 0x28, 0x41, 0x1c, 0x61, 0x7f, 0x87, 0xc6, 0x82, 0xf9, 0x90, 0xf0, 0xdd, 0x28,
+ 0x23, 0xc4, 0x7b, 0xe1, 0xc3, 0x49, 0x15, 0x0e, 0x84, 0x93, 0x2a, 0x81, 0x79, 0xcb, 0xf6, 0xa1,
+ 0x6b, 0x9b, 0xdd, 0xe5, 0xae, 0xb9, 0xed, 0x9d, 0x9e, 0x1a, 0x78, 0x79, 0x5d, 0x95, 0xc9, 0x63,
+ 0xf0, 0x5f, 0xb0, 0x17, 0x88, 0x4e, 0xf3, 0x17, 0x88, 0xc6, 0x44, 0xbf, 0x9a, 0x89, 0x8f, 0x7e,
+ 0x15, 0x46, 0xb7, 0x02, 0xc3, 0x83, 0x63, 0x8b, 0xda, 0xc6, 0x29, 0xc3, 0xfd, 0xdd, 0x26, 0x18,
+ 0x85, 0x2d, 0x0c, 0xfd, 0xf8, 0x1a, 0x39, 0xd5, 0xea, 0x1e, 0x52, 0x84, 0xc5, 0x7e, 0x25, 0x48,
+ 0x6d, 0xa1, 0xb2, 0x95, 0x97, 0xfb, 0x2a, 0x1f, 0x9a, 0x3c, 0x79, 0x01, 0x93, 0x87, 0x55, 0xaa,
+ 0x82, 0xe8, 0x9d, 0xae, 0xe2, 0x8b, 0x85, 0x22, 0xb5, 0x9d, 0xc0, 0x69, 0xa4, 0x02, 0x38, 0x11,
+ 0x44, 0xbb, 0xed, 0xf5, 0xa0, 0xe9, 0x9a, 0x76, 0x1b, 0x6a, 0x9f, 0x90, 0xc6, 0x61, 0xf6, 0x2e,
+ 0x83, 0x69, 0xab, 0xed, 0xd8, 0x4d, 0xeb, 0x39, 0xc1, 0xe5, 0x72, 0xc9, 0x41, 0xd6, 0xb1, 0x44,
+ 0xaa, 0xf4, 0x0b, 0x23, 0xfc, 0x56, 0xad, 0x82, 0x99, 0xb6, 0xe9, 0x76, 0x48, 0x10, 0xbe, 0x42,
+ 0xdf, 0x45, 0x4e, 0xb1, 0x84, 0xca, 0xc1, 0x27, 0x46, 0xf4, 0xb5, 0xda, 0xe0, 0x85, 0x58, 0xec,
+ 0x8b, 0xe6, 0x11, 0x4b, 0xac, 0x12, 0x7d, 0xc4, 0xc9, 0x1c, 0x49, 0xc7, 0x85, 0x5d, 0x93, 0x5c,
+ 0x3a, 0x3e, 0x45, 0xee, 0x88, 0x0e, 0x13, 0xd2, 0x2e, 0x0f, 0xe0, 0xa2, 0x0e, 0xa0, 0x31, 0xe9,
+ 0xe5, 0x01, 0x21, 0x2e, 0xb2, 0xd7, 0xcc, 0x77, 0x15, 0xc1, 0x3c, 0xe9, 0xd5, 0xa8, 0x38, 0xb5,
+ 0x17, 0xc9, 0xa0, 0xd8, 0x84, 0xfe, 0xfd, 0x70, 0x5f, 0x6b, 0x1e, 0x7e, 0x4c, 0x56, 0x80, 0x7c,
+ 0x29, 0x0c, 0x38, 0x88, 0xfe, 0xa6, 0xdd, 0xb7, 0x0f, 0xf8, 0x5a, 0x24, 0x3c, 0x4d, 0x7a, 0xdf,
+ 0x3e, 0xb9, 0xf8, 0xec, 0xf1, 0xf9, 0x09, 0x19, 0xc8, 0xa5, 0x4e, 0x47, 0x6b, 0x1f, 0x1e, 0x8a,
+ 0xeb, 0xc1, 0x6c, 0xd0, 0x66, 0xa2, 0x18, 0x90, 0x6c, 0x52, 0xda, 0x45, 0xd0, 0x50, 0x36, 0xa5,
+ 0xce, 0xc4, 0x77, 0x15, 0x12, 0xca, 0xce, 0x1e, 0x94, 0x2f, 0x4c, 0xd1, 0x46, 0xb3, 0xe4, 0x38,
+ 0x97, 0xf0, 0x51, 0x99, 0x5f, 0x94, 0x41, 0x61, 0x19, 0xfa, 0xed, 0x1d, 0xcd, 0x1b, 0x4b, 0x9b,
+ 0xe9, 0xbb, 0xf7, 0x7c, 0x48, 0x50, 0xce, 0xb4, 0xd1, 0x9f, 0x03, 0xb6, 0x17, 0x31, 0xcb, 0x93,
+ 0x8e, 0xfe, 0x9c, 0x58, 0xfa, 0x04, 0x0e, 0xc1, 0xe5, 0xc1, 0x42, 0xb8, 0x02, 0x46, 0x30, 0x7b,
+ 0x47, 0xee, 0x11, 0xb7, 0x1e, 0x3a, 0xc4, 0x6e, 0xd6, 0x7e, 0x3f, 0x5d, 0x88, 0xb5, 0x50, 0xe6,
+ 0x7c, 0xcd, 0x33, 0x5e, 0x98, 0x4c, 0x11, 0x7c, 0x4d, 0x8c, 0xc1, 0x09, 0xac, 0x00, 0xc8, 0x60,
+ 0x1a, 0x33, 0x54, 0xb1, 0x2e, 0x63, 0xd7, 0x43, 0x6e, 0xa1, 0xf2, 0xb9, 0x63, 0x59, 0xa8, 0xbc,
+ 0x9b, 0x5f, 0xa8, 0x14, 0x8c, 0x98, 0x1c, 0xac, 0x53, 0xa6, 0xf4, 0xc5, 0x41, 0xdf, 0x8f, 0x7d,
+ 0x99, 0x32, 0x85, 0x2f, 0xce, 0x90, 0xf2, 0xb3, 0x47, 0xf4, 0x8d, 0xff, 0x9d, 0x76, 0xd6, 0xc1,
+ 0x86, 0xac, 0xf6, 0xbf, 0x4e, 0x80, 0xfc, 0x39, 0xf4, 0xe7, 0x1f, 0xa3, 0x1b, 0xb5, 0x5e, 0x3e,
+ 0x86, 0xe0, 0x0e, 0x4f, 0x07, 0x79, 0x44, 0x9f, 0x4e, 0x7b, 0x6e, 0x11, 0xdb, 0x1d, 0x46, 0x8c,
+ 0x18, 0xf8, 0x3b, 0xf5, 0x14, 0x28, 0x7a, 0xce, 0x9e, 0xdb, 0x46, 0xe6, 0x37, 0xd2, 0x18, 0xfa,
+ 0x94, 0x36, 0xa8, 0x29, 0x47, 0x7a, 0x71, 0x7c, 0x2e, 0xa7, 0xcc, 0x05, 0x4b, 0x32, 0x77, 0xc1,
+ 0x52, 0x8a, 0xfd, 0x07, 0x01, 0xde, 0xb2, 0xd7, 0x88, 0x3f, 0xc6, 0x77, 0x0d, 0x76, 0xc6, 0x05,
+ 0x7b, 0x8c, 0x58, 0x0e, 0xab, 0x0e, 0x69, 0x1d, 0xc6, 0x79, 0xd1, 0x86, 0x71, 0xe4, 0x27, 0xea,
+ 0x30, 0x2e, 0xc0, 0xc3, 0x44, 0x4e, 0xb9, 0x17, 0xa9, 0x93, 0xeb, 0x85, 0x71, 0xa2, 0x9b, 0xe7,
+ 0x94, 0xfe, 0x50, 0xe8, 0x8c, 0xd1, 0xf9, 0x75, 0x64, 0x74, 0x8e, 0xc8, 0xfd, 0xf5, 0xd7, 0x65,
+ 0x1c, 0x49, 0x33, 0x30, 0x82, 0xc4, 0x2f, 0x4a, 0x4a, 0x0d, 0x11, 0x1a, 0x83, 0xb9, 0x38, 0xd2,
+ 0xf3, 0xa3, 0x87, 0x16, 0xe7, 0x45, 0xc7, 0xf0, 0x3f, 0xe9, 0xd0, 0xe2, 0xa2, 0x8c, 0x64, 0x0f,
+ 0xe4, 0x2f, 0x90, 0x8b, 0xc9, 0x4a, 0x6d, 0xdf, 0xba, 0x3c, 0xe6, 0x96, 0xc6, 0x0f, 0x2f, 0x29,
+ 0xa3, 0x09, 0x1f, 0x90, 0x10, 0xe1, 0x70, 0xd2, 0xd1, 0x84, 0xc5, 0xd8, 0xc8, 0x1e, 0xa6, 0x1f,
+ 0x03, 0x48, 0x7a, 0x74, 0x6d, 0xe7, 0x0d, 0x32, 0x90, 0x9b, 0xd0, 0xd7, 0xe0, 0xe1, 0xd1, 0x3a,
+ 0x0b, 0xe6, 0x98, 0xa5, 0x83, 0xe0, 0xc2, 0x1b, 0x2e, 0x2d, 0xed, 0x41, 0xf9, 0x50, 0x64, 0xec,
+ 0xa2, 0xcb, 0xa4, 0x0f, 0xca, 0x8b, 0x30, 0x31, 0x81, 0x83, 0xf2, 0x74, 0xd9, 0xe7, 0xdb, 0x05,
+ 0xa8, 0x71, 0xad, 0x00, 0x1d, 0x0a, 0xa8, 0xa3, 0x58, 0x0a, 0x7a, 0x7b, 0x64, 0x6c, 0x4c, 0x08,
+ 0xab, 0x0f, 0xb1, 0x58, 0x35, 0x78, 0xac, 0xee, 0x14, 0x11, 0x93, 0x98, 0xf1, 0x21, 0x34, 0xc1,
+ 0x7f, 0x67, 0x08, 0x97, 0xc1, 0xc1, 0xf5, 0xf4, 0x91, 0xf9, 0xc8, 0x1e, 0xb1, 0x9f, 0x23, 0xe3,
+ 0x56, 0x93, 0xcc, 0xad, 0xc6, 0x33, 0x6e, 0xd1, 0x69, 0x9b, 0xcc, 0x4d, 0xdb, 0x52, 0x1e, 0xac,
+ 0x88, 0xfc, 0x85, 0x03, 0xe6, 0x86, 0x41, 0x94, 0x1f, 0xf3, 0xc1, 0x8a, 0xa1, 0x1c, 0x64, 0x0f,
+ 0xce, 0xd7, 0x64, 0x00, 0x56, 0x5c, 0x67, 0xaf, 0xd7, 0x70, 0x3b, 0xd0, 0xd5, 0xfe, 0x2c, 0x9a,
+ 0xa9, 0xfd, 0xe4, 0x18, 0x66, 0x6a, 0xeb, 0x00, 0x6c, 0x87, 0xc4, 0xa9, 0x86, 0xdf, 0x2e, 0x36,
+ 0x2f, 0x8b, 0x98, 0x32, 0x18, 0x1a, 0xfc, 0xdd, 0xc2, 0xcf, 0xe4, 0x31, 0x4e, 0xea, 0xb3, 0x22,
+ 0x72, 0xe3, 0x9c, 0xa9, 0xbd, 0x3b, 0xc4, 0xba, 0xc5, 0x61, 0xfd, 0x8c, 0x43, 0x70, 0x92, 0x3d,
+ 0xe6, 0xff, 0x30, 0x05, 0x66, 0xc9, 0xbe, 0x2c, 0x91, 0xe9, 0xdf, 0x44, 0xa0, 0xff, 0xec, 0x18,
+ 0x40, 0xdf, 0x00, 0x73, 0x4e, 0x44, 0x9d, 0xf4, 0xa9, 0xec, 0x4a, 0x59, 0x22, 0xec, 0x0c, 0x5f,
+ 0x06, 0x47, 0x46, 0xfb, 0x18, 0x8b, 0xbc, 0xc1, 0x23, 0x7f, 0x77, 0x82, 0xbc, 0x19, 0x8a, 0xe3,
+ 0x84, 0xfe, 0x3d, 0x21, 0xf4, 0x1b, 0x1c, 0xf4, 0xa5, 0xc3, 0xb0, 0x32, 0x81, 0x7b, 0x15, 0x64,
+ 0x90, 0xc7, 0xc7, 0x20, 0xdf, 0x92, 0xe1, 0x42, 0xcc, 0x69, 0x30, 0x85, 0x9b, 0x6c, 0x38, 0x41,
+ 0x0c, 0x1e, 0xd1, 0x1b, 0x73, 0xcb, 0x87, 0x6e, 0xb8, 0xc4, 0x1e, 0x3c, 0x22, 0x1e, 0x02, 0xf7,
+ 0x73, 0xef, 0x74, 0x91, 0xec, 0x38, 0x87, 0x09, 0x23, 0xcf, 0x1e, 0x59, 0x89, 0x8f, 0xed, 0x60,
+ 0xe4, 0x28, 0xb3, 0xc7, 0x21, 0x8c, 0x64, 0x0f, 0xfc, 0x17, 0xf3, 0xe0, 0x34, 0x59, 0xfe, 0x5b,
+ 0x76, 0x9d, 0xdd, 0xbe, 0x6b, 0xcc, 0xac, 0xc3, 0xeb, 0xc2, 0x4d, 0x60, 0xc1, 0xe7, 0x1c, 0xef,
+ 0xa9, 0x4e, 0xf4, 0xa5, 0x6a, 0xbf, 0xc3, 0x3a, 0xcf, 0x3c, 0x8b, 0x47, 0x72, 0x29, 0x41, 0x80,
+ 0x71, 0xbc, 0xa7, 0xde, 0x51, 0x11, 0x64, 0x94, 0x59, 0x4d, 0x94, 0x47, 0x5a, 0x5c, 0x0e, 0x75,
+ 0xaa, 0x20, 0xa2, 0x53, 0x1f, 0x0c, 0x75, 0xea, 0xbf, 0x71, 0x3a, 0xb5, 0x72, 0x78, 0x91, 0x4c,
+ 0x60, 0x89, 0x69, 0x01, 0x14, 0x97, 0xad, 0xae, 0x0f, 0x5d, 0xed, 0xcb, 0x74, 0x1e, 0xf5, 0xea,
+ 0x0c, 0xbb, 0x97, 0x0a, 0x28, 0x6e, 0xe1, 0xd2, 0xa8, 0x41, 0x76, 0xab, 0x18, 0x36, 0x84, 0x43,
+ 0x83, 0x7e, 0x9b, 0x36, 0xc8, 0x5f, 0x1f, 0x99, 0xb1, 0x4d, 0xc0, 0x52, 0x04, 0xf9, 0x1b, 0xce,
+ 0xc2, 0x44, 0xee, 0xb7, 0x2a, 0x1a, 0x70, 0x17, 0x8d, 0x20, 0x97, 0xb2, 0x43, 0x58, 0x01, 0xb2,
+ 0xd5, 0xf1, 0x70, 0xd3, 0x9b, 0x31, 0xd0, 0xdf, 0xb4, 0x2e, 0x47, 0xfd, 0xa2, 0x22, 0x2c, 0x4f,
+ 0xda, 0xe5, 0x48, 0x88, 0x8b, 0xec, 0x31, 0xfb, 0x26, 0xf6, 0x37, 0xed, 0x75, 0xcd, 0x36, 0x44,
+ 0xdc, 0x67, 0x86, 0xda, 0x02, 0x90, 0xac, 0x60, 0xc4, 0x97, 0x2c, 0xb6, 0x9d, 0x16, 0x0e, 0xd1,
+ 0x4e, 0x47, 0x5d, 0x8d, 0x0c, 0x65, 0x8e, 0x2b, 0x7e, 0x64, 0xab, 0x91, 0x89, 0x6c, 0x4c, 0xe0,
+ 0xf6, 0xd2, 0xe0, 0x3c, 0xee, 0x44, 0x5b, 0xeb, 0xa8, 0x7b, 0x35, 0x54, 0x58, 0x63, 0x3b, 0x7b,
+ 0x3b, 0xca, 0x5e, 0x4d, 0x3c, 0x0f, 0x13, 0x40, 0x6b, 0x81, 0xa2, 0xf5, 0x79, 0x3a, 0x8c, 0x66,
+ 0xbc, 0x5d, 0xea, 0x39, 0xae, 0x9f, 0x6e, 0xbb, 0x14, 0x71, 0x67, 0xe0, 0xef, 0xd2, 0x9e, 0xdf,
+ 0xe2, 0x8f, 0x67, 0x8f, 0x6b, 0xf8, 0x4c, 0x71, 0x7e, 0x6b, 0x18, 0x03, 0xd9, 0xc3, 0xfb, 0xd6,
+ 0x23, 0x1a, 0x3c, 0x47, 0x6d, 0x8e, 0xb4, 0x0d, 0x8c, 0x6d, 0xe8, 0x1c, 0xa5, 0x39, 0xc6, 0xf3,
+ 0x90, 0x3d, 0x5e, 0x7f, 0xcf, 0x0c, 0x9c, 0x6f, 0x9a, 0xe0, 0xc0, 0x19, 0xb4, 0xcc, 0xc2, 0x88,
+ 0x2d, 0x73, 0xd4, 0xdd, 0x05, 0x2a, 0xeb, 0xf1, 0x0d, 0x98, 0xa3, 0xec, 0x2e, 0x24, 0x30, 0x91,
+ 0x3d, 0xe2, 0x6f, 0x96, 0x41, 0xa1, 0x39, 0xf9, 0xf1, 0x72, 0xd4, 0xb9, 0x08, 0x96, 0x55, 0x73,
+ 0x6c, 0xc3, 0xe5, 0x28, 0x73, 0x91, 0x58, 0x16, 0x26, 0x10, 0xbf, 0xff, 0x38, 0x98, 0xc3, 0x13,
+ 0xee, 0x60, 0xb7, 0xf5, 0xef, 0xe9, 0xa8, 0xf9, 0xfa, 0x0c, 0xdb, 0xea, 0x7d, 0x60, 0x3a, 0xd8,
+ 0x1d, 0xa2, 0x23, 0xe7, 0xa2, 0x58, 0xfb, 0x0c, 0xb8, 0x34, 0xc2, 0xef, 0x0f, 0xe5, 0x13, 0x31,
+ 0xf6, 0x9d, 0xc0, 0x51, 0x7d, 0x22, 0x8e, 0x74, 0x37, 0xf0, 0xb7, 0xa3, 0x11, 0xf5, 0xfb, 0xb3,
+ 0xc3, 0xbc, 0x7f, 0x97, 0x30, 0x3f, 0x60, 0x97, 0xf0, 0x13, 0x2c, 0x96, 0x4d, 0x1e, 0xcb, 0x7b,
+ 0x44, 0x45, 0x38, 0xc6, 0xb1, 0xf6, 0xbd, 0x21, 0x9c, 0xe7, 0x38, 0x38, 0x97, 0x0e, 0xc5, 0xcb,
+ 0x04, 0xce, 0x4f, 0xe6, 0xa3, 0x31, 0xf7, 0x93, 0x19, 0xb6, 0xe3, 0xbe, 0xc3, 0x19, 0xf9, 0x03,
+ 0x87, 0x33, 0xb8, 0x96, 0x5e, 0x38, 0x64, 0x4b, 0xff, 0x24, 0xab, 0x1d, 0x2d, 0x5e, 0x3b, 0x9e,
+ 0x2e, 0x8e, 0xc8, 0xf8, 0x46, 0xe6, 0xf7, 0x85, 0xea, 0x71, 0x9e, 0x53, 0x8f, 0xf2, 0xe1, 0x98,
+ 0xc9, 0x5e, 0x3f, 0x7e, 0x23, 0x98, 0xd0, 0x1e, 0x71, 0x7b, 0x1f, 0x75, 0x23, 0x92, 0x13, 0xe2,
+ 0xd8, 0x46, 0xee, 0x51, 0x36, 0x22, 0x87, 0x71, 0x32, 0x81, 0x90, 0x6e, 0xf3, 0x60, 0x16, 0xf3,
+ 0x74, 0xde, 0xea, 0x6c, 0x43, 0x5f, 0x7b, 0x0d, 0x71, 0x55, 0x0c, 0x02, 0x68, 0x8e, 0x29, 0xca,
+ 0x51, 0xdc, 0xb1, 0xd9, 0xb4, 0xfe, 0x02, 0x84, 0xc9, 0x45, 0x86, 0xc1, 0x49, 0x07, 0x62, 0x1c,
+ 0xca, 0x41, 0xf6, 0x90, 0x7d, 0x8c, 0x38, 0x73, 0xd4, 0xcc, 0x7d, 0x67, 0xcf, 0xd7, 0x1e, 0x1a,
+ 0x43, 0x07, 0xbd, 0x04, 0x8a, 0x5d, 0x4c, 0x8d, 0x9e, 0xce, 0x48, 0x9e, 0xee, 0x50, 0x11, 0x90,
+ 0xf2, 0x0d, 0xfa, 0x65, 0xda, 0x23, 0x1a, 0x91, 0x1c, 0x09, 0x9d, 0x49, 0x1f, 0xd1, 0x18, 0x52,
+ 0xfe, 0x44, 0xae, 0xea, 0x99, 0x46, 0xa5, 0x5b, 0xbb, 0x96, 0x3f, 0xa6, 0x40, 0x10, 0x5d, 0x44,
+ 0x2b, 0x08, 0x04, 0x81, 0x1f, 0xd2, 0x1e, 0x3c, 0x65, 0xa4, 0x82, 0x3e, 0x9f, 0xf4, 0xc1, 0xd3,
+ 0xe4, 0xe2, 0xb3, 0xc7, 0xe4, 0xa7, 0x49, 0xcb, 0x3a, 0x47, 0x7c, 0x70, 0x33, 0x74, 0xef, 0x1d,
+ 0xb9, 0xb1, 0x10, 0xd6, 0x8e, 0xae, 0xb1, 0x0c, 0x2c, 0x3f, 0x7b, 0x60, 0x7e, 0xf1, 0x3b, 0x41,
+ 0xa1, 0x02, 0x2f, 0xee, 0x6d, 0x6b, 0x77, 0x83, 0xe9, 0x96, 0x0b, 0x61, 0xd5, 0xde, 0x72, 0x90,
+ 0x74, 0x7d, 0xf4, 0x3f, 0x80, 0x84, 0x3e, 0x21, 0x3c, 0x76, 0xa0, 0xd9, 0x89, 0x8e, 0xa1, 0x05,
+ 0x8f, 0xda, 0xcb, 0x25, 0x90, 0x6f, 0xfa, 0xa6, 0xaf, 0xcd, 0x84, 0xd8, 0x6a, 0x0f, 0xb1, 0x58,
+ 0xdc, 0xcd, 0x63, 0x71, 0x13, 0x27, 0x0b, 0xcc, 0xc1, 0x22, 0xfa, 0x3e, 0x06, 0x00, 0x0d, 0x4c,
+ 0x3f, 0xe0, 0x39, 0x36, 0xca, 0x11, 0x9c, 0x94, 0x0c, 0x9e, 0xb5, 0x57, 0x85, 0xe2, 0xbe, 0x97,
+ 0x13, 0xf7, 0xe3, 0xc5, 0x8a, 0x98, 0xc0, 0x4a, 0x9b, 0x04, 0x66, 0x90, 0x68, 0x57, 0xa1, 0xd9,
+ 0xf1, 0xb4, 0xef, 0x88, 0x94, 0x3f, 0x46, 0xcc, 0xda, 0x87, 0x85, 0x63, 0x7a, 0x92, 0x5a, 0x85,
+ 0xc4, 0xe3, 0xfd, 0x05, 0x82, 0x98, 0x26, 0x12, 0x1f, 0xd3, 0xe4, 0x36, 0x90, 0xb7, 0xec, 0x2d,
+ 0x87, 0x7a, 0xaf, 0x3d, 0x3a, 0x86, 0x36, 0xd2, 0x09, 0x03, 0x67, 0x14, 0x0c, 0xf8, 0x99, 0xcc,
+ 0xd6, 0x44, 0xee, 0xce, 0xcb, 0xa3, 0xd2, 0xb5, 0xff, 0xff, 0x50, 0x61, 0xab, 0x2a, 0xc8, 0xf7,
+ 0x4c, 0x7f, 0x87, 0x16, 0x8d, 0xff, 0x23, 0x1b, 0x79, 0xcf, 0x36, 0x6d, 0xc7, 0xde, 0xdf, 0xb5,
+ 0x9e, 0x13, 0x5e, 0xd1, 0xcb, 0xa5, 0x21, 0xce, 0xb7, 0xa1, 0x0d, 0x5d, 0xd3, 0x87, 0xcd, 0xcb,
+ 0xdb, 0x78, 0x8e, 0x35, 0x6d, 0xb0, 0x49, 0xa9, 0xf5, 0x1f, 0x71, 0x1c, 0xaf, 0xff, 0x5b, 0x56,
+ 0x17, 0xe2, 0x80, 0x4f, 0x54, 0xff, 0x83, 0xe7, 0x54, 0xfa, 0x3f, 0xa0, 0x88, 0xec, 0xd1, 0xf8,
+ 0x37, 0x09, 0xcc, 0x35, 0x91, 0xc2, 0x35, 0xf7, 0x76, 0x77, 0x4d, 0x77, 0x5f, 0xbb, 0x21, 0x42,
+ 0x85, 0x51, 0xcd, 0x1c, 0xa7, 0x9a, 0xda, 0xaf, 0x0b, 0xdf, 0x4e, 0x4d, 0x9b, 0x36, 0x53, 0x42,
+ 0xea, 0x76, 0xf0, 0x44, 0x50, 0x40, 0xea, 0x1d, 0xf8, 0xf3, 0x25, 0x36, 0x04, 0x92, 0x53, 0x30,
+ 0x30, 0xd6, 0x50, 0xde, 0x26, 0x10, 0x94, 0x43, 0x02, 0xc7, 0x9b, 0xbe, 0xd9, 0xbe, 0xb4, 0xe2,
+ 0xb8, 0xce, 0x9e, 0x6f, 0xd9, 0xd0, 0xd3, 0x1e, 0x13, 0x21, 0x10, 0xe8, 0x7f, 0x2e, 0xd2, 0x7f,
+ 0xed, 0x3f, 0x72, 0xa2, 0xa3, 0x68, 0xd8, 0xad, 0xb2, 0xe4, 0x63, 0xe2, 0x5c, 0x89, 0x8d, 0x8b,
+ 0x22, 0x14, 0xb3, 0x17, 0xda, 0x9b, 0x64, 0xa0, 0xe8, 0x0f, 0xf6, 0x1c, 0xd7, 0xaf, 0x39, 0x6d,
+ 0xb3, 0xeb, 0xf9, 0x8e, 0x0b, 0xb5, 0x46, 0xa2, 0xd4, 0x50, 0x0f, 0xd3, 0x71, 0xda, 0xd1, 0xe0,
+ 0x48, 0x9f, 0x58, 0xb5, 0x93, 0x79, 0x1d, 0xff, 0x98, 0xf0, 0x2e, 0x23, 0x91, 0x4a, 0x3f, 0x47,
+ 0x31, 0x7a, 0x3e, 0xa8, 0x4b, 0x4b, 0xe7, 0x8a, 0x2f, 0xb6, 0xf3, 0x28, 0xc4, 0xd4, 0x04, 0x96,
+ 0xca, 0x25, 0x30, 0xdf, 0xdc, 0xbb, 0x18, 0x12, 0xf1, 0x58, 0x23, 0xe4, 0xb5, 0xc2, 0xc1, 0x2c,
+ 0xa8, 0xe2, 0xb1, 0x84, 0x62, 0xe4, 0x7b, 0x23, 0x98, 0xf7, 0xd8, 0x6c, 0x14, 0x6f, 0x3e, 0x51,
+ 0x30, 0x88, 0xc5, 0xf0, 0x52, 0xb3, 0x17, 0xe0, 0xfb, 0x24, 0x30, 0xdf, 0xe8, 0x41, 0x1b, 0x76,
+ 0x88, 0x8f, 0x1d, 0x27, 0xc0, 0x97, 0xa7, 0x14, 0x20, 0x47, 0x28, 0x46, 0x80, 0x91, 0x3f, 0x6c,
+ 0x25, 0x10, 0x5e, 0x94, 0x90, 0x4a, 0x70, 0x49, 0xa5, 0x65, 0x2f, 0xb8, 0x2f, 0x49, 0x60, 0xd6,
+ 0xd8, 0xb3, 0xd7, 0x5d, 0x07, 0x8d, 0xc6, 0xae, 0x76, 0x4f, 0xd4, 0x41, 0xdc, 0x0a, 0x4e, 0x74,
+ 0xf6, 0x5c, 0xbc, 0xfe, 0x54, 0xb5, 0x9b, 0xb0, 0xed, 0xd8, 0x1d, 0x0f, 0xd7, 0xa3, 0x60, 0x1c,
+ 0x7c, 0x71, 0x57, 0xfe, 0x05, 0x7f, 0x25, 0xe7, 0xb4, 0x17, 0x09, 0x47, 0xcc, 0x21, 0x95, 0x67,
+ 0x8a, 0x16, 0xef, 0x09, 0x04, 0xe3, 0xe2, 0x0c, 0x2b, 0x21, 0x7b, 0xe1, 0x7e, 0x5e, 0x02, 0x6a,
+ 0xa9, 0xdd, 0x76, 0xf6, 0x6c, 0xbf, 0x09, 0xbb, 0xb0, 0xed, 0xb7, 0x5c, 0xb3, 0x0d, 0x59, 0xfb,
+ 0x59, 0x01, 0x72, 0xc7, 0x72, 0x69, 0x1f, 0x8c, 0xfe, 0x52, 0x39, 0xbe, 0x5c, 0x78, 0xc7, 0x91,
+ 0xd4, 0xf2, 0x60, 0x29, 0x29, 0xc4, 0x29, 0xb6, 0xaf, 0x28, 0x58, 0x50, 0xf6, 0x52, 0xfd, 0xa4,
+ 0x04, 0x66, 0x82, 0x1e, 0x7b, 0x5b, 0x44, 0x98, 0x3f, 0x9d, 0x72, 0x32, 0x12, 0x12, 0x4f, 0x21,
+ 0xc3, 0x77, 0xa5, 0x98, 0x55, 0xc4, 0xd1, 0x4f, 0x27, 0xba, 0x52, 0x7a, 0xd1, 0xa1, 0xc7, 0x7a,
+ 0x63, 0x73, 0xb9, 0x51, 0xab, 0xe8, 0x86, 0x22, 0x6b, 0x5f, 0x96, 0x40, 0x7e, 0xdd, 0xb2, 0xb7,
+ 0xd9, 0xc0, 0x66, 0x27, 0x91, 0x1d, 0xd9, 0x81, 0x0f, 0xd2, 0x96, 0x4e, 0x1e, 0xd4, 0x3b, 0xc0,
+ 0x49, 0x7b, 0x6f, 0xf7, 0x22, 0x74, 0x1b, 0x5b, 0x78, 0x94, 0xf5, 0x5a, 0x4e, 0x13, 0xda, 0xc4,
+ 0x08, 0x2d, 0x18, 0x03, 0xdf, 0xf1, 0x26, 0x98, 0xc0, 0xe4, 0x01, 0x71, 0x12, 0x23, 0xf1, 0x90,
+ 0x29, 0x89, 0x61, 0x2a, 0xd5, 0xb4, 0x61, 0x00, 0xf1, 0xec, 0x35, 0xf5, 0x37, 0x0b, 0xe0, 0xea,
+ 0x92, 0xbd, 0x8f, 0x6d, 0x0a, 0xd2, 0xc1, 0x97, 0x77, 0x4c, 0x7b, 0x1b, 0xe2, 0x01, 0x22, 0x94,
+ 0x38, 0x1b, 0xe9, 0x3f, 0xc7, 0x47, 0xfa, 0x57, 0x0d, 0x30, 0xe5, 0xb8, 0x1d, 0xe8, 0x2e, 0xed,
+ 0x63, 0x9e, 0xfa, 0x97, 0x9d, 0x69, 0x9b, 0x1c, 0x54, 0xc4, 0x22, 0x25, 0xbf, 0xd8, 0x20, 0xdf,
+ 0x1b, 0x01, 0xa1, 0xb3, 0xb7, 0x82, 0x29, 0x9a, 0xa6, 0xce, 0x81, 0xe9, 0x86, 0x51, 0xd1, 0x8d,
+ 0xcd, 0x6a, 0x45, 0x39, 0xa6, 0x5e, 0x05, 0x8e, 0x57, 0x5b, 0xba, 0x51, 0x6a, 0x55, 0x1b, 0xf5,
+ 0x4d, 0x9c, 0xae, 0xe4, 0xb4, 0xe7, 0xe7, 0x45, 0x3d, 0x7b, 0x93, 0x99, 0x19, 0x04, 0xab, 0x01,
+ 0xa6, 0xda, 0x24, 0x03, 0x1e, 0x42, 0x67, 0x53, 0xd5, 0x8e, 0x12, 0x24, 0x09, 0x46, 0x40, 0x48,
+ 0x3d, 0x03, 0xc0, 0x15, 0xd7, 0xb1, 0xb7, 0xa3, 0x33, 0x6d, 0xd3, 0x06, 0x93, 0xa2, 0x3d, 0x94,
+ 0x03, 0x45, 0xf2, 0x0d, 0xbe, 0xd9, 0x04, 0xff, 0x8b, 0x04, 0x1f, 0x3c, 0x23, 0x8b, 0x17, 0xcb,
+ 0x2b, 0x9a, 0x68, 0xd1, 0x47, 0xa4, 0x8b, 0x44, 0x06, 0xc4, 0x12, 0xa6, 0x55, 0xb9, 0x0d, 0x14,
+ 0xc9, 0xb7, 0xd4, 0xeb, 0x20, 0x3e, 0x4a, 0x29, 0xc9, 0x26, 0xe8, 0xa7, 0x2c, 0x2e, 0xd3, 0xec,
+ 0xb5, 0xf9, 0x23, 0x12, 0x98, 0xae, 0x43, 0xbf, 0xbc, 0x03, 0xdb, 0x97, 0xb4, 0xc7, 0xf1, 0x0b,
+ 0xa0, 0x5d, 0x0b, 0xda, 0xfe, 0x85, 0xdd, 0x6e, 0xb8, 0x00, 0x1a, 0x24, 0x68, 0x2f, 0x64, 0x3b,
+ 0xdf, 0x67, 0xf0, 0xfa, 0x73, 0xcb, 0x80, 0xba, 0x06, 0x25, 0xc4, 0xa8, 0xcc, 0x29, 0x50, 0x74,
+ 0xa1, 0xb7, 0xd7, 0x0d, 0x16, 0xd1, 0xe8, 0x93, 0xf6, 0x70, 0x28, 0xce, 0x32, 0x27, 0xce, 0xdb,
+ 0xc4, 0x8b, 0x98, 0x40, 0xd8, 0xd3, 0x3c, 0x98, 0xaa, 0xda, 0x96, 0x6f, 0x99, 0x5d, 0xed, 0x45,
+ 0x79, 0x30, 0xdf, 0x84, 0xfe, 0xba, 0xe9, 0x9a, 0xbb, 0xd0, 0x87, 0xae, 0xa7, 0x7d, 0x83, 0xef,
+ 0x13, 0x7a, 0x5d, 0xd3, 0xdf, 0x72, 0xdc, 0xdd, 0x40, 0x35, 0x83, 0x67, 0xa4, 0x9a, 0x97, 0xa1,
+ 0xeb, 0x45, 0x7c, 0x05, 0x8f, 0xe8, 0xcd, 0x15, 0xc7, 0xbd, 0x84, 0x06, 0x41, 0x3a, 0x4d, 0xa3,
+ 0x8f, 0x88, 0x5e, 0xd7, 0xd9, 0xae, 0xc1, 0xcb, 0x30, 0x88, 0xaa, 0x16, 0x3e, 0xa3, 0xb9, 0x40,
+ 0xc7, 0xa9, 0x3b, 0x3e, 0xea, 0xb4, 0x6b, 0xce, 0x36, 0x09, 0x3b, 0x3b, 0x6d, 0xf0, 0x89, 0x51,
+ 0x2e, 0xf3, 0x32, 0xc4, 0xb9, 0x8a, 0x6c, 0x2e, 0x9a, 0xa8, 0x2e, 0x02, 0x35, 0xfc, 0xac, 0x05,
+ 0xbb, 0x70, 0x17, 0xfa, 0xee, 0x3e, 0xbe, 0x5d, 0x62, 0xda, 0x18, 0xf0, 0x86, 0x0e, 0xd0, 0xe2,
+ 0x93, 0x75, 0x2a, 0xbd, 0x45, 0x4e, 0x72, 0x87, 0x9a, 0xac, 0x8b, 0x50, 0x9c, 0xc8, 0xed, 0x59,
+ 0x32, 0xb2, 0x66, 0x5e, 0x21, 0x83, 0x3c, 0x1e, 0x3c, 0xdf, 0x9c, 0xe3, 0x56, 0x98, 0x76, 0xa1,
+ 0xe7, 0x99, 0xdb, 0x30, 0x58, 0x61, 0xa2, 0x8f, 0xea, 0x9d, 0xa0, 0xd0, 0xc5, 0x98, 0x92, 0xc1,
+ 0xe1, 0x06, 0xae, 0x66, 0xc8, 0xc0, 0x40, 0xb4, 0xc2, 0x91, 0x00, 0xc3, 0x6d, 0x90, 0x2f, 0xce,
+ 0xde, 0x07, 0x0a, 0x04, 0xfe, 0x19, 0x50, 0xa8, 0xe8, 0x4b, 0x1b, 0x2b, 0xca, 0x31, 0xf4, 0x37,
+ 0xe0, 0x6f, 0x06, 0x14, 0x96, 0x4b, 0xad, 0x52, 0x4d, 0x91, 0x50, 0x3d, 0xaa, 0xf5, 0xe5, 0x86,
+ 0x22, 0xa3, 0xc4, 0xf5, 0x52, 0xbd, 0x5a, 0x56, 0xf2, 0xea, 0x2c, 0x98, 0x3a, 0x5f, 0x32, 0xea,
+ 0xd5, 0xfa, 0x8a, 0x52, 0xd0, 0xfe, 0x92, 0xc5, 0xef, 0x2e, 0x1e, 0xbf, 0x1b, 0xe3, 0x78, 0x1a,
+ 0x04, 0xd9, 0xcf, 0x87, 0x90, 0xdd, 0xc3, 0x41, 0xf6, 0x9d, 0x22, 0x44, 0x26, 0xe0, 0xce, 0x54,
+ 0x04, 0x53, 0xeb, 0xae, 0xd3, 0x86, 0x9e, 0xa7, 0xfd, 0x8c, 0x04, 0x8a, 0x65, 0xd3, 0x6e, 0xc3,
+ 0xae, 0x76, 0x4d, 0x04, 0x15, 0x71, 0x15, 0xcd, 0x05, 0xae, 0xa2, 0xda, 0xd7, 0x72, 0xa2, 0xbd,
+ 0x1f, 0xa5, 0xbb, 0x48, 0x68, 0xc6, 0xc8, 0x47, 0xac, 0x97, 0x4b, 0x24, 0x35, 0x81, 0x1b, 0x76,
+ 0x24, 0x30, 0x43, 0x57, 0x03, 0x2e, 0x42, 0x76, 0x1e, 0xfe, 0x8d, 0x9c, 0xe8, 0xe4, 0x30, 0xa8,
+ 0x41, 0x48, 0x26, 0x46, 0x1e, 0x62, 0x13, 0xc1, 0x61, 0xd4, 0x26, 0xb0, 0x79, 0x28, 0x81, 0xd9,
+ 0x0d, 0xdb, 0x1b, 0x24, 0x14, 0xf1, 0x70, 0xfc, 0x41, 0x35, 0x18, 0x42, 0x87, 0x0a, 0xc7, 0x3f,
+ 0x9c, 0x5e, 0xf6, 0x82, 0xf9, 0x46, 0x0e, 0x9c, 0x5c, 0x81, 0x36, 0x74, 0xad, 0x36, 0xa9, 0x41,
+ 0x20, 0x89, 0x7b, 0x78, 0x49, 0x3c, 0x8e, 0xe3, 0x7c, 0xd0, 0x17, 0xbc, 0x04, 0x5e, 0x1d, 0x4a,
+ 0xe0, 0x19, 0x9c, 0x04, 0x6e, 0x15, 0xa4, 0x33, 0x81, 0x6b, 0xd5, 0x67, 0xc0, 0x5c, 0xdd, 0xf1,
+ 0xad, 0x2d, 0xab, 0x4d, 0x7c, 0xd0, 0x7e, 0x4e, 0x06, 0xf9, 0x9a, 0xe5, 0xf9, 0x5a, 0x29, 0xea,
+ 0x4e, 0xae, 0x07, 0xb3, 0x96, 0xdd, 0xee, 0xee, 0x75, 0xa0, 0x01, 0x4d, 0xd2, 0xaf, 0x4c, 0x1b,
+ 0x6c, 0x52, 0xb4, 0xb5, 0x8f, 0xd8, 0x92, 0x83, 0xad, 0xfd, 0xcf, 0x0a, 0x2f, 0xc3, 0xb0, 0x2c,
+ 0xe0, 0xb8, 0x94, 0x31, 0x76, 0x57, 0x09, 0xcc, 0xdb, 0x4c, 0xd6, 0xc0, 0x60, 0xef, 0xbf, 0x97,
+ 0x80, 0x25, 0x67, 0xf0, 0x5f, 0x68, 0x1f, 0x10, 0x6a, 0xac, 0xc3, 0x18, 0x4a, 0x87, 0xcc, 0xf2,
+ 0x08, 0x93, 0x64, 0x15, 0x2c, 0x54, 0xeb, 0x2d, 0xdd, 0xa8, 0x97, 0x6a, 0x34, 0x8b, 0xac, 0xfd,
+ 0x9b, 0x04, 0x0a, 0x06, 0xec, 0x75, 0xf7, 0xd9, 0xc0, 0xd3, 0xd4, 0x51, 0x3c, 0x17, 0x3a, 0x8a,
+ 0xab, 0xcb, 0x00, 0x98, 0x6d, 0x54, 0x30, 0xbe, 0x99, 0x4b, 0x1a, 0x18, 0xce, 0x94, 0xab, 0x60,
+ 0x29, 0xcc, 0x6d, 0x30, 0x5f, 0x6a, 0x2f, 0x16, 0xde, 0x39, 0xe2, 0xa8, 0x61, 0x0e, 0x63, 0xfa,
+ 0x84, 0x0f, 0x0a, 0x6d, 0xf6, 0x0c, 0x25, 0x77, 0x34, 0xe2, 0xff, 0x8a, 0x04, 0xf2, 0x2d, 0xd4,
+ 0x5b, 0x32, 0x1d, 0xe7, 0x67, 0x46, 0xd3, 0x71, 0x44, 0x26, 0x46, 0xc7, 0xef, 0x05, 0x73, 0xac,
+ 0xc6, 0x52, 0x57, 0x89, 0x44, 0x15, 0xe7, 0x3e, 0x18, 0x45, 0xc3, 0x07, 0xb0, 0x73, 0x34, 0x22,
+ 0xfe, 0xd4, 0xe3, 0x01, 0x58, 0x83, 0xbb, 0x17, 0xa1, 0xeb, 0xed, 0x58, 0x3d, 0xed, 0xaf, 0x65,
+ 0x30, 0xb3, 0x02, 0xfd, 0xa6, 0x6f, 0xfa, 0x7b, 0x5e, 0xdf, 0x76, 0xa7, 0xed, 0x94, 0xcd, 0xf6,
+ 0x0e, 0xa4, 0xdd, 0x51, 0xf0, 0xa8, 0xbd, 0x47, 0x16, 0xf5, 0x27, 0x8a, 0xca, 0x59, 0x0c, 0xcb,
+ 0x88, 0xc1, 0xe4, 0x09, 0x20, 0xdf, 0x31, 0x7d, 0x93, 0x62, 0x71, 0x4d, 0x1f, 0x16, 0x11, 0x21,
+ 0x03, 0x67, 0xd3, 0xde, 0x21, 0x89, 0x38, 0x14, 0x09, 0x94, 0x9f, 0x0e, 0x84, 0x0f, 0xe4, 0x46,
+ 0x40, 0xe1, 0x04, 0x98, 0xaf, 0x37, 0x5a, 0x9b, 0xb5, 0xc6, 0xca, 0x8a, 0x8e, 0x52, 0x15, 0x59,
+ 0x3d, 0x05, 0xd4, 0xf5, 0xd2, 0x85, 0x35, 0xbd, 0xde, 0xda, 0xac, 0x37, 0x2a, 0x3a, 0xfd, 0x32,
+ 0xaf, 0x1e, 0x07, 0xb3, 0xe5, 0x52, 0x79, 0x35, 0x48, 0x28, 0xa8, 0xa7, 0xc1, 0xc9, 0x35, 0x7d,
+ 0x6d, 0x49, 0x37, 0x9a, 0xab, 0xd5, 0xf5, 0x4d, 0x44, 0x66, 0xb9, 0xb1, 0x51, 0xaf, 0x28, 0x45,
+ 0x55, 0x03, 0xa7, 0x98, 0x37, 0xe7, 0x8d, 0x46, 0x7d, 0x65, 0xb3, 0xd9, 0x2a, 0xb5, 0x74, 0x65,
+ 0x4a, 0xbd, 0x0a, 0x1c, 0x2f, 0x97, 0xea, 0x38, 0x7b, 0xb9, 0x51, 0xaf, 0xeb, 0xe5, 0x96, 0x32,
+ 0xad, 0xfd, 0x47, 0x1e, 0xcc, 0x56, 0xbd, 0xba, 0xb9, 0x0b, 0xcf, 0x99, 0x5d, 0xab, 0xa3, 0xbd,
+ 0x88, 0x99, 0x79, 0xdc, 0x08, 0xe6, 0x5d, 0xf2, 0x17, 0x76, 0x5a, 0x16, 0x24, 0x68, 0xce, 0x1b,
+ 0x7c, 0x22, 0x9a, 0x93, 0xdb, 0x98, 0x40, 0x30, 0x27, 0x27, 0x4f, 0xea, 0x12, 0x00, 0xe4, 0x5f,
+ 0x2b, 0xba, 0x23, 0xf6, 0x6c, 0x7f, 0x6b, 0x32, 0x77, 0xa1, 0x07, 0xdd, 0xcb, 0x56, 0x1b, 0x06,
+ 0x39, 0x0d, 0xe6, 0x2b, 0xed, 0x4f, 0x65, 0xd1, 0xfd, 0x45, 0x06, 0x54, 0xa6, 0x3a, 0x31, 0xbd,
+ 0xe1, 0x8f, 0xc8, 0x22, 0xbb, 0x83, 0x42, 0x24, 0xd3, 0x69, 0xca, 0x4b, 0xa5, 0xd1, 0x96, 0x6d,
+ 0x5b, 0x8d, 0xc6, 0x66, 0x73, 0xb5, 0x61, 0xb4, 0x14, 0x59, 0x9d, 0x03, 0xd3, 0xe8, 0xb1, 0xd6,
+ 0xa8, 0xaf, 0x28, 0x79, 0xf5, 0x6a, 0x70, 0x62, 0xb5, 0xd4, 0xdc, 0xac, 0xd6, 0xcf, 0x95, 0x6a,
+ 0xd5, 0xca, 0x66, 0x79, 0xb5, 0x64, 0x34, 0x95, 0x82, 0x7a, 0x0d, 0xb8, 0xba, 0x55, 0xd5, 0x8d,
+ 0xcd, 0x65, 0xbd, 0xd4, 0xda, 0x30, 0xf4, 0xe6, 0x66, 0xbd, 0xb1, 0x59, 0x2f, 0xad, 0xe9, 0x4a,
+ 0x11, 0x35, 0x7f, 0xfc, 0x2a, 0x52, 0x9b, 0xa9, 0x83, 0xca, 0x38, 0x1d, 0xa3, 0x8c, 0x33, 0xfd,
+ 0xca, 0x08, 0x58, 0xb5, 0x32, 0xf4, 0xa6, 0x6e, 0x9c, 0xd3, 0x95, 0xd9, 0x41, 0xba, 0x36, 0xa7,
+ 0x9e, 0x04, 0x0a, 0xe2, 0x61, 0xb3, 0xda, 0x0c, 0x72, 0x56, 0x94, 0x79, 0xed, 0x93, 0x45, 0x70,
+ 0xca, 0x80, 0xdb, 0x96, 0xe7, 0x43, 0x77, 0xdd, 0xdc, 0xdf, 0x85, 0xb6, 0x1f, 0x74, 0xf2, 0xff,
+ 0x9c, 0x5a, 0x19, 0xd7, 0xc0, 0x7c, 0x8f, 0xd0, 0x58, 0x83, 0xfe, 0x8e, 0xd3, 0xa1, 0xa3, 0xf0,
+ 0xe3, 0x62, 0x7b, 0x8e, 0xc5, 0x75, 0x36, 0xbb, 0xc1, 0x7f, 0xcd, 0xe8, 0xb6, 0x9c, 0xa0, 0xdb,
+ 0xf9, 0x51, 0x74, 0x5b, 0xbd, 0x16, 0xcc, 0xec, 0x79, 0xd0, 0xd5, 0x77, 0x4d, 0xab, 0x1b, 0xdc,
+ 0xf1, 0x19, 0x26, 0x68, 0xef, 0xcc, 0x8b, 0x9e, 0x58, 0x61, 0xea, 0x32, 0x58, 0x8c, 0x31, 0x7d,
+ 0xeb, 0x19, 0x00, 0x68, 0x65, 0x37, 0xdc, 0x2e, 0x55, 0x56, 0x26, 0x05, 0xf1, 0x77, 0xd1, 0xea,
+ 0x76, 0x2d, 0x7b, 0x3b, 0xdc, 0xf7, 0x8f, 0x12, 0xb4, 0x97, 0xca, 0x22, 0x27, 0x58, 0xd2, 0xf2,
+ 0x96, 0xae, 0x35, 0xbd, 0x58, 0x9a, 0x70, 0xbf, 0x7b, 0xb0, 0xe9, 0x14, 0x55, 0x05, 0xcc, 0xe1,
+ 0x34, 0xda, 0x02, 0x95, 0x29, 0xd4, 0x07, 0x07, 0xe4, 0xd6, 0xf4, 0xd6, 0x6a, 0xa3, 0x12, 0xbe,
+ 0x9b, 0x46, 0x24, 0x11, 0x33, 0xa5, 0xfa, 0x05, 0xdc, 0x1a, 0x67, 0xd4, 0xc7, 0x80, 0x6b, 0x98,
+ 0x0e, 0xbb, 0x54, 0x33, 0xf4, 0x52, 0xe5, 0xc2, 0xa6, 0xfe, 0xac, 0x6a, 0xb3, 0xd5, 0xe4, 0x1b,
+ 0x57, 0xd0, 0x8e, 0x66, 0x11, 0xbf, 0xfa, 0x5a, 0xa9, 0x5a, 0xa3, 0xfd, 0xfb, 0x72, 0xc3, 0x58,
+ 0x2b, 0xb5, 0x94, 0x39, 0xed, 0x15, 0x32, 0x50, 0x56, 0xa0, 0xbf, 0xee, 0xb8, 0xbe, 0xd9, 0xad,
+ 0x59, 0xf6, 0xa5, 0x0d, 0xb7, 0xcb, 0x4d, 0x36, 0x85, 0xc3, 0x74, 0xf0, 0x43, 0x24, 0x47, 0x30,
+ 0x7e, 0x47, 0xbc, 0x87, 0xb3, 0x45, 0xca, 0x14, 0x25, 0x68, 0xcf, 0x95, 0x44, 0x96, 0xbb, 0xc5,
+ 0x4b, 0x4d, 0xa7, 0x27, 0xcf, 0x9b, 0xf4, 0xf8, 0x3c, 0x00, 0xb5, 0xa2, 0xf6, 0x82, 0x3c, 0x98,
+ 0x5e, 0xb6, 0x6c, 0xb3, 0x6b, 0x3d, 0x87, 0x8b, 0x8e, 0x19, 0xf5, 0x31, 0xb9, 0x84, 0x3e, 0x46,
+ 0x1a, 0x69, 0xfc, 0xfc, 0x29, 0x59, 0x74, 0x79, 0x81, 0x91, 0x7d, 0xc0, 0x64, 0xcc, 0xe0, 0xf9,
+ 0xab, 0x92, 0xc8, 0xf2, 0xc2, 0x70, 0x7a, 0xe9, 0x30, 0xfc, 0xf4, 0xb7, 0x87, 0x8d, 0xd5, 0xd7,
+ 0xbe, 0xa7, 0x07, 0xa9, 0xc2, 0x8c, 0xf6, 0x7b, 0x32, 0xd0, 0x56, 0xa0, 0x7f, 0x0e, 0xba, 0xe1,
+ 0x54, 0x00, 0xf7, 0xfa, 0xd4, 0xde, 0x66, 0x9a, 0xec, 0x9b, 0x59, 0x00, 0xcf, 0xf3, 0x00, 0x96,
+ 0x12, 0x1a, 0x4f, 0x0c, 0xe9, 0x98, 0xc6, 0x5b, 0x05, 0x45, 0x0f, 0xbf, 0xa7, 0x6a, 0xf6, 0xc4,
+ 0xf8, 0xe1, 0x12, 0x13, 0x63, 0xa9, 0x13, 0xc2, 0x06, 0x25, 0xa0, 0x7d, 0x33, 0x9c, 0x04, 0x7d,
+ 0x0f, 0xa7, 0x1d, 0xcb, 0x87, 0x66, 0x36, 0x9d, 0xbe, 0xb8, 0xd9, 0xaa, 0xcb, 0x20, 0xfb, 0x46,
+ 0xfb, 0xd5, 0x02, 0x38, 0x39, 0xa8, 0x3a, 0xda, 0x2f, 0xe7, 0xb8, 0x1d, 0x76, 0x88, 0x87, 0xfc,
+ 0x1c, 0xdd, 0x40, 0x44, 0x0f, 0xea, 0x93, 0xc1, 0xd5, 0xe1, 0x32, 0x5c, 0xcb, 0xa9, 0xc3, 0x2b,
+ 0x5e, 0x17, 0xfa, 0x3e, 0x74, 0x71, 0xd5, 0xa6, 0x8d, 0xc1, 0x2f, 0xd5, 0xa7, 0x82, 0x47, 0x59,
+ 0xb6, 0x67, 0x75, 0xa0, 0xdb, 0xb2, 0x7a, 0x5e, 0xc9, 0xee, 0xb4, 0xf6, 0x7c, 0xc7, 0xb5, 0x4c,
+ 0x7a, 0x23, 0xe5, 0xb4, 0x11, 0xf7, 0x5a, 0xbd, 0x05, 0x28, 0x96, 0xd7, 0xb0, 0x2f, 0x3a, 0xa6,
+ 0xdb, 0xb1, 0xec, 0xed, 0x9a, 0xe5, 0xf9, 0xd4, 0x03, 0xf8, 0x40, 0xba, 0xf6, 0x37, 0xb2, 0xe8,
+ 0x61, 0xba, 0x21, 0xb0, 0xc6, 0x74, 0x28, 0x2f, 0x94, 0x45, 0x8e, 0xc7, 0xa5, 0xa3, 0x9d, 0x4e,
+ 0x59, 0x9e, 0x3f, 0x69, 0x43, 0x62, 0xf0, 0x08, 0x8e, 0xbb, 0x16, 0x92, 0x1e, 0x18, 0x02, 0xe7,
+ 0x74, 0xa3, 0xba, 0x5c, 0xd5, 0x91, 0x59, 0x71, 0x35, 0x38, 0x11, 0xbd, 0xab, 0x5c, 0xd8, 0x6c,
+ 0xea, 0xf5, 0x96, 0x32, 0x8d, 0xfa, 0x29, 0x92, 0xbc, 0x5c, 0xaa, 0xd6, 0xf4, 0xca, 0x66, 0xab,
+ 0x81, 0xde, 0x54, 0x46, 0x33, 0x2d, 0xb4, 0x87, 0xf2, 0xe0, 0x38, 0x96, 0xed, 0x3e, 0x96, 0x2a,
+ 0x12, 0x4a, 0x9f, 0xaf, 0x6d, 0x08, 0xd0, 0x0c, 0x11, 0xaf, 0xf6, 0xbb, 0xc2, 0x17, 0x6e, 0x32,
+ 0x10, 0xf6, 0x95, 0x11, 0xa3, 0x19, 0xdf, 0x90, 0x44, 0x22, 0x54, 0x08, 0x93, 0x4d, 0xa7, 0x14,
+ 0xff, 0x32, 0xe9, 0x11, 0x27, 0x1e, 0x7c, 0x6c, 0x65, 0x96, 0xf1, 0xc7, 0xcf, 0x5a, 0xaf, 0x1a,
+ 0x58, 0x1d, 0x16, 0x00, 0xc0, 0x29, 0x58, 0x83, 0x88, 0x1e, 0x0c, 0x1c, 0xaf, 0xe2, 0xf4, 0xa0,
+ 0x54, 0x6e, 0x55, 0xcf, 0xe9, 0x71, 0x7a, 0xf0, 0x39, 0x19, 0x4c, 0xaf, 0x40, 0x1f, 0xcd, 0xa9,
+ 0x3c, 0xed, 0x69, 0x02, 0xeb, 0x3f, 0xc8, 0x8c, 0xe9, 0x3a, 0x6d, 0xb3, 0x1b, 0x2e, 0x03, 0x90,
+ 0x27, 0xed, 0x87, 0x47, 0x31, 0x41, 0x82, 0xa2, 0x63, 0xc6, 0xab, 0xef, 0x06, 0x05, 0x1f, 0xbd,
+ 0xa6, 0xcb, 0xd0, 0xdf, 0x11, 0x3b, 0x5c, 0x21, 0x22, 0x15, 0xd3, 0x37, 0x0d, 0x92, 0x9f, 0x19,
+ 0x9d, 0x04, 0x6d, 0x97, 0x18, 0x46, 0xbe, 0x1d, 0xed, 0xcf, 0xbf, 0x94, 0xc1, 0xd5, 0xa4, 0x7d,
+ 0x94, 0x7a, 0xbd, 0xa6, 0xef, 0xb8, 0xd0, 0x80, 0x6d, 0x68, 0xf5, 0xfc, 0xbe, 0xf5, 0x3d, 0x97,
+ 0xa4, 0x06, 0x9b, 0xcd, 0xf4, 0x51, 0x7b, 0x83, 0x2c, 0x1a, 0xe1, 0xf7, 0x40, 0x7b, 0xec, 0x2b,
+ 0x2f, 0xa6, 0xb1, 0x7f, 0x42, 0x12, 0x89, 0xd9, 0x9b, 0x92, 0x78, 0x3a, 0xa0, 0x3e, 0x7a, 0x04,
+ 0x40, 0x05, 0x2b, 0x37, 0x86, 0x5e, 0xd6, 0xab, 0xeb, 0x68, 0x10, 0xb8, 0x0e, 0x3c, 0x7a, 0x7d,
+ 0xc3, 0x28, 0xaf, 0x96, 0x9a, 0xfa, 0xa6, 0xa1, 0xaf, 0x54, 0x9b, 0x2d, 0xea, 0x94, 0x45, 0xbe,
+ 0x9a, 0x52, 0xaf, 0x05, 0xa7, 0x9b, 0x1b, 0x4b, 0xcd, 0xb2, 0x51, 0x5d, 0xc7, 0xe9, 0x86, 0x5e,
+ 0xd7, 0xcf, 0xd3, 0xb7, 0xd3, 0xda, 0x87, 0x15, 0x30, 0x8b, 0x26, 0x00, 0x4d, 0x32, 0x2f, 0xd0,
+ 0xfe, 0x2e, 0x0f, 0x66, 0x0d, 0xe8, 0x39, 0xdd, 0xcb, 0x78, 0x8e, 0x30, 0xa9, 0xa9, 0xc7, 0xd7,
+ 0x65, 0xd1, 0xf3, 0xdb, 0x0c, 0xb3, 0x8b, 0x0c, 0xa3, 0xf1, 0x13, 0x4d, 0xf3, 0xb2, 0x69, 0x75,
+ 0xcd, 0x8b, 0xb4, 0xab, 0x99, 0x36, 0xa2, 0x04, 0x75, 0x11, 0xa8, 0xce, 0x15, 0x1b, 0xba, 0xcd,
+ 0xf6, 0x15, 0xdd, 0xdf, 0x29, 0x75, 0x3a, 0x2e, 0xf4, 0x3c, 0xba, 0x7a, 0x31, 0xe0, 0x8d, 0x7a,
+ 0x33, 0x38, 0x8e, 0x53, 0x99, 0xcc, 0xc4, 0x41, 0xa6, 0x3f, 0x39, 0xcc, 0x59, 0xb2, 0xf7, 0x83,
+ 0x9c, 0x05, 0x26, 0x67, 0x94, 0xcc, 0x1e, 0x97, 0x28, 0xf2, 0xa7, 0x74, 0xae, 0x07, 0xb3, 0xb6,
+ 0xb9, 0x0b, 0xf5, 0x07, 0x7b, 0x96, 0x0b, 0x3d, 0xec, 0x18, 0x23, 0x1b, 0x6c, 0x92, 0xf6, 0xab,
+ 0x42, 0xe7, 0xcd, 0xc5, 0x24, 0x96, 0x4e, 0xf7, 0x57, 0x46, 0x50, 0xfd, 0x01, 0xfd, 0x8c, 0xac,
+ 0x7d, 0x58, 0x06, 0x73, 0x94, 0xa9, 0x92, 0xbd, 0x5f, 0xed, 0x68, 0xd7, 0x71, 0xc6, 0xaf, 0x89,
+ 0xd2, 0x02, 0xe3, 0x17, 0x3f, 0x68, 0x3f, 0x2a, 0x8b, 0xba, 0x3b, 0x0f, 0xa8, 0x38, 0x2e, 0x23,
+ 0xde, 0x71, 0x74, 0xcb, 0xd9, 0xa3, 0x8e, 0xaa, 0xd3, 0x06, 0x79, 0xc8, 0x72, 0x51, 0x4f, 0xfb,
+ 0x35, 0x21, 0x67, 0x6a, 0xc1, 0x6a, 0x1c, 0x11, 0x80, 0x9f, 0x92, 0xc1, 0x02, 0xe5, 0xaa, 0x49,
+ 0xcf, 0xf9, 0x08, 0x1d, 0x78, 0xfb, 0x71, 0x61, 0x43, 0x70, 0x40, 0xfd, 0x69, 0x49, 0x8f, 0x18,
+ 0x20, 0x3f, 0x26, 0x14, 0x1c, 0x4d, 0xb8, 0x22, 0x47, 0x04, 0xe5, 0xbb, 0xf2, 0x60, 0x76, 0xc3,
+ 0x83, 0x2e, 0xf5, 0xdb, 0xd7, 0x1e, 0xce, 0x03, 0x79, 0x05, 0x72, 0x1b, 0xa9, 0x2f, 0x11, 0xf6,
+ 0xf0, 0x65, 0x2b, 0xcb, 0x10, 0x45, 0x36, 0x52, 0x0c, 0x6c, 0x37, 0x81, 0x05, 0x22, 0xd2, 0x92,
+ 0xef, 0x23, 0x23, 0x31, 0xf0, 0xa6, 0xed, 0x4b, 0x1d, 0xc7, 0x56, 0x11, 0x2e, 0x0b, 0x65, 0x29,
+ 0x23, 0x9e, 0x6a, 0x70, 0x8b, 0xcc, 0x67, 0xf3, 0x46, 0x5f, 0xaa, 0x7a, 0x3b, 0xb8, 0xca, 0xe9,
+ 0x41, 0x72, 0x7e, 0x85, 0xc9, 0x5c, 0xc0, 0x99, 0x07, 0xbd, 0xd2, 0xfe, 0x4e, 0xc8, 0x57, 0x57,
+ 0x5c, 0x3a, 0xe9, 0x74, 0xa1, 0x37, 0x1e, 0x93, 0xe4, 0x24, 0x50, 0x50, 0x0e, 0xbc, 0xff, 0x62,
+ 0xe8, 0xcd, 0x46, 0xed, 0x9c, 0x3e, 0x78, 0x19, 0xa3, 0xa0, 0x3d, 0x5f, 0x06, 0x33, 0x4b, 0xae,
+ 0x63, 0x76, 0xda, 0xa6, 0xe7, 0x6b, 0xdf, 0x94, 0xc0, 0xdc, 0xba, 0xb9, 0xdf, 0x75, 0xcc, 0x0e,
+ 0xf6, 0xef, 0xef, 0xeb, 0x0b, 0x7a, 0xe4, 0x55, 0xd0, 0x17, 0xd0, 0x47, 0xfe, 0x60, 0x60, 0x78,
+ 0x74, 0x2f, 0x27, 0x72, 0xaf, 0x66, 0xb8, 0xcd, 0x27, 0x0d, 0x0a, 0x56, 0x1a, 0xf0, 0xb5, 0xc8,
+ 0xf2, 0x14, 0x63, 0x51, 0x7e, 0x58, 0x2c, 0xfc, 0xa8, 0x08, 0xc9, 0xa3, 0xd9, 0x95, 0x7f, 0xc1,
+ 0x34, 0x28, 0x56, 0x20, 0xb6, 0xe2, 0xfe, 0xa7, 0x04, 0xa6, 0x9a, 0xd0, 0xc7, 0x16, 0xdc, 0x9d,
+ 0x9c, 0xa7, 0x70, 0x07, 0x67, 0x88, 0x9c, 0xd8, 0x83, 0x67, 0x34, 0x59, 0x67, 0xce, 0x5b, 0xe3,
+ 0xff, 0x29, 0x3c, 0x12, 0x49, 0xb9, 0x8b, 0xb4, 0xcc, 0x43, 0x79, 0x24, 0x26, 0x92, 0xca, 0xde,
+ 0xd7, 0xea, 0x3d, 0x12, 0x75, 0xad, 0x62, 0x7a, 0xbd, 0xd7, 0xb0, 0xfa, 0x99, 0xe8, 0x6d, 0x46,
+ 0x99, 0x4f, 0x70, 0x8e, 0x7a, 0x12, 0x98, 0x22, 0x32, 0x0f, 0xe6, 0xa3, 0xfd, 0x7e, 0x0a, 0x84,
+ 0x04, 0x3e, 0x7b, 0x1d, 0xe4, 0x14, 0x74, 0x51, 0x8b, 0x2f, 0x7c, 0x22, 0x31, 0x08, 0xe6, 0xea,
+ 0xd0, 0xbf, 0xe2, 0xb8, 0x97, 0x9a, 0xbe, 0xe9, 0x43, 0xed, 0x5f, 0x24, 0x72, 0x5d, 0x1e, 0x13,
+ 0xfd, 0xa4, 0x0e, 0x4e, 0x90, 0x0a, 0xd1, 0x8c, 0xb8, 0xff, 0x26, 0x15, 0xb9, 0x7e, 0xa0, 0x10,
+ 0x98, 0x7c, 0xc6, 0xc1, 0x4f, 0xb5, 0x9f, 0x19, 0x18, 0xf4, 0x49, 0x1a, 0x30, 0x69, 0xa0, 0x92,
+ 0x61, 0x19, 0x8c, 0xbf, 0x1f, 0x4f, 0xfb, 0x88, 0x90, 0x59, 0x2d, 0x46, 0xf3, 0x68, 0xba, 0x82,
+ 0x7f, 0x7f, 0x1c, 0xc8, 0x97, 0x77, 0x4c, 0x5f, 0x7b, 0xb7, 0x0c, 0x40, 0xa9, 0xd3, 0x59, 0x23,
+ 0x3e, 0xe0, 0xac, 0x43, 0xda, 0x59, 0x30, 0xd7, 0xde, 0x31, 0xa3, 0x9b, 0x33, 0x48, 0x7f, 0xc0,
+ 0xa5, 0xa9, 0x4f, 0x8e, 0x9c, 0xc9, 0x89, 0x54, 0xb5, 0x3e, 0x98, 0x50, 0x19, 0x94, 0x76, 0xe8,
+ 0x68, 0xce, 0x87, 0xc2, 0x4c, 0x3c, 0x42, 0x87, 0x3e, 0x5f, 0x8c, 0xd8, 0x8b, 0x9f, 0xc3, 0x51,
+ 0xd2, 0xe1, 0x01, 0x9b, 0x28, 0x21, 0xe5, 0x49, 0x6f, 0xb1, 0x80, 0x1e, 0xc9, 0x7c, 0x4d, 0x24,
+ 0x74, 0xad, 0xaa, 0x77, 0xac, 0x40, 0xb4, 0x34, 0x60, 0x96, 0xf6, 0xe2, 0x5c, 0x3a, 0xf8, 0x92,
+ 0x05, 0xf7, 0x0c, 0x30, 0x0f, 0x3b, 0x96, 0x0f, 0x83, 0x5a, 0x52, 0x01, 0x26, 0x41, 0xcc, 0x7f,
+ 0xa0, 0x3d, 0x4f, 0x38, 0xe8, 0x1a, 0x16, 0xe8, 0xc1, 0x1a, 0xc5, 0xb4, 0x3f, 0xb1, 0x30, 0x6a,
+ 0x62, 0x34, 0xb3, 0x07, 0xeb, 0x87, 0x65, 0x70, 0x75, 0xcb, 0xd9, 0xde, 0xee, 0xc2, 0x40, 0x4c,
+ 0x90, 0x78, 0x67, 0x6a, 0xe6, 0x38, 0xe1, 0xc2, 0x3b, 0x41, 0xce, 0x03, 0x56, 0x78, 0x94, 0x0c,
+ 0x3d, 0xf0, 0x27, 0xa6, 0x12, 0x67, 0x51, 0x58, 0x5c, 0x03, 0xf9, 0x8c, 0x41, 0x41, 0x2c, 0xe0,
+ 0xb3, 0x30, 0xd9, 0xec, 0x81, 0xf8, 0x82, 0x04, 0xe6, 0xc9, 0xbd, 0x88, 0x81, 0x82, 0xde, 0x3f,
+ 0x46, 0x00, 0xb4, 0x6f, 0xe6, 0x44, 0xfd, 0x6c, 0xb1, 0x4c, 0x38, 0x4e, 0x62, 0x44, 0x2c, 0x16,
+ 0x54, 0x65, 0x28, 0xb9, 0x09, 0xdc, 0xd4, 0x99, 0x07, 0xb3, 0x2b, 0x30, 0x68, 0x69, 0x9e, 0xf6,
+ 0xfe, 0x94, 0x3d, 0xd1, 0x59, 0x30, 0x87, 0x2f, 0x07, 0x6b, 0xd0, 0x63, 0x92, 0x64, 0xd5, 0x8c,
+ 0x4b, 0x53, 0x6f, 0x04, 0xf3, 0x17, 0xe1, 0x96, 0xe3, 0xc2, 0x06, 0x77, 0x96, 0x92, 0x4f, 0x1c,
+ 0x1c, 0x9e, 0x4e, 0xbd, 0x19, 0x1c, 0xa7, 0x8e, 0xee, 0x4b, 0x68, 0xae, 0x6f, 0xba, 0xfb, 0xf4,
+ 0x60, 0x5a, 0x7f, 0xb2, 0xf6, 0x97, 0x6c, 0x83, 0x59, 0xe2, 0x51, 0xbc, 0xf5, 0xa0, 0xd8, 0x99,
+ 0x4a, 0xc7, 0x8c, 0x4e, 0x4f, 0x01, 0xd3, 0x54, 0x47, 0x02, 0x83, 0x2e, 0xa9, 0x07, 0x0d, 0xf3,
+ 0xaa, 0x4f, 0x01, 0x33, 0x48, 0x44, 0xd8, 0x6e, 0xa0, 0x5d, 0xef, 0xe9, 0x01, 0x1f, 0xe2, 0xf7,
+ 0x46, 0x94, 0x55, 0xfb, 0x85, 0x50, 0x67, 0x74, 0x4e, 0x67, 0x9e, 0x98, 0x86, 0xf9, 0x89, 0x5c,
+ 0x24, 0xaf, 0x30, 0xe5, 0x2f, 0xed, 0x57, 0x3b, 0x9e, 0xb6, 0x96, 0x4e, 0x6b, 0xce, 0x00, 0x10,
+ 0x36, 0xbf, 0x20, 0x70, 0x06, 0x93, 0xc2, 0xc7, 0xc6, 0x4f, 0x3c, 0x0a, 0xd8, 0x2f, 0x0e, 0xcc,
+ 0xce, 0x78, 0x01, 0x15, 0x3c, 0x42, 0x28, 0xc2, 0x49, 0xf6, 0xe8, 0xfc, 0x7c, 0x1e, 0x5c, 0x1d,
+ 0x9e, 0x70, 0xaa, 0x99, 0x5e, 0xd4, 0xb2, 0x2f, 0xa4, 0x83, 0x88, 0x3b, 0x52, 0x12, 0x36, 0xc7,
+ 0x93, 0xa0, 0xe0, 0xed, 0x5d, 0x0c, 0x1d, 0x01, 0xc9, 0x83, 0xf6, 0x46, 0x39, 0xd5, 0x58, 0x35,
+ 0x90, 0xbf, 0x31, 0x37, 0xc2, 0x5b, 0xc1, 0x09, 0x7b, 0x6f, 0x37, 0xc4, 0x02, 0xf7, 0x34, 0xb4,
+ 0x67, 0x39, 0xf8, 0x82, 0x6f, 0xb2, 0x79, 0xf1, 0x26, 0x9b, 0x62, 0x24, 0x15, 0xa9, 0x74, 0xf6,
+ 0xea, 0xf1, 0xe9, 0xbe, 0x23, 0x68, 0xe5, 0xd4, 0x4a, 0x41, 0xe0, 0x97, 0x58, 0xf8, 0xff, 0x29,
+ 0x97, 0xaa, 0xe7, 0x1d, 0x7e, 0x72, 0x2d, 0x45, 0x4f, 0x78, 0x94, 0xc7, 0xd6, 0x3e, 0x2f, 0x01,
+ 0xad, 0x19, 0x39, 0xe4, 0x50, 0x50, 0xd7, 0x5d, 0x78, 0xd9, 0x82, 0x57, 0x38, 0xf7, 0xad, 0x37,
+ 0x09, 0xc7, 0xa1, 0xe6, 0x75, 0xe5, 0x00, 0xd1, 0xf8, 0x75, 0xf1, 0x01, 0xb8, 0x88, 0xc5, 0x9b,
+ 0x4e, 0x57, 0xe2, 0x04, 0x62, 0x87, 0x4b, 0xe0, 0x0c, 0x83, 0xea, 0xb2, 0xeb, 0xec, 0x26, 0x48,
+ 0xf6, 0x15, 0xac, 0x64, 0x37, 0x78, 0xc9, 0xde, 0x9b, 0xa8, 0x2e, 0x03, 0x08, 0xc7, 0xa8, 0xe3,
+ 0xfb, 0x43, 0x39, 0x3e, 0x8b, 0x93, 0x63, 0xe5, 0x90, 0xf4, 0xb3, 0x97, 0xe5, 0x1f, 0xe4, 0xc1,
+ 0x9c, 0x01, 0xcd, 0x4e, 0x38, 0x08, 0xfc, 0x9f, 0x8c, 0x79, 0xf7, 0x34, 0x90, 0xf7, 0xa3, 0x75,
+ 0x9a, 0xc7, 0x1d, 0xac, 0x0c, 0xfb, 0x25, 0x7e, 0xc0, 0xcb, 0x35, 0xf8, 0xa3, 0x03, 0xbd, 0x85,
+ 0x24, 0x60, 0x1b, 0xca, 0x22, 0xb6, 0x61, 0x7e, 0x90, 0x6d, 0x78, 0x33, 0x38, 0xde, 0x35, 0x3d,
+ 0xbf, 0x72, 0xb1, 0x65, 0xed, 0x42, 0xcf, 0x37, 0x77, 0x7b, 0xd8, 0x0a, 0x94, 0x8d, 0xfe, 0x64,
+ 0xfe, 0x1e, 0xf8, 0xc4, 0xf3, 0x60, 0x83, 0xaa, 0x78, 0xf8, 0x98, 0xb9, 0x1f, 0x12, 0x3a, 0xfc,
+ 0x35, 0xac, 0xec, 0x74, 0x9a, 0x71, 0xdf, 0x08, 0x6b, 0x4b, 0xa7, 0x80, 0xba, 0xa6, 0x37, 0x9b,
+ 0xa5, 0x15, 0x7c, 0x26, 0x24, 0x70, 0x12, 0xea, 0x9c, 0x7d, 0x2c, 0x12, 0x1f, 0x41, 0x5a, 0x9d,
+ 0x8b, 0xc6, 0x5e, 0xe5, 0x98, 0x3a, 0x0b, 0xa6, 0x5c, 0xd8, 0xeb, 0x5a, 0xd0, 0x53, 0x72, 0xda,
+ 0x37, 0x24, 0x50, 0xdc, 0xb0, 0x5d, 0x68, 0x76, 0xb4, 0x67, 0xc6, 0x0f, 0x21, 0x23, 0x2a, 0x05,
+ 0x1f, 0xf7, 0x2a, 0x71, 0x55, 0x96, 0x36, 0x3a, 0xc4, 0xc8, 0x58, 0xe0, 0x13, 0x5b, 0x8e, 0x8d,
+ 0x2f, 0x35, 0xf3, 0x26, 0x7d, 0x76, 0x0a, 0x14, 0xf4, 0xdd, 0x9e, 0xbf, 0x7f, 0xf6, 0xb1, 0x60,
+ 0xbe, 0xe9, 0xbb, 0xd0, 0xdc, 0x65, 0x36, 0xd5, 0x7d, 0xe7, 0x12, 0xb4, 0x83, 0x4d, 0x75, 0xfc,
+ 0x70, 0xd7, 0x9d, 0x60, 0xca, 0x76, 0x36, 0xcd, 0x3d, 0x7f, 0x47, 0xbd, 0xee, 0x40, 0x34, 0x1a,
+ 0xaa, 0x7e, 0x0d, 0x1a, 0xfe, 0xef, 0x4f, 0xef, 0xc6, 0x53, 0xab, 0xa2, 0xed, 0x94, 0xf6, 0xfc,
+ 0x9d, 0xa5, 0x6b, 0x3f, 0xf5, 0x67, 0x67, 0x72, 0x9f, 0xfb, 0xb3, 0x33, 0xb9, 0xaf, 0xfc, 0xd9,
+ 0x99, 0xdc, 0x8f, 0xff, 0xf9, 0x99, 0x63, 0x9f, 0xfb, 0xf3, 0x33, 0xc7, 0xbe, 0xf0, 0xe7, 0x67,
+ 0x8e, 0x7d, 0x8f, 0xd4, 0xbb, 0x78, 0xb1, 0x88, 0xa9, 0x3c, 0xe9, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0xff, 0xe5, 0x76, 0x0c, 0x3b, 0xd1, 0x2b, 0x02, 0x00,
}
func (m *Rpc) Marshal() (dAtA []byte, err error) {
@@ -85110,9 +85111,9 @@ func (m *RpcPublishingCreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, err
_ = i
var l int
_ = l
- if m.JoinSpace {
+ if m.IncludeSpaceInfo {
i--
- if m.JoinSpace {
+ if m.IncludeSpaceInfo {
dAtA[i] = 1
} else {
dAtA[i] = 0
@@ -128508,7 +128509,7 @@ func (m *RpcPublishingCreateRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
- if m.JoinSpace {
+ if m.IncludeSpaceInfo {
n += 2
}
return n
@@ -165552,7 +165553,7 @@ func (m *RpcPublishingCreateRequest) Unmarshal(dAtA []byte) error {
iNdEx = postIndex
case 4:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field JoinSpace", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field IncludeSpaceInfo", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
@@ -165569,7 +165570,7 @@ func (m *RpcPublishingCreateRequest) Unmarshal(dAtA []byte) error {
break
}
}
- m.JoinSpace = bool(v != 0)
+ m.IncludeSpaceInfo = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
From 891c3468360a6845275f935591b6bb9a05db54c3 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Wed, 26 Mar 2025 12:49:10 +0100
Subject: [PATCH 096/132] GO-4459: Add router_test.go
---
core/api/server/middleware_test.go | 11 +----
core/api/server/router_test.go | 75 ++++++++++++++++++++++++++++++
core/api/server/server_test.go | 6 +--
3 files changed, 79 insertions(+), 13 deletions(-)
create mode 100644 core/api/server/router_test.go
diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go
index d6dab5dba..44bfdeca4 100644
--- a/core/api/server/middleware_test.go
+++ b/core/api/server/middleware_test.go
@@ -11,7 +11,6 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
- "github.com/anyproto/anytype-heart/core/anytype/account"
"github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
@@ -19,12 +18,6 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
-type fixture struct {
- *Server
- accountService account.Service
- mwMock *mock_service.MockClientCommandsServer
-}
-
func newFixture(t *testing.T) *fixture {
mwMock := mock_service.NewMockClientCommandsServer(t)
accountService := mock_account.NewMockService(t)
@@ -168,9 +161,7 @@ func TestEnsureAccountInfo(t *testing.T) {
expectedInfo := &model.AccountInfo{
GatewayUrl: "http://localhost:31006",
}
- fx.accountService.(*mock_account.MockService).
- On("GetInfo", mock.Anything).
- Return(expectedInfo, nil).Once()
+ fx.accountService.(*mock_account.MockService).On("GetInfo", mock.Anything).Return(expectedInfo, nil).Once()
// when
middleware := fx.ensureAccountInfo(fx.accountService)
diff --git a/core/api/server/router_test.go b/core/api/server/router_test.go
new file mode 100644
index 000000000..36331b194
--- /dev/null
+++ b/core/api/server/router_test.go
@@ -0,0 +1,75 @@
+package server
+
+import (
+ "net/http"
+ "net/http/httptest"
+ "testing"
+
+ "github.com/gogo/protobuf/types"
+ "github.com/stretchr/testify/mock"
+ "github.com/stretchr/testify/require"
+
+ "github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
+ "github.com/anyproto/anytype-heart/pb"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+)
+
+func TestRouter_Unauthenticated(t *testing.T) {
+ t.Run("GET /v1/spaces without auth returns 401", func(t *testing.T) {
+ // given
+ fx := newServerFixture(t)
+ engine := fx.NewRouter(fx.accountService, fx.mwMock)
+ w := httptest.NewRecorder()
+ req := httptest.NewRequest("GET", "/v1/spaces", nil)
+
+ // when
+ engine.ServeHTTP(w, req)
+
+ // then
+ require.Equal(t, http.StatusUnauthorized, w.Code)
+ })
+}
+
+func TestRouter_AuthRoute(t *testing.T) {
+ t.Run("POST /v1/auth/token is accessible without auth", func(t *testing.T) {
+ // given
+ fx := newServerFixture(t)
+ engine := fx.NewRouter(fx.accountService, fx.mwMock)
+ w := httptest.NewRecorder()
+ req := httptest.NewRequest("POST", "/v1/auth/token", nil)
+
+ // when
+ engine.ServeHTTP(w, req)
+
+ // then
+ require.NotEqual(t, http.StatusUnauthorized, w.Code)
+ })
+}
+
+func TestRouter_MetadataHeader(t *testing.T) {
+ t.Run("Response includes Anytype-Version header", func(t *testing.T) {
+ // given
+ fx := newServerFixture(t)
+ engine := fx.NewRouter(fx.accountService, fx.mwMock)
+ fx.KeyToToken = map[string]string{"validKey": "dummyToken"}
+ fx.accountService.(*mock_account.MockService).On("GetInfo", mock.Anything).
+ Return(&model.AccountInfo{
+ GatewayUrl: "http://localhost:31006",
+ }, nil).Once()
+ fx.mwMock.On("ObjectSearch", mock.Anything, mock.Anything).
+ Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{},
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ w := httptest.NewRecorder()
+ req := httptest.NewRequest("GET", "/v1/spaces", nil)
+ req.Header.Set("Authorization", "Bearer validKey")
+
+ // when
+ engine.ServeHTTP(w, req)
+
+ // then
+ require.Equal(t, "2025-03-17", w.Header().Get("Anytype-Version"))
+ })
+}
diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go
index b3cef992c..a1f880d1d 100644
--- a/core/api/server/server_test.go
+++ b/core/api/server/server_test.go
@@ -10,18 +10,18 @@ import (
"github.com/anyproto/anytype-heart/pb/service/mock_service"
)
-type srvFixture struct {
+type fixture struct {
*Server
accountService account.Service
mwMock *mock_service.MockClientCommandsServer
}
-func newServerFixture(t *testing.T) *srvFixture {
+func newServerFixture(t *testing.T) *fixture {
mwMock := mock_service.NewMockClientCommandsServer(t)
accountService := mock_account.NewMockService(t)
server := NewServer(accountService, mwMock)
- return &srvFixture{
+ return &fixture{
Server: server,
accountService: accountService,
mwMock: mwMock,
From cc9f55ed4dfb012c6a9e1d1fa7267e29e4ab48c2 Mon Sep 17 00:00:00 2001
From: AnastasiaShemyakinskaya
Date: Thu, 27 Mar 2025 17:36:07 +0100
Subject: [PATCH 097/132] GO-5320: add widget for root collection
Signed-off-by: AnastasiaShemyakinskaya
---
core/block/import/common/collection.go | 94 ++++++++++++++++++-
core/block/import/common/collection_test.go | 92 ++++++++++++++++++
.../import/common/workerpool/workerpool.go | 16 ++++
core/block/import/csv/converter.go | 7 +-
core/block/import/csv/converter_test.go | 48 ++++++----
core/block/import/html/converter.go | 7 +-
core/block/import/html/converter_test.go | 6 +-
core/block/import/importer.go | 5 +
core/block/import/markdown/import.go | 11 ++-
core/block/import/markdown/import_test.go | 19 +++-
.../import/notion/api/database/database.go | 14 +--
.../notion/api/database/database_test.go | 18 ++--
core/block/import/notion/converter.go | 6 +-
core/block/import/pb/converter_test.go | 6 +-
core/block/import/pb/gallery.go | 61 ++++--------
core/block/import/pb/gallery_test.go | 48 ++++++++--
core/block/import/pb/space.go | 6 +-
core/block/import/pb/space_test.go | 27 +++++-
core/block/import/txt/converter.go | 7 +-
core/block/import/txt/converter_test.go | 6 +-
20 files changed, 382 insertions(+), 122 deletions(-)
create mode 100644 core/block/import/common/collection_test.go
diff --git a/core/block/import/common/collection.go b/core/block/import/common/collection.go
index 101601269..ccf812d15 100644
--- a/core/block/import/common/collection.go
+++ b/core/block/import/common/collection.go
@@ -4,6 +4,7 @@ import (
"fmt"
"time"
+ "github.com/globalsign/mgo/bson"
"github.com/google/uuid"
"github.com/anyproto/anytype-heart/core/block/collection"
@@ -18,12 +19,15 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
+const rootWidget = "rootWidget"
+
type ImportCollectionSetting struct {
collectionName string
targetObjects []string
icon string
fileKeys []*pb.ChangeFileKeys
needToAddDate, shouldBeFavorite, shouldAddRelations bool
+ widgetSnapshot *Snapshot
}
func MakeImportCollectionSetting(
@@ -32,6 +36,7 @@ func MakeImportCollectionSetting(
icon string,
fileKeys []*pb.ChangeFileKeys,
needToAddDate, shouldBeFavorite, shouldAddRelations bool,
+ widgetSnapshot *Snapshot,
) *ImportCollectionSetting {
return &ImportCollectionSetting{
collectionName: collectionName,
@@ -41,6 +46,7 @@ func MakeImportCollectionSetting(
needToAddDate: needToAddDate,
shouldBeFavorite: shouldBeFavorite,
shouldAddRelations: shouldAddRelations,
+ widgetSnapshot: widgetSnapshot,
}
}
@@ -52,7 +58,7 @@ func NewImportCollection(service *collection.Service) *ImportCollection {
return &ImportCollection{service: service}
}
-func (r *ImportCollection) MakeImportCollection(req *ImportCollectionSetting) (*Snapshot, error) {
+func (r *ImportCollection) MakeImportCollection(req *ImportCollectionSetting) (*Snapshot, *Snapshot, error) {
if req.needToAddDate {
importDate := time.Now().Format(time.RFC3339)
req.collectionName = fmt.Sprintf("%s %s", req.collectionName, importDate)
@@ -62,20 +68,100 @@ func (r *ImportCollection) MakeImportCollection(req *ImportCollectionSetting) (*
Value: model.InternalFlag_collectionDontIndexLinks,
}})
if err != nil {
- return nil, err
+ return nil, nil, err
}
if req.shouldAddRelations {
err = r.addRelations(st)
if err != nil {
- return nil, err
+ return nil, nil, err
}
}
detailsStruct = st.CombinedDetails().Merge(detailsStruct)
st.UpdateStoreSlice(template.CollectionStoreKey, req.targetObjects)
- return r.getRootCollectionSnapshot(req.collectionName, st, detailsStruct, req.fileKeys), nil
+ rootCollectionSnapshot := r.getRootCollectionSnapshot(req.collectionName, st, detailsStruct, req.fileKeys)
+ widgetSnapshot := r.makeWidgetSnapshot(req, rootCollectionSnapshot)
+ return rootCollectionSnapshot, widgetSnapshot, nil
+}
+
+func (r *ImportCollection) makeWidgetSnapshot(req *ImportCollectionSetting, rootSnapshot *Snapshot) *Snapshot {
+ if req.widgetSnapshot == nil {
+ return r.buildNewWidgetSnapshot(rootSnapshot.Id)
+ }
+ return r.enhanceExistingSnapshot(req.widgetSnapshot, rootSnapshot.Id)
+}
+
+func (r *ImportCollection) buildNewWidgetSnapshot(targetID string) *Snapshot {
+ linkBlock := r.createLinkBlock(targetID)
+ widgetBlock := r.createWidgetBlock(linkBlock.Id)
+ rootBlock := r.createSmartBlock(widgetBlock.Id)
+
+ return &Snapshot{
+ Id: rootBlock.Id,
+ FileName: rootWidget,
+ Snapshot: &SnapshotModel{
+ SbType: sb.SmartBlockTypeWidget,
+ Data: &StateSnapshot{
+ Blocks: []*model.Block{rootBlock, widgetBlock, linkBlock},
+ Details: r.defaultWidgetDetails(),
+ ObjectTypes: []string{bundle.TypeKeyDashboard.String()},
+ },
+ },
+ }
+}
+
+func (r *ImportCollection) enhanceExistingSnapshot(snapshot *Snapshot, targetID string) *Snapshot {
+ linkBlock := r.createLinkBlock(targetID)
+ widgetBlock := r.createWidgetBlock(linkBlock.Id)
+
+ for _, block := range snapshot.Snapshot.Data.Blocks {
+ if block.GetSmartblock() != nil {
+ block.ChildrenIds = append(block.ChildrenIds, widgetBlock.Id)
+ }
+ }
+
+ snapshot.Snapshot.Data.Blocks = append(snapshot.Snapshot.Data.Blocks, linkBlock, widgetBlock)
+ return snapshot
+}
+
+func (r *ImportCollection) createLinkBlock(targetID string) *model.Block {
+ return &model.Block{
+ Id: bson.NewObjectId().Hex(),
+ Content: &model.BlockContentOfLink{
+ Link: &model.BlockContentLink{
+ TargetBlockId: targetID,
+ },
+ },
+ }
+}
+
+func (r *ImportCollection) createWidgetBlock(childID string) *model.Block {
+ return &model.Block{
+ Id: bson.NewObjectId().Hex(),
+ ChildrenIds: []string{childID},
+ Content: &model.BlockContentOfWidget{
+ Widget: &model.BlockContentWidget{
+ Layout: model.BlockContentWidget_CompactList,
+ },
+ },
+ }
+}
+
+func (r *ImportCollection) createSmartBlock(childID string) *model.Block {
+ return &model.Block{
+ Id: uuid.New().String(),
+ ChildrenIds: []string{childID},
+ Content: &model.BlockContentOfSmartblock{Smartblock: &model.BlockContentSmartblock{}},
+ }
+}
+
+func (r *ImportCollection) defaultWidgetDetails() *domain.Details {
+ return domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{
+ bundle.RelationKeyLayout: domain.Int64(model.ObjectType_dashboard),
+ bundle.RelationKeyIsHidden: domain.Bool(true),
+ })
}
func (r *ImportCollection) getRootCollectionSnapshot(
diff --git a/core/block/import/common/collection_test.go b/core/block/import/common/collection_test.go
new file mode 100644
index 000000000..3e9aef2e2
--- /dev/null
+++ b/core/block/import/common/collection_test.go
@@ -0,0 +1,92 @@
+package common
+
+import (
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+
+ "github.com/anyproto/anytype-heart/core/block/collection"
+ "github.com/anyproto/anytype-heart/core/domain"
+ "github.com/anyproto/anytype-heart/pkg/lib/bundle"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+)
+
+func TestMakeImportCollection(t *testing.T) {
+ tests := []struct {
+ name string
+ needToAddDate bool
+ shouldBeFavorite bool
+ shouldAddRelation bool
+ widgetSnapshot bool
+ }{
+ {"all false", false, false, false, false},
+ {"add date", true, false, false, false},
+ {"add favorite", false, true, false, false},
+ {"add relations", false, false, true, false},
+ {"with existing widget snapshot", false, false, false, true},
+ {"all True", true, true, true, true},
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ importer := NewImportCollection(collection.New())
+
+ var widget *Snapshot
+ if tt.widgetSnapshot {
+ widget = &Snapshot{
+ Id: "widget-id",
+ FileName: "existing",
+ Snapshot: &SnapshotModel{
+ Data: &StateSnapshot{
+ Blocks: []*model.Block{
+ {
+ Id: "root-block",
+ ChildrenIds: []string{},
+ Content: &model.BlockContentOfSmartblock{
+ Smartblock: &model.BlockContentSmartblock{},
+ },
+ },
+ },
+ },
+ },
+ }
+ }
+
+ req := MakeImportCollectionSetting(
+ "My Collection",
+ []string{"obj1", "obj2"},
+ "icon.png",
+ nil,
+ tt.needToAddDate,
+ tt.shouldBeFavorite,
+ tt.shouldAddRelation,
+ widget,
+ )
+
+ root, widgetSnap, err := importer.MakeImportCollection(req)
+
+ assert.NoError(t, err)
+ assert.NotNil(t, root)
+ assert.NotNil(t, widgetSnap)
+
+ if tt.needToAddDate {
+ assert.Contains(t, root.FileName, time.Now().Format("2006"))
+ } else {
+ assert.Equal(t, "My Collection", root.FileName)
+ }
+
+ if tt.shouldBeFavorite {
+ assert.Equal(t, domain.Bool(true), root.Snapshot.Data.Details.Get(bundle.RelationKeyIsFavorite))
+ } else {
+ assert.Equal(t, domain.Bool(false), root.Snapshot.Data.Details.Get(bundle.RelationKeyIsFavorite))
+ }
+
+ if tt.widgetSnapshot {
+ assert.Equal(t, "existing", widgetSnap.FileName)
+ } else {
+ assert.Equal(t, "rootWidget", widgetSnap.FileName)
+ }
+ })
+ }
+}
diff --git a/core/block/import/common/workerpool/workerpool.go b/core/block/import/common/workerpool/workerpool.go
index 3238acc63..9eea0d891 100644
--- a/core/block/import/common/workerpool/workerpool.go
+++ b/core/block/import/common/workerpool/workerpool.go
@@ -13,6 +13,7 @@ type WorkerPool struct {
tasks chan ITask
results chan interface{}
quit chan struct{}
+ finalizer ITask
}
func NewPool(numWorkers int) *WorkerPool {
@@ -34,6 +35,10 @@ func (p *WorkerPool) AddWork(t ITask) bool {
return false
}
+func (p *WorkerPool) SetFinalizer(t ITask) {
+ p.finalizer = t
+}
+
func (p *WorkerPool) Start(data interface{}) {
wg := &sync.WaitGroup{}
for i := 0; i < p.numWorkers; i++ {
@@ -43,6 +48,7 @@ func (p *WorkerPool) Start(data interface{}) {
}(i)
}
wg.Wait()
+ p.finalize(data)
p.CloseResult()
}
@@ -72,3 +78,13 @@ func (p *WorkerPool) CloseResult() {
func (p *WorkerPool) CloseTask() {
close(p.tasks)
}
+
+func (p *WorkerPool) finalize(data interface{}) {
+ if p.finalizer != nil {
+ select {
+ case <-p.quit:
+ return
+ case p.results <- p.finalizer.Execute(data):
+ }
+ }
+}
diff --git a/core/block/import/csv/converter.go b/core/block/import/csv/converter.go
index a097088c9..8e50769e3 100644
--- a/core/block/import/csv/converter.go
+++ b/core/block/import/csv/converter.go
@@ -67,8 +67,8 @@ func (c *CSV) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
return nil, allErrors
}
rootCollection := common.NewImportCollection(c.collectionService)
- settings := common.MakeImportCollectionSetting(rootCollectionName, result.objectIDs, "", nil, true, true, true)
- rootCol, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(rootCollectionName, result.objectIDs, "", nil, true, false, true, nil)
+ rootCol, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
if req.Mode == pb.RpcObjectImportRequest_ALL_OR_NOTHING {
@@ -80,6 +80,9 @@ func (c *CSV) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
result.snapshots = append(result.snapshots, rootCol)
rootCollectionID = rootCol.Id
}
+ if widgetSnapshot != nil {
+ result.snapshots = append(result.snapshots, widgetSnapshot)
+ }
progress.SetTotal(int64(len(result.snapshots)))
if allErrors.IsEmpty() {
return &common.Response{Snapshots: result.snapshots, RootCollectionID: rootCollectionID}, nil
diff --git a/core/block/import/csv/converter_test.go b/core/block/import/csv/converter_test.go
index b5bb86307..07792616a 100644
--- a/core/block/import/csv/converter_test.go
+++ b/core/block/import/csv/converter_test.go
@@ -34,7 +34,7 @@ func TestCsv_GetSnapshotsEmptyFile(t *testing.T) {
}, p)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 2) // test + root collection
+ assert.Len(t, sn.Snapshots, 3) // test + root collection + root collection widget
assert.Contains(t, sn.Snapshots[0].FileName, "test.csv")
assert.Len(t, pbtypes.GetStringList(sn.Snapshots[0].Snapshot.Data.Collections, template.CollectionStoreKey), 0)
assert.NotEmpty(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes) // empty collection
@@ -63,21 +63,31 @@ func TestCsv_GetSnapshots(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 6) // Journal.csv + root collection + 2 objects in Journal.csv + 2 relations (Created, Tags)
+ assert.Len(t, sn.Snapshots, 7) // Journal.csv + root collection + 2 objects in Journal.csv + 2 relations (Created, Tags)
assert.Contains(t, sn.Snapshots[0].FileName, "Journal.csv")
assert.Len(t, pbtypes.GetStringList(sn.Snapshots[0].Snapshot.Data.Collections, template.CollectionStoreKey), 2) // 2 objects
- var found bool
+ var found, foundWidget bool
+ var rootCollectionId string
for _, snapshot := range sn.Snapshots {
if strings.Contains(snapshot.FileName, rootCollectionName) {
found = true
+ rootCollectionId = snapshot.Id
assert.NotEmpty(t, snapshot.Snapshot.Data.ObjectTypes)
assert.Equal(t, snapshot.Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
assert.Len(t, pbtypes.GetStringList(snapshot.Snapshot.Data.Collections, template.CollectionStoreKey), 1) // only Journal.csv collection
}
+ if snapshot.Snapshot.SbType == sb.SmartBlockTypeWidget {
+ foundWidget = true
+ assert.Len(t, snapshot.Snapshot.Data.Blocks, 3)
+ assert.NotNil(t, snapshot.Snapshot.Data.Blocks[1].GetWidget())
+ assert.NotNil(t, snapshot.Snapshot.Data.Blocks[2].GetLink())
+ assert.Equal(t, rootCollectionId, snapshot.Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
+ }
}
assert.True(t, found)
+ assert.True(t, foundWidget)
}
func TestCsv_GetSnapshotsTable(t *testing.T) {
@@ -97,7 +107,7 @@ func TestCsv_GetSnapshotsTable(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 2) // 1 page with table + root collection
+ assert.Len(t, sn.Snapshots, 3) // 1 page with table + root collection + root collection widget
assert.Contains(t, sn.Snapshots[0].FileName, "Journal.csv")
var found bool
@@ -127,7 +137,7 @@ func TestCsv_GetSnapshotsTableUseFirstColumnForRelationsOn(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 2) // 1 page with table + root collection
+ assert.Len(t, sn.Snapshots, 3) // 1 page with table + root collection + root collection widget
assert.Contains(t, sn.Snapshots[0].FileName, "Journal.csv")
var rowsID []string
@@ -167,7 +177,7 @@ func TestCsv_GetSnapshotsSemiColon(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 16) // 8 objects + root collection + semicolon collection + 5 relations
+ assert.Len(t, sn.Snapshots, 17) // 8 objects + root collection + semicolon collection + 5 relations + root collection widget
assert.Contains(t, sn.Snapshots[0].FileName, "semicolon.csv")
assert.Len(t, pbtypes.GetStringList(sn.Snapshots[0].Snapshot.Data.Collections, template.CollectionStoreKey), 8)
assert.Equal(t, sn.Snapshots[0].Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
@@ -192,7 +202,7 @@ func TestCsv_GetSnapshotsTranspose(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 4) // 2 object + root collection + transpose collection + 1 relations
+ assert.Len(t, sn.Snapshots, 5) // 2 object + root collection + transpose collection + 1 relations + root collection widget
for _, snapshot := range sn.Snapshots {
if snapshot.Snapshot.SbType == sb.SmartBlockTypeRelation {
@@ -236,7 +246,7 @@ func TestCsv_GetSnapshotsTranspose(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 4)
+ assert.Len(t, sn.Snapshots, 5)
for _, snapshot := range sn.Snapshots {
if snapshot.Snapshot.SbType == sb.SmartBlockTypeRelation {
@@ -265,7 +275,7 @@ func TestCsv_GetSnapshotsTransposeUseFirstRowForRelationsOff(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 5) // 2 object + root collection + transpose collection + 1 relations
+ assert.Len(t, sn.Snapshots, 6) // 2 object + root collection + transpose collection + 1 relations + root collection widget
for _, snapshot := range sn.Snapshots {
if snapshot.Snapshot.SbType == sb.SmartBlockTypeRelation {
@@ -292,7 +302,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOn(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 6) // Journal.csv collection, root collection + 2 objects in Journal.csv + 2 relations (Created, Tags)
+ assert.Len(t, sn.Snapshots, 7) // Journal.csv collection, root collection + 2 objects in Journal.csv + 2 relations (Created, Tags) + root collection widget
var rowsObjects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
@@ -303,7 +313,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOn(t *testing.T) {
}
}
- assert.Len(t, rowsObjects, 2)
+ assert.Len(t, rowsObjects, 3)
want := [][]string{
{"Hawaii Vacation", "July 13, 2022 8:54 AM", "Special Event"},
@@ -338,7 +348,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOff(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 7) // Journal.csv collection, root collection + 3 objects in Journal.csv + 2 relations (Created, Tags)
+ assert.Len(t, sn.Snapshots, 8) // Journal.csv collection, root collection + 3 objects in Journal.csv + 2 relations (Created, Tags) + root collection widget
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
@@ -349,7 +359,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOff(t *testing.T) {
}
}
- assert.Len(t, objects, 3) // first row is also an object
+ assert.Len(t, objects, 4) // first row is also an object
want := [][]string{
{"Name", "Created", "Tags"},
@@ -514,7 +524,7 @@ func TestCsv_GetSnapshots1000RowsFile(t *testing.T) {
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -540,7 +550,7 @@ func TestCsv_GetSnapshots1000RowsFile(t *testing.T) {
objects = []*common.Snapshot{}
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -663,7 +673,7 @@ func TestCsv_GetSnapshots10Relations(t *testing.T) {
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -694,7 +704,7 @@ func TestCsv_GetSnapshots10Relations(t *testing.T) {
objects = []*common.Snapshot{}
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -738,7 +748,7 @@ func TestCsv_GetSnapshotsTableModeDifferentColumnsNumber(t *testing.T) {
objects = append(objects, snapshot)
}
}
- assert.Len(t, objects, 1)
+ assert.Len(t, objects, 2)
assert.Equal(t, objects[0].Snapshot.Data.Details.GetString(bundle.RelationKeyName), "differentcolumnnumber")
numberOfCSVColumns := lo.CountBy(objects[0].Snapshot.Data.Blocks, func(item *model.Block) bool { return item.GetTableColumn() != nil })
assert.Equal(t, 5, numberOfCSVColumns)
@@ -771,7 +781,7 @@ func TestCsv_GetSnapshotsTableModeDifferentColumnsNumber(t *testing.T) {
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
diff --git a/core/block/import/html/converter.go b/core/block/import/html/converter.go
index bf3e711fc..036edf186 100644
--- a/core/block/import/html/converter.go
+++ b/core/block/import/html/converter.go
@@ -66,8 +66,8 @@ func (h *HTML) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
return nil, allErrors
}
rootCollection := common.NewImportCollection(h.collectionService)
- settings := common.MakeImportCollectionSetting(rootCollectionName, targetObjects, "", nil, true, true, true)
- rootCollectionSnapshot, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(rootCollectionName, targetObjects, "", nil, true, false, true, nil)
+ rootCollectionSnapshot, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
if allErrors.ShouldAbortImport(len(path), req.Type) {
@@ -79,6 +79,9 @@ func (h *HTML) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
snapshots = append(snapshots, rootCollectionSnapshot)
rootCollectionID = rootCollectionSnapshot.Id
}
+ if widgetSnapshot != nil {
+ snapshots = append(snapshots, widgetSnapshot)
+ }
progress.SetTotal(int64(numberOfStages * len(snapshots)))
if allErrors.IsEmpty() {
return &common.Response{Snapshots: snapshots, RootCollectionID: rootCollectionID}, nil
diff --git a/core/block/import/html/converter_test.go b/core/block/import/html/converter_test.go
index 3198db518..ad560993e 100644
--- a/core/block/import/html/converter_test.go
+++ b/core/block/import/html/converter_test.go
@@ -44,7 +44,7 @@ func TestHTML_GetSnapshots(t *testing.T) {
)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 2)
+ assert.Len(t, sn.Snapshots, 3)
assert.Contains(t, sn.Snapshots[0].FileName, "test.html")
assert.NotEmpty(t, sn.Snapshots[0].Snapshot.Data.Details.GetString("name"))
assert.Equal(t, sn.Snapshots[0].Snapshot.Data.Details.GetString("name"), "test")
@@ -53,6 +53,10 @@ func TestHTML_GetSnapshots(t *testing.T) {
assert.NotEmpty(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes)
assert.Equal(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
+ assert.Len(t, sn.Snapshots[2].Snapshot.Data.Blocks, 3)
+ assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[1].GetWidget())
+ assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink())
+ assert.Equal(t, sn.Snapshots[1].Id, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
assert.NotEmpty(t, err)
assert.True(t, errors.Is(err.GetResultError(model.Import_Html), common.ErrFileImportNoObjectsInDirectory))
})
diff --git a/core/block/import/importer.go b/core/block/import/importer.go
index be951427d..3ae7874ad 100644
--- a/core/block/import/importer.go
+++ b/core/block/import/importer.go
@@ -42,6 +42,7 @@ import (
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/core"
+ "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/filestore"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore"
@@ -492,6 +493,10 @@ func (i *Import) extractInternalKey(snapshot *common.Snapshot, oldIDToNew map[st
func (i *Import) addWork(res *common.Response, pool *workerpool.WorkerPool) {
for _, snapshot := range res.Snapshots {
t := creator.NewTask(snapshot, i.oc)
+ if snapshot.Snapshot.SbType == smartblock.SmartBlockTypeWidget {
+ pool.SetFinalizer(t)
+ continue
+ }
stop := pool.AddWork(t)
if stop {
break
diff --git a/core/block/import/markdown/import.go b/core/block/import/markdown/import.go
index e519effc3..f731f90bb 100644
--- a/core/block/import/markdown/import.go
+++ b/core/block/import/markdown/import.go
@@ -102,8 +102,8 @@ func (m *Markdown) processFiles(req *pb.RpcObjectImportRequest, progress process
func (m *Markdown) createRootCollection(allSnapshots []*common.Snapshot, allRootObjectsIds []string) ([]*common.Snapshot, string, error) {
rootCollection := common.NewImportCollection(m.service)
- settings := common.MakeImportCollectionSetting(rootCollectionName, allRootObjectsIds, "", nil, true, true, true)
- rootCol, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(rootCollectionName, allRootObjectsIds, "", nil, true, false, true, nil)
+ rootCol, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, "", err
}
@@ -113,6 +113,9 @@ func (m *Markdown) createRootCollection(allSnapshots []*common.Snapshot, allRoot
allSnapshots = append(allSnapshots, rootCol)
rootCollectionID = rootCol.Id
}
+ if widgetSnapshot != nil {
+ allSnapshots = append(allSnapshots, widgetSnapshot)
+ }
return allSnapshots, rootCollectionID, nil
}
@@ -424,8 +427,8 @@ func (m *Markdown) createSnapshots(
func (m *Markdown) addCollectionSnapshot(fileName string, file *FileInfo, snapshots []*common.Snapshot) ([]*common.Snapshot, error) {
c := common.NewImportCollection(m.service)
- settings := common.MakeImportCollectionSetting(file.Title, file.CollectionsObjectsIds, "", nil, false, false, false)
- csvCollection, err := c.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(file.Title, file.CollectionsObjectsIds, "", nil, false, false, false, nil)
+ csvCollection, _, err := c.MakeImportCollection(settings)
if err != nil {
return nil, err
}
diff --git a/core/block/import/markdown/import_test.go b/core/block/import/markdown/import_test.go
index 9cafe0409..386273b56 100644
--- a/core/block/import/markdown/import_test.go
+++ b/core/block/import/markdown/import_test.go
@@ -14,6 +14,7 @@ import (
"github.com/anyproto/anytype-heart/core/block/import/common/test"
"github.com/anyproto/anytype-heart/core/block/process"
"github.com/anyproto/anytype-heart/pb"
+ "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/tests/blockbuilder"
)
@@ -37,10 +38,10 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 3)
+ assert.Len(t, sn.Snapshots, 4)
var (
- found bool
- subPageId string
+ found, foundWidget bool
+ subPageId string
)
for _, snapshot := range sn.Snapshots {
if snapshot.FileName == filepath.Join(testDirectory, "test_database", "test.md") {
@@ -54,10 +55,18 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
assert.NotEmpty(t, snapshot.Snapshot.Data.Collections.Fields["objects"])
assert.Len(t, snapshot.Snapshot.Data.Collections.Fields["objects"].GetListValue().GetValues(), 1)
assert.Equal(t, subPageId, snapshot.Snapshot.Data.Collections.Fields["objects"].GetListValue().GetValues()[0].GetStringValue())
+ }
+ if snapshot.Snapshot.SbType == smartblock.SmartBlockTypeWidget {
+ foundWidget = true
+ assert.Len(t, snapshot.Snapshot.Data.Blocks, 3)
+ assert.NotNil(t, snapshot.Snapshot.Data.Blocks[1].GetWidget())
+ assert.NotNil(t, snapshot.Snapshot.Data.Blocks[2].GetLink())
+ assert.NotEmpty(t, snapshot.Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
break
}
}
assert.True(t, found)
+ assert.True(t, foundWidget)
})
t.Run("no object error", func(t *testing.T) {
// given
@@ -98,7 +107,7 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 7)
+ assert.Len(t, sn.Snapshots, 8)
fileNameToObjectId := make(map[string]string, len(sn.Snapshots))
for _, snapshot := range sn.Snapshots {
@@ -179,7 +188,7 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
// then
assert.Nil(t, ce)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 4)
+ assert.Len(t, sn.Snapshots, 5)
fileNameToObjectId := make(map[string]string, len(sn.Snapshots))
for _, snapshot := range sn.Snapshots {
fileNameToObjectId[snapshot.FileName] = snapshot.Id
diff --git a/core/block/import/notion/api/database/database.go b/core/block/import/notion/api/database/database.go
index 997687e0f..cbd4357a1 100644
--- a/core/block/import/notion/api/database/database.go
+++ b/core/block/import/notion/api/database/database.go
@@ -345,18 +345,20 @@ func (ds *Service) AddPagesToCollections(databaseSnapshots []*common.Snapshot, p
}
}
-func (ds *Service) AddObjectsToNotionCollection(notionContext *api.NotionImportContext,
+func (ds *Service) AddObjectsToNotionCollection(
+ notionContext *api.NotionImportContext,
notionDB []Database,
- notionPages []page.Page) (*common.Snapshot, error) {
+ notionPages []page.Page,
+) (*common.Snapshot, *common.Snapshot, error) {
allObjects := ds.filterObjects(notionContext, notionDB, notionPages)
rootCollection := common.NewImportCollection(ds.collectionService)
- settings := common.MakeImportCollectionSetting(rootCollectionName, allObjects, "", nil, true, true, true)
- rootCol, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(rootCollectionName, allObjects, "", nil, true, false, true, nil)
+ rootCol, widget, err := rootCollection.MakeImportCollection(settings)
if err != nil {
- return nil, err
+ return nil, nil, err
}
- return rootCol, nil
+ return rootCol, widget, nil
}
func (ds *Service) filterObjects(notionContext *api.NotionImportContext,
diff --git a/core/block/import/notion/api/database/database_test.go b/core/block/import/notion/api/database/database_test.go
index 53090238c..ead10e9dd 100644
--- a/core/block/import/notion/api/database/database_test.go
+++ b/core/block/import/notion/api/database/database_test.go
@@ -41,7 +41,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -83,7 +83,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -119,7 +119,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -166,7 +166,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
// then
assert.Nil(t, err)
@@ -205,7 +205,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
// then
assert.Nil(t, err)
@@ -251,7 +251,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
// then
assert.Nil(t, err)
@@ -287,7 +287,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, nil)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, nil)
// then
assert.Nil(t, err)
@@ -329,7 +329,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -368,7 +368,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
diff --git a/core/block/import/notion/converter.go b/core/block/import/notion/converter.go
index f16ecf1d9..ae58034ba 100644
--- a/core/block/import/notion/converter.go
+++ b/core/block/import/notion/converter.go
@@ -116,7 +116,7 @@ func (n *Notion) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportReques
n.dbService.AddPagesToCollections(dbs, pages, db, notionImportContext.NotionPageIdsToAnytype, notionImportContext.NotionDatabaseIdsToAnytype)
- rootCollectionSnapshot, err := n.dbService.AddObjectsToNotionCollection(notionImportContext, db, pages)
+ rootCollectionSnapshot, widgetSnapshot, err := n.dbService.AddObjectsToNotionCollection(notionImportContext, db, pages)
if err != nil {
ce.Add(err)
if ce.ShouldAbortImport(0, req.Type) {
@@ -132,6 +132,10 @@ func (n *Notion) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportReques
allSnapshots = append(allSnapshots, pgs...)
allSnapshots = append(allSnapshots, dbs...)
+ if widgetSnapshot != nil {
+ allSnapshots = append(allSnapshots, widgetSnapshot)
+ }
+
if !ce.IsEmpty() {
return &common.Response{Snapshots: allSnapshots, RootCollectionID: rootCollectionID}, ce
}
diff --git a/core/block/import/pb/converter_test.go b/core/block/import/pb/converter_test.go
index 59040cbc3..d9b8c62c2 100644
--- a/core/block/import/pb/converter_test.go
+++ b/core/block/import/pb/converter_test.go
@@ -50,7 +50,7 @@ func Test_GetSnapshotsSuccess(t *testing.T) {
}, process.NewNoOp())
assert.Nil(t, ce)
- assert.Len(t, res.Snapshots, 2)
+ assert.Len(t, res.Snapshots, 3)
assert.Contains(t, res.Snapshots[1].FileName, rootCollectionName)
assert.NotEmpty(t, res.Snapshots[1].Snapshot.Data.ObjectTypes)
@@ -159,7 +159,7 @@ func Test_GetSnapshotsFailedToGetSnapshotForTwoFiles(t *testing.T) {
assert.NotNil(t, ce)
assert.NotNil(t, res.Snapshots)
- assert.Len(t, res.Snapshots, 2)
+ assert.Len(t, res.Snapshots, 3)
assert.False(t, ce.IsEmpty())
}
@@ -215,7 +215,7 @@ func Test_GetSnapshotsSkipFileWithoutExtension(t *testing.T) {
assert.Nil(t, ce)
assert.NotNil(t, res.Snapshots)
- assert.Len(t, res.Snapshots, 2)
+ assert.Len(t, res.Snapshots, 3)
assert.Equal(t, res.Snapshots[0].FileName, "bafyreig5sd7mlmhindapjuvzc4gnetdbszztb755sa7nflojkljmu56mmi.pb")
assert.Contains(t, res.Snapshots[1].FileName, rootCollectionName)
diff --git a/core/block/import/pb/gallery.go b/core/block/import/pb/gallery.go
index 2945dd4f7..0cea9c4cd 100644
--- a/core/block/import/pb/gallery.go
+++ b/core/block/import/pb/gallery.go
@@ -1,7 +1,6 @@
package pb
import (
- "github.com/globalsign/mgo/bson"
"github.com/samber/lo"
"github.com/anyproto/anytype-heart/core/block/collection"
@@ -13,7 +12,6 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
- "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
const widgetCollectionPattern = "'s Widgets"
@@ -32,7 +30,7 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
params *pb.RpcObjectImportRequestPbParams,
workspaceSnapshot *common.Snapshot,
isNewSpace bool,
-) (collectionsSnapshots []*common.Snapshot, err error) {
+) (resultSnapshots []*common.Snapshot, err error) {
if isNewSpace {
return nil, nil
}
@@ -41,8 +39,9 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
widgetObjects = g.getObjectsFromWidgets(widget)
}
var (
- icon string
- fileKeys []*pb.ChangeFileKeys
+ icon string
+ fileKeys []*pb.ChangeFileKeys
+ widgetSnapshot *common.Snapshot
)
if workspaceSnapshot != nil { // we use space icon for import collection
icon = workspaceSnapshot.Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage)
@@ -54,42 +53,39 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
}
rootCollection := common.NewImportCollection(g.service)
if len(widgetObjects) > 0 {
- collectionsSnapshots, err = g.getWidgetsCollection(collectionName, rootCollection, widgetObjects, icon, fileKeys, widget, collectionsSnapshots)
+ resultSnapshots, widgetSnapshot, err = g.getWidgetsCollection(collectionName, rootCollection, widgetObjects, icon, fileKeys, resultSnapshots)
if err != nil {
return nil, err
}
}
objectsIDs := g.getObjectsIDs(snapshots)
- settings := common.MakeImportCollectionSetting(collectionName, objectsIDs, icon, fileKeys, false, true, true)
- objectsCollection, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(collectionName, objectsIDs, icon, fileKeys, false, false, true, widgetSnapshot)
+ objectsCollection, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, err
}
- collectionsSnapshots = append(collectionsSnapshots, objectsCollection)
- return collectionsSnapshots, err
+ resultSnapshots = append(resultSnapshots, objectsCollection, widgetSnapshot)
+ return resultSnapshots, nil
}
-func (g *GalleryImport) getWidgetsCollection(collectionName string,
+func (g *GalleryImport) getWidgetsCollection(
+ collectionName string,
rootCollection *common.ImportCollection,
widgetObjects []string,
icon string,
fileKeys []*pb.ChangeFileKeys,
- widget *common.Snapshot,
collectionsSnapshots []*common.Snapshot,
-) ([]*common.Snapshot, error) {
+) ([]*common.Snapshot, *common.Snapshot, error) {
widgetCollectionName := collectionName + widgetCollectionPattern
- settings := common.MakeImportCollectionSetting(widgetCollectionName, widgetObjects, icon, fileKeys, false, false, true)
- widgetsCollectionSnapshot, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(widgetCollectionName, widgetObjects, icon, fileKeys, false, false, true, nil)
+ widgetsCollectionSnapshot, widget, err := rootCollection.MakeImportCollection(settings)
if err != nil {
- return nil, err
- }
- if widgetsCollectionSnapshot != nil && widget != nil {
- g.addCollectionWidget(widget, widgetsCollectionSnapshot.Id)
+ return nil, nil, err
}
if widgetsCollectionSnapshot != nil {
collectionsSnapshots = append(collectionsSnapshots, widgetsCollectionSnapshot)
}
- return collectionsSnapshots, nil
+ return collectionsSnapshots, widget, nil
}
func (g *GalleryImport) getObjectsFromWidgets(widgetSnapshot *common.Snapshot) []string {
@@ -113,31 +109,6 @@ func (g *GalleryImport) getObjectsFromWidgets(widgetSnapshot *common.Snapshot) [
return objectsInWidget
}
-func (g *GalleryImport) addCollectionWidget(widgetSnapshot *common.Snapshot, collectionID string) {
- id := bson.NewObjectId().Hex()
- // create widget for import collection
- linkBlock := &model.Block{
- Id: id,
- Content: &model.BlockContentOfLink{
- Link: &model.BlockContentLink{
- TargetBlockId: collectionID,
- },
- },
- }
- widgetID := bson.NewObjectId().Hex()
- widgetBlock := &model.Block{
- Id: widgetID,
- ChildrenIds: []string{id},
- Content: &model.BlockContentOfWidget{Widget: &model.BlockContentWidget{
- Layout: model.BlockContentWidget_CompactList,
- Limit: 0,
- ViewId: "",
- }},
- }
- // for widget object we only add import collection, other widgets should be erased
- widgetSnapshot.Snapshot.Data.Blocks = []*model.Block{widgetBlock, linkBlock}
-}
-
func (g *GalleryImport) getObjectsIDs(snapshots []*common.Snapshot) []string {
var resultIDs []string
for _, snapshot := range snapshots {
diff --git a/core/block/import/pb/gallery_test.go b/core/block/import/pb/gallery_test.go
index 140390ca6..57835df8e 100644
--- a/core/block/import/pb/gallery_test.go
+++ b/core/block/import/pb/gallery_test.go
@@ -28,7 +28,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
t.Run("CollectionTitle parameter is empty - collection with default name", func(t *testing.T) {
@@ -41,7 +41,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.Equal(t, rootCollectionName, collection[0].FileName)
})
t.Run("CollectionTitle parameter is equal 'test' - collection with name test", func(t *testing.T) {
@@ -54,7 +54,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.Equal(t, "test", collection[0].FileName)
})
t.Run("widget with sets - only objects root collection as we ignore default sets and not create widgets collection", func(t *testing.T) {
@@ -135,7 +135,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
t.Run("default sets and objects in widget - root collection with objects from widget and object root collection are created", func(t *testing.T) {
@@ -206,7 +206,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 3)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 1)
@@ -241,7 +241,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
@@ -255,7 +255,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.Empty(t, collection[0].Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage))
})
t.Run("workspace without icon - root collection without icon", func(t *testing.T) {
@@ -278,7 +278,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.Empty(t, collection[0].Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage))
})
t.Run("workspace with icon - root collection with icon", func(t *testing.T) {
@@ -303,7 +303,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.Equal(t, "icon", collection[0].Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage))
})
t.Run("if import in new space - not create anything", func(t *testing.T) {
@@ -349,7 +349,35 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
+ t.Run("widget with collection", func(t *testing.T) {
+ // given
+ p := GalleryImport{}
+ params := &pb.RpcObjectImportRequestPbParams{NoCollection: false}
+
+ // object with widget
+ widgetSnapshot := &common.Snapshot{
+ Id: "widgetID",
+ Snapshot: &common.SnapshotModel{
+ SbType: smartblock.SmartBlockTypeWidget,
+ Data: &common.StateSnapshot{
+ Blocks: []*model.Block{},
+ },
+ },
+ }
+
+ // when
+ collection, err := p.ProvideCollection(nil, widgetSnapshot, nil, params, nil, false)
+
+ // then
+ assert.Nil(t, err)
+ assert.Len(t, collection, 2)
+ assert.Equal(t, smartblock.SmartBlockTypeWidget, collection[1].Snapshot.SbType)
+ assert.Len(t, collection[1].Snapshot.Data.Blocks, 3)
+ assert.NotNil(t, collection[1].Snapshot.Data.Blocks[1].GetWidget())
+ assert.NotNil(t, collection[1].Snapshot.Data.Blocks[2].GetLink())
+ assert.Equal(t, collection[0].Id, collection[1].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
+ })
}
diff --git a/core/block/import/pb/space.go b/core/block/import/pb/space.go
index 73e69e29a..f459fde1d 100644
--- a/core/block/import/pb/space.go
+++ b/core/block/import/pb/space.go
@@ -56,12 +56,12 @@ func (s *SpaceImport) ProvideCollection(snapshots []*common.Snapshot,
})
}
rootCollection := common.NewImportCollection(s.service)
- settings := common.MakeImportCollectionSetting(rootCollectionName, rootObjects, "", nil, true, true, true)
- rootCollectionSnapshot, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(rootCollectionName, rootObjects, "", nil, true, false, true, widgetSnapshot)
+ rootCollectionSnapshot, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, err
}
- return []*common.Snapshot{rootCollectionSnapshot}, nil
+ return []*common.Snapshot{rootCollectionSnapshot, widgetSnapshot}, nil
}
func (s *SpaceImport) objectShouldBeSkipped(item *common.Snapshot) bool {
diff --git a/core/block/import/pb/space_test.go b/core/block/import/pb/space_test.go
index 119fa6cbe..f12b561ae 100644
--- a/core/block/import/pb/space_test.go
+++ b/core/block/import/pb/space_test.go
@@ -27,7 +27,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 0)
@@ -82,7 +82,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 3)
@@ -172,7 +172,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 1)
@@ -261,7 +261,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 1)
@@ -365,9 +365,26 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 1)
+ assert.Len(t, collection, 2)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Equal(t, []string{"newObjectInWidget", "id1", "spaceDashboardId"}, objectsInCollection)
})
+ t.Run("widget with collection", func(t *testing.T) {
+ // given
+ p := SpaceImport{}
+ params := &pb.RpcObjectImportRequestPbParams{NoCollection: false}
+
+ // when
+ collection, err := p.ProvideCollection(nil, nil, nil, params, nil, false)
+
+ // then
+ assert.Nil(t, err)
+ assert.Len(t, collection, 2)
+ assert.Equal(t, smartblock2.SmartBlockTypeWidget, collection[1].Snapshot.SbType)
+ assert.Len(t, collection[1].Snapshot.Data.Blocks, 3)
+ assert.NotNil(t, collection[1].Snapshot.Data.Blocks[1].GetWidget())
+ assert.NotNil(t, collection[1].Snapshot.Data.Blocks[2].GetLink())
+ assert.Equal(t, collection[0].Id, collection[1].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
+ })
}
diff --git a/core/block/import/txt/converter.go b/core/block/import/txt/converter.go
index 5facbacc8..dca7bbe53 100644
--- a/core/block/import/txt/converter.go
+++ b/core/block/import/txt/converter.go
@@ -56,8 +56,8 @@ func (t *TXT) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
return nil, allErrors
}
rootCollection := common.NewImportCollection(t.service)
- settings := common.MakeImportCollectionSetting(rootCollectionName, targetObjects, "", nil, true, true, true)
- rootCol, err := rootCollection.MakeImportCollection(settings)
+ settings := common.MakeImportCollectionSetting(rootCollectionName, targetObjects, "", nil, true, false, true, nil)
+ rootCol, widget, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
if allErrors.ShouldAbortImport(len(paths), req.Type) {
@@ -69,6 +69,9 @@ func (t *TXT) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
snapshots = append(snapshots, rootCol)
rootCollectionID = rootCol.Id
}
+ if widget != nil {
+ snapshots = append(snapshots, widget)
+ }
progress.SetTotal(int64(numberOfStages * len(snapshots)))
if allErrors.IsEmpty() {
return &common.Response{Snapshots: snapshots, RootCollectionID: rootCollectionID}, nil
diff --git a/core/block/import/txt/converter_test.go b/core/block/import/txt/converter_test.go
index 10deca90e..4929647e6 100644
--- a/core/block/import/txt/converter_test.go
+++ b/core/block/import/txt/converter_test.go
@@ -31,7 +31,7 @@ func TestTXT_GetSnapshots(t *testing.T) {
assert.NotNil(t, err)
assert.True(t, errors.Is(err.GetResultError(model.Import_Txt), common.ErrFileImportNoObjectsInDirectory))
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 2)
+ assert.Len(t, sn.Snapshots, 3)
assert.Contains(t, sn.Snapshots[0].FileName, "test.txt")
assert.Equal(t, sn.Snapshots[0].Snapshot.Data.Details.GetString("name"), "test")
@@ -39,6 +39,10 @@ func TestTXT_GetSnapshots(t *testing.T) {
assert.NotEmpty(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes)
assert.Equal(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
+ assert.Len(t, sn.Snapshots[2].Snapshot.Data.Blocks, 3)
+ assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[1].GetWidget())
+ assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink())
+ assert.Equal(t, sn.Snapshots[1].Id, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
var (
found bool
text string
From 4c989382a57e8624346cc232dbd92cc00fb2dd47 Mon Sep 17 00:00:00 2001
From: AnastasiaShemyakinskaya
Date: Thu, 27 Mar 2025 18:55:25 +0100
Subject: [PATCH 098/132] GO-5320: refactored import collection
Signed-off-by: AnastasiaShemyakinskaya
---
core/block/import/common/collection.go | 72 ++++++++++++++-----
core/block/import/common/collection_test.go | 18 ++---
core/block/import/csv/converter.go | 7 +-
core/block/import/html/converter.go | 7 +-
core/block/import/markdown/import.go | 12 +++-
.../import/notion/api/database/database.go | 7 +-
core/block/import/pb/gallery.go | 17 ++++-
core/block/import/pb/space.go | 8 ++-
core/block/import/txt/converter.go | 7 +-
9 files changed, 120 insertions(+), 35 deletions(-)
diff --git a/core/block/import/common/collection.go b/core/block/import/common/collection.go
index ccf812d15..badf05f5b 100644
--- a/core/block/import/common/collection.go
+++ b/core/block/import/common/collection.go
@@ -30,23 +30,61 @@ type ImportCollectionSetting struct {
widgetSnapshot *Snapshot
}
-func MakeImportCollectionSetting(
- collectionName string,
- targetObjects []string,
- icon string,
- fileKeys []*pb.ChangeFileKeys,
- needToAddDate, shouldBeFavorite, shouldAddRelations bool,
- widgetSnapshot *Snapshot,
-) *ImportCollectionSetting {
- return &ImportCollectionSetting{
- collectionName: collectionName,
- targetObjects: targetObjects,
- icon: icon,
- fileKeys: fileKeys,
- needToAddDate: needToAddDate,
- shouldBeFavorite: shouldBeFavorite,
- shouldAddRelations: shouldAddRelations,
- widgetSnapshot: widgetSnapshot,
+type ImportCollectionOption func(*ImportCollectionSetting)
+
+func NewImportCollectionSetting(opts ...ImportCollectionOption) *ImportCollectionSetting {
+ s := &ImportCollectionSetting{}
+ for _, opt := range opts {
+ opt(s)
+ }
+ return s
+}
+
+func WithCollectionName(name string) ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.collectionName = name
+ }
+}
+
+func WithTargetObjects(objs []string) ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.targetObjects = objs
+ }
+}
+
+func WithIcon(icon string) ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.icon = icon
+ }
+}
+
+func WithFileKeys(keys []*pb.ChangeFileKeys) ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.fileKeys = keys
+ }
+}
+
+func WithAddDate() ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.needToAddDate = true
+ }
+}
+
+func WithFavorite() ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.shouldBeFavorite = true
+ }
+}
+
+func WithRelations() ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.shouldAddRelations = true
+ }
+}
+
+func WithWidgetSnapshot(snapshot *Snapshot) ImportCollectionOption {
+ return func(s *ImportCollectionSetting) {
+ s.widgetSnapshot = snapshot
}
}
diff --git a/core/block/import/common/collection_test.go b/core/block/import/common/collection_test.go
index 3e9aef2e2..1d69268f6 100644
--- a/core/block/import/common/collection_test.go
+++ b/core/block/import/common/collection_test.go
@@ -53,17 +53,17 @@ func TestMakeImportCollection(t *testing.T) {
}
}
- req := MakeImportCollectionSetting(
- "My Collection",
- []string{"obj1", "obj2"},
- "icon.png",
- nil,
- tt.needToAddDate,
- tt.shouldBeFavorite,
- tt.shouldAddRelation,
- widget,
+ req := NewImportCollectionSetting(
+ WithCollectionName("My Collection"),
+ WithTargetObjects([]string{"obj1", "obj2"}),
+ WithIcon("icon.png"),
+ WithWidgetSnapshot(widget),
)
+ req.needToAddDate = tt.needToAddDate
+ req.shouldBeFavorite = tt.shouldBeFavorite
+ req.shouldAddRelations = tt.shouldAddRelation
+
root, widgetSnap, err := importer.MakeImportCollection(req)
assert.NoError(t, err)
diff --git a/core/block/import/csv/converter.go b/core/block/import/csv/converter.go
index 8e50769e3..c9f68ba08 100644
--- a/core/block/import/csv/converter.go
+++ b/core/block/import/csv/converter.go
@@ -67,7 +67,12 @@ func (c *CSV) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
return nil, allErrors
}
rootCollection := common.NewImportCollection(c.collectionService)
- settings := common.MakeImportCollectionSetting(rootCollectionName, result.objectIDs, "", nil, true, false, true, nil)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(rootCollectionName),
+ common.WithTargetObjects(result.objectIDs),
+ common.WithAddDate(),
+ common.WithRelations(),
+ )
rootCol, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
diff --git a/core/block/import/html/converter.go b/core/block/import/html/converter.go
index 036edf186..846d8bf7c 100644
--- a/core/block/import/html/converter.go
+++ b/core/block/import/html/converter.go
@@ -66,7 +66,12 @@ func (h *HTML) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
return nil, allErrors
}
rootCollection := common.NewImportCollection(h.collectionService)
- settings := common.MakeImportCollectionSetting(rootCollectionName, targetObjects, "", nil, true, false, true, nil)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(rootCollectionName),
+ common.WithTargetObjects(targetObjects),
+ common.WithAddDate(),
+ common.WithRelations(),
+ )
rootCollectionSnapshot, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
diff --git a/core/block/import/markdown/import.go b/core/block/import/markdown/import.go
index f731f90bb..0ccb27eb4 100644
--- a/core/block/import/markdown/import.go
+++ b/core/block/import/markdown/import.go
@@ -102,7 +102,12 @@ func (m *Markdown) processFiles(req *pb.RpcObjectImportRequest, progress process
func (m *Markdown) createRootCollection(allSnapshots []*common.Snapshot, allRootObjectsIds []string) ([]*common.Snapshot, string, error) {
rootCollection := common.NewImportCollection(m.service)
- settings := common.MakeImportCollectionSetting(rootCollectionName, allRootObjectsIds, "", nil, true, false, true, nil)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(rootCollectionName),
+ common.WithTargetObjects(allRootObjectsIds),
+ common.WithAddDate(),
+ common.WithRelations(),
+ )
rootCol, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, "", err
@@ -427,7 +432,10 @@ func (m *Markdown) createSnapshots(
func (m *Markdown) addCollectionSnapshot(fileName string, file *FileInfo, snapshots []*common.Snapshot) ([]*common.Snapshot, error) {
c := common.NewImportCollection(m.service)
- settings := common.MakeImportCollectionSetting(file.Title, file.CollectionsObjectsIds, "", nil, false, false, false, nil)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(file.Title),
+ common.WithTargetObjects(file.CollectionsObjectsIds),
+ )
csvCollection, _, err := c.MakeImportCollection(settings)
if err != nil {
return nil, err
diff --git a/core/block/import/notion/api/database/database.go b/core/block/import/notion/api/database/database.go
index cbd4357a1..0acf026bf 100644
--- a/core/block/import/notion/api/database/database.go
+++ b/core/block/import/notion/api/database/database.go
@@ -353,7 +353,12 @@ func (ds *Service) AddObjectsToNotionCollection(
allObjects := ds.filterObjects(notionContext, notionDB, notionPages)
rootCollection := common.NewImportCollection(ds.collectionService)
- settings := common.MakeImportCollectionSetting(rootCollectionName, allObjects, "", nil, true, false, true, nil)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(rootCollectionName),
+ common.WithTargetObjects(allObjects),
+ common.WithAddDate(),
+ common.WithRelations(),
+ )
rootCol, widget, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, nil, err
diff --git a/core/block/import/pb/gallery.go b/core/block/import/pb/gallery.go
index 0cea9c4cd..8faf42561 100644
--- a/core/block/import/pb/gallery.go
+++ b/core/block/import/pb/gallery.go
@@ -59,7 +59,14 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
}
}
objectsIDs := g.getObjectsIDs(snapshots)
- settings := common.MakeImportCollectionSetting(collectionName, objectsIDs, icon, fileKeys, false, false, true, widgetSnapshot)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(collectionName),
+ common.WithTargetObjects(objectsIDs),
+ common.WithIcon(icon),
+ common.WithRelations(),
+ common.WithFileKeys(fileKeys),
+ common.WithWidgetSnapshot(widgetSnapshot),
+ )
objectsCollection, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, err
@@ -77,7 +84,13 @@ func (g *GalleryImport) getWidgetsCollection(
collectionsSnapshots []*common.Snapshot,
) ([]*common.Snapshot, *common.Snapshot, error) {
widgetCollectionName := collectionName + widgetCollectionPattern
- settings := common.MakeImportCollectionSetting(widgetCollectionName, widgetObjects, icon, fileKeys, false, false, true, nil)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(widgetCollectionName),
+ common.WithTargetObjects(widgetObjects),
+ common.WithIcon(icon),
+ common.WithRelations(),
+ common.WithFileKeys(fileKeys),
+ )
widgetsCollectionSnapshot, widget, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, nil, err
diff --git a/core/block/import/pb/space.go b/core/block/import/pb/space.go
index f459fde1d..b62d7edc9 100644
--- a/core/block/import/pb/space.go
+++ b/core/block/import/pb/space.go
@@ -56,7 +56,13 @@ func (s *SpaceImport) ProvideCollection(snapshots []*common.Snapshot,
})
}
rootCollection := common.NewImportCollection(s.service)
- settings := common.MakeImportCollectionSetting(rootCollectionName, rootObjects, "", nil, true, false, true, widgetSnapshot)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(rootCollectionName),
+ common.WithTargetObjects(rootObjects),
+ common.WithRelations(),
+ common.WithAddDate(),
+ common.WithWidgetSnapshot(widgetSnapshot),
+ )
rootCollectionSnapshot, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, err
diff --git a/core/block/import/txt/converter.go b/core/block/import/txt/converter.go
index dca7bbe53..07c16dc71 100644
--- a/core/block/import/txt/converter.go
+++ b/core/block/import/txt/converter.go
@@ -56,7 +56,12 @@ func (t *TXT) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
return nil, allErrors
}
rootCollection := common.NewImportCollection(t.service)
- settings := common.MakeImportCollectionSetting(rootCollectionName, targetObjects, "", nil, true, false, true, nil)
+ settings := common.NewImportCollectionSetting(
+ common.WithCollectionName(rootCollectionName),
+ common.WithTargetObjects(targetObjects),
+ common.WithRelations(),
+ common.WithAddDate(),
+ )
rootCol, widget, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
From 555d95b9426dbb743eadff318fbe93e259f83c32 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Mar 2025 08:19:03 +0100
Subject: [PATCH 099/132] GO-4459: Refactor API services and tests to use new
apicore interfaces
---
.mockery.yaml | 4 +-
core/api/apicore/apicore.go | 49 +
.../mock_apicore/mock_ClientCommands.go | 1164 ++
core/api/internal/auth/service.go | 6 +-
core/api/internal/auth/service_test.go | 6 +-
core/api/internal/export/service.go | 6 +-
core/api/internal/export/service_test.go | 6 +-
core/api/internal/list/service.go | 6 +-
core/api/internal/list/service_test.go | 6 +-
core/api/internal/object/service.go | 6 +-
core/api/internal/object/service_test.go | 6 +-
core/api/internal/search/service.go | 6 +-
core/api/internal/search/service_test.go | 6 +-
core/api/internal/space/service.go | 6 +-
core/api/internal/space/service_test.go | 6 +-
core/api/server/middleware.go | 7 +-
core/api/server/middleware_test.go | 2 +-
core/api/server/router.go | 5 +-
core/api/server/server.go | 5 +-
core/api/server/server_test.go | 4 +-
core/api/service.go | 10 +-
core/api/util/util.go | 8 +-
.../mock_service/mock_ClientCommandsServer.go | 14283 ----------------
23 files changed, 1270 insertions(+), 14343 deletions(-)
create mode 100644 core/api/apicore/apicore.go
create mode 100644 core/api/apicore/mock_apicore/mock_ClientCommands.go
delete mode 100644 pb/service/mock_service/mock_ClientCommandsServer.go
diff --git a/.mockery.yaml b/.mockery.yaml
index 3240af8d2..18ad4e2ea 100644
--- a/.mockery.yaml
+++ b/.mockery.yaml
@@ -237,9 +237,9 @@ packages:
github.com/anyproto/anytype-heart/core/identity:
interfaces:
Service:
- github.com/anyproto/anytype-heart/pb/service:
+ github.com/anyproto/anytype-heart/core/api/apicore:
interfaces:
- ClientCommandsServer:
+ ClientCommands:
github.com/anyproto/anytype-heart/core/block/template:
interfaces:
Service:
diff --git a/core/api/apicore/apicore.go b/core/api/apicore/apicore.go
new file mode 100644
index 000000000..5c05add4a
--- /dev/null
+++ b/core/api/apicore/apicore.go
@@ -0,0 +1,49 @@
+package apicore
+
+import (
+ "context"
+
+ "github.com/anyproto/anytype-heart/pb"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+)
+
+type AccountInfo interface {
+ GetInfo(ctx context.Context) (*model.AccountInfo, error)
+}
+
+type ClientCommands interface {
+ // Wallet
+ AccountLocalLinkNewChallenge(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse
+ AccountLocalLinkSolveChallenge(context.Context, *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse
+ WalletCreateSession(context.Context, *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse
+
+ // Space
+ WorkspaceCreate(context.Context, *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse
+ WorkspaceOpen(context.Context, *pb.RpcWorkspaceOpenRequest) *pb.RpcWorkspaceOpenResponse
+ WorkspaceSetInfo(context.Context, *pb.RpcWorkspaceSetInfoRequest) *pb.RpcWorkspaceSetInfoResponse
+ SpaceRequestApprove(context.Context, *pb.RpcSpaceRequestApproveRequest) *pb.RpcSpaceRequestApproveResponse
+ SpaceRequestDecline(context.Context, *pb.RpcSpaceRequestDeclineRequest) *pb.RpcSpaceRequestDeclineResponse
+ SpaceParticipantRemove(context.Context, *pb.RpcSpaceParticipantRemoveRequest) *pb.RpcSpaceParticipantRemoveResponse
+ SpaceParticipantPermissionsChange(context.Context, *pb.RpcSpaceParticipantPermissionsChangeRequest) *pb.RpcSpaceParticipantPermissionsChangeResponse
+
+ // Object
+ ObjectShow(context.Context, *pb.RpcObjectShowRequest) *pb.RpcObjectShowResponse
+ ObjectCreate(context.Context, *pb.RpcObjectCreateRequest) *pb.RpcObjectCreateResponse
+ ObjectCreateBookmark(context.Context, *pb.RpcObjectCreateBookmarkRequest) *pb.RpcObjectCreateBookmarkResponse
+ ObjectSearch(context.Context, *pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse
+ ObjectSearchSubscribe(context.Context, *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse
+ ObjectSetDetails(context.Context, *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse
+ ObjectSetIsArchived(context.Context, *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse
+ ObjectListExport(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse
+
+ // List
+ ObjectCollectionAdd(context.Context, *pb.RpcObjectCollectionAddRequest) *pb.RpcObjectCollectionAddResponse
+ ObjectCollectionRemove(context.Context, *pb.RpcObjectCollectionRemoveRequest) *pb.RpcObjectCollectionRemoveResponse
+
+ // Property
+ ObjectRelationAddFeatured(context.Context, *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse
+
+ // Block
+ BlockCreate(context.Context, *pb.RpcBlockCreateRequest) *pb.RpcBlockCreateResponse
+ BlockPaste(context.Context, *pb.RpcBlockPasteRequest) *pb.RpcBlockPasteResponse
+}
diff --git a/core/api/apicore/mock_apicore/mock_ClientCommands.go b/core/api/apicore/mock_apicore/mock_ClientCommands.go
new file mode 100644
index 000000000..55e09a275
--- /dev/null
+++ b/core/api/apicore/mock_apicore/mock_ClientCommands.go
@@ -0,0 +1,1164 @@
+// Code generated by mockery. DO NOT EDIT.
+
+package mock_apicore
+
+import (
+ context "context"
+
+ pb "github.com/anyproto/anytype-heart/pb"
+ mock "github.com/stretchr/testify/mock"
+)
+
+// MockClientCommands is an autogenerated mock type for the ClientCommands type
+type MockClientCommands struct {
+ mock.Mock
+}
+
+type MockClientCommands_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *MockClientCommands) EXPECT() *MockClientCommands_Expecter {
+ return &MockClientCommands_Expecter{mock: &_m.Mock}
+}
+
+// AccountLocalLinkNewChallenge provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) AccountLocalLinkNewChallenge(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for AccountLocalLinkNewChallenge")
+ }
+
+ var r0 *pb.RpcAccountLocalLinkNewChallengeResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcAccountLocalLinkNewChallengeResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_AccountLocalLinkNewChallenge_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountLocalLinkNewChallenge'
+type MockClientCommands_AccountLocalLinkNewChallenge_Call struct {
+ *mock.Call
+}
+
+// AccountLocalLinkNewChallenge is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcAccountLocalLinkNewChallengeRequest
+func (_e *MockClientCommands_Expecter) AccountLocalLinkNewChallenge(_a0 interface{}, _a1 interface{}) *MockClientCommands_AccountLocalLinkNewChallenge_Call {
+ return &MockClientCommands_AccountLocalLinkNewChallenge_Call{Call: _e.mock.On("AccountLocalLinkNewChallenge", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_AccountLocalLinkNewChallenge_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkNewChallengeRequest)) *MockClientCommands_AccountLocalLinkNewChallenge_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcAccountLocalLinkNewChallengeRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_AccountLocalLinkNewChallenge_Call) Return(_a0 *pb.RpcAccountLocalLinkNewChallengeResponse) *MockClientCommands_AccountLocalLinkNewChallenge_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_AccountLocalLinkNewChallenge_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse) *MockClientCommands_AccountLocalLinkNewChallenge_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// AccountLocalLinkSolveChallenge provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) AccountLocalLinkSolveChallenge(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for AccountLocalLinkSolveChallenge")
+ }
+
+ var r0 *pb.RpcAccountLocalLinkSolveChallengeResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcAccountLocalLinkSolveChallengeResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_AccountLocalLinkSolveChallenge_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountLocalLinkSolveChallenge'
+type MockClientCommands_AccountLocalLinkSolveChallenge_Call struct {
+ *mock.Call
+}
+
+// AccountLocalLinkSolveChallenge is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcAccountLocalLinkSolveChallengeRequest
+func (_e *MockClientCommands_Expecter) AccountLocalLinkSolveChallenge(_a0 interface{}, _a1 interface{}) *MockClientCommands_AccountLocalLinkSolveChallenge_Call {
+ return &MockClientCommands_AccountLocalLinkSolveChallenge_Call{Call: _e.mock.On("AccountLocalLinkSolveChallenge", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_AccountLocalLinkSolveChallenge_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkSolveChallengeRequest)) *MockClientCommands_AccountLocalLinkSolveChallenge_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcAccountLocalLinkSolveChallengeRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_AccountLocalLinkSolveChallenge_Call) Return(_a0 *pb.RpcAccountLocalLinkSolveChallengeResponse) *MockClientCommands_AccountLocalLinkSolveChallenge_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_AccountLocalLinkSolveChallenge_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse) *MockClientCommands_AccountLocalLinkSolveChallenge_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// BlockCreate provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) BlockCreate(_a0 context.Context, _a1 *pb.RpcBlockCreateRequest) *pb.RpcBlockCreateResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for BlockCreate")
+ }
+
+ var r0 *pb.RpcBlockCreateResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockCreateRequest) *pb.RpcBlockCreateResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcBlockCreateResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_BlockCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockCreate'
+type MockClientCommands_BlockCreate_Call struct {
+ *mock.Call
+}
+
+// BlockCreate is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcBlockCreateRequest
+func (_e *MockClientCommands_Expecter) BlockCreate(_a0 interface{}, _a1 interface{}) *MockClientCommands_BlockCreate_Call {
+ return &MockClientCommands_BlockCreate_Call{Call: _e.mock.On("BlockCreate", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_BlockCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockCreateRequest)) *MockClientCommands_BlockCreate_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcBlockCreateRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_BlockCreate_Call) Return(_a0 *pb.RpcBlockCreateResponse) *MockClientCommands_BlockCreate_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_BlockCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockCreateRequest) *pb.RpcBlockCreateResponse) *MockClientCommands_BlockCreate_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// BlockPaste provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) BlockPaste(_a0 context.Context, _a1 *pb.RpcBlockPasteRequest) *pb.RpcBlockPasteResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for BlockPaste")
+ }
+
+ var r0 *pb.RpcBlockPasteResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockPasteRequest) *pb.RpcBlockPasteResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcBlockPasteResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_BlockPaste_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockPaste'
+type MockClientCommands_BlockPaste_Call struct {
+ *mock.Call
+}
+
+// BlockPaste is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcBlockPasteRequest
+func (_e *MockClientCommands_Expecter) BlockPaste(_a0 interface{}, _a1 interface{}) *MockClientCommands_BlockPaste_Call {
+ return &MockClientCommands_BlockPaste_Call{Call: _e.mock.On("BlockPaste", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_BlockPaste_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockPasteRequest)) *MockClientCommands_BlockPaste_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcBlockPasteRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_BlockPaste_Call) Return(_a0 *pb.RpcBlockPasteResponse) *MockClientCommands_BlockPaste_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_BlockPaste_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockPasteRequest) *pb.RpcBlockPasteResponse) *MockClientCommands_BlockPaste_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectCollectionAdd provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectCollectionAdd(_a0 context.Context, _a1 *pb.RpcObjectCollectionAddRequest) *pb.RpcObjectCollectionAddResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectCollectionAdd")
+ }
+
+ var r0 *pb.RpcObjectCollectionAddResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCollectionAddRequest) *pb.RpcObjectCollectionAddResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectCollectionAddResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectCollectionAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCollectionAdd'
+type MockClientCommands_ObjectCollectionAdd_Call struct {
+ *mock.Call
+}
+
+// ObjectCollectionAdd is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectCollectionAddRequest
+func (_e *MockClientCommands_Expecter) ObjectCollectionAdd(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectCollectionAdd_Call {
+ return &MockClientCommands_ObjectCollectionAdd_Call{Call: _e.mock.On("ObjectCollectionAdd", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectCollectionAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCollectionAddRequest)) *MockClientCommands_ObjectCollectionAdd_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectCollectionAddRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCollectionAdd_Call) Return(_a0 *pb.RpcObjectCollectionAddResponse) *MockClientCommands_ObjectCollectionAdd_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCollectionAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCollectionAddRequest) *pb.RpcObjectCollectionAddResponse) *MockClientCommands_ObjectCollectionAdd_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectCollectionRemove provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectCollectionRemove(_a0 context.Context, _a1 *pb.RpcObjectCollectionRemoveRequest) *pb.RpcObjectCollectionRemoveResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectCollectionRemove")
+ }
+
+ var r0 *pb.RpcObjectCollectionRemoveResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCollectionRemoveRequest) *pb.RpcObjectCollectionRemoveResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectCollectionRemoveResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectCollectionRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCollectionRemove'
+type MockClientCommands_ObjectCollectionRemove_Call struct {
+ *mock.Call
+}
+
+// ObjectCollectionRemove is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectCollectionRemoveRequest
+func (_e *MockClientCommands_Expecter) ObjectCollectionRemove(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectCollectionRemove_Call {
+ return &MockClientCommands_ObjectCollectionRemove_Call{Call: _e.mock.On("ObjectCollectionRemove", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectCollectionRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCollectionRemoveRequest)) *MockClientCommands_ObjectCollectionRemove_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectCollectionRemoveRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCollectionRemove_Call) Return(_a0 *pb.RpcObjectCollectionRemoveResponse) *MockClientCommands_ObjectCollectionRemove_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCollectionRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCollectionRemoveRequest) *pb.RpcObjectCollectionRemoveResponse) *MockClientCommands_ObjectCollectionRemove_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectCreate provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectCreate(_a0 context.Context, _a1 *pb.RpcObjectCreateRequest) *pb.RpcObjectCreateResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectCreate")
+ }
+
+ var r0 *pb.RpcObjectCreateResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateRequest) *pb.RpcObjectCreateResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectCreateResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreate'
+type MockClientCommands_ObjectCreate_Call struct {
+ *mock.Call
+}
+
+// ObjectCreate is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectCreateRequest
+func (_e *MockClientCommands_Expecter) ObjectCreate(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectCreate_Call {
+ return &MockClientCommands_ObjectCreate_Call{Call: _e.mock.On("ObjectCreate", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateRequest)) *MockClientCommands_ObjectCreate_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCreate_Call) Return(_a0 *pb.RpcObjectCreateResponse) *MockClientCommands_ObjectCreate_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateRequest) *pb.RpcObjectCreateResponse) *MockClientCommands_ObjectCreate_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectCreateBookmark provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectCreateBookmark(_a0 context.Context, _a1 *pb.RpcObjectCreateBookmarkRequest) *pb.RpcObjectCreateBookmarkResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectCreateBookmark")
+ }
+
+ var r0 *pb.RpcObjectCreateBookmarkResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateBookmarkRequest) *pb.RpcObjectCreateBookmarkResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectCreateBookmarkResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectCreateBookmark_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreateBookmark'
+type MockClientCommands_ObjectCreateBookmark_Call struct {
+ *mock.Call
+}
+
+// ObjectCreateBookmark is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectCreateBookmarkRequest
+func (_e *MockClientCommands_Expecter) ObjectCreateBookmark(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectCreateBookmark_Call {
+ return &MockClientCommands_ObjectCreateBookmark_Call{Call: _e.mock.On("ObjectCreateBookmark", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectCreateBookmark_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateBookmarkRequest)) *MockClientCommands_ObjectCreateBookmark_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateBookmarkRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCreateBookmark_Call) Return(_a0 *pb.RpcObjectCreateBookmarkResponse) *MockClientCommands_ObjectCreateBookmark_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectCreateBookmark_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateBookmarkRequest) *pb.RpcObjectCreateBookmarkResponse) *MockClientCommands_ObjectCreateBookmark_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectListExport provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectListExport(_a0 context.Context, _a1 *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectListExport")
+ }
+
+ var r0 *pb.RpcObjectListExportResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectListExportResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectListExport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListExport'
+type MockClientCommands_ObjectListExport_Call struct {
+ *mock.Call
+}
+
+// ObjectListExport is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectListExportRequest
+func (_e *MockClientCommands_Expecter) ObjectListExport(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectListExport_Call {
+ return &MockClientCommands_ObjectListExport_Call{Call: _e.mock.On("ObjectListExport", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectListExport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListExportRequest)) *MockClientCommands_ObjectListExport_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectListExportRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectListExport_Call) Return(_a0 *pb.RpcObjectListExportResponse) *MockClientCommands_ObjectListExport_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectListExport_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse) *MockClientCommands_ObjectListExport_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectRelationAddFeatured provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectRelationAddFeatured(_a0 context.Context, _a1 *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectRelationAddFeatured")
+ }
+
+ var r0 *pb.RpcObjectRelationAddFeaturedResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectRelationAddFeaturedResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectRelationAddFeatured_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectRelationAddFeatured'
+type MockClientCommands_ObjectRelationAddFeatured_Call struct {
+ *mock.Call
+}
+
+// ObjectRelationAddFeatured is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectRelationAddFeaturedRequest
+func (_e *MockClientCommands_Expecter) ObjectRelationAddFeatured(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectRelationAddFeatured_Call {
+ return &MockClientCommands_ObjectRelationAddFeatured_Call{Call: _e.mock.On("ObjectRelationAddFeatured", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectRelationAddFeatured_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectRelationAddFeaturedRequest)) *MockClientCommands_ObjectRelationAddFeatured_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectRelationAddFeaturedRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectRelationAddFeatured_Call) Return(_a0 *pb.RpcObjectRelationAddFeaturedResponse) *MockClientCommands_ObjectRelationAddFeatured_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectRelationAddFeatured_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse) *MockClientCommands_ObjectRelationAddFeatured_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectSearch provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectSearch(_a0 context.Context, _a1 *pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectSearch")
+ }
+
+ var r0 *pb.RpcObjectSearchResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectSearchResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectSearch_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSearch'
+type MockClientCommands_ObjectSearch_Call struct {
+ *mock.Call
+}
+
+// ObjectSearch is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectSearchRequest
+func (_e *MockClientCommands_Expecter) ObjectSearch(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectSearch_Call {
+ return &MockClientCommands_ObjectSearch_Call{Call: _e.mock.On("ObjectSearch", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectSearch_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSearchRequest)) *MockClientCommands_ObjectSearch_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectSearchRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSearch_Call) Return(_a0 *pb.RpcObjectSearchResponse) *MockClientCommands_ObjectSearch_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSearch_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse) *MockClientCommands_ObjectSearch_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectSearchSubscribe provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectSearchSubscribe(_a0 context.Context, _a1 *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectSearchSubscribe")
+ }
+
+ var r0 *pb.RpcObjectSearchSubscribeResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectSearchSubscribeResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectSearchSubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSearchSubscribe'
+type MockClientCommands_ObjectSearchSubscribe_Call struct {
+ *mock.Call
+}
+
+// ObjectSearchSubscribe is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectSearchSubscribeRequest
+func (_e *MockClientCommands_Expecter) ObjectSearchSubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectSearchSubscribe_Call {
+ return &MockClientCommands_ObjectSearchSubscribe_Call{Call: _e.mock.On("ObjectSearchSubscribe", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectSearchSubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSearchSubscribeRequest)) *MockClientCommands_ObjectSearchSubscribe_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectSearchSubscribeRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSearchSubscribe_Call) Return(_a0 *pb.RpcObjectSearchSubscribeResponse) *MockClientCommands_ObjectSearchSubscribe_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSearchSubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse) *MockClientCommands_ObjectSearchSubscribe_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectSetDetails provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectSetDetails(_a0 context.Context, _a1 *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectSetDetails")
+ }
+
+ var r0 *pb.RpcObjectSetDetailsResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectSetDetailsResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectSetDetails_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetDetails'
+type MockClientCommands_ObjectSetDetails_Call struct {
+ *mock.Call
+}
+
+// ObjectSetDetails is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectSetDetailsRequest
+func (_e *MockClientCommands_Expecter) ObjectSetDetails(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectSetDetails_Call {
+ return &MockClientCommands_ObjectSetDetails_Call{Call: _e.mock.On("ObjectSetDetails", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectSetDetails_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetDetailsRequest)) *MockClientCommands_ObjectSetDetails_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectSetDetailsRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSetDetails_Call) Return(_a0 *pb.RpcObjectSetDetailsResponse) *MockClientCommands_ObjectSetDetails_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSetDetails_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse) *MockClientCommands_ObjectSetDetails_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectSetIsArchived provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectSetIsArchived(_a0 context.Context, _a1 *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectSetIsArchived")
+ }
+
+ var r0 *pb.RpcObjectSetIsArchivedResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectSetIsArchivedResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectSetIsArchived_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetIsArchived'
+type MockClientCommands_ObjectSetIsArchived_Call struct {
+ *mock.Call
+}
+
+// ObjectSetIsArchived is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectSetIsArchivedRequest
+func (_e *MockClientCommands_Expecter) ObjectSetIsArchived(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectSetIsArchived_Call {
+ return &MockClientCommands_ObjectSetIsArchived_Call{Call: _e.mock.On("ObjectSetIsArchived", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectSetIsArchived_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetIsArchivedRequest)) *MockClientCommands_ObjectSetIsArchived_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectSetIsArchivedRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSetIsArchived_Call) Return(_a0 *pb.RpcObjectSetIsArchivedResponse) *MockClientCommands_ObjectSetIsArchived_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectSetIsArchived_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse) *MockClientCommands_ObjectSetIsArchived_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// ObjectShow provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) ObjectShow(_a0 context.Context, _a1 *pb.RpcObjectShowRequest) *pb.RpcObjectShowResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ObjectShow")
+ }
+
+ var r0 *pb.RpcObjectShowResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectShowRequest) *pb.RpcObjectShowResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcObjectShowResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_ObjectShow_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectShow'
+type MockClientCommands_ObjectShow_Call struct {
+ *mock.Call
+}
+
+// ObjectShow is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcObjectShowRequest
+func (_e *MockClientCommands_Expecter) ObjectShow(_a0 interface{}, _a1 interface{}) *MockClientCommands_ObjectShow_Call {
+ return &MockClientCommands_ObjectShow_Call{Call: _e.mock.On("ObjectShow", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_ObjectShow_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectShowRequest)) *MockClientCommands_ObjectShow_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcObjectShowRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectShow_Call) Return(_a0 *pb.RpcObjectShowResponse) *MockClientCommands_ObjectShow_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_ObjectShow_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectShowRequest) *pb.RpcObjectShowResponse) *MockClientCommands_ObjectShow_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// SpaceParticipantPermissionsChange provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) SpaceParticipantPermissionsChange(_a0 context.Context, _a1 *pb.RpcSpaceParticipantPermissionsChangeRequest) *pb.RpcSpaceParticipantPermissionsChangeResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SpaceParticipantPermissionsChange")
+ }
+
+ var r0 *pb.RpcSpaceParticipantPermissionsChangeResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceParticipantPermissionsChangeRequest) *pb.RpcSpaceParticipantPermissionsChangeResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcSpaceParticipantPermissionsChangeResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_SpaceParticipantPermissionsChange_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceParticipantPermissionsChange'
+type MockClientCommands_SpaceParticipantPermissionsChange_Call struct {
+ *mock.Call
+}
+
+// SpaceParticipantPermissionsChange is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcSpaceParticipantPermissionsChangeRequest
+func (_e *MockClientCommands_Expecter) SpaceParticipantPermissionsChange(_a0 interface{}, _a1 interface{}) *MockClientCommands_SpaceParticipantPermissionsChange_Call {
+ return &MockClientCommands_SpaceParticipantPermissionsChange_Call{Call: _e.mock.On("SpaceParticipantPermissionsChange", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_SpaceParticipantPermissionsChange_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceParticipantPermissionsChangeRequest)) *MockClientCommands_SpaceParticipantPermissionsChange_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcSpaceParticipantPermissionsChangeRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceParticipantPermissionsChange_Call) Return(_a0 *pb.RpcSpaceParticipantPermissionsChangeResponse) *MockClientCommands_SpaceParticipantPermissionsChange_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceParticipantPermissionsChange_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceParticipantPermissionsChangeRequest) *pb.RpcSpaceParticipantPermissionsChangeResponse) *MockClientCommands_SpaceParticipantPermissionsChange_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// SpaceParticipantRemove provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) SpaceParticipantRemove(_a0 context.Context, _a1 *pb.RpcSpaceParticipantRemoveRequest) *pb.RpcSpaceParticipantRemoveResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SpaceParticipantRemove")
+ }
+
+ var r0 *pb.RpcSpaceParticipantRemoveResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceParticipantRemoveRequest) *pb.RpcSpaceParticipantRemoveResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcSpaceParticipantRemoveResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_SpaceParticipantRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceParticipantRemove'
+type MockClientCommands_SpaceParticipantRemove_Call struct {
+ *mock.Call
+}
+
+// SpaceParticipantRemove is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcSpaceParticipantRemoveRequest
+func (_e *MockClientCommands_Expecter) SpaceParticipantRemove(_a0 interface{}, _a1 interface{}) *MockClientCommands_SpaceParticipantRemove_Call {
+ return &MockClientCommands_SpaceParticipantRemove_Call{Call: _e.mock.On("SpaceParticipantRemove", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_SpaceParticipantRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceParticipantRemoveRequest)) *MockClientCommands_SpaceParticipantRemove_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcSpaceParticipantRemoveRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceParticipantRemove_Call) Return(_a0 *pb.RpcSpaceParticipantRemoveResponse) *MockClientCommands_SpaceParticipantRemove_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceParticipantRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceParticipantRemoveRequest) *pb.RpcSpaceParticipantRemoveResponse) *MockClientCommands_SpaceParticipantRemove_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// SpaceRequestApprove provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) SpaceRequestApprove(_a0 context.Context, _a1 *pb.RpcSpaceRequestApproveRequest) *pb.RpcSpaceRequestApproveResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SpaceRequestApprove")
+ }
+
+ var r0 *pb.RpcSpaceRequestApproveResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceRequestApproveRequest) *pb.RpcSpaceRequestApproveResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcSpaceRequestApproveResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_SpaceRequestApprove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceRequestApprove'
+type MockClientCommands_SpaceRequestApprove_Call struct {
+ *mock.Call
+}
+
+// SpaceRequestApprove is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcSpaceRequestApproveRequest
+func (_e *MockClientCommands_Expecter) SpaceRequestApprove(_a0 interface{}, _a1 interface{}) *MockClientCommands_SpaceRequestApprove_Call {
+ return &MockClientCommands_SpaceRequestApprove_Call{Call: _e.mock.On("SpaceRequestApprove", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_SpaceRequestApprove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceRequestApproveRequest)) *MockClientCommands_SpaceRequestApprove_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcSpaceRequestApproveRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceRequestApprove_Call) Return(_a0 *pb.RpcSpaceRequestApproveResponse) *MockClientCommands_SpaceRequestApprove_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceRequestApprove_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceRequestApproveRequest) *pb.RpcSpaceRequestApproveResponse) *MockClientCommands_SpaceRequestApprove_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// SpaceRequestDecline provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) SpaceRequestDecline(_a0 context.Context, _a1 *pb.RpcSpaceRequestDeclineRequest) *pb.RpcSpaceRequestDeclineResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for SpaceRequestDecline")
+ }
+
+ var r0 *pb.RpcSpaceRequestDeclineResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceRequestDeclineRequest) *pb.RpcSpaceRequestDeclineResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcSpaceRequestDeclineResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_SpaceRequestDecline_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceRequestDecline'
+type MockClientCommands_SpaceRequestDecline_Call struct {
+ *mock.Call
+}
+
+// SpaceRequestDecline is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcSpaceRequestDeclineRequest
+func (_e *MockClientCommands_Expecter) SpaceRequestDecline(_a0 interface{}, _a1 interface{}) *MockClientCommands_SpaceRequestDecline_Call {
+ return &MockClientCommands_SpaceRequestDecline_Call{Call: _e.mock.On("SpaceRequestDecline", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_SpaceRequestDecline_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceRequestDeclineRequest)) *MockClientCommands_SpaceRequestDecline_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcSpaceRequestDeclineRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceRequestDecline_Call) Return(_a0 *pb.RpcSpaceRequestDeclineResponse) *MockClientCommands_SpaceRequestDecline_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_SpaceRequestDecline_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceRequestDeclineRequest) *pb.RpcSpaceRequestDeclineResponse) *MockClientCommands_SpaceRequestDecline_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// WalletCreateSession provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) WalletCreateSession(_a0 context.Context, _a1 *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for WalletCreateSession")
+ }
+
+ var r0 *pb.RpcWalletCreateSessionResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcWalletCreateSessionResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_WalletCreateSession_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WalletCreateSession'
+type MockClientCommands_WalletCreateSession_Call struct {
+ *mock.Call
+}
+
+// WalletCreateSession is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcWalletCreateSessionRequest
+func (_e *MockClientCommands_Expecter) WalletCreateSession(_a0 interface{}, _a1 interface{}) *MockClientCommands_WalletCreateSession_Call {
+ return &MockClientCommands_WalletCreateSession_Call{Call: _e.mock.On("WalletCreateSession", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_WalletCreateSession_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWalletCreateSessionRequest)) *MockClientCommands_WalletCreateSession_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcWalletCreateSessionRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_WalletCreateSession_Call) Return(_a0 *pb.RpcWalletCreateSessionResponse) *MockClientCommands_WalletCreateSession_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_WalletCreateSession_Call) RunAndReturn(run func(context.Context, *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse) *MockClientCommands_WalletCreateSession_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// WorkspaceCreate provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) WorkspaceCreate(_a0 context.Context, _a1 *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for WorkspaceCreate")
+ }
+
+ var r0 *pb.RpcWorkspaceCreateResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcWorkspaceCreateResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_WorkspaceCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceCreate'
+type MockClientCommands_WorkspaceCreate_Call struct {
+ *mock.Call
+}
+
+// WorkspaceCreate is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcWorkspaceCreateRequest
+func (_e *MockClientCommands_Expecter) WorkspaceCreate(_a0 interface{}, _a1 interface{}) *MockClientCommands_WorkspaceCreate_Call {
+ return &MockClientCommands_WorkspaceCreate_Call{Call: _e.mock.On("WorkspaceCreate", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_WorkspaceCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceCreateRequest)) *MockClientCommands_WorkspaceCreate_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceCreateRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_WorkspaceCreate_Call) Return(_a0 *pb.RpcWorkspaceCreateResponse) *MockClientCommands_WorkspaceCreate_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_WorkspaceCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse) *MockClientCommands_WorkspaceCreate_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// WorkspaceOpen provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) WorkspaceOpen(_a0 context.Context, _a1 *pb.RpcWorkspaceOpenRequest) *pb.RpcWorkspaceOpenResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for WorkspaceOpen")
+ }
+
+ var r0 *pb.RpcWorkspaceOpenResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceOpenRequest) *pb.RpcWorkspaceOpenResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcWorkspaceOpenResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_WorkspaceOpen_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceOpen'
+type MockClientCommands_WorkspaceOpen_Call struct {
+ *mock.Call
+}
+
+// WorkspaceOpen is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcWorkspaceOpenRequest
+func (_e *MockClientCommands_Expecter) WorkspaceOpen(_a0 interface{}, _a1 interface{}) *MockClientCommands_WorkspaceOpen_Call {
+ return &MockClientCommands_WorkspaceOpen_Call{Call: _e.mock.On("WorkspaceOpen", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_WorkspaceOpen_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceOpenRequest)) *MockClientCommands_WorkspaceOpen_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceOpenRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_WorkspaceOpen_Call) Return(_a0 *pb.RpcWorkspaceOpenResponse) *MockClientCommands_WorkspaceOpen_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_WorkspaceOpen_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceOpenRequest) *pb.RpcWorkspaceOpenResponse) *MockClientCommands_WorkspaceOpen_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// WorkspaceSetInfo provides a mock function with given fields: _a0, _a1
+func (_m *MockClientCommands) WorkspaceSetInfo(_a0 context.Context, _a1 *pb.RpcWorkspaceSetInfoRequest) *pb.RpcWorkspaceSetInfoResponse {
+ ret := _m.Called(_a0, _a1)
+
+ if len(ret) == 0 {
+ panic("no return value specified for WorkspaceSetInfo")
+ }
+
+ var r0 *pb.RpcWorkspaceSetInfoResponse
+ if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceSetInfoRequest) *pb.RpcWorkspaceSetInfoResponse); ok {
+ r0 = rf(_a0, _a1)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*pb.RpcWorkspaceSetInfoResponse)
+ }
+ }
+
+ return r0
+}
+
+// MockClientCommands_WorkspaceSetInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceSetInfo'
+type MockClientCommands_WorkspaceSetInfo_Call struct {
+ *mock.Call
+}
+
+// WorkspaceSetInfo is a helper method to define mock.On call
+// - _a0 context.Context
+// - _a1 *pb.RpcWorkspaceSetInfoRequest
+func (_e *MockClientCommands_Expecter) WorkspaceSetInfo(_a0 interface{}, _a1 interface{}) *MockClientCommands_WorkspaceSetInfo_Call {
+ return &MockClientCommands_WorkspaceSetInfo_Call{Call: _e.mock.On("WorkspaceSetInfo", _a0, _a1)}
+}
+
+func (_c *MockClientCommands_WorkspaceSetInfo_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceSetInfoRequest)) *MockClientCommands_WorkspaceSetInfo_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceSetInfoRequest))
+ })
+ return _c
+}
+
+func (_c *MockClientCommands_WorkspaceSetInfo_Call) Return(_a0 *pb.RpcWorkspaceSetInfoResponse) *MockClientCommands_WorkspaceSetInfo_Call {
+ _c.Call.Return(_a0)
+ return _c
+}
+
+func (_c *MockClientCommands_WorkspaceSetInfo_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceSetInfoRequest) *pb.RpcWorkspaceSetInfoResponse) *MockClientCommands_WorkspaceSetInfo_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// NewMockClientCommands creates a new instance of MockClientCommands. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewMockClientCommands(t interface {
+ mock.TestingT
+ Cleanup(func())
+}) *MockClientCommands {
+ mock := &MockClientCommands{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
diff --git a/core/api/internal/auth/service.go b/core/api/internal/auth/service.go
index 33b3aecd6..c0bd7bb21 100644
--- a/core/api/internal/auth/service.go
+++ b/core/api/internal/auth/service.go
@@ -4,8 +4,8 @@ import (
"context"
"errors"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
@@ -22,10 +22,10 @@ type Service interface {
}
type AuthService struct {
- mw service.ClientCommandsServer
+ mw apicore.ClientCommands
}
-func NewService(mw service.ClientCommandsServer) *AuthService {
+func NewService(mw apicore.ClientCommands) *AuthService {
return &AuthService{mw: mw}
}
diff --git a/core/api/internal/auth/service_test.go b/core/api/internal/auth/service_test.go
index af067f7e4..cd85248d1 100644
--- a/core/api/internal/auth/service_test.go
+++ b/core/api/internal/auth/service_test.go
@@ -7,8 +7,8 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
@@ -22,11 +22,11 @@ const (
type fixture struct {
*AuthService
- mwMock *mock_service.MockClientCommandsServer
+ mwMock *mock_apicore.MockClientCommands
}
func newFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
authService := NewService(mwMock)
return &fixture{
diff --git a/core/api/internal/export/service.go b/core/api/internal/export/service.go
index bcb4e4e33..ce4bb3d46 100644
--- a/core/api/internal/export/service.go
+++ b/core/api/internal/export/service.go
@@ -4,8 +4,8 @@ import (
"context"
"errors"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
@@ -19,10 +19,10 @@ type Service interface {
}
type ExportService struct {
- mw service.ClientCommandsServer
+ mw apicore.ClientCommands
}
-func NewService(mw service.ClientCommandsServer) *ExportService {
+func NewService(mw apicore.ClientCommands) *ExportService {
return &ExportService{mw: mw}
}
diff --git a/core/api/internal/export/service_test.go b/core/api/internal/export/service_test.go
index 6dd705b8a..332f7e828 100644
--- a/core/api/internal/export/service_test.go
+++ b/core/api/internal/export/service_test.go
@@ -7,8 +7,8 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
@@ -22,11 +22,11 @@ const (
type fixture struct {
*ExportService
- mwMock *mock_service.MockClientCommandsServer
+ mwMock *mock_apicore.MockClientCommands
}
func newFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
exportService := NewService(mwMock)
return &fixture{
diff --git a/core/api/internal/list/service.go b/core/api/internal/list/service.go
index 2cc463abe..050969a67 100644
--- a/core/api/internal/list/service.go
+++ b/core/api/internal/list/service.go
@@ -6,11 +6,11 @@ import (
"github.com/iancoleman/strcase"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/pagination"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
@@ -33,11 +33,11 @@ type Service interface {
}
type ListService struct {
- mw service.ClientCommandsServer
+ mw apicore.ClientCommands
objectService *object.ObjectService
}
-func NewService(mw service.ClientCommandsServer, objectService *object.ObjectService) *ListService {
+func NewService(mw apicore.ClientCommands, objectService *object.ObjectService) *ListService {
return &ListService{mw: mw, objectService: objectService}
}
diff --git a/core/api/internal/list/service_test.go b/core/api/internal/list/service_test.go
index f4e487126..e0d335f7a 100644
--- a/core/api/internal/list/service_test.go
+++ b/core/api/internal/list/service_test.go
@@ -8,10 +8,10 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/internal/space"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -30,12 +30,12 @@ const (
type fixture struct {
*ListService
- mwMock *mock_service.MockClientCommandsServer
+ mwMock *mock_apicore.MockClientCommands
objectService *object.ObjectService
}
func newFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
spaceService := space.NewService(mwMock)
objectService := object.NewService(mwMock, spaceService)
objectService.AccountInfo = &model.AccountInfo{
diff --git a/core/api/internal/object/service.go b/core/api/internal/object/service.go
index 2505f1f6c..18a2c7d2a 100644
--- a/core/api/internal/object/service.go
+++ b/core/api/internal/object/service.go
@@ -8,12 +8,12 @@ import (
"github.com/gogo/protobuf/types"
"github.com/iancoleman/strcase"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/internal/space"
"github.com/anyproto/anytype-heart/core/api/pagination"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/core/domain"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -103,12 +103,12 @@ type Service interface {
}
type ObjectService struct {
- mw service.ClientCommandsServer
+ mw apicore.ClientCommands
spaceService *space.SpaceService
AccountInfo *model.AccountInfo
}
-func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceService) *ObjectService {
+func NewService(mw apicore.ClientCommands, spaceService *space.SpaceService) *ObjectService {
return &ObjectService{mw: mw, spaceService: spaceService}
}
diff --git a/core/api/internal/object/service_test.go b/core/api/internal/object/service_test.go
index 9064bbf5e..ef53eb72d 100644
--- a/core/api/internal/object/service_test.go
+++ b/core/api/internal/object/service_test.go
@@ -8,10 +8,10 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/core/api/internal/space"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -40,11 +40,11 @@ const (
type fixture struct {
*ObjectService
- mwMock *mock_service.MockClientCommandsServer
+ mwMock *mock_apicore.MockClientCommands
}
func newFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
spaceService := space.NewService(mwMock)
objectService := NewService(mwMock, spaceService)
diff --git a/core/api/internal/search/service.go b/core/api/internal/search/service.go
index 329af7e80..b941e7c6c 100644
--- a/core/api/internal/search/service.go
+++ b/core/api/internal/search/service.go
@@ -6,12 +6,12 @@ import (
"sort"
"strings"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/internal/space"
"github.com/anyproto/anytype-heart/core/api/pagination"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -28,13 +28,13 @@ type Service interface {
}
type SearchService struct {
- mw service.ClientCommandsServer
+ mw apicore.ClientCommands
spaceService *space.SpaceService
objectService *object.ObjectService
AccountInfo *model.AccountInfo
}
-func NewService(mw service.ClientCommandsServer, spaceService *space.SpaceService, objectService *object.ObjectService) *SearchService {
+func NewService(mw apicore.ClientCommands, spaceService *space.SpaceService, objectService *object.ObjectService) *SearchService {
return &SearchService{mw: mw, spaceService: spaceService, objectService: objectService}
}
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 7c6e44d60..1277e1fbf 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -8,11 +8,11 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/internal/space"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -40,11 +40,11 @@ const (
type fixture struct {
*SearchService
- mwMock *mock_service.MockClientCommandsServer
+ mwMock *mock_apicore.MockClientCommands
}
func newFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
spaceService := space.NewService(mwMock)
spaceService.AccountInfo = &model.AccountInfo{TechSpaceId: techSpaceId, GatewayUrl: gatewayUrl}
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index 683d63187..9362ff577 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -10,10 +10,10 @@ import (
"github.com/gogo/protobuf/types"
"github.com/iancoleman/strcase"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/pagination"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -43,11 +43,11 @@ type Service interface {
}
type SpaceService struct {
- mw service.ClientCommandsServer
+ mw apicore.ClientCommands
AccountInfo *model.AccountInfo
}
-func NewService(mw service.ClientCommandsServer) *SpaceService {
+func NewService(mw apicore.ClientCommands) *SpaceService {
return &SpaceService{mw: mw}
}
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index 9dd38daf4..add83ca27 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -9,9 +9,9 @@ import (
"github.com/gogo/protobuf/types"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -27,11 +27,11 @@ const (
type fixture struct {
*SpaceService
- mwMock *mock_service.MockClientCommandsServer
+ mwMock *mock_apicore.MockClientCommands
}
func newFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
spaceService := NewService(mwMock)
spaceService.AccountInfo = &model.AccountInfo{
TechSpaceId: techSpaceId,
diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go
index 569f0a3ee..1ac02aa98 100644
--- a/core/api/server/middleware.go
+++ b/core/api/server/middleware.go
@@ -11,10 +11,9 @@ import (
"github.com/didip/tollbooth/v8/limiter"
"github.com/gin-gonic/gin"
- "github.com/anyproto/anytype-heart/core/anytype/account"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
)
var (
@@ -43,7 +42,7 @@ func (s *Server) rateLimit(max float64) gin.HandlerFunc {
}
// ensureAuthenticated is a middleware that ensures the request is authenticated.
-func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.HandlerFunc {
+func (s *Server) ensureAuthenticated(mw apicore.ClientCommands) gin.HandlerFunc {
return func(c *gin.Context) {
authHeader := c.GetHeader("Authorization")
if authHeader == "" {
@@ -86,7 +85,7 @@ func (s *Server) ensureAuthenticated(mw service.ClientCommandsServer) gin.Handle
}
// ensureAccountInfo is a middleware that ensures the account info is available in the services.
-func (s *Server) ensureAccountInfo(accountService account.Service) gin.HandlerFunc {
+func (s *Server) ensureAccountInfo(accountService apicore.AccountInfo) gin.HandlerFunc {
return func(c *gin.Context) {
accInfo, err := accountService.GetInfo(context.Background())
if err != nil {
diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go
index 44bfdeca4..a0d283551 100644
--- a/core/api/server/middleware_test.go
+++ b/core/api/server/middleware_test.go
@@ -19,7 +19,7 @@ import (
)
func newFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
accountService := mock_account.NewMockService(t)
server := NewServer(accountService, mwMock)
diff --git a/core/api/server/router.go b/core/api/server/router.go
index bc04565fd..3cb89298f 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -7,9 +7,9 @@ import (
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
_ "github.com/anyproto/anytype-heart/core/api/docs"
- "github.com/anyproto/anytype-heart/core/anytype/account"
"github.com/anyproto/anytype-heart/core/api/internal/auth"
"github.com/anyproto/anytype-heart/core/api/internal/export"
"github.com/anyproto/anytype-heart/core/api/internal/list"
@@ -17,7 +17,6 @@ import (
"github.com/anyproto/anytype-heart/core/api/internal/search"
"github.com/anyproto/anytype-heart/core/api/internal/space"
"github.com/anyproto/anytype-heart/core/api/pagination"
- "github.com/anyproto/anytype-heart/pb/service"
)
const (
@@ -29,7 +28,7 @@ const (
)
// NewRouter builds and returns a *gin.Engine with all routes configured.
-func (s *Server) NewRouter(accountService account.Service, mw service.ClientCommandsServer) *gin.Engine {
+func (s *Server) NewRouter(accountService apicore.AccountInfo, mw apicore.ClientCommands) *gin.Engine {
debug := os.Getenv("ANYTYPE_API_DEBUG") == "1"
if !debug {
gin.SetMode(gin.ReleaseMode)
diff --git a/core/api/server/server.go b/core/api/server/server.go
index f38dc6c7e..0e9683c39 100644
--- a/core/api/server/server.go
+++ b/core/api/server/server.go
@@ -5,14 +5,13 @@ import (
"github.com/gin-gonic/gin"
- "github.com/anyproto/anytype-heart/core/anytype/account"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/internal/auth"
"github.com/anyproto/anytype-heart/core/api/internal/export"
"github.com/anyproto/anytype-heart/core/api/internal/list"
"github.com/anyproto/anytype-heart/core/api/internal/object"
"github.com/anyproto/anytype-heart/core/api/internal/search"
"github.com/anyproto/anytype-heart/core/api/internal/space"
- "github.com/anyproto/anytype-heart/pb/service"
)
// Server wraps the HTTP server and service logic.
@@ -31,7 +30,7 @@ type Server struct {
}
// NewServer constructs a new Server with default config and sets up the routes.
-func NewServer(accountService account.Service, mw service.ClientCommandsServer) *Server {
+func NewServer(accountService apicore.AccountInfo, mw apicore.ClientCommands) *Server {
s := &Server{
authService: auth.NewService(mw),
exportService: export.NewService(mw),
diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go
index a1f880d1d..ef56a56b5 100644
--- a/core/api/server/server_test.go
+++ b/core/api/server/server_test.go
@@ -13,11 +13,11 @@ import (
type fixture struct {
*Server
accountService account.Service
- mwMock *mock_service.MockClientCommandsServer
+ mwMock *mock_apicore.MockClientCommands
}
func newServerFixture(t *testing.T) *fixture {
- mwMock := mock_service.NewMockClientCommandsServer(t)
+ mwMock := mock_apicore.NewMockClientCommands(t)
accountService := mock_account.NewMockService(t)
server := NewServer(accountService, mwMock)
diff --git a/core/api/service.go b/core/api/service.go
index 4d98e334d..eb9b0abc5 100644
--- a/core/api/service.go
+++ b/core/api/service.go
@@ -12,8 +12,8 @@ import (
"github.com/anyproto/anytype-heart/core/anytype/account"
"github.com/anyproto/anytype-heart/core/anytype/config"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/server"
- "github.com/anyproto/anytype-heart/pb/service"
)
const (
@@ -22,7 +22,7 @@ const (
)
var (
- mwSrv service.ClientCommandsServer
+ mwSrv apicore.ClientCommands
)
type Service interface {
@@ -33,8 +33,8 @@ type Service interface {
type apiService struct {
srv *server.Server
httpSrv *http.Server
- mw service.ClientCommandsServer
- accountService account.Service
+ mw apicore.ClientCommands
+ accountService apicore.AccountInfo
listenAddr string
lock sync.Mutex
}
@@ -130,6 +130,6 @@ func (s *apiService) ReassignAddress(ctx context.Context, listenAddr string) (er
return nil
}
-func SetMiddlewareParams(mw service.ClientCommandsServer) {
+func SetMiddlewareParams(mw apicore.ClientCommands) {
mwSrv = mw
}
diff --git a/core/api/util/util.go b/core/api/util/util.go
index d6460c243..5d13a8074 100644
--- a/core/api/util/util.go
+++ b/core/api/util/util.go
@@ -5,8 +5,8 @@ import (
"errors"
"fmt"
+ "github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
@@ -81,7 +81,7 @@ func GetIcon(accountInfo *model.AccountInfo, iconEmoji string, iconImage string,
}
// ResolveUniqueKeyToTypeId resolves the unique key to the type's ID
-func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, uniqueKey string) (typeId string, err error) {
+func ResolveUniqueKeyToTypeId(mw apicore.ClientCommands, spaceId string, uniqueKey string) (typeId string, err error) {
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
@@ -108,7 +108,7 @@ func ResolveUniqueKeyToTypeId(mw service.ClientCommandsServer, spaceId string, u
}
// ResolveIdtoUniqueKey resolves the type's ID to the unique key
-func ResolveIdtoUniqueKey(mw service.ClientCommandsServer, spaceId string, typeId string) (uniqueKey string, err error) {
+func ResolveIdtoUniqueKey(mw apicore.ClientCommands, spaceId string, typeId string) (uniqueKey string, err error) {
resp := mw.ObjectShow(context.Background(), &pb.RpcObjectShowRequest{
SpaceId: spaceId,
ObjectId: typeId,
@@ -122,7 +122,7 @@ func ResolveIdtoUniqueKey(mw service.ClientCommandsServer, spaceId string, typeI
}
// ResolveRelationKeyToPropertyName resolves the property key to the property's name
-func ResolveRelationKeyToPropertyName(mw service.ClientCommandsServer, spaceId string, relationKey string) (property string, err error) {
+func ResolveRelationKeyToPropertyName(mw apicore.ClientCommands, spaceId string, relationKey string) (property string, err error) {
resp := mw.ObjectSearch(context.Background(), &pb.RpcObjectSearchRequest{
SpaceId: spaceId,
Filters: []*model.BlockContentDataviewFilter{
diff --git a/pb/service/mock_service/mock_ClientCommandsServer.go b/pb/service/mock_service/mock_ClientCommandsServer.go
deleted file mode 100644
index a4db01e73..000000000
--- a/pb/service/mock_service/mock_ClientCommandsServer.go
+++ /dev/null
@@ -1,14283 +0,0 @@
-// Code generated by mockery. DO NOT EDIT.
-
-package mock_service
-
-import (
- context "context"
-
- pb "github.com/anyproto/anytype-heart/pb"
- mock "github.com/stretchr/testify/mock"
-
- service "github.com/anyproto/anytype-heart/pb/service"
-)
-
-// MockClientCommandsServer is an autogenerated mock type for the ClientCommandsServer type
-type MockClientCommandsServer struct {
- mock.Mock
-}
-
-type MockClientCommandsServer_Expecter struct {
- mock *mock.Mock
-}
-
-func (_m *MockClientCommandsServer) EXPECT() *MockClientCommandsServer_Expecter {
- return &MockClientCommandsServer_Expecter{mock: &_m.Mock}
-}
-
-// AIAutofill provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AIAutofill(_a0 context.Context, _a1 *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AIAutofill")
- }
-
- var r0 *pb.RpcAIAutofillResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAIAutofillResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AIAutofill_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AIAutofill'
-type MockClientCommandsServer_AIAutofill_Call struct {
- *mock.Call
-}
-
-// AIAutofill is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAIAutofillRequest
-func (_e *MockClientCommandsServer_Expecter) AIAutofill(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AIAutofill_Call {
- return &MockClientCommandsServer_AIAutofill_Call{Call: _e.mock.On("AIAutofill", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AIAutofill_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAIAutofillRequest)) *MockClientCommandsServer_AIAutofill_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAIAutofillRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIAutofill_Call) Return(_a0 *pb.RpcAIAutofillResponse) *MockClientCommandsServer_AIAutofill_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIAutofill_Call) RunAndReturn(run func(context.Context, *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse) *MockClientCommandsServer_AIAutofill_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AIListSummary provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AIListSummary(_a0 context.Context, _a1 *pb.RpcAIListSummaryRequest) *pb.RpcAIListSummaryResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AIListSummary")
- }
-
- var r0 *pb.RpcAIListSummaryResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAIListSummaryRequest) *pb.RpcAIListSummaryResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAIListSummaryResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AIListSummary_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AIListSummary'
-type MockClientCommandsServer_AIListSummary_Call struct {
- *mock.Call
-}
-
-// AIListSummary is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAIListSummaryRequest
-func (_e *MockClientCommandsServer_Expecter) AIListSummary(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AIListSummary_Call {
- return &MockClientCommandsServer_AIListSummary_Call{Call: _e.mock.On("AIListSummary", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AIListSummary_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAIListSummaryRequest)) *MockClientCommandsServer_AIListSummary_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAIListSummaryRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIListSummary_Call) Return(_a0 *pb.RpcAIListSummaryResponse) *MockClientCommandsServer_AIListSummary_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIListSummary_Call) RunAndReturn(run func(context.Context, *pb.RpcAIListSummaryRequest) *pb.RpcAIListSummaryResponse) *MockClientCommandsServer_AIListSummary_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AIObjectCreateFromUrl provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AIObjectCreateFromUrl(_a0 context.Context, _a1 *pb.RpcAIObjectCreateFromUrlRequest) *pb.RpcAIObjectCreateFromUrlResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AIObjectCreateFromUrl")
- }
-
- var r0 *pb.RpcAIObjectCreateFromUrlResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAIObjectCreateFromUrlRequest) *pb.RpcAIObjectCreateFromUrlResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAIObjectCreateFromUrlResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AIObjectCreateFromUrl_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AIObjectCreateFromUrl'
-type MockClientCommandsServer_AIObjectCreateFromUrl_Call struct {
- *mock.Call
-}
-
-// AIObjectCreateFromUrl is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAIObjectCreateFromUrlRequest
-func (_e *MockClientCommandsServer_Expecter) AIObjectCreateFromUrl(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AIObjectCreateFromUrl_Call {
- return &MockClientCommandsServer_AIObjectCreateFromUrl_Call{Call: _e.mock.On("AIObjectCreateFromUrl", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AIObjectCreateFromUrl_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAIObjectCreateFromUrlRequest)) *MockClientCommandsServer_AIObjectCreateFromUrl_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAIObjectCreateFromUrlRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIObjectCreateFromUrl_Call) Return(_a0 *pb.RpcAIObjectCreateFromUrlResponse) *MockClientCommandsServer_AIObjectCreateFromUrl_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIObjectCreateFromUrl_Call) RunAndReturn(run func(context.Context, *pb.RpcAIObjectCreateFromUrlRequest) *pb.RpcAIObjectCreateFromUrlResponse) *MockClientCommandsServer_AIObjectCreateFromUrl_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AIWritingTools provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AIWritingTools(_a0 context.Context, _a1 *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AIWritingTools")
- }
-
- var r0 *pb.RpcAIWritingToolsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAIWritingToolsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AIWritingTools_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AIWritingTools'
-type MockClientCommandsServer_AIWritingTools_Call struct {
- *mock.Call
-}
-
-// AIWritingTools is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAIWritingToolsRequest
-func (_e *MockClientCommandsServer_Expecter) AIWritingTools(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AIWritingTools_Call {
- return &MockClientCommandsServer_AIWritingTools_Call{Call: _e.mock.On("AIWritingTools", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AIWritingTools_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAIWritingToolsRequest)) *MockClientCommandsServer_AIWritingTools_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAIWritingToolsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIWritingTools_Call) Return(_a0 *pb.RpcAIWritingToolsResponse) *MockClientCommandsServer_AIWritingTools_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AIWritingTools_Call) RunAndReturn(run func(context.Context, *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse) *MockClientCommandsServer_AIWritingTools_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountChangeJsonApiAddr provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountChangeJsonApiAddr(_a0 context.Context, _a1 *pb.RpcAccountChangeJsonApiAddrRequest) *pb.RpcAccountChangeJsonApiAddrResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountChangeJsonApiAddr")
- }
-
- var r0 *pb.RpcAccountChangeJsonApiAddrResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountChangeJsonApiAddrRequest) *pb.RpcAccountChangeJsonApiAddrResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountChangeJsonApiAddrResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountChangeJsonApiAddr_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountChangeJsonApiAddr'
-type MockClientCommandsServer_AccountChangeJsonApiAddr_Call struct {
- *mock.Call
-}
-
-// AccountChangeJsonApiAddr is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountChangeJsonApiAddrRequest
-func (_e *MockClientCommandsServer_Expecter) AccountChangeJsonApiAddr(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountChangeJsonApiAddr_Call {
- return &MockClientCommandsServer_AccountChangeJsonApiAddr_Call{Call: _e.mock.On("AccountChangeJsonApiAddr", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountChangeJsonApiAddr_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountChangeJsonApiAddrRequest)) *MockClientCommandsServer_AccountChangeJsonApiAddr_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountChangeJsonApiAddrRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountChangeJsonApiAddr_Call) Return(_a0 *pb.RpcAccountChangeJsonApiAddrResponse) *MockClientCommandsServer_AccountChangeJsonApiAddr_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountChangeJsonApiAddr_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountChangeJsonApiAddrRequest) *pb.RpcAccountChangeJsonApiAddrResponse) *MockClientCommandsServer_AccountChangeJsonApiAddr_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountChangeNetworkConfigAndRestart provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountChangeNetworkConfigAndRestart(_a0 context.Context, _a1 *pb.RpcAccountChangeNetworkConfigAndRestartRequest) *pb.RpcAccountChangeNetworkConfigAndRestartResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountChangeNetworkConfigAndRestart")
- }
-
- var r0 *pb.RpcAccountChangeNetworkConfigAndRestartResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountChangeNetworkConfigAndRestartRequest) *pb.RpcAccountChangeNetworkConfigAndRestartResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountChangeNetworkConfigAndRestartResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountChangeNetworkConfigAndRestart'
-type MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call struct {
- *mock.Call
-}
-
-// AccountChangeNetworkConfigAndRestart is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountChangeNetworkConfigAndRestartRequest
-func (_e *MockClientCommandsServer_Expecter) AccountChangeNetworkConfigAndRestart(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call {
- return &MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call{Call: _e.mock.On("AccountChangeNetworkConfigAndRestart", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountChangeNetworkConfigAndRestartRequest)) *MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountChangeNetworkConfigAndRestartRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call) Return(_a0 *pb.RpcAccountChangeNetworkConfigAndRestartResponse) *MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountChangeNetworkConfigAndRestartRequest) *pb.RpcAccountChangeNetworkConfigAndRestartResponse) *MockClientCommandsServer_AccountChangeNetworkConfigAndRestart_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountConfigUpdate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountConfigUpdate(_a0 context.Context, _a1 *pb.RpcAccountConfigUpdateRequest) *pb.RpcAccountConfigUpdateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountConfigUpdate")
- }
-
- var r0 *pb.RpcAccountConfigUpdateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountConfigUpdateRequest) *pb.RpcAccountConfigUpdateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountConfigUpdateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountConfigUpdate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountConfigUpdate'
-type MockClientCommandsServer_AccountConfigUpdate_Call struct {
- *mock.Call
-}
-
-// AccountConfigUpdate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountConfigUpdateRequest
-func (_e *MockClientCommandsServer_Expecter) AccountConfigUpdate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountConfigUpdate_Call {
- return &MockClientCommandsServer_AccountConfigUpdate_Call{Call: _e.mock.On("AccountConfigUpdate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountConfigUpdate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountConfigUpdateRequest)) *MockClientCommandsServer_AccountConfigUpdate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountConfigUpdateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountConfigUpdate_Call) Return(_a0 *pb.RpcAccountConfigUpdateResponse) *MockClientCommandsServer_AccountConfigUpdate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountConfigUpdate_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountConfigUpdateRequest) *pb.RpcAccountConfigUpdateResponse) *MockClientCommandsServer_AccountConfigUpdate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountCreate(_a0 context.Context, _a1 *pb.RpcAccountCreateRequest) *pb.RpcAccountCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountCreate")
- }
-
- var r0 *pb.RpcAccountCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountCreateRequest) *pb.RpcAccountCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountCreate'
-type MockClientCommandsServer_AccountCreate_Call struct {
- *mock.Call
-}
-
-// AccountCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountCreateRequest
-func (_e *MockClientCommandsServer_Expecter) AccountCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountCreate_Call {
- return &MockClientCommandsServer_AccountCreate_Call{Call: _e.mock.On("AccountCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountCreateRequest)) *MockClientCommandsServer_AccountCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountCreate_Call) Return(_a0 *pb.RpcAccountCreateResponse) *MockClientCommandsServer_AccountCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountCreateRequest) *pb.RpcAccountCreateResponse) *MockClientCommandsServer_AccountCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountDelete(_a0 context.Context, _a1 *pb.RpcAccountDeleteRequest) *pb.RpcAccountDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountDelete")
- }
-
- var r0 *pb.RpcAccountDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountDeleteRequest) *pb.RpcAccountDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountDelete'
-type MockClientCommandsServer_AccountDelete_Call struct {
- *mock.Call
-}
-
-// AccountDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) AccountDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountDelete_Call {
- return &MockClientCommandsServer_AccountDelete_Call{Call: _e.mock.On("AccountDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountDeleteRequest)) *MockClientCommandsServer_AccountDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountDelete_Call) Return(_a0 *pb.RpcAccountDeleteResponse) *MockClientCommandsServer_AccountDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountDeleteRequest) *pb.RpcAccountDeleteResponse) *MockClientCommandsServer_AccountDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountEnableLocalNetworkSync provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountEnableLocalNetworkSync(_a0 context.Context, _a1 *pb.RpcAccountEnableLocalNetworkSyncRequest) *pb.RpcAccountEnableLocalNetworkSyncResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountEnableLocalNetworkSync")
- }
-
- var r0 *pb.RpcAccountEnableLocalNetworkSyncResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountEnableLocalNetworkSyncRequest) *pb.RpcAccountEnableLocalNetworkSyncResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountEnableLocalNetworkSyncResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountEnableLocalNetworkSync_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountEnableLocalNetworkSync'
-type MockClientCommandsServer_AccountEnableLocalNetworkSync_Call struct {
- *mock.Call
-}
-
-// AccountEnableLocalNetworkSync is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountEnableLocalNetworkSyncRequest
-func (_e *MockClientCommandsServer_Expecter) AccountEnableLocalNetworkSync(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountEnableLocalNetworkSync_Call {
- return &MockClientCommandsServer_AccountEnableLocalNetworkSync_Call{Call: _e.mock.On("AccountEnableLocalNetworkSync", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountEnableLocalNetworkSync_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountEnableLocalNetworkSyncRequest)) *MockClientCommandsServer_AccountEnableLocalNetworkSync_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountEnableLocalNetworkSyncRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountEnableLocalNetworkSync_Call) Return(_a0 *pb.RpcAccountEnableLocalNetworkSyncResponse) *MockClientCommandsServer_AccountEnableLocalNetworkSync_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountEnableLocalNetworkSync_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountEnableLocalNetworkSyncRequest) *pb.RpcAccountEnableLocalNetworkSyncResponse) *MockClientCommandsServer_AccountEnableLocalNetworkSync_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountLocalLinkNewChallenge provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountLocalLinkNewChallenge(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountLocalLinkNewChallenge")
- }
-
- var r0 *pb.RpcAccountLocalLinkNewChallengeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountLocalLinkNewChallengeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountLocalLinkNewChallenge_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountLocalLinkNewChallenge'
-type MockClientCommandsServer_AccountLocalLinkNewChallenge_Call struct {
- *mock.Call
-}
-
-// AccountLocalLinkNewChallenge is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountLocalLinkNewChallengeRequest
-func (_e *MockClientCommandsServer_Expecter) AccountLocalLinkNewChallenge(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountLocalLinkNewChallenge_Call {
- return &MockClientCommandsServer_AccountLocalLinkNewChallenge_Call{Call: _e.mock.On("AccountLocalLinkNewChallenge", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountLocalLinkNewChallenge_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkNewChallengeRequest)) *MockClientCommandsServer_AccountLocalLinkNewChallenge_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountLocalLinkNewChallengeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountLocalLinkNewChallenge_Call) Return(_a0 *pb.RpcAccountLocalLinkNewChallengeResponse) *MockClientCommandsServer_AccountLocalLinkNewChallenge_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountLocalLinkNewChallenge_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse) *MockClientCommandsServer_AccountLocalLinkNewChallenge_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountLocalLinkSolveChallenge provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountLocalLinkSolveChallenge(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountLocalLinkSolveChallenge")
- }
-
- var r0 *pb.RpcAccountLocalLinkSolveChallengeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountLocalLinkSolveChallengeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountLocalLinkSolveChallenge'
-type MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call struct {
- *mock.Call
-}
-
-// AccountLocalLinkSolveChallenge is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountLocalLinkSolveChallengeRequest
-func (_e *MockClientCommandsServer_Expecter) AccountLocalLinkSolveChallenge(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call {
- return &MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call{Call: _e.mock.On("AccountLocalLinkSolveChallenge", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountLocalLinkSolveChallengeRequest)) *MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountLocalLinkSolveChallengeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call) Return(_a0 *pb.RpcAccountLocalLinkSolveChallengeResponse) *MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountLocalLinkSolveChallengeRequest) *pb.RpcAccountLocalLinkSolveChallengeResponse) *MockClientCommandsServer_AccountLocalLinkSolveChallenge_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountMigrate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountMigrate(_a0 context.Context, _a1 *pb.RpcAccountMigrateRequest) *pb.RpcAccountMigrateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountMigrate")
- }
-
- var r0 *pb.RpcAccountMigrateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountMigrateRequest) *pb.RpcAccountMigrateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountMigrateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountMigrate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountMigrate'
-type MockClientCommandsServer_AccountMigrate_Call struct {
- *mock.Call
-}
-
-// AccountMigrate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountMigrateRequest
-func (_e *MockClientCommandsServer_Expecter) AccountMigrate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountMigrate_Call {
- return &MockClientCommandsServer_AccountMigrate_Call{Call: _e.mock.On("AccountMigrate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountMigrate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountMigrateRequest)) *MockClientCommandsServer_AccountMigrate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountMigrateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountMigrate_Call) Return(_a0 *pb.RpcAccountMigrateResponse) *MockClientCommandsServer_AccountMigrate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountMigrate_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountMigrateRequest) *pb.RpcAccountMigrateResponse) *MockClientCommandsServer_AccountMigrate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountMigrateCancel provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountMigrateCancel(_a0 context.Context, _a1 *pb.RpcAccountMigrateCancelRequest) *pb.RpcAccountMigrateCancelResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountMigrateCancel")
- }
-
- var r0 *pb.RpcAccountMigrateCancelResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountMigrateCancelRequest) *pb.RpcAccountMigrateCancelResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountMigrateCancelResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountMigrateCancel_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountMigrateCancel'
-type MockClientCommandsServer_AccountMigrateCancel_Call struct {
- *mock.Call
-}
-
-// AccountMigrateCancel is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountMigrateCancelRequest
-func (_e *MockClientCommandsServer_Expecter) AccountMigrateCancel(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountMigrateCancel_Call {
- return &MockClientCommandsServer_AccountMigrateCancel_Call{Call: _e.mock.On("AccountMigrateCancel", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountMigrateCancel_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountMigrateCancelRequest)) *MockClientCommandsServer_AccountMigrateCancel_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountMigrateCancelRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountMigrateCancel_Call) Return(_a0 *pb.RpcAccountMigrateCancelResponse) *MockClientCommandsServer_AccountMigrateCancel_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountMigrateCancel_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountMigrateCancelRequest) *pb.RpcAccountMigrateCancelResponse) *MockClientCommandsServer_AccountMigrateCancel_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountMove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountMove(_a0 context.Context, _a1 *pb.RpcAccountMoveRequest) *pb.RpcAccountMoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountMove")
- }
-
- var r0 *pb.RpcAccountMoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountMoveRequest) *pb.RpcAccountMoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountMoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountMove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountMove'
-type MockClientCommandsServer_AccountMove_Call struct {
- *mock.Call
-}
-
-// AccountMove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountMoveRequest
-func (_e *MockClientCommandsServer_Expecter) AccountMove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountMove_Call {
- return &MockClientCommandsServer_AccountMove_Call{Call: _e.mock.On("AccountMove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountMove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountMoveRequest)) *MockClientCommandsServer_AccountMove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountMoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountMove_Call) Return(_a0 *pb.RpcAccountMoveResponse) *MockClientCommandsServer_AccountMove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountMove_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountMoveRequest) *pb.RpcAccountMoveResponse) *MockClientCommandsServer_AccountMove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountRecover provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountRecover(_a0 context.Context, _a1 *pb.RpcAccountRecoverRequest) *pb.RpcAccountRecoverResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountRecover")
- }
-
- var r0 *pb.RpcAccountRecoverResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountRecoverRequest) *pb.RpcAccountRecoverResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountRecoverResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountRecover_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountRecover'
-type MockClientCommandsServer_AccountRecover_Call struct {
- *mock.Call
-}
-
-// AccountRecover is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountRecoverRequest
-func (_e *MockClientCommandsServer_Expecter) AccountRecover(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountRecover_Call {
- return &MockClientCommandsServer_AccountRecover_Call{Call: _e.mock.On("AccountRecover", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountRecover_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountRecoverRequest)) *MockClientCommandsServer_AccountRecover_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountRecoverRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountRecover_Call) Return(_a0 *pb.RpcAccountRecoverResponse) *MockClientCommandsServer_AccountRecover_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountRecover_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountRecoverRequest) *pb.RpcAccountRecoverResponse) *MockClientCommandsServer_AccountRecover_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountRecoverFromLegacyExport provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountRecoverFromLegacyExport(_a0 context.Context, _a1 *pb.RpcAccountRecoverFromLegacyExportRequest) *pb.RpcAccountRecoverFromLegacyExportResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountRecoverFromLegacyExport")
- }
-
- var r0 *pb.RpcAccountRecoverFromLegacyExportResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountRecoverFromLegacyExportRequest) *pb.RpcAccountRecoverFromLegacyExportResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountRecoverFromLegacyExportResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountRecoverFromLegacyExport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountRecoverFromLegacyExport'
-type MockClientCommandsServer_AccountRecoverFromLegacyExport_Call struct {
- *mock.Call
-}
-
-// AccountRecoverFromLegacyExport is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountRecoverFromLegacyExportRequest
-func (_e *MockClientCommandsServer_Expecter) AccountRecoverFromLegacyExport(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountRecoverFromLegacyExport_Call {
- return &MockClientCommandsServer_AccountRecoverFromLegacyExport_Call{Call: _e.mock.On("AccountRecoverFromLegacyExport", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountRecoverFromLegacyExport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountRecoverFromLegacyExportRequest)) *MockClientCommandsServer_AccountRecoverFromLegacyExport_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountRecoverFromLegacyExportRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountRecoverFromLegacyExport_Call) Return(_a0 *pb.RpcAccountRecoverFromLegacyExportResponse) *MockClientCommandsServer_AccountRecoverFromLegacyExport_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountRecoverFromLegacyExport_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountRecoverFromLegacyExportRequest) *pb.RpcAccountRecoverFromLegacyExportResponse) *MockClientCommandsServer_AccountRecoverFromLegacyExport_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountRevertDeletion provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountRevertDeletion(_a0 context.Context, _a1 *pb.RpcAccountRevertDeletionRequest) *pb.RpcAccountRevertDeletionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountRevertDeletion")
- }
-
- var r0 *pb.RpcAccountRevertDeletionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountRevertDeletionRequest) *pb.RpcAccountRevertDeletionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountRevertDeletionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountRevertDeletion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountRevertDeletion'
-type MockClientCommandsServer_AccountRevertDeletion_Call struct {
- *mock.Call
-}
-
-// AccountRevertDeletion is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountRevertDeletionRequest
-func (_e *MockClientCommandsServer_Expecter) AccountRevertDeletion(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountRevertDeletion_Call {
- return &MockClientCommandsServer_AccountRevertDeletion_Call{Call: _e.mock.On("AccountRevertDeletion", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountRevertDeletion_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountRevertDeletionRequest)) *MockClientCommandsServer_AccountRevertDeletion_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountRevertDeletionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountRevertDeletion_Call) Return(_a0 *pb.RpcAccountRevertDeletionResponse) *MockClientCommandsServer_AccountRevertDeletion_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountRevertDeletion_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountRevertDeletionRequest) *pb.RpcAccountRevertDeletionResponse) *MockClientCommandsServer_AccountRevertDeletion_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountSelect provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountSelect(_a0 context.Context, _a1 *pb.RpcAccountSelectRequest) *pb.RpcAccountSelectResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountSelect")
- }
-
- var r0 *pb.RpcAccountSelectResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountSelectRequest) *pb.RpcAccountSelectResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountSelectResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountSelect_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountSelect'
-type MockClientCommandsServer_AccountSelect_Call struct {
- *mock.Call
-}
-
-// AccountSelect is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountSelectRequest
-func (_e *MockClientCommandsServer_Expecter) AccountSelect(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountSelect_Call {
- return &MockClientCommandsServer_AccountSelect_Call{Call: _e.mock.On("AccountSelect", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountSelect_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountSelectRequest)) *MockClientCommandsServer_AccountSelect_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountSelectRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountSelect_Call) Return(_a0 *pb.RpcAccountSelectResponse) *MockClientCommandsServer_AccountSelect_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountSelect_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountSelectRequest) *pb.RpcAccountSelectResponse) *MockClientCommandsServer_AccountSelect_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AccountStop provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AccountStop(_a0 context.Context, _a1 *pb.RpcAccountStopRequest) *pb.RpcAccountStopResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AccountStop")
- }
-
- var r0 *pb.RpcAccountStopResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAccountStopRequest) *pb.RpcAccountStopResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAccountStopResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AccountStop_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AccountStop'
-type MockClientCommandsServer_AccountStop_Call struct {
- *mock.Call
-}
-
-// AccountStop is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAccountStopRequest
-func (_e *MockClientCommandsServer_Expecter) AccountStop(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AccountStop_Call {
- return &MockClientCommandsServer_AccountStop_Call{Call: _e.mock.On("AccountStop", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AccountStop_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAccountStopRequest)) *MockClientCommandsServer_AccountStop_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAccountStopRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountStop_Call) Return(_a0 *pb.RpcAccountStopResponse) *MockClientCommandsServer_AccountStop_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AccountStop_Call) RunAndReturn(run func(context.Context, *pb.RpcAccountStopRequest) *pb.RpcAccountStopResponse) *MockClientCommandsServer_AccountStop_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AppGetVersion provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AppGetVersion(_a0 context.Context, _a1 *pb.RpcAppGetVersionRequest) *pb.RpcAppGetVersionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AppGetVersion")
- }
-
- var r0 *pb.RpcAppGetVersionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAppGetVersionRequest) *pb.RpcAppGetVersionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAppGetVersionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AppGetVersion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AppGetVersion'
-type MockClientCommandsServer_AppGetVersion_Call struct {
- *mock.Call
-}
-
-// AppGetVersion is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAppGetVersionRequest
-func (_e *MockClientCommandsServer_Expecter) AppGetVersion(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AppGetVersion_Call {
- return &MockClientCommandsServer_AppGetVersion_Call{Call: _e.mock.On("AppGetVersion", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AppGetVersion_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAppGetVersionRequest)) *MockClientCommandsServer_AppGetVersion_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAppGetVersionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AppGetVersion_Call) Return(_a0 *pb.RpcAppGetVersionResponse) *MockClientCommandsServer_AppGetVersion_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AppGetVersion_Call) RunAndReturn(run func(context.Context, *pb.RpcAppGetVersionRequest) *pb.RpcAppGetVersionResponse) *MockClientCommandsServer_AppGetVersion_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AppSetDeviceState provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AppSetDeviceState(_a0 context.Context, _a1 *pb.RpcAppSetDeviceStateRequest) *pb.RpcAppSetDeviceStateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AppSetDeviceState")
- }
-
- var r0 *pb.RpcAppSetDeviceStateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAppSetDeviceStateRequest) *pb.RpcAppSetDeviceStateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAppSetDeviceStateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AppSetDeviceState_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AppSetDeviceState'
-type MockClientCommandsServer_AppSetDeviceState_Call struct {
- *mock.Call
-}
-
-// AppSetDeviceState is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAppSetDeviceStateRequest
-func (_e *MockClientCommandsServer_Expecter) AppSetDeviceState(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AppSetDeviceState_Call {
- return &MockClientCommandsServer_AppSetDeviceState_Call{Call: _e.mock.On("AppSetDeviceState", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AppSetDeviceState_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAppSetDeviceStateRequest)) *MockClientCommandsServer_AppSetDeviceState_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAppSetDeviceStateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AppSetDeviceState_Call) Return(_a0 *pb.RpcAppSetDeviceStateResponse) *MockClientCommandsServer_AppSetDeviceState_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AppSetDeviceState_Call) RunAndReturn(run func(context.Context, *pb.RpcAppSetDeviceStateRequest) *pb.RpcAppSetDeviceStateResponse) *MockClientCommandsServer_AppSetDeviceState_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// AppShutdown provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) AppShutdown(_a0 context.Context, _a1 *pb.RpcAppShutdownRequest) *pb.RpcAppShutdownResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for AppShutdown")
- }
-
- var r0 *pb.RpcAppShutdownResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcAppShutdownRequest) *pb.RpcAppShutdownResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcAppShutdownResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_AppShutdown_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AppShutdown'
-type MockClientCommandsServer_AppShutdown_Call struct {
- *mock.Call
-}
-
-// AppShutdown is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcAppShutdownRequest
-func (_e *MockClientCommandsServer_Expecter) AppShutdown(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_AppShutdown_Call {
- return &MockClientCommandsServer_AppShutdown_Call{Call: _e.mock.On("AppShutdown", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_AppShutdown_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcAppShutdownRequest)) *MockClientCommandsServer_AppShutdown_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcAppShutdownRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_AppShutdown_Call) Return(_a0 *pb.RpcAppShutdownResponse) *MockClientCommandsServer_AppShutdown_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_AppShutdown_Call) RunAndReturn(run func(context.Context, *pb.RpcAppShutdownRequest) *pb.RpcAppShutdownResponse) *MockClientCommandsServer_AppShutdown_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockBookmarkCreateAndFetch provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockBookmarkCreateAndFetch(_a0 context.Context, _a1 *pb.RpcBlockBookmarkCreateAndFetchRequest) *pb.RpcBlockBookmarkCreateAndFetchResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockBookmarkCreateAndFetch")
- }
-
- var r0 *pb.RpcBlockBookmarkCreateAndFetchResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockBookmarkCreateAndFetchRequest) *pb.RpcBlockBookmarkCreateAndFetchResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockBookmarkCreateAndFetchResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockBookmarkCreateAndFetch'
-type MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call struct {
- *mock.Call
-}
-
-// BlockBookmarkCreateAndFetch is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockBookmarkCreateAndFetchRequest
-func (_e *MockClientCommandsServer_Expecter) BlockBookmarkCreateAndFetch(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call {
- return &MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call{Call: _e.mock.On("BlockBookmarkCreateAndFetch", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockBookmarkCreateAndFetchRequest)) *MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockBookmarkCreateAndFetchRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call) Return(_a0 *pb.RpcBlockBookmarkCreateAndFetchResponse) *MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockBookmarkCreateAndFetchRequest) *pb.RpcBlockBookmarkCreateAndFetchResponse) *MockClientCommandsServer_BlockBookmarkCreateAndFetch_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockBookmarkFetch provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockBookmarkFetch(_a0 context.Context, _a1 *pb.RpcBlockBookmarkFetchRequest) *pb.RpcBlockBookmarkFetchResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockBookmarkFetch")
- }
-
- var r0 *pb.RpcBlockBookmarkFetchResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockBookmarkFetchRequest) *pb.RpcBlockBookmarkFetchResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockBookmarkFetchResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockBookmarkFetch_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockBookmarkFetch'
-type MockClientCommandsServer_BlockBookmarkFetch_Call struct {
- *mock.Call
-}
-
-// BlockBookmarkFetch is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockBookmarkFetchRequest
-func (_e *MockClientCommandsServer_Expecter) BlockBookmarkFetch(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockBookmarkFetch_Call {
- return &MockClientCommandsServer_BlockBookmarkFetch_Call{Call: _e.mock.On("BlockBookmarkFetch", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockBookmarkFetch_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockBookmarkFetchRequest)) *MockClientCommandsServer_BlockBookmarkFetch_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockBookmarkFetchRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockBookmarkFetch_Call) Return(_a0 *pb.RpcBlockBookmarkFetchResponse) *MockClientCommandsServer_BlockBookmarkFetch_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockBookmarkFetch_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockBookmarkFetchRequest) *pb.RpcBlockBookmarkFetchResponse) *MockClientCommandsServer_BlockBookmarkFetch_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockCopy provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockCopy(_a0 context.Context, _a1 *pb.RpcBlockCopyRequest) *pb.RpcBlockCopyResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockCopy")
- }
-
- var r0 *pb.RpcBlockCopyResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockCopyRequest) *pb.RpcBlockCopyResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockCopyResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockCopy_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockCopy'
-type MockClientCommandsServer_BlockCopy_Call struct {
- *mock.Call
-}
-
-// BlockCopy is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockCopyRequest
-func (_e *MockClientCommandsServer_Expecter) BlockCopy(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockCopy_Call {
- return &MockClientCommandsServer_BlockCopy_Call{Call: _e.mock.On("BlockCopy", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockCopy_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockCopyRequest)) *MockClientCommandsServer_BlockCopy_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockCopyRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCopy_Call) Return(_a0 *pb.RpcBlockCopyResponse) *MockClientCommandsServer_BlockCopy_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCopy_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockCopyRequest) *pb.RpcBlockCopyResponse) *MockClientCommandsServer_BlockCopy_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockCreate(_a0 context.Context, _a1 *pb.RpcBlockCreateRequest) *pb.RpcBlockCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockCreate")
- }
-
- var r0 *pb.RpcBlockCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockCreateRequest) *pb.RpcBlockCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockCreate'
-type MockClientCommandsServer_BlockCreate_Call struct {
- *mock.Call
-}
-
-// BlockCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockCreateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockCreate_Call {
- return &MockClientCommandsServer_BlockCreate_Call{Call: _e.mock.On("BlockCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockCreateRequest)) *MockClientCommandsServer_BlockCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCreate_Call) Return(_a0 *pb.RpcBlockCreateResponse) *MockClientCommandsServer_BlockCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockCreateRequest) *pb.RpcBlockCreateResponse) *MockClientCommandsServer_BlockCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockCreateWidget provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockCreateWidget(_a0 context.Context, _a1 *pb.RpcBlockCreateWidgetRequest) *pb.RpcBlockCreateWidgetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockCreateWidget")
- }
-
- var r0 *pb.RpcBlockCreateWidgetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockCreateWidgetRequest) *pb.RpcBlockCreateWidgetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockCreateWidgetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockCreateWidget_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockCreateWidget'
-type MockClientCommandsServer_BlockCreateWidget_Call struct {
- *mock.Call
-}
-
-// BlockCreateWidget is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockCreateWidgetRequest
-func (_e *MockClientCommandsServer_Expecter) BlockCreateWidget(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockCreateWidget_Call {
- return &MockClientCommandsServer_BlockCreateWidget_Call{Call: _e.mock.On("BlockCreateWidget", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockCreateWidget_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockCreateWidgetRequest)) *MockClientCommandsServer_BlockCreateWidget_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockCreateWidgetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCreateWidget_Call) Return(_a0 *pb.RpcBlockCreateWidgetResponse) *MockClientCommandsServer_BlockCreateWidget_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCreateWidget_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockCreateWidgetRequest) *pb.RpcBlockCreateWidgetResponse) *MockClientCommandsServer_BlockCreateWidget_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockCut provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockCut(_a0 context.Context, _a1 *pb.RpcBlockCutRequest) *pb.RpcBlockCutResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockCut")
- }
-
- var r0 *pb.RpcBlockCutResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockCutRequest) *pb.RpcBlockCutResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockCutResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockCut_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockCut'
-type MockClientCommandsServer_BlockCut_Call struct {
- *mock.Call
-}
-
-// BlockCut is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockCutRequest
-func (_e *MockClientCommandsServer_Expecter) BlockCut(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockCut_Call {
- return &MockClientCommandsServer_BlockCut_Call{Call: _e.mock.On("BlockCut", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockCut_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockCutRequest)) *MockClientCommandsServer_BlockCut_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockCutRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCut_Call) Return(_a0 *pb.RpcBlockCutResponse) *MockClientCommandsServer_BlockCut_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockCut_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockCutRequest) *pb.RpcBlockCutResponse) *MockClientCommandsServer_BlockCut_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewCreateFromExistingObject provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewCreateFromExistingObject(_a0 context.Context, _a1 *pb.RpcBlockDataviewCreateFromExistingObjectRequest) *pb.RpcBlockDataviewCreateFromExistingObjectResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewCreateFromExistingObject")
- }
-
- var r0 *pb.RpcBlockDataviewCreateFromExistingObjectResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewCreateFromExistingObjectRequest) *pb.RpcBlockDataviewCreateFromExistingObjectResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewCreateFromExistingObjectResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewCreateFromExistingObject'
-type MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call struct {
- *mock.Call
-}
-
-// BlockDataviewCreateFromExistingObject is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewCreateFromExistingObjectRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewCreateFromExistingObject(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call {
- return &MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call{Call: _e.mock.On("BlockDataviewCreateFromExistingObject", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewCreateFromExistingObjectRequest)) *MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewCreateFromExistingObjectRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call) Return(_a0 *pb.RpcBlockDataviewCreateFromExistingObjectResponse) *MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewCreateFromExistingObjectRequest) *pb.RpcBlockDataviewCreateFromExistingObjectResponse) *MockClientCommandsServer_BlockDataviewCreateFromExistingObject_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewFilterAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewFilterAdd(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterAddRequest) *pb.RpcBlockDataviewFilterAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewFilterAdd")
- }
-
- var r0 *pb.RpcBlockDataviewFilterAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewFilterAddRequest) *pb.RpcBlockDataviewFilterAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewFilterAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewFilterAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewFilterAdd'
-type MockClientCommandsServer_BlockDataviewFilterAdd_Call struct {
- *mock.Call
-}
-
-// BlockDataviewFilterAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewFilterAddRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewFilterAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewFilterAdd_Call {
- return &MockClientCommandsServer_BlockDataviewFilterAdd_Call{Call: _e.mock.On("BlockDataviewFilterAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterAddRequest)) *MockClientCommandsServer_BlockDataviewFilterAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewFilterAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterAdd_Call) Return(_a0 *pb.RpcBlockDataviewFilterAddResponse) *MockClientCommandsServer_BlockDataviewFilterAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewFilterAddRequest) *pb.RpcBlockDataviewFilterAddResponse) *MockClientCommandsServer_BlockDataviewFilterAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewFilterRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewFilterRemove(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterRemoveRequest) *pb.RpcBlockDataviewFilterRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewFilterRemove")
- }
-
- var r0 *pb.RpcBlockDataviewFilterRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewFilterRemoveRequest) *pb.RpcBlockDataviewFilterRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewFilterRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewFilterRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewFilterRemove'
-type MockClientCommandsServer_BlockDataviewFilterRemove_Call struct {
- *mock.Call
-}
-
-// BlockDataviewFilterRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewFilterRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewFilterRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewFilterRemove_Call {
- return &MockClientCommandsServer_BlockDataviewFilterRemove_Call{Call: _e.mock.On("BlockDataviewFilterRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterRemoveRequest)) *MockClientCommandsServer_BlockDataviewFilterRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewFilterRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterRemove_Call) Return(_a0 *pb.RpcBlockDataviewFilterRemoveResponse) *MockClientCommandsServer_BlockDataviewFilterRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewFilterRemoveRequest) *pb.RpcBlockDataviewFilterRemoveResponse) *MockClientCommandsServer_BlockDataviewFilterRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewFilterReplace provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewFilterReplace(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterReplaceRequest) *pb.RpcBlockDataviewFilterReplaceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewFilterReplace")
- }
-
- var r0 *pb.RpcBlockDataviewFilterReplaceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewFilterReplaceRequest) *pb.RpcBlockDataviewFilterReplaceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewFilterReplaceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewFilterReplace_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewFilterReplace'
-type MockClientCommandsServer_BlockDataviewFilterReplace_Call struct {
- *mock.Call
-}
-
-// BlockDataviewFilterReplace is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewFilterReplaceRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewFilterReplace(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewFilterReplace_Call {
- return &MockClientCommandsServer_BlockDataviewFilterReplace_Call{Call: _e.mock.On("BlockDataviewFilterReplace", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterReplace_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterReplaceRequest)) *MockClientCommandsServer_BlockDataviewFilterReplace_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewFilterReplaceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterReplace_Call) Return(_a0 *pb.RpcBlockDataviewFilterReplaceResponse) *MockClientCommandsServer_BlockDataviewFilterReplace_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterReplace_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewFilterReplaceRequest) *pb.RpcBlockDataviewFilterReplaceResponse) *MockClientCommandsServer_BlockDataviewFilterReplace_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewFilterSort provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewFilterSort(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterSortRequest) *pb.RpcBlockDataviewFilterSortResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewFilterSort")
- }
-
- var r0 *pb.RpcBlockDataviewFilterSortResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewFilterSortRequest) *pb.RpcBlockDataviewFilterSortResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewFilterSortResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewFilterSort_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewFilterSort'
-type MockClientCommandsServer_BlockDataviewFilterSort_Call struct {
- *mock.Call
-}
-
-// BlockDataviewFilterSort is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewFilterSortRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewFilterSort(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewFilterSort_Call {
- return &MockClientCommandsServer_BlockDataviewFilterSort_Call{Call: _e.mock.On("BlockDataviewFilterSort", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterSort_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewFilterSortRequest)) *MockClientCommandsServer_BlockDataviewFilterSort_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewFilterSortRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterSort_Call) Return(_a0 *pb.RpcBlockDataviewFilterSortResponse) *MockClientCommandsServer_BlockDataviewFilterSort_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewFilterSort_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewFilterSortRequest) *pb.RpcBlockDataviewFilterSortResponse) *MockClientCommandsServer_BlockDataviewFilterSort_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewGroupOrderUpdate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewGroupOrderUpdate(_a0 context.Context, _a1 *pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewGroupOrderUpdate")
- }
-
- var r0 *pb.RpcBlockDataviewGroupOrderUpdateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewGroupOrderUpdateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewGroupOrderUpdate'
-type MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call struct {
- *mock.Call
-}
-
-// BlockDataviewGroupOrderUpdate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewGroupOrderUpdateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewGroupOrderUpdate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call {
- return &MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call{Call: _e.mock.On("BlockDataviewGroupOrderUpdate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewGroupOrderUpdateRequest)) *MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewGroupOrderUpdateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call) Return(_a0 *pb.RpcBlockDataviewGroupOrderUpdateResponse) *MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse) *MockClientCommandsServer_BlockDataviewGroupOrderUpdate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewObjectOrderMove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewObjectOrderMove(_a0 context.Context, _a1 *pb.RpcBlockDataviewObjectOrderMoveRequest) *pb.RpcBlockDataviewObjectOrderMoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewObjectOrderMove")
- }
-
- var r0 *pb.RpcBlockDataviewObjectOrderMoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewObjectOrderMoveRequest) *pb.RpcBlockDataviewObjectOrderMoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewObjectOrderMoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewObjectOrderMove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewObjectOrderMove'
-type MockClientCommandsServer_BlockDataviewObjectOrderMove_Call struct {
- *mock.Call
-}
-
-// BlockDataviewObjectOrderMove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewObjectOrderMoveRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewObjectOrderMove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewObjectOrderMove_Call {
- return &MockClientCommandsServer_BlockDataviewObjectOrderMove_Call{Call: _e.mock.On("BlockDataviewObjectOrderMove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewObjectOrderMove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewObjectOrderMoveRequest)) *MockClientCommandsServer_BlockDataviewObjectOrderMove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewObjectOrderMoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewObjectOrderMove_Call) Return(_a0 *pb.RpcBlockDataviewObjectOrderMoveResponse) *MockClientCommandsServer_BlockDataviewObjectOrderMove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewObjectOrderMove_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewObjectOrderMoveRequest) *pb.RpcBlockDataviewObjectOrderMoveResponse) *MockClientCommandsServer_BlockDataviewObjectOrderMove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewObjectOrderUpdate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewObjectOrderUpdate(_a0 context.Context, _a1 *pb.RpcBlockDataviewObjectOrderUpdateRequest) *pb.RpcBlockDataviewObjectOrderUpdateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewObjectOrderUpdate")
- }
-
- var r0 *pb.RpcBlockDataviewObjectOrderUpdateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewObjectOrderUpdateRequest) *pb.RpcBlockDataviewObjectOrderUpdateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewObjectOrderUpdateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewObjectOrderUpdate'
-type MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call struct {
- *mock.Call
-}
-
-// BlockDataviewObjectOrderUpdate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewObjectOrderUpdateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewObjectOrderUpdate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call {
- return &MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call{Call: _e.mock.On("BlockDataviewObjectOrderUpdate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewObjectOrderUpdateRequest)) *MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewObjectOrderUpdateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call) Return(_a0 *pb.RpcBlockDataviewObjectOrderUpdateResponse) *MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewObjectOrderUpdateRequest) *pb.RpcBlockDataviewObjectOrderUpdateResponse) *MockClientCommandsServer_BlockDataviewObjectOrderUpdate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewRelationAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewRelationAdd(_a0 context.Context, _a1 *pb.RpcBlockDataviewRelationAddRequest) *pb.RpcBlockDataviewRelationAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewRelationAdd")
- }
-
- var r0 *pb.RpcBlockDataviewRelationAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewRelationAddRequest) *pb.RpcBlockDataviewRelationAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewRelationAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewRelationAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewRelationAdd'
-type MockClientCommandsServer_BlockDataviewRelationAdd_Call struct {
- *mock.Call
-}
-
-// BlockDataviewRelationAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewRelationAddRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewRelationAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewRelationAdd_Call {
- return &MockClientCommandsServer_BlockDataviewRelationAdd_Call{Call: _e.mock.On("BlockDataviewRelationAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewRelationAddRequest)) *MockClientCommandsServer_BlockDataviewRelationAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewRelationAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationAdd_Call) Return(_a0 *pb.RpcBlockDataviewRelationAddResponse) *MockClientCommandsServer_BlockDataviewRelationAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewRelationAddRequest) *pb.RpcBlockDataviewRelationAddResponse) *MockClientCommandsServer_BlockDataviewRelationAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewRelationDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewRelationDelete(_a0 context.Context, _a1 *pb.RpcBlockDataviewRelationDeleteRequest) *pb.RpcBlockDataviewRelationDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewRelationDelete")
- }
-
- var r0 *pb.RpcBlockDataviewRelationDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewRelationDeleteRequest) *pb.RpcBlockDataviewRelationDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewRelationDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewRelationDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewRelationDelete'
-type MockClientCommandsServer_BlockDataviewRelationDelete_Call struct {
- *mock.Call
-}
-
-// BlockDataviewRelationDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewRelationDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewRelationDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewRelationDelete_Call {
- return &MockClientCommandsServer_BlockDataviewRelationDelete_Call{Call: _e.mock.On("BlockDataviewRelationDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewRelationDeleteRequest)) *MockClientCommandsServer_BlockDataviewRelationDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewRelationDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationDelete_Call) Return(_a0 *pb.RpcBlockDataviewRelationDeleteResponse) *MockClientCommandsServer_BlockDataviewRelationDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewRelationDeleteRequest) *pb.RpcBlockDataviewRelationDeleteResponse) *MockClientCommandsServer_BlockDataviewRelationDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewRelationSet provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewRelationSet(_a0 context.Context, _a1 *pb.RpcBlockDataviewRelationSetRequest) *pb.RpcBlockDataviewRelationSetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewRelationSet")
- }
-
- var r0 *pb.RpcBlockDataviewRelationSetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewRelationSetRequest) *pb.RpcBlockDataviewRelationSetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewRelationSetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewRelationSet_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewRelationSet'
-type MockClientCommandsServer_BlockDataviewRelationSet_Call struct {
- *mock.Call
-}
-
-// BlockDataviewRelationSet is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewRelationSetRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewRelationSet(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewRelationSet_Call {
- return &MockClientCommandsServer_BlockDataviewRelationSet_Call{Call: _e.mock.On("BlockDataviewRelationSet", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationSet_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewRelationSetRequest)) *MockClientCommandsServer_BlockDataviewRelationSet_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewRelationSetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationSet_Call) Return(_a0 *pb.RpcBlockDataviewRelationSetResponse) *MockClientCommandsServer_BlockDataviewRelationSet_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewRelationSet_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewRelationSetRequest) *pb.RpcBlockDataviewRelationSetResponse) *MockClientCommandsServer_BlockDataviewRelationSet_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewSetSource provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewSetSource(_a0 context.Context, _a1 *pb.RpcBlockDataviewSetSourceRequest) *pb.RpcBlockDataviewSetSourceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewSetSource")
- }
-
- var r0 *pb.RpcBlockDataviewSetSourceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewSetSourceRequest) *pb.RpcBlockDataviewSetSourceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewSetSourceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewSetSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewSetSource'
-type MockClientCommandsServer_BlockDataviewSetSource_Call struct {
- *mock.Call
-}
-
-// BlockDataviewSetSource is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewSetSourceRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewSetSource(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewSetSource_Call {
- return &MockClientCommandsServer_BlockDataviewSetSource_Call{Call: _e.mock.On("BlockDataviewSetSource", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSetSource_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewSetSourceRequest)) *MockClientCommandsServer_BlockDataviewSetSource_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewSetSourceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSetSource_Call) Return(_a0 *pb.RpcBlockDataviewSetSourceResponse) *MockClientCommandsServer_BlockDataviewSetSource_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSetSource_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewSetSourceRequest) *pb.RpcBlockDataviewSetSourceResponse) *MockClientCommandsServer_BlockDataviewSetSource_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewSortAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewSortAdd(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortAddRequest) *pb.RpcBlockDataviewSortAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewSortAdd")
- }
-
- var r0 *pb.RpcBlockDataviewSortAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewSortAddRequest) *pb.RpcBlockDataviewSortAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewSortAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewSortAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewSortAdd'
-type MockClientCommandsServer_BlockDataviewSortAdd_Call struct {
- *mock.Call
-}
-
-// BlockDataviewSortAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewSortAddRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewSortAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewSortAdd_Call {
- return &MockClientCommandsServer_BlockDataviewSortAdd_Call{Call: _e.mock.On("BlockDataviewSortAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortAddRequest)) *MockClientCommandsServer_BlockDataviewSortAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewSortAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortAdd_Call) Return(_a0 *pb.RpcBlockDataviewSortAddResponse) *MockClientCommandsServer_BlockDataviewSortAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewSortAddRequest) *pb.RpcBlockDataviewSortAddResponse) *MockClientCommandsServer_BlockDataviewSortAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewSortRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewSortRemove(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortRemoveRequest) *pb.RpcBlockDataviewSortRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewSortRemove")
- }
-
- var r0 *pb.RpcBlockDataviewSortRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewSortRemoveRequest) *pb.RpcBlockDataviewSortRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewSortRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewSortRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewSortRemove'
-type MockClientCommandsServer_BlockDataviewSortRemove_Call struct {
- *mock.Call
-}
-
-// BlockDataviewSortRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewSortRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewSortRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewSortRemove_Call {
- return &MockClientCommandsServer_BlockDataviewSortRemove_Call{Call: _e.mock.On("BlockDataviewSortRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortRemoveRequest)) *MockClientCommandsServer_BlockDataviewSortRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewSortRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortRemove_Call) Return(_a0 *pb.RpcBlockDataviewSortRemoveResponse) *MockClientCommandsServer_BlockDataviewSortRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewSortRemoveRequest) *pb.RpcBlockDataviewSortRemoveResponse) *MockClientCommandsServer_BlockDataviewSortRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewSortReplace provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewSortReplace(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortReplaceRequest) *pb.RpcBlockDataviewSortReplaceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewSortReplace")
- }
-
- var r0 *pb.RpcBlockDataviewSortReplaceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewSortReplaceRequest) *pb.RpcBlockDataviewSortReplaceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewSortReplaceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewSortReplace_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewSortReplace'
-type MockClientCommandsServer_BlockDataviewSortReplace_Call struct {
- *mock.Call
-}
-
-// BlockDataviewSortReplace is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewSortReplaceRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewSortReplace(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewSortReplace_Call {
- return &MockClientCommandsServer_BlockDataviewSortReplace_Call{Call: _e.mock.On("BlockDataviewSortReplace", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortReplace_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortReplaceRequest)) *MockClientCommandsServer_BlockDataviewSortReplace_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewSortReplaceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortReplace_Call) Return(_a0 *pb.RpcBlockDataviewSortReplaceResponse) *MockClientCommandsServer_BlockDataviewSortReplace_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortReplace_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewSortReplaceRequest) *pb.RpcBlockDataviewSortReplaceResponse) *MockClientCommandsServer_BlockDataviewSortReplace_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewSortSort provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewSortSort(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortSSortRequest) *pb.RpcBlockDataviewSortSSortResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewSortSort")
- }
-
- var r0 *pb.RpcBlockDataviewSortSSortResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewSortSSortRequest) *pb.RpcBlockDataviewSortSSortResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewSortSSortResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewSortSort_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewSortSort'
-type MockClientCommandsServer_BlockDataviewSortSort_Call struct {
- *mock.Call
-}
-
-// BlockDataviewSortSort is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewSortSSortRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewSortSort(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewSortSort_Call {
- return &MockClientCommandsServer_BlockDataviewSortSort_Call{Call: _e.mock.On("BlockDataviewSortSort", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortSort_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewSortSSortRequest)) *MockClientCommandsServer_BlockDataviewSortSort_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewSortSSortRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortSort_Call) Return(_a0 *pb.RpcBlockDataviewSortSSortResponse) *MockClientCommandsServer_BlockDataviewSortSort_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewSortSort_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewSortSSortRequest) *pb.RpcBlockDataviewSortSSortResponse) *MockClientCommandsServer_BlockDataviewSortSort_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewCreate(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewCreateRequest) *pb.RpcBlockDataviewViewCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewCreate")
- }
-
- var r0 *pb.RpcBlockDataviewViewCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewCreateRequest) *pb.RpcBlockDataviewViewCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewCreate'
-type MockClientCommandsServer_BlockDataviewViewCreate_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewCreateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewCreate_Call {
- return &MockClientCommandsServer_BlockDataviewViewCreate_Call{Call: _e.mock.On("BlockDataviewViewCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewCreateRequest)) *MockClientCommandsServer_BlockDataviewViewCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewCreate_Call) Return(_a0 *pb.RpcBlockDataviewViewCreateResponse) *MockClientCommandsServer_BlockDataviewViewCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewCreateRequest) *pb.RpcBlockDataviewViewCreateResponse) *MockClientCommandsServer_BlockDataviewViewCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewDelete(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewDeleteRequest) *pb.RpcBlockDataviewViewDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewDelete")
- }
-
- var r0 *pb.RpcBlockDataviewViewDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewDeleteRequest) *pb.RpcBlockDataviewViewDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewDelete'
-type MockClientCommandsServer_BlockDataviewViewDelete_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewDelete_Call {
- return &MockClientCommandsServer_BlockDataviewViewDelete_Call{Call: _e.mock.On("BlockDataviewViewDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewDeleteRequest)) *MockClientCommandsServer_BlockDataviewViewDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewDelete_Call) Return(_a0 *pb.RpcBlockDataviewViewDeleteResponse) *MockClientCommandsServer_BlockDataviewViewDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewDeleteRequest) *pb.RpcBlockDataviewViewDeleteResponse) *MockClientCommandsServer_BlockDataviewViewDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewRelationAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewRelationAdd(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationAddRequest) *pb.RpcBlockDataviewViewRelationAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewRelationAdd")
- }
-
- var r0 *pb.RpcBlockDataviewViewRelationAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewRelationAddRequest) *pb.RpcBlockDataviewViewRelationAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewRelationAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewRelationAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewRelationAdd'
-type MockClientCommandsServer_BlockDataviewViewRelationAdd_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewRelationAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewRelationAddRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewRelationAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewRelationAdd_Call {
- return &MockClientCommandsServer_BlockDataviewViewRelationAdd_Call{Call: _e.mock.On("BlockDataviewViewRelationAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationAddRequest)) *MockClientCommandsServer_BlockDataviewViewRelationAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewRelationAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationAdd_Call) Return(_a0 *pb.RpcBlockDataviewViewRelationAddResponse) *MockClientCommandsServer_BlockDataviewViewRelationAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewRelationAddRequest) *pb.RpcBlockDataviewViewRelationAddResponse) *MockClientCommandsServer_BlockDataviewViewRelationAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewRelationRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewRelationRemove(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationRemoveRequest) *pb.RpcBlockDataviewViewRelationRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewRelationRemove")
- }
-
- var r0 *pb.RpcBlockDataviewViewRelationRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewRelationRemoveRequest) *pb.RpcBlockDataviewViewRelationRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewRelationRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewRelationRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewRelationRemove'
-type MockClientCommandsServer_BlockDataviewViewRelationRemove_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewRelationRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewRelationRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewRelationRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewRelationRemove_Call {
- return &MockClientCommandsServer_BlockDataviewViewRelationRemove_Call{Call: _e.mock.On("BlockDataviewViewRelationRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationRemoveRequest)) *MockClientCommandsServer_BlockDataviewViewRelationRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewRelationRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationRemove_Call) Return(_a0 *pb.RpcBlockDataviewViewRelationRemoveResponse) *MockClientCommandsServer_BlockDataviewViewRelationRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewRelationRemoveRequest) *pb.RpcBlockDataviewViewRelationRemoveResponse) *MockClientCommandsServer_BlockDataviewViewRelationRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewRelationReplace provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewRelationReplace(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationReplaceRequest) *pb.RpcBlockDataviewViewRelationReplaceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewRelationReplace")
- }
-
- var r0 *pb.RpcBlockDataviewViewRelationReplaceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewRelationReplaceRequest) *pb.RpcBlockDataviewViewRelationReplaceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewRelationReplaceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewRelationReplace_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewRelationReplace'
-type MockClientCommandsServer_BlockDataviewViewRelationReplace_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewRelationReplace is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewRelationReplaceRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewRelationReplace(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewRelationReplace_Call {
- return &MockClientCommandsServer_BlockDataviewViewRelationReplace_Call{Call: _e.mock.On("BlockDataviewViewRelationReplace", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationReplace_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationReplaceRequest)) *MockClientCommandsServer_BlockDataviewViewRelationReplace_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewRelationReplaceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationReplace_Call) Return(_a0 *pb.RpcBlockDataviewViewRelationReplaceResponse) *MockClientCommandsServer_BlockDataviewViewRelationReplace_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationReplace_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewRelationReplaceRequest) *pb.RpcBlockDataviewViewRelationReplaceResponse) *MockClientCommandsServer_BlockDataviewViewRelationReplace_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewRelationSort provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewRelationSort(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationSortRequest) *pb.RpcBlockDataviewViewRelationSortResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewRelationSort")
- }
-
- var r0 *pb.RpcBlockDataviewViewRelationSortResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewRelationSortRequest) *pb.RpcBlockDataviewViewRelationSortResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewRelationSortResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewRelationSort_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewRelationSort'
-type MockClientCommandsServer_BlockDataviewViewRelationSort_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewRelationSort is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewRelationSortRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewRelationSort(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewRelationSort_Call {
- return &MockClientCommandsServer_BlockDataviewViewRelationSort_Call{Call: _e.mock.On("BlockDataviewViewRelationSort", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationSort_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewRelationSortRequest)) *MockClientCommandsServer_BlockDataviewViewRelationSort_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewRelationSortRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationSort_Call) Return(_a0 *pb.RpcBlockDataviewViewRelationSortResponse) *MockClientCommandsServer_BlockDataviewViewRelationSort_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewRelationSort_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewRelationSortRequest) *pb.RpcBlockDataviewViewRelationSortResponse) *MockClientCommandsServer_BlockDataviewViewRelationSort_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewSetActive provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewSetActive(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewSetActiveRequest) *pb.RpcBlockDataviewViewSetActiveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewSetActive")
- }
-
- var r0 *pb.RpcBlockDataviewViewSetActiveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewSetActiveRequest) *pb.RpcBlockDataviewViewSetActiveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewSetActiveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewSetActive_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewSetActive'
-type MockClientCommandsServer_BlockDataviewViewSetActive_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewSetActive is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewSetActiveRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewSetActive(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewSetActive_Call {
- return &MockClientCommandsServer_BlockDataviewViewSetActive_Call{Call: _e.mock.On("BlockDataviewViewSetActive", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewSetActive_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewSetActiveRequest)) *MockClientCommandsServer_BlockDataviewViewSetActive_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewSetActiveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewSetActive_Call) Return(_a0 *pb.RpcBlockDataviewViewSetActiveResponse) *MockClientCommandsServer_BlockDataviewViewSetActive_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewSetActive_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewSetActiveRequest) *pb.RpcBlockDataviewViewSetActiveResponse) *MockClientCommandsServer_BlockDataviewViewSetActive_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewSetPosition provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewSetPosition(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewSetPositionRequest) *pb.RpcBlockDataviewViewSetPositionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewSetPosition")
- }
-
- var r0 *pb.RpcBlockDataviewViewSetPositionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewSetPositionRequest) *pb.RpcBlockDataviewViewSetPositionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewSetPositionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewSetPosition_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewSetPosition'
-type MockClientCommandsServer_BlockDataviewViewSetPosition_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewSetPosition is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewSetPositionRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewSetPosition(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewSetPosition_Call {
- return &MockClientCommandsServer_BlockDataviewViewSetPosition_Call{Call: _e.mock.On("BlockDataviewViewSetPosition", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewSetPosition_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewSetPositionRequest)) *MockClientCommandsServer_BlockDataviewViewSetPosition_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewSetPositionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewSetPosition_Call) Return(_a0 *pb.RpcBlockDataviewViewSetPositionResponse) *MockClientCommandsServer_BlockDataviewViewSetPosition_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewSetPosition_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewSetPositionRequest) *pb.RpcBlockDataviewViewSetPositionResponse) *MockClientCommandsServer_BlockDataviewViewSetPosition_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDataviewViewUpdate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDataviewViewUpdate(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewUpdateRequest) *pb.RpcBlockDataviewViewUpdateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDataviewViewUpdate")
- }
-
- var r0 *pb.RpcBlockDataviewViewUpdateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDataviewViewUpdateRequest) *pb.RpcBlockDataviewViewUpdateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDataviewViewUpdateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDataviewViewUpdate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDataviewViewUpdate'
-type MockClientCommandsServer_BlockDataviewViewUpdate_Call struct {
- *mock.Call
-}
-
-// BlockDataviewViewUpdate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDataviewViewUpdateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDataviewViewUpdate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDataviewViewUpdate_Call {
- return &MockClientCommandsServer_BlockDataviewViewUpdate_Call{Call: _e.mock.On("BlockDataviewViewUpdate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewUpdate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDataviewViewUpdateRequest)) *MockClientCommandsServer_BlockDataviewViewUpdate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDataviewViewUpdateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewUpdate_Call) Return(_a0 *pb.RpcBlockDataviewViewUpdateResponse) *MockClientCommandsServer_BlockDataviewViewUpdate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDataviewViewUpdate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDataviewViewUpdateRequest) *pb.RpcBlockDataviewViewUpdateResponse) *MockClientCommandsServer_BlockDataviewViewUpdate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockDivListSetStyle provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockDivListSetStyle(_a0 context.Context, _a1 *pb.RpcBlockDivListSetStyleRequest) *pb.RpcBlockDivListSetStyleResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockDivListSetStyle")
- }
-
- var r0 *pb.RpcBlockDivListSetStyleResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockDivListSetStyleRequest) *pb.RpcBlockDivListSetStyleResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockDivListSetStyleResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockDivListSetStyle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockDivListSetStyle'
-type MockClientCommandsServer_BlockDivListSetStyle_Call struct {
- *mock.Call
-}
-
-// BlockDivListSetStyle is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockDivListSetStyleRequest
-func (_e *MockClientCommandsServer_Expecter) BlockDivListSetStyle(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockDivListSetStyle_Call {
- return &MockClientCommandsServer_BlockDivListSetStyle_Call{Call: _e.mock.On("BlockDivListSetStyle", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockDivListSetStyle_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockDivListSetStyleRequest)) *MockClientCommandsServer_BlockDivListSetStyle_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockDivListSetStyleRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDivListSetStyle_Call) Return(_a0 *pb.RpcBlockDivListSetStyleResponse) *MockClientCommandsServer_BlockDivListSetStyle_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockDivListSetStyle_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockDivListSetStyleRequest) *pb.RpcBlockDivListSetStyleResponse) *MockClientCommandsServer_BlockDivListSetStyle_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockExport provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockExport(_a0 context.Context, _a1 *pb.RpcBlockExportRequest) *pb.RpcBlockExportResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockExport")
- }
-
- var r0 *pb.RpcBlockExportResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockExportRequest) *pb.RpcBlockExportResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockExportResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockExport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockExport'
-type MockClientCommandsServer_BlockExport_Call struct {
- *mock.Call
-}
-
-// BlockExport is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockExportRequest
-func (_e *MockClientCommandsServer_Expecter) BlockExport(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockExport_Call {
- return &MockClientCommandsServer_BlockExport_Call{Call: _e.mock.On("BlockExport", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockExport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockExportRequest)) *MockClientCommandsServer_BlockExport_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockExportRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockExport_Call) Return(_a0 *pb.RpcBlockExportResponse) *MockClientCommandsServer_BlockExport_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockExport_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockExportRequest) *pb.RpcBlockExportResponse) *MockClientCommandsServer_BlockExport_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockFileCreateAndUpload provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockFileCreateAndUpload(_a0 context.Context, _a1 *pb.RpcBlockFileCreateAndUploadRequest) *pb.RpcBlockFileCreateAndUploadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockFileCreateAndUpload")
- }
-
- var r0 *pb.RpcBlockFileCreateAndUploadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockFileCreateAndUploadRequest) *pb.RpcBlockFileCreateAndUploadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockFileCreateAndUploadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockFileCreateAndUpload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockFileCreateAndUpload'
-type MockClientCommandsServer_BlockFileCreateAndUpload_Call struct {
- *mock.Call
-}
-
-// BlockFileCreateAndUpload is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockFileCreateAndUploadRequest
-func (_e *MockClientCommandsServer_Expecter) BlockFileCreateAndUpload(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockFileCreateAndUpload_Call {
- return &MockClientCommandsServer_BlockFileCreateAndUpload_Call{Call: _e.mock.On("BlockFileCreateAndUpload", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockFileCreateAndUpload_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockFileCreateAndUploadRequest)) *MockClientCommandsServer_BlockFileCreateAndUpload_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockFileCreateAndUploadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileCreateAndUpload_Call) Return(_a0 *pb.RpcBlockFileCreateAndUploadResponse) *MockClientCommandsServer_BlockFileCreateAndUpload_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileCreateAndUpload_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockFileCreateAndUploadRequest) *pb.RpcBlockFileCreateAndUploadResponse) *MockClientCommandsServer_BlockFileCreateAndUpload_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockFileListSetStyle provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockFileListSetStyle(_a0 context.Context, _a1 *pb.RpcBlockFileListSetStyleRequest) *pb.RpcBlockFileListSetStyleResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockFileListSetStyle")
- }
-
- var r0 *pb.RpcBlockFileListSetStyleResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockFileListSetStyleRequest) *pb.RpcBlockFileListSetStyleResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockFileListSetStyleResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockFileListSetStyle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockFileListSetStyle'
-type MockClientCommandsServer_BlockFileListSetStyle_Call struct {
- *mock.Call
-}
-
-// BlockFileListSetStyle is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockFileListSetStyleRequest
-func (_e *MockClientCommandsServer_Expecter) BlockFileListSetStyle(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockFileListSetStyle_Call {
- return &MockClientCommandsServer_BlockFileListSetStyle_Call{Call: _e.mock.On("BlockFileListSetStyle", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockFileListSetStyle_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockFileListSetStyleRequest)) *MockClientCommandsServer_BlockFileListSetStyle_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockFileListSetStyleRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileListSetStyle_Call) Return(_a0 *pb.RpcBlockFileListSetStyleResponse) *MockClientCommandsServer_BlockFileListSetStyle_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileListSetStyle_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockFileListSetStyleRequest) *pb.RpcBlockFileListSetStyleResponse) *MockClientCommandsServer_BlockFileListSetStyle_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockFileSetName provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockFileSetName(_a0 context.Context, _a1 *pb.RpcBlockFileSetNameRequest) *pb.RpcBlockFileSetNameResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockFileSetName")
- }
-
- var r0 *pb.RpcBlockFileSetNameResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockFileSetNameRequest) *pb.RpcBlockFileSetNameResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockFileSetNameResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockFileSetName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockFileSetName'
-type MockClientCommandsServer_BlockFileSetName_Call struct {
- *mock.Call
-}
-
-// BlockFileSetName is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockFileSetNameRequest
-func (_e *MockClientCommandsServer_Expecter) BlockFileSetName(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockFileSetName_Call {
- return &MockClientCommandsServer_BlockFileSetName_Call{Call: _e.mock.On("BlockFileSetName", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockFileSetName_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockFileSetNameRequest)) *MockClientCommandsServer_BlockFileSetName_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockFileSetNameRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileSetName_Call) Return(_a0 *pb.RpcBlockFileSetNameResponse) *MockClientCommandsServer_BlockFileSetName_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileSetName_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockFileSetNameRequest) *pb.RpcBlockFileSetNameResponse) *MockClientCommandsServer_BlockFileSetName_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockFileSetTargetObjectId provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockFileSetTargetObjectId(_a0 context.Context, _a1 *pb.RpcBlockFileSetTargetObjectIdRequest) *pb.RpcBlockFileSetTargetObjectIdResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockFileSetTargetObjectId")
- }
-
- var r0 *pb.RpcBlockFileSetTargetObjectIdResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockFileSetTargetObjectIdRequest) *pb.RpcBlockFileSetTargetObjectIdResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockFileSetTargetObjectIdResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockFileSetTargetObjectId_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockFileSetTargetObjectId'
-type MockClientCommandsServer_BlockFileSetTargetObjectId_Call struct {
- *mock.Call
-}
-
-// BlockFileSetTargetObjectId is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockFileSetTargetObjectIdRequest
-func (_e *MockClientCommandsServer_Expecter) BlockFileSetTargetObjectId(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockFileSetTargetObjectId_Call {
- return &MockClientCommandsServer_BlockFileSetTargetObjectId_Call{Call: _e.mock.On("BlockFileSetTargetObjectId", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockFileSetTargetObjectId_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockFileSetTargetObjectIdRequest)) *MockClientCommandsServer_BlockFileSetTargetObjectId_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockFileSetTargetObjectIdRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileSetTargetObjectId_Call) Return(_a0 *pb.RpcBlockFileSetTargetObjectIdResponse) *MockClientCommandsServer_BlockFileSetTargetObjectId_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockFileSetTargetObjectId_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockFileSetTargetObjectIdRequest) *pb.RpcBlockFileSetTargetObjectIdResponse) *MockClientCommandsServer_BlockFileSetTargetObjectId_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockImageSetName provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockImageSetName(_a0 context.Context, _a1 *pb.RpcBlockImageSetNameRequest) *pb.RpcBlockImageSetNameResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockImageSetName")
- }
-
- var r0 *pb.RpcBlockImageSetNameResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockImageSetNameRequest) *pb.RpcBlockImageSetNameResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockImageSetNameResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockImageSetName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockImageSetName'
-type MockClientCommandsServer_BlockImageSetName_Call struct {
- *mock.Call
-}
-
-// BlockImageSetName is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockImageSetNameRequest
-func (_e *MockClientCommandsServer_Expecter) BlockImageSetName(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockImageSetName_Call {
- return &MockClientCommandsServer_BlockImageSetName_Call{Call: _e.mock.On("BlockImageSetName", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockImageSetName_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockImageSetNameRequest)) *MockClientCommandsServer_BlockImageSetName_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockImageSetNameRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockImageSetName_Call) Return(_a0 *pb.RpcBlockImageSetNameResponse) *MockClientCommandsServer_BlockImageSetName_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockImageSetName_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockImageSetNameRequest) *pb.RpcBlockImageSetNameResponse) *MockClientCommandsServer_BlockImageSetName_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockLatexSetText provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockLatexSetText(_a0 context.Context, _a1 *pb.RpcBlockLatexSetTextRequest) *pb.RpcBlockLatexSetTextResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockLatexSetText")
- }
-
- var r0 *pb.RpcBlockLatexSetTextResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockLatexSetTextRequest) *pb.RpcBlockLatexSetTextResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockLatexSetTextResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockLatexSetText_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockLatexSetText'
-type MockClientCommandsServer_BlockLatexSetText_Call struct {
- *mock.Call
-}
-
-// BlockLatexSetText is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockLatexSetTextRequest
-func (_e *MockClientCommandsServer_Expecter) BlockLatexSetText(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockLatexSetText_Call {
- return &MockClientCommandsServer_BlockLatexSetText_Call{Call: _e.mock.On("BlockLatexSetText", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockLatexSetText_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockLatexSetTextRequest)) *MockClientCommandsServer_BlockLatexSetText_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockLatexSetTextRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockLatexSetText_Call) Return(_a0 *pb.RpcBlockLatexSetTextResponse) *MockClientCommandsServer_BlockLatexSetText_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockLatexSetText_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockLatexSetTextRequest) *pb.RpcBlockLatexSetTextResponse) *MockClientCommandsServer_BlockLatexSetText_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockLinkCreateWithObject provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockLinkCreateWithObject(_a0 context.Context, _a1 *pb.RpcBlockLinkCreateWithObjectRequest) *pb.RpcBlockLinkCreateWithObjectResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockLinkCreateWithObject")
- }
-
- var r0 *pb.RpcBlockLinkCreateWithObjectResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockLinkCreateWithObjectRequest) *pb.RpcBlockLinkCreateWithObjectResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockLinkCreateWithObjectResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockLinkCreateWithObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockLinkCreateWithObject'
-type MockClientCommandsServer_BlockLinkCreateWithObject_Call struct {
- *mock.Call
-}
-
-// BlockLinkCreateWithObject is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockLinkCreateWithObjectRequest
-func (_e *MockClientCommandsServer_Expecter) BlockLinkCreateWithObject(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockLinkCreateWithObject_Call {
- return &MockClientCommandsServer_BlockLinkCreateWithObject_Call{Call: _e.mock.On("BlockLinkCreateWithObject", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockLinkCreateWithObject_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockLinkCreateWithObjectRequest)) *MockClientCommandsServer_BlockLinkCreateWithObject_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockLinkCreateWithObjectRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockLinkCreateWithObject_Call) Return(_a0 *pb.RpcBlockLinkCreateWithObjectResponse) *MockClientCommandsServer_BlockLinkCreateWithObject_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockLinkCreateWithObject_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockLinkCreateWithObjectRequest) *pb.RpcBlockLinkCreateWithObjectResponse) *MockClientCommandsServer_BlockLinkCreateWithObject_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockLinkListSetAppearance provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockLinkListSetAppearance(_a0 context.Context, _a1 *pb.RpcBlockLinkListSetAppearanceRequest) *pb.RpcBlockLinkListSetAppearanceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockLinkListSetAppearance")
- }
-
- var r0 *pb.RpcBlockLinkListSetAppearanceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockLinkListSetAppearanceRequest) *pb.RpcBlockLinkListSetAppearanceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockLinkListSetAppearanceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockLinkListSetAppearance_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockLinkListSetAppearance'
-type MockClientCommandsServer_BlockLinkListSetAppearance_Call struct {
- *mock.Call
-}
-
-// BlockLinkListSetAppearance is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockLinkListSetAppearanceRequest
-func (_e *MockClientCommandsServer_Expecter) BlockLinkListSetAppearance(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockLinkListSetAppearance_Call {
- return &MockClientCommandsServer_BlockLinkListSetAppearance_Call{Call: _e.mock.On("BlockLinkListSetAppearance", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockLinkListSetAppearance_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockLinkListSetAppearanceRequest)) *MockClientCommandsServer_BlockLinkListSetAppearance_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockLinkListSetAppearanceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockLinkListSetAppearance_Call) Return(_a0 *pb.RpcBlockLinkListSetAppearanceResponse) *MockClientCommandsServer_BlockLinkListSetAppearance_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockLinkListSetAppearance_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockLinkListSetAppearanceRequest) *pb.RpcBlockLinkListSetAppearanceResponse) *MockClientCommandsServer_BlockLinkListSetAppearance_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListConvertToObjects provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListConvertToObjects(_a0 context.Context, _a1 *pb.RpcBlockListConvertToObjectsRequest) *pb.RpcBlockListConvertToObjectsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListConvertToObjects")
- }
-
- var r0 *pb.RpcBlockListConvertToObjectsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListConvertToObjectsRequest) *pb.RpcBlockListConvertToObjectsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListConvertToObjectsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListConvertToObjects_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListConvertToObjects'
-type MockClientCommandsServer_BlockListConvertToObjects_Call struct {
- *mock.Call
-}
-
-// BlockListConvertToObjects is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListConvertToObjectsRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListConvertToObjects(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListConvertToObjects_Call {
- return &MockClientCommandsServer_BlockListConvertToObjects_Call{Call: _e.mock.On("BlockListConvertToObjects", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListConvertToObjects_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListConvertToObjectsRequest)) *MockClientCommandsServer_BlockListConvertToObjects_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListConvertToObjectsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListConvertToObjects_Call) Return(_a0 *pb.RpcBlockListConvertToObjectsResponse) *MockClientCommandsServer_BlockListConvertToObjects_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListConvertToObjects_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListConvertToObjectsRequest) *pb.RpcBlockListConvertToObjectsResponse) *MockClientCommandsServer_BlockListConvertToObjects_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListDelete(_a0 context.Context, _a1 *pb.RpcBlockListDeleteRequest) *pb.RpcBlockListDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListDelete")
- }
-
- var r0 *pb.RpcBlockListDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListDeleteRequest) *pb.RpcBlockListDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListDelete'
-type MockClientCommandsServer_BlockListDelete_Call struct {
- *mock.Call
-}
-
-// BlockListDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListDelete_Call {
- return &MockClientCommandsServer_BlockListDelete_Call{Call: _e.mock.On("BlockListDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListDeleteRequest)) *MockClientCommandsServer_BlockListDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListDelete_Call) Return(_a0 *pb.RpcBlockListDeleteResponse) *MockClientCommandsServer_BlockListDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListDeleteRequest) *pb.RpcBlockListDeleteResponse) *MockClientCommandsServer_BlockListDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListDuplicate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListDuplicate(_a0 context.Context, _a1 *pb.RpcBlockListDuplicateRequest) *pb.RpcBlockListDuplicateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListDuplicate")
- }
-
- var r0 *pb.RpcBlockListDuplicateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListDuplicateRequest) *pb.RpcBlockListDuplicateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListDuplicateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListDuplicate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListDuplicate'
-type MockClientCommandsServer_BlockListDuplicate_Call struct {
- *mock.Call
-}
-
-// BlockListDuplicate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListDuplicateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListDuplicate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListDuplicate_Call {
- return &MockClientCommandsServer_BlockListDuplicate_Call{Call: _e.mock.On("BlockListDuplicate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListDuplicate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListDuplicateRequest)) *MockClientCommandsServer_BlockListDuplicate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListDuplicateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListDuplicate_Call) Return(_a0 *pb.RpcBlockListDuplicateResponse) *MockClientCommandsServer_BlockListDuplicate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListDuplicate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListDuplicateRequest) *pb.RpcBlockListDuplicateResponse) *MockClientCommandsServer_BlockListDuplicate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListMoveToExistingObject provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListMoveToExistingObject(_a0 context.Context, _a1 *pb.RpcBlockListMoveToExistingObjectRequest) *pb.RpcBlockListMoveToExistingObjectResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListMoveToExistingObject")
- }
-
- var r0 *pb.RpcBlockListMoveToExistingObjectResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListMoveToExistingObjectRequest) *pb.RpcBlockListMoveToExistingObjectResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListMoveToExistingObjectResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListMoveToExistingObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListMoveToExistingObject'
-type MockClientCommandsServer_BlockListMoveToExistingObject_Call struct {
- *mock.Call
-}
-
-// BlockListMoveToExistingObject is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListMoveToExistingObjectRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListMoveToExistingObject(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListMoveToExistingObject_Call {
- return &MockClientCommandsServer_BlockListMoveToExistingObject_Call{Call: _e.mock.On("BlockListMoveToExistingObject", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListMoveToExistingObject_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListMoveToExistingObjectRequest)) *MockClientCommandsServer_BlockListMoveToExistingObject_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListMoveToExistingObjectRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListMoveToExistingObject_Call) Return(_a0 *pb.RpcBlockListMoveToExistingObjectResponse) *MockClientCommandsServer_BlockListMoveToExistingObject_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListMoveToExistingObject_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListMoveToExistingObjectRequest) *pb.RpcBlockListMoveToExistingObjectResponse) *MockClientCommandsServer_BlockListMoveToExistingObject_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListMoveToNewObject provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListMoveToNewObject(_a0 context.Context, _a1 *pb.RpcBlockListMoveToNewObjectRequest) *pb.RpcBlockListMoveToNewObjectResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListMoveToNewObject")
- }
-
- var r0 *pb.RpcBlockListMoveToNewObjectResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListMoveToNewObjectRequest) *pb.RpcBlockListMoveToNewObjectResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListMoveToNewObjectResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListMoveToNewObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListMoveToNewObject'
-type MockClientCommandsServer_BlockListMoveToNewObject_Call struct {
- *mock.Call
-}
-
-// BlockListMoveToNewObject is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListMoveToNewObjectRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListMoveToNewObject(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListMoveToNewObject_Call {
- return &MockClientCommandsServer_BlockListMoveToNewObject_Call{Call: _e.mock.On("BlockListMoveToNewObject", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListMoveToNewObject_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListMoveToNewObjectRequest)) *MockClientCommandsServer_BlockListMoveToNewObject_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListMoveToNewObjectRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListMoveToNewObject_Call) Return(_a0 *pb.RpcBlockListMoveToNewObjectResponse) *MockClientCommandsServer_BlockListMoveToNewObject_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListMoveToNewObject_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListMoveToNewObjectRequest) *pb.RpcBlockListMoveToNewObjectResponse) *MockClientCommandsServer_BlockListMoveToNewObject_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListSetAlign provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListSetAlign(_a0 context.Context, _a1 *pb.RpcBlockListSetAlignRequest) *pb.RpcBlockListSetAlignResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListSetAlign")
- }
-
- var r0 *pb.RpcBlockListSetAlignResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListSetAlignRequest) *pb.RpcBlockListSetAlignResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListSetAlignResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListSetAlign_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListSetAlign'
-type MockClientCommandsServer_BlockListSetAlign_Call struct {
- *mock.Call
-}
-
-// BlockListSetAlign is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListSetAlignRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListSetAlign(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListSetAlign_Call {
- return &MockClientCommandsServer_BlockListSetAlign_Call{Call: _e.mock.On("BlockListSetAlign", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListSetAlign_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListSetAlignRequest)) *MockClientCommandsServer_BlockListSetAlign_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListSetAlignRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetAlign_Call) Return(_a0 *pb.RpcBlockListSetAlignResponse) *MockClientCommandsServer_BlockListSetAlign_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetAlign_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListSetAlignRequest) *pb.RpcBlockListSetAlignResponse) *MockClientCommandsServer_BlockListSetAlign_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListSetBackgroundColor provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListSetBackgroundColor(_a0 context.Context, _a1 *pb.RpcBlockListSetBackgroundColorRequest) *pb.RpcBlockListSetBackgroundColorResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListSetBackgroundColor")
- }
-
- var r0 *pb.RpcBlockListSetBackgroundColorResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListSetBackgroundColorRequest) *pb.RpcBlockListSetBackgroundColorResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListSetBackgroundColorResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListSetBackgroundColor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListSetBackgroundColor'
-type MockClientCommandsServer_BlockListSetBackgroundColor_Call struct {
- *mock.Call
-}
-
-// BlockListSetBackgroundColor is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListSetBackgroundColorRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListSetBackgroundColor(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListSetBackgroundColor_Call {
- return &MockClientCommandsServer_BlockListSetBackgroundColor_Call{Call: _e.mock.On("BlockListSetBackgroundColor", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListSetBackgroundColor_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListSetBackgroundColorRequest)) *MockClientCommandsServer_BlockListSetBackgroundColor_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListSetBackgroundColorRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetBackgroundColor_Call) Return(_a0 *pb.RpcBlockListSetBackgroundColorResponse) *MockClientCommandsServer_BlockListSetBackgroundColor_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetBackgroundColor_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListSetBackgroundColorRequest) *pb.RpcBlockListSetBackgroundColorResponse) *MockClientCommandsServer_BlockListSetBackgroundColor_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListSetFields provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListSetFields(_a0 context.Context, _a1 *pb.RpcBlockListSetFieldsRequest) *pb.RpcBlockListSetFieldsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListSetFields")
- }
-
- var r0 *pb.RpcBlockListSetFieldsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListSetFieldsRequest) *pb.RpcBlockListSetFieldsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListSetFieldsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListSetFields_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListSetFields'
-type MockClientCommandsServer_BlockListSetFields_Call struct {
- *mock.Call
-}
-
-// BlockListSetFields is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListSetFieldsRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListSetFields(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListSetFields_Call {
- return &MockClientCommandsServer_BlockListSetFields_Call{Call: _e.mock.On("BlockListSetFields", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListSetFields_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListSetFieldsRequest)) *MockClientCommandsServer_BlockListSetFields_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListSetFieldsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetFields_Call) Return(_a0 *pb.RpcBlockListSetFieldsResponse) *MockClientCommandsServer_BlockListSetFields_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetFields_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListSetFieldsRequest) *pb.RpcBlockListSetFieldsResponse) *MockClientCommandsServer_BlockListSetFields_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListSetVerticalAlign provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListSetVerticalAlign(_a0 context.Context, _a1 *pb.RpcBlockListSetVerticalAlignRequest) *pb.RpcBlockListSetVerticalAlignResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListSetVerticalAlign")
- }
-
- var r0 *pb.RpcBlockListSetVerticalAlignResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListSetVerticalAlignRequest) *pb.RpcBlockListSetVerticalAlignResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListSetVerticalAlignResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListSetVerticalAlign_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListSetVerticalAlign'
-type MockClientCommandsServer_BlockListSetVerticalAlign_Call struct {
- *mock.Call
-}
-
-// BlockListSetVerticalAlign is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListSetVerticalAlignRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListSetVerticalAlign(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListSetVerticalAlign_Call {
- return &MockClientCommandsServer_BlockListSetVerticalAlign_Call{Call: _e.mock.On("BlockListSetVerticalAlign", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListSetVerticalAlign_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListSetVerticalAlignRequest)) *MockClientCommandsServer_BlockListSetVerticalAlign_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListSetVerticalAlignRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetVerticalAlign_Call) Return(_a0 *pb.RpcBlockListSetVerticalAlignResponse) *MockClientCommandsServer_BlockListSetVerticalAlign_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListSetVerticalAlign_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListSetVerticalAlignRequest) *pb.RpcBlockListSetVerticalAlignResponse) *MockClientCommandsServer_BlockListSetVerticalAlign_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockListTurnInto provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockListTurnInto(_a0 context.Context, _a1 *pb.RpcBlockListTurnIntoRequest) *pb.RpcBlockListTurnIntoResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockListTurnInto")
- }
-
- var r0 *pb.RpcBlockListTurnIntoResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockListTurnIntoRequest) *pb.RpcBlockListTurnIntoResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockListTurnIntoResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockListTurnInto_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockListTurnInto'
-type MockClientCommandsServer_BlockListTurnInto_Call struct {
- *mock.Call
-}
-
-// BlockListTurnInto is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockListTurnIntoRequest
-func (_e *MockClientCommandsServer_Expecter) BlockListTurnInto(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockListTurnInto_Call {
- return &MockClientCommandsServer_BlockListTurnInto_Call{Call: _e.mock.On("BlockListTurnInto", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockListTurnInto_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockListTurnIntoRequest)) *MockClientCommandsServer_BlockListTurnInto_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockListTurnIntoRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListTurnInto_Call) Return(_a0 *pb.RpcBlockListTurnIntoResponse) *MockClientCommandsServer_BlockListTurnInto_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockListTurnInto_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockListTurnIntoRequest) *pb.RpcBlockListTurnIntoResponse) *MockClientCommandsServer_BlockListTurnInto_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockMerge provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockMerge(_a0 context.Context, _a1 *pb.RpcBlockMergeRequest) *pb.RpcBlockMergeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockMerge")
- }
-
- var r0 *pb.RpcBlockMergeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockMergeRequest) *pb.RpcBlockMergeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockMergeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockMerge_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockMerge'
-type MockClientCommandsServer_BlockMerge_Call struct {
- *mock.Call
-}
-
-// BlockMerge is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockMergeRequest
-func (_e *MockClientCommandsServer_Expecter) BlockMerge(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockMerge_Call {
- return &MockClientCommandsServer_BlockMerge_Call{Call: _e.mock.On("BlockMerge", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockMerge_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockMergeRequest)) *MockClientCommandsServer_BlockMerge_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockMergeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockMerge_Call) Return(_a0 *pb.RpcBlockMergeResponse) *MockClientCommandsServer_BlockMerge_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockMerge_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockMergeRequest) *pb.RpcBlockMergeResponse) *MockClientCommandsServer_BlockMerge_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockPaste provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockPaste(_a0 context.Context, _a1 *pb.RpcBlockPasteRequest) *pb.RpcBlockPasteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockPaste")
- }
-
- var r0 *pb.RpcBlockPasteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockPasteRequest) *pb.RpcBlockPasteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockPasteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockPaste_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockPaste'
-type MockClientCommandsServer_BlockPaste_Call struct {
- *mock.Call
-}
-
-// BlockPaste is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockPasteRequest
-func (_e *MockClientCommandsServer_Expecter) BlockPaste(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockPaste_Call {
- return &MockClientCommandsServer_BlockPaste_Call{Call: _e.mock.On("BlockPaste", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockPaste_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockPasteRequest)) *MockClientCommandsServer_BlockPaste_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockPasteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockPaste_Call) Return(_a0 *pb.RpcBlockPasteResponse) *MockClientCommandsServer_BlockPaste_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockPaste_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockPasteRequest) *pb.RpcBlockPasteResponse) *MockClientCommandsServer_BlockPaste_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockPreview provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockPreview(_a0 context.Context, _a1 *pb.RpcBlockPreviewRequest) *pb.RpcBlockPreviewResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockPreview")
- }
-
- var r0 *pb.RpcBlockPreviewResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockPreviewRequest) *pb.RpcBlockPreviewResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockPreviewResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockPreview_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockPreview'
-type MockClientCommandsServer_BlockPreview_Call struct {
- *mock.Call
-}
-
-// BlockPreview is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockPreviewRequest
-func (_e *MockClientCommandsServer_Expecter) BlockPreview(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockPreview_Call {
- return &MockClientCommandsServer_BlockPreview_Call{Call: _e.mock.On("BlockPreview", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockPreview_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockPreviewRequest)) *MockClientCommandsServer_BlockPreview_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockPreviewRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockPreview_Call) Return(_a0 *pb.RpcBlockPreviewResponse) *MockClientCommandsServer_BlockPreview_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockPreview_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockPreviewRequest) *pb.RpcBlockPreviewResponse) *MockClientCommandsServer_BlockPreview_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockRelationAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockRelationAdd(_a0 context.Context, _a1 *pb.RpcBlockRelationAddRequest) *pb.RpcBlockRelationAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockRelationAdd")
- }
-
- var r0 *pb.RpcBlockRelationAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockRelationAddRequest) *pb.RpcBlockRelationAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockRelationAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockRelationAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockRelationAdd'
-type MockClientCommandsServer_BlockRelationAdd_Call struct {
- *mock.Call
-}
-
-// BlockRelationAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockRelationAddRequest
-func (_e *MockClientCommandsServer_Expecter) BlockRelationAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockRelationAdd_Call {
- return &MockClientCommandsServer_BlockRelationAdd_Call{Call: _e.mock.On("BlockRelationAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockRelationAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockRelationAddRequest)) *MockClientCommandsServer_BlockRelationAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockRelationAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockRelationAdd_Call) Return(_a0 *pb.RpcBlockRelationAddResponse) *MockClientCommandsServer_BlockRelationAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockRelationAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockRelationAddRequest) *pb.RpcBlockRelationAddResponse) *MockClientCommandsServer_BlockRelationAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockRelationSetKey provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockRelationSetKey(_a0 context.Context, _a1 *pb.RpcBlockRelationSetKeyRequest) *pb.RpcBlockRelationSetKeyResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockRelationSetKey")
- }
-
- var r0 *pb.RpcBlockRelationSetKeyResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockRelationSetKeyRequest) *pb.RpcBlockRelationSetKeyResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockRelationSetKeyResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockRelationSetKey_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockRelationSetKey'
-type MockClientCommandsServer_BlockRelationSetKey_Call struct {
- *mock.Call
-}
-
-// BlockRelationSetKey is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockRelationSetKeyRequest
-func (_e *MockClientCommandsServer_Expecter) BlockRelationSetKey(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockRelationSetKey_Call {
- return &MockClientCommandsServer_BlockRelationSetKey_Call{Call: _e.mock.On("BlockRelationSetKey", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockRelationSetKey_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockRelationSetKeyRequest)) *MockClientCommandsServer_BlockRelationSetKey_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockRelationSetKeyRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockRelationSetKey_Call) Return(_a0 *pb.RpcBlockRelationSetKeyResponse) *MockClientCommandsServer_BlockRelationSetKey_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockRelationSetKey_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockRelationSetKeyRequest) *pb.RpcBlockRelationSetKeyResponse) *MockClientCommandsServer_BlockRelationSetKey_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockReplace provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockReplace(_a0 context.Context, _a1 *pb.RpcBlockReplaceRequest) *pb.RpcBlockReplaceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockReplace")
- }
-
- var r0 *pb.RpcBlockReplaceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockReplaceRequest) *pb.RpcBlockReplaceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockReplaceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockReplace_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockReplace'
-type MockClientCommandsServer_BlockReplace_Call struct {
- *mock.Call
-}
-
-// BlockReplace is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockReplaceRequest
-func (_e *MockClientCommandsServer_Expecter) BlockReplace(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockReplace_Call {
- return &MockClientCommandsServer_BlockReplace_Call{Call: _e.mock.On("BlockReplace", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockReplace_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockReplaceRequest)) *MockClientCommandsServer_BlockReplace_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockReplaceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockReplace_Call) Return(_a0 *pb.RpcBlockReplaceResponse) *MockClientCommandsServer_BlockReplace_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockReplace_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockReplaceRequest) *pb.RpcBlockReplaceResponse) *MockClientCommandsServer_BlockReplace_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockSetCarriage provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockSetCarriage(_a0 context.Context, _a1 *pb.RpcBlockSetCarriageRequest) *pb.RpcBlockSetCarriageResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockSetCarriage")
- }
-
- var r0 *pb.RpcBlockSetCarriageResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockSetCarriageRequest) *pb.RpcBlockSetCarriageResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockSetCarriageResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockSetCarriage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockSetCarriage'
-type MockClientCommandsServer_BlockSetCarriage_Call struct {
- *mock.Call
-}
-
-// BlockSetCarriage is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockSetCarriageRequest
-func (_e *MockClientCommandsServer_Expecter) BlockSetCarriage(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockSetCarriage_Call {
- return &MockClientCommandsServer_BlockSetCarriage_Call{Call: _e.mock.On("BlockSetCarriage", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockSetCarriage_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockSetCarriageRequest)) *MockClientCommandsServer_BlockSetCarriage_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockSetCarriageRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockSetCarriage_Call) Return(_a0 *pb.RpcBlockSetCarriageResponse) *MockClientCommandsServer_BlockSetCarriage_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockSetCarriage_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockSetCarriageRequest) *pb.RpcBlockSetCarriageResponse) *MockClientCommandsServer_BlockSetCarriage_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockSetFields provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockSetFields(_a0 context.Context, _a1 *pb.RpcBlockSetFieldsRequest) *pb.RpcBlockSetFieldsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockSetFields")
- }
-
- var r0 *pb.RpcBlockSetFieldsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockSetFieldsRequest) *pb.RpcBlockSetFieldsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockSetFieldsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockSetFields_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockSetFields'
-type MockClientCommandsServer_BlockSetFields_Call struct {
- *mock.Call
-}
-
-// BlockSetFields is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockSetFieldsRequest
-func (_e *MockClientCommandsServer_Expecter) BlockSetFields(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockSetFields_Call {
- return &MockClientCommandsServer_BlockSetFields_Call{Call: _e.mock.On("BlockSetFields", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockSetFields_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockSetFieldsRequest)) *MockClientCommandsServer_BlockSetFields_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockSetFieldsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockSetFields_Call) Return(_a0 *pb.RpcBlockSetFieldsResponse) *MockClientCommandsServer_BlockSetFields_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockSetFields_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockSetFieldsRequest) *pb.RpcBlockSetFieldsResponse) *MockClientCommandsServer_BlockSetFields_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockSplit provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockSplit(_a0 context.Context, _a1 *pb.RpcBlockSplitRequest) *pb.RpcBlockSplitResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockSplit")
- }
-
- var r0 *pb.RpcBlockSplitResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockSplitRequest) *pb.RpcBlockSplitResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockSplitResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockSplit_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockSplit'
-type MockClientCommandsServer_BlockSplit_Call struct {
- *mock.Call
-}
-
-// BlockSplit is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockSplitRequest
-func (_e *MockClientCommandsServer_Expecter) BlockSplit(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockSplit_Call {
- return &MockClientCommandsServer_BlockSplit_Call{Call: _e.mock.On("BlockSplit", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockSplit_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockSplitRequest)) *MockClientCommandsServer_BlockSplit_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockSplitRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockSplit_Call) Return(_a0 *pb.RpcBlockSplitResponse) *MockClientCommandsServer_BlockSplit_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockSplit_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockSplitRequest) *pb.RpcBlockSplitResponse) *MockClientCommandsServer_BlockSplit_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableColumnCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableColumnCreate(_a0 context.Context, _a1 *pb.RpcBlockTableColumnCreateRequest) *pb.RpcBlockTableColumnCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableColumnCreate")
- }
-
- var r0 *pb.RpcBlockTableColumnCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableColumnCreateRequest) *pb.RpcBlockTableColumnCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableColumnCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableColumnCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableColumnCreate'
-type MockClientCommandsServer_BlockTableColumnCreate_Call struct {
- *mock.Call
-}
-
-// BlockTableColumnCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableColumnCreateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableColumnCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableColumnCreate_Call {
- return &MockClientCommandsServer_BlockTableColumnCreate_Call{Call: _e.mock.On("BlockTableColumnCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableColumnCreateRequest)) *MockClientCommandsServer_BlockTableColumnCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableColumnCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnCreate_Call) Return(_a0 *pb.RpcBlockTableColumnCreateResponse) *MockClientCommandsServer_BlockTableColumnCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableColumnCreateRequest) *pb.RpcBlockTableColumnCreateResponse) *MockClientCommandsServer_BlockTableColumnCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableColumnDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableColumnDelete(_a0 context.Context, _a1 *pb.RpcBlockTableColumnDeleteRequest) *pb.RpcBlockTableColumnDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableColumnDelete")
- }
-
- var r0 *pb.RpcBlockTableColumnDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableColumnDeleteRequest) *pb.RpcBlockTableColumnDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableColumnDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableColumnDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableColumnDelete'
-type MockClientCommandsServer_BlockTableColumnDelete_Call struct {
- *mock.Call
-}
-
-// BlockTableColumnDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableColumnDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableColumnDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableColumnDelete_Call {
- return &MockClientCommandsServer_BlockTableColumnDelete_Call{Call: _e.mock.On("BlockTableColumnDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableColumnDeleteRequest)) *MockClientCommandsServer_BlockTableColumnDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableColumnDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnDelete_Call) Return(_a0 *pb.RpcBlockTableColumnDeleteResponse) *MockClientCommandsServer_BlockTableColumnDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableColumnDeleteRequest) *pb.RpcBlockTableColumnDeleteResponse) *MockClientCommandsServer_BlockTableColumnDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableColumnDuplicate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableColumnDuplicate(_a0 context.Context, _a1 *pb.RpcBlockTableColumnDuplicateRequest) *pb.RpcBlockTableColumnDuplicateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableColumnDuplicate")
- }
-
- var r0 *pb.RpcBlockTableColumnDuplicateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableColumnDuplicateRequest) *pb.RpcBlockTableColumnDuplicateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableColumnDuplicateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableColumnDuplicate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableColumnDuplicate'
-type MockClientCommandsServer_BlockTableColumnDuplicate_Call struct {
- *mock.Call
-}
-
-// BlockTableColumnDuplicate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableColumnDuplicateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableColumnDuplicate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableColumnDuplicate_Call {
- return &MockClientCommandsServer_BlockTableColumnDuplicate_Call{Call: _e.mock.On("BlockTableColumnDuplicate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnDuplicate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableColumnDuplicateRequest)) *MockClientCommandsServer_BlockTableColumnDuplicate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableColumnDuplicateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnDuplicate_Call) Return(_a0 *pb.RpcBlockTableColumnDuplicateResponse) *MockClientCommandsServer_BlockTableColumnDuplicate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnDuplicate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableColumnDuplicateRequest) *pb.RpcBlockTableColumnDuplicateResponse) *MockClientCommandsServer_BlockTableColumnDuplicate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableColumnListFill provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableColumnListFill(_a0 context.Context, _a1 *pb.RpcBlockTableColumnListFillRequest) *pb.RpcBlockTableColumnListFillResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableColumnListFill")
- }
-
- var r0 *pb.RpcBlockTableColumnListFillResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableColumnListFillRequest) *pb.RpcBlockTableColumnListFillResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableColumnListFillResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableColumnListFill_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableColumnListFill'
-type MockClientCommandsServer_BlockTableColumnListFill_Call struct {
- *mock.Call
-}
-
-// BlockTableColumnListFill is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableColumnListFillRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableColumnListFill(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableColumnListFill_Call {
- return &MockClientCommandsServer_BlockTableColumnListFill_Call{Call: _e.mock.On("BlockTableColumnListFill", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnListFill_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableColumnListFillRequest)) *MockClientCommandsServer_BlockTableColumnListFill_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableColumnListFillRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnListFill_Call) Return(_a0 *pb.RpcBlockTableColumnListFillResponse) *MockClientCommandsServer_BlockTableColumnListFill_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnListFill_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableColumnListFillRequest) *pb.RpcBlockTableColumnListFillResponse) *MockClientCommandsServer_BlockTableColumnListFill_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableColumnMove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableColumnMove(_a0 context.Context, _a1 *pb.RpcBlockTableColumnMoveRequest) *pb.RpcBlockTableColumnMoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableColumnMove")
- }
-
- var r0 *pb.RpcBlockTableColumnMoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableColumnMoveRequest) *pb.RpcBlockTableColumnMoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableColumnMoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableColumnMove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableColumnMove'
-type MockClientCommandsServer_BlockTableColumnMove_Call struct {
- *mock.Call
-}
-
-// BlockTableColumnMove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableColumnMoveRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableColumnMove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableColumnMove_Call {
- return &MockClientCommandsServer_BlockTableColumnMove_Call{Call: _e.mock.On("BlockTableColumnMove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnMove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableColumnMoveRequest)) *MockClientCommandsServer_BlockTableColumnMove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableColumnMoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnMove_Call) Return(_a0 *pb.RpcBlockTableColumnMoveResponse) *MockClientCommandsServer_BlockTableColumnMove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableColumnMove_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableColumnMoveRequest) *pb.RpcBlockTableColumnMoveResponse) *MockClientCommandsServer_BlockTableColumnMove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableCreate(_a0 context.Context, _a1 *pb.RpcBlockTableCreateRequest) *pb.RpcBlockTableCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableCreate")
- }
-
- var r0 *pb.RpcBlockTableCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableCreateRequest) *pb.RpcBlockTableCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableCreate'
-type MockClientCommandsServer_BlockTableCreate_Call struct {
- *mock.Call
-}
-
-// BlockTableCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableCreateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableCreate_Call {
- return &MockClientCommandsServer_BlockTableCreate_Call{Call: _e.mock.On("BlockTableCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableCreateRequest)) *MockClientCommandsServer_BlockTableCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableCreate_Call) Return(_a0 *pb.RpcBlockTableCreateResponse) *MockClientCommandsServer_BlockTableCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableCreateRequest) *pb.RpcBlockTableCreateResponse) *MockClientCommandsServer_BlockTableCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableExpand provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableExpand(_a0 context.Context, _a1 *pb.RpcBlockTableExpandRequest) *pb.RpcBlockTableExpandResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableExpand")
- }
-
- var r0 *pb.RpcBlockTableExpandResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableExpandRequest) *pb.RpcBlockTableExpandResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableExpandResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableExpand_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableExpand'
-type MockClientCommandsServer_BlockTableExpand_Call struct {
- *mock.Call
-}
-
-// BlockTableExpand is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableExpandRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableExpand(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableExpand_Call {
- return &MockClientCommandsServer_BlockTableExpand_Call{Call: _e.mock.On("BlockTableExpand", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableExpand_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableExpandRequest)) *MockClientCommandsServer_BlockTableExpand_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableExpandRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableExpand_Call) Return(_a0 *pb.RpcBlockTableExpandResponse) *MockClientCommandsServer_BlockTableExpand_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableExpand_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableExpandRequest) *pb.RpcBlockTableExpandResponse) *MockClientCommandsServer_BlockTableExpand_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableRowCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableRowCreate(_a0 context.Context, _a1 *pb.RpcBlockTableRowCreateRequest) *pb.RpcBlockTableRowCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableRowCreate")
- }
-
- var r0 *pb.RpcBlockTableRowCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableRowCreateRequest) *pb.RpcBlockTableRowCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableRowCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableRowCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableRowCreate'
-type MockClientCommandsServer_BlockTableRowCreate_Call struct {
- *mock.Call
-}
-
-// BlockTableRowCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableRowCreateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableRowCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableRowCreate_Call {
- return &MockClientCommandsServer_BlockTableRowCreate_Call{Call: _e.mock.On("BlockTableRowCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableRowCreateRequest)) *MockClientCommandsServer_BlockTableRowCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableRowCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowCreate_Call) Return(_a0 *pb.RpcBlockTableRowCreateResponse) *MockClientCommandsServer_BlockTableRowCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableRowCreateRequest) *pb.RpcBlockTableRowCreateResponse) *MockClientCommandsServer_BlockTableRowCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableRowDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableRowDelete(_a0 context.Context, _a1 *pb.RpcBlockTableRowDeleteRequest) *pb.RpcBlockTableRowDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableRowDelete")
- }
-
- var r0 *pb.RpcBlockTableRowDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableRowDeleteRequest) *pb.RpcBlockTableRowDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableRowDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableRowDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableRowDelete'
-type MockClientCommandsServer_BlockTableRowDelete_Call struct {
- *mock.Call
-}
-
-// BlockTableRowDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableRowDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableRowDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableRowDelete_Call {
- return &MockClientCommandsServer_BlockTableRowDelete_Call{Call: _e.mock.On("BlockTableRowDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableRowDeleteRequest)) *MockClientCommandsServer_BlockTableRowDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableRowDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowDelete_Call) Return(_a0 *pb.RpcBlockTableRowDeleteResponse) *MockClientCommandsServer_BlockTableRowDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableRowDeleteRequest) *pb.RpcBlockTableRowDeleteResponse) *MockClientCommandsServer_BlockTableRowDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableRowDuplicate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableRowDuplicate(_a0 context.Context, _a1 *pb.RpcBlockTableRowDuplicateRequest) *pb.RpcBlockTableRowDuplicateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableRowDuplicate")
- }
-
- var r0 *pb.RpcBlockTableRowDuplicateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableRowDuplicateRequest) *pb.RpcBlockTableRowDuplicateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableRowDuplicateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableRowDuplicate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableRowDuplicate'
-type MockClientCommandsServer_BlockTableRowDuplicate_Call struct {
- *mock.Call
-}
-
-// BlockTableRowDuplicate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableRowDuplicateRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableRowDuplicate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableRowDuplicate_Call {
- return &MockClientCommandsServer_BlockTableRowDuplicate_Call{Call: _e.mock.On("BlockTableRowDuplicate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowDuplicate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableRowDuplicateRequest)) *MockClientCommandsServer_BlockTableRowDuplicate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableRowDuplicateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowDuplicate_Call) Return(_a0 *pb.RpcBlockTableRowDuplicateResponse) *MockClientCommandsServer_BlockTableRowDuplicate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowDuplicate_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableRowDuplicateRequest) *pb.RpcBlockTableRowDuplicateResponse) *MockClientCommandsServer_BlockTableRowDuplicate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableRowListClean provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableRowListClean(_a0 context.Context, _a1 *pb.RpcBlockTableRowListCleanRequest) *pb.RpcBlockTableRowListCleanResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableRowListClean")
- }
-
- var r0 *pb.RpcBlockTableRowListCleanResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableRowListCleanRequest) *pb.RpcBlockTableRowListCleanResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableRowListCleanResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableRowListClean_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableRowListClean'
-type MockClientCommandsServer_BlockTableRowListClean_Call struct {
- *mock.Call
-}
-
-// BlockTableRowListClean is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableRowListCleanRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableRowListClean(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableRowListClean_Call {
- return &MockClientCommandsServer_BlockTableRowListClean_Call{Call: _e.mock.On("BlockTableRowListClean", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowListClean_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableRowListCleanRequest)) *MockClientCommandsServer_BlockTableRowListClean_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableRowListCleanRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowListClean_Call) Return(_a0 *pb.RpcBlockTableRowListCleanResponse) *MockClientCommandsServer_BlockTableRowListClean_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowListClean_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableRowListCleanRequest) *pb.RpcBlockTableRowListCleanResponse) *MockClientCommandsServer_BlockTableRowListClean_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableRowListFill provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableRowListFill(_a0 context.Context, _a1 *pb.RpcBlockTableRowListFillRequest) *pb.RpcBlockTableRowListFillResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableRowListFill")
- }
-
- var r0 *pb.RpcBlockTableRowListFillResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableRowListFillRequest) *pb.RpcBlockTableRowListFillResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableRowListFillResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableRowListFill_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableRowListFill'
-type MockClientCommandsServer_BlockTableRowListFill_Call struct {
- *mock.Call
-}
-
-// BlockTableRowListFill is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableRowListFillRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableRowListFill(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableRowListFill_Call {
- return &MockClientCommandsServer_BlockTableRowListFill_Call{Call: _e.mock.On("BlockTableRowListFill", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowListFill_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableRowListFillRequest)) *MockClientCommandsServer_BlockTableRowListFill_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableRowListFillRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowListFill_Call) Return(_a0 *pb.RpcBlockTableRowListFillResponse) *MockClientCommandsServer_BlockTableRowListFill_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowListFill_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableRowListFillRequest) *pb.RpcBlockTableRowListFillResponse) *MockClientCommandsServer_BlockTableRowListFill_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableRowSetHeader provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableRowSetHeader(_a0 context.Context, _a1 *pb.RpcBlockTableRowSetHeaderRequest) *pb.RpcBlockTableRowSetHeaderResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableRowSetHeader")
- }
-
- var r0 *pb.RpcBlockTableRowSetHeaderResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableRowSetHeaderRequest) *pb.RpcBlockTableRowSetHeaderResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableRowSetHeaderResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableRowSetHeader_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableRowSetHeader'
-type MockClientCommandsServer_BlockTableRowSetHeader_Call struct {
- *mock.Call
-}
-
-// BlockTableRowSetHeader is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableRowSetHeaderRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableRowSetHeader(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableRowSetHeader_Call {
- return &MockClientCommandsServer_BlockTableRowSetHeader_Call{Call: _e.mock.On("BlockTableRowSetHeader", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowSetHeader_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableRowSetHeaderRequest)) *MockClientCommandsServer_BlockTableRowSetHeader_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableRowSetHeaderRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowSetHeader_Call) Return(_a0 *pb.RpcBlockTableRowSetHeaderResponse) *MockClientCommandsServer_BlockTableRowSetHeader_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableRowSetHeader_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableRowSetHeaderRequest) *pb.RpcBlockTableRowSetHeaderResponse) *MockClientCommandsServer_BlockTableRowSetHeader_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTableSort provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTableSort(_a0 context.Context, _a1 *pb.RpcBlockTableSortRequest) *pb.RpcBlockTableSortResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTableSort")
- }
-
- var r0 *pb.RpcBlockTableSortResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTableSortRequest) *pb.RpcBlockTableSortResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTableSortResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTableSort_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTableSort'
-type MockClientCommandsServer_BlockTableSort_Call struct {
- *mock.Call
-}
-
-// BlockTableSort is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTableSortRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTableSort(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTableSort_Call {
- return &MockClientCommandsServer_BlockTableSort_Call{Call: _e.mock.On("BlockTableSort", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTableSort_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTableSortRequest)) *MockClientCommandsServer_BlockTableSort_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTableSortRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableSort_Call) Return(_a0 *pb.RpcBlockTableSortResponse) *MockClientCommandsServer_BlockTableSort_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTableSort_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTableSortRequest) *pb.RpcBlockTableSortResponse) *MockClientCommandsServer_BlockTableSort_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextListClearContent provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextListClearContent(_a0 context.Context, _a1 *pb.RpcBlockTextListClearContentRequest) *pb.RpcBlockTextListClearContentResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextListClearContent")
- }
-
- var r0 *pb.RpcBlockTextListClearContentResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextListClearContentRequest) *pb.RpcBlockTextListClearContentResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextListClearContentResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextListClearContent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextListClearContent'
-type MockClientCommandsServer_BlockTextListClearContent_Call struct {
- *mock.Call
-}
-
-// BlockTextListClearContent is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextListClearContentRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextListClearContent(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextListClearContent_Call {
- return &MockClientCommandsServer_BlockTextListClearContent_Call{Call: _e.mock.On("BlockTextListClearContent", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextListClearContent_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextListClearContentRequest)) *MockClientCommandsServer_BlockTextListClearContent_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextListClearContentRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListClearContent_Call) Return(_a0 *pb.RpcBlockTextListClearContentResponse) *MockClientCommandsServer_BlockTextListClearContent_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListClearContent_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextListClearContentRequest) *pb.RpcBlockTextListClearContentResponse) *MockClientCommandsServer_BlockTextListClearContent_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextListClearStyle provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextListClearStyle(_a0 context.Context, _a1 *pb.RpcBlockTextListClearStyleRequest) *pb.RpcBlockTextListClearStyleResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextListClearStyle")
- }
-
- var r0 *pb.RpcBlockTextListClearStyleResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextListClearStyleRequest) *pb.RpcBlockTextListClearStyleResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextListClearStyleResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextListClearStyle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextListClearStyle'
-type MockClientCommandsServer_BlockTextListClearStyle_Call struct {
- *mock.Call
-}
-
-// BlockTextListClearStyle is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextListClearStyleRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextListClearStyle(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextListClearStyle_Call {
- return &MockClientCommandsServer_BlockTextListClearStyle_Call{Call: _e.mock.On("BlockTextListClearStyle", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextListClearStyle_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextListClearStyleRequest)) *MockClientCommandsServer_BlockTextListClearStyle_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextListClearStyleRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListClearStyle_Call) Return(_a0 *pb.RpcBlockTextListClearStyleResponse) *MockClientCommandsServer_BlockTextListClearStyle_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListClearStyle_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextListClearStyleRequest) *pb.RpcBlockTextListClearStyleResponse) *MockClientCommandsServer_BlockTextListClearStyle_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextListSetColor provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextListSetColor(_a0 context.Context, _a1 *pb.RpcBlockTextListSetColorRequest) *pb.RpcBlockTextListSetColorResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextListSetColor")
- }
-
- var r0 *pb.RpcBlockTextListSetColorResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextListSetColorRequest) *pb.RpcBlockTextListSetColorResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextListSetColorResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextListSetColor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextListSetColor'
-type MockClientCommandsServer_BlockTextListSetColor_Call struct {
- *mock.Call
-}
-
-// BlockTextListSetColor is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextListSetColorRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextListSetColor(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextListSetColor_Call {
- return &MockClientCommandsServer_BlockTextListSetColor_Call{Call: _e.mock.On("BlockTextListSetColor", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetColor_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextListSetColorRequest)) *MockClientCommandsServer_BlockTextListSetColor_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextListSetColorRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetColor_Call) Return(_a0 *pb.RpcBlockTextListSetColorResponse) *MockClientCommandsServer_BlockTextListSetColor_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetColor_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextListSetColorRequest) *pb.RpcBlockTextListSetColorResponse) *MockClientCommandsServer_BlockTextListSetColor_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextListSetMark provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextListSetMark(_a0 context.Context, _a1 *pb.RpcBlockTextListSetMarkRequest) *pb.RpcBlockTextListSetMarkResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextListSetMark")
- }
-
- var r0 *pb.RpcBlockTextListSetMarkResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextListSetMarkRequest) *pb.RpcBlockTextListSetMarkResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextListSetMarkResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextListSetMark_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextListSetMark'
-type MockClientCommandsServer_BlockTextListSetMark_Call struct {
- *mock.Call
-}
-
-// BlockTextListSetMark is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextListSetMarkRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextListSetMark(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextListSetMark_Call {
- return &MockClientCommandsServer_BlockTextListSetMark_Call{Call: _e.mock.On("BlockTextListSetMark", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetMark_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextListSetMarkRequest)) *MockClientCommandsServer_BlockTextListSetMark_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextListSetMarkRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetMark_Call) Return(_a0 *pb.RpcBlockTextListSetMarkResponse) *MockClientCommandsServer_BlockTextListSetMark_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetMark_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextListSetMarkRequest) *pb.RpcBlockTextListSetMarkResponse) *MockClientCommandsServer_BlockTextListSetMark_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextListSetStyle provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextListSetStyle(_a0 context.Context, _a1 *pb.RpcBlockTextListSetStyleRequest) *pb.RpcBlockTextListSetStyleResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextListSetStyle")
- }
-
- var r0 *pb.RpcBlockTextListSetStyleResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextListSetStyleRequest) *pb.RpcBlockTextListSetStyleResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextListSetStyleResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextListSetStyle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextListSetStyle'
-type MockClientCommandsServer_BlockTextListSetStyle_Call struct {
- *mock.Call
-}
-
-// BlockTextListSetStyle is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextListSetStyleRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextListSetStyle(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextListSetStyle_Call {
- return &MockClientCommandsServer_BlockTextListSetStyle_Call{Call: _e.mock.On("BlockTextListSetStyle", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetStyle_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextListSetStyleRequest)) *MockClientCommandsServer_BlockTextListSetStyle_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextListSetStyleRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetStyle_Call) Return(_a0 *pb.RpcBlockTextListSetStyleResponse) *MockClientCommandsServer_BlockTextListSetStyle_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextListSetStyle_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextListSetStyleRequest) *pb.RpcBlockTextListSetStyleResponse) *MockClientCommandsServer_BlockTextListSetStyle_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextSetChecked provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextSetChecked(_a0 context.Context, _a1 *pb.RpcBlockTextSetCheckedRequest) *pb.RpcBlockTextSetCheckedResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextSetChecked")
- }
-
- var r0 *pb.RpcBlockTextSetCheckedResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextSetCheckedRequest) *pb.RpcBlockTextSetCheckedResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextSetCheckedResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextSetChecked_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextSetChecked'
-type MockClientCommandsServer_BlockTextSetChecked_Call struct {
- *mock.Call
-}
-
-// BlockTextSetChecked is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextSetCheckedRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextSetChecked(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextSetChecked_Call {
- return &MockClientCommandsServer_BlockTextSetChecked_Call{Call: _e.mock.On("BlockTextSetChecked", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetChecked_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextSetCheckedRequest)) *MockClientCommandsServer_BlockTextSetChecked_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextSetCheckedRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetChecked_Call) Return(_a0 *pb.RpcBlockTextSetCheckedResponse) *MockClientCommandsServer_BlockTextSetChecked_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetChecked_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextSetCheckedRequest) *pb.RpcBlockTextSetCheckedResponse) *MockClientCommandsServer_BlockTextSetChecked_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextSetColor provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextSetColor(_a0 context.Context, _a1 *pb.RpcBlockTextSetColorRequest) *pb.RpcBlockTextSetColorResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextSetColor")
- }
-
- var r0 *pb.RpcBlockTextSetColorResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextSetColorRequest) *pb.RpcBlockTextSetColorResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextSetColorResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextSetColor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextSetColor'
-type MockClientCommandsServer_BlockTextSetColor_Call struct {
- *mock.Call
-}
-
-// BlockTextSetColor is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextSetColorRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextSetColor(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextSetColor_Call {
- return &MockClientCommandsServer_BlockTextSetColor_Call{Call: _e.mock.On("BlockTextSetColor", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetColor_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextSetColorRequest)) *MockClientCommandsServer_BlockTextSetColor_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextSetColorRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetColor_Call) Return(_a0 *pb.RpcBlockTextSetColorResponse) *MockClientCommandsServer_BlockTextSetColor_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetColor_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextSetColorRequest) *pb.RpcBlockTextSetColorResponse) *MockClientCommandsServer_BlockTextSetColor_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextSetIcon provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextSetIcon(_a0 context.Context, _a1 *pb.RpcBlockTextSetIconRequest) *pb.RpcBlockTextSetIconResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextSetIcon")
- }
-
- var r0 *pb.RpcBlockTextSetIconResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextSetIconRequest) *pb.RpcBlockTextSetIconResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextSetIconResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextSetIcon_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextSetIcon'
-type MockClientCommandsServer_BlockTextSetIcon_Call struct {
- *mock.Call
-}
-
-// BlockTextSetIcon is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextSetIconRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextSetIcon(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextSetIcon_Call {
- return &MockClientCommandsServer_BlockTextSetIcon_Call{Call: _e.mock.On("BlockTextSetIcon", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetIcon_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextSetIconRequest)) *MockClientCommandsServer_BlockTextSetIcon_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextSetIconRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetIcon_Call) Return(_a0 *pb.RpcBlockTextSetIconResponse) *MockClientCommandsServer_BlockTextSetIcon_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetIcon_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextSetIconRequest) *pb.RpcBlockTextSetIconResponse) *MockClientCommandsServer_BlockTextSetIcon_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextSetStyle provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextSetStyle(_a0 context.Context, _a1 *pb.RpcBlockTextSetStyleRequest) *pb.RpcBlockTextSetStyleResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextSetStyle")
- }
-
- var r0 *pb.RpcBlockTextSetStyleResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextSetStyleRequest) *pb.RpcBlockTextSetStyleResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextSetStyleResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextSetStyle_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextSetStyle'
-type MockClientCommandsServer_BlockTextSetStyle_Call struct {
- *mock.Call
-}
-
-// BlockTextSetStyle is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextSetStyleRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextSetStyle(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextSetStyle_Call {
- return &MockClientCommandsServer_BlockTextSetStyle_Call{Call: _e.mock.On("BlockTextSetStyle", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetStyle_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextSetStyleRequest)) *MockClientCommandsServer_BlockTextSetStyle_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextSetStyleRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetStyle_Call) Return(_a0 *pb.RpcBlockTextSetStyleResponse) *MockClientCommandsServer_BlockTextSetStyle_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetStyle_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextSetStyleRequest) *pb.RpcBlockTextSetStyleResponse) *MockClientCommandsServer_BlockTextSetStyle_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockTextSetText provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockTextSetText(_a0 context.Context, _a1 *pb.RpcBlockTextSetTextRequest) *pb.RpcBlockTextSetTextResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockTextSetText")
- }
-
- var r0 *pb.RpcBlockTextSetTextResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockTextSetTextRequest) *pb.RpcBlockTextSetTextResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockTextSetTextResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockTextSetText_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockTextSetText'
-type MockClientCommandsServer_BlockTextSetText_Call struct {
- *mock.Call
-}
-
-// BlockTextSetText is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockTextSetTextRequest
-func (_e *MockClientCommandsServer_Expecter) BlockTextSetText(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockTextSetText_Call {
- return &MockClientCommandsServer_BlockTextSetText_Call{Call: _e.mock.On("BlockTextSetText", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetText_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockTextSetTextRequest)) *MockClientCommandsServer_BlockTextSetText_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockTextSetTextRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetText_Call) Return(_a0 *pb.RpcBlockTextSetTextResponse) *MockClientCommandsServer_BlockTextSetText_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockTextSetText_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockTextSetTextRequest) *pb.RpcBlockTextSetTextResponse) *MockClientCommandsServer_BlockTextSetText_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockUpload provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockUpload(_a0 context.Context, _a1 *pb.RpcBlockUploadRequest) *pb.RpcBlockUploadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockUpload")
- }
-
- var r0 *pb.RpcBlockUploadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockUploadRequest) *pb.RpcBlockUploadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockUploadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockUpload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockUpload'
-type MockClientCommandsServer_BlockUpload_Call struct {
- *mock.Call
-}
-
-// BlockUpload is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockUploadRequest
-func (_e *MockClientCommandsServer_Expecter) BlockUpload(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockUpload_Call {
- return &MockClientCommandsServer_BlockUpload_Call{Call: _e.mock.On("BlockUpload", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockUpload_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockUploadRequest)) *MockClientCommandsServer_BlockUpload_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockUploadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockUpload_Call) Return(_a0 *pb.RpcBlockUploadResponse) *MockClientCommandsServer_BlockUpload_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockUpload_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockUploadRequest) *pb.RpcBlockUploadResponse) *MockClientCommandsServer_BlockUpload_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockVideoSetName provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockVideoSetName(_a0 context.Context, _a1 *pb.RpcBlockVideoSetNameRequest) *pb.RpcBlockVideoSetNameResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockVideoSetName")
- }
-
- var r0 *pb.RpcBlockVideoSetNameResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockVideoSetNameRequest) *pb.RpcBlockVideoSetNameResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockVideoSetNameResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockVideoSetName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockVideoSetName'
-type MockClientCommandsServer_BlockVideoSetName_Call struct {
- *mock.Call
-}
-
-// BlockVideoSetName is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockVideoSetNameRequest
-func (_e *MockClientCommandsServer_Expecter) BlockVideoSetName(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockVideoSetName_Call {
- return &MockClientCommandsServer_BlockVideoSetName_Call{Call: _e.mock.On("BlockVideoSetName", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockVideoSetName_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockVideoSetNameRequest)) *MockClientCommandsServer_BlockVideoSetName_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockVideoSetNameRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockVideoSetName_Call) Return(_a0 *pb.RpcBlockVideoSetNameResponse) *MockClientCommandsServer_BlockVideoSetName_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockVideoSetName_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockVideoSetNameRequest) *pb.RpcBlockVideoSetNameResponse) *MockClientCommandsServer_BlockVideoSetName_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockWidgetSetLayout provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockWidgetSetLayout(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetLayoutRequest) *pb.RpcBlockWidgetSetLayoutResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockWidgetSetLayout")
- }
-
- var r0 *pb.RpcBlockWidgetSetLayoutResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockWidgetSetLayoutRequest) *pb.RpcBlockWidgetSetLayoutResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockWidgetSetLayoutResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockWidgetSetLayout_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockWidgetSetLayout'
-type MockClientCommandsServer_BlockWidgetSetLayout_Call struct {
- *mock.Call
-}
-
-// BlockWidgetSetLayout is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockWidgetSetLayoutRequest
-func (_e *MockClientCommandsServer_Expecter) BlockWidgetSetLayout(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockWidgetSetLayout_Call {
- return &MockClientCommandsServer_BlockWidgetSetLayout_Call{Call: _e.mock.On("BlockWidgetSetLayout", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetLayout_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetLayoutRequest)) *MockClientCommandsServer_BlockWidgetSetLayout_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockWidgetSetLayoutRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetLayout_Call) Return(_a0 *pb.RpcBlockWidgetSetLayoutResponse) *MockClientCommandsServer_BlockWidgetSetLayout_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetLayout_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockWidgetSetLayoutRequest) *pb.RpcBlockWidgetSetLayoutResponse) *MockClientCommandsServer_BlockWidgetSetLayout_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockWidgetSetLimit provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockWidgetSetLimit(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetLimitRequest) *pb.RpcBlockWidgetSetLimitResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockWidgetSetLimit")
- }
-
- var r0 *pb.RpcBlockWidgetSetLimitResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockWidgetSetLimitRequest) *pb.RpcBlockWidgetSetLimitResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockWidgetSetLimitResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockWidgetSetLimit_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockWidgetSetLimit'
-type MockClientCommandsServer_BlockWidgetSetLimit_Call struct {
- *mock.Call
-}
-
-// BlockWidgetSetLimit is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockWidgetSetLimitRequest
-func (_e *MockClientCommandsServer_Expecter) BlockWidgetSetLimit(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockWidgetSetLimit_Call {
- return &MockClientCommandsServer_BlockWidgetSetLimit_Call{Call: _e.mock.On("BlockWidgetSetLimit", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetLimit_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetLimitRequest)) *MockClientCommandsServer_BlockWidgetSetLimit_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockWidgetSetLimitRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetLimit_Call) Return(_a0 *pb.RpcBlockWidgetSetLimitResponse) *MockClientCommandsServer_BlockWidgetSetLimit_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetLimit_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockWidgetSetLimitRequest) *pb.RpcBlockWidgetSetLimitResponse) *MockClientCommandsServer_BlockWidgetSetLimit_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockWidgetSetTargetId provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockWidgetSetTargetId(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetTargetIdRequest) *pb.RpcBlockWidgetSetTargetIdResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockWidgetSetTargetId")
- }
-
- var r0 *pb.RpcBlockWidgetSetTargetIdResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockWidgetSetTargetIdRequest) *pb.RpcBlockWidgetSetTargetIdResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockWidgetSetTargetIdResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockWidgetSetTargetId_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockWidgetSetTargetId'
-type MockClientCommandsServer_BlockWidgetSetTargetId_Call struct {
- *mock.Call
-}
-
-// BlockWidgetSetTargetId is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockWidgetSetTargetIdRequest
-func (_e *MockClientCommandsServer_Expecter) BlockWidgetSetTargetId(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockWidgetSetTargetId_Call {
- return &MockClientCommandsServer_BlockWidgetSetTargetId_Call{Call: _e.mock.On("BlockWidgetSetTargetId", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetTargetId_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetTargetIdRequest)) *MockClientCommandsServer_BlockWidgetSetTargetId_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockWidgetSetTargetIdRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetTargetId_Call) Return(_a0 *pb.RpcBlockWidgetSetTargetIdResponse) *MockClientCommandsServer_BlockWidgetSetTargetId_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetTargetId_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockWidgetSetTargetIdRequest) *pb.RpcBlockWidgetSetTargetIdResponse) *MockClientCommandsServer_BlockWidgetSetTargetId_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BlockWidgetSetViewId provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BlockWidgetSetViewId(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetViewIdRequest) *pb.RpcBlockWidgetSetViewIdResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BlockWidgetSetViewId")
- }
-
- var r0 *pb.RpcBlockWidgetSetViewIdResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBlockWidgetSetViewIdRequest) *pb.RpcBlockWidgetSetViewIdResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBlockWidgetSetViewIdResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BlockWidgetSetViewId_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BlockWidgetSetViewId'
-type MockClientCommandsServer_BlockWidgetSetViewId_Call struct {
- *mock.Call
-}
-
-// BlockWidgetSetViewId is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBlockWidgetSetViewIdRequest
-func (_e *MockClientCommandsServer_Expecter) BlockWidgetSetViewId(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BlockWidgetSetViewId_Call {
- return &MockClientCommandsServer_BlockWidgetSetViewId_Call{Call: _e.mock.On("BlockWidgetSetViewId", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetViewId_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBlockWidgetSetViewIdRequest)) *MockClientCommandsServer_BlockWidgetSetViewId_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBlockWidgetSetViewIdRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetViewId_Call) Return(_a0 *pb.RpcBlockWidgetSetViewIdResponse) *MockClientCommandsServer_BlockWidgetSetViewId_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BlockWidgetSetViewId_Call) RunAndReturn(run func(context.Context, *pb.RpcBlockWidgetSetViewIdRequest) *pb.RpcBlockWidgetSetViewIdResponse) *MockClientCommandsServer_BlockWidgetSetViewId_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// BroadcastPayloadEvent provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) BroadcastPayloadEvent(_a0 context.Context, _a1 *pb.RpcBroadcastPayloadEventRequest) *pb.RpcBroadcastPayloadEventResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for BroadcastPayloadEvent")
- }
-
- var r0 *pb.RpcBroadcastPayloadEventResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcBroadcastPayloadEventRequest) *pb.RpcBroadcastPayloadEventResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcBroadcastPayloadEventResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_BroadcastPayloadEvent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BroadcastPayloadEvent'
-type MockClientCommandsServer_BroadcastPayloadEvent_Call struct {
- *mock.Call
-}
-
-// BroadcastPayloadEvent is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcBroadcastPayloadEventRequest
-func (_e *MockClientCommandsServer_Expecter) BroadcastPayloadEvent(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_BroadcastPayloadEvent_Call {
- return &MockClientCommandsServer_BroadcastPayloadEvent_Call{Call: _e.mock.On("BroadcastPayloadEvent", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_BroadcastPayloadEvent_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcBroadcastPayloadEventRequest)) *MockClientCommandsServer_BroadcastPayloadEvent_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcBroadcastPayloadEventRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_BroadcastPayloadEvent_Call) Return(_a0 *pb.RpcBroadcastPayloadEventResponse) *MockClientCommandsServer_BroadcastPayloadEvent_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_BroadcastPayloadEvent_Call) RunAndReturn(run func(context.Context, *pb.RpcBroadcastPayloadEventRequest) *pb.RpcBroadcastPayloadEventResponse) *MockClientCommandsServer_BroadcastPayloadEvent_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatAddMessage provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatAddMessage(_a0 context.Context, _a1 *pb.RpcChatAddMessageRequest) *pb.RpcChatAddMessageResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatAddMessage")
- }
-
- var r0 *pb.RpcChatAddMessageResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatAddMessageRequest) *pb.RpcChatAddMessageResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatAddMessageResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatAddMessage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatAddMessage'
-type MockClientCommandsServer_ChatAddMessage_Call struct {
- *mock.Call
-}
-
-// ChatAddMessage is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatAddMessageRequest
-func (_e *MockClientCommandsServer_Expecter) ChatAddMessage(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatAddMessage_Call {
- return &MockClientCommandsServer_ChatAddMessage_Call{Call: _e.mock.On("ChatAddMessage", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatAddMessage_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatAddMessageRequest)) *MockClientCommandsServer_ChatAddMessage_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatAddMessageRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatAddMessage_Call) Return(_a0 *pb.RpcChatAddMessageResponse) *MockClientCommandsServer_ChatAddMessage_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatAddMessage_Call) RunAndReturn(run func(context.Context, *pb.RpcChatAddMessageRequest) *pb.RpcChatAddMessageResponse) *MockClientCommandsServer_ChatAddMessage_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatDeleteMessage provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatDeleteMessage(_a0 context.Context, _a1 *pb.RpcChatDeleteMessageRequest) *pb.RpcChatDeleteMessageResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatDeleteMessage")
- }
-
- var r0 *pb.RpcChatDeleteMessageResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatDeleteMessageRequest) *pb.RpcChatDeleteMessageResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatDeleteMessageResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatDeleteMessage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatDeleteMessage'
-type MockClientCommandsServer_ChatDeleteMessage_Call struct {
- *mock.Call
-}
-
-// ChatDeleteMessage is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatDeleteMessageRequest
-func (_e *MockClientCommandsServer_Expecter) ChatDeleteMessage(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatDeleteMessage_Call {
- return &MockClientCommandsServer_ChatDeleteMessage_Call{Call: _e.mock.On("ChatDeleteMessage", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatDeleteMessage_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatDeleteMessageRequest)) *MockClientCommandsServer_ChatDeleteMessage_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatDeleteMessageRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatDeleteMessage_Call) Return(_a0 *pb.RpcChatDeleteMessageResponse) *MockClientCommandsServer_ChatDeleteMessage_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatDeleteMessage_Call) RunAndReturn(run func(context.Context, *pb.RpcChatDeleteMessageRequest) *pb.RpcChatDeleteMessageResponse) *MockClientCommandsServer_ChatDeleteMessage_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatEditMessageContent provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatEditMessageContent(_a0 context.Context, _a1 *pb.RpcChatEditMessageContentRequest) *pb.RpcChatEditMessageContentResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatEditMessageContent")
- }
-
- var r0 *pb.RpcChatEditMessageContentResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatEditMessageContentRequest) *pb.RpcChatEditMessageContentResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatEditMessageContentResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatEditMessageContent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatEditMessageContent'
-type MockClientCommandsServer_ChatEditMessageContent_Call struct {
- *mock.Call
-}
-
-// ChatEditMessageContent is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatEditMessageContentRequest
-func (_e *MockClientCommandsServer_Expecter) ChatEditMessageContent(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatEditMessageContent_Call {
- return &MockClientCommandsServer_ChatEditMessageContent_Call{Call: _e.mock.On("ChatEditMessageContent", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatEditMessageContent_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatEditMessageContentRequest)) *MockClientCommandsServer_ChatEditMessageContent_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatEditMessageContentRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatEditMessageContent_Call) Return(_a0 *pb.RpcChatEditMessageContentResponse) *MockClientCommandsServer_ChatEditMessageContent_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatEditMessageContent_Call) RunAndReturn(run func(context.Context, *pb.RpcChatEditMessageContentRequest) *pb.RpcChatEditMessageContentResponse) *MockClientCommandsServer_ChatEditMessageContent_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatGetMessages provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatGetMessages(_a0 context.Context, _a1 *pb.RpcChatGetMessagesRequest) *pb.RpcChatGetMessagesResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatGetMessages")
- }
-
- var r0 *pb.RpcChatGetMessagesResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatGetMessagesRequest) *pb.RpcChatGetMessagesResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatGetMessagesResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatGetMessages_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatGetMessages'
-type MockClientCommandsServer_ChatGetMessages_Call struct {
- *mock.Call
-}
-
-// ChatGetMessages is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatGetMessagesRequest
-func (_e *MockClientCommandsServer_Expecter) ChatGetMessages(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatGetMessages_Call {
- return &MockClientCommandsServer_ChatGetMessages_Call{Call: _e.mock.On("ChatGetMessages", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatGetMessages_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatGetMessagesRequest)) *MockClientCommandsServer_ChatGetMessages_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatGetMessagesRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatGetMessages_Call) Return(_a0 *pb.RpcChatGetMessagesResponse) *MockClientCommandsServer_ChatGetMessages_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatGetMessages_Call) RunAndReturn(run func(context.Context, *pb.RpcChatGetMessagesRequest) *pb.RpcChatGetMessagesResponse) *MockClientCommandsServer_ChatGetMessages_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatGetMessagesByIds provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatGetMessagesByIds(_a0 context.Context, _a1 *pb.RpcChatGetMessagesByIdsRequest) *pb.RpcChatGetMessagesByIdsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatGetMessagesByIds")
- }
-
- var r0 *pb.RpcChatGetMessagesByIdsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatGetMessagesByIdsRequest) *pb.RpcChatGetMessagesByIdsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatGetMessagesByIdsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatGetMessagesByIds_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatGetMessagesByIds'
-type MockClientCommandsServer_ChatGetMessagesByIds_Call struct {
- *mock.Call
-}
-
-// ChatGetMessagesByIds is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatGetMessagesByIdsRequest
-func (_e *MockClientCommandsServer_Expecter) ChatGetMessagesByIds(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatGetMessagesByIds_Call {
- return &MockClientCommandsServer_ChatGetMessagesByIds_Call{Call: _e.mock.On("ChatGetMessagesByIds", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatGetMessagesByIds_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatGetMessagesByIdsRequest)) *MockClientCommandsServer_ChatGetMessagesByIds_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatGetMessagesByIdsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatGetMessagesByIds_Call) Return(_a0 *pb.RpcChatGetMessagesByIdsResponse) *MockClientCommandsServer_ChatGetMessagesByIds_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatGetMessagesByIds_Call) RunAndReturn(run func(context.Context, *pb.RpcChatGetMessagesByIdsRequest) *pb.RpcChatGetMessagesByIdsResponse) *MockClientCommandsServer_ChatGetMessagesByIds_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatReadMessages provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatReadMessages(_a0 context.Context, _a1 *pb.RpcChatReadMessagesRequest) *pb.RpcChatReadMessagesResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatReadMessages")
- }
-
- var r0 *pb.RpcChatReadMessagesResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatReadMessagesRequest) *pb.RpcChatReadMessagesResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatReadMessagesResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatReadMessages_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatReadMessages'
-type MockClientCommandsServer_ChatReadMessages_Call struct {
- *mock.Call
-}
-
-// ChatReadMessages is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatReadMessagesRequest
-func (_e *MockClientCommandsServer_Expecter) ChatReadMessages(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatReadMessages_Call {
- return &MockClientCommandsServer_ChatReadMessages_Call{Call: _e.mock.On("ChatReadMessages", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatReadMessages_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatReadMessagesRequest)) *MockClientCommandsServer_ChatReadMessages_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatReadMessagesRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatReadMessages_Call) Return(_a0 *pb.RpcChatReadMessagesResponse) *MockClientCommandsServer_ChatReadMessages_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatReadMessages_Call) RunAndReturn(run func(context.Context, *pb.RpcChatReadMessagesRequest) *pb.RpcChatReadMessagesResponse) *MockClientCommandsServer_ChatReadMessages_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatSubscribeLastMessages provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatSubscribeLastMessages(_a0 context.Context, _a1 *pb.RpcChatSubscribeLastMessagesRequest) *pb.RpcChatSubscribeLastMessagesResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatSubscribeLastMessages")
- }
-
- var r0 *pb.RpcChatSubscribeLastMessagesResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatSubscribeLastMessagesRequest) *pb.RpcChatSubscribeLastMessagesResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatSubscribeLastMessagesResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatSubscribeLastMessages_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatSubscribeLastMessages'
-type MockClientCommandsServer_ChatSubscribeLastMessages_Call struct {
- *mock.Call
-}
-
-// ChatSubscribeLastMessages is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatSubscribeLastMessagesRequest
-func (_e *MockClientCommandsServer_Expecter) ChatSubscribeLastMessages(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatSubscribeLastMessages_Call {
- return &MockClientCommandsServer_ChatSubscribeLastMessages_Call{Call: _e.mock.On("ChatSubscribeLastMessages", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatSubscribeLastMessages_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatSubscribeLastMessagesRequest)) *MockClientCommandsServer_ChatSubscribeLastMessages_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatSubscribeLastMessagesRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatSubscribeLastMessages_Call) Return(_a0 *pb.RpcChatSubscribeLastMessagesResponse) *MockClientCommandsServer_ChatSubscribeLastMessages_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatSubscribeLastMessages_Call) RunAndReturn(run func(context.Context, *pb.RpcChatSubscribeLastMessagesRequest) *pb.RpcChatSubscribeLastMessagesResponse) *MockClientCommandsServer_ChatSubscribeLastMessages_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatSubscribeToMessagePreviews provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatSubscribeToMessagePreviews(_a0 context.Context, _a1 *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatSubscribeToMessagePreviews")
- }
-
- var r0 *pb.RpcChatSubscribeToMessagePreviewsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatSubscribeToMessagePreviewsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatSubscribeToMessagePreviews'
-type MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call struct {
- *mock.Call
-}
-
-// ChatSubscribeToMessagePreviews is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatSubscribeToMessagePreviewsRequest
-func (_e *MockClientCommandsServer_Expecter) ChatSubscribeToMessagePreviews(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call {
- return &MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call{Call: _e.mock.On("ChatSubscribeToMessagePreviews", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatSubscribeToMessagePreviewsRequest)) *MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatSubscribeToMessagePreviewsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call) Return(_a0 *pb.RpcChatSubscribeToMessagePreviewsResponse) *MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call) RunAndReturn(run func(context.Context, *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse) *MockClientCommandsServer_ChatSubscribeToMessagePreviews_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatToggleMessageReaction provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatToggleMessageReaction(_a0 context.Context, _a1 *pb.RpcChatToggleMessageReactionRequest) *pb.RpcChatToggleMessageReactionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatToggleMessageReaction")
- }
-
- var r0 *pb.RpcChatToggleMessageReactionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatToggleMessageReactionRequest) *pb.RpcChatToggleMessageReactionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatToggleMessageReactionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatToggleMessageReaction_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatToggleMessageReaction'
-type MockClientCommandsServer_ChatToggleMessageReaction_Call struct {
- *mock.Call
-}
-
-// ChatToggleMessageReaction is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatToggleMessageReactionRequest
-func (_e *MockClientCommandsServer_Expecter) ChatToggleMessageReaction(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatToggleMessageReaction_Call {
- return &MockClientCommandsServer_ChatToggleMessageReaction_Call{Call: _e.mock.On("ChatToggleMessageReaction", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatToggleMessageReaction_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatToggleMessageReactionRequest)) *MockClientCommandsServer_ChatToggleMessageReaction_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatToggleMessageReactionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatToggleMessageReaction_Call) Return(_a0 *pb.RpcChatToggleMessageReactionResponse) *MockClientCommandsServer_ChatToggleMessageReaction_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatToggleMessageReaction_Call) RunAndReturn(run func(context.Context, *pb.RpcChatToggleMessageReactionRequest) *pb.RpcChatToggleMessageReactionResponse) *MockClientCommandsServer_ChatToggleMessageReaction_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatUnreadMessages provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatUnreadMessages(_a0 context.Context, _a1 *pb.RpcChatUnreadRequest) *pb.RpcChatUnreadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatUnreadMessages")
- }
-
- var r0 *pb.RpcChatUnreadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatUnreadRequest) *pb.RpcChatUnreadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatUnreadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatUnreadMessages_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatUnreadMessages'
-type MockClientCommandsServer_ChatUnreadMessages_Call struct {
- *mock.Call
-}
-
-// ChatUnreadMessages is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatUnreadRequest
-func (_e *MockClientCommandsServer_Expecter) ChatUnreadMessages(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatUnreadMessages_Call {
- return &MockClientCommandsServer_ChatUnreadMessages_Call{Call: _e.mock.On("ChatUnreadMessages", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatUnreadMessages_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatUnreadRequest)) *MockClientCommandsServer_ChatUnreadMessages_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatUnreadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatUnreadMessages_Call) Return(_a0 *pb.RpcChatUnreadResponse) *MockClientCommandsServer_ChatUnreadMessages_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatUnreadMessages_Call) RunAndReturn(run func(context.Context, *pb.RpcChatUnreadRequest) *pb.RpcChatUnreadResponse) *MockClientCommandsServer_ChatUnreadMessages_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatUnsubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatUnsubscribe(_a0 context.Context, _a1 *pb.RpcChatUnsubscribeRequest) *pb.RpcChatUnsubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatUnsubscribe")
- }
-
- var r0 *pb.RpcChatUnsubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatUnsubscribeRequest) *pb.RpcChatUnsubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatUnsubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatUnsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatUnsubscribe'
-type MockClientCommandsServer_ChatUnsubscribe_Call struct {
- *mock.Call
-}
-
-// ChatUnsubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatUnsubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ChatUnsubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatUnsubscribe_Call {
- return &MockClientCommandsServer_ChatUnsubscribe_Call{Call: _e.mock.On("ChatUnsubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatUnsubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatUnsubscribeRequest)) *MockClientCommandsServer_ChatUnsubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatUnsubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatUnsubscribe_Call) Return(_a0 *pb.RpcChatUnsubscribeResponse) *MockClientCommandsServer_ChatUnsubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatUnsubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcChatUnsubscribeRequest) *pb.RpcChatUnsubscribeResponse) *MockClientCommandsServer_ChatUnsubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ChatUnsubscribeFromMessagePreviews provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ChatUnsubscribeFromMessagePreviews(_a0 context.Context, _a1 *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ChatUnsubscribeFromMessagePreviews")
- }
-
- var r0 *pb.RpcChatUnsubscribeFromMessagePreviewsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcChatUnsubscribeFromMessagePreviewsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ChatUnsubscribeFromMessagePreviews'
-type MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call struct {
- *mock.Call
-}
-
-// ChatUnsubscribeFromMessagePreviews is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcChatUnsubscribeFromMessagePreviewsRequest
-func (_e *MockClientCommandsServer_Expecter) ChatUnsubscribeFromMessagePreviews(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
- return &MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call{Call: _e.mock.On("ChatUnsubscribeFromMessagePreviews", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcChatUnsubscribeFromMessagePreviewsRequest)) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcChatUnsubscribeFromMessagePreviewsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call) Return(_a0 *pb.RpcChatUnsubscribeFromMessagePreviewsResponse) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call) RunAndReturn(run func(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse) *MockClientCommandsServer_ChatUnsubscribeFromMessagePreviews_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugAccountSelectTrace provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugAccountSelectTrace(_a0 context.Context, _a1 *pb.RpcDebugAccountSelectTraceRequest) *pb.RpcDebugAccountSelectTraceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugAccountSelectTrace")
- }
-
- var r0 *pb.RpcDebugAccountSelectTraceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugAccountSelectTraceRequest) *pb.RpcDebugAccountSelectTraceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugAccountSelectTraceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugAccountSelectTrace_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugAccountSelectTrace'
-type MockClientCommandsServer_DebugAccountSelectTrace_Call struct {
- *mock.Call
-}
-
-// DebugAccountSelectTrace is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugAccountSelectTraceRequest
-func (_e *MockClientCommandsServer_Expecter) DebugAccountSelectTrace(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugAccountSelectTrace_Call {
- return &MockClientCommandsServer_DebugAccountSelectTrace_Call{Call: _e.mock.On("DebugAccountSelectTrace", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugAccountSelectTrace_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugAccountSelectTraceRequest)) *MockClientCommandsServer_DebugAccountSelectTrace_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugAccountSelectTraceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugAccountSelectTrace_Call) Return(_a0 *pb.RpcDebugAccountSelectTraceResponse) *MockClientCommandsServer_DebugAccountSelectTrace_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugAccountSelectTrace_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugAccountSelectTraceRequest) *pb.RpcDebugAccountSelectTraceResponse) *MockClientCommandsServer_DebugAccountSelectTrace_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugAnystoreObjectChanges provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugAnystoreObjectChanges(_a0 context.Context, _a1 *pb.RpcDebugAnystoreObjectChangesRequest) *pb.RpcDebugAnystoreObjectChangesResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugAnystoreObjectChanges")
- }
-
- var r0 *pb.RpcDebugAnystoreObjectChangesResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugAnystoreObjectChangesRequest) *pb.RpcDebugAnystoreObjectChangesResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugAnystoreObjectChangesResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugAnystoreObjectChanges_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugAnystoreObjectChanges'
-type MockClientCommandsServer_DebugAnystoreObjectChanges_Call struct {
- *mock.Call
-}
-
-// DebugAnystoreObjectChanges is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugAnystoreObjectChangesRequest
-func (_e *MockClientCommandsServer_Expecter) DebugAnystoreObjectChanges(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugAnystoreObjectChanges_Call {
- return &MockClientCommandsServer_DebugAnystoreObjectChanges_Call{Call: _e.mock.On("DebugAnystoreObjectChanges", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugAnystoreObjectChanges_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugAnystoreObjectChangesRequest)) *MockClientCommandsServer_DebugAnystoreObjectChanges_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugAnystoreObjectChangesRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugAnystoreObjectChanges_Call) Return(_a0 *pb.RpcDebugAnystoreObjectChangesResponse) *MockClientCommandsServer_DebugAnystoreObjectChanges_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugAnystoreObjectChanges_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugAnystoreObjectChangesRequest) *pb.RpcDebugAnystoreObjectChangesResponse) *MockClientCommandsServer_DebugAnystoreObjectChanges_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugExportLocalstore provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugExportLocalstore(_a0 context.Context, _a1 *pb.RpcDebugExportLocalstoreRequest) *pb.RpcDebugExportLocalstoreResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugExportLocalstore")
- }
-
- var r0 *pb.RpcDebugExportLocalstoreResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugExportLocalstoreRequest) *pb.RpcDebugExportLocalstoreResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugExportLocalstoreResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugExportLocalstore_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugExportLocalstore'
-type MockClientCommandsServer_DebugExportLocalstore_Call struct {
- *mock.Call
-}
-
-// DebugExportLocalstore is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugExportLocalstoreRequest
-func (_e *MockClientCommandsServer_Expecter) DebugExportLocalstore(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugExportLocalstore_Call {
- return &MockClientCommandsServer_DebugExportLocalstore_Call{Call: _e.mock.On("DebugExportLocalstore", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugExportLocalstore_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugExportLocalstoreRequest)) *MockClientCommandsServer_DebugExportLocalstore_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugExportLocalstoreRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugExportLocalstore_Call) Return(_a0 *pb.RpcDebugExportLocalstoreResponse) *MockClientCommandsServer_DebugExportLocalstore_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugExportLocalstore_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugExportLocalstoreRequest) *pb.RpcDebugExportLocalstoreResponse) *MockClientCommandsServer_DebugExportLocalstore_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugExportLog provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugExportLog(_a0 context.Context, _a1 *pb.RpcDebugExportLogRequest) *pb.RpcDebugExportLogResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugExportLog")
- }
-
- var r0 *pb.RpcDebugExportLogResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugExportLogRequest) *pb.RpcDebugExportLogResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugExportLogResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugExportLog_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugExportLog'
-type MockClientCommandsServer_DebugExportLog_Call struct {
- *mock.Call
-}
-
-// DebugExportLog is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugExportLogRequest
-func (_e *MockClientCommandsServer_Expecter) DebugExportLog(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugExportLog_Call {
- return &MockClientCommandsServer_DebugExportLog_Call{Call: _e.mock.On("DebugExportLog", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugExportLog_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugExportLogRequest)) *MockClientCommandsServer_DebugExportLog_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugExportLogRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugExportLog_Call) Return(_a0 *pb.RpcDebugExportLogResponse) *MockClientCommandsServer_DebugExportLog_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugExportLog_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugExportLogRequest) *pb.RpcDebugExportLogResponse) *MockClientCommandsServer_DebugExportLog_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugNetCheck provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugNetCheck(_a0 context.Context, _a1 *pb.RpcDebugNetCheckRequest) *pb.RpcDebugNetCheckResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugNetCheck")
- }
-
- var r0 *pb.RpcDebugNetCheckResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugNetCheckRequest) *pb.RpcDebugNetCheckResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugNetCheckResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugNetCheck_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugNetCheck'
-type MockClientCommandsServer_DebugNetCheck_Call struct {
- *mock.Call
-}
-
-// DebugNetCheck is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugNetCheckRequest
-func (_e *MockClientCommandsServer_Expecter) DebugNetCheck(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugNetCheck_Call {
- return &MockClientCommandsServer_DebugNetCheck_Call{Call: _e.mock.On("DebugNetCheck", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugNetCheck_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugNetCheckRequest)) *MockClientCommandsServer_DebugNetCheck_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugNetCheckRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugNetCheck_Call) Return(_a0 *pb.RpcDebugNetCheckResponse) *MockClientCommandsServer_DebugNetCheck_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugNetCheck_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugNetCheckRequest) *pb.RpcDebugNetCheckResponse) *MockClientCommandsServer_DebugNetCheck_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugOpenedObjects provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugOpenedObjects(_a0 context.Context, _a1 *pb.RpcDebugOpenedObjectsRequest) *pb.RpcDebugOpenedObjectsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugOpenedObjects")
- }
-
- var r0 *pb.RpcDebugOpenedObjectsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugOpenedObjectsRequest) *pb.RpcDebugOpenedObjectsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugOpenedObjectsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugOpenedObjects_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugOpenedObjects'
-type MockClientCommandsServer_DebugOpenedObjects_Call struct {
- *mock.Call
-}
-
-// DebugOpenedObjects is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugOpenedObjectsRequest
-func (_e *MockClientCommandsServer_Expecter) DebugOpenedObjects(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugOpenedObjects_Call {
- return &MockClientCommandsServer_DebugOpenedObjects_Call{Call: _e.mock.On("DebugOpenedObjects", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugOpenedObjects_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugOpenedObjectsRequest)) *MockClientCommandsServer_DebugOpenedObjects_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugOpenedObjectsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugOpenedObjects_Call) Return(_a0 *pb.RpcDebugOpenedObjectsResponse) *MockClientCommandsServer_DebugOpenedObjects_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugOpenedObjects_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugOpenedObjectsRequest) *pb.RpcDebugOpenedObjectsResponse) *MockClientCommandsServer_DebugOpenedObjects_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugPing provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugPing(_a0 context.Context, _a1 *pb.RpcDebugPingRequest) *pb.RpcDebugPingResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugPing")
- }
-
- var r0 *pb.RpcDebugPingResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugPingRequest) *pb.RpcDebugPingResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugPingResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugPing_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugPing'
-type MockClientCommandsServer_DebugPing_Call struct {
- *mock.Call
-}
-
-// DebugPing is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugPingRequest
-func (_e *MockClientCommandsServer_Expecter) DebugPing(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugPing_Call {
- return &MockClientCommandsServer_DebugPing_Call{Call: _e.mock.On("DebugPing", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugPing_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugPingRequest)) *MockClientCommandsServer_DebugPing_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugPingRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugPing_Call) Return(_a0 *pb.RpcDebugPingResponse) *MockClientCommandsServer_DebugPing_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugPing_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugPingRequest) *pb.RpcDebugPingResponse) *MockClientCommandsServer_DebugPing_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugRunProfiler provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugRunProfiler(_a0 context.Context, _a1 *pb.RpcDebugRunProfilerRequest) *pb.RpcDebugRunProfilerResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugRunProfiler")
- }
-
- var r0 *pb.RpcDebugRunProfilerResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugRunProfilerRequest) *pb.RpcDebugRunProfilerResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugRunProfilerResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugRunProfiler_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugRunProfiler'
-type MockClientCommandsServer_DebugRunProfiler_Call struct {
- *mock.Call
-}
-
-// DebugRunProfiler is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugRunProfilerRequest
-func (_e *MockClientCommandsServer_Expecter) DebugRunProfiler(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugRunProfiler_Call {
- return &MockClientCommandsServer_DebugRunProfiler_Call{Call: _e.mock.On("DebugRunProfiler", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugRunProfiler_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugRunProfilerRequest)) *MockClientCommandsServer_DebugRunProfiler_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugRunProfilerRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugRunProfiler_Call) Return(_a0 *pb.RpcDebugRunProfilerResponse) *MockClientCommandsServer_DebugRunProfiler_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugRunProfiler_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugRunProfilerRequest) *pb.RpcDebugRunProfilerResponse) *MockClientCommandsServer_DebugRunProfiler_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugSpaceSummary provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugSpaceSummary(_a0 context.Context, _a1 *pb.RpcDebugSpaceSummaryRequest) *pb.RpcDebugSpaceSummaryResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugSpaceSummary")
- }
-
- var r0 *pb.RpcDebugSpaceSummaryResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugSpaceSummaryRequest) *pb.RpcDebugSpaceSummaryResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugSpaceSummaryResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugSpaceSummary_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugSpaceSummary'
-type MockClientCommandsServer_DebugSpaceSummary_Call struct {
- *mock.Call
-}
-
-// DebugSpaceSummary is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugSpaceSummaryRequest
-func (_e *MockClientCommandsServer_Expecter) DebugSpaceSummary(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugSpaceSummary_Call {
- return &MockClientCommandsServer_DebugSpaceSummary_Call{Call: _e.mock.On("DebugSpaceSummary", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugSpaceSummary_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugSpaceSummaryRequest)) *MockClientCommandsServer_DebugSpaceSummary_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugSpaceSummaryRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugSpaceSummary_Call) Return(_a0 *pb.RpcDebugSpaceSummaryResponse) *MockClientCommandsServer_DebugSpaceSummary_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugSpaceSummary_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugSpaceSummaryRequest) *pb.RpcDebugSpaceSummaryResponse) *MockClientCommandsServer_DebugSpaceSummary_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugStackGoroutines provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugStackGoroutines(_a0 context.Context, _a1 *pb.RpcDebugStackGoroutinesRequest) *pb.RpcDebugStackGoroutinesResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugStackGoroutines")
- }
-
- var r0 *pb.RpcDebugStackGoroutinesResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugStackGoroutinesRequest) *pb.RpcDebugStackGoroutinesResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugStackGoroutinesResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugStackGoroutines_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugStackGoroutines'
-type MockClientCommandsServer_DebugStackGoroutines_Call struct {
- *mock.Call
-}
-
-// DebugStackGoroutines is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugStackGoroutinesRequest
-func (_e *MockClientCommandsServer_Expecter) DebugStackGoroutines(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugStackGoroutines_Call {
- return &MockClientCommandsServer_DebugStackGoroutines_Call{Call: _e.mock.On("DebugStackGoroutines", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugStackGoroutines_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugStackGoroutinesRequest)) *MockClientCommandsServer_DebugStackGoroutines_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugStackGoroutinesRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugStackGoroutines_Call) Return(_a0 *pb.RpcDebugStackGoroutinesResponse) *MockClientCommandsServer_DebugStackGoroutines_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugStackGoroutines_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugStackGoroutinesRequest) *pb.RpcDebugStackGoroutinesResponse) *MockClientCommandsServer_DebugStackGoroutines_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugStat provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugStat(_a0 context.Context, _a1 *pb.RpcDebugStatRequest) *pb.RpcDebugStatResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugStat")
- }
-
- var r0 *pb.RpcDebugStatResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugStatRequest) *pb.RpcDebugStatResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugStatResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugStat_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugStat'
-type MockClientCommandsServer_DebugStat_Call struct {
- *mock.Call
-}
-
-// DebugStat is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugStatRequest
-func (_e *MockClientCommandsServer_Expecter) DebugStat(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugStat_Call {
- return &MockClientCommandsServer_DebugStat_Call{Call: _e.mock.On("DebugStat", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugStat_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugStatRequest)) *MockClientCommandsServer_DebugStat_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugStatRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugStat_Call) Return(_a0 *pb.RpcDebugStatResponse) *MockClientCommandsServer_DebugStat_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugStat_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugStatRequest) *pb.RpcDebugStatResponse) *MockClientCommandsServer_DebugStat_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugSubscriptions provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugSubscriptions(_a0 context.Context, _a1 *pb.RpcDebugSubscriptionsRequest) *pb.RpcDebugSubscriptionsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugSubscriptions")
- }
-
- var r0 *pb.RpcDebugSubscriptionsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugSubscriptionsRequest) *pb.RpcDebugSubscriptionsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugSubscriptionsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugSubscriptions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugSubscriptions'
-type MockClientCommandsServer_DebugSubscriptions_Call struct {
- *mock.Call
-}
-
-// DebugSubscriptions is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugSubscriptionsRequest
-func (_e *MockClientCommandsServer_Expecter) DebugSubscriptions(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugSubscriptions_Call {
- return &MockClientCommandsServer_DebugSubscriptions_Call{Call: _e.mock.On("DebugSubscriptions", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugSubscriptions_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugSubscriptionsRequest)) *MockClientCommandsServer_DebugSubscriptions_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugSubscriptionsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugSubscriptions_Call) Return(_a0 *pb.RpcDebugSubscriptionsResponse) *MockClientCommandsServer_DebugSubscriptions_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugSubscriptions_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugSubscriptionsRequest) *pb.RpcDebugSubscriptionsResponse) *MockClientCommandsServer_DebugSubscriptions_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugTree provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugTree(_a0 context.Context, _a1 *pb.RpcDebugTreeRequest) *pb.RpcDebugTreeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugTree")
- }
-
- var r0 *pb.RpcDebugTreeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugTreeRequest) *pb.RpcDebugTreeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugTreeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugTree_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugTree'
-type MockClientCommandsServer_DebugTree_Call struct {
- *mock.Call
-}
-
-// DebugTree is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugTreeRequest
-func (_e *MockClientCommandsServer_Expecter) DebugTree(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugTree_Call {
- return &MockClientCommandsServer_DebugTree_Call{Call: _e.mock.On("DebugTree", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugTree_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugTreeRequest)) *MockClientCommandsServer_DebugTree_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugTreeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugTree_Call) Return(_a0 *pb.RpcDebugTreeResponse) *MockClientCommandsServer_DebugTree_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugTree_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugTreeRequest) *pb.RpcDebugTreeResponse) *MockClientCommandsServer_DebugTree_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DebugTreeHeads provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DebugTreeHeads(_a0 context.Context, _a1 *pb.RpcDebugTreeHeadsRequest) *pb.RpcDebugTreeHeadsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DebugTreeHeads")
- }
-
- var r0 *pb.RpcDebugTreeHeadsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDebugTreeHeadsRequest) *pb.RpcDebugTreeHeadsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDebugTreeHeadsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DebugTreeHeads_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DebugTreeHeads'
-type MockClientCommandsServer_DebugTreeHeads_Call struct {
- *mock.Call
-}
-
-// DebugTreeHeads is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDebugTreeHeadsRequest
-func (_e *MockClientCommandsServer_Expecter) DebugTreeHeads(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DebugTreeHeads_Call {
- return &MockClientCommandsServer_DebugTreeHeads_Call{Call: _e.mock.On("DebugTreeHeads", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DebugTreeHeads_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDebugTreeHeadsRequest)) *MockClientCommandsServer_DebugTreeHeads_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDebugTreeHeadsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugTreeHeads_Call) Return(_a0 *pb.RpcDebugTreeHeadsResponse) *MockClientCommandsServer_DebugTreeHeads_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DebugTreeHeads_Call) RunAndReturn(run func(context.Context, *pb.RpcDebugTreeHeadsRequest) *pb.RpcDebugTreeHeadsResponse) *MockClientCommandsServer_DebugTreeHeads_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DeviceList provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DeviceList(_a0 context.Context, _a1 *pb.RpcDeviceListRequest) *pb.RpcDeviceListResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DeviceList")
- }
-
- var r0 *pb.RpcDeviceListResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDeviceListRequest) *pb.RpcDeviceListResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDeviceListResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DeviceList_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeviceList'
-type MockClientCommandsServer_DeviceList_Call struct {
- *mock.Call
-}
-
-// DeviceList is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDeviceListRequest
-func (_e *MockClientCommandsServer_Expecter) DeviceList(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DeviceList_Call {
- return &MockClientCommandsServer_DeviceList_Call{Call: _e.mock.On("DeviceList", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DeviceList_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDeviceListRequest)) *MockClientCommandsServer_DeviceList_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDeviceListRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DeviceList_Call) Return(_a0 *pb.RpcDeviceListResponse) *MockClientCommandsServer_DeviceList_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DeviceList_Call) RunAndReturn(run func(context.Context, *pb.RpcDeviceListRequest) *pb.RpcDeviceListResponse) *MockClientCommandsServer_DeviceList_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DeviceNetworkStateSet provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DeviceNetworkStateSet(_a0 context.Context, _a1 *pb.RpcDeviceNetworkStateSetRequest) *pb.RpcDeviceNetworkStateSetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DeviceNetworkStateSet")
- }
-
- var r0 *pb.RpcDeviceNetworkStateSetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDeviceNetworkStateSetRequest) *pb.RpcDeviceNetworkStateSetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDeviceNetworkStateSetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DeviceNetworkStateSet_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeviceNetworkStateSet'
-type MockClientCommandsServer_DeviceNetworkStateSet_Call struct {
- *mock.Call
-}
-
-// DeviceNetworkStateSet is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDeviceNetworkStateSetRequest
-func (_e *MockClientCommandsServer_Expecter) DeviceNetworkStateSet(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DeviceNetworkStateSet_Call {
- return &MockClientCommandsServer_DeviceNetworkStateSet_Call{Call: _e.mock.On("DeviceNetworkStateSet", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DeviceNetworkStateSet_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDeviceNetworkStateSetRequest)) *MockClientCommandsServer_DeviceNetworkStateSet_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDeviceNetworkStateSetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DeviceNetworkStateSet_Call) Return(_a0 *pb.RpcDeviceNetworkStateSetResponse) *MockClientCommandsServer_DeviceNetworkStateSet_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DeviceNetworkStateSet_Call) RunAndReturn(run func(context.Context, *pb.RpcDeviceNetworkStateSetRequest) *pb.RpcDeviceNetworkStateSetResponse) *MockClientCommandsServer_DeviceNetworkStateSet_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// DeviceSetName provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) DeviceSetName(_a0 context.Context, _a1 *pb.RpcDeviceSetNameRequest) *pb.RpcDeviceSetNameResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for DeviceSetName")
- }
-
- var r0 *pb.RpcDeviceSetNameResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcDeviceSetNameRequest) *pb.RpcDeviceSetNameResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcDeviceSetNameResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_DeviceSetName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeviceSetName'
-type MockClientCommandsServer_DeviceSetName_Call struct {
- *mock.Call
-}
-
-// DeviceSetName is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcDeviceSetNameRequest
-func (_e *MockClientCommandsServer_Expecter) DeviceSetName(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_DeviceSetName_Call {
- return &MockClientCommandsServer_DeviceSetName_Call{Call: _e.mock.On("DeviceSetName", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_DeviceSetName_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcDeviceSetNameRequest)) *MockClientCommandsServer_DeviceSetName_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcDeviceSetNameRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_DeviceSetName_Call) Return(_a0 *pb.RpcDeviceSetNameResponse) *MockClientCommandsServer_DeviceSetName_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_DeviceSetName_Call) RunAndReturn(run func(context.Context, *pb.RpcDeviceSetNameRequest) *pb.RpcDeviceSetNameResponse) *MockClientCommandsServer_DeviceSetName_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileDownload provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileDownload(_a0 context.Context, _a1 *pb.RpcFileDownloadRequest) *pb.RpcFileDownloadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileDownload")
- }
-
- var r0 *pb.RpcFileDownloadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileDownloadRequest) *pb.RpcFileDownloadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileDownloadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileDownload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileDownload'
-type MockClientCommandsServer_FileDownload_Call struct {
- *mock.Call
-}
-
-// FileDownload is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileDownloadRequest
-func (_e *MockClientCommandsServer_Expecter) FileDownload(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileDownload_Call {
- return &MockClientCommandsServer_FileDownload_Call{Call: _e.mock.On("FileDownload", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileDownload_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileDownloadRequest)) *MockClientCommandsServer_FileDownload_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileDownloadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileDownload_Call) Return(_a0 *pb.RpcFileDownloadResponse) *MockClientCommandsServer_FileDownload_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileDownload_Call) RunAndReturn(run func(context.Context, *pb.RpcFileDownloadRequest) *pb.RpcFileDownloadResponse) *MockClientCommandsServer_FileDownload_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileDrop provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileDrop(_a0 context.Context, _a1 *pb.RpcFileDropRequest) *pb.RpcFileDropResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileDrop")
- }
-
- var r0 *pb.RpcFileDropResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileDropRequest) *pb.RpcFileDropResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileDropResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileDrop_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileDrop'
-type MockClientCommandsServer_FileDrop_Call struct {
- *mock.Call
-}
-
-// FileDrop is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileDropRequest
-func (_e *MockClientCommandsServer_Expecter) FileDrop(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileDrop_Call {
- return &MockClientCommandsServer_FileDrop_Call{Call: _e.mock.On("FileDrop", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileDrop_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileDropRequest)) *MockClientCommandsServer_FileDrop_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileDropRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileDrop_Call) Return(_a0 *pb.RpcFileDropResponse) *MockClientCommandsServer_FileDrop_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileDrop_Call) RunAndReturn(run func(context.Context, *pb.RpcFileDropRequest) *pb.RpcFileDropResponse) *MockClientCommandsServer_FileDrop_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileListOffload provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileListOffload(_a0 context.Context, _a1 *pb.RpcFileListOffloadRequest) *pb.RpcFileListOffloadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileListOffload")
- }
-
- var r0 *pb.RpcFileListOffloadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileListOffloadRequest) *pb.RpcFileListOffloadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileListOffloadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileListOffload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileListOffload'
-type MockClientCommandsServer_FileListOffload_Call struct {
- *mock.Call
-}
-
-// FileListOffload is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileListOffloadRequest
-func (_e *MockClientCommandsServer_Expecter) FileListOffload(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileListOffload_Call {
- return &MockClientCommandsServer_FileListOffload_Call{Call: _e.mock.On("FileListOffload", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileListOffload_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileListOffloadRequest)) *MockClientCommandsServer_FileListOffload_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileListOffloadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileListOffload_Call) Return(_a0 *pb.RpcFileListOffloadResponse) *MockClientCommandsServer_FileListOffload_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileListOffload_Call) RunAndReturn(run func(context.Context, *pb.RpcFileListOffloadRequest) *pb.RpcFileListOffloadResponse) *MockClientCommandsServer_FileListOffload_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileNodeUsage provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileNodeUsage(_a0 context.Context, _a1 *pb.RpcFileNodeUsageRequest) *pb.RpcFileNodeUsageResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileNodeUsage")
- }
-
- var r0 *pb.RpcFileNodeUsageResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileNodeUsageRequest) *pb.RpcFileNodeUsageResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileNodeUsageResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileNodeUsage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileNodeUsage'
-type MockClientCommandsServer_FileNodeUsage_Call struct {
- *mock.Call
-}
-
-// FileNodeUsage is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileNodeUsageRequest
-func (_e *MockClientCommandsServer_Expecter) FileNodeUsage(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileNodeUsage_Call {
- return &MockClientCommandsServer_FileNodeUsage_Call{Call: _e.mock.On("FileNodeUsage", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileNodeUsage_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileNodeUsageRequest)) *MockClientCommandsServer_FileNodeUsage_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileNodeUsageRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileNodeUsage_Call) Return(_a0 *pb.RpcFileNodeUsageResponse) *MockClientCommandsServer_FileNodeUsage_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileNodeUsage_Call) RunAndReturn(run func(context.Context, *pb.RpcFileNodeUsageRequest) *pb.RpcFileNodeUsageResponse) *MockClientCommandsServer_FileNodeUsage_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileReconcile provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileReconcile(_a0 context.Context, _a1 *pb.RpcFileReconcileRequest) *pb.RpcFileReconcileResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileReconcile")
- }
-
- var r0 *pb.RpcFileReconcileResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileReconcileRequest) *pb.RpcFileReconcileResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileReconcileResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileReconcile_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileReconcile'
-type MockClientCommandsServer_FileReconcile_Call struct {
- *mock.Call
-}
-
-// FileReconcile is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileReconcileRequest
-func (_e *MockClientCommandsServer_Expecter) FileReconcile(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileReconcile_Call {
- return &MockClientCommandsServer_FileReconcile_Call{Call: _e.mock.On("FileReconcile", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileReconcile_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileReconcileRequest)) *MockClientCommandsServer_FileReconcile_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileReconcileRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileReconcile_Call) Return(_a0 *pb.RpcFileReconcileResponse) *MockClientCommandsServer_FileReconcile_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileReconcile_Call) RunAndReturn(run func(context.Context, *pb.RpcFileReconcileRequest) *pb.RpcFileReconcileResponse) *MockClientCommandsServer_FileReconcile_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileSpaceOffload provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileSpaceOffload(_a0 context.Context, _a1 *pb.RpcFileSpaceOffloadRequest) *pb.RpcFileSpaceOffloadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileSpaceOffload")
- }
-
- var r0 *pb.RpcFileSpaceOffloadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileSpaceOffloadRequest) *pb.RpcFileSpaceOffloadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileSpaceOffloadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileSpaceOffload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileSpaceOffload'
-type MockClientCommandsServer_FileSpaceOffload_Call struct {
- *mock.Call
-}
-
-// FileSpaceOffload is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileSpaceOffloadRequest
-func (_e *MockClientCommandsServer_Expecter) FileSpaceOffload(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileSpaceOffload_Call {
- return &MockClientCommandsServer_FileSpaceOffload_Call{Call: _e.mock.On("FileSpaceOffload", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileSpaceOffload_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileSpaceOffloadRequest)) *MockClientCommandsServer_FileSpaceOffload_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileSpaceOffloadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileSpaceOffload_Call) Return(_a0 *pb.RpcFileSpaceOffloadResponse) *MockClientCommandsServer_FileSpaceOffload_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileSpaceOffload_Call) RunAndReturn(run func(context.Context, *pb.RpcFileSpaceOffloadRequest) *pb.RpcFileSpaceOffloadResponse) *MockClientCommandsServer_FileSpaceOffload_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileSpaceUsage provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileSpaceUsage(_a0 context.Context, _a1 *pb.RpcFileSpaceUsageRequest) *pb.RpcFileSpaceUsageResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileSpaceUsage")
- }
-
- var r0 *pb.RpcFileSpaceUsageResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileSpaceUsageRequest) *pb.RpcFileSpaceUsageResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileSpaceUsageResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileSpaceUsage_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileSpaceUsage'
-type MockClientCommandsServer_FileSpaceUsage_Call struct {
- *mock.Call
-}
-
-// FileSpaceUsage is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileSpaceUsageRequest
-func (_e *MockClientCommandsServer_Expecter) FileSpaceUsage(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileSpaceUsage_Call {
- return &MockClientCommandsServer_FileSpaceUsage_Call{Call: _e.mock.On("FileSpaceUsage", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileSpaceUsage_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileSpaceUsageRequest)) *MockClientCommandsServer_FileSpaceUsage_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileSpaceUsageRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileSpaceUsage_Call) Return(_a0 *pb.RpcFileSpaceUsageResponse) *MockClientCommandsServer_FileSpaceUsage_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileSpaceUsage_Call) RunAndReturn(run func(context.Context, *pb.RpcFileSpaceUsageRequest) *pb.RpcFileSpaceUsageResponse) *MockClientCommandsServer_FileSpaceUsage_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// FileUpload provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) FileUpload(_a0 context.Context, _a1 *pb.RpcFileUploadRequest) *pb.RpcFileUploadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for FileUpload")
- }
-
- var r0 *pb.RpcFileUploadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcFileUploadRequest) *pb.RpcFileUploadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcFileUploadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_FileUpload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FileUpload'
-type MockClientCommandsServer_FileUpload_Call struct {
- *mock.Call
-}
-
-// FileUpload is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcFileUploadRequest
-func (_e *MockClientCommandsServer_Expecter) FileUpload(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_FileUpload_Call {
- return &MockClientCommandsServer_FileUpload_Call{Call: _e.mock.On("FileUpload", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_FileUpload_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcFileUploadRequest)) *MockClientCommandsServer_FileUpload_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcFileUploadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileUpload_Call) Return(_a0 *pb.RpcFileUploadResponse) *MockClientCommandsServer_FileUpload_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_FileUpload_Call) RunAndReturn(run func(context.Context, *pb.RpcFileUploadRequest) *pb.RpcFileUploadResponse) *MockClientCommandsServer_FileUpload_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// GalleryDownloadIndex provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) GalleryDownloadIndex(_a0 context.Context, _a1 *pb.RpcGalleryDownloadIndexRequest) *pb.RpcGalleryDownloadIndexResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for GalleryDownloadIndex")
- }
-
- var r0 *pb.RpcGalleryDownloadIndexResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcGalleryDownloadIndexRequest) *pb.RpcGalleryDownloadIndexResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcGalleryDownloadIndexResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_GalleryDownloadIndex_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GalleryDownloadIndex'
-type MockClientCommandsServer_GalleryDownloadIndex_Call struct {
- *mock.Call
-}
-
-// GalleryDownloadIndex is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcGalleryDownloadIndexRequest
-func (_e *MockClientCommandsServer_Expecter) GalleryDownloadIndex(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_GalleryDownloadIndex_Call {
- return &MockClientCommandsServer_GalleryDownloadIndex_Call{Call: _e.mock.On("GalleryDownloadIndex", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_GalleryDownloadIndex_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcGalleryDownloadIndexRequest)) *MockClientCommandsServer_GalleryDownloadIndex_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcGalleryDownloadIndexRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_GalleryDownloadIndex_Call) Return(_a0 *pb.RpcGalleryDownloadIndexResponse) *MockClientCommandsServer_GalleryDownloadIndex_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_GalleryDownloadIndex_Call) RunAndReturn(run func(context.Context, *pb.RpcGalleryDownloadIndexRequest) *pb.RpcGalleryDownloadIndexResponse) *MockClientCommandsServer_GalleryDownloadIndex_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// GalleryDownloadManifest provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) GalleryDownloadManifest(_a0 context.Context, _a1 *pb.RpcGalleryDownloadManifestRequest) *pb.RpcGalleryDownloadManifestResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for GalleryDownloadManifest")
- }
-
- var r0 *pb.RpcGalleryDownloadManifestResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcGalleryDownloadManifestRequest) *pb.RpcGalleryDownloadManifestResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcGalleryDownloadManifestResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_GalleryDownloadManifest_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GalleryDownloadManifest'
-type MockClientCommandsServer_GalleryDownloadManifest_Call struct {
- *mock.Call
-}
-
-// GalleryDownloadManifest is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcGalleryDownloadManifestRequest
-func (_e *MockClientCommandsServer_Expecter) GalleryDownloadManifest(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_GalleryDownloadManifest_Call {
- return &MockClientCommandsServer_GalleryDownloadManifest_Call{Call: _e.mock.On("GalleryDownloadManifest", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_GalleryDownloadManifest_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcGalleryDownloadManifestRequest)) *MockClientCommandsServer_GalleryDownloadManifest_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcGalleryDownloadManifestRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_GalleryDownloadManifest_Call) Return(_a0 *pb.RpcGalleryDownloadManifestResponse) *MockClientCommandsServer_GalleryDownloadManifest_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_GalleryDownloadManifest_Call) RunAndReturn(run func(context.Context, *pb.RpcGalleryDownloadManifestRequest) *pb.RpcGalleryDownloadManifestResponse) *MockClientCommandsServer_GalleryDownloadManifest_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// HistoryDiffVersions provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) HistoryDiffVersions(_a0 context.Context, _a1 *pb.RpcHistoryDiffVersionsRequest) *pb.RpcHistoryDiffVersionsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for HistoryDiffVersions")
- }
-
- var r0 *pb.RpcHistoryDiffVersionsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcHistoryDiffVersionsRequest) *pb.RpcHistoryDiffVersionsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcHistoryDiffVersionsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_HistoryDiffVersions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HistoryDiffVersions'
-type MockClientCommandsServer_HistoryDiffVersions_Call struct {
- *mock.Call
-}
-
-// HistoryDiffVersions is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcHistoryDiffVersionsRequest
-func (_e *MockClientCommandsServer_Expecter) HistoryDiffVersions(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_HistoryDiffVersions_Call {
- return &MockClientCommandsServer_HistoryDiffVersions_Call{Call: _e.mock.On("HistoryDiffVersions", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_HistoryDiffVersions_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcHistoryDiffVersionsRequest)) *MockClientCommandsServer_HistoryDiffVersions_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcHistoryDiffVersionsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistoryDiffVersions_Call) Return(_a0 *pb.RpcHistoryDiffVersionsResponse) *MockClientCommandsServer_HistoryDiffVersions_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistoryDiffVersions_Call) RunAndReturn(run func(context.Context, *pb.RpcHistoryDiffVersionsRequest) *pb.RpcHistoryDiffVersionsResponse) *MockClientCommandsServer_HistoryDiffVersions_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// HistoryGetVersions provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) HistoryGetVersions(_a0 context.Context, _a1 *pb.RpcHistoryGetVersionsRequest) *pb.RpcHistoryGetVersionsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for HistoryGetVersions")
- }
-
- var r0 *pb.RpcHistoryGetVersionsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcHistoryGetVersionsRequest) *pb.RpcHistoryGetVersionsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcHistoryGetVersionsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_HistoryGetVersions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HistoryGetVersions'
-type MockClientCommandsServer_HistoryGetVersions_Call struct {
- *mock.Call
-}
-
-// HistoryGetVersions is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcHistoryGetVersionsRequest
-func (_e *MockClientCommandsServer_Expecter) HistoryGetVersions(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_HistoryGetVersions_Call {
- return &MockClientCommandsServer_HistoryGetVersions_Call{Call: _e.mock.On("HistoryGetVersions", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_HistoryGetVersions_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcHistoryGetVersionsRequest)) *MockClientCommandsServer_HistoryGetVersions_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcHistoryGetVersionsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistoryGetVersions_Call) Return(_a0 *pb.RpcHistoryGetVersionsResponse) *MockClientCommandsServer_HistoryGetVersions_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistoryGetVersions_Call) RunAndReturn(run func(context.Context, *pb.RpcHistoryGetVersionsRequest) *pb.RpcHistoryGetVersionsResponse) *MockClientCommandsServer_HistoryGetVersions_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// HistorySetVersion provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) HistorySetVersion(_a0 context.Context, _a1 *pb.RpcHistorySetVersionRequest) *pb.RpcHistorySetVersionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for HistorySetVersion")
- }
-
- var r0 *pb.RpcHistorySetVersionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcHistorySetVersionRequest) *pb.RpcHistorySetVersionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcHistorySetVersionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_HistorySetVersion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HistorySetVersion'
-type MockClientCommandsServer_HistorySetVersion_Call struct {
- *mock.Call
-}
-
-// HistorySetVersion is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcHistorySetVersionRequest
-func (_e *MockClientCommandsServer_Expecter) HistorySetVersion(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_HistorySetVersion_Call {
- return &MockClientCommandsServer_HistorySetVersion_Call{Call: _e.mock.On("HistorySetVersion", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_HistorySetVersion_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcHistorySetVersionRequest)) *MockClientCommandsServer_HistorySetVersion_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcHistorySetVersionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistorySetVersion_Call) Return(_a0 *pb.RpcHistorySetVersionResponse) *MockClientCommandsServer_HistorySetVersion_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistorySetVersion_Call) RunAndReturn(run func(context.Context, *pb.RpcHistorySetVersionRequest) *pb.RpcHistorySetVersionResponse) *MockClientCommandsServer_HistorySetVersion_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// HistoryShowVersion provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) HistoryShowVersion(_a0 context.Context, _a1 *pb.RpcHistoryShowVersionRequest) *pb.RpcHistoryShowVersionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for HistoryShowVersion")
- }
-
- var r0 *pb.RpcHistoryShowVersionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcHistoryShowVersionRequest) *pb.RpcHistoryShowVersionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcHistoryShowVersionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_HistoryShowVersion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'HistoryShowVersion'
-type MockClientCommandsServer_HistoryShowVersion_Call struct {
- *mock.Call
-}
-
-// HistoryShowVersion is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcHistoryShowVersionRequest
-func (_e *MockClientCommandsServer_Expecter) HistoryShowVersion(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_HistoryShowVersion_Call {
- return &MockClientCommandsServer_HistoryShowVersion_Call{Call: _e.mock.On("HistoryShowVersion", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_HistoryShowVersion_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcHistoryShowVersionRequest)) *MockClientCommandsServer_HistoryShowVersion_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcHistoryShowVersionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistoryShowVersion_Call) Return(_a0 *pb.RpcHistoryShowVersionResponse) *MockClientCommandsServer_HistoryShowVersion_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_HistoryShowVersion_Call) RunAndReturn(run func(context.Context, *pb.RpcHistoryShowVersionRequest) *pb.RpcHistoryShowVersionResponse) *MockClientCommandsServer_HistoryShowVersion_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// InitialSetParameters provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) InitialSetParameters(_a0 context.Context, _a1 *pb.RpcInitialSetParametersRequest) *pb.RpcInitialSetParametersResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for InitialSetParameters")
- }
-
- var r0 *pb.RpcInitialSetParametersResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcInitialSetParametersRequest) *pb.RpcInitialSetParametersResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcInitialSetParametersResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_InitialSetParameters_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'InitialSetParameters'
-type MockClientCommandsServer_InitialSetParameters_Call struct {
- *mock.Call
-}
-
-// InitialSetParameters is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcInitialSetParametersRequest
-func (_e *MockClientCommandsServer_Expecter) InitialSetParameters(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_InitialSetParameters_Call {
- return &MockClientCommandsServer_InitialSetParameters_Call{Call: _e.mock.On("InitialSetParameters", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_InitialSetParameters_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcInitialSetParametersRequest)) *MockClientCommandsServer_InitialSetParameters_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcInitialSetParametersRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_InitialSetParameters_Call) Return(_a0 *pb.RpcInitialSetParametersResponse) *MockClientCommandsServer_InitialSetParameters_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_InitialSetParameters_Call) RunAndReturn(run func(context.Context, *pb.RpcInitialSetParametersRequest) *pb.RpcInitialSetParametersResponse) *MockClientCommandsServer_InitialSetParameters_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// LinkPreview provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) LinkPreview(_a0 context.Context, _a1 *pb.RpcLinkPreviewRequest) *pb.RpcLinkPreviewResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for LinkPreview")
- }
-
- var r0 *pb.RpcLinkPreviewResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcLinkPreviewRequest) *pb.RpcLinkPreviewResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcLinkPreviewResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_LinkPreview_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'LinkPreview'
-type MockClientCommandsServer_LinkPreview_Call struct {
- *mock.Call
-}
-
-// LinkPreview is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcLinkPreviewRequest
-func (_e *MockClientCommandsServer_Expecter) LinkPreview(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_LinkPreview_Call {
- return &MockClientCommandsServer_LinkPreview_Call{Call: _e.mock.On("LinkPreview", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_LinkPreview_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcLinkPreviewRequest)) *MockClientCommandsServer_LinkPreview_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcLinkPreviewRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_LinkPreview_Call) Return(_a0 *pb.RpcLinkPreviewResponse) *MockClientCommandsServer_LinkPreview_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_LinkPreview_Call) RunAndReturn(run func(context.Context, *pb.RpcLinkPreviewRequest) *pb.RpcLinkPreviewResponse) *MockClientCommandsServer_LinkPreview_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ListenSessionEvents provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ListenSessionEvents(_a0 *pb.StreamRequest, _a1 service.ClientCommands_ListenSessionEventsServer) {
- _m.Called(_a0, _a1)
-}
-
-// MockClientCommandsServer_ListenSessionEvents_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListenSessionEvents'
-type MockClientCommandsServer_ListenSessionEvents_Call struct {
- *mock.Call
-}
-
-// ListenSessionEvents is a helper method to define mock.On call
-// - _a0 *pb.StreamRequest
-// - _a1 service.ClientCommands_ListenSessionEventsServer
-func (_e *MockClientCommandsServer_Expecter) ListenSessionEvents(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ListenSessionEvents_Call {
- return &MockClientCommandsServer_ListenSessionEvents_Call{Call: _e.mock.On("ListenSessionEvents", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ListenSessionEvents_Call) Run(run func(_a0 *pb.StreamRequest, _a1 service.ClientCommands_ListenSessionEventsServer)) *MockClientCommandsServer_ListenSessionEvents_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(*pb.StreamRequest), args[1].(service.ClientCommands_ListenSessionEventsServer))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ListenSessionEvents_Call) Return() *MockClientCommandsServer_ListenSessionEvents_Call {
- _c.Call.Return()
- return _c
-}
-
-func (_c *MockClientCommandsServer_ListenSessionEvents_Call) RunAndReturn(run func(*pb.StreamRequest, service.ClientCommands_ListenSessionEventsServer)) *MockClientCommandsServer_ListenSessionEvents_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// LogSend provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) LogSend(_a0 context.Context, _a1 *pb.RpcLogSendRequest) *pb.RpcLogSendResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for LogSend")
- }
-
- var r0 *pb.RpcLogSendResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcLogSendRequest) *pb.RpcLogSendResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcLogSendResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_LogSend_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'LogSend'
-type MockClientCommandsServer_LogSend_Call struct {
- *mock.Call
-}
-
-// LogSend is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcLogSendRequest
-func (_e *MockClientCommandsServer_Expecter) LogSend(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_LogSend_Call {
- return &MockClientCommandsServer_LogSend_Call{Call: _e.mock.On("LogSend", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_LogSend_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcLogSendRequest)) *MockClientCommandsServer_LogSend_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcLogSendRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_LogSend_Call) Return(_a0 *pb.RpcLogSendResponse) *MockClientCommandsServer_LogSend_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_LogSend_Call) RunAndReturn(run func(context.Context, *pb.RpcLogSendRequest) *pb.RpcLogSendResponse) *MockClientCommandsServer_LogSend_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipFinalize provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipFinalize(_a0 context.Context, _a1 *pb.RpcMembershipFinalizeRequest) *pb.RpcMembershipFinalizeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipFinalize")
- }
-
- var r0 *pb.RpcMembershipFinalizeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipFinalizeRequest) *pb.RpcMembershipFinalizeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipFinalizeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipFinalize_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipFinalize'
-type MockClientCommandsServer_MembershipFinalize_Call struct {
- *mock.Call
-}
-
-// MembershipFinalize is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipFinalizeRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipFinalize(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipFinalize_Call {
- return &MockClientCommandsServer_MembershipFinalize_Call{Call: _e.mock.On("MembershipFinalize", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipFinalize_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipFinalizeRequest)) *MockClientCommandsServer_MembershipFinalize_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipFinalizeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipFinalize_Call) Return(_a0 *pb.RpcMembershipFinalizeResponse) *MockClientCommandsServer_MembershipFinalize_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipFinalize_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipFinalizeRequest) *pb.RpcMembershipFinalizeResponse) *MockClientCommandsServer_MembershipFinalize_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipGetPortalLinkUrl provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipGetPortalLinkUrl(_a0 context.Context, _a1 *pb.RpcMembershipGetPortalLinkUrlRequest) *pb.RpcMembershipGetPortalLinkUrlResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipGetPortalLinkUrl")
- }
-
- var r0 *pb.RpcMembershipGetPortalLinkUrlResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipGetPortalLinkUrlRequest) *pb.RpcMembershipGetPortalLinkUrlResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipGetPortalLinkUrlResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipGetPortalLinkUrl_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipGetPortalLinkUrl'
-type MockClientCommandsServer_MembershipGetPortalLinkUrl_Call struct {
- *mock.Call
-}
-
-// MembershipGetPortalLinkUrl is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipGetPortalLinkUrlRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipGetPortalLinkUrl(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipGetPortalLinkUrl_Call {
- return &MockClientCommandsServer_MembershipGetPortalLinkUrl_Call{Call: _e.mock.On("MembershipGetPortalLinkUrl", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipGetPortalLinkUrl_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipGetPortalLinkUrlRequest)) *MockClientCommandsServer_MembershipGetPortalLinkUrl_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipGetPortalLinkUrlRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetPortalLinkUrl_Call) Return(_a0 *pb.RpcMembershipGetPortalLinkUrlResponse) *MockClientCommandsServer_MembershipGetPortalLinkUrl_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetPortalLinkUrl_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipGetPortalLinkUrlRequest) *pb.RpcMembershipGetPortalLinkUrlResponse) *MockClientCommandsServer_MembershipGetPortalLinkUrl_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipGetStatus provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipGetStatus(_a0 context.Context, _a1 *pb.RpcMembershipGetStatusRequest) *pb.RpcMembershipGetStatusResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipGetStatus")
- }
-
- var r0 *pb.RpcMembershipGetStatusResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipGetStatusRequest) *pb.RpcMembershipGetStatusResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipGetStatusResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipGetStatus_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipGetStatus'
-type MockClientCommandsServer_MembershipGetStatus_Call struct {
- *mock.Call
-}
-
-// MembershipGetStatus is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipGetStatusRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipGetStatus(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipGetStatus_Call {
- return &MockClientCommandsServer_MembershipGetStatus_Call{Call: _e.mock.On("MembershipGetStatus", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipGetStatus_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipGetStatusRequest)) *MockClientCommandsServer_MembershipGetStatus_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipGetStatusRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetStatus_Call) Return(_a0 *pb.RpcMembershipGetStatusResponse) *MockClientCommandsServer_MembershipGetStatus_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetStatus_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipGetStatusRequest) *pb.RpcMembershipGetStatusResponse) *MockClientCommandsServer_MembershipGetStatus_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipGetTiers provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipGetTiers(_a0 context.Context, _a1 *pb.RpcMembershipGetTiersRequest) *pb.RpcMembershipGetTiersResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipGetTiers")
- }
-
- var r0 *pb.RpcMembershipGetTiersResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipGetTiersRequest) *pb.RpcMembershipGetTiersResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipGetTiersResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipGetTiers_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipGetTiers'
-type MockClientCommandsServer_MembershipGetTiers_Call struct {
- *mock.Call
-}
-
-// MembershipGetTiers is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipGetTiersRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipGetTiers(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipGetTiers_Call {
- return &MockClientCommandsServer_MembershipGetTiers_Call{Call: _e.mock.On("MembershipGetTiers", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipGetTiers_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipGetTiersRequest)) *MockClientCommandsServer_MembershipGetTiers_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipGetTiersRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetTiers_Call) Return(_a0 *pb.RpcMembershipGetTiersResponse) *MockClientCommandsServer_MembershipGetTiers_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetTiers_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipGetTiersRequest) *pb.RpcMembershipGetTiersResponse) *MockClientCommandsServer_MembershipGetTiers_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipGetVerificationEmail provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipGetVerificationEmail(_a0 context.Context, _a1 *pb.RpcMembershipGetVerificationEmailRequest) *pb.RpcMembershipGetVerificationEmailResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipGetVerificationEmail")
- }
-
- var r0 *pb.RpcMembershipGetVerificationEmailResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipGetVerificationEmailRequest) *pb.RpcMembershipGetVerificationEmailResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipGetVerificationEmailResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipGetVerificationEmail_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipGetVerificationEmail'
-type MockClientCommandsServer_MembershipGetVerificationEmail_Call struct {
- *mock.Call
-}
-
-// MembershipGetVerificationEmail is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipGetVerificationEmailRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipGetVerificationEmail(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipGetVerificationEmail_Call {
- return &MockClientCommandsServer_MembershipGetVerificationEmail_Call{Call: _e.mock.On("MembershipGetVerificationEmail", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipGetVerificationEmail_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipGetVerificationEmailRequest)) *MockClientCommandsServer_MembershipGetVerificationEmail_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipGetVerificationEmailRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetVerificationEmail_Call) Return(_a0 *pb.RpcMembershipGetVerificationEmailResponse) *MockClientCommandsServer_MembershipGetVerificationEmail_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetVerificationEmail_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipGetVerificationEmailRequest) *pb.RpcMembershipGetVerificationEmailResponse) *MockClientCommandsServer_MembershipGetVerificationEmail_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipGetVerificationEmailStatus provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipGetVerificationEmailStatus(_a0 context.Context, _a1 *pb.RpcMembershipGetVerificationEmailStatusRequest) *pb.RpcMembershipGetVerificationEmailStatusResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipGetVerificationEmailStatus")
- }
-
- var r0 *pb.RpcMembershipGetVerificationEmailStatusResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipGetVerificationEmailStatusRequest) *pb.RpcMembershipGetVerificationEmailStatusResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipGetVerificationEmailStatusResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipGetVerificationEmailStatus'
-type MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call struct {
- *mock.Call
-}
-
-// MembershipGetVerificationEmailStatus is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipGetVerificationEmailStatusRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipGetVerificationEmailStatus(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call {
- return &MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call{Call: _e.mock.On("MembershipGetVerificationEmailStatus", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipGetVerificationEmailStatusRequest)) *MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipGetVerificationEmailStatusRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call) Return(_a0 *pb.RpcMembershipGetVerificationEmailStatusResponse) *MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipGetVerificationEmailStatusRequest) *pb.RpcMembershipGetVerificationEmailStatusResponse) *MockClientCommandsServer_MembershipGetVerificationEmailStatus_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipIsNameValid provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipIsNameValid(_a0 context.Context, _a1 *pb.RpcMembershipIsNameValidRequest) *pb.RpcMembershipIsNameValidResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipIsNameValid")
- }
-
- var r0 *pb.RpcMembershipIsNameValidResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipIsNameValidRequest) *pb.RpcMembershipIsNameValidResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipIsNameValidResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipIsNameValid_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipIsNameValid'
-type MockClientCommandsServer_MembershipIsNameValid_Call struct {
- *mock.Call
-}
-
-// MembershipIsNameValid is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipIsNameValidRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipIsNameValid(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipIsNameValid_Call {
- return &MockClientCommandsServer_MembershipIsNameValid_Call{Call: _e.mock.On("MembershipIsNameValid", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipIsNameValid_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipIsNameValidRequest)) *MockClientCommandsServer_MembershipIsNameValid_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipIsNameValidRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipIsNameValid_Call) Return(_a0 *pb.RpcMembershipIsNameValidResponse) *MockClientCommandsServer_MembershipIsNameValid_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipIsNameValid_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipIsNameValidRequest) *pb.RpcMembershipIsNameValidResponse) *MockClientCommandsServer_MembershipIsNameValid_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipRegisterPaymentRequest provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipRegisterPaymentRequest(_a0 context.Context, _a1 *pb.RpcMembershipRegisterPaymentRequestRequest) *pb.RpcMembershipRegisterPaymentRequestResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipRegisterPaymentRequest")
- }
-
- var r0 *pb.RpcMembershipRegisterPaymentRequestResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipRegisterPaymentRequestRequest) *pb.RpcMembershipRegisterPaymentRequestResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipRegisterPaymentRequestResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipRegisterPaymentRequest_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipRegisterPaymentRequest'
-type MockClientCommandsServer_MembershipRegisterPaymentRequest_Call struct {
- *mock.Call
-}
-
-// MembershipRegisterPaymentRequest is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipRegisterPaymentRequestRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipRegisterPaymentRequest(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipRegisterPaymentRequest_Call {
- return &MockClientCommandsServer_MembershipRegisterPaymentRequest_Call{Call: _e.mock.On("MembershipRegisterPaymentRequest", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipRegisterPaymentRequest_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipRegisterPaymentRequestRequest)) *MockClientCommandsServer_MembershipRegisterPaymentRequest_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipRegisterPaymentRequestRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipRegisterPaymentRequest_Call) Return(_a0 *pb.RpcMembershipRegisterPaymentRequestResponse) *MockClientCommandsServer_MembershipRegisterPaymentRequest_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipRegisterPaymentRequest_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipRegisterPaymentRequestRequest) *pb.RpcMembershipRegisterPaymentRequestResponse) *MockClientCommandsServer_MembershipRegisterPaymentRequest_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipVerifyAppStoreReceipt provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipVerifyAppStoreReceipt(_a0 context.Context, _a1 *pb.RpcMembershipVerifyAppStoreReceiptRequest) *pb.RpcMembershipVerifyAppStoreReceiptResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipVerifyAppStoreReceipt")
- }
-
- var r0 *pb.RpcMembershipVerifyAppStoreReceiptResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipVerifyAppStoreReceiptRequest) *pb.RpcMembershipVerifyAppStoreReceiptResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipVerifyAppStoreReceiptResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipVerifyAppStoreReceipt'
-type MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call struct {
- *mock.Call
-}
-
-// MembershipVerifyAppStoreReceipt is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipVerifyAppStoreReceiptRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipVerifyAppStoreReceipt(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call {
- return &MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call{Call: _e.mock.On("MembershipVerifyAppStoreReceipt", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipVerifyAppStoreReceiptRequest)) *MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipVerifyAppStoreReceiptRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call) Return(_a0 *pb.RpcMembershipVerifyAppStoreReceiptResponse) *MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipVerifyAppStoreReceiptRequest) *pb.RpcMembershipVerifyAppStoreReceiptResponse) *MockClientCommandsServer_MembershipVerifyAppStoreReceipt_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// MembershipVerifyEmailCode provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) MembershipVerifyEmailCode(_a0 context.Context, _a1 *pb.RpcMembershipVerifyEmailCodeRequest) *pb.RpcMembershipVerifyEmailCodeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for MembershipVerifyEmailCode")
- }
-
- var r0 *pb.RpcMembershipVerifyEmailCodeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcMembershipVerifyEmailCodeRequest) *pb.RpcMembershipVerifyEmailCodeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcMembershipVerifyEmailCodeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_MembershipVerifyEmailCode_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'MembershipVerifyEmailCode'
-type MockClientCommandsServer_MembershipVerifyEmailCode_Call struct {
- *mock.Call
-}
-
-// MembershipVerifyEmailCode is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcMembershipVerifyEmailCodeRequest
-func (_e *MockClientCommandsServer_Expecter) MembershipVerifyEmailCode(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_MembershipVerifyEmailCode_Call {
- return &MockClientCommandsServer_MembershipVerifyEmailCode_Call{Call: _e.mock.On("MembershipVerifyEmailCode", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_MembershipVerifyEmailCode_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcMembershipVerifyEmailCodeRequest)) *MockClientCommandsServer_MembershipVerifyEmailCode_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcMembershipVerifyEmailCodeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipVerifyEmailCode_Call) Return(_a0 *pb.RpcMembershipVerifyEmailCodeResponse) *MockClientCommandsServer_MembershipVerifyEmailCode_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_MembershipVerifyEmailCode_Call) RunAndReturn(run func(context.Context, *pb.RpcMembershipVerifyEmailCodeRequest) *pb.RpcMembershipVerifyEmailCodeResponse) *MockClientCommandsServer_MembershipVerifyEmailCode_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NameServiceResolveAnyId provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NameServiceResolveAnyId(_a0 context.Context, _a1 *pb.RpcNameServiceResolveAnyIdRequest) *pb.RpcNameServiceResolveAnyIdResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NameServiceResolveAnyId")
- }
-
- var r0 *pb.RpcNameServiceResolveAnyIdResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNameServiceResolveAnyIdRequest) *pb.RpcNameServiceResolveAnyIdResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNameServiceResolveAnyIdResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NameServiceResolveAnyId_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NameServiceResolveAnyId'
-type MockClientCommandsServer_NameServiceResolveAnyId_Call struct {
- *mock.Call
-}
-
-// NameServiceResolveAnyId is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNameServiceResolveAnyIdRequest
-func (_e *MockClientCommandsServer_Expecter) NameServiceResolveAnyId(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NameServiceResolveAnyId_Call {
- return &MockClientCommandsServer_NameServiceResolveAnyId_Call{Call: _e.mock.On("NameServiceResolveAnyId", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NameServiceResolveAnyId_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNameServiceResolveAnyIdRequest)) *MockClientCommandsServer_NameServiceResolveAnyId_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNameServiceResolveAnyIdRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NameServiceResolveAnyId_Call) Return(_a0 *pb.RpcNameServiceResolveAnyIdResponse) *MockClientCommandsServer_NameServiceResolveAnyId_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NameServiceResolveAnyId_Call) RunAndReturn(run func(context.Context, *pb.RpcNameServiceResolveAnyIdRequest) *pb.RpcNameServiceResolveAnyIdResponse) *MockClientCommandsServer_NameServiceResolveAnyId_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NameServiceResolveName provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NameServiceResolveName(_a0 context.Context, _a1 *pb.RpcNameServiceResolveNameRequest) *pb.RpcNameServiceResolveNameResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NameServiceResolveName")
- }
-
- var r0 *pb.RpcNameServiceResolveNameResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNameServiceResolveNameRequest) *pb.RpcNameServiceResolveNameResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNameServiceResolveNameResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NameServiceResolveName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NameServiceResolveName'
-type MockClientCommandsServer_NameServiceResolveName_Call struct {
- *mock.Call
-}
-
-// NameServiceResolveName is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNameServiceResolveNameRequest
-func (_e *MockClientCommandsServer_Expecter) NameServiceResolveName(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NameServiceResolveName_Call {
- return &MockClientCommandsServer_NameServiceResolveName_Call{Call: _e.mock.On("NameServiceResolveName", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NameServiceResolveName_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNameServiceResolveNameRequest)) *MockClientCommandsServer_NameServiceResolveName_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNameServiceResolveNameRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NameServiceResolveName_Call) Return(_a0 *pb.RpcNameServiceResolveNameResponse) *MockClientCommandsServer_NameServiceResolveName_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NameServiceResolveName_Call) RunAndReturn(run func(context.Context, *pb.RpcNameServiceResolveNameRequest) *pb.RpcNameServiceResolveNameResponse) *MockClientCommandsServer_NameServiceResolveName_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NameServiceUserAccountGet provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NameServiceUserAccountGet(_a0 context.Context, _a1 *pb.RpcNameServiceUserAccountGetRequest) *pb.RpcNameServiceUserAccountGetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NameServiceUserAccountGet")
- }
-
- var r0 *pb.RpcNameServiceUserAccountGetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNameServiceUserAccountGetRequest) *pb.RpcNameServiceUserAccountGetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNameServiceUserAccountGetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NameServiceUserAccountGet_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NameServiceUserAccountGet'
-type MockClientCommandsServer_NameServiceUserAccountGet_Call struct {
- *mock.Call
-}
-
-// NameServiceUserAccountGet is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNameServiceUserAccountGetRequest
-func (_e *MockClientCommandsServer_Expecter) NameServiceUserAccountGet(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NameServiceUserAccountGet_Call {
- return &MockClientCommandsServer_NameServiceUserAccountGet_Call{Call: _e.mock.On("NameServiceUserAccountGet", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NameServiceUserAccountGet_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNameServiceUserAccountGetRequest)) *MockClientCommandsServer_NameServiceUserAccountGet_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNameServiceUserAccountGetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NameServiceUserAccountGet_Call) Return(_a0 *pb.RpcNameServiceUserAccountGetResponse) *MockClientCommandsServer_NameServiceUserAccountGet_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NameServiceUserAccountGet_Call) RunAndReturn(run func(context.Context, *pb.RpcNameServiceUserAccountGetRequest) *pb.RpcNameServiceUserAccountGetResponse) *MockClientCommandsServer_NameServiceUserAccountGet_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NavigationGetObjectInfoWithLinks provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NavigationGetObjectInfoWithLinks(_a0 context.Context, _a1 *pb.RpcNavigationGetObjectInfoWithLinksRequest) *pb.RpcNavigationGetObjectInfoWithLinksResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NavigationGetObjectInfoWithLinks")
- }
-
- var r0 *pb.RpcNavigationGetObjectInfoWithLinksResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNavigationGetObjectInfoWithLinksRequest) *pb.RpcNavigationGetObjectInfoWithLinksResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNavigationGetObjectInfoWithLinksResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NavigationGetObjectInfoWithLinks'
-type MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call struct {
- *mock.Call
-}
-
-// NavigationGetObjectInfoWithLinks is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNavigationGetObjectInfoWithLinksRequest
-func (_e *MockClientCommandsServer_Expecter) NavigationGetObjectInfoWithLinks(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call {
- return &MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call{Call: _e.mock.On("NavigationGetObjectInfoWithLinks", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNavigationGetObjectInfoWithLinksRequest)) *MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNavigationGetObjectInfoWithLinksRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call) Return(_a0 *pb.RpcNavigationGetObjectInfoWithLinksResponse) *MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call) RunAndReturn(run func(context.Context, *pb.RpcNavigationGetObjectInfoWithLinksRequest) *pb.RpcNavigationGetObjectInfoWithLinksResponse) *MockClientCommandsServer_NavigationGetObjectInfoWithLinks_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NavigationListObjects provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NavigationListObjects(_a0 context.Context, _a1 *pb.RpcNavigationListObjectsRequest) *pb.RpcNavigationListObjectsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NavigationListObjects")
- }
-
- var r0 *pb.RpcNavigationListObjectsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNavigationListObjectsRequest) *pb.RpcNavigationListObjectsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNavigationListObjectsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NavigationListObjects_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NavigationListObjects'
-type MockClientCommandsServer_NavigationListObjects_Call struct {
- *mock.Call
-}
-
-// NavigationListObjects is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNavigationListObjectsRequest
-func (_e *MockClientCommandsServer_Expecter) NavigationListObjects(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NavigationListObjects_Call {
- return &MockClientCommandsServer_NavigationListObjects_Call{Call: _e.mock.On("NavigationListObjects", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NavigationListObjects_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNavigationListObjectsRequest)) *MockClientCommandsServer_NavigationListObjects_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNavigationListObjectsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NavigationListObjects_Call) Return(_a0 *pb.RpcNavigationListObjectsResponse) *MockClientCommandsServer_NavigationListObjects_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NavigationListObjects_Call) RunAndReturn(run func(context.Context, *pb.RpcNavigationListObjectsRequest) *pb.RpcNavigationListObjectsResponse) *MockClientCommandsServer_NavigationListObjects_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NotificationList provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NotificationList(_a0 context.Context, _a1 *pb.RpcNotificationListRequest) *pb.RpcNotificationListResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NotificationList")
- }
-
- var r0 *pb.RpcNotificationListResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNotificationListRequest) *pb.RpcNotificationListResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNotificationListResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NotificationList_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NotificationList'
-type MockClientCommandsServer_NotificationList_Call struct {
- *mock.Call
-}
-
-// NotificationList is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNotificationListRequest
-func (_e *MockClientCommandsServer_Expecter) NotificationList(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NotificationList_Call {
- return &MockClientCommandsServer_NotificationList_Call{Call: _e.mock.On("NotificationList", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NotificationList_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNotificationListRequest)) *MockClientCommandsServer_NotificationList_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNotificationListRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NotificationList_Call) Return(_a0 *pb.RpcNotificationListResponse) *MockClientCommandsServer_NotificationList_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NotificationList_Call) RunAndReturn(run func(context.Context, *pb.RpcNotificationListRequest) *pb.RpcNotificationListResponse) *MockClientCommandsServer_NotificationList_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NotificationReply provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NotificationReply(_a0 context.Context, _a1 *pb.RpcNotificationReplyRequest) *pb.RpcNotificationReplyResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NotificationReply")
- }
-
- var r0 *pb.RpcNotificationReplyResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNotificationReplyRequest) *pb.RpcNotificationReplyResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNotificationReplyResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NotificationReply_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NotificationReply'
-type MockClientCommandsServer_NotificationReply_Call struct {
- *mock.Call
-}
-
-// NotificationReply is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNotificationReplyRequest
-func (_e *MockClientCommandsServer_Expecter) NotificationReply(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NotificationReply_Call {
- return &MockClientCommandsServer_NotificationReply_Call{Call: _e.mock.On("NotificationReply", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NotificationReply_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNotificationReplyRequest)) *MockClientCommandsServer_NotificationReply_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNotificationReplyRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NotificationReply_Call) Return(_a0 *pb.RpcNotificationReplyResponse) *MockClientCommandsServer_NotificationReply_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NotificationReply_Call) RunAndReturn(run func(context.Context, *pb.RpcNotificationReplyRequest) *pb.RpcNotificationReplyResponse) *MockClientCommandsServer_NotificationReply_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NotificationTest provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) NotificationTest(_a0 context.Context, _a1 *pb.RpcNotificationTestRequest) *pb.RpcNotificationTestResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for NotificationTest")
- }
-
- var r0 *pb.RpcNotificationTestResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcNotificationTestRequest) *pb.RpcNotificationTestResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcNotificationTestResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_NotificationTest_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NotificationTest'
-type MockClientCommandsServer_NotificationTest_Call struct {
- *mock.Call
-}
-
-// NotificationTest is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcNotificationTestRequest
-func (_e *MockClientCommandsServer_Expecter) NotificationTest(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_NotificationTest_Call {
- return &MockClientCommandsServer_NotificationTest_Call{Call: _e.mock.On("NotificationTest", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_NotificationTest_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcNotificationTestRequest)) *MockClientCommandsServer_NotificationTest_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcNotificationTestRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_NotificationTest_Call) Return(_a0 *pb.RpcNotificationTestResponse) *MockClientCommandsServer_NotificationTest_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_NotificationTest_Call) RunAndReturn(run func(context.Context, *pb.RpcNotificationTestRequest) *pb.RpcNotificationTestResponse) *MockClientCommandsServer_NotificationTest_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectApplyTemplate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectApplyTemplate(_a0 context.Context, _a1 *pb.RpcObjectApplyTemplateRequest) *pb.RpcObjectApplyTemplateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectApplyTemplate")
- }
-
- var r0 *pb.RpcObjectApplyTemplateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectApplyTemplateRequest) *pb.RpcObjectApplyTemplateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectApplyTemplateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectApplyTemplate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectApplyTemplate'
-type MockClientCommandsServer_ObjectApplyTemplate_Call struct {
- *mock.Call
-}
-
-// ObjectApplyTemplate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectApplyTemplateRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectApplyTemplate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectApplyTemplate_Call {
- return &MockClientCommandsServer_ObjectApplyTemplate_Call{Call: _e.mock.On("ObjectApplyTemplate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectApplyTemplate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectApplyTemplateRequest)) *MockClientCommandsServer_ObjectApplyTemplate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectApplyTemplateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectApplyTemplate_Call) Return(_a0 *pb.RpcObjectApplyTemplateResponse) *MockClientCommandsServer_ObjectApplyTemplate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectApplyTemplate_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectApplyTemplateRequest) *pb.RpcObjectApplyTemplateResponse) *MockClientCommandsServer_ObjectApplyTemplate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectBookmarkFetch provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectBookmarkFetch(_a0 context.Context, _a1 *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectBookmarkFetch")
- }
-
- var r0 *pb.RpcObjectBookmarkFetchResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectBookmarkFetchResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectBookmarkFetch_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectBookmarkFetch'
-type MockClientCommandsServer_ObjectBookmarkFetch_Call struct {
- *mock.Call
-}
-
-// ObjectBookmarkFetch is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectBookmarkFetchRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectBookmarkFetch(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectBookmarkFetch_Call {
- return &MockClientCommandsServer_ObjectBookmarkFetch_Call{Call: _e.mock.On("ObjectBookmarkFetch", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectBookmarkFetch_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectBookmarkFetchRequest)) *MockClientCommandsServer_ObjectBookmarkFetch_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectBookmarkFetchRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectBookmarkFetch_Call) Return(_a0 *pb.RpcObjectBookmarkFetchResponse) *MockClientCommandsServer_ObjectBookmarkFetch_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectBookmarkFetch_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectBookmarkFetchRequest) *pb.RpcObjectBookmarkFetchResponse) *MockClientCommandsServer_ObjectBookmarkFetch_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectChatAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectChatAdd(_a0 context.Context, _a1 *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectChatAdd")
- }
-
- var r0 *pb.RpcObjectChatAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectChatAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectChatAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectChatAdd'
-type MockClientCommandsServer_ObjectChatAdd_Call struct {
- *mock.Call
-}
-
-// ObjectChatAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectChatAddRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectChatAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectChatAdd_Call {
- return &MockClientCommandsServer_ObjectChatAdd_Call{Call: _e.mock.On("ObjectChatAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectChatAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectChatAddRequest)) *MockClientCommandsServer_ObjectChatAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectChatAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectChatAdd_Call) Return(_a0 *pb.RpcObjectChatAddResponse) *MockClientCommandsServer_ObjectChatAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectChatAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse) *MockClientCommandsServer_ObjectChatAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectClose provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectClose(_a0 context.Context, _a1 *pb.RpcObjectCloseRequest) *pb.RpcObjectCloseResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectClose")
- }
-
- var r0 *pb.RpcObjectCloseResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCloseRequest) *pb.RpcObjectCloseResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCloseResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectClose_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectClose'
-type MockClientCommandsServer_ObjectClose_Call struct {
- *mock.Call
-}
-
-// ObjectClose is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCloseRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectClose(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectClose_Call {
- return &MockClientCommandsServer_ObjectClose_Call{Call: _e.mock.On("ObjectClose", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectClose_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCloseRequest)) *MockClientCommandsServer_ObjectClose_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCloseRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectClose_Call) Return(_a0 *pb.RpcObjectCloseResponse) *MockClientCommandsServer_ObjectClose_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectClose_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCloseRequest) *pb.RpcObjectCloseResponse) *MockClientCommandsServer_ObjectClose_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCollectionAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCollectionAdd(_a0 context.Context, _a1 *pb.RpcObjectCollectionAddRequest) *pb.RpcObjectCollectionAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCollectionAdd")
- }
-
- var r0 *pb.RpcObjectCollectionAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCollectionAddRequest) *pb.RpcObjectCollectionAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCollectionAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCollectionAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCollectionAdd'
-type MockClientCommandsServer_ObjectCollectionAdd_Call struct {
- *mock.Call
-}
-
-// ObjectCollectionAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCollectionAddRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCollectionAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCollectionAdd_Call {
- return &MockClientCommandsServer_ObjectCollectionAdd_Call{Call: _e.mock.On("ObjectCollectionAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCollectionAddRequest)) *MockClientCommandsServer_ObjectCollectionAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCollectionAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionAdd_Call) Return(_a0 *pb.RpcObjectCollectionAddResponse) *MockClientCommandsServer_ObjectCollectionAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCollectionAddRequest) *pb.RpcObjectCollectionAddResponse) *MockClientCommandsServer_ObjectCollectionAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCollectionRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCollectionRemove(_a0 context.Context, _a1 *pb.RpcObjectCollectionRemoveRequest) *pb.RpcObjectCollectionRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCollectionRemove")
- }
-
- var r0 *pb.RpcObjectCollectionRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCollectionRemoveRequest) *pb.RpcObjectCollectionRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCollectionRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCollectionRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCollectionRemove'
-type MockClientCommandsServer_ObjectCollectionRemove_Call struct {
- *mock.Call
-}
-
-// ObjectCollectionRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCollectionRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCollectionRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCollectionRemove_Call {
- return &MockClientCommandsServer_ObjectCollectionRemove_Call{Call: _e.mock.On("ObjectCollectionRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCollectionRemoveRequest)) *MockClientCommandsServer_ObjectCollectionRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCollectionRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionRemove_Call) Return(_a0 *pb.RpcObjectCollectionRemoveResponse) *MockClientCommandsServer_ObjectCollectionRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCollectionRemoveRequest) *pb.RpcObjectCollectionRemoveResponse) *MockClientCommandsServer_ObjectCollectionRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCollectionSort provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCollectionSort(_a0 context.Context, _a1 *pb.RpcObjectCollectionSortRequest) *pb.RpcObjectCollectionSortResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCollectionSort")
- }
-
- var r0 *pb.RpcObjectCollectionSortResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCollectionSortRequest) *pb.RpcObjectCollectionSortResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCollectionSortResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCollectionSort_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCollectionSort'
-type MockClientCommandsServer_ObjectCollectionSort_Call struct {
- *mock.Call
-}
-
-// ObjectCollectionSort is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCollectionSortRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCollectionSort(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCollectionSort_Call {
- return &MockClientCommandsServer_ObjectCollectionSort_Call{Call: _e.mock.On("ObjectCollectionSort", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionSort_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCollectionSortRequest)) *MockClientCommandsServer_ObjectCollectionSort_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCollectionSortRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionSort_Call) Return(_a0 *pb.RpcObjectCollectionSortResponse) *MockClientCommandsServer_ObjectCollectionSort_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCollectionSort_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCollectionSortRequest) *pb.RpcObjectCollectionSortResponse) *MockClientCommandsServer_ObjectCollectionSort_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCreate(_a0 context.Context, _a1 *pb.RpcObjectCreateRequest) *pb.RpcObjectCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCreate")
- }
-
- var r0 *pb.RpcObjectCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateRequest) *pb.RpcObjectCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreate'
-type MockClientCommandsServer_ObjectCreate_Call struct {
- *mock.Call
-}
-
-// ObjectCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCreateRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCreate_Call {
- return &MockClientCommandsServer_ObjectCreate_Call{Call: _e.mock.On("ObjectCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateRequest)) *MockClientCommandsServer_ObjectCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreate_Call) Return(_a0 *pb.RpcObjectCreateResponse) *MockClientCommandsServer_ObjectCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateRequest) *pb.RpcObjectCreateResponse) *MockClientCommandsServer_ObjectCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCreateBookmark provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCreateBookmark(_a0 context.Context, _a1 *pb.RpcObjectCreateBookmarkRequest) *pb.RpcObjectCreateBookmarkResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCreateBookmark")
- }
-
- var r0 *pb.RpcObjectCreateBookmarkResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateBookmarkRequest) *pb.RpcObjectCreateBookmarkResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCreateBookmarkResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCreateBookmark_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreateBookmark'
-type MockClientCommandsServer_ObjectCreateBookmark_Call struct {
- *mock.Call
-}
-
-// ObjectCreateBookmark is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCreateBookmarkRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCreateBookmark(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCreateBookmark_Call {
- return &MockClientCommandsServer_ObjectCreateBookmark_Call{Call: _e.mock.On("ObjectCreateBookmark", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateBookmark_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateBookmarkRequest)) *MockClientCommandsServer_ObjectCreateBookmark_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateBookmarkRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateBookmark_Call) Return(_a0 *pb.RpcObjectCreateBookmarkResponse) *MockClientCommandsServer_ObjectCreateBookmark_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateBookmark_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateBookmarkRequest) *pb.RpcObjectCreateBookmarkResponse) *MockClientCommandsServer_ObjectCreateBookmark_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCreateFromUrl provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCreateFromUrl(_a0 context.Context, _a1 *pb.RpcObjectCreateFromUrlRequest) *pb.RpcObjectCreateFromUrlResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCreateFromUrl")
- }
-
- var r0 *pb.RpcObjectCreateFromUrlResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateFromUrlRequest) *pb.RpcObjectCreateFromUrlResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCreateFromUrlResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCreateFromUrl_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreateFromUrl'
-type MockClientCommandsServer_ObjectCreateFromUrl_Call struct {
- *mock.Call
-}
-
-// ObjectCreateFromUrl is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCreateFromUrlRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCreateFromUrl(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCreateFromUrl_Call {
- return &MockClientCommandsServer_ObjectCreateFromUrl_Call{Call: _e.mock.On("ObjectCreateFromUrl", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateFromUrl_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateFromUrlRequest)) *MockClientCommandsServer_ObjectCreateFromUrl_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateFromUrlRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateFromUrl_Call) Return(_a0 *pb.RpcObjectCreateFromUrlResponse) *MockClientCommandsServer_ObjectCreateFromUrl_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateFromUrl_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateFromUrlRequest) *pb.RpcObjectCreateFromUrlResponse) *MockClientCommandsServer_ObjectCreateFromUrl_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCreateObjectType provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCreateObjectType(_a0 context.Context, _a1 *pb.RpcObjectCreateObjectTypeRequest) *pb.RpcObjectCreateObjectTypeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCreateObjectType")
- }
-
- var r0 *pb.RpcObjectCreateObjectTypeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateObjectTypeRequest) *pb.RpcObjectCreateObjectTypeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCreateObjectTypeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCreateObjectType_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreateObjectType'
-type MockClientCommandsServer_ObjectCreateObjectType_Call struct {
- *mock.Call
-}
-
-// ObjectCreateObjectType is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCreateObjectTypeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCreateObjectType(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCreateObjectType_Call {
- return &MockClientCommandsServer_ObjectCreateObjectType_Call{Call: _e.mock.On("ObjectCreateObjectType", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateObjectType_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateObjectTypeRequest)) *MockClientCommandsServer_ObjectCreateObjectType_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateObjectTypeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateObjectType_Call) Return(_a0 *pb.RpcObjectCreateObjectTypeResponse) *MockClientCommandsServer_ObjectCreateObjectType_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateObjectType_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateObjectTypeRequest) *pb.RpcObjectCreateObjectTypeResponse) *MockClientCommandsServer_ObjectCreateObjectType_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCreateRelation provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCreateRelation(_a0 context.Context, _a1 *pb.RpcObjectCreateRelationRequest) *pb.RpcObjectCreateRelationResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCreateRelation")
- }
-
- var r0 *pb.RpcObjectCreateRelationResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateRelationRequest) *pb.RpcObjectCreateRelationResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCreateRelationResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCreateRelation_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreateRelation'
-type MockClientCommandsServer_ObjectCreateRelation_Call struct {
- *mock.Call
-}
-
-// ObjectCreateRelation is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCreateRelationRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCreateRelation(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCreateRelation_Call {
- return &MockClientCommandsServer_ObjectCreateRelation_Call{Call: _e.mock.On("ObjectCreateRelation", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateRelation_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateRelationRequest)) *MockClientCommandsServer_ObjectCreateRelation_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateRelationRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateRelation_Call) Return(_a0 *pb.RpcObjectCreateRelationResponse) *MockClientCommandsServer_ObjectCreateRelation_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateRelation_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateRelationRequest) *pb.RpcObjectCreateRelationResponse) *MockClientCommandsServer_ObjectCreateRelation_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCreateRelationOption provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCreateRelationOption(_a0 context.Context, _a1 *pb.RpcObjectCreateRelationOptionRequest) *pb.RpcObjectCreateRelationOptionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCreateRelationOption")
- }
-
- var r0 *pb.RpcObjectCreateRelationOptionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateRelationOptionRequest) *pb.RpcObjectCreateRelationOptionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCreateRelationOptionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCreateRelationOption_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreateRelationOption'
-type MockClientCommandsServer_ObjectCreateRelationOption_Call struct {
- *mock.Call
-}
-
-// ObjectCreateRelationOption is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCreateRelationOptionRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCreateRelationOption(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCreateRelationOption_Call {
- return &MockClientCommandsServer_ObjectCreateRelationOption_Call{Call: _e.mock.On("ObjectCreateRelationOption", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateRelationOption_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateRelationOptionRequest)) *MockClientCommandsServer_ObjectCreateRelationOption_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateRelationOptionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateRelationOption_Call) Return(_a0 *pb.RpcObjectCreateRelationOptionResponse) *MockClientCommandsServer_ObjectCreateRelationOption_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateRelationOption_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateRelationOptionRequest) *pb.RpcObjectCreateRelationOptionResponse) *MockClientCommandsServer_ObjectCreateRelationOption_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCreateSet provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCreateSet(_a0 context.Context, _a1 *pb.RpcObjectCreateSetRequest) *pb.RpcObjectCreateSetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCreateSet")
- }
-
- var r0 *pb.RpcObjectCreateSetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCreateSetRequest) *pb.RpcObjectCreateSetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCreateSetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCreateSet_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCreateSet'
-type MockClientCommandsServer_ObjectCreateSet_Call struct {
- *mock.Call
-}
-
-// ObjectCreateSet is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCreateSetRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCreateSet(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCreateSet_Call {
- return &MockClientCommandsServer_ObjectCreateSet_Call{Call: _e.mock.On("ObjectCreateSet", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateSet_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCreateSetRequest)) *MockClientCommandsServer_ObjectCreateSet_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCreateSetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateSet_Call) Return(_a0 *pb.RpcObjectCreateSetResponse) *MockClientCommandsServer_ObjectCreateSet_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCreateSet_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCreateSetRequest) *pb.RpcObjectCreateSetResponse) *MockClientCommandsServer_ObjectCreateSet_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCrossSpaceSearchSubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCrossSpaceSearchSubscribe(_a0 context.Context, _a1 *pb.RpcObjectCrossSpaceSearchSubscribeRequest) *pb.RpcObjectCrossSpaceSearchSubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCrossSpaceSearchSubscribe")
- }
-
- var r0 *pb.RpcObjectCrossSpaceSearchSubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCrossSpaceSearchSubscribeRequest) *pb.RpcObjectCrossSpaceSearchSubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCrossSpaceSearchSubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCrossSpaceSearchSubscribe'
-type MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call struct {
- *mock.Call
-}
-
-// ObjectCrossSpaceSearchSubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCrossSpaceSearchSubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCrossSpaceSearchSubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call {
- return &MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call{Call: _e.mock.On("ObjectCrossSpaceSearchSubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCrossSpaceSearchSubscribeRequest)) *MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCrossSpaceSearchSubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call) Return(_a0 *pb.RpcObjectCrossSpaceSearchSubscribeResponse) *MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCrossSpaceSearchSubscribeRequest) *pb.RpcObjectCrossSpaceSearchSubscribeResponse) *MockClientCommandsServer_ObjectCrossSpaceSearchSubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectCrossSpaceSearchUnsubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectCrossSpaceSearchUnsubscribe(_a0 context.Context, _a1 *pb.RpcObjectCrossSpaceSearchUnsubscribeRequest) *pb.RpcObjectCrossSpaceSearchUnsubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectCrossSpaceSearchUnsubscribe")
- }
-
- var r0 *pb.RpcObjectCrossSpaceSearchUnsubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectCrossSpaceSearchUnsubscribeRequest) *pb.RpcObjectCrossSpaceSearchUnsubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectCrossSpaceSearchUnsubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectCrossSpaceSearchUnsubscribe'
-type MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call struct {
- *mock.Call
-}
-
-// ObjectCrossSpaceSearchUnsubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectCrossSpaceSearchUnsubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectCrossSpaceSearchUnsubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call {
- return &MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call{Call: _e.mock.On("ObjectCrossSpaceSearchUnsubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectCrossSpaceSearchUnsubscribeRequest)) *MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectCrossSpaceSearchUnsubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call) Return(_a0 *pb.RpcObjectCrossSpaceSearchUnsubscribeResponse) *MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectCrossSpaceSearchUnsubscribeRequest) *pb.RpcObjectCrossSpaceSearchUnsubscribeResponse) *MockClientCommandsServer_ObjectCrossSpaceSearchUnsubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectDateByTimestamp provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectDateByTimestamp(_a0 context.Context, _a1 *pb.RpcObjectDateByTimestampRequest) *pb.RpcObjectDateByTimestampResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectDateByTimestamp")
- }
-
- var r0 *pb.RpcObjectDateByTimestampResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectDateByTimestampRequest) *pb.RpcObjectDateByTimestampResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectDateByTimestampResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectDateByTimestamp_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectDateByTimestamp'
-type MockClientCommandsServer_ObjectDateByTimestamp_Call struct {
- *mock.Call
-}
-
-// ObjectDateByTimestamp is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectDateByTimestampRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectDateByTimestamp(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectDateByTimestamp_Call {
- return &MockClientCommandsServer_ObjectDateByTimestamp_Call{Call: _e.mock.On("ObjectDateByTimestamp", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectDateByTimestamp_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectDateByTimestampRequest)) *MockClientCommandsServer_ObjectDateByTimestamp_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectDateByTimestampRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectDateByTimestamp_Call) Return(_a0 *pb.RpcObjectDateByTimestampResponse) *MockClientCommandsServer_ObjectDateByTimestamp_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectDateByTimestamp_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectDateByTimestampRequest) *pb.RpcObjectDateByTimestampResponse) *MockClientCommandsServer_ObjectDateByTimestamp_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectDuplicate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectDuplicate(_a0 context.Context, _a1 *pb.RpcObjectDuplicateRequest) *pb.RpcObjectDuplicateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectDuplicate")
- }
-
- var r0 *pb.RpcObjectDuplicateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectDuplicateRequest) *pb.RpcObjectDuplicateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectDuplicateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectDuplicate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectDuplicate'
-type MockClientCommandsServer_ObjectDuplicate_Call struct {
- *mock.Call
-}
-
-// ObjectDuplicate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectDuplicateRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectDuplicate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectDuplicate_Call {
- return &MockClientCommandsServer_ObjectDuplicate_Call{Call: _e.mock.On("ObjectDuplicate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectDuplicate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectDuplicateRequest)) *MockClientCommandsServer_ObjectDuplicate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectDuplicateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectDuplicate_Call) Return(_a0 *pb.RpcObjectDuplicateResponse) *MockClientCommandsServer_ObjectDuplicate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectDuplicate_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectDuplicateRequest) *pb.RpcObjectDuplicateResponse) *MockClientCommandsServer_ObjectDuplicate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectGraph provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectGraph(_a0 context.Context, _a1 *pb.RpcObjectGraphRequest) *pb.RpcObjectGraphResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectGraph")
- }
-
- var r0 *pb.RpcObjectGraphResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectGraphRequest) *pb.RpcObjectGraphResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectGraphResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectGraph_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectGraph'
-type MockClientCommandsServer_ObjectGraph_Call struct {
- *mock.Call
-}
-
-// ObjectGraph is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectGraphRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectGraph(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectGraph_Call {
- return &MockClientCommandsServer_ObjectGraph_Call{Call: _e.mock.On("ObjectGraph", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectGraph_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectGraphRequest)) *MockClientCommandsServer_ObjectGraph_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectGraphRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectGraph_Call) Return(_a0 *pb.RpcObjectGraphResponse) *MockClientCommandsServer_ObjectGraph_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectGraph_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectGraphRequest) *pb.RpcObjectGraphResponse) *MockClientCommandsServer_ObjectGraph_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectGroupsSubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectGroupsSubscribe(_a0 context.Context, _a1 *pb.RpcObjectGroupsSubscribeRequest) *pb.RpcObjectGroupsSubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectGroupsSubscribe")
- }
-
- var r0 *pb.RpcObjectGroupsSubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectGroupsSubscribeRequest) *pb.RpcObjectGroupsSubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectGroupsSubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectGroupsSubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectGroupsSubscribe'
-type MockClientCommandsServer_ObjectGroupsSubscribe_Call struct {
- *mock.Call
-}
-
-// ObjectGroupsSubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectGroupsSubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectGroupsSubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectGroupsSubscribe_Call {
- return &MockClientCommandsServer_ObjectGroupsSubscribe_Call{Call: _e.mock.On("ObjectGroupsSubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectGroupsSubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectGroupsSubscribeRequest)) *MockClientCommandsServer_ObjectGroupsSubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectGroupsSubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectGroupsSubscribe_Call) Return(_a0 *pb.RpcObjectGroupsSubscribeResponse) *MockClientCommandsServer_ObjectGroupsSubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectGroupsSubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectGroupsSubscribeRequest) *pb.RpcObjectGroupsSubscribeResponse) *MockClientCommandsServer_ObjectGroupsSubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectImport provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectImport(_a0 context.Context, _a1 *pb.RpcObjectImportRequest) *pb.RpcObjectImportResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectImport")
- }
-
- var r0 *pb.RpcObjectImportResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectImportRequest) *pb.RpcObjectImportResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectImportResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectImport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectImport'
-type MockClientCommandsServer_ObjectImport_Call struct {
- *mock.Call
-}
-
-// ObjectImport is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectImportRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectImport(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectImport_Call {
- return &MockClientCommandsServer_ObjectImport_Call{Call: _e.mock.On("ObjectImport", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectImport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectImportRequest)) *MockClientCommandsServer_ObjectImport_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectImportRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImport_Call) Return(_a0 *pb.RpcObjectImportResponse) *MockClientCommandsServer_ObjectImport_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImport_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectImportRequest) *pb.RpcObjectImportResponse) *MockClientCommandsServer_ObjectImport_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectImportExperience provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectImportExperience(_a0 context.Context, _a1 *pb.RpcObjectImportExperienceRequest) *pb.RpcObjectImportExperienceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectImportExperience")
- }
-
- var r0 *pb.RpcObjectImportExperienceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectImportExperienceRequest) *pb.RpcObjectImportExperienceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectImportExperienceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectImportExperience_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectImportExperience'
-type MockClientCommandsServer_ObjectImportExperience_Call struct {
- *mock.Call
-}
-
-// ObjectImportExperience is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectImportExperienceRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectImportExperience(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectImportExperience_Call {
- return &MockClientCommandsServer_ObjectImportExperience_Call{Call: _e.mock.On("ObjectImportExperience", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectImportExperience_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectImportExperienceRequest)) *MockClientCommandsServer_ObjectImportExperience_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectImportExperienceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportExperience_Call) Return(_a0 *pb.RpcObjectImportExperienceResponse) *MockClientCommandsServer_ObjectImportExperience_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportExperience_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectImportExperienceRequest) *pb.RpcObjectImportExperienceResponse) *MockClientCommandsServer_ObjectImportExperience_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectImportList provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectImportList(_a0 context.Context, _a1 *pb.RpcObjectImportListRequest) *pb.RpcObjectImportListResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectImportList")
- }
-
- var r0 *pb.RpcObjectImportListResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectImportListRequest) *pb.RpcObjectImportListResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectImportListResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectImportList_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectImportList'
-type MockClientCommandsServer_ObjectImportList_Call struct {
- *mock.Call
-}
-
-// ObjectImportList is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectImportListRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectImportList(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectImportList_Call {
- return &MockClientCommandsServer_ObjectImportList_Call{Call: _e.mock.On("ObjectImportList", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectImportList_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectImportListRequest)) *MockClientCommandsServer_ObjectImportList_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectImportListRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportList_Call) Return(_a0 *pb.RpcObjectImportListResponse) *MockClientCommandsServer_ObjectImportList_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportList_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectImportListRequest) *pb.RpcObjectImportListResponse) *MockClientCommandsServer_ObjectImportList_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectImportNotionValidateToken provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectImportNotionValidateToken(_a0 context.Context, _a1 *pb.RpcObjectImportNotionValidateTokenRequest) *pb.RpcObjectImportNotionValidateTokenResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectImportNotionValidateToken")
- }
-
- var r0 *pb.RpcObjectImportNotionValidateTokenResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectImportNotionValidateTokenRequest) *pb.RpcObjectImportNotionValidateTokenResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectImportNotionValidateTokenResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectImportNotionValidateToken_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectImportNotionValidateToken'
-type MockClientCommandsServer_ObjectImportNotionValidateToken_Call struct {
- *mock.Call
-}
-
-// ObjectImportNotionValidateToken is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectImportNotionValidateTokenRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectImportNotionValidateToken(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectImportNotionValidateToken_Call {
- return &MockClientCommandsServer_ObjectImportNotionValidateToken_Call{Call: _e.mock.On("ObjectImportNotionValidateToken", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectImportNotionValidateToken_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectImportNotionValidateTokenRequest)) *MockClientCommandsServer_ObjectImportNotionValidateToken_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectImportNotionValidateTokenRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportNotionValidateToken_Call) Return(_a0 *pb.RpcObjectImportNotionValidateTokenResponse) *MockClientCommandsServer_ObjectImportNotionValidateToken_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportNotionValidateToken_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectImportNotionValidateTokenRequest) *pb.RpcObjectImportNotionValidateTokenResponse) *MockClientCommandsServer_ObjectImportNotionValidateToken_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectImportUseCase provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectImportUseCase(_a0 context.Context, _a1 *pb.RpcObjectImportUseCaseRequest) *pb.RpcObjectImportUseCaseResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectImportUseCase")
- }
-
- var r0 *pb.RpcObjectImportUseCaseResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectImportUseCaseRequest) *pb.RpcObjectImportUseCaseResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectImportUseCaseResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectImportUseCase_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectImportUseCase'
-type MockClientCommandsServer_ObjectImportUseCase_Call struct {
- *mock.Call
-}
-
-// ObjectImportUseCase is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectImportUseCaseRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectImportUseCase(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectImportUseCase_Call {
- return &MockClientCommandsServer_ObjectImportUseCase_Call{Call: _e.mock.On("ObjectImportUseCase", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectImportUseCase_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectImportUseCaseRequest)) *MockClientCommandsServer_ObjectImportUseCase_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectImportUseCaseRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportUseCase_Call) Return(_a0 *pb.RpcObjectImportUseCaseResponse) *MockClientCommandsServer_ObjectImportUseCase_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectImportUseCase_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectImportUseCaseRequest) *pb.RpcObjectImportUseCaseResponse) *MockClientCommandsServer_ObjectImportUseCase_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListDelete(_a0 context.Context, _a1 *pb.RpcObjectListDeleteRequest) *pb.RpcObjectListDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListDelete")
- }
-
- var r0 *pb.RpcObjectListDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListDeleteRequest) *pb.RpcObjectListDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListDelete'
-type MockClientCommandsServer_ObjectListDelete_Call struct {
- *mock.Call
-}
-
-// ObjectListDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListDelete_Call {
- return &MockClientCommandsServer_ObjectListDelete_Call{Call: _e.mock.On("ObjectListDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListDeleteRequest)) *MockClientCommandsServer_ObjectListDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListDelete_Call) Return(_a0 *pb.RpcObjectListDeleteResponse) *MockClientCommandsServer_ObjectListDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListDeleteRequest) *pb.RpcObjectListDeleteResponse) *MockClientCommandsServer_ObjectListDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListDuplicate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListDuplicate(_a0 context.Context, _a1 *pb.RpcObjectListDuplicateRequest) *pb.RpcObjectListDuplicateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListDuplicate")
- }
-
- var r0 *pb.RpcObjectListDuplicateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListDuplicateRequest) *pb.RpcObjectListDuplicateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListDuplicateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListDuplicate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListDuplicate'
-type MockClientCommandsServer_ObjectListDuplicate_Call struct {
- *mock.Call
-}
-
-// ObjectListDuplicate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListDuplicateRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListDuplicate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListDuplicate_Call {
- return &MockClientCommandsServer_ObjectListDuplicate_Call{Call: _e.mock.On("ObjectListDuplicate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListDuplicate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListDuplicateRequest)) *MockClientCommandsServer_ObjectListDuplicate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListDuplicateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListDuplicate_Call) Return(_a0 *pb.RpcObjectListDuplicateResponse) *MockClientCommandsServer_ObjectListDuplicate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListDuplicate_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListDuplicateRequest) *pb.RpcObjectListDuplicateResponse) *MockClientCommandsServer_ObjectListDuplicate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListExport provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListExport(_a0 context.Context, _a1 *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListExport")
- }
-
- var r0 *pb.RpcObjectListExportResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListExportResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListExport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListExport'
-type MockClientCommandsServer_ObjectListExport_Call struct {
- *mock.Call
-}
-
-// ObjectListExport is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListExportRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListExport(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListExport_Call {
- return &MockClientCommandsServer_ObjectListExport_Call{Call: _e.mock.On("ObjectListExport", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListExport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListExportRequest)) *MockClientCommandsServer_ObjectListExport_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListExportRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListExport_Call) Return(_a0 *pb.RpcObjectListExportResponse) *MockClientCommandsServer_ObjectListExport_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListExport_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListExportRequest) *pb.RpcObjectListExportResponse) *MockClientCommandsServer_ObjectListExport_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListModifyDetailValues provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListModifyDetailValues(_a0 context.Context, _a1 *pb.RpcObjectListModifyDetailValuesRequest) *pb.RpcObjectListModifyDetailValuesResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListModifyDetailValues")
- }
-
- var r0 *pb.RpcObjectListModifyDetailValuesResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListModifyDetailValuesRequest) *pb.RpcObjectListModifyDetailValuesResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListModifyDetailValuesResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListModifyDetailValues_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListModifyDetailValues'
-type MockClientCommandsServer_ObjectListModifyDetailValues_Call struct {
- *mock.Call
-}
-
-// ObjectListModifyDetailValues is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListModifyDetailValuesRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListModifyDetailValues(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListModifyDetailValues_Call {
- return &MockClientCommandsServer_ObjectListModifyDetailValues_Call{Call: _e.mock.On("ObjectListModifyDetailValues", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListModifyDetailValues_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListModifyDetailValuesRequest)) *MockClientCommandsServer_ObjectListModifyDetailValues_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListModifyDetailValuesRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListModifyDetailValues_Call) Return(_a0 *pb.RpcObjectListModifyDetailValuesResponse) *MockClientCommandsServer_ObjectListModifyDetailValues_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListModifyDetailValues_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListModifyDetailValuesRequest) *pb.RpcObjectListModifyDetailValuesResponse) *MockClientCommandsServer_ObjectListModifyDetailValues_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListSetDetails provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListSetDetails(_a0 context.Context, _a1 *pb.RpcObjectListSetDetailsRequest) *pb.RpcObjectListSetDetailsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListSetDetails")
- }
-
- var r0 *pb.RpcObjectListSetDetailsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListSetDetailsRequest) *pb.RpcObjectListSetDetailsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListSetDetailsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListSetDetails_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListSetDetails'
-type MockClientCommandsServer_ObjectListSetDetails_Call struct {
- *mock.Call
-}
-
-// ObjectListSetDetails is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListSetDetailsRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListSetDetails(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListSetDetails_Call {
- return &MockClientCommandsServer_ObjectListSetDetails_Call{Call: _e.mock.On("ObjectListSetDetails", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetDetails_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListSetDetailsRequest)) *MockClientCommandsServer_ObjectListSetDetails_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListSetDetailsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetDetails_Call) Return(_a0 *pb.RpcObjectListSetDetailsResponse) *MockClientCommandsServer_ObjectListSetDetails_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetDetails_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListSetDetailsRequest) *pb.RpcObjectListSetDetailsResponse) *MockClientCommandsServer_ObjectListSetDetails_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListSetIsArchived provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListSetIsArchived(_a0 context.Context, _a1 *pb.RpcObjectListSetIsArchivedRequest) *pb.RpcObjectListSetIsArchivedResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListSetIsArchived")
- }
-
- var r0 *pb.RpcObjectListSetIsArchivedResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListSetIsArchivedRequest) *pb.RpcObjectListSetIsArchivedResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListSetIsArchivedResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListSetIsArchived_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListSetIsArchived'
-type MockClientCommandsServer_ObjectListSetIsArchived_Call struct {
- *mock.Call
-}
-
-// ObjectListSetIsArchived is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListSetIsArchivedRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListSetIsArchived(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListSetIsArchived_Call {
- return &MockClientCommandsServer_ObjectListSetIsArchived_Call{Call: _e.mock.On("ObjectListSetIsArchived", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetIsArchived_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListSetIsArchivedRequest)) *MockClientCommandsServer_ObjectListSetIsArchived_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListSetIsArchivedRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetIsArchived_Call) Return(_a0 *pb.RpcObjectListSetIsArchivedResponse) *MockClientCommandsServer_ObjectListSetIsArchived_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetIsArchived_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListSetIsArchivedRequest) *pb.RpcObjectListSetIsArchivedResponse) *MockClientCommandsServer_ObjectListSetIsArchived_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListSetIsFavorite provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListSetIsFavorite(_a0 context.Context, _a1 *pb.RpcObjectListSetIsFavoriteRequest) *pb.RpcObjectListSetIsFavoriteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListSetIsFavorite")
- }
-
- var r0 *pb.RpcObjectListSetIsFavoriteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListSetIsFavoriteRequest) *pb.RpcObjectListSetIsFavoriteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListSetIsFavoriteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListSetIsFavorite_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListSetIsFavorite'
-type MockClientCommandsServer_ObjectListSetIsFavorite_Call struct {
- *mock.Call
-}
-
-// ObjectListSetIsFavorite is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListSetIsFavoriteRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListSetIsFavorite(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListSetIsFavorite_Call {
- return &MockClientCommandsServer_ObjectListSetIsFavorite_Call{Call: _e.mock.On("ObjectListSetIsFavorite", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetIsFavorite_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListSetIsFavoriteRequest)) *MockClientCommandsServer_ObjectListSetIsFavorite_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListSetIsFavoriteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetIsFavorite_Call) Return(_a0 *pb.RpcObjectListSetIsFavoriteResponse) *MockClientCommandsServer_ObjectListSetIsFavorite_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetIsFavorite_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListSetIsFavoriteRequest) *pb.RpcObjectListSetIsFavoriteResponse) *MockClientCommandsServer_ObjectListSetIsFavorite_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectListSetObjectType provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectListSetObjectType(_a0 context.Context, _a1 *pb.RpcObjectListSetObjectTypeRequest) *pb.RpcObjectListSetObjectTypeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectListSetObjectType")
- }
-
- var r0 *pb.RpcObjectListSetObjectTypeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectListSetObjectTypeRequest) *pb.RpcObjectListSetObjectTypeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectListSetObjectTypeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectListSetObjectType_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectListSetObjectType'
-type MockClientCommandsServer_ObjectListSetObjectType_Call struct {
- *mock.Call
-}
-
-// ObjectListSetObjectType is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectListSetObjectTypeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectListSetObjectType(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectListSetObjectType_Call {
- return &MockClientCommandsServer_ObjectListSetObjectType_Call{Call: _e.mock.On("ObjectListSetObjectType", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetObjectType_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectListSetObjectTypeRequest)) *MockClientCommandsServer_ObjectListSetObjectType_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectListSetObjectTypeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetObjectType_Call) Return(_a0 *pb.RpcObjectListSetObjectTypeResponse) *MockClientCommandsServer_ObjectListSetObjectType_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectListSetObjectType_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectListSetObjectTypeRequest) *pb.RpcObjectListSetObjectTypeResponse) *MockClientCommandsServer_ObjectListSetObjectType_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectOpen provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectOpen(_a0 context.Context, _a1 *pb.RpcObjectOpenRequest) *pb.RpcObjectOpenResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectOpen")
- }
-
- var r0 *pb.RpcObjectOpenResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectOpenRequest) *pb.RpcObjectOpenResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectOpenResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectOpen_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectOpen'
-type MockClientCommandsServer_ObjectOpen_Call struct {
- *mock.Call
-}
-
-// ObjectOpen is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectOpenRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectOpen(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectOpen_Call {
- return &MockClientCommandsServer_ObjectOpen_Call{Call: _e.mock.On("ObjectOpen", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectOpen_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectOpenRequest)) *MockClientCommandsServer_ObjectOpen_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectOpenRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectOpen_Call) Return(_a0 *pb.RpcObjectOpenResponse) *MockClientCommandsServer_ObjectOpen_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectOpen_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectOpenRequest) *pb.RpcObjectOpenResponse) *MockClientCommandsServer_ObjectOpen_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectRedo provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectRedo(_a0 context.Context, _a1 *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectRedo")
- }
-
- var r0 *pb.RpcObjectRedoResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectRedoResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectRedo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectRedo'
-type MockClientCommandsServer_ObjectRedo_Call struct {
- *mock.Call
-}
-
-// ObjectRedo is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectRedoRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectRedo(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectRedo_Call {
- return &MockClientCommandsServer_ObjectRedo_Call{Call: _e.mock.On("ObjectRedo", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectRedo_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectRedoRequest)) *MockClientCommandsServer_ObjectRedo_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectRedoRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRedo_Call) Return(_a0 *pb.RpcObjectRedoResponse) *MockClientCommandsServer_ObjectRedo_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRedo_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectRedoRequest) *pb.RpcObjectRedoResponse) *MockClientCommandsServer_ObjectRedo_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectRelationAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectRelationAdd(_a0 context.Context, _a1 *pb.RpcObjectRelationAddRequest) *pb.RpcObjectRelationAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectRelationAdd")
- }
-
- var r0 *pb.RpcObjectRelationAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectRelationAddRequest) *pb.RpcObjectRelationAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectRelationAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectRelationAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectRelationAdd'
-type MockClientCommandsServer_ObjectRelationAdd_Call struct {
- *mock.Call
-}
-
-// ObjectRelationAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectRelationAddRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectRelationAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectRelationAdd_Call {
- return &MockClientCommandsServer_ObjectRelationAdd_Call{Call: _e.mock.On("ObjectRelationAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectRelationAddRequest)) *MockClientCommandsServer_ObjectRelationAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectRelationAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationAdd_Call) Return(_a0 *pb.RpcObjectRelationAddResponse) *MockClientCommandsServer_ObjectRelationAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectRelationAddRequest) *pb.RpcObjectRelationAddResponse) *MockClientCommandsServer_ObjectRelationAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectRelationAddFeatured provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectRelationAddFeatured(_a0 context.Context, _a1 *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectRelationAddFeatured")
- }
-
- var r0 *pb.RpcObjectRelationAddFeaturedResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectRelationAddFeaturedResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectRelationAddFeatured_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectRelationAddFeatured'
-type MockClientCommandsServer_ObjectRelationAddFeatured_Call struct {
- *mock.Call
-}
-
-// ObjectRelationAddFeatured is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectRelationAddFeaturedRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectRelationAddFeatured(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectRelationAddFeatured_Call {
- return &MockClientCommandsServer_ObjectRelationAddFeatured_Call{Call: _e.mock.On("ObjectRelationAddFeatured", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationAddFeatured_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectRelationAddFeaturedRequest)) *MockClientCommandsServer_ObjectRelationAddFeatured_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectRelationAddFeaturedRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationAddFeatured_Call) Return(_a0 *pb.RpcObjectRelationAddFeaturedResponse) *MockClientCommandsServer_ObjectRelationAddFeatured_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationAddFeatured_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectRelationAddFeaturedRequest) *pb.RpcObjectRelationAddFeaturedResponse) *MockClientCommandsServer_ObjectRelationAddFeatured_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectRelationDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectRelationDelete(_a0 context.Context, _a1 *pb.RpcObjectRelationDeleteRequest) *pb.RpcObjectRelationDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectRelationDelete")
- }
-
- var r0 *pb.RpcObjectRelationDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectRelationDeleteRequest) *pb.RpcObjectRelationDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectRelationDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectRelationDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectRelationDelete'
-type MockClientCommandsServer_ObjectRelationDelete_Call struct {
- *mock.Call
-}
-
-// ObjectRelationDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectRelationDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectRelationDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectRelationDelete_Call {
- return &MockClientCommandsServer_ObjectRelationDelete_Call{Call: _e.mock.On("ObjectRelationDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectRelationDeleteRequest)) *MockClientCommandsServer_ObjectRelationDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectRelationDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationDelete_Call) Return(_a0 *pb.RpcObjectRelationDeleteResponse) *MockClientCommandsServer_ObjectRelationDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectRelationDeleteRequest) *pb.RpcObjectRelationDeleteResponse) *MockClientCommandsServer_ObjectRelationDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectRelationListAvailable provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectRelationListAvailable(_a0 context.Context, _a1 *pb.RpcObjectRelationListAvailableRequest) *pb.RpcObjectRelationListAvailableResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectRelationListAvailable")
- }
-
- var r0 *pb.RpcObjectRelationListAvailableResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectRelationListAvailableRequest) *pb.RpcObjectRelationListAvailableResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectRelationListAvailableResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectRelationListAvailable_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectRelationListAvailable'
-type MockClientCommandsServer_ObjectRelationListAvailable_Call struct {
- *mock.Call
-}
-
-// ObjectRelationListAvailable is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectRelationListAvailableRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectRelationListAvailable(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectRelationListAvailable_Call {
- return &MockClientCommandsServer_ObjectRelationListAvailable_Call{Call: _e.mock.On("ObjectRelationListAvailable", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationListAvailable_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectRelationListAvailableRequest)) *MockClientCommandsServer_ObjectRelationListAvailable_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectRelationListAvailableRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationListAvailable_Call) Return(_a0 *pb.RpcObjectRelationListAvailableResponse) *MockClientCommandsServer_ObjectRelationListAvailable_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationListAvailable_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectRelationListAvailableRequest) *pb.RpcObjectRelationListAvailableResponse) *MockClientCommandsServer_ObjectRelationListAvailable_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectRelationRemoveFeatured provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectRelationRemoveFeatured(_a0 context.Context, _a1 *pb.RpcObjectRelationRemoveFeaturedRequest) *pb.RpcObjectRelationRemoveFeaturedResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectRelationRemoveFeatured")
- }
-
- var r0 *pb.RpcObjectRelationRemoveFeaturedResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectRelationRemoveFeaturedRequest) *pb.RpcObjectRelationRemoveFeaturedResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectRelationRemoveFeaturedResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectRelationRemoveFeatured_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectRelationRemoveFeatured'
-type MockClientCommandsServer_ObjectRelationRemoveFeatured_Call struct {
- *mock.Call
-}
-
-// ObjectRelationRemoveFeatured is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectRelationRemoveFeaturedRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectRelationRemoveFeatured(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectRelationRemoveFeatured_Call {
- return &MockClientCommandsServer_ObjectRelationRemoveFeatured_Call{Call: _e.mock.On("ObjectRelationRemoveFeatured", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationRemoveFeatured_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectRelationRemoveFeaturedRequest)) *MockClientCommandsServer_ObjectRelationRemoveFeatured_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectRelationRemoveFeaturedRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationRemoveFeatured_Call) Return(_a0 *pb.RpcObjectRelationRemoveFeaturedResponse) *MockClientCommandsServer_ObjectRelationRemoveFeatured_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectRelationRemoveFeatured_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectRelationRemoveFeaturedRequest) *pb.RpcObjectRelationRemoveFeaturedResponse) *MockClientCommandsServer_ObjectRelationRemoveFeatured_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSearch provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSearch(_a0 context.Context, _a1 *pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSearch")
- }
-
- var r0 *pb.RpcObjectSearchResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSearchResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSearch_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSearch'
-type MockClientCommandsServer_ObjectSearch_Call struct {
- *mock.Call
-}
-
-// ObjectSearch is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSearchRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSearch(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSearch_Call {
- return &MockClientCommandsServer_ObjectSearch_Call{Call: _e.mock.On("ObjectSearch", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSearch_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSearchRequest)) *MockClientCommandsServer_ObjectSearch_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSearchRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearch_Call) Return(_a0 *pb.RpcObjectSearchResponse) *MockClientCommandsServer_ObjectSearch_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearch_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSearchRequest) *pb.RpcObjectSearchResponse) *MockClientCommandsServer_ObjectSearch_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSearchSubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSearchSubscribe(_a0 context.Context, _a1 *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSearchSubscribe")
- }
-
- var r0 *pb.RpcObjectSearchSubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSearchSubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSearchSubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSearchSubscribe'
-type MockClientCommandsServer_ObjectSearchSubscribe_Call struct {
- *mock.Call
-}
-
-// ObjectSearchSubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSearchSubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSearchSubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSearchSubscribe_Call {
- return &MockClientCommandsServer_ObjectSearchSubscribe_Call{Call: _e.mock.On("ObjectSearchSubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchSubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSearchSubscribeRequest)) *MockClientCommandsServer_ObjectSearchSubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSearchSubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchSubscribe_Call) Return(_a0 *pb.RpcObjectSearchSubscribeResponse) *MockClientCommandsServer_ObjectSearchSubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchSubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSearchSubscribeRequest) *pb.RpcObjectSearchSubscribeResponse) *MockClientCommandsServer_ObjectSearchSubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSearchUnsubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSearchUnsubscribe(_a0 context.Context, _a1 *pb.RpcObjectSearchUnsubscribeRequest) *pb.RpcObjectSearchUnsubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSearchUnsubscribe")
- }
-
- var r0 *pb.RpcObjectSearchUnsubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSearchUnsubscribeRequest) *pb.RpcObjectSearchUnsubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSearchUnsubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSearchUnsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSearchUnsubscribe'
-type MockClientCommandsServer_ObjectSearchUnsubscribe_Call struct {
- *mock.Call
-}
-
-// ObjectSearchUnsubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSearchUnsubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSearchUnsubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSearchUnsubscribe_Call {
- return &MockClientCommandsServer_ObjectSearchUnsubscribe_Call{Call: _e.mock.On("ObjectSearchUnsubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchUnsubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSearchUnsubscribeRequest)) *MockClientCommandsServer_ObjectSearchUnsubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSearchUnsubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchUnsubscribe_Call) Return(_a0 *pb.RpcObjectSearchUnsubscribeResponse) *MockClientCommandsServer_ObjectSearchUnsubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchUnsubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSearchUnsubscribeRequest) *pb.RpcObjectSearchUnsubscribeResponse) *MockClientCommandsServer_ObjectSearchUnsubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSearchWithMeta provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSearchWithMeta(_a0 context.Context, _a1 *pb.RpcObjectSearchWithMetaRequest) *pb.RpcObjectSearchWithMetaResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSearchWithMeta")
- }
-
- var r0 *pb.RpcObjectSearchWithMetaResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSearchWithMetaRequest) *pb.RpcObjectSearchWithMetaResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSearchWithMetaResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSearchWithMeta_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSearchWithMeta'
-type MockClientCommandsServer_ObjectSearchWithMeta_Call struct {
- *mock.Call
-}
-
-// ObjectSearchWithMeta is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSearchWithMetaRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSearchWithMeta(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSearchWithMeta_Call {
- return &MockClientCommandsServer_ObjectSearchWithMeta_Call{Call: _e.mock.On("ObjectSearchWithMeta", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchWithMeta_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSearchWithMetaRequest)) *MockClientCommandsServer_ObjectSearchWithMeta_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSearchWithMetaRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchWithMeta_Call) Return(_a0 *pb.RpcObjectSearchWithMetaResponse) *MockClientCommandsServer_ObjectSearchWithMeta_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSearchWithMeta_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSearchWithMetaRequest) *pb.RpcObjectSearchWithMetaResponse) *MockClientCommandsServer_ObjectSearchWithMeta_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSetDetails provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSetDetails(_a0 context.Context, _a1 *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSetDetails")
- }
-
- var r0 *pb.RpcObjectSetDetailsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSetDetailsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSetDetails_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetDetails'
-type MockClientCommandsServer_ObjectSetDetails_Call struct {
- *mock.Call
-}
-
-// ObjectSetDetails is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSetDetailsRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSetDetails(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSetDetails_Call {
- return &MockClientCommandsServer_ObjectSetDetails_Call{Call: _e.mock.On("ObjectSetDetails", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSetDetails_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetDetailsRequest)) *MockClientCommandsServer_ObjectSetDetails_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSetDetailsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetDetails_Call) Return(_a0 *pb.RpcObjectSetDetailsResponse) *MockClientCommandsServer_ObjectSetDetails_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetDetails_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetDetailsRequest) *pb.RpcObjectSetDetailsResponse) *MockClientCommandsServer_ObjectSetDetails_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSetInternalFlags provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSetInternalFlags(_a0 context.Context, _a1 *pb.RpcObjectSetInternalFlagsRequest) *pb.RpcObjectSetInternalFlagsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSetInternalFlags")
- }
-
- var r0 *pb.RpcObjectSetInternalFlagsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetInternalFlagsRequest) *pb.RpcObjectSetInternalFlagsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSetInternalFlagsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSetInternalFlags_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetInternalFlags'
-type MockClientCommandsServer_ObjectSetInternalFlags_Call struct {
- *mock.Call
-}
-
-// ObjectSetInternalFlags is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSetInternalFlagsRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSetInternalFlags(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSetInternalFlags_Call {
- return &MockClientCommandsServer_ObjectSetInternalFlags_Call{Call: _e.mock.On("ObjectSetInternalFlags", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSetInternalFlags_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetInternalFlagsRequest)) *MockClientCommandsServer_ObjectSetInternalFlags_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSetInternalFlagsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetInternalFlags_Call) Return(_a0 *pb.RpcObjectSetInternalFlagsResponse) *MockClientCommandsServer_ObjectSetInternalFlags_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetInternalFlags_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetInternalFlagsRequest) *pb.RpcObjectSetInternalFlagsResponse) *MockClientCommandsServer_ObjectSetInternalFlags_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSetIsArchived provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSetIsArchived(_a0 context.Context, _a1 *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSetIsArchived")
- }
-
- var r0 *pb.RpcObjectSetIsArchivedResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSetIsArchivedResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSetIsArchived_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetIsArchived'
-type MockClientCommandsServer_ObjectSetIsArchived_Call struct {
- *mock.Call
-}
-
-// ObjectSetIsArchived is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSetIsArchivedRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSetIsArchived(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSetIsArchived_Call {
- return &MockClientCommandsServer_ObjectSetIsArchived_Call{Call: _e.mock.On("ObjectSetIsArchived", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSetIsArchived_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetIsArchivedRequest)) *MockClientCommandsServer_ObjectSetIsArchived_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSetIsArchivedRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetIsArchived_Call) Return(_a0 *pb.RpcObjectSetIsArchivedResponse) *MockClientCommandsServer_ObjectSetIsArchived_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetIsArchived_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetIsArchivedRequest) *pb.RpcObjectSetIsArchivedResponse) *MockClientCommandsServer_ObjectSetIsArchived_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSetIsFavorite provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSetIsFavorite(_a0 context.Context, _a1 *pb.RpcObjectSetIsFavoriteRequest) *pb.RpcObjectSetIsFavoriteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSetIsFavorite")
- }
-
- var r0 *pb.RpcObjectSetIsFavoriteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetIsFavoriteRequest) *pb.RpcObjectSetIsFavoriteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSetIsFavoriteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSetIsFavorite_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetIsFavorite'
-type MockClientCommandsServer_ObjectSetIsFavorite_Call struct {
- *mock.Call
-}
-
-// ObjectSetIsFavorite is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSetIsFavoriteRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSetIsFavorite(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSetIsFavorite_Call {
- return &MockClientCommandsServer_ObjectSetIsFavorite_Call{Call: _e.mock.On("ObjectSetIsFavorite", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSetIsFavorite_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetIsFavoriteRequest)) *MockClientCommandsServer_ObjectSetIsFavorite_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSetIsFavoriteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetIsFavorite_Call) Return(_a0 *pb.RpcObjectSetIsFavoriteResponse) *MockClientCommandsServer_ObjectSetIsFavorite_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetIsFavorite_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetIsFavoriteRequest) *pb.RpcObjectSetIsFavoriteResponse) *MockClientCommandsServer_ObjectSetIsFavorite_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSetLayout provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSetLayout(_a0 context.Context, _a1 *pb.RpcObjectSetLayoutRequest) *pb.RpcObjectSetLayoutResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSetLayout")
- }
-
- var r0 *pb.RpcObjectSetLayoutResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetLayoutRequest) *pb.RpcObjectSetLayoutResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSetLayoutResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSetLayout_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetLayout'
-type MockClientCommandsServer_ObjectSetLayout_Call struct {
- *mock.Call
-}
-
-// ObjectSetLayout is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSetLayoutRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSetLayout(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSetLayout_Call {
- return &MockClientCommandsServer_ObjectSetLayout_Call{Call: _e.mock.On("ObjectSetLayout", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSetLayout_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetLayoutRequest)) *MockClientCommandsServer_ObjectSetLayout_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSetLayoutRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetLayout_Call) Return(_a0 *pb.RpcObjectSetLayoutResponse) *MockClientCommandsServer_ObjectSetLayout_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetLayout_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetLayoutRequest) *pb.RpcObjectSetLayoutResponse) *MockClientCommandsServer_ObjectSetLayout_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSetObjectType provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSetObjectType(_a0 context.Context, _a1 *pb.RpcObjectSetObjectTypeRequest) *pb.RpcObjectSetObjectTypeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSetObjectType")
- }
-
- var r0 *pb.RpcObjectSetObjectTypeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetObjectTypeRequest) *pb.RpcObjectSetObjectTypeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSetObjectTypeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSetObjectType_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetObjectType'
-type MockClientCommandsServer_ObjectSetObjectType_Call struct {
- *mock.Call
-}
-
-// ObjectSetObjectType is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSetObjectTypeRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSetObjectType(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSetObjectType_Call {
- return &MockClientCommandsServer_ObjectSetObjectType_Call{Call: _e.mock.On("ObjectSetObjectType", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSetObjectType_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetObjectTypeRequest)) *MockClientCommandsServer_ObjectSetObjectType_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSetObjectTypeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetObjectType_Call) Return(_a0 *pb.RpcObjectSetObjectTypeResponse) *MockClientCommandsServer_ObjectSetObjectType_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetObjectType_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetObjectTypeRequest) *pb.RpcObjectSetObjectTypeResponse) *MockClientCommandsServer_ObjectSetObjectType_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSetSource provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSetSource(_a0 context.Context, _a1 *pb.RpcObjectSetSourceRequest) *pb.RpcObjectSetSourceResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSetSource")
- }
-
- var r0 *pb.RpcObjectSetSourceResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSetSourceRequest) *pb.RpcObjectSetSourceResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSetSourceResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSetSource_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSetSource'
-type MockClientCommandsServer_ObjectSetSource_Call struct {
- *mock.Call
-}
-
-// ObjectSetSource is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSetSourceRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSetSource(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSetSource_Call {
- return &MockClientCommandsServer_ObjectSetSource_Call{Call: _e.mock.On("ObjectSetSource", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSetSource_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSetSourceRequest)) *MockClientCommandsServer_ObjectSetSource_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSetSourceRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetSource_Call) Return(_a0 *pb.RpcObjectSetSourceResponse) *MockClientCommandsServer_ObjectSetSource_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSetSource_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSetSourceRequest) *pb.RpcObjectSetSourceResponse) *MockClientCommandsServer_ObjectSetSource_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectShareByLink provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectShareByLink(_a0 context.Context, _a1 *pb.RpcObjectShareByLinkRequest) *pb.RpcObjectShareByLinkResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectShareByLink")
- }
-
- var r0 *pb.RpcObjectShareByLinkResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectShareByLinkRequest) *pb.RpcObjectShareByLinkResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectShareByLinkResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectShareByLink_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectShareByLink'
-type MockClientCommandsServer_ObjectShareByLink_Call struct {
- *mock.Call
-}
-
-// ObjectShareByLink is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectShareByLinkRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectShareByLink(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectShareByLink_Call {
- return &MockClientCommandsServer_ObjectShareByLink_Call{Call: _e.mock.On("ObjectShareByLink", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectShareByLink_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectShareByLinkRequest)) *MockClientCommandsServer_ObjectShareByLink_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectShareByLinkRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectShareByLink_Call) Return(_a0 *pb.RpcObjectShareByLinkResponse) *MockClientCommandsServer_ObjectShareByLink_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectShareByLink_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectShareByLinkRequest) *pb.RpcObjectShareByLinkResponse) *MockClientCommandsServer_ObjectShareByLink_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectShow provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectShow(_a0 context.Context, _a1 *pb.RpcObjectShowRequest) *pb.RpcObjectShowResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectShow")
- }
-
- var r0 *pb.RpcObjectShowResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectShowRequest) *pb.RpcObjectShowResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectShowResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectShow_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectShow'
-type MockClientCommandsServer_ObjectShow_Call struct {
- *mock.Call
-}
-
-// ObjectShow is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectShowRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectShow(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectShow_Call {
- return &MockClientCommandsServer_ObjectShow_Call{Call: _e.mock.On("ObjectShow", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectShow_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectShowRequest)) *MockClientCommandsServer_ObjectShow_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectShowRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectShow_Call) Return(_a0 *pb.RpcObjectShowResponse) *MockClientCommandsServer_ObjectShow_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectShow_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectShowRequest) *pb.RpcObjectShowResponse) *MockClientCommandsServer_ObjectShow_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectSubscribeIds provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectSubscribeIds(_a0 context.Context, _a1 *pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectSubscribeIds")
- }
-
- var r0 *pb.RpcObjectSubscribeIdsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectSubscribeIdsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectSubscribeIds_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectSubscribeIds'
-type MockClientCommandsServer_ObjectSubscribeIds_Call struct {
- *mock.Call
-}
-
-// ObjectSubscribeIds is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectSubscribeIdsRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectSubscribeIds(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectSubscribeIds_Call {
- return &MockClientCommandsServer_ObjectSubscribeIds_Call{Call: _e.mock.On("ObjectSubscribeIds", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectSubscribeIds_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectSubscribeIdsRequest)) *MockClientCommandsServer_ObjectSubscribeIds_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectSubscribeIdsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSubscribeIds_Call) Return(_a0 *pb.RpcObjectSubscribeIdsResponse) *MockClientCommandsServer_ObjectSubscribeIds_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectSubscribeIds_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectSubscribeIdsRequest) *pb.RpcObjectSubscribeIdsResponse) *MockClientCommandsServer_ObjectSubscribeIds_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectToBookmark provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectToBookmark(_a0 context.Context, _a1 *pb.RpcObjectToBookmarkRequest) *pb.RpcObjectToBookmarkResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectToBookmark")
- }
-
- var r0 *pb.RpcObjectToBookmarkResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectToBookmarkRequest) *pb.RpcObjectToBookmarkResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectToBookmarkResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectToBookmark_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectToBookmark'
-type MockClientCommandsServer_ObjectToBookmark_Call struct {
- *mock.Call
-}
-
-// ObjectToBookmark is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectToBookmarkRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectToBookmark(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectToBookmark_Call {
- return &MockClientCommandsServer_ObjectToBookmark_Call{Call: _e.mock.On("ObjectToBookmark", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectToBookmark_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectToBookmarkRequest)) *MockClientCommandsServer_ObjectToBookmark_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectToBookmarkRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectToBookmark_Call) Return(_a0 *pb.RpcObjectToBookmarkResponse) *MockClientCommandsServer_ObjectToBookmark_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectToBookmark_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectToBookmarkRequest) *pb.RpcObjectToBookmarkResponse) *MockClientCommandsServer_ObjectToBookmark_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectToCollection provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectToCollection(_a0 context.Context, _a1 *pb.RpcObjectToCollectionRequest) *pb.RpcObjectToCollectionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectToCollection")
- }
-
- var r0 *pb.RpcObjectToCollectionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectToCollectionRequest) *pb.RpcObjectToCollectionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectToCollectionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectToCollection_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectToCollection'
-type MockClientCommandsServer_ObjectToCollection_Call struct {
- *mock.Call
-}
-
-// ObjectToCollection is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectToCollectionRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectToCollection(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectToCollection_Call {
- return &MockClientCommandsServer_ObjectToCollection_Call{Call: _e.mock.On("ObjectToCollection", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectToCollection_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectToCollectionRequest)) *MockClientCommandsServer_ObjectToCollection_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectToCollectionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectToCollection_Call) Return(_a0 *pb.RpcObjectToCollectionResponse) *MockClientCommandsServer_ObjectToCollection_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectToCollection_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectToCollectionRequest) *pb.RpcObjectToCollectionResponse) *MockClientCommandsServer_ObjectToCollection_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectToSet provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectToSet(_a0 context.Context, _a1 *pb.RpcObjectToSetRequest) *pb.RpcObjectToSetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectToSet")
- }
-
- var r0 *pb.RpcObjectToSetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectToSetRequest) *pb.RpcObjectToSetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectToSetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectToSet_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectToSet'
-type MockClientCommandsServer_ObjectToSet_Call struct {
- *mock.Call
-}
-
-// ObjectToSet is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectToSetRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectToSet(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectToSet_Call {
- return &MockClientCommandsServer_ObjectToSet_Call{Call: _e.mock.On("ObjectToSet", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectToSet_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectToSetRequest)) *MockClientCommandsServer_ObjectToSet_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectToSetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectToSet_Call) Return(_a0 *pb.RpcObjectToSetResponse) *MockClientCommandsServer_ObjectToSet_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectToSet_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectToSetRequest) *pb.RpcObjectToSetResponse) *MockClientCommandsServer_ObjectToSet_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectTypeListConflictingRelations provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectTypeListConflictingRelations(_a0 context.Context, _a1 *pb.RpcObjectTypeListConflictingRelationsRequest) *pb.RpcObjectTypeListConflictingRelationsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectTypeListConflictingRelations")
- }
-
- var r0 *pb.RpcObjectTypeListConflictingRelationsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectTypeListConflictingRelationsRequest) *pb.RpcObjectTypeListConflictingRelationsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectTypeListConflictingRelationsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectTypeListConflictingRelations_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectTypeListConflictingRelations'
-type MockClientCommandsServer_ObjectTypeListConflictingRelations_Call struct {
- *mock.Call
-}
-
-// ObjectTypeListConflictingRelations is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectTypeListConflictingRelationsRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectTypeListConflictingRelations(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectTypeListConflictingRelations_Call {
- return &MockClientCommandsServer_ObjectTypeListConflictingRelations_Call{Call: _e.mock.On("ObjectTypeListConflictingRelations", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeListConflictingRelations_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectTypeListConflictingRelationsRequest)) *MockClientCommandsServer_ObjectTypeListConflictingRelations_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectTypeListConflictingRelationsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeListConflictingRelations_Call) Return(_a0 *pb.RpcObjectTypeListConflictingRelationsResponse) *MockClientCommandsServer_ObjectTypeListConflictingRelations_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeListConflictingRelations_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectTypeListConflictingRelationsRequest) *pb.RpcObjectTypeListConflictingRelationsResponse) *MockClientCommandsServer_ObjectTypeListConflictingRelations_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectTypeRecommendedFeaturedRelationsSet provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectTypeRecommendedFeaturedRelationsSet(_a0 context.Context, _a1 *pb.RpcObjectTypeRecommendedFeaturedRelationsSetRequest) *pb.RpcObjectTypeRecommendedFeaturedRelationsSetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectTypeRecommendedFeaturedRelationsSet")
- }
-
- var r0 *pb.RpcObjectTypeRecommendedFeaturedRelationsSetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectTypeRecommendedFeaturedRelationsSetRequest) *pb.RpcObjectTypeRecommendedFeaturedRelationsSetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectTypeRecommendedFeaturedRelationsSetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectTypeRecommendedFeaturedRelationsSet'
-type MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call struct {
- *mock.Call
-}
-
-// ObjectTypeRecommendedFeaturedRelationsSet is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectTypeRecommendedFeaturedRelationsSetRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectTypeRecommendedFeaturedRelationsSet(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call {
- return &MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call{Call: _e.mock.On("ObjectTypeRecommendedFeaturedRelationsSet", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectTypeRecommendedFeaturedRelationsSetRequest)) *MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectTypeRecommendedFeaturedRelationsSetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call) Return(_a0 *pb.RpcObjectTypeRecommendedFeaturedRelationsSetResponse) *MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectTypeRecommendedFeaturedRelationsSetRequest) *pb.RpcObjectTypeRecommendedFeaturedRelationsSetResponse) *MockClientCommandsServer_ObjectTypeRecommendedFeaturedRelationsSet_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectTypeRecommendedRelationsSet provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectTypeRecommendedRelationsSet(_a0 context.Context, _a1 *pb.RpcObjectTypeRecommendedRelationsSetRequest) *pb.RpcObjectTypeRecommendedRelationsSetResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectTypeRecommendedRelationsSet")
- }
-
- var r0 *pb.RpcObjectTypeRecommendedRelationsSetResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectTypeRecommendedRelationsSetRequest) *pb.RpcObjectTypeRecommendedRelationsSetResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectTypeRecommendedRelationsSetResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectTypeRecommendedRelationsSet'
-type MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call struct {
- *mock.Call
-}
-
-// ObjectTypeRecommendedRelationsSet is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectTypeRecommendedRelationsSetRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectTypeRecommendedRelationsSet(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call {
- return &MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call{Call: _e.mock.On("ObjectTypeRecommendedRelationsSet", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectTypeRecommendedRelationsSetRequest)) *MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectTypeRecommendedRelationsSetRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call) Return(_a0 *pb.RpcObjectTypeRecommendedRelationsSetResponse) *MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectTypeRecommendedRelationsSetRequest) *pb.RpcObjectTypeRecommendedRelationsSetResponse) *MockClientCommandsServer_ObjectTypeRecommendedRelationsSet_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectTypeRelationAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectTypeRelationAdd(_a0 context.Context, _a1 *pb.RpcObjectTypeRelationAddRequest) *pb.RpcObjectTypeRelationAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectTypeRelationAdd")
- }
-
- var r0 *pb.RpcObjectTypeRelationAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectTypeRelationAddRequest) *pb.RpcObjectTypeRelationAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectTypeRelationAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectTypeRelationAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectTypeRelationAdd'
-type MockClientCommandsServer_ObjectTypeRelationAdd_Call struct {
- *mock.Call
-}
-
-// ObjectTypeRelationAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectTypeRelationAddRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectTypeRelationAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectTypeRelationAdd_Call {
- return &MockClientCommandsServer_ObjectTypeRelationAdd_Call{Call: _e.mock.On("ObjectTypeRelationAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRelationAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectTypeRelationAddRequest)) *MockClientCommandsServer_ObjectTypeRelationAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectTypeRelationAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRelationAdd_Call) Return(_a0 *pb.RpcObjectTypeRelationAddResponse) *MockClientCommandsServer_ObjectTypeRelationAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRelationAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectTypeRelationAddRequest) *pb.RpcObjectTypeRelationAddResponse) *MockClientCommandsServer_ObjectTypeRelationAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectTypeRelationRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectTypeRelationRemove(_a0 context.Context, _a1 *pb.RpcObjectTypeRelationRemoveRequest) *pb.RpcObjectTypeRelationRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectTypeRelationRemove")
- }
-
- var r0 *pb.RpcObjectTypeRelationRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectTypeRelationRemoveRequest) *pb.RpcObjectTypeRelationRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectTypeRelationRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectTypeRelationRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectTypeRelationRemove'
-type MockClientCommandsServer_ObjectTypeRelationRemove_Call struct {
- *mock.Call
-}
-
-// ObjectTypeRelationRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectTypeRelationRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectTypeRelationRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectTypeRelationRemove_Call {
- return &MockClientCommandsServer_ObjectTypeRelationRemove_Call{Call: _e.mock.On("ObjectTypeRelationRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRelationRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectTypeRelationRemoveRequest)) *MockClientCommandsServer_ObjectTypeRelationRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectTypeRelationRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRelationRemove_Call) Return(_a0 *pb.RpcObjectTypeRelationRemoveResponse) *MockClientCommandsServer_ObjectTypeRelationRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectTypeRelationRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectTypeRelationRemoveRequest) *pb.RpcObjectTypeRelationRemoveResponse) *MockClientCommandsServer_ObjectTypeRelationRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectUndo provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectUndo(_a0 context.Context, _a1 *pb.RpcObjectUndoRequest) *pb.RpcObjectUndoResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectUndo")
- }
-
- var r0 *pb.RpcObjectUndoResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectUndoRequest) *pb.RpcObjectUndoResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectUndoResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectUndo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectUndo'
-type MockClientCommandsServer_ObjectUndo_Call struct {
- *mock.Call
-}
-
-// ObjectUndo is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectUndoRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectUndo(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectUndo_Call {
- return &MockClientCommandsServer_ObjectUndo_Call{Call: _e.mock.On("ObjectUndo", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectUndo_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectUndoRequest)) *MockClientCommandsServer_ObjectUndo_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectUndoRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectUndo_Call) Return(_a0 *pb.RpcObjectUndoResponse) *MockClientCommandsServer_ObjectUndo_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectUndo_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectUndoRequest) *pb.RpcObjectUndoResponse) *MockClientCommandsServer_ObjectUndo_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ObjectWorkspaceSetDashboard provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ObjectWorkspaceSetDashboard(_a0 context.Context, _a1 *pb.RpcObjectWorkspaceSetDashboardRequest) *pb.RpcObjectWorkspaceSetDashboardResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ObjectWorkspaceSetDashboard")
- }
-
- var r0 *pb.RpcObjectWorkspaceSetDashboardResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcObjectWorkspaceSetDashboardRequest) *pb.RpcObjectWorkspaceSetDashboardResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcObjectWorkspaceSetDashboardResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ObjectWorkspaceSetDashboard'
-type MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call struct {
- *mock.Call
-}
-
-// ObjectWorkspaceSetDashboard is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcObjectWorkspaceSetDashboardRequest
-func (_e *MockClientCommandsServer_Expecter) ObjectWorkspaceSetDashboard(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call {
- return &MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call{Call: _e.mock.On("ObjectWorkspaceSetDashboard", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcObjectWorkspaceSetDashboardRequest)) *MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcObjectWorkspaceSetDashboardRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call) Return(_a0 *pb.RpcObjectWorkspaceSetDashboardResponse) *MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call) RunAndReturn(run func(context.Context, *pb.RpcObjectWorkspaceSetDashboardRequest) *pb.RpcObjectWorkspaceSetDashboardResponse) *MockClientCommandsServer_ObjectWorkspaceSetDashboard_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ProcessCancel provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ProcessCancel(_a0 context.Context, _a1 *pb.RpcProcessCancelRequest) *pb.RpcProcessCancelResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ProcessCancel")
- }
-
- var r0 *pb.RpcProcessCancelResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcProcessCancelRequest) *pb.RpcProcessCancelResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcProcessCancelResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ProcessCancel_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ProcessCancel'
-type MockClientCommandsServer_ProcessCancel_Call struct {
- *mock.Call
-}
-
-// ProcessCancel is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcProcessCancelRequest
-func (_e *MockClientCommandsServer_Expecter) ProcessCancel(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ProcessCancel_Call {
- return &MockClientCommandsServer_ProcessCancel_Call{Call: _e.mock.On("ProcessCancel", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ProcessCancel_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcProcessCancelRequest)) *MockClientCommandsServer_ProcessCancel_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcProcessCancelRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ProcessCancel_Call) Return(_a0 *pb.RpcProcessCancelResponse) *MockClientCommandsServer_ProcessCancel_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ProcessCancel_Call) RunAndReturn(run func(context.Context, *pb.RpcProcessCancelRequest) *pb.RpcProcessCancelResponse) *MockClientCommandsServer_ProcessCancel_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ProcessSubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ProcessSubscribe(_a0 context.Context, _a1 *pb.RpcProcessSubscribeRequest) *pb.RpcProcessSubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ProcessSubscribe")
- }
-
- var r0 *pb.RpcProcessSubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcProcessSubscribeRequest) *pb.RpcProcessSubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcProcessSubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ProcessSubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ProcessSubscribe'
-type MockClientCommandsServer_ProcessSubscribe_Call struct {
- *mock.Call
-}
-
-// ProcessSubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcProcessSubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ProcessSubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ProcessSubscribe_Call {
- return &MockClientCommandsServer_ProcessSubscribe_Call{Call: _e.mock.On("ProcessSubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ProcessSubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcProcessSubscribeRequest)) *MockClientCommandsServer_ProcessSubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcProcessSubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ProcessSubscribe_Call) Return(_a0 *pb.RpcProcessSubscribeResponse) *MockClientCommandsServer_ProcessSubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ProcessSubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcProcessSubscribeRequest) *pb.RpcProcessSubscribeResponse) *MockClientCommandsServer_ProcessSubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// ProcessUnsubscribe provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) ProcessUnsubscribe(_a0 context.Context, _a1 *pb.RpcProcessUnsubscribeRequest) *pb.RpcProcessUnsubscribeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for ProcessUnsubscribe")
- }
-
- var r0 *pb.RpcProcessUnsubscribeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcProcessUnsubscribeRequest) *pb.RpcProcessUnsubscribeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcProcessUnsubscribeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_ProcessUnsubscribe_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ProcessUnsubscribe'
-type MockClientCommandsServer_ProcessUnsubscribe_Call struct {
- *mock.Call
-}
-
-// ProcessUnsubscribe is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcProcessUnsubscribeRequest
-func (_e *MockClientCommandsServer_Expecter) ProcessUnsubscribe(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_ProcessUnsubscribe_Call {
- return &MockClientCommandsServer_ProcessUnsubscribe_Call{Call: _e.mock.On("ProcessUnsubscribe", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_ProcessUnsubscribe_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcProcessUnsubscribeRequest)) *MockClientCommandsServer_ProcessUnsubscribe_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcProcessUnsubscribeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_ProcessUnsubscribe_Call) Return(_a0 *pb.RpcProcessUnsubscribeResponse) *MockClientCommandsServer_ProcessUnsubscribe_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_ProcessUnsubscribe_Call) RunAndReturn(run func(context.Context, *pb.RpcProcessUnsubscribeRequest) *pb.RpcProcessUnsubscribeResponse) *MockClientCommandsServer_ProcessUnsubscribe_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// PublishingCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) PublishingCreate(_a0 context.Context, _a1 *pb.RpcPublishingCreateRequest) *pb.RpcPublishingCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for PublishingCreate")
- }
-
- var r0 *pb.RpcPublishingCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcPublishingCreateRequest) *pb.RpcPublishingCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcPublishingCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_PublishingCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PublishingCreate'
-type MockClientCommandsServer_PublishingCreate_Call struct {
- *mock.Call
-}
-
-// PublishingCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcPublishingCreateRequest
-func (_e *MockClientCommandsServer_Expecter) PublishingCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_PublishingCreate_Call {
- return &MockClientCommandsServer_PublishingCreate_Call{Call: _e.mock.On("PublishingCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_PublishingCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcPublishingCreateRequest)) *MockClientCommandsServer_PublishingCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcPublishingCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingCreate_Call) Return(_a0 *pb.RpcPublishingCreateResponse) *MockClientCommandsServer_PublishingCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcPublishingCreateRequest) *pb.RpcPublishingCreateResponse) *MockClientCommandsServer_PublishingCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// PublishingGetStatus provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) PublishingGetStatus(_a0 context.Context, _a1 *pb.RpcPublishingGetStatusRequest) *pb.RpcPublishingGetStatusResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for PublishingGetStatus")
- }
-
- var r0 *pb.RpcPublishingGetStatusResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcPublishingGetStatusRequest) *pb.RpcPublishingGetStatusResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcPublishingGetStatusResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_PublishingGetStatus_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PublishingGetStatus'
-type MockClientCommandsServer_PublishingGetStatus_Call struct {
- *mock.Call
-}
-
-// PublishingGetStatus is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcPublishingGetStatusRequest
-func (_e *MockClientCommandsServer_Expecter) PublishingGetStatus(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_PublishingGetStatus_Call {
- return &MockClientCommandsServer_PublishingGetStatus_Call{Call: _e.mock.On("PublishingGetStatus", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_PublishingGetStatus_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcPublishingGetStatusRequest)) *MockClientCommandsServer_PublishingGetStatus_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcPublishingGetStatusRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingGetStatus_Call) Return(_a0 *pb.RpcPublishingGetStatusResponse) *MockClientCommandsServer_PublishingGetStatus_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingGetStatus_Call) RunAndReturn(run func(context.Context, *pb.RpcPublishingGetStatusRequest) *pb.RpcPublishingGetStatusResponse) *MockClientCommandsServer_PublishingGetStatus_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// PublishingList provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) PublishingList(_a0 context.Context, _a1 *pb.RpcPublishingListRequest) *pb.RpcPublishingListResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for PublishingList")
- }
-
- var r0 *pb.RpcPublishingListResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcPublishingListRequest) *pb.RpcPublishingListResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcPublishingListResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_PublishingList_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PublishingList'
-type MockClientCommandsServer_PublishingList_Call struct {
- *mock.Call
-}
-
-// PublishingList is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcPublishingListRequest
-func (_e *MockClientCommandsServer_Expecter) PublishingList(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_PublishingList_Call {
- return &MockClientCommandsServer_PublishingList_Call{Call: _e.mock.On("PublishingList", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_PublishingList_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcPublishingListRequest)) *MockClientCommandsServer_PublishingList_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcPublishingListRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingList_Call) Return(_a0 *pb.RpcPublishingListResponse) *MockClientCommandsServer_PublishingList_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingList_Call) RunAndReturn(run func(context.Context, *pb.RpcPublishingListRequest) *pb.RpcPublishingListResponse) *MockClientCommandsServer_PublishingList_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// PublishingRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) PublishingRemove(_a0 context.Context, _a1 *pb.RpcPublishingRemoveRequest) *pb.RpcPublishingRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for PublishingRemove")
- }
-
- var r0 *pb.RpcPublishingRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcPublishingRemoveRequest) *pb.RpcPublishingRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcPublishingRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_PublishingRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PublishingRemove'
-type MockClientCommandsServer_PublishingRemove_Call struct {
- *mock.Call
-}
-
-// PublishingRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcPublishingRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) PublishingRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_PublishingRemove_Call {
- return &MockClientCommandsServer_PublishingRemove_Call{Call: _e.mock.On("PublishingRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_PublishingRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcPublishingRemoveRequest)) *MockClientCommandsServer_PublishingRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcPublishingRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingRemove_Call) Return(_a0 *pb.RpcPublishingRemoveResponse) *MockClientCommandsServer_PublishingRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcPublishingRemoveRequest) *pb.RpcPublishingRemoveResponse) *MockClientCommandsServer_PublishingRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// PublishingResolveUri provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) PublishingResolveUri(_a0 context.Context, _a1 *pb.RpcPublishingResolveUriRequest) *pb.RpcPublishingResolveUriResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for PublishingResolveUri")
- }
-
- var r0 *pb.RpcPublishingResolveUriResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcPublishingResolveUriRequest) *pb.RpcPublishingResolveUriResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcPublishingResolveUriResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_PublishingResolveUri_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'PublishingResolveUri'
-type MockClientCommandsServer_PublishingResolveUri_Call struct {
- *mock.Call
-}
-
-// PublishingResolveUri is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcPublishingResolveUriRequest
-func (_e *MockClientCommandsServer_Expecter) PublishingResolveUri(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_PublishingResolveUri_Call {
- return &MockClientCommandsServer_PublishingResolveUri_Call{Call: _e.mock.On("PublishingResolveUri", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_PublishingResolveUri_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcPublishingResolveUriRequest)) *MockClientCommandsServer_PublishingResolveUri_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcPublishingResolveUriRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingResolveUri_Call) Return(_a0 *pb.RpcPublishingResolveUriResponse) *MockClientCommandsServer_PublishingResolveUri_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_PublishingResolveUri_Call) RunAndReturn(run func(context.Context, *pb.RpcPublishingResolveUriRequest) *pb.RpcPublishingResolveUriResponse) *MockClientCommandsServer_PublishingResolveUri_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// RelationListRemoveOption provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) RelationListRemoveOption(_a0 context.Context, _a1 *pb.RpcRelationListRemoveOptionRequest) *pb.RpcRelationListRemoveOptionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for RelationListRemoveOption")
- }
-
- var r0 *pb.RpcRelationListRemoveOptionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcRelationListRemoveOptionRequest) *pb.RpcRelationListRemoveOptionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcRelationListRemoveOptionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_RelationListRemoveOption_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RelationListRemoveOption'
-type MockClientCommandsServer_RelationListRemoveOption_Call struct {
- *mock.Call
-}
-
-// RelationListRemoveOption is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcRelationListRemoveOptionRequest
-func (_e *MockClientCommandsServer_Expecter) RelationListRemoveOption(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_RelationListRemoveOption_Call {
- return &MockClientCommandsServer_RelationListRemoveOption_Call{Call: _e.mock.On("RelationListRemoveOption", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_RelationListRemoveOption_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcRelationListRemoveOptionRequest)) *MockClientCommandsServer_RelationListRemoveOption_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcRelationListRemoveOptionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_RelationListRemoveOption_Call) Return(_a0 *pb.RpcRelationListRemoveOptionResponse) *MockClientCommandsServer_RelationListRemoveOption_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_RelationListRemoveOption_Call) RunAndReturn(run func(context.Context, *pb.RpcRelationListRemoveOptionRequest) *pb.RpcRelationListRemoveOptionResponse) *MockClientCommandsServer_RelationListRemoveOption_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// RelationListWithValue provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) RelationListWithValue(_a0 context.Context, _a1 *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for RelationListWithValue")
- }
-
- var r0 *pb.RpcRelationListWithValueResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcRelationListWithValueResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_RelationListWithValue_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RelationListWithValue'
-type MockClientCommandsServer_RelationListWithValue_Call struct {
- *mock.Call
-}
-
-// RelationListWithValue is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcRelationListWithValueRequest
-func (_e *MockClientCommandsServer_Expecter) RelationListWithValue(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_RelationListWithValue_Call {
- return &MockClientCommandsServer_RelationListWithValue_Call{Call: _e.mock.On("RelationListWithValue", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_RelationListWithValue_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcRelationListWithValueRequest)) *MockClientCommandsServer_RelationListWithValue_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcRelationListWithValueRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_RelationListWithValue_Call) Return(_a0 *pb.RpcRelationListWithValueResponse) *MockClientCommandsServer_RelationListWithValue_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_RelationListWithValue_Call) RunAndReturn(run func(context.Context, *pb.RpcRelationListWithValueRequest) *pb.RpcRelationListWithValueResponse) *MockClientCommandsServer_RelationListWithValue_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// RelationOptions provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) RelationOptions(_a0 context.Context, _a1 *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for RelationOptions")
- }
-
- var r0 *pb.RpcRelationOptionsResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcRelationOptionsResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_RelationOptions_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RelationOptions'
-type MockClientCommandsServer_RelationOptions_Call struct {
- *mock.Call
-}
-
-// RelationOptions is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcRelationOptionsRequest
-func (_e *MockClientCommandsServer_Expecter) RelationOptions(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_RelationOptions_Call {
- return &MockClientCommandsServer_RelationOptions_Call{Call: _e.mock.On("RelationOptions", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_RelationOptions_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcRelationOptionsRequest)) *MockClientCommandsServer_RelationOptions_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcRelationOptionsRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_RelationOptions_Call) Return(_a0 *pb.RpcRelationOptionsResponse) *MockClientCommandsServer_RelationOptions_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_RelationOptions_Call) RunAndReturn(run func(context.Context, *pb.RpcRelationOptionsRequest) *pb.RpcRelationOptionsResponse) *MockClientCommandsServer_RelationOptions_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceDelete provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceDelete(_a0 context.Context, _a1 *pb.RpcSpaceDeleteRequest) *pb.RpcSpaceDeleteResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceDelete")
- }
-
- var r0 *pb.RpcSpaceDeleteResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceDeleteRequest) *pb.RpcSpaceDeleteResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceDeleteResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceDelete_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceDelete'
-type MockClientCommandsServer_SpaceDelete_Call struct {
- *mock.Call
-}
-
-// SpaceDelete is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceDeleteRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceDelete(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceDelete_Call {
- return &MockClientCommandsServer_SpaceDelete_Call{Call: _e.mock.On("SpaceDelete", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceDelete_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceDeleteRequest)) *MockClientCommandsServer_SpaceDelete_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceDeleteRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceDelete_Call) Return(_a0 *pb.RpcSpaceDeleteResponse) *MockClientCommandsServer_SpaceDelete_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceDelete_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceDeleteRequest) *pb.RpcSpaceDeleteResponse) *MockClientCommandsServer_SpaceDelete_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceInviteGenerate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceInviteGenerate(_a0 context.Context, _a1 *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceInviteGenerate")
- }
-
- var r0 *pb.RpcSpaceInviteGenerateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceInviteGenerateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceInviteGenerate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceInviteGenerate'
-type MockClientCommandsServer_SpaceInviteGenerate_Call struct {
- *mock.Call
-}
-
-// SpaceInviteGenerate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceInviteGenerateRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceInviteGenerate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceInviteGenerate_Call {
- return &MockClientCommandsServer_SpaceInviteGenerate_Call{Call: _e.mock.On("SpaceInviteGenerate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGenerate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceInviteGenerateRequest)) *MockClientCommandsServer_SpaceInviteGenerate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceInviteGenerateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGenerate_Call) Return(_a0 *pb.RpcSpaceInviteGenerateResponse) *MockClientCommandsServer_SpaceInviteGenerate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGenerate_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse) *MockClientCommandsServer_SpaceInviteGenerate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceInviteGetCurrent provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceInviteGetCurrent(_a0 context.Context, _a1 *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceInviteGetCurrent")
- }
-
- var r0 *pb.RpcSpaceInviteGetCurrentResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceInviteGetCurrentResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceInviteGetCurrent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceInviteGetCurrent'
-type MockClientCommandsServer_SpaceInviteGetCurrent_Call struct {
- *mock.Call
-}
-
-// SpaceInviteGetCurrent is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceInviteGetCurrentRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceInviteGetCurrent(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceInviteGetCurrent_Call {
- return &MockClientCommandsServer_SpaceInviteGetCurrent_Call{Call: _e.mock.On("SpaceInviteGetCurrent", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGetCurrent_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceInviteGetCurrentRequest)) *MockClientCommandsServer_SpaceInviteGetCurrent_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceInviteGetCurrentRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGetCurrent_Call) Return(_a0 *pb.RpcSpaceInviteGetCurrentResponse) *MockClientCommandsServer_SpaceInviteGetCurrent_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGetCurrent_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse) *MockClientCommandsServer_SpaceInviteGetCurrent_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceInviteGetGuest provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceInviteGetGuest(_a0 context.Context, _a1 *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceInviteGetGuest")
- }
-
- var r0 *pb.RpcSpaceInviteGetGuestResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceInviteGetGuestResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceInviteGetGuest_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceInviteGetGuest'
-type MockClientCommandsServer_SpaceInviteGetGuest_Call struct {
- *mock.Call
-}
-
-// SpaceInviteGetGuest is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceInviteGetGuestRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceInviteGetGuest(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceInviteGetGuest_Call {
- return &MockClientCommandsServer_SpaceInviteGetGuest_Call{Call: _e.mock.On("SpaceInviteGetGuest", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGetGuest_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceInviteGetGuestRequest)) *MockClientCommandsServer_SpaceInviteGetGuest_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceInviteGetGuestRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGetGuest_Call) Return(_a0 *pb.RpcSpaceInviteGetGuestResponse) *MockClientCommandsServer_SpaceInviteGetGuest_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteGetGuest_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse) *MockClientCommandsServer_SpaceInviteGetGuest_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceInviteRevoke provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceInviteRevoke(_a0 context.Context, _a1 *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceInviteRevoke")
- }
-
- var r0 *pb.RpcSpaceInviteRevokeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceInviteRevokeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceInviteRevoke_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceInviteRevoke'
-type MockClientCommandsServer_SpaceInviteRevoke_Call struct {
- *mock.Call
-}
-
-// SpaceInviteRevoke is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceInviteRevokeRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceInviteRevoke(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceInviteRevoke_Call {
- return &MockClientCommandsServer_SpaceInviteRevoke_Call{Call: _e.mock.On("SpaceInviteRevoke", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteRevoke_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceInviteRevokeRequest)) *MockClientCommandsServer_SpaceInviteRevoke_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceInviteRevokeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteRevoke_Call) Return(_a0 *pb.RpcSpaceInviteRevokeResponse) *MockClientCommandsServer_SpaceInviteRevoke_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteRevoke_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse) *MockClientCommandsServer_SpaceInviteRevoke_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceInviteView provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceInviteView(_a0 context.Context, _a1 *pb.RpcSpaceInviteViewRequest) *pb.RpcSpaceInviteViewResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceInviteView")
- }
-
- var r0 *pb.RpcSpaceInviteViewResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceInviteViewRequest) *pb.RpcSpaceInviteViewResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceInviteViewResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceInviteView_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceInviteView'
-type MockClientCommandsServer_SpaceInviteView_Call struct {
- *mock.Call
-}
-
-// SpaceInviteView is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceInviteViewRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceInviteView(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceInviteView_Call {
- return &MockClientCommandsServer_SpaceInviteView_Call{Call: _e.mock.On("SpaceInviteView", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteView_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceInviteViewRequest)) *MockClientCommandsServer_SpaceInviteView_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceInviteViewRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteView_Call) Return(_a0 *pb.RpcSpaceInviteViewResponse) *MockClientCommandsServer_SpaceInviteView_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceInviteView_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceInviteViewRequest) *pb.RpcSpaceInviteViewResponse) *MockClientCommandsServer_SpaceInviteView_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceJoin provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceJoin(_a0 context.Context, _a1 *pb.RpcSpaceJoinRequest) *pb.RpcSpaceJoinResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceJoin")
- }
-
- var r0 *pb.RpcSpaceJoinResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceJoinRequest) *pb.RpcSpaceJoinResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceJoinResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceJoin_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceJoin'
-type MockClientCommandsServer_SpaceJoin_Call struct {
- *mock.Call
-}
-
-// SpaceJoin is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceJoinRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceJoin(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceJoin_Call {
- return &MockClientCommandsServer_SpaceJoin_Call{Call: _e.mock.On("SpaceJoin", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceJoin_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceJoinRequest)) *MockClientCommandsServer_SpaceJoin_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceJoinRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceJoin_Call) Return(_a0 *pb.RpcSpaceJoinResponse) *MockClientCommandsServer_SpaceJoin_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceJoin_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceJoinRequest) *pb.RpcSpaceJoinResponse) *MockClientCommandsServer_SpaceJoin_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceJoinCancel provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceJoinCancel(_a0 context.Context, _a1 *pb.RpcSpaceJoinCancelRequest) *pb.RpcSpaceJoinCancelResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceJoinCancel")
- }
-
- var r0 *pb.RpcSpaceJoinCancelResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceJoinCancelRequest) *pb.RpcSpaceJoinCancelResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceJoinCancelResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceJoinCancel_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceJoinCancel'
-type MockClientCommandsServer_SpaceJoinCancel_Call struct {
- *mock.Call
-}
-
-// SpaceJoinCancel is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceJoinCancelRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceJoinCancel(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceJoinCancel_Call {
- return &MockClientCommandsServer_SpaceJoinCancel_Call{Call: _e.mock.On("SpaceJoinCancel", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceJoinCancel_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceJoinCancelRequest)) *MockClientCommandsServer_SpaceJoinCancel_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceJoinCancelRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceJoinCancel_Call) Return(_a0 *pb.RpcSpaceJoinCancelResponse) *MockClientCommandsServer_SpaceJoinCancel_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceJoinCancel_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceJoinCancelRequest) *pb.RpcSpaceJoinCancelResponse) *MockClientCommandsServer_SpaceJoinCancel_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceLeaveApprove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceLeaveApprove(_a0 context.Context, _a1 *pb.RpcSpaceLeaveApproveRequest) *pb.RpcSpaceLeaveApproveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceLeaveApprove")
- }
-
- var r0 *pb.RpcSpaceLeaveApproveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceLeaveApproveRequest) *pb.RpcSpaceLeaveApproveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceLeaveApproveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceLeaveApprove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceLeaveApprove'
-type MockClientCommandsServer_SpaceLeaveApprove_Call struct {
- *mock.Call
-}
-
-// SpaceLeaveApprove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceLeaveApproveRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceLeaveApprove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceLeaveApprove_Call {
- return &MockClientCommandsServer_SpaceLeaveApprove_Call{Call: _e.mock.On("SpaceLeaveApprove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceLeaveApprove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceLeaveApproveRequest)) *MockClientCommandsServer_SpaceLeaveApprove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceLeaveApproveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceLeaveApprove_Call) Return(_a0 *pb.RpcSpaceLeaveApproveResponse) *MockClientCommandsServer_SpaceLeaveApprove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceLeaveApprove_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceLeaveApproveRequest) *pb.RpcSpaceLeaveApproveResponse) *MockClientCommandsServer_SpaceLeaveApprove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceMakeShareable provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceMakeShareable(_a0 context.Context, _a1 *pb.RpcSpaceMakeShareableRequest) *pb.RpcSpaceMakeShareableResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceMakeShareable")
- }
-
- var r0 *pb.RpcSpaceMakeShareableResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceMakeShareableRequest) *pb.RpcSpaceMakeShareableResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceMakeShareableResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceMakeShareable_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceMakeShareable'
-type MockClientCommandsServer_SpaceMakeShareable_Call struct {
- *mock.Call
-}
-
-// SpaceMakeShareable is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceMakeShareableRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceMakeShareable(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceMakeShareable_Call {
- return &MockClientCommandsServer_SpaceMakeShareable_Call{Call: _e.mock.On("SpaceMakeShareable", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceMakeShareable_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceMakeShareableRequest)) *MockClientCommandsServer_SpaceMakeShareable_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceMakeShareableRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceMakeShareable_Call) Return(_a0 *pb.RpcSpaceMakeShareableResponse) *MockClientCommandsServer_SpaceMakeShareable_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceMakeShareable_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceMakeShareableRequest) *pb.RpcSpaceMakeShareableResponse) *MockClientCommandsServer_SpaceMakeShareable_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceParticipantPermissionsChange provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceParticipantPermissionsChange(_a0 context.Context, _a1 *pb.RpcSpaceParticipantPermissionsChangeRequest) *pb.RpcSpaceParticipantPermissionsChangeResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceParticipantPermissionsChange")
- }
-
- var r0 *pb.RpcSpaceParticipantPermissionsChangeResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceParticipantPermissionsChangeRequest) *pb.RpcSpaceParticipantPermissionsChangeResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceParticipantPermissionsChangeResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceParticipantPermissionsChange_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceParticipantPermissionsChange'
-type MockClientCommandsServer_SpaceParticipantPermissionsChange_Call struct {
- *mock.Call
-}
-
-// SpaceParticipantPermissionsChange is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceParticipantPermissionsChangeRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceParticipantPermissionsChange(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceParticipantPermissionsChange_Call {
- return &MockClientCommandsServer_SpaceParticipantPermissionsChange_Call{Call: _e.mock.On("SpaceParticipantPermissionsChange", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceParticipantPermissionsChange_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceParticipantPermissionsChangeRequest)) *MockClientCommandsServer_SpaceParticipantPermissionsChange_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceParticipantPermissionsChangeRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceParticipantPermissionsChange_Call) Return(_a0 *pb.RpcSpaceParticipantPermissionsChangeResponse) *MockClientCommandsServer_SpaceParticipantPermissionsChange_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceParticipantPermissionsChange_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceParticipantPermissionsChangeRequest) *pb.RpcSpaceParticipantPermissionsChangeResponse) *MockClientCommandsServer_SpaceParticipantPermissionsChange_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceParticipantRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceParticipantRemove(_a0 context.Context, _a1 *pb.RpcSpaceParticipantRemoveRequest) *pb.RpcSpaceParticipantRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceParticipantRemove")
- }
-
- var r0 *pb.RpcSpaceParticipantRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceParticipantRemoveRequest) *pb.RpcSpaceParticipantRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceParticipantRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceParticipantRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceParticipantRemove'
-type MockClientCommandsServer_SpaceParticipantRemove_Call struct {
- *mock.Call
-}
-
-// SpaceParticipantRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceParticipantRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceParticipantRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceParticipantRemove_Call {
- return &MockClientCommandsServer_SpaceParticipantRemove_Call{Call: _e.mock.On("SpaceParticipantRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceParticipantRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceParticipantRemoveRequest)) *MockClientCommandsServer_SpaceParticipantRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceParticipantRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceParticipantRemove_Call) Return(_a0 *pb.RpcSpaceParticipantRemoveResponse) *MockClientCommandsServer_SpaceParticipantRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceParticipantRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceParticipantRemoveRequest) *pb.RpcSpaceParticipantRemoveResponse) *MockClientCommandsServer_SpaceParticipantRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceRequestApprove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceRequestApprove(_a0 context.Context, _a1 *pb.RpcSpaceRequestApproveRequest) *pb.RpcSpaceRequestApproveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceRequestApprove")
- }
-
- var r0 *pb.RpcSpaceRequestApproveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceRequestApproveRequest) *pb.RpcSpaceRequestApproveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceRequestApproveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceRequestApprove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceRequestApprove'
-type MockClientCommandsServer_SpaceRequestApprove_Call struct {
- *mock.Call
-}
-
-// SpaceRequestApprove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceRequestApproveRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceRequestApprove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceRequestApprove_Call {
- return &MockClientCommandsServer_SpaceRequestApprove_Call{Call: _e.mock.On("SpaceRequestApprove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceRequestApprove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceRequestApproveRequest)) *MockClientCommandsServer_SpaceRequestApprove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceRequestApproveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceRequestApprove_Call) Return(_a0 *pb.RpcSpaceRequestApproveResponse) *MockClientCommandsServer_SpaceRequestApprove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceRequestApprove_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceRequestApproveRequest) *pb.RpcSpaceRequestApproveResponse) *MockClientCommandsServer_SpaceRequestApprove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceRequestDecline provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceRequestDecline(_a0 context.Context, _a1 *pb.RpcSpaceRequestDeclineRequest) *pb.RpcSpaceRequestDeclineResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceRequestDecline")
- }
-
- var r0 *pb.RpcSpaceRequestDeclineResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceRequestDeclineRequest) *pb.RpcSpaceRequestDeclineResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceRequestDeclineResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceRequestDecline_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceRequestDecline'
-type MockClientCommandsServer_SpaceRequestDecline_Call struct {
- *mock.Call
-}
-
-// SpaceRequestDecline is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceRequestDeclineRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceRequestDecline(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceRequestDecline_Call {
- return &MockClientCommandsServer_SpaceRequestDecline_Call{Call: _e.mock.On("SpaceRequestDecline", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceRequestDecline_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceRequestDeclineRequest)) *MockClientCommandsServer_SpaceRequestDecline_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceRequestDeclineRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceRequestDecline_Call) Return(_a0 *pb.RpcSpaceRequestDeclineResponse) *MockClientCommandsServer_SpaceRequestDecline_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceRequestDecline_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceRequestDeclineRequest) *pb.RpcSpaceRequestDeclineResponse) *MockClientCommandsServer_SpaceRequestDecline_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceSetOrder provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceSetOrder(_a0 context.Context, _a1 *pb.RpcSpaceSetOrderRequest) *pb.RpcSpaceSetOrderResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceSetOrder")
- }
-
- var r0 *pb.RpcSpaceSetOrderResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceSetOrderRequest) *pb.RpcSpaceSetOrderResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceSetOrderResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceSetOrder_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceSetOrder'
-type MockClientCommandsServer_SpaceSetOrder_Call struct {
- *mock.Call
-}
-
-// SpaceSetOrder is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceSetOrderRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceSetOrder(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceSetOrder_Call {
- return &MockClientCommandsServer_SpaceSetOrder_Call{Call: _e.mock.On("SpaceSetOrder", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceSetOrder_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceSetOrderRequest)) *MockClientCommandsServer_SpaceSetOrder_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceSetOrderRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceSetOrder_Call) Return(_a0 *pb.RpcSpaceSetOrderResponse) *MockClientCommandsServer_SpaceSetOrder_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceSetOrder_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceSetOrderRequest) *pb.RpcSpaceSetOrderResponse) *MockClientCommandsServer_SpaceSetOrder_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceStopSharing provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceStopSharing(_a0 context.Context, _a1 *pb.RpcSpaceStopSharingRequest) *pb.RpcSpaceStopSharingResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceStopSharing")
- }
-
- var r0 *pb.RpcSpaceStopSharingResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceStopSharingRequest) *pb.RpcSpaceStopSharingResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceStopSharingResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceStopSharing_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceStopSharing'
-type MockClientCommandsServer_SpaceStopSharing_Call struct {
- *mock.Call
-}
-
-// SpaceStopSharing is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceStopSharingRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceStopSharing(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceStopSharing_Call {
- return &MockClientCommandsServer_SpaceStopSharing_Call{Call: _e.mock.On("SpaceStopSharing", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceStopSharing_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceStopSharingRequest)) *MockClientCommandsServer_SpaceStopSharing_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceStopSharingRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceStopSharing_Call) Return(_a0 *pb.RpcSpaceStopSharingResponse) *MockClientCommandsServer_SpaceStopSharing_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceStopSharing_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceStopSharingRequest) *pb.RpcSpaceStopSharingResponse) *MockClientCommandsServer_SpaceStopSharing_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// SpaceUnsetOrder provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) SpaceUnsetOrder(_a0 context.Context, _a1 *pb.RpcSpaceUnsetOrderRequest) *pb.RpcSpaceUnsetOrderResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for SpaceUnsetOrder")
- }
-
- var r0 *pb.RpcSpaceUnsetOrderResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcSpaceUnsetOrderRequest) *pb.RpcSpaceUnsetOrderResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcSpaceUnsetOrderResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_SpaceUnsetOrder_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SpaceUnsetOrder'
-type MockClientCommandsServer_SpaceUnsetOrder_Call struct {
- *mock.Call
-}
-
-// SpaceUnsetOrder is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcSpaceUnsetOrderRequest
-func (_e *MockClientCommandsServer_Expecter) SpaceUnsetOrder(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_SpaceUnsetOrder_Call {
- return &MockClientCommandsServer_SpaceUnsetOrder_Call{Call: _e.mock.On("SpaceUnsetOrder", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_SpaceUnsetOrder_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcSpaceUnsetOrderRequest)) *MockClientCommandsServer_SpaceUnsetOrder_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcSpaceUnsetOrderRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceUnsetOrder_Call) Return(_a0 *pb.RpcSpaceUnsetOrderResponse) *MockClientCommandsServer_SpaceUnsetOrder_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_SpaceUnsetOrder_Call) RunAndReturn(run func(context.Context, *pb.RpcSpaceUnsetOrderRequest) *pb.RpcSpaceUnsetOrderResponse) *MockClientCommandsServer_SpaceUnsetOrder_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// TemplateClone provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) TemplateClone(_a0 context.Context, _a1 *pb.RpcTemplateCloneRequest) *pb.RpcTemplateCloneResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for TemplateClone")
- }
-
- var r0 *pb.RpcTemplateCloneResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcTemplateCloneRequest) *pb.RpcTemplateCloneResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcTemplateCloneResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_TemplateClone_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TemplateClone'
-type MockClientCommandsServer_TemplateClone_Call struct {
- *mock.Call
-}
-
-// TemplateClone is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcTemplateCloneRequest
-func (_e *MockClientCommandsServer_Expecter) TemplateClone(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_TemplateClone_Call {
- return &MockClientCommandsServer_TemplateClone_Call{Call: _e.mock.On("TemplateClone", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_TemplateClone_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcTemplateCloneRequest)) *MockClientCommandsServer_TemplateClone_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcTemplateCloneRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_TemplateClone_Call) Return(_a0 *pb.RpcTemplateCloneResponse) *MockClientCommandsServer_TemplateClone_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_TemplateClone_Call) RunAndReturn(run func(context.Context, *pb.RpcTemplateCloneRequest) *pb.RpcTemplateCloneResponse) *MockClientCommandsServer_TemplateClone_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// TemplateCreateFromObject provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) TemplateCreateFromObject(_a0 context.Context, _a1 *pb.RpcTemplateCreateFromObjectRequest) *pb.RpcTemplateCreateFromObjectResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for TemplateCreateFromObject")
- }
-
- var r0 *pb.RpcTemplateCreateFromObjectResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcTemplateCreateFromObjectRequest) *pb.RpcTemplateCreateFromObjectResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcTemplateCreateFromObjectResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_TemplateCreateFromObject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TemplateCreateFromObject'
-type MockClientCommandsServer_TemplateCreateFromObject_Call struct {
- *mock.Call
-}
-
-// TemplateCreateFromObject is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcTemplateCreateFromObjectRequest
-func (_e *MockClientCommandsServer_Expecter) TemplateCreateFromObject(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_TemplateCreateFromObject_Call {
- return &MockClientCommandsServer_TemplateCreateFromObject_Call{Call: _e.mock.On("TemplateCreateFromObject", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_TemplateCreateFromObject_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcTemplateCreateFromObjectRequest)) *MockClientCommandsServer_TemplateCreateFromObject_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcTemplateCreateFromObjectRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_TemplateCreateFromObject_Call) Return(_a0 *pb.RpcTemplateCreateFromObjectResponse) *MockClientCommandsServer_TemplateCreateFromObject_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_TemplateCreateFromObject_Call) RunAndReturn(run func(context.Context, *pb.RpcTemplateCreateFromObjectRequest) *pb.RpcTemplateCreateFromObjectResponse) *MockClientCommandsServer_TemplateCreateFromObject_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// TemplateExportAll provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) TemplateExportAll(_a0 context.Context, _a1 *pb.RpcTemplateExportAllRequest) *pb.RpcTemplateExportAllResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for TemplateExportAll")
- }
-
- var r0 *pb.RpcTemplateExportAllResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcTemplateExportAllRequest) *pb.RpcTemplateExportAllResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcTemplateExportAllResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_TemplateExportAll_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'TemplateExportAll'
-type MockClientCommandsServer_TemplateExportAll_Call struct {
- *mock.Call
-}
-
-// TemplateExportAll is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcTemplateExportAllRequest
-func (_e *MockClientCommandsServer_Expecter) TemplateExportAll(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_TemplateExportAll_Call {
- return &MockClientCommandsServer_TemplateExportAll_Call{Call: _e.mock.On("TemplateExportAll", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_TemplateExportAll_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcTemplateExportAllRequest)) *MockClientCommandsServer_TemplateExportAll_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcTemplateExportAllRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_TemplateExportAll_Call) Return(_a0 *pb.RpcTemplateExportAllResponse) *MockClientCommandsServer_TemplateExportAll_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_TemplateExportAll_Call) RunAndReturn(run func(context.Context, *pb.RpcTemplateExportAllRequest) *pb.RpcTemplateExportAllResponse) *MockClientCommandsServer_TemplateExportAll_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// UnsplashDownload provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) UnsplashDownload(_a0 context.Context, _a1 *pb.RpcUnsplashDownloadRequest) *pb.RpcUnsplashDownloadResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for UnsplashDownload")
- }
-
- var r0 *pb.RpcUnsplashDownloadResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcUnsplashDownloadRequest) *pb.RpcUnsplashDownloadResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcUnsplashDownloadResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_UnsplashDownload_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UnsplashDownload'
-type MockClientCommandsServer_UnsplashDownload_Call struct {
- *mock.Call
-}
-
-// UnsplashDownload is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcUnsplashDownloadRequest
-func (_e *MockClientCommandsServer_Expecter) UnsplashDownload(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_UnsplashDownload_Call {
- return &MockClientCommandsServer_UnsplashDownload_Call{Call: _e.mock.On("UnsplashDownload", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_UnsplashDownload_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcUnsplashDownloadRequest)) *MockClientCommandsServer_UnsplashDownload_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcUnsplashDownloadRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_UnsplashDownload_Call) Return(_a0 *pb.RpcUnsplashDownloadResponse) *MockClientCommandsServer_UnsplashDownload_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_UnsplashDownload_Call) RunAndReturn(run func(context.Context, *pb.RpcUnsplashDownloadRequest) *pb.RpcUnsplashDownloadResponse) *MockClientCommandsServer_UnsplashDownload_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// UnsplashSearch provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) UnsplashSearch(_a0 context.Context, _a1 *pb.RpcUnsplashSearchRequest) *pb.RpcUnsplashSearchResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for UnsplashSearch")
- }
-
- var r0 *pb.RpcUnsplashSearchResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcUnsplashSearchRequest) *pb.RpcUnsplashSearchResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcUnsplashSearchResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_UnsplashSearch_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UnsplashSearch'
-type MockClientCommandsServer_UnsplashSearch_Call struct {
- *mock.Call
-}
-
-// UnsplashSearch is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcUnsplashSearchRequest
-func (_e *MockClientCommandsServer_Expecter) UnsplashSearch(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_UnsplashSearch_Call {
- return &MockClientCommandsServer_UnsplashSearch_Call{Call: _e.mock.On("UnsplashSearch", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_UnsplashSearch_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcUnsplashSearchRequest)) *MockClientCommandsServer_UnsplashSearch_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcUnsplashSearchRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_UnsplashSearch_Call) Return(_a0 *pb.RpcUnsplashSearchResponse) *MockClientCommandsServer_UnsplashSearch_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_UnsplashSearch_Call) RunAndReturn(run func(context.Context, *pb.RpcUnsplashSearchRequest) *pb.RpcUnsplashSearchResponse) *MockClientCommandsServer_UnsplashSearch_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WalletCloseSession provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WalletCloseSession(_a0 context.Context, _a1 *pb.RpcWalletCloseSessionRequest) *pb.RpcWalletCloseSessionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WalletCloseSession")
- }
-
- var r0 *pb.RpcWalletCloseSessionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWalletCloseSessionRequest) *pb.RpcWalletCloseSessionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWalletCloseSessionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WalletCloseSession_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WalletCloseSession'
-type MockClientCommandsServer_WalletCloseSession_Call struct {
- *mock.Call
-}
-
-// WalletCloseSession is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWalletCloseSessionRequest
-func (_e *MockClientCommandsServer_Expecter) WalletCloseSession(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WalletCloseSession_Call {
- return &MockClientCommandsServer_WalletCloseSession_Call{Call: _e.mock.On("WalletCloseSession", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WalletCloseSession_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWalletCloseSessionRequest)) *MockClientCommandsServer_WalletCloseSession_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWalletCloseSessionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletCloseSession_Call) Return(_a0 *pb.RpcWalletCloseSessionResponse) *MockClientCommandsServer_WalletCloseSession_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletCloseSession_Call) RunAndReturn(run func(context.Context, *pb.RpcWalletCloseSessionRequest) *pb.RpcWalletCloseSessionResponse) *MockClientCommandsServer_WalletCloseSession_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WalletConvert provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WalletConvert(_a0 context.Context, _a1 *pb.RpcWalletConvertRequest) *pb.RpcWalletConvertResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WalletConvert")
- }
-
- var r0 *pb.RpcWalletConvertResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWalletConvertRequest) *pb.RpcWalletConvertResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWalletConvertResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WalletConvert_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WalletConvert'
-type MockClientCommandsServer_WalletConvert_Call struct {
- *mock.Call
-}
-
-// WalletConvert is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWalletConvertRequest
-func (_e *MockClientCommandsServer_Expecter) WalletConvert(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WalletConvert_Call {
- return &MockClientCommandsServer_WalletConvert_Call{Call: _e.mock.On("WalletConvert", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WalletConvert_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWalletConvertRequest)) *MockClientCommandsServer_WalletConvert_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWalletConvertRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletConvert_Call) Return(_a0 *pb.RpcWalletConvertResponse) *MockClientCommandsServer_WalletConvert_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletConvert_Call) RunAndReturn(run func(context.Context, *pb.RpcWalletConvertRequest) *pb.RpcWalletConvertResponse) *MockClientCommandsServer_WalletConvert_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WalletCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WalletCreate(_a0 context.Context, _a1 *pb.RpcWalletCreateRequest) *pb.RpcWalletCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WalletCreate")
- }
-
- var r0 *pb.RpcWalletCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWalletCreateRequest) *pb.RpcWalletCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWalletCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WalletCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WalletCreate'
-type MockClientCommandsServer_WalletCreate_Call struct {
- *mock.Call
-}
-
-// WalletCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWalletCreateRequest
-func (_e *MockClientCommandsServer_Expecter) WalletCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WalletCreate_Call {
- return &MockClientCommandsServer_WalletCreate_Call{Call: _e.mock.On("WalletCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WalletCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWalletCreateRequest)) *MockClientCommandsServer_WalletCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWalletCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletCreate_Call) Return(_a0 *pb.RpcWalletCreateResponse) *MockClientCommandsServer_WalletCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcWalletCreateRequest) *pb.RpcWalletCreateResponse) *MockClientCommandsServer_WalletCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WalletCreateSession provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WalletCreateSession(_a0 context.Context, _a1 *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WalletCreateSession")
- }
-
- var r0 *pb.RpcWalletCreateSessionResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWalletCreateSessionResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WalletCreateSession_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WalletCreateSession'
-type MockClientCommandsServer_WalletCreateSession_Call struct {
- *mock.Call
-}
-
-// WalletCreateSession is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWalletCreateSessionRequest
-func (_e *MockClientCommandsServer_Expecter) WalletCreateSession(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WalletCreateSession_Call {
- return &MockClientCommandsServer_WalletCreateSession_Call{Call: _e.mock.On("WalletCreateSession", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WalletCreateSession_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWalletCreateSessionRequest)) *MockClientCommandsServer_WalletCreateSession_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWalletCreateSessionRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletCreateSession_Call) Return(_a0 *pb.RpcWalletCreateSessionResponse) *MockClientCommandsServer_WalletCreateSession_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletCreateSession_Call) RunAndReturn(run func(context.Context, *pb.RpcWalletCreateSessionRequest) *pb.RpcWalletCreateSessionResponse) *MockClientCommandsServer_WalletCreateSession_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WalletRecover provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WalletRecover(_a0 context.Context, _a1 *pb.RpcWalletRecoverRequest) *pb.RpcWalletRecoverResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WalletRecover")
- }
-
- var r0 *pb.RpcWalletRecoverResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWalletRecoverRequest) *pb.RpcWalletRecoverResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWalletRecoverResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WalletRecover_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WalletRecover'
-type MockClientCommandsServer_WalletRecover_Call struct {
- *mock.Call
-}
-
-// WalletRecover is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWalletRecoverRequest
-func (_e *MockClientCommandsServer_Expecter) WalletRecover(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WalletRecover_Call {
- return &MockClientCommandsServer_WalletRecover_Call{Call: _e.mock.On("WalletRecover", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WalletRecover_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWalletRecoverRequest)) *MockClientCommandsServer_WalletRecover_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWalletRecoverRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletRecover_Call) Return(_a0 *pb.RpcWalletRecoverResponse) *MockClientCommandsServer_WalletRecover_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WalletRecover_Call) RunAndReturn(run func(context.Context, *pb.RpcWalletRecoverRequest) *pb.RpcWalletRecoverResponse) *MockClientCommandsServer_WalletRecover_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceCreate provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceCreate(_a0 context.Context, _a1 *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceCreate")
- }
-
- var r0 *pb.RpcWorkspaceCreateResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceCreateResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceCreate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceCreate'
-type MockClientCommandsServer_WorkspaceCreate_Call struct {
- *mock.Call
-}
-
-// WorkspaceCreate is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceCreateRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceCreate(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceCreate_Call {
- return &MockClientCommandsServer_WorkspaceCreate_Call{Call: _e.mock.On("WorkspaceCreate", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceCreate_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceCreateRequest)) *MockClientCommandsServer_WorkspaceCreate_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceCreateRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceCreate_Call) Return(_a0 *pb.RpcWorkspaceCreateResponse) *MockClientCommandsServer_WorkspaceCreate_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceCreate_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse) *MockClientCommandsServer_WorkspaceCreate_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceExport provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceExport(_a0 context.Context, _a1 *pb.RpcWorkspaceExportRequest) *pb.RpcWorkspaceExportResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceExport")
- }
-
- var r0 *pb.RpcWorkspaceExportResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceExportRequest) *pb.RpcWorkspaceExportResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceExportResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceExport_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceExport'
-type MockClientCommandsServer_WorkspaceExport_Call struct {
- *mock.Call
-}
-
-// WorkspaceExport is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceExportRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceExport(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceExport_Call {
- return &MockClientCommandsServer_WorkspaceExport_Call{Call: _e.mock.On("WorkspaceExport", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceExport_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceExportRequest)) *MockClientCommandsServer_WorkspaceExport_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceExportRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceExport_Call) Return(_a0 *pb.RpcWorkspaceExportResponse) *MockClientCommandsServer_WorkspaceExport_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceExport_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceExportRequest) *pb.RpcWorkspaceExportResponse) *MockClientCommandsServer_WorkspaceExport_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceGetAll provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceGetAll(_a0 context.Context, _a1 *pb.RpcWorkspaceGetAllRequest) *pb.RpcWorkspaceGetAllResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceGetAll")
- }
-
- var r0 *pb.RpcWorkspaceGetAllResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceGetAllRequest) *pb.RpcWorkspaceGetAllResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceGetAllResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceGetAll_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceGetAll'
-type MockClientCommandsServer_WorkspaceGetAll_Call struct {
- *mock.Call
-}
-
-// WorkspaceGetAll is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceGetAllRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceGetAll(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceGetAll_Call {
- return &MockClientCommandsServer_WorkspaceGetAll_Call{Call: _e.mock.On("WorkspaceGetAll", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceGetAll_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceGetAllRequest)) *MockClientCommandsServer_WorkspaceGetAll_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceGetAllRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceGetAll_Call) Return(_a0 *pb.RpcWorkspaceGetAllResponse) *MockClientCommandsServer_WorkspaceGetAll_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceGetAll_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceGetAllRequest) *pb.RpcWorkspaceGetAllResponse) *MockClientCommandsServer_WorkspaceGetAll_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceGetCurrent provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceGetCurrent(_a0 context.Context, _a1 *pb.RpcWorkspaceGetCurrentRequest) *pb.RpcWorkspaceGetCurrentResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceGetCurrent")
- }
-
- var r0 *pb.RpcWorkspaceGetCurrentResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceGetCurrentRequest) *pb.RpcWorkspaceGetCurrentResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceGetCurrentResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceGetCurrent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceGetCurrent'
-type MockClientCommandsServer_WorkspaceGetCurrent_Call struct {
- *mock.Call
-}
-
-// WorkspaceGetCurrent is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceGetCurrentRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceGetCurrent(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceGetCurrent_Call {
- return &MockClientCommandsServer_WorkspaceGetCurrent_Call{Call: _e.mock.On("WorkspaceGetCurrent", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceGetCurrent_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceGetCurrentRequest)) *MockClientCommandsServer_WorkspaceGetCurrent_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceGetCurrentRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceGetCurrent_Call) Return(_a0 *pb.RpcWorkspaceGetCurrentResponse) *MockClientCommandsServer_WorkspaceGetCurrent_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceGetCurrent_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceGetCurrentRequest) *pb.RpcWorkspaceGetCurrentResponse) *MockClientCommandsServer_WorkspaceGetCurrent_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceObjectAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceObjectAdd(_a0 context.Context, _a1 *pb.RpcWorkspaceObjectAddRequest) *pb.RpcWorkspaceObjectAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceObjectAdd")
- }
-
- var r0 *pb.RpcWorkspaceObjectAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceObjectAddRequest) *pb.RpcWorkspaceObjectAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceObjectAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceObjectAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceObjectAdd'
-type MockClientCommandsServer_WorkspaceObjectAdd_Call struct {
- *mock.Call
-}
-
-// WorkspaceObjectAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceObjectAddRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceObjectAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceObjectAdd_Call {
- return &MockClientCommandsServer_WorkspaceObjectAdd_Call{Call: _e.mock.On("WorkspaceObjectAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceObjectAddRequest)) *MockClientCommandsServer_WorkspaceObjectAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceObjectAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectAdd_Call) Return(_a0 *pb.RpcWorkspaceObjectAddResponse) *MockClientCommandsServer_WorkspaceObjectAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceObjectAddRequest) *pb.RpcWorkspaceObjectAddResponse) *MockClientCommandsServer_WorkspaceObjectAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceObjectListAdd provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceObjectListAdd(_a0 context.Context, _a1 *pb.RpcWorkspaceObjectListAddRequest) *pb.RpcWorkspaceObjectListAddResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceObjectListAdd")
- }
-
- var r0 *pb.RpcWorkspaceObjectListAddResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceObjectListAddRequest) *pb.RpcWorkspaceObjectListAddResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceObjectListAddResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceObjectListAdd_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceObjectListAdd'
-type MockClientCommandsServer_WorkspaceObjectListAdd_Call struct {
- *mock.Call
-}
-
-// WorkspaceObjectListAdd is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceObjectListAddRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceObjectListAdd(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceObjectListAdd_Call {
- return &MockClientCommandsServer_WorkspaceObjectListAdd_Call{Call: _e.mock.On("WorkspaceObjectListAdd", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectListAdd_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceObjectListAddRequest)) *MockClientCommandsServer_WorkspaceObjectListAdd_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceObjectListAddRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectListAdd_Call) Return(_a0 *pb.RpcWorkspaceObjectListAddResponse) *MockClientCommandsServer_WorkspaceObjectListAdd_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectListAdd_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceObjectListAddRequest) *pb.RpcWorkspaceObjectListAddResponse) *MockClientCommandsServer_WorkspaceObjectListAdd_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceObjectListRemove provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceObjectListRemove(_a0 context.Context, _a1 *pb.RpcWorkspaceObjectListRemoveRequest) *pb.RpcWorkspaceObjectListRemoveResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceObjectListRemove")
- }
-
- var r0 *pb.RpcWorkspaceObjectListRemoveResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceObjectListRemoveRequest) *pb.RpcWorkspaceObjectListRemoveResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceObjectListRemoveResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceObjectListRemove_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceObjectListRemove'
-type MockClientCommandsServer_WorkspaceObjectListRemove_Call struct {
- *mock.Call
-}
-
-// WorkspaceObjectListRemove is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceObjectListRemoveRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceObjectListRemove(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceObjectListRemove_Call {
- return &MockClientCommandsServer_WorkspaceObjectListRemove_Call{Call: _e.mock.On("WorkspaceObjectListRemove", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectListRemove_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceObjectListRemoveRequest)) *MockClientCommandsServer_WorkspaceObjectListRemove_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceObjectListRemoveRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectListRemove_Call) Return(_a0 *pb.RpcWorkspaceObjectListRemoveResponse) *MockClientCommandsServer_WorkspaceObjectListRemove_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceObjectListRemove_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceObjectListRemoveRequest) *pb.RpcWorkspaceObjectListRemoveResponse) *MockClientCommandsServer_WorkspaceObjectListRemove_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceOpen provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceOpen(_a0 context.Context, _a1 *pb.RpcWorkspaceOpenRequest) *pb.RpcWorkspaceOpenResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceOpen")
- }
-
- var r0 *pb.RpcWorkspaceOpenResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceOpenRequest) *pb.RpcWorkspaceOpenResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceOpenResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceOpen_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceOpen'
-type MockClientCommandsServer_WorkspaceOpen_Call struct {
- *mock.Call
-}
-
-// WorkspaceOpen is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceOpenRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceOpen(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceOpen_Call {
- return &MockClientCommandsServer_WorkspaceOpen_Call{Call: _e.mock.On("WorkspaceOpen", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceOpen_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceOpenRequest)) *MockClientCommandsServer_WorkspaceOpen_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceOpenRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceOpen_Call) Return(_a0 *pb.RpcWorkspaceOpenResponse) *MockClientCommandsServer_WorkspaceOpen_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceOpen_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceOpenRequest) *pb.RpcWorkspaceOpenResponse) *MockClientCommandsServer_WorkspaceOpen_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceSelect provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceSelect(_a0 context.Context, _a1 *pb.RpcWorkspaceSelectRequest) *pb.RpcWorkspaceSelectResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceSelect")
- }
-
- var r0 *pb.RpcWorkspaceSelectResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceSelectRequest) *pb.RpcWorkspaceSelectResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceSelectResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceSelect_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceSelect'
-type MockClientCommandsServer_WorkspaceSelect_Call struct {
- *mock.Call
-}
-
-// WorkspaceSelect is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceSelectRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceSelect(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceSelect_Call {
- return &MockClientCommandsServer_WorkspaceSelect_Call{Call: _e.mock.On("WorkspaceSelect", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceSelect_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceSelectRequest)) *MockClientCommandsServer_WorkspaceSelect_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceSelectRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceSelect_Call) Return(_a0 *pb.RpcWorkspaceSelectResponse) *MockClientCommandsServer_WorkspaceSelect_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceSelect_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceSelectRequest) *pb.RpcWorkspaceSelectResponse) *MockClientCommandsServer_WorkspaceSelect_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// WorkspaceSetInfo provides a mock function with given fields: _a0, _a1
-func (_m *MockClientCommandsServer) WorkspaceSetInfo(_a0 context.Context, _a1 *pb.RpcWorkspaceSetInfoRequest) *pb.RpcWorkspaceSetInfoResponse {
- ret := _m.Called(_a0, _a1)
-
- if len(ret) == 0 {
- panic("no return value specified for WorkspaceSetInfo")
- }
-
- var r0 *pb.RpcWorkspaceSetInfoResponse
- if rf, ok := ret.Get(0).(func(context.Context, *pb.RpcWorkspaceSetInfoRequest) *pb.RpcWorkspaceSetInfoResponse); ok {
- r0 = rf(_a0, _a1)
- } else {
- if ret.Get(0) != nil {
- r0 = ret.Get(0).(*pb.RpcWorkspaceSetInfoResponse)
- }
- }
-
- return r0
-}
-
-// MockClientCommandsServer_WorkspaceSetInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'WorkspaceSetInfo'
-type MockClientCommandsServer_WorkspaceSetInfo_Call struct {
- *mock.Call
-}
-
-// WorkspaceSetInfo is a helper method to define mock.On call
-// - _a0 context.Context
-// - _a1 *pb.RpcWorkspaceSetInfoRequest
-func (_e *MockClientCommandsServer_Expecter) WorkspaceSetInfo(_a0 interface{}, _a1 interface{}) *MockClientCommandsServer_WorkspaceSetInfo_Call {
- return &MockClientCommandsServer_WorkspaceSetInfo_Call{Call: _e.mock.On("WorkspaceSetInfo", _a0, _a1)}
-}
-
-func (_c *MockClientCommandsServer_WorkspaceSetInfo_Call) Run(run func(_a0 context.Context, _a1 *pb.RpcWorkspaceSetInfoRequest)) *MockClientCommandsServer_WorkspaceSetInfo_Call {
- _c.Call.Run(func(args mock.Arguments) {
- run(args[0].(context.Context), args[1].(*pb.RpcWorkspaceSetInfoRequest))
- })
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceSetInfo_Call) Return(_a0 *pb.RpcWorkspaceSetInfoResponse) *MockClientCommandsServer_WorkspaceSetInfo_Call {
- _c.Call.Return(_a0)
- return _c
-}
-
-func (_c *MockClientCommandsServer_WorkspaceSetInfo_Call) RunAndReturn(run func(context.Context, *pb.RpcWorkspaceSetInfoRequest) *pb.RpcWorkspaceSetInfoResponse) *MockClientCommandsServer_WorkspaceSetInfo_Call {
- _c.Call.Return(run)
- return _c
-}
-
-// NewMockClientCommandsServer creates a new instance of MockClientCommandsServer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
-// The first argument is typically a *testing.T value.
-func NewMockClientCommandsServer(t interface {
- mock.TestingT
- Cleanup(func())
-}) *MockClientCommandsServer {
- mock := &MockClientCommandsServer{}
- mock.Mock.Test(t)
-
- t.Cleanup(func() { mock.AssertExpectations(t) })
-
- return mock
-}
From 7b9773df9b6acdb788a43a143283b55daf291761 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Mar 2025 08:22:47 +0100
Subject: [PATCH 100/132] GO-4459: Change remaining apicore interfaces
---
core/api/server/middleware_test.go | 2 +-
core/api/server/server_test.go | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go
index a0d283551..a51f50dfc 100644
--- a/core/api/server/middleware_test.go
+++ b/core/api/server/middleware_test.go
@@ -12,9 +12,9 @@ import (
"github.com/stretchr/testify/require"
"github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go
index ef56a56b5..dd3535ffd 100644
--- a/core/api/server/server_test.go
+++ b/core/api/server/server_test.go
@@ -7,7 +7,7 @@ import (
"github.com/anyproto/anytype-heart/core/anytype/account"
"github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
- "github.com/anyproto/anytype-heart/pb/service/mock_service"
+ "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
)
type fixture struct {
From 07976b52abe4c54b8abf847cdf2b7d71a12d07bf Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Mar 2025 09:10:53 +0100
Subject: [PATCH 101/132] GO-4459: Add tests for update member
---
core/api/internal/space/service_test.go | 628 ++++++++++++++++++++++++
1 file changed, 628 insertions(+)
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index add83ca27..2d05cc454 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -1,6 +1,7 @@
package space
import (
+ "context"
"regexp"
"testing"
@@ -771,3 +772,630 @@ func TestSpaceService_GetMember(t *testing.T) {
require.Equal(t, "editor", member.Role)
})
}
+
+func TestSpaceService_UpdateMember(t *testing.T) {
+ t.Run("successful approval for joining member", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // First GetMember call returns a member with status "joining"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-1"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-1"),
+ bundle.RelationKeyName.String(): pbtypes.String("Joining Member"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String("icon.png"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-1"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("joining.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Joining)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // Expect approval call (for a joining member, role 'viewer' maps to ParticipantPermissions_Reader)
+ fx.mwMock.On("SpaceRequestApprove", mock.Anything, &pb.RpcSpaceRequestApproveRequest{
+ SpaceId: "space-id",
+ Identity: "member-1",
+ Permissions: model.ParticipantPermissions_Reader,
+ }).Return(&pb.RpcSpaceRequestApproveResponse{
+ Error: &pb.RpcSpaceRequestApproveResponseError{Code: pb.RpcSpaceRequestApproveResponseError_NULL},
+ }, nil).Once()
+
+ // Second GetMember call returns the updated member with status "active"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-1"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-1"),
+ bundle.RelationKeyName.String(): pbtypes.String("Joining Member"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String("icon.png"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-1"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("joining.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ member, err := fx.UpdateMember(ctx, "space-id", "member-1", UpdateMemberRequest{
+ Status: "active",
+ Role: "viewer",
+ })
+
+ // then
+ require.NoError(t, err)
+ require.Equal(t, "active", member.Status)
+ require.Equal(t, "viewer", member.Role)
+ })
+
+ t.Run("successful role update for active member", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // First GetMember call returns a member with status "active" and role "viewer"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-2"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-2"),
+ bundle.RelationKeyName.String(): pbtypes.String("Active Member"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-2"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("active.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // Expect role update call (for an active member, updating role to 'editor' maps to ParticipantPermissions_Writer)
+ fx.mwMock.On("SpaceParticipantPermissionsChange", mock.Anything, &pb.RpcSpaceParticipantPermissionsChangeRequest{
+ SpaceId: "space-id",
+ Changes: []*model.ParticipantPermissionChange{
+ {
+ Identity: "member-2",
+ Perms: model.ParticipantPermissions_Writer,
+ },
+ },
+ }).Return(&pb.RpcSpaceParticipantPermissionsChangeResponse{
+ Error: &pb.RpcSpaceParticipantPermissionsChangeResponseError{Code: pb.RpcSpaceParticipantPermissionsChangeResponseError_NULL},
+ }, nil).Once()
+
+ // Second GetMember call returns the updated member with role "editor"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-2"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-2"),
+ bundle.RelationKeyName.String(): pbtypes.String("Active Member"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-2"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("active.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Writer)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ member, err := fx.UpdateMember(ctx, "space-id", "member-2", UpdateMemberRequest{
+ Status: "active",
+ Role: "editor",
+ })
+
+ // then
+ require.NoError(t, err)
+ require.Equal(t, "active", member.Status)
+ require.Equal(t, "editor", member.Role)
+ })
+
+ t.Run("successful decline of member", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // First GetMember call returns a member record
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-3"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-3"),
+ bundle.RelationKeyName.String(): pbtypes.String("Member To Decline"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String("icon.png"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-3"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("decline.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Joining)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // Expect decline call
+ fx.mwMock.On("SpaceRequestDecline", mock.Anything, &pb.RpcSpaceRequestDeclineRequest{
+ SpaceId: "space-id",
+ Identity: "member-3",
+ }).Return(&pb.RpcSpaceRequestDeclineResponse{
+ Error: &pb.RpcSpaceRequestDeclineResponseError{Code: pb.RpcSpaceRequestDeclineResponseError_NULL},
+ }, nil).Once()
+
+ // Second GetMember call returns the member with status "declined"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-3"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-3"),
+ bundle.RelationKeyName.String(): pbtypes.String("Member To Decline"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String("icon.png"),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-3"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("decline.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Declined)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ member, err := fx.UpdateMember(ctx, "space-id", "member-3", UpdateMemberRequest{
+ Status: "declined",
+ })
+
+ // then
+ require.NoError(t, err)
+ require.Equal(t, "declined", member.Status)
+ })
+
+ t.Run("successful removal of member", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // First GetMember call returns a member with status "active"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-4"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-4"),
+ bundle.RelationKeyName.String(): pbtypes.String("Member To Remove"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-4"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("remove.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Writer)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // Expect removal call
+ fx.mwMock.On("SpaceParticipantRemove", mock.Anything, &pb.RpcSpaceParticipantRemoveRequest{
+ SpaceId: "space-id",
+ Identities: []string{"member-4"},
+ }).Return(&pb.RpcSpaceParticipantRemoveResponse{
+ Error: &pb.RpcSpaceParticipantRemoveResponseError{Code: pb.RpcSpaceParticipantRemoveResponseError_NULL},
+ }, nil).Once()
+
+ // Second GetMember call returns the member with status "removed"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-4"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-4"),
+ bundle.RelationKeyName.String(): pbtypes.String("Member To Remove"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("👤"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-4"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("remove.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Writer)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Removed)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ member, err := fx.UpdateMember(ctx, "space-id", "member-4", UpdateMemberRequest{
+ Status: "removed",
+ })
+
+ // then
+ require.NoError(t, err)
+ require.Equal(t, "removed", member.Status)
+ })
+
+ t.Run("invalid status returns error", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // First GetMember call returns a member record
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-5"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-5"),
+ bundle.RelationKeyName.String(): pbtypes.String("Member Invalid Status"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-5"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("invalid.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Active)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ _, err := fx.UpdateMember(ctx, "space-id", "member-5", UpdateMemberRequest{
+ Status: "invalid",
+ Role: "viewer",
+ })
+
+ // then
+ require.ErrorIs(t, err, ErrInvalidApproveMemberStatus)
+ })
+
+ t.Run("invalid role for active update returns error", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // First GetMember call returns a member with status "joining"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-6"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-6"),
+ bundle.RelationKeyName.String(): pbtypes.String("Member Invalid Role"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-6"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("invalidrole.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Joining)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ _, err := fx.UpdateMember(ctx, "space-id", "member-6", UpdateMemberRequest{
+ Status: "active",
+ Role: "invalid",
+ })
+
+ // then
+ require.ErrorIs(t, err, ErrInvalidApproveMemberRole)
+ })
+
+ t.Run("failure in update operation returns error", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ // First GetMember call returns a member with status "joining"
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-7"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{
+ {
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyId.String(): pbtypes.String("member-7"),
+ bundle.RelationKeyName.String(): pbtypes.String("Member Approval Fail"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyIdentity.String(): pbtypes.String("member-7"),
+ bundle.RelationKeyGlobalName.String(): pbtypes.String("fail.any"),
+ bundle.RelationKeyParticipantPermissions.String(): pbtypes.Int64(int64(model.ParticipantPermissions_Reader)),
+ bundle.RelationKeyParticipantStatus.String(): pbtypes.Int64(int64(model.ParticipantStatus_Joining)),
+ },
+ },
+ },
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // Expect approval call fails
+ fx.mwMock.On("SpaceRequestApprove", mock.Anything, &pb.RpcSpaceRequestApproveRequest{
+ SpaceId: "space-id",
+ Identity: "member-7",
+ Permissions: model.ParticipantPermissions_Reader,
+ }).Return(&pb.RpcSpaceRequestApproveResponse{
+ Error: &pb.RpcSpaceRequestApproveResponseError{Code: pb.RpcSpaceRequestApproveResponseError_UNKNOWN_ERROR},
+ }, nil).Once()
+
+ // when
+ _, err := fx.UpdateMember(ctx, "space-id", "member-7", UpdateMemberRequest{
+ Status: "active",
+ Role: "viewer",
+ })
+
+ // then
+ require.ErrorIs(t, err, ErrFailedUpdateMember)
+ })
+
+ t.Run("failed to get member returns error", func(t *testing.T) {
+ // given
+ ctx := context.Background()
+ fx := newFixture(t)
+
+ fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
+ SpaceId: "space-id",
+ Filters: []*model.BlockContentDataviewFilter{
+ {
+ Operator: model.BlockContentDataviewFilter_No,
+ RelationKey: bundle.RelationKeyIdentity.String(),
+ Condition: model.BlockContentDataviewFilter_Equal,
+ Value: pbtypes.String("member-8"),
+ },
+ },
+ Keys: []string{
+ bundle.RelationKeyId.String(),
+ bundle.RelationKeyName.String(),
+ bundle.RelationKeyIconEmoji.String(),
+ bundle.RelationKeyIconImage.String(),
+ bundle.RelationKeyIdentity.String(),
+ bundle.RelationKeyGlobalName.String(),
+ bundle.RelationKeyParticipantPermissions.String(),
+ bundle.RelationKeyParticipantStatus.String(),
+ },
+ }).Return(&pb.RpcObjectSearchResponse{
+ Records: []*types.Struct{},
+ Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
+ }, nil).Once()
+
+ // when
+ _, err := fx.UpdateMember(ctx, "space-id", "member-8", UpdateMemberRequest{
+ Status: "active",
+ Role: "viewer",
+ })
+
+ // then
+ require.ErrorIs(t, err, ErrMemberNotFound)
+ })
+}
From e3a6096d8ee26d58c579db4fb5cc3007005aeb4c Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Mar 2025 10:38:49 +0100
Subject: [PATCH 102/132] GO-4459: Add description field to space model and
update related services
---
core/api/docs/docs.go | 2 +-
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 8 +
core/api/internal/search/service_test.go | 25 ++-
core/api/internal/space/handler.go | 5 +
core/api/internal/space/model.go | 16 +-
core/api/internal/space/service.go | 71 +++++---
core/api/internal/space/service_test.go | 209 ++++++++++++++---------
8 files changed, 223 insertions(+), 115 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 003f06a7f..2489e0057 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,7 +6,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index a0d504929..b42a9f279 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,5 +1,5 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index f4bbab887..0cf6ef1ff 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -591,6 +591,10 @@ components:
- Name
space.CreateSpaceRequest:
properties:
+ description:
+ description: The description of the space
+ example: The local-first wiki
+ type: string
name:
description: The name of the space
example: New Space
@@ -650,6 +654,10 @@ components:
space.Space:
description: The space
properties:
+ description:
+ description: The description of the space
+ example: The local-first wiki
+ type: string
gateway_url:
description: The gateway url to serve files and media
example: http://127.0.0.1:31006
diff --git a/core/api/internal/search/service_test.go b/core/api/internal/search/service_test.go
index 1277e1fbf..e56f6d508 100644
--- a/core/api/internal/search/service_test.go
+++ b/core/api/internal/search/service_test.go
@@ -93,7 +93,7 @@ func TestSearchService_GlobalSearch(t *testing.T) {
EmptyPlacement: model.BlockContentDataviewSort_End,
},
},
- Keys: []string{bundle.RelationKeyTargetSpaceId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String()},
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
}).Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{
{
@@ -107,15 +107,32 @@ func TestSearchService_GlobalSearch(t *testing.T) {
// Mock workspace opening
fx.mwMock.On("WorkspaceOpen", mock.Anything, &pb.RpcWorkspaceOpenRequest{
- SpaceId: mockedSpaceId,
- WithChat: true,
+ SpaceId: mockedSpaceId,
}).Return(&pb.RpcWorkspaceOpenResponse{
Info: &model.AccountInfo{
- TechSpaceId: mockedSpaceId,
+ WorkspaceObjectId: "workspace-object-id",
},
Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
}).Once()
+ // Mock object show of workspace
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: mockedSpaceId,
+ ObjectId: "workspace-object-id",
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String("Space Name"),
+ },
+ },
+ },
+ },
+ },
+ }, nil).Once()
+
// Mock objects in space
fx.mwMock.On("ObjectSearch", mock.Anything, &pb.RpcObjectSearchRequest{
SpaceId: mockedSpaceId,
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index ab4107fc6..5cd3f5606 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -31,6 +31,7 @@ func GetSpacesHandler(s *SpaceService) gin.HandlerFunc {
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedListSpaces, http.StatusInternalServerError),
util.ErrToCode(ErrFailedOpenWorkspace, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedOpenSpace, http.StatusInternalServerError),
)
if code != http.StatusOK {
@@ -64,6 +65,7 @@ func GetSpaceHandler(s *SpaceService) gin.HandlerFunc {
code := util.MapErrorCode(err,
util.ErrToCode(ErrWorkspaceNotFound, http.StatusNotFound),
util.ErrToCode(ErrFailedOpenWorkspace, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedOpenSpace, http.StatusInternalServerError),
)
if code != http.StatusOK {
@@ -103,6 +105,9 @@ func CreateSpaceHandler(s *SpaceService) gin.HandlerFunc {
space, err := s.CreateSpace(c.Request.Context(), req)
code := util.MapErrorCode(err,
util.ErrToCode(ErrFailedCreateSpace, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedSetSpaceInfo, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedOpenWorkspace, http.StatusInternalServerError),
+ util.ErrToCode(ErrFailedOpenSpace, http.StatusInternalServerError),
)
if code != http.StatusOK {
diff --git a/core/api/internal/space/model.go b/core/api/internal/space/model.go
index 146e65ffb..7bdb09494 100644
--- a/core/api/internal/space/model.go
+++ b/core/api/internal/space/model.go
@@ -9,16 +9,18 @@ type SpaceResponse struct {
}
type CreateSpaceRequest struct {
- Name string `json:"name" example:"New Space"` // The name of the space
+ Name string `json:"name" example:"New Space"` // The name of the space
+ Description string `json:"description" example:"The local-first wiki"` // The description of the space
}
type Space struct {
- Object string `json:"object" example:"space"` // The data model of the object
- Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
- Name string `json:"name" example:"My Space"` // The name of the space
- Icon util.Icon `json:"icon"` // The icon of the space
- GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"` // The gateway url to serve files and media
- NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
+ Object string `json:"object" example:"space"` // The data model of the object
+ Id string `json:"id" example:"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1"` // The id of the space
+ Name string `json:"name" example:"My Space"` // The name of the space
+ Icon util.Icon `json:"icon"` // The icon of the space
+ Description string `json:"description" example:"The local-first wiki"` // The description of the space
+ GatewayUrl string `json:"gateway_url" example:"http://127.0.0.1:31006"` // The gateway url to serve files and media
+ NetworkId string `json:"network_id" example:"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU"` // The network id of the space
}
type MemberResponse struct {
diff --git a/core/api/internal/space/service.go b/core/api/internal/space/service.go
index 9362ff577..2c566264a 100644
--- a/core/api/internal/space/service.go
+++ b/core/api/internal/space/service.go
@@ -22,9 +22,11 @@ import (
var (
ErrFailedListSpaces = errors.New("failed to retrieve list of spaces")
ErrFailedOpenWorkspace = errors.New("failed to open workspace")
+ ErrFailedOpenSpace = errors.New("failed to open space")
ErrWorkspaceNotFound = errors.New("workspace not found")
ErrFailedGenerateRandomIcon = errors.New("failed to generate random icon")
ErrFailedCreateSpace = errors.New("failed to create space")
+ ErrFailedSetSpaceInfo = errors.New("failed to set space info")
ErrFailedListMembers = errors.New("failed to retrieve list of members")
ErrFailedGetMember = errors.New("failed to retrieve member")
ErrMemberNotFound = errors.New("member not found")
@@ -77,7 +79,7 @@ func (s *SpaceService) ListSpaces(ctx context.Context, offset int, limit int) (s
EmptyPlacement: model.BlockContentDataviewSort_End,
},
},
- Keys: []string{bundle.RelationKeyTargetSpaceId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String()},
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
@@ -89,10 +91,7 @@ func (s *SpaceService) ListSpaces(ctx context.Context, offset int, limit int) (s
spaces = make([]Space, 0, len(paginatedRecords))
for _, record := range paginatedRecords {
- name := record.Fields[bundle.RelationKeyName.String()].GetStringValue()
- icon := util.GetIcon(s.AccountInfo, record.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), record.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0)
-
- workspace, err := s.getWorkspaceInfo(record.Fields[bundle.RelationKeyTargetSpaceId.String()].GetStringValue(), name, icon)
+ workspace, err := s.getSpaceInfo(record.Fields[bundle.RelationKeyTargetSpaceId.String()].GetStringValue())
if err != nil {
return nil, 0, false, err
}
@@ -122,7 +121,7 @@ func (s *SpaceService) GetSpace(ctx context.Context, spaceId string) (Space, err
Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
},
},
- Keys: []string{bundle.RelationKeyTargetSpaceId.String(), bundle.RelationKeyName.String(), bundle.RelationKeyIconEmoji.String(), bundle.RelationKeyIconImage.String()},
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
})
if resp.Error.Code != pb.RpcObjectSearchResponseError_NULL {
@@ -133,9 +132,7 @@ func (s *SpaceService) GetSpace(ctx context.Context, spaceId string) (Space, err
return Space{}, ErrWorkspaceNotFound
}
- name := resp.Records[0].Fields[bundle.RelationKeyName.String()].GetStringValue()
- icon := util.GetIcon(s.AccountInfo, resp.Records[0].Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), resp.Records[0].Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0)
- return s.getWorkspaceInfo(spaceId, name, icon)
+ return s.getSpaceInfo(spaceId)
}
// CreateSpace creates a new space with the given name and returns the space info.
@@ -146,7 +143,6 @@ func (s *SpaceService) CreateSpace(ctx context.Context, request CreateSpaceReque
return Space{}, ErrFailedGenerateRandomIcon
}
- // Create new workspace with a random icon and import default use case
resp := s.mw.WorkspaceCreate(ctx, &pb.RpcWorkspaceCreateRequest{
Details: &types.Struct{
Fields: map[string]*types.Value{
@@ -159,11 +155,27 @@ func (s *SpaceService) CreateSpace(ctx context.Context, request CreateSpaceReque
WithChat: true,
})
- if resp.Error.Code != pb.RpcWorkspaceCreateResponseError_NULL {
+ if resp.Error != nil && resp.Error.Code != pb.RpcWorkspaceCreateResponseError_NULL {
return Space{}, ErrFailedCreateSpace
}
- return s.getWorkspaceInfo(resp.SpaceId, name, util.Icon{})
+ description := request.Description
+ if description != "" {
+ infoResp := s.mw.WorkspaceSetInfo(ctx, &pb.RpcWorkspaceSetInfoRequest{
+ SpaceId: resp.SpaceId,
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyDescription.String(): pbtypes.String(description),
+ },
+ },
+ })
+
+ if infoResp.Error != nil && infoResp.Error.Code != pb.RpcWorkspaceSetInfoResponseError_NULL {
+ return Space{}, ErrFailedSetSpaceInfo
+ }
+ }
+
+ return s.getSpaceInfo(resp.SpaceId)
}
// ListMembers returns a paginated list of members in the space with the given ID.
@@ -364,24 +376,37 @@ func (s *SpaceService) UpdateMember(ctx context.Context, spaceId string, memberI
return member, nil
}
-// getWorkspaceInfo returns the workspace info for the space with the given ID.
-func (s *SpaceService) getWorkspaceInfo(spaceId string, name string, icon util.Icon) (space Space, err error) {
+// getSpaceInfo returns the workspace info for the space with the given ID.
+func (s *SpaceService) getSpaceInfo(spaceId string) (space Space, err error) {
workspaceResponse := s.mw.WorkspaceOpen(context.Background(), &pb.RpcWorkspaceOpenRequest{
- SpaceId: spaceId,
- WithChat: true,
+ SpaceId: spaceId,
})
- if workspaceResponse.Error.Code != pb.RpcWorkspaceOpenResponseError_NULL {
+ if workspaceResponse.Error != nil && workspaceResponse.Error.Code != pb.RpcWorkspaceOpenResponseError_NULL {
return Space{}, ErrFailedOpenWorkspace
}
+ spaceResp := s.mw.ObjectShow(context.Background(), &pb.RpcObjectShowRequest{
+ SpaceId: spaceId,
+ ObjectId: workspaceResponse.Info.WorkspaceObjectId,
+ })
+
+ if spaceResp.Error != nil && spaceResp.Error.Code != pb.RpcObjectShowResponseError_NULL {
+ return Space{}, ErrFailedOpenSpace
+ }
+
+ name := spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyName.String()].GetStringValue()
+ icon := util.GetIcon(s.AccountInfo, spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconEmoji.String()].GetStringValue(), spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyIconImage.String()].GetStringValue(), "", 0)
+ description := spaceResp.ObjectView.Details[0].Details.Fields[bundle.RelationKeyDescription.String()].GetStringValue()
+
return Space{
- Object: "space",
- Id: spaceId,
- Name: name,
- Icon: icon,
- GatewayUrl: workspaceResponse.Info.GatewayUrl,
- NetworkId: workspaceResponse.Info.NetworkId,
+ Object: "space",
+ Id: spaceId,
+ Name: name,
+ Icon: icon,
+ Description: description,
+ GatewayUrl: workspaceResponse.Info.GatewayUrl,
+ NetworkId: workspaceResponse.Info.NetworkId,
}, nil
}
diff --git a/core/api/internal/space/service_test.go b/core/api/internal/space/service_test.go
index 2d05cc454..31a85b3fb 100644
--- a/core/api/internal/space/service_test.go
+++ b/core/api/internal/space/service_test.go
@@ -74,23 +74,17 @@ func TestSpaceService_ListSpaces(t *testing.T) {
EmptyPlacement: model.BlockContentDataviewSort_End,
},
},
- Keys: []string{"targetSpaceId", "name", "iconEmoji", "iconImage"},
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
}).Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{
{
Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String("Another Workspace"),
bundle.RelationKeyTargetSpaceId.String(): pbtypes.String("another-space-id"),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
- bundle.RelationKeyIconImage.String(): pbtypes.String(iconImage),
},
},
{
Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
bundle.RelationKeyTargetSpaceId.String(): pbtypes.String("my-space-id"),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
- bundle.RelationKeyIconImage.String(): pbtypes.String(""),
},
},
},
@@ -100,23 +94,62 @@ func TestSpaceService_ListSpaces(t *testing.T) {
fx.mwMock.On("WorkspaceOpen", mock.Anything, mock.Anything).Return(&pb.RpcWorkspaceOpenResponse{
Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
Info: &model.AccountInfo{
- HomeObjectId: "home-object-id",
- ArchiveObjectId: "archive-object-id",
- ProfileObjectId: "profile-object-id",
- MarketplaceWorkspaceId: "marketplace-workspace-id",
- WorkspaceObjectId: "workspace-object-id",
- DeviceId: "device-id",
- AccountSpaceId: "account-space-id",
- WidgetsId: "widgets-id",
- SpaceViewId: "space-view-id",
- TechSpaceId: "tech-space-id",
- GatewayUrl: "gateway-url",
- LocalStoragePath: "local-storage-path",
- TimeZone: "time-zone",
- AnalyticsId: "analytics-id",
- NetworkId: "network-id",
+ WorkspaceObjectId: "workspace-object-id-1",
+ GatewayUrl: "gateway-url-1",
+ NetworkId: "network-id-1",
},
- }, nil).Twice()
+ }, nil).Once()
+
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: "another-space-id",
+ ObjectId: "workspace-object-id-1",
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String("Another Workspace"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String(""),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(iconImage),
+ bundle.RelationKeyDescription.String(): pbtypes.String("desc1"),
+ },
+ },
+ },
+ },
+ },
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ }, nil).Once()
+
+ fx.mwMock.On("WorkspaceOpen", mock.Anything, mock.Anything).Return(&pb.RpcWorkspaceOpenResponse{
+ Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
+ Info: &model.AccountInfo{
+ WorkspaceObjectId: "workspace-object-id-2",
+ GatewayUrl: "gateway-url-2",
+ NetworkId: "network-id-2",
+ },
+ }, nil).Once()
+
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: "my-space-id",
+ ObjectId: "workspace-object-id-2",
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyDescription.String(): pbtypes.String("desc2"),
+ },
+ },
+ },
+ },
+ },
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ }, nil).Once()
// when
spaces, total, hasMore, err := fx.ListSpaces(nil, offset, limit)
@@ -124,12 +157,20 @@ func TestSpaceService_ListSpaces(t *testing.T) {
// then
require.NoError(t, err)
require.Len(t, spaces, 2)
+
require.Equal(t, "Another Workspace", spaces[0].Name)
require.Equal(t, "another-space-id", spaces[0].Id)
- require.Regexpf(t, regexp.MustCompile(gatewayUrl+`/image/`+iconImage), *spaces[0].Icon.File, "Icon URL does not match")
+ require.Equal(t, "desc1", spaces[0].Description)
+ require.Equal(t, "gateway-url-1", spaces[0].GatewayUrl)
+ require.Equal(t, "network-id-1", spaces[0].NetworkId)
+
require.Equal(t, "My Workspace", spaces[1].Name)
require.Equal(t, "my-space-id", spaces[1].Id)
+ require.Equal(t, "desc2", spaces[1].Description)
require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("🚀")}, spaces[1].Icon)
+ require.Equal(t, "gateway-url-2", spaces[1].GatewayUrl)
+ require.Equal(t, "network-id-2", spaces[1].NetworkId)
+
require.Equal(t, 2, total)
require.False(t, hasMore)
})
@@ -163,10 +204,7 @@ func TestSpaceService_ListSpaces(t *testing.T) {
Records: []*types.Struct{
{
Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
bundle.RelationKeyTargetSpaceId.String(): pbtypes.String("my-space-id"),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
- bundle.RelationKeyIconImage.String(): pbtypes.String(""),
},
},
},
@@ -212,18 +250,12 @@ func TestSpaceService_GetSpace(t *testing.T) {
},
Keys: []string{
bundle.RelationKeyTargetSpaceId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
},
}).Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{
{
Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
bundle.RelationKeyTargetSpaceId.String(): pbtypes.String("space-id"),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
- bundle.RelationKeyIconImage.String(): pbtypes.String(""),
},
},
},
@@ -233,24 +265,34 @@ func TestSpaceService_GetSpace(t *testing.T) {
fx.mwMock.On("WorkspaceOpen", mock.Anything, mock.Anything).Return(&pb.RpcWorkspaceOpenResponse{
Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
Info: &model.AccountInfo{
- HomeObjectId: "home-object-id",
- ArchiveObjectId: "archive-object-id",
- ProfileObjectId: "profile-object-id",
- MarketplaceWorkspaceId: "marketplace-workspace-id",
- WorkspaceObjectId: "workspace-object-id",
- DeviceId: "device-id",
- AccountSpaceId: "account-space-id",
- WidgetsId: "widgets-id",
- SpaceViewId: "space-view-id",
- TechSpaceId: "tech-space-id",
- GatewayUrl: "gateway-url",
- LocalStoragePath: "local-storage-path",
- TimeZone: "time-zone",
- AnalyticsId: "analytics-id",
- NetworkId: "network-id",
+ WorkspaceObjectId: "workspace-object-id",
+ GatewayUrl: "gateway-url",
+ NetworkId: "network-id",
},
}, nil).Once()
+ // Expect ObjectShow call to return space details.
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: "space-id",
+ ObjectId: "workspace-object-id",
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyDescription.String(): pbtypes.String("A description"),
+ },
+ },
+ },
+ },
+ },
+ Error: &pb.RpcObjectShowResponseError{Code: pb.RpcObjectShowResponseError_NULL},
+ }, nil).Once()
+
// when
space, err := fx.GetSpace(nil, "space-id")
@@ -283,12 +325,7 @@ func TestSpaceService_GetSpace(t *testing.T) {
Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
},
},
- Keys: []string{
- bundle.RelationKeyTargetSpaceId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
- },
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
}).Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{},
Error: &pb.RpcObjectSearchResponseError{Code: pb.RpcObjectSearchResponseError_NULL},
@@ -322,20 +359,12 @@ func TestSpaceService_GetSpace(t *testing.T) {
Value: pbtypes.Int64(int64(model.SpaceStatus_Ok)),
},
},
- Keys: []string{
- bundle.RelationKeyTargetSpaceId.String(),
- bundle.RelationKeyName.String(),
- bundle.RelationKeyIconEmoji.String(),
- bundle.RelationKeyIconImage.String(),
- },
+ Keys: []string{bundle.RelationKeyTargetSpaceId.String()},
}).Return(&pb.RpcObjectSearchResponse{
Records: []*types.Struct{
{
Fields: map[string]*types.Value{
- bundle.RelationKeyName.String(): pbtypes.String("My Workspace"),
bundle.RelationKeyTargetSpaceId.String(): pbtypes.String("space-id"),
- bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
- bundle.RelationKeyIconImage.String(): pbtypes.String(""),
},
},
},
@@ -366,33 +395,55 @@ func TestSpaceService_CreateSpace(t *testing.T) {
SpaceId: "new-space-id",
}).Once()
+ fx.mwMock.On("WorkspaceSetInfo", mock.Anything, &pb.RpcWorkspaceSetInfoRequest{
+ SpaceId: "new-space-id",
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyDescription.String(): pbtypes.String("A new space"),
+ },
+ },
+ }).Return(&pb.RpcWorkspaceSetInfoResponse{
+ Error: &pb.RpcWorkspaceSetInfoResponseError{Code: pb.RpcWorkspaceSetInfoResponseError_NULL},
+ }, nil).Once()
+
fx.mwMock.On("WorkspaceOpen", mock.Anything, mock.Anything).Return(&pb.RpcWorkspaceOpenResponse{
Error: &pb.RpcWorkspaceOpenResponseError{Code: pb.RpcWorkspaceOpenResponseError_NULL},
Info: &model.AccountInfo{
- HomeObjectId: "home-object-id",
- ArchiveObjectId: "archive-object-id",
- ProfileObjectId: "profile-object-id",
- MarketplaceWorkspaceId: "marketplace-workspace-id",
- WorkspaceObjectId: "workspace-object-id",
- DeviceId: "device-id",
- AccountSpaceId: "account-space-id",
- WidgetsId: "widgets-id",
- SpaceViewId: "space-view-id",
- TechSpaceId: "tech-space-id",
- GatewayUrl: "gateway-url",
- LocalStoragePath: "local-storage-path",
- TimeZone: "time-zone",
- AnalyticsId: "analytics-id",
- NetworkId: "network-id",
+ WorkspaceObjectId: "workspace-object-id",
+ GatewayUrl: "gateway-url",
+ NetworkId: "network-id",
+ },
+ }, nil).Once()
+
+ fx.mwMock.On("ObjectShow", mock.Anything, &pb.RpcObjectShowRequest{
+ SpaceId: "new-space-id",
+ ObjectId: "workspace-object-id",
+ }).Return(&pb.RpcObjectShowResponse{
+ ObjectView: &model.ObjectView{
+ Details: []*model.ObjectViewDetailsSet{
+ {
+ Details: &types.Struct{
+ Fields: map[string]*types.Value{
+ bundle.RelationKeyName.String(): pbtypes.String("New Space"),
+ bundle.RelationKeyIconEmoji.String(): pbtypes.String("🚀"),
+ bundle.RelationKeyIconImage.String(): pbtypes.String(""),
+ bundle.RelationKeyDescription.String(): pbtypes.String("A new space"),
+ },
+ },
+ },
+ },
},
}, nil).Once()
// when
- space, err := fx.CreateSpace(nil, CreateSpaceRequest{Name: "New Space"})
+ space, err := fx.CreateSpace(nil, CreateSpaceRequest{Name: "New Space", Description: "A new space"})
// then
require.NoError(t, err)
require.Equal(t, "new-space-id", space.Id)
+ require.Equal(t, "New Space", space.Name)
+ require.Equal(t, "A new space", space.Description)
+ require.Equal(t, util.Icon{Format: "emoji", Emoji: util.StringPtr("🚀")}, space.Icon)
})
t.Run("failed workspace creation", func(t *testing.T) {
From 4c8ebaa420a442393640f587279626e944f64ea6 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Mar 2025 12:04:39 +0100
Subject: [PATCH 103/132] GO-4459: Make protos
---
clientlibrary/service/service.pb.go | 969 ++++++++++++++++++----------
pb/service/service.pb.go | 963 +++++++++++++++++----------
2 files changed, 1232 insertions(+), 700 deletions(-)
diff --git a/clientlibrary/service/service.pb.go b/clientlibrary/service/service.pb.go
index 344ce49f7..2f10a678c 100644
--- a/clientlibrary/service/service.pb.go
+++ b/clientlibrary/service/service.pb.go
@@ -25,356 +25,365 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
- // 5583 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0x5b, 0x8f, 0x1c, 0x49,
- 0x56, 0xf8, 0xa7, 0x5e, 0xfe, 0xf3, 0x27, 0x97, 0x1d, 0xa0, 0x06, 0x86, 0xd9, 0x61, 0xd7, 0xf6,
- 0x78, 0xec, 0x6e, 0xdb, 0xed, 0xae, 0xf6, 0xd8, 0x73, 0x63, 0x17, 0x09, 0xca, 0xdd, 0x76, 0x4f,
- 0xef, 0x76, 0xf7, 0x34, 0x5d, 0xd5, 0xb6, 0x18, 0x09, 0x89, 0xec, 0xca, 0xe8, 0xea, 0xa4, 0xb3,
- 0x32, 0x72, 0x33, 0xa3, 0xca, 0xae, 0x45, 0x20, 0x10, 0x08, 0x04, 0x02, 0xb1, 0xe2, 0x26, 0x78,
- 0x42, 0xe2, 0x13, 0xf0, 0x31, 0x78, 0x41, 0xda, 0x47, 0x1e, 0xd1, 0xcc, 0x87, 0xe0, 0x15, 0x65,
- 0x44, 0x64, 0x5c, 0x4e, 0x9e, 0x13, 0x99, 0x3d, 0x3c, 0xd9, 0xea, 0xf3, 0x3b, 0xe7, 0xc4, 0xe5,
- 0x44, 0xc4, 0x89, 0xc8, 0xc8, 0xac, 0xe8, 0x66, 0x71, 0xbe, 0x53, 0x94, 0x5c, 0xf0, 0x6a, 0xa7,
- 0x62, 0xe5, 0x2a, 0x9d, 0xb1, 0xe6, 0xdf, 0x91, 0xfc, 0xf3, 0xf0, 0xcd, 0x38, 0x5f, 0x8b, 0x75,
- 0xc1, 0xde, 0x7b, 0xd7, 0x92, 0x33, 0xbe, 0x58, 0xc4, 0x79, 0x52, 0x29, 0xe4, 0xbd, 0x77, 0xac,
- 0x84, 0xad, 0x58, 0x2e, 0xf4, 0xdf, 0x1f, 0xff, 0xe7, 0xff, 0x0c, 0xa2, 0xb7, 0x76, 0xb3, 0x94,
- 0xe5, 0x62, 0x57, 0x6b, 0x0c, 0xbf, 0x8c, 0xbe, 0x3d, 0x2e, 0x8a, 0x7d, 0x26, 0x5e, 0xb0, 0xb2,
- 0x4a, 0x79, 0x3e, 0xfc, 0x60, 0xa4, 0x1d, 0x8c, 0x4e, 0x8b, 0xd9, 0x68, 0x5c, 0x14, 0x23, 0x2b,
- 0x1c, 0x9d, 0xb2, 0x1f, 0x2f, 0x59, 0x25, 0xde, 0xbb, 0x13, 0x86, 0xaa, 0x82, 0xe7, 0x15, 0x1b,
- 0x5e, 0x44, 0xbf, 0x34, 0x2e, 0x8a, 0x09, 0x13, 0x7b, 0xac, 0xae, 0xc0, 0x44, 0xc4, 0x82, 0x0d,
- 0x37, 0x5b, 0xaa, 0x3e, 0x60, 0x7c, 0xdc, 0xeb, 0x06, 0xb5, 0x9f, 0x69, 0xf4, 0xad, 0xda, 0xcf,
- 0xe5, 0x52, 0x24, 0xfc, 0x55, 0x3e, 0x7c, 0xbf, 0xad, 0xa8, 0x45, 0xc6, 0xf6, 0xed, 0x10, 0xa2,
- 0xad, 0xbe, 0x8c, 0x7e, 0xfe, 0x65, 0x9c, 0x65, 0x4c, 0xec, 0x96, 0xac, 0x2e, 0xb8, 0xaf, 0xa3,
- 0x44, 0x23, 0x25, 0x33, 0x76, 0x3f, 0x08, 0x32, 0xda, 0xf0, 0x97, 0xd1, 0xb7, 0x95, 0xe4, 0x94,
- 0xcd, 0xf8, 0x8a, 0x95, 0x43, 0x54, 0x4b, 0x0b, 0x89, 0x26, 0x6f, 0x41, 0xd0, 0xf6, 0x2e, 0xcf,
- 0x57, 0xac, 0x14, 0xb8, 0x6d, 0x2d, 0x0c, 0xdb, 0xb6, 0x90, 0xb6, 0xfd, 0x97, 0x83, 0xe8, 0xbb,
- 0xe3, 0xd9, 0x8c, 0x2f, 0x73, 0x71, 0xc8, 0x67, 0x71, 0x76, 0x98, 0xe6, 0x57, 0xc7, 0xec, 0xd5,
- 0xee, 0x65, 0xcd, 0xe7, 0x73, 0x36, 0x7c, 0xe2, 0xb7, 0xaa, 0x42, 0x47, 0x86, 0x1d, 0xb9, 0xb0,
- 0xf1, 0xfd, 0xd1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x76, 0x10, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0x6c,
- 0xc5, 0x6c, 0x69, 0x3e, 0xee, 0x30, 0xec, 0xe3, 0xa6, 0x3c, 0x9f, 0x5c, 0x57, 0x4d, 0x97, 0x28,
- 0x8b, 0xde, 0x76, 0xc3, 0x65, 0xc2, 0x2a, 0x39, 0x9c, 0xee, 0xd3, 0x11, 0xa1, 0x11, 0xe3, 0xf9,
- 0x41, 0x1f, 0x54, 0x7b, 0x4b, 0xa3, 0xa1, 0xf6, 0x96, 0xf1, 0xca, 0x38, 0xbb, 0x87, 0x5a, 0x70,
- 0x08, 0xe3, 0xeb, 0x7e, 0x0f, 0x52, 0xbb, 0xfa, 0xbd, 0xe8, 0x17, 0x5e, 0xf2, 0xf2, 0xaa, 0x2a,
- 0xe2, 0x19, 0xd3, 0x43, 0xe1, 0xae, 0xaf, 0xdd, 0x48, 0xe1, 0x68, 0xd8, 0xe8, 0xc2, 0x9c, 0xa0,
- 0x6d, 0x84, 0x5f, 0x14, 0x0c, 0xce, 0x41, 0x56, 0xb1, 0x16, 0x52, 0x41, 0x0b, 0x21, 0x6d, 0xfb,
- 0x2a, 0x1a, 0x5a, 0xdb, 0xe7, 0xbf, 0xcf, 0x66, 0x62, 0x9c, 0x24, 0xb0, 0x57, 0xac, 0xae, 0x24,
- 0x46, 0xe3, 0x24, 0xa1, 0x7a, 0x05, 0x47, 0xb5, 0xb3, 0x57, 0xd1, 0x3b, 0xc0, 0xd9, 0x61, 0x5a,
- 0x49, 0x87, 0xdb, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x47, 0x7d, 0x71, 0xed, 0xf8, 0x8f, 0x07, 0xd1,
- 0x77, 0x10, 0xcf, 0xa7, 0x6c, 0xc1, 0x57, 0x6c, 0xf8, 0xa8, 0xdb, 0x9a, 0x22, 0x8d, 0xff, 0x0f,
- 0xaf, 0xa1, 0x81, 0x84, 0xc9, 0x84, 0x65, 0x6c, 0x26, 0xc8, 0x30, 0x51, 0xe2, 0xce, 0x30, 0x31,
- 0x98, 0x33, 0xc2, 0x1a, 0xe1, 0x3e, 0x13, 0xbb, 0xcb, 0xb2, 0x64, 0xb9, 0x20, 0xfb, 0xd2, 0x22,
- 0x9d, 0x7d, 0xe9, 0xa1, 0x48, 0x7d, 0xf6, 0x99, 0x18, 0x67, 0x19, 0x59, 0x1f, 0x25, 0xee, 0xac,
- 0x8f, 0xc1, 0xb4, 0x87, 0x59, 0xf4, 0x8b, 0x4e, 0x8b, 0x89, 0x83, 0xfc, 0x82, 0x0f, 0xe9, 0xb6,
- 0x90, 0x72, 0xe3, 0x63, 0xb3, 0x93, 0x43, 0xaa, 0xf1, 0xec, 0x75, 0xc1, 0x4b, 0xba, 0x5b, 0x94,
- 0xb8, 0xb3, 0x1a, 0x06, 0xd3, 0x1e, 0x7e, 0x37, 0x7a, 0x4b, 0xcf, 0x92, 0xcd, 0x7a, 0x76, 0x07,
- 0x9d, 0x42, 0xe1, 0x82, 0x76, 0xb7, 0x83, 0x6a, 0x99, 0x3f, 0x4a, 0xe7, 0x65, 0x3d, 0xfb, 0xe0,
- 0xe6, 0xb5, 0xb4, 0xc3, 0xbc, 0xa5, 0xb4, 0x79, 0x1e, 0xfd, 0xb2, 0x6f, 0x7e, 0x37, 0xce, 0x67,
- 0x2c, 0x1b, 0x3e, 0x08, 0xa9, 0x2b, 0xc6, 0xb8, 0xda, 0xea, 0xc5, 0xda, 0xc9, 0x4e, 0x13, 0x7a,
- 0x32, 0xfd, 0x00, 0xd5, 0x06, 0x53, 0xe9, 0x9d, 0x30, 0xd4, 0xb2, 0xbd, 0xc7, 0x32, 0x46, 0xda,
- 0x56, 0xc2, 0x0e, 0xdb, 0x06, 0xd2, 0xb6, 0xcb, 0xe8, 0x57, 0x4c, 0x37, 0xd7, 0x79, 0x81, 0x94,
- 0xd7, 0x8b, 0xce, 0x16, 0xd1, 0x8f, 0x2e, 0x64, 0x7c, 0x3d, 0xec, 0x07, 0xb7, 0xea, 0xa3, 0x67,
- 0x14, 0xbc, 0x3e, 0x60, 0x3e, 0xb9, 0x13, 0x86, 0xb4, 0xed, 0xbf, 0x1a, 0x44, 0xdf, 0xd3, 0xb2,
- 0x67, 0x79, 0x7c, 0x9e, 0x31, 0xb9, 0xc4, 0x1f, 0x33, 0xf1, 0x8a, 0x97, 0x57, 0x93, 0x75, 0x3e,
- 0x23, 0xd2, 0x19, 0x1c, 0xee, 0x48, 0x67, 0x48, 0x25, 0x5d, 0x98, 0x3f, 0x88, 0xde, 0x6d, 0x82,
- 0xe2, 0x32, 0xce, 0xe7, 0xec, 0x87, 0x15, 0xcf, 0xc7, 0x45, 0x3a, 0x4e, 0x92, 0x72, 0x38, 0xc2,
- 0xbb, 0x1e, 0x72, 0xa6, 0x04, 0x3b, 0xbd, 0x79, 0x27, 0x7d, 0xd6, 0xad, 0x2c, 0x78, 0x01, 0xd3,
- 0xe7, 0xa6, 0xf9, 0x04, 0x2f, 0xa8, 0xf4, 0xd9, 0x47, 0x5a, 0x56, 0x8f, 0xea, 0x35, 0x08, 0xb7,
- 0x7a, 0xe4, 0x2e, 0x3a, 0xb7, 0x43, 0x88, 0x5d, 0x03, 0x9a, 0x86, 0xe2, 0xf9, 0x45, 0x3a, 0x3f,
- 0x2b, 0x92, 0x7a, 0x0c, 0xdd, 0xc7, 0xeb, 0xec, 0x20, 0xc4, 0x1a, 0x40, 0xa0, 0xda, 0xdb, 0xdf,
- 0xd8, 0x2c, 0x53, 0xcf, 0x4b, 0xcf, 0x4b, 0xbe, 0x38, 0x64, 0xf3, 0x78, 0xb6, 0xd6, 0x93, 0xe9,
- 0x47, 0xa1, 0x59, 0x0c, 0xd2, 0xa6, 0x10, 0x1f, 0x5f, 0x53, 0x4b, 0x97, 0xe7, 0x5f, 0x07, 0xd1,
- 0x1d, 0x2f, 0x4e, 0x74, 0x30, 0xa9, 0xd2, 0x8f, 0xf3, 0xe4, 0x94, 0x55, 0x22, 0x2e, 0xc5, 0xf0,
- 0xfb, 0x81, 0x18, 0x20, 0x74, 0x4c, 0xd9, 0x7e, 0xf0, 0x8d, 0x74, 0x6d, 0xaf, 0x4f, 0xea, 0x55,
- 0x42, 0xcf, 0x3f, 0x7e, 0xaf, 0x4b, 0x09, 0x9c, 0x7d, 0x6e, 0x87, 0x10, 0xdb, 0xeb, 0x52, 0x70,
- 0x90, 0xaf, 0x52, 0xc1, 0xf6, 0x59, 0xce, 0xca, 0x76, 0xaf, 0x2b, 0x55, 0x1f, 0x21, 0x7a, 0x9d,
- 0x40, 0xed, 0x4c, 0xe7, 0x79, 0x33, 0x99, 0xc6, 0x56, 0xc0, 0x48, 0x2b, 0xd7, 0x78, 0xd8, 0x0f,
- 0xb6, 0x5b, 0x65, 0xc7, 0xe7, 0x29, 0x5b, 0xf1, 0x2b, 0xb8, 0x55, 0x76, 0x4d, 0x28, 0x80, 0xd8,
- 0x2a, 0xa3, 0xa0, 0x4d, 0x07, 0x1c, 0x3f, 0x2f, 0x52, 0xf6, 0x0a, 0xa4, 0x03, 0xae, 0x72, 0x2d,
- 0x26, 0xd2, 0x01, 0x04, 0xd3, 0x1e, 0x8e, 0xa3, 0x9f, 0x93, 0xc2, 0x1f, 0xf2, 0x34, 0x1f, 0xde,
- 0x44, 0x94, 0x6a, 0x81, 0xb1, 0x7a, 0x8b, 0x06, 0x40, 0x89, 0xeb, 0xbf, 0xea, 0xb5, 0xf9, 0x2e,
- 0xa1, 0x04, 0x96, 0xe5, 0x8d, 0x2e, 0xcc, 0xe6, 0x61, 0x52, 0x58, 0xcf, 0x5f, 0x93, 0xcb, 0xb8,
- 0x4c, 0xf3, 0xf9, 0x10, 0xd3, 0x75, 0xe4, 0x44, 0x1e, 0x86, 0x71, 0x20, 0x84, 0xb5, 0xe2, 0xb8,
- 0x28, 0xca, 0x7a, 0x5a, 0xc4, 0x42, 0xd8, 0x47, 0x82, 0x21, 0xdc, 0x42, 0x71, 0x6f, 0x7b, 0x6c,
- 0x96, 0xa5, 0x79, 0xd0, 0x9b, 0x46, 0xfa, 0x78, 0xb3, 0x28, 0x08, 0xde, 0x43, 0x16, 0xaf, 0x58,
- 0x53, 0x33, 0xac, 0x65, 0x5c, 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x9b, 0x5e, 0x29, 0x3e, 0x8a, 0xaf,
- 0x58, 0xdd, 0xc0, 0xac, 0x5e, 0x54, 0x87, 0x98, 0xbe, 0x47, 0x10, 0x9b, 0x5e, 0x9c, 0xd4, 0xae,
- 0x96, 0xd1, 0x3b, 0x52, 0x7e, 0x12, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0x37, 0x9b, 0x29, 0x6c,
- 0x5c, 0xb7, 0x28, 0xe3, 0x72, 0xbb, 0x27, 0xad, 0xdd, 0xfe, 0xd3, 0x20, 0x7a, 0x1f, 0xfa, 0x3d,
- 0x61, 0xe5, 0x22, 0x95, 0x7b, 0xf2, 0x4a, 0x4d, 0xc2, 0xc3, 0x4f, 0xc3, 0x46, 0x5b, 0x0a, 0xa6,
- 0x34, 0x9f, 0x5d, 0x5f, 0xd1, 0x66, 0x62, 0x13, 0xbd, 0x4f, 0xf9, 0xa2, 0x4c, 0x5a, 0x67, 0x56,
- 0x93, 0x66, 0xf3, 0x21, 0x85, 0x44, 0x26, 0xd6, 0x82, 0xc0, 0x08, 0x3f, 0xcb, 0xab, 0xc6, 0x3a,
- 0x36, 0xc2, 0xad, 0x38, 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0x93, 0xe5, 0x79, 0x96, 0x56, 0x97,
- 0x69, 0x3e, 0xd7, 0x69, 0xb7, 0xaf, 0x6b, 0xc5, 0x30, 0xf3, 0xde, 0xec, 0xe4, 0x30, 0x27, 0x3a,
- 0x58, 0x48, 0x27, 0x20, 0x4c, 0x36, 0x3b, 0x39, 0xbb, 0x1b, 0xb2, 0xd2, 0x7a, 0x1b, 0x0e, 0x76,
- 0x43, 0x8e, 0x6a, 0x2d, 0x25, 0x76, 0x43, 0x6d, 0xca, 0xee, 0x86, 0xdc, 0x3a, 0x54, 0x3c, 0x5b,
- 0xb1, 0xb3, 0x32, 0x05, 0xbb, 0x21, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0x86, 0x28, 0xd6, 0x4e, 0x54,
- 0x96, 0xd8, 0x67, 0x62, 0x22, 0x62, 0xb1, 0xac, 0xc0, 0x44, 0xe5, 0xd8, 0x30, 0x08, 0x31, 0x51,
- 0x11, 0xa8, 0xf6, 0xf6, 0xdb, 0x51, 0xa4, 0x4e, 0x30, 0xe4, 0x29, 0x93, 0xbf, 0xf6, 0xe8, 0xa3,
- 0x0d, 0xef, 0x88, 0xe9, 0xfd, 0x00, 0x61, 0x13, 0x1e, 0xf5, 0x77, 0x79, 0x78, 0x36, 0x44, 0x35,
- 0xa4, 0x88, 0x48, 0x78, 0x00, 0x02, 0x0b, 0x3a, 0xb9, 0xe4, 0xaf, 0xf0, 0x82, 0xd6, 0x92, 0x70,
- 0x41, 0x35, 0x61, 0x8f, 0xb3, 0x75, 0x41, 0xb1, 0xe3, 0xec, 0xa6, 0x18, 0xa1, 0xe3, 0x6c, 0xc8,
- 0xd8, 0x98, 0x71, 0x0d, 0x3f, 0xe5, 0xfc, 0x6a, 0x11, 0x97, 0x57, 0x20, 0x66, 0x3c, 0xe5, 0x86,
- 0x21, 0x62, 0x86, 0x62, 0x6d, 0xcc, 0xb8, 0x0e, 0xeb, 0x74, 0xf9, 0xac, 0xcc, 0x40, 0xcc, 0x78,
- 0x36, 0x34, 0x42, 0xc4, 0x0c, 0x81, 0xda, 0xd9, 0xc9, 0xf5, 0x36, 0x61, 0xf0, 0x00, 0xc5, 0x53,
- 0x9f, 0x30, 0xea, 0x00, 0x05, 0xc1, 0x60, 0x08, 0xed, 0x97, 0x71, 0x71, 0x89, 0x87, 0x90, 0x14,
- 0x85, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf1, 0xfe, 0x56, 0xb2, 0x70,
- 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4c, 0xc5, 0xe5, 0x11, 0x13, 0x31, 0xde, 0xdf, 0x3e,
- 0x13, 0xee, 0xef, 0x16, 0x6b, 0xf3, 0x71, 0xd7, 0xe1, 0x64, 0x79, 0x5e, 0xcd, 0xca, 0xf4, 0x9c,
- 0x0d, 0x03, 0x56, 0x0c, 0x44, 0xe4, 0xe3, 0x24, 0xac, 0x7d, 0xfe, 0x74, 0x10, 0xdd, 0x6c, 0xba,
- 0x9d, 0x57, 0x95, 0x5e, 0xfb, 0x7c, 0xf7, 0x1f, 0xe3, 0xfd, 0x4b, 0xe0, 0xc4, 0x03, 0x86, 0x1e,
- 0x6a, 0x4e, 0x6e, 0x80, 0x17, 0xe9, 0x2c, 0xaf, 0x4c, 0xa1, 0x3e, 0xed, 0x63, 0xdd, 0x51, 0x20,
- 0x72, 0x83, 0x5e, 0x8a, 0x36, 0x2d, 0xd3, 0xfd, 0xd3, 0xc8, 0x0e, 0x92, 0x0a, 0xa4, 0x65, 0x4d,
- 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x0c, 0x85, 0xfd, 0x92, 0x2f, 0x8b, 0xaa, 0x23, 0x14,
- 0x00, 0x14, 0x0e, 0x85, 0x36, 0xac, 0x7d, 0xbe, 0x8e, 0x7e, 0xd5, 0x0d, 0x3f, 0xb7, 0xb1, 0xb7,
- 0xe9, 0x98, 0xc2, 0x9a, 0x78, 0xd4, 0x17, 0xb7, 0x19, 0x45, 0xe3, 0x59, 0xec, 0x31, 0x11, 0xa7,
- 0x59, 0x35, 0xdc, 0xc0, 0x6d, 0x34, 0x72, 0x22, 0xa3, 0xc0, 0x38, 0x38, 0xbf, 0xed, 0x2d, 0x8b,
- 0x2c, 0x9d, 0xb5, 0x1f, 0xef, 0x68, 0x5d, 0x23, 0x0e, 0xcf, 0x6f, 0x2e, 0x06, 0xe7, 0xeb, 0x3a,
- 0xf5, 0x93, 0xff, 0x99, 0xae, 0x0b, 0x86, 0xcf, 0xd7, 0x1e, 0x12, 0x9e, 0xaf, 0x21, 0x0a, 0xeb,
- 0x33, 0x61, 0xe2, 0x30, 0x5e, 0xf3, 0x25, 0x31, 0x5f, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, 0x66, 0xf7,
- 0x06, 0xc6, 0xc3, 0x41, 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0xf3, 0x2c, 0x9e, 0x57, 0x43, 0x62, 0x8e,
- 0xf1, 0x29, 0x62, 0x6f, 0x40, 0xd3, 0x48, 0x33, 0x1e, 0x54, 0xcf, 0xe3, 0x15, 0x2f, 0x53, 0x41,
- 0x37, 0xa3, 0x45, 0x3a, 0x9b, 0xd1, 0x43, 0x51, 0x6f, 0xe3, 0x72, 0x76, 0x99, 0xae, 0x58, 0x12,
- 0xf0, 0xd6, 0x20, 0x3d, 0xbc, 0x39, 0x28, 0xd2, 0x69, 0x13, 0xbe, 0x2c, 0x67, 0x8c, 0xec, 0x34,
- 0x25, 0xee, 0xec, 0x34, 0x83, 0x69, 0x0f, 0x7f, 0x36, 0x88, 0x7e, 0x4d, 0x49, 0xdd, 0x67, 0x2e,
- 0x7b, 0x71, 0x75, 0x79, 0xce, 0xe3, 0x32, 0x19, 0x7e, 0x88, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xf1,
- 0x75, 0x54, 0x60, 0xb3, 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21,
- 0x0a, 0x27, 0x10, 0x29, 0x57, 0x47, 0x72, 0x1b, 0xa4, 0xbe, 0x7f, 0x2e, 0xb7, 0xd9, 0xc9, 0xc1,
- 0xf9, 0xb1, 0x16, 0xfa, 0xd1, 0xb2, 0x4d, 0xd9, 0xc0, 0x23, 0x66, 0xd4, 0x17, 0x27, 0x3d, 0x9b,
- 0x51, 0x11, 0xf6, 0xdc, 0x1a, 0x19, 0xa3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91,
- 0xa9, 0x6d, 0xd4, 0x17, 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x41, 0xc0, 0x0e, 0x5c, 0x1b,
- 0xb6, 0x7a, 0xb1, 0xda, 0xe1, 0x5f, 0x0c, 0xa2, 0xef, 0x5a, 0x8f, 0x47, 0x3c, 0x49, 0x2f, 0xd6,
- 0x0a, 0x7a, 0x11, 0x67, 0x4b, 0x56, 0x0d, 0x1f, 0x53, 0xd6, 0xda, 0xac, 0x29, 0xc1, 0x93, 0x6b,
- 0xe9, 0xc0, 0xb1, 0x33, 0x2e, 0x8a, 0x6c, 0x3d, 0x65, 0x8b, 0x22, 0x23, 0xc7, 0x8e, 0x87, 0x84,
- 0xc7, 0x0e, 0x44, 0x61, 0x56, 0x3e, 0xe5, 0x75, 0xce, 0x8f, 0x66, 0xe5, 0x52, 0x14, 0xce, 0xca,
- 0x1b, 0x04, 0xe6, 0x4a, 0x53, 0xbe, 0xcb, 0xb3, 0x8c, 0xcd, 0x44, 0xfb, 0xde, 0x86, 0xd1, 0xb4,
- 0x44, 0x38, 0x57, 0x02, 0xa4, 0x3d, 0x95, 0x6b, 0xf6, 0x90, 0x71, 0xc9, 0x9e, 0xae, 0x0f, 0xd3,
- 0xfc, 0x6a, 0x88, 0xa7, 0x05, 0x16, 0x20, 0x4e, 0xe5, 0x50, 0x10, 0xee, 0x55, 0xcf, 0xf2, 0x84,
- 0xe3, 0x7b, 0xd5, 0x5a, 0x12, 0xde, 0xab, 0x6a, 0x02, 0x9a, 0x3c, 0x65, 0x94, 0xc9, 0x5a, 0x12,
- 0x36, 0xa9, 0x09, 0x6c, 0x2a, 0xd4, 0xcf, 0x6e, 0xc8, 0xa9, 0x10, 0x3c, 0xad, 0xd9, 0xec, 0xe4,
- 0xe0, 0x9e, 0x4b, 0x3b, 0x40, 0x23, 0x02, 0x18, 0xff, 0x20, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3,
- 0xcf, 0x99, 0x98, 0x5d, 0xe2, 0xa1, 0xef, 0x21, 0xe1, 0xd0, 0x87, 0x28, 0x6c, 0xab, 0x29, 0x37,
- 0xbb, 0xf9, 0x0d, 0x3c, 0xf0, 0x5a, 0x3b, 0xf9, 0xcd, 0x4e, 0x0e, 0xb6, 0xd5, 0xc1, 0x82, 0x6e,
- 0x2b, 0x25, 0x0b, 0xb7, 0x95, 0x61, 0x60, 0xe9, 0x95, 0x40, 0x1e, 0x92, 0x6d, 0xd0, 0x8a, 0xde,
- 0x31, 0xd9, 0x66, 0x27, 0xa7, 0x9d, 0xfc, 0x83, 0xd9, 0x1f, 0x2a, 0xe9, 0x31, 0xaf, 0x07, 0xdf,
- 0x8b, 0x38, 0x4b, 0x93, 0x58, 0xb0, 0x29, 0xbf, 0x62, 0x39, 0xbe, 0x15, 0xd3, 0xa5, 0x55, 0xfc,
- 0xc8, 0x53, 0x08, 0x6f, 0xc5, 0xc2, 0x8a, 0x30, 0x4e, 0x14, 0x7d, 0x56, 0xb1, 0xdd, 0xb8, 0x22,
- 0xa6, 0x48, 0x0f, 0x09, 0xc7, 0x09, 0x44, 0x61, 0x22, 0xac, 0xe4, 0xcf, 0x5e, 0x17, 0xac, 0x4c,
- 0x59, 0x3e, 0x63, 0x78, 0x22, 0x0c, 0xa9, 0x70, 0x22, 0x8c, 0xd0, 0x70, 0x13, 0xb8, 0x17, 0x0b,
- 0xf6, 0x74, 0x3d, 0x4d, 0x17, 0xac, 0x12, 0xf1, 0xa2, 0xc0, 0x37, 0x81, 0x00, 0x0a, 0x6f, 0x02,
- 0xdb, 0x70, 0xeb, 0xcc, 0xc9, 0xcc, 0xb4, 0xed, 0x7b, 0x64, 0x90, 0x08, 0xdc, 0x23, 0x23, 0x50,
- 0xd8, 0xb0, 0x16, 0x40, 0x9f, 0x3e, 0xb4, 0xac, 0x04, 0x9f, 0x3e, 0xd0, 0x74, 0xeb, 0x24, 0xcf,
- 0x30, 0x93, 0x7a, 0x68, 0x76, 0x14, 0x7d, 0xe2, 0x0e, 0xd1, 0xad, 0x5e, 0x2c, 0x7e, 0x74, 0x78,
- 0xca, 0xb2, 0x58, 0xae, 0x87, 0x81, 0xf3, 0xb9, 0x86, 0xe9, 0x73, 0x74, 0xe8, 0xb0, 0xda, 0xe1,
- 0x9f, 0x0c, 0xa2, 0xf7, 0x30, 0x8f, 0x5f, 0x14, 0xd2, 0xef, 0xa3, 0x6e, 0x5b, 0x8a, 0x24, 0x2e,
- 0xca, 0x85, 0x35, 0xec, 0x5d, 0x8f, 0x46, 0x64, 0xef, 0xd1, 0xe9, 0x02, 0xf8, 0xd9, 0xa0, 0x29,
- 0x3f, 0xe4, 0x88, 0xbb, 0x1e, 0x21, 0xde, 0x6e, 0xb4, 0xfc, 0x72, 0x55, 0x60, 0xa3, 0x65, 0x6c,
- 0x68, 0x31, 0xb1, 0xd1, 0x42, 0x30, 0x3b, 0x3a, 0xdd, 0xea, 0xbd, 0x4c, 0xc5, 0xa5, 0x4c, 0xe4,
- 0xc0, 0xe8, 0xf4, 0xca, 0x6a, 0x20, 0x62, 0x74, 0x92, 0x30, 0x4c, 0x75, 0x1a, 0xb0, 0x1e, 0x9b,
- 0xd8, 0x5c, 0x6e, 0x0c, 0xb9, 0x23, 0xf3, 0x5e, 0x37, 0x08, 0xe3, 0xb5, 0x11, 0xeb, 0x3d, 0xd5,
- 0x83, 0x90, 0x05, 0xb0, 0xaf, 0xda, 0xea, 0xc5, 0x6a, 0x87, 0x7f, 0x14, 0x7d, 0xa7, 0x55, 0xb1,
- 0xe7, 0x2c, 0x16, 0xcb, 0x92, 0x25, 0xc3, 0x9d, 0x8e, 0x72, 0x37, 0xa0, 0x71, 0xfd, 0xa8, 0xbf,
- 0x42, 0x2b, 0xf9, 0x6f, 0x38, 0x15, 0x56, 0xa6, 0x0c, 0x8f, 0x43, 0x26, 0x7d, 0x36, 0x98, 0xfc,
- 0xd3, 0x3a, 0xad, 0xfd, 0xbb, 0x1b, 0x5d, 0xe3, 0x55, 0x9c, 0x66, 0xf2, 0x29, 0xf0, 0x87, 0x21,
- 0xa3, 0x1e, 0x1a, 0xdc, 0xbf, 0x93, 0x2a, 0xad, 0x99, 0x59, 0x8e, 0x71, 0x67, 0xdf, 0xf7, 0x90,
- 0x9e, 0x09, 0x90, 0x6d, 0xdf, 0x76, 0x4f, 0x5a, 0xbb, 0x15, 0xcd, 0x92, 0x57, 0xff, 0xd9, 0x0d,
- 0x72, 0xcc, 0xab, 0x56, 0x45, 0x22, 0x7d, 0xbb, 0x27, 0xad, 0xbd, 0xfe, 0x61, 0xf4, 0x6e, 0xdb,
- 0xab, 0x5e, 0x88, 0x76, 0x3a, 0x4d, 0x81, 0xb5, 0xe8, 0x51, 0x7f, 0x05, 0xed, 0xfe, 0x9f, 0xcd,
- 0x81, 0xb7, 0xf2, 0x3f, 0xe3, 0x8b, 0x05, 0xcb, 0x13, 0x96, 0x34, 0x1a, 0x55, 0xbd, 0x31, 0xfb,
- 0x8c, 0xb6, 0x6b, 0x14, 0x46, 0xae, 0x86, 0x29, 0xd1, 0xaf, 0x7f, 0x03, 0x4d, 0x5d, 0xb4, 0x7f,
- 0x1f, 0x44, 0xf7, 0xd1, 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0xb7, 0xfa, 0x38, 0xc2, 0x34, 0x4d,
- 0x51, 0xc7, 0xff, 0x07, 0x0b, 0xba, 0xc8, 0xff, 0x32, 0x88, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77,
- 0x79, 0x7e, 0x91, 0xa5, 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6,
- 0x0c, 0x68, 0xda, 0x5d, 0xf1, 0xe7, 0x69, 0x25, 0x78, 0xb9, 0x9e, 0x5c, 0xf2, 0x57, 0xcd, 0x9b,
- 0x48, 0xfe, 0xbc, 0xac, 0x81, 0x91, 0x43, 0x10, 0xbb, 0x62, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x2c,
- 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, 0x76, 0x55, 0x6a, 0x6a, 0x65, 0x5f, 0xaf, 0xda,
- 0xc4, 0x8b, 0xda, 0x7e, 0xc5, 0xea, 0x5e, 0x37, 0x68, 0x73, 0x53, 0x2d, 0xde, 0x4b, 0x2f, 0x2e,
- 0x4c, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x9b, 0x12, 0xa8, 0xdd, 0x5e, 0x3d, 0x4f, 0x33, 0x26,
- 0x1f, 0x0a, 0x7d, 0x71, 0x71, 0x91, 0xf1, 0x38, 0x01, 0xdb, 0xab, 0x5a, 0x3c, 0x72, 0xe5, 0xc4,
- 0xf6, 0x0a, 0xe3, 0xec, 0x75, 0x93, 0x5a, 0x5a, 0x47, 0x77, 0x3e, 0x4b, 0x33, 0x78, 0x91, 0x59,
- 0x6a, 0x1a, 0x21, 0x71, 0xdd, 0xa4, 0x05, 0xd9, 0x14, 0xa8, 0x16, 0xd5, 0x51, 0xd9, 0x94, 0xff,
- 0x6e, 0x5b, 0xd1, 0x11, 0x13, 0x29, 0x10, 0x82, 0xd9, 0xe3, 0x8b, 0x5a, 0x78, 0x56, 0x48, 0xe3,
- 0xb7, 0xda, 0x5a, 0x4a, 0x42, 0x1c, 0x5f, 0xf8, 0x84, 0xdd, 0x2d, 0xd7, 0x7f, 0xdf, 0xe3, 0xaf,
- 0x72, 0x69, 0xf4, 0x76, 0x5b, 0xa5, 0x91, 0x11, 0xbb, 0x65, 0xc8, 0x68, 0xc3, 0x3f, 0x8a, 0xfe,
- 0xbf, 0x34, 0x5c, 0xf2, 0x62, 0x78, 0x03, 0x51, 0x28, 0x9d, 0x6b, 0xbf, 0x37, 0x49, 0xb9, 0xbd,
- 0x9d, 0x62, 0x62, 0xe3, 0xac, 0x8a, 0xe7, 0xf0, 0xae, 0xbe, 0xed, 0x71, 0x29, 0x25, 0x6e, 0xa7,
- 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x79, 0xa2, 0xad, 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90,
- 0x4d, 0x5b, 0x8f, 0xe3, 0x55, 0x3a, 0x37, 0xa9, 0x85, 0x9a, 0xc0, 0x2a, 0x90, 0xb6, 0x5a, 0x66,
- 0xe4, 0x40, 0x44, 0xda, 0x4a, 0xc2, 0xda, 0xe7, 0xdf, 0x0f, 0xa2, 0x5b, 0x96, 0xd9, 0x6f, 0x0e,
- 0x7c, 0x0f, 0xf2, 0x0b, 0x5e, 0x27, 0xb9, 0x87, 0x69, 0x7e, 0x55, 0x0d, 0x3f, 0xa1, 0x4c, 0xe2,
- 0xbc, 0x29, 0xca, 0xa7, 0xd7, 0xd6, 0xb3, 0xfb, 0x93, 0xe6, 0x34, 0xd4, 0x5e, 0x89, 0x50, 0x1a,
- 0x60, 0x7f, 0x62, 0x0e, 0x4d, 0x21, 0x47, 0xec, 0x4f, 0x42, 0xbc, 0xed, 0x62, 0xe3, 0x3c, 0xe3,
- 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, 0x88, 0xd4, 0xf9,
- 0xda, 0x38, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, 0xfd, 0x9c, 0x46,
- 0xdf, 0xaa, 0x9b, 0xf4, 0xa4, 0x64, 0xab, 0x94, 0xc1, 0xdb, 0x3b, 0x8e, 0x84, 0x18, 0xff, 0x3e,
- 0x61, 0x47, 0xd6, 0x59, 0x5e, 0x15, 0x59, 0x5c, 0x5d, 0xea, 0xfb, 0x1c, 0x7e, 0x9d, 0x1b, 0x21,
- 0xbc, 0xd1, 0x71, 0xb7, 0x83, 0xb2, 0x93, 0x7a, 0x23, 0x33, 0x53, 0xcc, 0x06, 0xae, 0xda, 0x9a,
- 0x66, 0x36, 0x3b, 0x39, 0xfb, 0xd0, 0x64, 0x3f, 0xce, 0x32, 0x56, 0xae, 0x1b, 0xd9, 0x51, 0x9c,
- 0xa7, 0x17, 0xac, 0x12, 0xe0, 0xa1, 0x89, 0xa6, 0x46, 0x10, 0x23, 0x1e, 0x9a, 0x04, 0x70, 0xbb,
- 0x6f, 0x03, 0x9e, 0x0f, 0xf2, 0x84, 0xbd, 0x06, 0xfb, 0x36, 0x68, 0x47, 0x32, 0xc4, 0xbe, 0x8d,
- 0x62, 0xed, 0xc3, 0x83, 0xa7, 0x19, 0x9f, 0x5d, 0xe9, 0x25, 0xc0, 0xef, 0x60, 0x29, 0x81, 0x6b,
- 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x65, 0x45, 0x16, 0xcf, 0xe0, 0x15, 0x2e, 0xa5,
- 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x35, 0x0c, 0x2b, 0x2e, 0xb8, 0x19, 0x76,
- 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, 0x86, 0x94, 0x10,
- 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x23, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, 0x26, 0x1b, 0xc2,
- 0xde, 0x57, 0x57, 0x75, 0xe7, 0xc5, 0x1a, 0xdc, 0x57, 0xd7, 0xd5, 0xe2, 0xc5, 0x9a, 0xb8, 0xaf,
- 0xee, 0x01, 0xa0, 0x88, 0x27, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, 0x0d, 0x61, 0xd7,
- 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0x89, 0xe1, 0x26, 0x29, 0xb7, 0x33,
- 0x89, 0xea, 0x15, 0x26, 0x9e, 0xa7, 0x2c, 0x4b, 0x2a, 0x30, 0x93, 0xe8, 0x76, 0x6f, 0xa4, 0xc4,
- 0x4c, 0xd2, 0xa6, 0x40, 0x28, 0xe9, 0x27, 0x20, 0x58, 0xed, 0xc0, 0x03, 0x90, 0xdb, 0x21, 0xc4,
- 0xce, 0x4f, 0x4d, 0xa1, 0x77, 0xe3, 0xb2, 0x4c, 0xeb, 0xc5, 0x7f, 0x03, 0x2f, 0x50, 0x23, 0x27,
- 0xe6, 0x27, 0x8c, 0x03, 0xc3, 0xab, 0x99, 0xb8, 0xb1, 0x82, 0xc1, 0xa9, 0xfb, 0x83, 0x20, 0x63,
- 0x33, 0x4e, 0x29, 0x71, 0x9e, 0xc2, 0x63, 0xad, 0x89, 0x3c, 0x84, 0xdf, 0xe8, 0xc2, 0x9c, 0x97,
- 0xd9, 0x8c, 0x8b, 0x23, 0xbe, 0x62, 0x53, 0xfe, 0xec, 0x75, 0x5a, 0xd5, 0xdb, 0x2d, 0xbd, 0x72,
- 0x3f, 0x21, 0x2c, 0x61, 0x30, 0xf1, 0x32, 0x5b, 0xa7, 0x92, 0x4d, 0x20, 0x40, 0x59, 0x8e, 0xd9,
- 0x2b, 0x34, 0x81, 0x80, 0x16, 0x0d, 0x47, 0x24, 0x10, 0x21, 0xde, 0x9e, 0x98, 0x19, 0xe7, 0xfa,
- 0x0b, 0x06, 0x53, 0xde, 0xe4, 0x72, 0x94, 0x35, 0x08, 0x12, 0x87, 0x16, 0x41, 0x05, 0xbb, 0xbf,
- 0x34, 0xfe, 0xed, 0x10, 0xbb, 0x47, 0xd8, 0x69, 0x0f, 0xb3, 0xfb, 0x3d, 0x48, 0xc4, 0x95, 0xbd,
- 0x4a, 0x42, 0xb9, 0x6a, 0xdf, 0x24, 0xb9, 0xdf, 0x83, 0x74, 0x4e, 0xdf, 0xdc, 0x6a, 0x3d, 0x8d,
- 0x67, 0x57, 0xf3, 0x92, 0x2f, 0xf3, 0x64, 0x97, 0x67, 0xbc, 0x04, 0xa7, 0x6f, 0x5e, 0xa9, 0x01,
- 0x4a, 0x9c, 0xbe, 0x75, 0xa8, 0xd8, 0x0c, 0xce, 0x2d, 0xc5, 0x38, 0x4b, 0xe7, 0x70, 0x47, 0xed,
- 0x19, 0x92, 0x00, 0x91, 0xc1, 0xa1, 0x20, 0x12, 0x44, 0x6a, 0xc7, 0x2d, 0xd2, 0x59, 0x9c, 0x29,
- 0x7f, 0x3b, 0xb4, 0x19, 0x0f, 0xec, 0x0c, 0x22, 0x44, 0x01, 0xa9, 0xe7, 0x74, 0x59, 0xe6, 0x07,
- 0xb9, 0xe0, 0x64, 0x3d, 0x1b, 0xa0, 0xb3, 0x9e, 0x0e, 0x08, 0xa6, 0xd5, 0x29, 0x7b, 0x5d, 0x97,
- 0xa6, 0xfe, 0x07, 0x9b, 0x56, 0xeb, 0xbf, 0x8f, 0xb4, 0x3c, 0x34, 0xad, 0x02, 0x0e, 0x54, 0x46,
- 0x3b, 0x51, 0x01, 0x13, 0xd0, 0xf6, 0xc3, 0xe4, 0x5e, 0x37, 0x88, 0xfb, 0x99, 0x88, 0x75, 0xc6,
- 0x42, 0x7e, 0x24, 0xd0, 0xc7, 0x4f, 0x03, 0xda, 0xe3, 0x16, 0xaf, 0x3e, 0x97, 0x6c, 0x76, 0xd5,
- 0xba, 0x19, 0xe7, 0x17, 0x54, 0x21, 0xc4, 0x71, 0x0b, 0x81, 0xe2, 0x5d, 0x74, 0x30, 0xe3, 0x79,
- 0xa8, 0x8b, 0x6a, 0x79, 0x9f, 0x2e, 0xd2, 0x9c, 0xdd, 0xfc, 0x1a, 0xa9, 0x8e, 0x4c, 0xd5, 0x4d,
- 0x5b, 0x84, 0x05, 0x17, 0x22, 0x36, 0xbf, 0x24, 0x6c, 0x73, 0x72, 0xe8, 0xf3, 0xa8, 0xfd, 0xda,
- 0x40, 0xcb, 0xca, 0x11, 0xfd, 0xda, 0x00, 0xc5, 0xd2, 0x95, 0x54, 0x31, 0xd2, 0x61, 0xc5, 0x8f,
- 0x93, 0x87, 0xfd, 0x60, 0xbb, 0xe5, 0xf1, 0x7c, 0xee, 0x66, 0x2c, 0x2e, 0x95, 0xd7, 0xed, 0x80,
- 0x21, 0x8b, 0x11, 0x5b, 0x9e, 0x00, 0x0e, 0xa6, 0x30, 0xcf, 0xf3, 0x2e, 0xcf, 0x05, 0xcb, 0x05,
- 0x36, 0x85, 0xf9, 0xc6, 0x34, 0x18, 0x9a, 0xc2, 0x28, 0x05, 0x10, 0xb7, 0xf2, 0x3c, 0x88, 0x89,
- 0xe3, 0x78, 0x81, 0x66, 0x6c, 0xea, 0xac, 0x47, 0xc9, 0x43, 0x71, 0x0b, 0x38, 0xe7, 0x71, 0xae,
- 0xeb, 0x65, 0x1a, 0x97, 0x73, 0x73, 0xba, 0x91, 0x0c, 0x1f, 0xd1, 0x76, 0x7c, 0x92, 0x78, 0x9c,
- 0x1b, 0xd6, 0x00, 0xd3, 0xce, 0xc1, 0x22, 0x9e, 0x9b, 0x9a, 0x22, 0x35, 0x90, 0xf2, 0x56, 0x55,
- 0xef, 0x75, 0x83, 0xc0, 0xcf, 0x8b, 0x34, 0x61, 0x3c, 0xe0, 0x47, 0xca, 0xfb, 0xf8, 0x81, 0x20,
- 0xc8, 0xde, 0xea, 0x7a, 0xab, 0x1d, 0xdd, 0x38, 0x4f, 0xf4, 0x3e, 0x76, 0x44, 0x34, 0x0f, 0xe0,
- 0x42, 0xd9, 0x1b, 0xc1, 0x83, 0x31, 0xda, 0x1c, 0xd0, 0x86, 0xc6, 0xa8, 0x39, 0x7f, 0xed, 0x33,
- 0x46, 0x31, 0x58, 0xfb, 0xfc, 0x89, 0x1e, 0xa3, 0x7b, 0xb1, 0x88, 0xeb, 0xbc, 0xfd, 0x45, 0xca,
- 0x5e, 0xe9, 0x8d, 0x30, 0x52, 0xdf, 0x86, 0x1a, 0xc9, 0xb7, 0x9e, 0xc1, 0xae, 0x78, 0xa7, 0x37,
- 0x1f, 0xf0, 0xad, 0x77, 0x08, 0x9d, 0xbe, 0xc1, 0x56, 0x61, 0xa7, 0x37, 0x1f, 0xf0, 0xad, 0x3f,
- 0xa7, 0xd0, 0xe9, 0x1b, 0x7c, 0x53, 0x61, 0xa7, 0x37, 0xaf, 0x7d, 0xff, 0x69, 0x33, 0x70, 0x5d,
- 0xe7, 0x75, 0x1e, 0x36, 0x13, 0xe9, 0x8a, 0x61, 0xe9, 0xa4, 0x6f, 0xcf, 0xa0, 0xa1, 0x74, 0x92,
- 0x56, 0x71, 0x3e, 0x68, 0x86, 0x95, 0xe2, 0x84, 0x57, 0xa9, 0xbc, 0x8e, 0xf1, 0xa4, 0x87, 0xd1,
- 0x06, 0x0e, 0x6d, 0x9a, 0x42, 0x4a, 0xf6, 0xc1, 0xb2, 0x87, 0xda, 0x8b, 0xf0, 0x0f, 0x03, 0xf6,
- 0xda, 0xf7, 0xe1, 0xb7, 0x7b, 0xd2, 0xf6, 0x11, 0xaf, 0xc7, 0xb8, 0xcf, 0x96, 0x43, 0xbd, 0x8a,
- 0x3e, 0x5e, 0x7e, 0xd4, 0x5f, 0x41, 0xbb, 0xff, 0xf3, 0x66, 0x5f, 0x01, 0xfd, 0xeb, 0x41, 0xf0,
- 0xb8, 0x8f, 0x45, 0x30, 0x10, 0x9e, 0x5c, 0x4b, 0x47, 0x17, 0xe4, 0xaf, 0x9b, 0x0d, 0x74, 0x83,
- 0xca, 0xd7, 0x81, 0xe4, 0x6b, 0xc4, 0x7a, 0x4c, 0x84, 0xba, 0xd5, 0xc2, 0x70, 0x64, 0x7c, 0x7c,
- 0x4d, 0x2d, 0xe7, 0xf3, 0x76, 0x1e, 0xac, 0x5f, 0x5b, 0x75, 0xca, 0x13, 0xb2, 0xec, 0xd0, 0xb0,
- 0x40, 0x9f, 0x5c, 0x57, 0x8d, 0x1a, 0x2b, 0x0e, 0x2c, 0x3f, 0xf0, 0xf2, 0xa4, 0xa7, 0x61, 0xef,
- 0x93, 0x2f, 0x1f, 0x5d, 0x4f, 0x49, 0x97, 0xe5, 0xdf, 0x06, 0xd1, 0x5d, 0x8f, 0xb5, 0xcf, 0x13,
- 0xc0, 0xa9, 0xc7, 0x0f, 0x02, 0xf6, 0x29, 0x25, 0x53, 0xb8, 0xdf, 0xf8, 0x66, 0xca, 0xf6, 0x5b,
- 0x70, 0x9e, 0xca, 0xf3, 0x34, 0x13, 0xac, 0x6c, 0x7f, 0x0b, 0xce, 0xb7, 0xab, 0xa8, 0x11, 0xfd,
- 0x2d, 0xb8, 0x00, 0xee, 0x7c, 0x0b, 0x0e, 0xf1, 0x8c, 0x7e, 0x0b, 0x0e, 0xb5, 0x16, 0xfc, 0x16,
- 0x5c, 0x58, 0x83, 0x9a, 0xde, 0x9b, 0x22, 0xa8, 0x73, 0xeb, 0x5e, 0x16, 0xfd, 0x63, 0xec, 0xc7,
- 0xd7, 0x51, 0x21, 0x16, 0x38, 0xc5, 0xc9, 0x1b, 0x8d, 0x3d, 0xda, 0xd4, 0xbb, 0xd5, 0xb8, 0xd3,
- 0x9b, 0xd7, 0xbe, 0x7f, 0xac, 0x77, 0x37, 0x66, 0x3a, 0xe7, 0xa5, 0xfc, 0x0e, 0xe0, 0x56, 0x68,
- 0x7a, 0xae, 0x2d, 0xb8, 0x3d, 0xff, 0xb0, 0x1f, 0x4c, 0x54, 0xb7, 0x26, 0x74, 0xa7, 0x8f, 0xba,
- 0x0c, 0x81, 0x2e, 0xdf, 0xe9, 0xcd, 0x13, 0xcb, 0x88, 0xf2, 0xad, 0x7a, 0xbb, 0x87, 0x31, 0xbf,
- 0xaf, 0x1f, 0xf5, 0x57, 0xd0, 0xee, 0x57, 0x3a, 0x6d, 0x74, 0xdd, 0xcb, 0x7e, 0xde, 0xee, 0x32,
- 0x35, 0xf1, 0xba, 0x79, 0xd4, 0x17, 0x0f, 0x25, 0x10, 0xee, 0x12, 0xda, 0x95, 0x40, 0xa0, 0xcb,
- 0xe8, 0x47, 0xd7, 0x53, 0xd2, 0x65, 0xf9, 0xbb, 0x41, 0x74, 0x93, 0x2c, 0x8b, 0x8e, 0x83, 0x4f,
- 0xfa, 0x5a, 0x06, 0xf1, 0xf0, 0xe9, 0xb5, 0xf5, 0x74, 0xa1, 0xfe, 0x71, 0x10, 0xdd, 0x0a, 0x14,
- 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xd9, 0xf5, 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27,
- 0xed, 0xef, 0x7a, 0x05, 0x6c, 0x4f, 0xe8, 0xef, 0x7a, 0x75, 0x6b, 0xc1, 0x43, 0x9e, 0xf8, 0xbc,
- 0xd9, 0x74, 0xa1, 0x87, 0x3c, 0xf2, 0x2e, 0x62, 0xf0, 0xfb, 0x24, 0x18, 0x87, 0x39, 0x79, 0xf6,
- 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, 0x07, 0x0f, 0xc7, 0x6a, 0xe9, 0x29,
- 0x6f, 0x36, 0x52, 0xf7, 0x29, 0x7d, 0x83, 0x04, 0x0f, 0xc7, 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d,
- 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd0, 0x07, 0x05, 0x29, 0xba, 0xf1, 0x66, 0xce, 0xdc, 0x1f, 0x86,
- 0xac, 0xb4, 0xce, 0xdd, 0xb7, 0x7b, 0xd2, 0x84, 0xdb, 0x09, 0x13, 0x9f, 0xb3, 0x38, 0x61, 0x65,
- 0xd0, 0xad, 0xa1, 0x7a, 0xb9, 0x75, 0x69, 0xcc, 0xed, 0x2e, 0xcf, 0x96, 0x8b, 0x5c, 0x77, 0x26,
- 0xe9, 0xd6, 0xa5, 0xba, 0xdd, 0x02, 0x1a, 0x1e, 0x0b, 0x5a, 0xb7, 0x32, 0xbd, 0x7c, 0x10, 0x36,
- 0xe3, 0x65, 0x95, 0x5b, 0xbd, 0x58, 0xba, 0x9e, 0x3a, 0x8c, 0x3a, 0xea, 0x09, 0x22, 0x69, 0xbb,
- 0x27, 0x0d, 0xcf, 0xe7, 0x1c, 0xb7, 0x26, 0x9e, 0x76, 0x3a, 0x6c, 0xb5, 0x42, 0xea, 0x51, 0x7f,
- 0x05, 0x78, 0x1a, 0xaa, 0xa3, 0xea, 0x30, 0xad, 0xc4, 0xf3, 0x34, 0xcb, 0x86, 0x5b, 0x81, 0x30,
- 0x69, 0xa0, 0xe0, 0x69, 0x28, 0x02, 0x13, 0x91, 0xdc, 0x9c, 0x1e, 0xe6, 0xc3, 0x2e, 0x3b, 0x92,
- 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x4e, 0xb4, 0x9c, 0xa6, 0x36, 0xb5, 0x1d, 0x85, 0x1b, 0xae, 0x55,
- 0xe1, 0x9d, 0xde, 0x3c, 0x78, 0xdc, 0x2e, 0x29, 0xb9, 0xb2, 0xdc, 0xa1, 0x4c, 0x78, 0x2b, 0xc9,
- 0xdd, 0x0e, 0x0a, 0x9c, 0x0a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, 0xe6, 0x4c, 0xa0, 0x4f, 0x8a, 0x5c,
- 0x20, 0xf8, 0xa4, 0x08, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, 0x71, 0xe8, 0x41, 0x82, 0x75, 0x9d,
- 0x56, 0x76, 0xa8, 0x50, 0xd7, 0xa1, 0x34, 0x98, 0x0d, 0x8c, 0x5b, 0xfd, 0x45, 0x87, 0x07, 0x21,
- 0x33, 0xe0, 0xb3, 0x0e, 0x5b, 0xbd, 0x58, 0xb0, 0xa2, 0x58, 0x87, 0xe9, 0x22, 0x15, 0xd8, 0x8a,
- 0xe2, 0xd8, 0xa8, 0x91, 0xd0, 0x8a, 0xd2, 0x46, 0xa9, 0xea, 0xd5, 0x39, 0xc2, 0x41, 0x12, 0xae,
- 0x9e, 0x62, 0xfa, 0x55, 0xcf, 0xb0, 0xad, 0x07, 0x9b, 0xb9, 0x09, 0x19, 0x71, 0xa9, 0x37, 0xcb,
- 0x48, 0x6c, 0xcb, 0x37, 0x7d, 0x21, 0x18, 0x9a, 0x75, 0x28, 0x05, 0x78, 0x60, 0x5f, 0x73, 0xcd,
- 0xb3, 0xd7, 0xa2, 0x60, 0x71, 0x19, 0xe7, 0x33, 0x74, 0x73, 0x2a, 0x0d, 0xb6, 0xc8, 0xd0, 0xe6,
- 0x94, 0xd4, 0x00, 0x8f, 0xcd, 0xfd, 0x57, 0x69, 0x91, 0xa1, 0x60, 0xde, 0x59, 0xf5, 0xdf, 0xa4,
- 0xbd, 0xdf, 0x83, 0x84, 0x8f, 0xcd, 0x1b, 0xc0, 0x1c, 0x7c, 0x2b, 0xa7, 0x1f, 0x06, 0x4c, 0xf9,
- 0x68, 0x68, 0x23, 0x4c, 0xab, 0x80, 0xa0, 0x36, 0x09, 0x2e, 0x13, 0x3f, 0x62, 0x6b, 0x2c, 0xa8,
- 0x6d, 0x7e, 0x2a, 0x91, 0x50, 0x50, 0xb7, 0x51, 0x90, 0x67, 0xba, 0xfb, 0xa0, 0x8d, 0x80, 0xbe,
- 0xbb, 0xf5, 0xd9, 0xec, 0xe4, 0xc0, 0xc8, 0xd9, 0x4b, 0x57, 0xde, 0x73, 0x02, 0xa4, 0xa0, 0x7b,
- 0xe9, 0x0a, 0x7f, 0x4c, 0xb0, 0xd5, 0x8b, 0x85, 0x8f, 0xe4, 0x63, 0xc1, 0x5e, 0x37, 0xcf, 0xca,
- 0x91, 0xe2, 0x4a, 0x79, 0xeb, 0x61, 0xf9, 0xbd, 0x6e, 0xd0, 0x5e, 0x80, 0x3d, 0x29, 0xf9, 0x8c,
- 0x55, 0x95, 0xfe, 0xd8, 0xa9, 0x7f, 0xc3, 0x48, 0xcb, 0x46, 0xe0, 0x53, 0xa7, 0x77, 0xc2, 0x90,
- 0xf3, 0x85, 0x42, 0x25, 0xb2, 0x1f, 0x4e, 0xda, 0x40, 0x35, 0xdb, 0xdf, 0x4c, 0xda, 0xec, 0xe4,
- 0xec, 0xf0, 0xd2, 0x52, 0xf7, 0x4b, 0x49, 0xf7, 0x50, 0x75, 0xec, 0x23, 0x49, 0xf7, 0x7b, 0x90,
- 0xda, 0xd5, 0xe7, 0xd1, 0x9b, 0x87, 0x7c, 0x3e, 0x61, 0x79, 0x32, 0xfc, 0x9e, 0x7f, 0x85, 0x96,
- 0xcf, 0x47, 0xf5, 0x9f, 0x8d, 0xd1, 0x1b, 0x94, 0xd8, 0x5e, 0x02, 0xdc, 0x63, 0xe7, 0xcb, 0xf9,
- 0x44, 0xc4, 0x02, 0x5c, 0x02, 0x94, 0x7f, 0x1f, 0xd5, 0x02, 0xe2, 0x12, 0xa0, 0x07, 0x00, 0x7b,
- 0xd3, 0x92, 0x31, 0xd4, 0x5e, 0x2d, 0x08, 0xda, 0xd3, 0x80, 0xcd, 0x22, 0x8c, 0xbd, 0x3a, 0x51,
- 0x87, 0x97, 0xf6, 0xac, 0x8e, 0x94, 0x12, 0x59, 0x44, 0x9b, 0xb2, 0xc1, 0xad, 0xaa, 0x2f, 0x3f,
- 0x5c, 0xb3, 0x5c, 0x2c, 0xe2, 0x72, 0x0d, 0x82, 0x5b, 0xd7, 0xd2, 0x01, 0x88, 0xe0, 0x46, 0x41,
- 0x3b, 0x6a, 0x9b, 0x66, 0x9e, 0x5d, 0xed, 0xf3, 0x92, 0x2f, 0x45, 0x9a, 0x33, 0xf8, 0xf1, 0x12,
- 0xd3, 0xa0, 0x2e, 0x43, 0x8c, 0x5a, 0x8a, 0xb5, 0x59, 0xae, 0x24, 0xd4, 0x7d, 0x42, 0xf9, 0xfd,
- 0xf5, 0x4a, 0xf0, 0x12, 0x3e, 0x4f, 0x54, 0x56, 0x20, 0x44, 0x64, 0xb9, 0x24, 0x0c, 0xfa, 0xfe,
- 0x24, 0xcd, 0xe7, 0x68, 0xdf, 0x9f, 0xb8, 0x1f, 0x10, 0xbe, 0x45, 0x03, 0x76, 0x40, 0xa9, 0x46,
- 0x53, 0x03, 0x40, 0xbf, 0xb5, 0x8b, 0x36, 0xba, 0x4b, 0x10, 0x03, 0x0a, 0x27, 0x81, 0xab, 0x2f,
- 0x0a, 0x96, 0xb3, 0xa4, 0xb9, 0x35, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0xb9, 0x48,
- 0xca, 0x4f, 0x97, 0xf9, 0x49, 0xc9, 0x2f, 0xd2, 0x8c, 0x95, 0x60, 0x2e, 0x52, 0xea, 0x8e, 0x9c,
- 0x98, 0x8b, 0x30, 0xce, 0x5e, 0xbf, 0x90, 0x52, 0xef, 0x47, 0x04, 0xa6, 0x65, 0x3c, 0x83, 0xd7,
- 0x2f, 0x94, 0x8d, 0x36, 0x46, 0x9c, 0x0c, 0x06, 0x70, 0x27, 0xd1, 0x51, 0xae, 0xf3, 0xb5, 0x8c,
- 0x0f, 0xfd, 0xd6, 0xa8, 0xfc, 0xac, 0x6e, 0x05, 0x12, 0x1d, 0x6d, 0x0e, 0x23, 0x89, 0x44, 0x27,
- 0xac, 0x61, 0x97, 0x12, 0xc9, 0x1d, 0xeb, 0x6b, 0x45, 0x60, 0x29, 0x51, 0x36, 0x1a, 0x21, 0xb1,
- 0x94, 0xb4, 0x20, 0x30, 0x21, 0x35, 0xc3, 0x60, 0x8e, 0x4e, 0x48, 0x46, 0x1a, 0x9c, 0x90, 0x5c,
- 0xca, 0x4e, 0x14, 0x07, 0x79, 0x2a, 0xd2, 0x38, 0x9b, 0x30, 0x71, 0x12, 0x97, 0xf1, 0x82, 0x09,
- 0x56, 0xc2, 0x89, 0x42, 0x23, 0x23, 0x8f, 0x21, 0x26, 0x0a, 0x8a, 0xd5, 0x0e, 0x7f, 0x33, 0x7a,
- 0xbb, 0x5e, 0xf7, 0x59, 0xae, 0x7f, 0xfe, 0xe8, 0x99, 0xfc, 0xdd, 0xb4, 0xe1, 0x3b, 0xc6, 0xc6,
- 0x44, 0x94, 0x2c, 0x5e, 0x34, 0xb6, 0xdf, 0x32, 0x7f, 0x97, 0xe0, 0xa3, 0x41, 0x1d, 0xcf, 0xc7,
- 0x5c, 0xa4, 0x17, 0xf5, 0x36, 0x5b, 0xbf, 0x41, 0x04, 0xe2, 0xd9, 0x15, 0x8f, 0x02, 0x5f, 0x1d,
- 0xc1, 0x38, 0x3b, 0x4f, 0xbb, 0xd2, 0x53, 0x56, 0x64, 0x70, 0x9e, 0xf6, 0xb4, 0x25, 0x40, 0xcc,
- 0xd3, 0x28, 0x68, 0x07, 0xa7, 0x2b, 0x9e, 0xb2, 0x70, 0x65, 0xa6, 0xac, 0x5f, 0x65, 0xa6, 0xde,
- 0x4b, 0x19, 0x59, 0xf4, 0xf6, 0x11, 0x5b, 0x9c, 0xb3, 0xb2, 0xba, 0x4c, 0x0b, 0xea, 0xd3, 0xbf,
- 0x96, 0xe8, 0xfc, 0xf4, 0x2f, 0x81, 0xda, 0x95, 0xc0, 0x02, 0x07, 0xd5, 0x71, 0xbc, 0x60, 0xf2,
- 0x1b, 0x2a, 0x60, 0x25, 0x70, 0x8c, 0x38, 0x10, 0xb1, 0x12, 0x90, 0xb0, 0xf3, 0x7e, 0x97, 0x65,
- 0x4e, 0xd9, 0xbc, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0x2f, 0x58, 0x2e, 0xb4, 0x49, 0x70, 0x26, 0xef,
- 0x98, 0xc4, 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x33, 0x35, 0x79, 0x0d, 0x7f, 0xc2, 0x4b, 0xa1,
- 0x7e, 0xdc, 0xec, 0xac, 0xcc, 0xc0, 0xd4, 0xe4, 0x37, 0xaa, 0x47, 0x12, 0x53, 0x53, 0x58, 0xc3,
- 0xf9, 0x21, 0x0b, 0xaf, 0x0c, 0x2f, 0x58, 0x69, 0xe2, 0xe4, 0xd9, 0x22, 0x4e, 0x33, 0x1d, 0x0d,
- 0xdf, 0x0f, 0xd8, 0x26, 0x74, 0x88, 0x1f, 0xb2, 0xe8, 0xab, 0xeb, 0xfc, 0xf4, 0x47, 0xb8, 0x84,
- 0xe0, 0x11, 0x41, 0x87, 0x7d, 0xe2, 0x11, 0x41, 0xb7, 0x96, 0xdd, 0xb9, 0x5b, 0x56, 0x72, 0x6b,
- 0x49, 0xec, 0xf2, 0x04, 0x9e, 0x17, 0x3a, 0x36, 0x01, 0x48, 0xec, 0xdc, 0x83, 0x0a, 0x36, 0x35,
- 0xb0, 0xd8, 0xf3, 0x34, 0x8f, 0xb3, 0xf4, 0x27, 0x30, 0xad, 0x77, 0xec, 0x34, 0x04, 0x91, 0x1a,
- 0xe0, 0x24, 0xe6, 0x6a, 0x9f, 0x89, 0x69, 0x5a, 0x4f, 0xfd, 0xf7, 0x02, 0xed, 0x26, 0x89, 0x6e,
- 0x57, 0x0e, 0xe9, 0x7c, 0xe6, 0x17, 0x36, 0xeb, 0xb8, 0x28, 0x26, 0xf5, 0xaa, 0x7a, 0xca, 0x66,
- 0x2c, 0x2d, 0xc4, 0xf0, 0xe3, 0x70, 0x5b, 0x01, 0x9c, 0xb8, 0x68, 0xd1, 0x43, 0xcd, 0x79, 0x7c,
- 0x5f, 0xcf, 0x25, 0x13, 0xf5, 0xab, 0x9f, 0x67, 0x15, 0x2b, 0x75, 0xa2, 0xb1, 0xcf, 0x04, 0x18,
- 0x9d, 0x0e, 0x37, 0x72, 0xc0, 0xba, 0xa2, 0xc4, 0xe8, 0x0c, 0x6b, 0xd8, 0xc3, 0x3e, 0x87, 0xd3,
- 0x9f, 0x6d, 0x97, 0xf7, 0x0d, 0x1f, 0x92, 0xc6, 0x1c, 0x8a, 0x38, 0xec, 0xa3, 0x69, 0x9b, 0xad,
- 0xb5, 0xdd, 0x8e, 0xf3, 0xf5, 0x01, 0xbc, 0x32, 0x81, 0x58, 0x92, 0x18, 0x91, 0xad, 0x05, 0x70,
- 0xe7, 0x30, 0xbc, 0xe4, 0x71, 0x32, 0x8b, 0x2b, 0x71, 0x12, 0xaf, 0x33, 0x1e, 0x27, 0x72, 0x5d,
- 0x87, 0x87, 0xe1, 0x0d, 0x33, 0x72, 0x21, 0xea, 0x30, 0x9c, 0x82, 0xdd, 0xec, 0x4c, 0xfe, 0x98,
- 0xa9, 0xbe, 0xcb, 0x09, 0xb3, 0x33, 0x59, 0x5e, 0x78, 0x8f, 0xf3, 0x4e, 0x18, 0xb2, 0xef, 0xa0,
- 0x29, 0x91, 0x4c, 0x43, 0x6e, 0x61, 0x3a, 0x5e, 0x02, 0xf2, 0x7e, 0x80, 0xb0, 0x5f, 0x20, 0x51,
- 0x7f, 0x6f, 0x7e, 0xbf, 0x4a, 0xe8, 0x8f, 0xa1, 0x3f, 0xc4, 0x74, 0x5d, 0x68, 0xe4, 0x7e, 0xc8,
- 0x62, 0xbb, 0x27, 0x6d, 0xd3, 0xcc, 0xdd, 0xcb, 0x58, 0x8c, 0x93, 0xe4, 0x88, 0x55, 0xc8, 0x0b,
- 0xe5, 0xb5, 0x70, 0x64, 0xa5, 0x44, 0x9a, 0xd9, 0xa6, 0x6c, 0xa0, 0xd7, 0xb2, 0x67, 0x49, 0x2a,
- 0xb4, 0xac, 0xb9, 0x21, 0xfd, 0xb0, 0x6d, 0xa0, 0x4d, 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x97, 0xd7,
- 0xcc, 0x94, 0xcf, 0xe7, 0x19, 0xd3, 0xd0, 0x29, 0x8b, 0xd5, 0xb7, 0x20, 0x77, 0xda, 0xb6, 0x50,
- 0x90, 0x98, 0xcb, 0x83, 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0xcd, 0xb6,
- 0x19, 0x0f, 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xef, 0xbd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc,
- 0xd8, 0x94, 0x54, 0x76, 0xc4, 0xc4, 0x7b, 0x6f, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xd3, 0xf5,
- 0x41, 0x02, 0xf7, 0x09, 0x50, 0x5f, 0x32, 0xc4, 0x3e, 0x81, 0x62, 0xfd, 0xae, 0x33, 0xe7, 0x5e,
- 0x87, 0x71, 0x65, 0x2b, 0x87, 0x74, 0x1d, 0x0a, 0x86, 0xba, 0x8e, 0x52, 0xf0, 0x9b, 0xd4, 0x3d,
- 0x5a, 0x43, 0x9a, 0x14, 0x3b, 0x57, 0xdb, 0xe8, 0xc2, 0x6c, 0xee, 0x5f, 0x0b, 0x4f, 0x59, 0x9c,
- 0x98, 0x8a, 0x21, 0xba, 0xae, 0x9c, 0xc8, 0xfd, 0x31, 0x4e, 0x3b, 0xf9, 0x9d, 0x68, 0xa8, 0xaa,
- 0x51, 0xba, 0x6e, 0x6e, 0x61, 0x45, 0xac, 0x09, 0x62, 0xa2, 0xf2, 0x09, 0x27, 0x71, 0xf3, 0xba,
- 0x68, 0xca, 0xb5, 0x03, 0xfd, 0x5e, 0x66, 0x05, 0x12, 0x37, 0xbf, 0xd9, 0x5b, 0x34, 0x91, 0xb8,
- 0x75, 0x6b, 0xd9, 0x79, 0xde, 0xec, 0xcf, 0xe5, 0x15, 0x30, 0xfc, 0x47, 0x35, 0x94, 0x90, 0x98,
- 0xe7, 0x5b, 0x90, 0xb2, 0xfd, 0xf4, 0xfd, 0xff, 0xf8, 0xea, 0xc6, 0xe0, 0x67, 0x5f, 0xdd, 0x18,
- 0xfc, 0xf7, 0x57, 0x37, 0x06, 0x3f, 0xfd, 0xfa, 0xc6, 0x1b, 0x3f, 0xfb, 0xfa, 0xc6, 0x1b, 0xff,
- 0xf5, 0xf5, 0x8d, 0x37, 0xbe, 0x7c, 0x53, 0xff, 0x68, 0xf8, 0xf9, 0xff, 0x93, 0x3f, 0xfd, 0xfd,
- 0xe4, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x14, 0xc2, 0x04, 0x4c, 0x58, 0x7c, 0x00, 0x00,
+ // 5713 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49,
+ 0x52, 0xc0, 0xd7, 0x2f, 0x2c, 0xd4, 0x71, 0x0b, 0xf4, 0xc2, 0xb2, 0xb7, 0xdc, 0xcd, 0xcc, 0xce,
+ 0x87, 0x3d, 0x33, 0x1e, 0xb7, 0x67, 0x67, 0xf6, 0x8b, 0x3b, 0x24, 0xe8, 0xb1, 0xc7, 0xde, 0xbe,
+ 0xb5, 0xbd, 0xc6, 0xdd, 0x9e, 0x11, 0x2b, 0x21, 0x51, 0xee, 0x4a, 0xb7, 0x0b, 0x57, 0x57, 0xd6,
+ 0x55, 0x65, 0x7b, 0xa6, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12,
+ 0x7f, 0x01, 0x7f, 0x06, 0x8f, 0xf7, 0x78, 0x8f, 0x68, 0xf7, 0xef, 0x40, 0x42, 0x95, 0x95, 0x9f,
+ 0x51, 0x11, 0x59, 0xe5, 0xbd, 0xa7, 0x19, 0x39, 0x7e, 0x11, 0x91, 0x1f, 0x91, 0x99, 0x91, 0x59,
+ 0x59, 0xd5, 0xd1, 0xcd, 0xe2, 0x6c, 0xbb, 0x28, 0xb9, 0xe0, 0xd5, 0x76, 0xc5, 0xca, 0xab, 0x74,
+ 0xc6, 0xf4, 0xbf, 0x43, 0xf9, 0xe7, 0xc1, 0x9b, 0x71, 0xbe, 0x12, 0xab, 0x82, 0xbd, 0xf7, 0xae,
+ 0x25, 0x67, 0x7c, 0xb1, 0x88, 0xf3, 0xa4, 0x6a, 0x90, 0xf7, 0xde, 0xb1, 0x12, 0x76, 0xc5, 0x72,
+ 0xa1, 0xfe, 0xfe, 0xe4, 0x67, 0xff, 0xb7, 0x16, 0xbd, 0xb5, 0x93, 0xa5, 0x2c, 0x17, 0x3b, 0x4a,
+ 0x63, 0xf0, 0x65, 0xf4, 0xed, 0x51, 0x51, 0xec, 0x33, 0xf1, 0x82, 0x95, 0x55, 0xca, 0xf3, 0xc1,
+ 0x9d, 0xa1, 0x72, 0x30, 0x3c, 0x29, 0x66, 0xc3, 0x51, 0x51, 0x0c, 0xad, 0x70, 0x78, 0xc2, 0x7e,
+ 0xb4, 0x64, 0x95, 0x78, 0xef, 0x6e, 0x18, 0xaa, 0x0a, 0x9e, 0x57, 0x6c, 0x70, 0x1e, 0xfd, 0xda,
+ 0xa8, 0x28, 0x26, 0x4c, 0xec, 0xb2, 0xba, 0x02, 0x13, 0x11, 0x0b, 0x36, 0xd8, 0x68, 0xa9, 0xfa,
+ 0x80, 0xf1, 0x71, 0xbf, 0x1b, 0x54, 0x7e, 0xa6, 0xd1, 0xb7, 0x6a, 0x3f, 0x17, 0x4b, 0x91, 0xf0,
+ 0x57, 0xf9, 0xe0, 0xfd, 0xb6, 0xa2, 0x12, 0x19, 0xdb, 0xb7, 0x43, 0x88, 0xb2, 0xfa, 0x32, 0xfa,
+ 0xe5, 0x97, 0x71, 0x96, 0x31, 0xb1, 0x53, 0xb2, 0xba, 0xe0, 0xbe, 0x4e, 0x23, 0x1a, 0x36, 0x32,
+ 0x63, 0xf7, 0x4e, 0x90, 0x51, 0x86, 0xbf, 0x8c, 0xbe, 0xdd, 0x48, 0x4e, 0xd8, 0x8c, 0x5f, 0xb1,
+ 0x72, 0x80, 0x6a, 0x29, 0x21, 0xd1, 0xe4, 0x2d, 0x08, 0xda, 0xde, 0xe1, 0xf9, 0x15, 0x2b, 0x05,
+ 0x6e, 0x5b, 0x09, 0xc3, 0xb6, 0x2d, 0xa4, 0x6c, 0xff, 0xed, 0x5a, 0xf4, 0xdd, 0xd1, 0x6c, 0xc6,
+ 0x97, 0xb9, 0x38, 0xe0, 0xb3, 0x38, 0x3b, 0x48, 0xf3, 0xcb, 0x23, 0xf6, 0x6a, 0xe7, 0xa2, 0xe6,
+ 0xf3, 0x39, 0x1b, 0x3c, 0xf5, 0x5b, 0xb5, 0x41, 0x87, 0x86, 0x1d, 0xba, 0xb0, 0xf1, 0xfd, 0xe1,
+ 0xf5, 0x94, 0x54, 0x59, 0xfe, 0x71, 0x2d, 0xba, 0x01, 0xcb, 0x32, 0xe1, 0xd9, 0x15, 0xb3, 0xa5,
+ 0xf9, 0xa8, 0xc3, 0xb0, 0x8f, 0x9b, 0xf2, 0x7c, 0x7c, 0x5d, 0x35, 0x55, 0xa2, 0x2c, 0x7a, 0xdb,
+ 0x0d, 0x97, 0x09, 0xab, 0xe4, 0x70, 0x7a, 0x40, 0x47, 0x84, 0x42, 0x8c, 0xe7, 0x87, 0x7d, 0x50,
+ 0xe5, 0x2d, 0x8d, 0x06, 0xca, 0x5b, 0xc6, 0x2b, 0xe3, 0xec, 0x3e, 0x6a, 0xc1, 0x21, 0x8c, 0xaf,
+ 0x07, 0x3d, 0x48, 0xe5, 0xea, 0x8f, 0xa2, 0x5f, 0x79, 0xc9, 0xcb, 0xcb, 0xaa, 0x88, 0x67, 0x4c,
+ 0x0d, 0x85, 0x7b, 0xbe, 0xb6, 0x96, 0xc2, 0xd1, 0xb0, 0xde, 0x85, 0x39, 0x41, 0xab, 0x85, 0x5f,
+ 0x14, 0x0c, 0xce, 0x41, 0x56, 0xb1, 0x16, 0x52, 0x41, 0x0b, 0x21, 0x65, 0xfb, 0x32, 0x1a, 0x58,
+ 0xdb, 0x67, 0x7f, 0xcc, 0x66, 0x62, 0x94, 0x24, 0xb0, 0x57, 0xac, 0xae, 0x24, 0x86, 0xa3, 0x24,
+ 0xa1, 0x7a, 0x05, 0x47, 0x95, 0xb3, 0x57, 0xd1, 0x3b, 0xc0, 0xd9, 0x41, 0x5a, 0x49, 0x87, 0x5b,
+ 0x61, 0x2b, 0x0a, 0x33, 0x4e, 0x87, 0x7d, 0x71, 0xe5, 0xf8, 0xcf, 0xd7, 0xa2, 0xef, 0x20, 0x9e,
+ 0x4f, 0xd8, 0x82, 0x5f, 0xb1, 0xc1, 0xe3, 0x6e, 0x6b, 0x0d, 0x69, 0xfc, 0x7f, 0x70, 0x0d, 0x0d,
+ 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x49, 0x23, 0xee, 0x0c, 0x13, 0x83, 0x39, 0x23,
+ 0x4c, 0x0b, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, 0x4b,
+ 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x34, 0xe2, 0xce, 0xfa, 0x18, 0x4c,
+ 0x79, 0x98, 0x45, 0xbf, 0xea, 0xb4, 0x98, 0x18, 0xe7, 0xe7, 0x7c, 0x40, 0xb7, 0x85, 0x94, 0x1b,
+ 0x1f, 0x1b, 0x9d, 0x1c, 0x52, 0x8d, 0xe7, 0xaf, 0x0b, 0x5e, 0xd2, 0xdd, 0xd2, 0x88, 0x3b, 0xab,
+ 0x61, 0x30, 0xe5, 0xe1, 0x0f, 0xa3, 0xb7, 0xd4, 0x2c, 0xa9, 0xd7, 0xb3, 0xbb, 0xe8, 0x14, 0x0a,
+ 0x17, 0xb4, 0x7b, 0x1d, 0x54, 0xcb, 0xfc, 0x61, 0x3a, 0x2f, 0xeb, 0xd9, 0x07, 0x37, 0xaf, 0xa4,
+ 0x1d, 0xe6, 0x2d, 0xa5, 0xcc, 0xf3, 0xe8, 0xd7, 0x7d, 0xf3, 0x3b, 0x71, 0x3e, 0x63, 0xd9, 0xe0,
+ 0x61, 0x48, 0xbd, 0x61, 0x8c, 0xab, 0xcd, 0x5e, 0xac, 0x9d, 0xec, 0x14, 0xa1, 0x26, 0xd3, 0x3b,
+ 0xa8, 0x36, 0x98, 0x4a, 0xef, 0x86, 0xa1, 0x96, 0xed, 0x5d, 0x96, 0x31, 0xd2, 0x76, 0x23, 0xec,
+ 0xb0, 0x6d, 0x20, 0x65, 0xbb, 0x8c, 0x7e, 0xc3, 0x74, 0x73, 0x9d, 0x17, 0x48, 0x79, 0xbd, 0xe8,
+ 0x6c, 0x12, 0xfd, 0xe8, 0x42, 0xc6, 0xd7, 0xa3, 0x7e, 0x70, 0xab, 0x3e, 0x6a, 0x46, 0xc1, 0xeb,
+ 0x03, 0xe6, 0x93, 0xbb, 0x61, 0x48, 0xd9, 0xfe, 0xbb, 0xb5, 0xe8, 0x7b, 0x4a, 0xf6, 0x3c, 0x8f,
+ 0xcf, 0x32, 0x26, 0x97, 0xf8, 0x23, 0x26, 0x5e, 0xf1, 0xf2, 0x72, 0xb2, 0xca, 0x67, 0x44, 0x3a,
+ 0x83, 0xc3, 0x1d, 0xe9, 0x0c, 0xa9, 0xa4, 0x0a, 0xf3, 0x27, 0xd1, 0xbb, 0x3a, 0x28, 0x2e, 0xe2,
+ 0x7c, 0xce, 0x7e, 0x58, 0xf1, 0x7c, 0x54, 0xa4, 0xa3, 0x24, 0x29, 0x07, 0x43, 0xbc, 0xeb, 0x21,
+ 0x67, 0x4a, 0xb0, 0xdd, 0x9b, 0x77, 0xd2, 0x67, 0xd5, 0xca, 0x82, 0x17, 0x30, 0x7d, 0xd6, 0xcd,
+ 0x27, 0x78, 0x41, 0xa5, 0xcf, 0x3e, 0xd2, 0xb2, 0x7a, 0x58, 0xaf, 0x41, 0xb8, 0xd5, 0x43, 0x77,
+ 0xd1, 0xb9, 0x1d, 0x42, 0xec, 0x1a, 0xa0, 0x1b, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, 0xea,
+ 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x2a, 0x6f, 0xff, 0x60, 0xb3, 0x4c,
+ 0x35, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x26, 0xd3, 0x0f, 0x43, 0xb3,
+ 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2a, 0xcf, 0x7f, 0xae, 0x45, 0x77, 0xbd, 0x38,
+ 0x51, 0xc1, 0xd4, 0x94, 0x7e, 0x94, 0x27, 0x27, 0xac, 0x12, 0x71, 0x29, 0x06, 0xdf, 0x0f, 0xc4,
+ 0x00, 0xa1, 0x63, 0xca, 0xf6, 0x83, 0x6f, 0xa4, 0x6b, 0x7b, 0x7d, 0x52, 0xaf, 0x12, 0x6a, 0xfe,
+ 0xf1, 0x7b, 0x5d, 0x4a, 0xe0, 0xec, 0x73, 0x3b, 0x84, 0xd8, 0x5e, 0x97, 0x82, 0x71, 0x7e, 0x95,
+ 0x0a, 0xb6, 0xcf, 0x72, 0x56, 0xb6, 0x7b, 0xbd, 0x51, 0xf5, 0x11, 0xa2, 0xd7, 0x09, 0xd4, 0xce,
+ 0x74, 0x9e, 0x37, 0x93, 0x69, 0x6c, 0x06, 0x8c, 0xb4, 0x72, 0x8d, 0x47, 0xfd, 0x60, 0xa2, 0x86,
+ 0x62, 0xbf, 0x36, 0x12, 0xac, 0x61, 0x83, 0xf4, 0xaa, 0xa1, 0x41, 0xed, 0xc6, 0xdc, 0xf1, 0x76,
+ 0xc2, 0xae, 0xf8, 0x25, 0xdc, 0x98, 0xbb, 0x06, 0x1a, 0x80, 0xd8, 0x98, 0xa3, 0xa0, 0x4d, 0x3e,
+ 0x1c, 0x3f, 0x2f, 0x52, 0xf6, 0x0a, 0x24, 0x1f, 0xae, 0x72, 0x2d, 0x26, 0x92, 0x0f, 0x04, 0x53,
+ 0x1e, 0x8e, 0xa2, 0x5f, 0x92, 0xc2, 0x1f, 0xf2, 0x34, 0x1f, 0xdc, 0x44, 0x94, 0x6a, 0x81, 0xb1,
+ 0x7a, 0x8b, 0x06, 0x40, 0x89, 0xeb, 0xbf, 0xaa, 0x4c, 0xe0, 0x1e, 0xa1, 0x04, 0x92, 0x80, 0xf5,
+ 0x2e, 0xcc, 0x66, 0x7d, 0x52, 0x58, 0xcf, 0x96, 0x93, 0x8b, 0xb8, 0x4c, 0xf3, 0xf9, 0x00, 0xd3,
+ 0x75, 0xe4, 0x44, 0xd6, 0x87, 0x71, 0x20, 0x9c, 0x94, 0xe2, 0xa8, 0x28, 0xca, 0x7a, 0x12, 0xc6,
+ 0xc2, 0xc9, 0x47, 0x82, 0xe1, 0xd4, 0x42, 0x71, 0x6f, 0xbb, 0x6c, 0x96, 0xa5, 0x79, 0xd0, 0x9b,
+ 0x42, 0xfa, 0x78, 0xb3, 0x28, 0x08, 0xde, 0x03, 0x16, 0x5f, 0x31, 0x5d, 0x33, 0xac, 0x65, 0x5c,
+ 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x5b, 0x6c, 0x29, 0x3e, 0x8c, 0x2f, 0x59, 0xdd, 0xc0, 0xac, 0x5e,
+ 0xc2, 0x07, 0x98, 0xbe, 0x47, 0x10, 0x5b, 0x6c, 0x9c, 0x54, 0xae, 0x96, 0xd1, 0x3b, 0x52, 0x7e,
+ 0x1c, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0xeb, 0xad, 0x1b, 0x36, 0x8b, 0xb4, 0x28, 0xe3, 0x72,
+ 0xab, 0x27, 0xad, 0xdc, 0xfe, 0xdb, 0x5a, 0xf4, 0x3e, 0xf4, 0x7b, 0xcc, 0xca, 0x45, 0x2a, 0x4f,
+ 0x00, 0xaa, 0x66, 0xca, 0x1f, 0x7c, 0x12, 0x36, 0xda, 0x52, 0x30, 0xa5, 0xf9, 0xf4, 0xfa, 0x8a,
+ 0x36, 0xef, 0x9b, 0xa8, 0x5d, 0xd1, 0x17, 0x65, 0xd2, 0x3a, 0x21, 0x9b, 0xe8, 0xad, 0x8e, 0x14,
+ 0x12, 0x79, 0x5f, 0x0b, 0x02, 0x23, 0xfc, 0x34, 0xaf, 0xb4, 0x75, 0x6c, 0x84, 0x5b, 0x71, 0x70,
+ 0x84, 0x7b, 0x98, 0x1d, 0xe1, 0xc7, 0xcb, 0xb3, 0x2c, 0xad, 0x2e, 0xd2, 0x7c, 0xae, 0x92, 0x7c,
+ 0x5f, 0xd7, 0x8a, 0x61, 0x9e, 0xbf, 0xd1, 0xc9, 0x61, 0x4e, 0x54, 0xb0, 0x90, 0x4e, 0x40, 0x98,
+ 0x6c, 0x74, 0x72, 0x76, 0xef, 0x65, 0xa5, 0xf5, 0xa6, 0x1f, 0xec, 0xbd, 0x1c, 0xd5, 0x5a, 0x4a,
+ 0xec, 0xbd, 0xda, 0x94, 0xdd, 0x7b, 0xb9, 0x75, 0xa8, 0x78, 0x76, 0xc5, 0x4e, 0xcb, 0x14, 0xec,
+ 0xbd, 0xbc, 0xf2, 0x69, 0x86, 0xd8, 0x7b, 0x51, 0xac, 0x9d, 0xa8, 0x2c, 0xb1, 0xcf, 0xc4, 0x44,
+ 0xc4, 0x62, 0x59, 0x81, 0x89, 0xca, 0xb1, 0x61, 0x10, 0x62, 0xa2, 0x22, 0x50, 0xe5, 0xed, 0xf7,
+ 0xa3, 0xa8, 0x39, 0x2f, 0x91, 0x67, 0x5a, 0xfe, 0xda, 0xa3, 0x0e, 0x52, 0xbc, 0x03, 0xad, 0xf7,
+ 0x03, 0x84, 0x4d, 0xaf, 0x9a, 0xbf, 0xcb, 0xa3, 0xba, 0x01, 0xaa, 0x21, 0x45, 0x44, 0x7a, 0x05,
+ 0x10, 0x58, 0xd0, 0xc9, 0x05, 0x7f, 0x85, 0x17, 0xb4, 0x96, 0x84, 0x0b, 0xaa, 0x08, 0x7b, 0x78,
+ 0xae, 0x0a, 0x8a, 0x1d, 0x9e, 0xeb, 0x62, 0x84, 0x0e, 0xcf, 0x21, 0x63, 0x63, 0xc6, 0x35, 0xfc,
+ 0x8c, 0xf3, 0xcb, 0x45, 0x5c, 0x5e, 0x82, 0x98, 0xf1, 0x94, 0x35, 0x43, 0xc4, 0x0c, 0xc5, 0xda,
+ 0x98, 0x71, 0x1d, 0xd6, 0xc9, 0xf9, 0x69, 0x99, 0x81, 0x98, 0xf1, 0x6c, 0x28, 0x84, 0x88, 0x19,
+ 0x02, 0xb5, 0xb3, 0x93, 0xeb, 0x6d, 0xc2, 0xe0, 0x71, 0x8d, 0xa7, 0x3e, 0x61, 0xd4, 0x71, 0x0d,
+ 0x82, 0xc1, 0x10, 0xda, 0x2f, 0xe3, 0xe2, 0x02, 0x0f, 0x21, 0x29, 0x0a, 0x87, 0x90, 0x46, 0x60,
+ 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf0, 0xfe, 0x6e, 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, 0xef,
+ 0x46, 0xf0, 0x32, 0x15, 0x17, 0x87, 0x4c, 0xc4, 0x78, 0x7f, 0xfb, 0x4c, 0xb8, 0xbf, 0x5b, 0xac,
+ 0xcd, 0xfe, 0x5d, 0x87, 0x93, 0xe5, 0x59, 0x35, 0x2b, 0xd3, 0x33, 0x36, 0x08, 0x58, 0x31, 0x10,
+ 0x91, 0xfd, 0x93, 0xb0, 0xf2, 0xf9, 0x93, 0xb5, 0xe8, 0xa6, 0xee, 0x76, 0x5e, 0x55, 0x6a, 0xed,
+ 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0x8f, 0x33, 0x7a, 0xa8, 0x39, 0xb9, 0x01, 0x5e,
+ 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, 0xda,
+ 0xb4, 0x4c, 0xf5, 0x8f, 0x96, 0x8d, 0x93, 0x0a, 0xa4, 0x65, 0xba, 0xbd, 0x1d, 0x82, 0x48, 0xcb,
+ 0x70, 0x12, 0x86, 0xc2, 0x7e, 0xc9, 0x97, 0x45, 0xd5, 0x11, 0x0a, 0x00, 0x0a, 0x87, 0x42, 0x1b,
+ 0x56, 0x3e, 0x5f, 0x47, 0xbf, 0xe9, 0x86, 0x9f, 0xdb, 0xd8, 0x5b, 0x74, 0x4c, 0x61, 0x4d, 0x3c,
+ 0xec, 0x8b, 0xdb, 0x8c, 0x42, 0x7b, 0x16, 0xbb, 0x4c, 0xc4, 0x69, 0x56, 0x0d, 0xd6, 0x71, 0x1b,
+ 0x5a, 0x4e, 0x64, 0x14, 0x18, 0x07, 0xe7, 0xb7, 0xdd, 0x65, 0x91, 0xa5, 0xb3, 0xf6, 0xc3, 0x24,
+ 0xa5, 0x6b, 0xc4, 0xe1, 0xf9, 0xcd, 0xc5, 0xe0, 0x7c, 0x5d, 0xa7, 0x7e, 0xf2, 0x3f, 0xd3, 0x55,
+ 0xc1, 0xf0, 0xf9, 0xda, 0x43, 0xc2, 0xf3, 0x35, 0x44, 0x61, 0x7d, 0x26, 0x4c, 0x1c, 0xc4, 0x2b,
+ 0xbe, 0x24, 0xe6, 0x6b, 0x23, 0x0e, 0xd7, 0xc7, 0xc5, 0xec, 0xde, 0xc0, 0x78, 0x18, 0xe7, 0x82,
+ 0x95, 0x79, 0x9c, 0xed, 0x65, 0xf1, 0xbc, 0x1a, 0x10, 0x73, 0x8c, 0x4f, 0x11, 0x7b, 0x03, 0x9a,
+ 0x46, 0x9a, 0x71, 0x5c, 0xed, 0xc5, 0x57, 0xbc, 0x4c, 0x05, 0xdd, 0x8c, 0x16, 0xe9, 0x6c, 0x46,
+ 0x0f, 0x45, 0xbd, 0x8d, 0xca, 0xd9, 0x45, 0x7a, 0xc5, 0x92, 0x80, 0x37, 0x8d, 0xf4, 0xf0, 0xe6,
+ 0xa0, 0x48, 0xa7, 0x4d, 0xf8, 0xb2, 0x9c, 0x31, 0xb2, 0xd3, 0x1a, 0x71, 0x67, 0xa7, 0x19, 0x4c,
+ 0x79, 0xf8, 0xab, 0xb5, 0xe8, 0xb7, 0x1a, 0xa9, 0xfb, 0x84, 0x67, 0x37, 0xae, 0x2e, 0xce, 0x78,
+ 0x5c, 0x26, 0x83, 0x0f, 0x30, 0x3b, 0x28, 0x6a, 0x5c, 0x3f, 0xb9, 0x8e, 0x0a, 0x6c, 0xd6, 0x3a,
+ 0xef, 0xb6, 0x23, 0x0e, 0x6d, 0x56, 0x0f, 0x09, 0x37, 0x2b, 0x44, 0xe1, 0x04, 0x22, 0xe5, 0xcd,
+ 0x01, 0xe0, 0x3a, 0xa9, 0xef, 0x9f, 0x02, 0x6e, 0x74, 0x72, 0x70, 0x7e, 0xac, 0x85, 0x7e, 0xb4,
+ 0x6c, 0x51, 0x36, 0xf0, 0x88, 0x19, 0xf6, 0xc5, 0x49, 0xcf, 0x66, 0x54, 0x84, 0x3d, 0xb7, 0x46,
+ 0xc6, 0xb0, 0x2f, 0x4e, 0x78, 0x76, 0xa6, 0xb5, 0x90, 0x67, 0x64, 0x6a, 0x1b, 0xf6, 0xc5, 0x61,
+ 0xf6, 0xa5, 0x18, 0xbd, 0x2e, 0x3c, 0x0c, 0xd8, 0x81, 0x6b, 0xc3, 0x66, 0x2f, 0x56, 0x39, 0xfc,
+ 0x9b, 0xb5, 0xe8, 0xbb, 0xd6, 0xe3, 0x21, 0x4f, 0xd2, 0xf3, 0x55, 0x03, 0xbd, 0x88, 0xb3, 0x25,
+ 0xab, 0x06, 0x4f, 0x28, 0x6b, 0x6d, 0xd6, 0x94, 0xe0, 0xe9, 0xb5, 0x74, 0xe0, 0xd8, 0x19, 0x15,
+ 0x45, 0xb6, 0x9a, 0xb2, 0x45, 0x91, 0x91, 0x63, 0xc7, 0x43, 0xc2, 0x63, 0x07, 0xa2, 0x30, 0x2b,
+ 0x9f, 0xf2, 0x3a, 0xe7, 0x47, 0xb3, 0x72, 0x29, 0x0a, 0x67, 0xe5, 0x1a, 0x81, 0xb9, 0xd2, 0x94,
+ 0xef, 0xf0, 0x2c, 0x63, 0x33, 0xd1, 0xbe, 0x25, 0x62, 0x34, 0x2d, 0x11, 0xce, 0x95, 0x00, 0x69,
+ 0x4f, 0xe5, 0xf4, 0x1e, 0x32, 0x2e, 0xd9, 0xb3, 0xd5, 0x41, 0x9a, 0x5f, 0x0e, 0xf0, 0xb4, 0xc0,
+ 0x02, 0xc4, 0xa9, 0x1c, 0x0a, 0xc2, 0xbd, 0xea, 0x69, 0x9e, 0x70, 0x7c, 0xaf, 0x5a, 0x4b, 0xc2,
+ 0x7b, 0x55, 0x45, 0x40, 0x93, 0x27, 0x8c, 0x32, 0x59, 0x4b, 0xc2, 0x26, 0x15, 0x81, 0x4d, 0x85,
+ 0xea, 0x49, 0x11, 0x39, 0x15, 0x82, 0x67, 0x43, 0x1b, 0x9d, 0x1c, 0xdc, 0x73, 0x29, 0x07, 0x68,
+ 0x44, 0x00, 0xe3, 0x77, 0x82, 0x0c, 0x0c, 0x7d, 0xbd, 0x1b, 0xde, 0x63, 0x62, 0x76, 0x81, 0x87,
+ 0xbe, 0x87, 0x84, 0x43, 0x1f, 0xa2, 0xb0, 0xad, 0xa6, 0xdc, 0xec, 0xe6, 0xd7, 0xf1, 0xc0, 0x6b,
+ 0xed, 0xe4, 0x37, 0x3a, 0x39, 0xd8, 0x56, 0xe3, 0x05, 0xdd, 0x56, 0x8d, 0x2c, 0xdc, 0x56, 0x86,
+ 0x81, 0xa5, 0x6f, 0x04, 0xf2, 0x90, 0x6c, 0x9d, 0x56, 0xf4, 0x8e, 0xc9, 0x36, 0x3a, 0x39, 0xe5,
+ 0xe4, 0x5f, 0xcc, 0xfe, 0xb0, 0x91, 0x1e, 0xf1, 0x7a, 0xf0, 0xbd, 0x88, 0xb3, 0x34, 0x89, 0x05,
+ 0x9b, 0xf2, 0x4b, 0x96, 0xe3, 0x5b, 0x31, 0x55, 0xda, 0x86, 0x1f, 0x7a, 0x0a, 0xe1, 0xad, 0x58,
+ 0x58, 0x11, 0xc6, 0x49, 0x43, 0x9f, 0x56, 0x6c, 0x27, 0xae, 0x88, 0x29, 0xd2, 0x43, 0xc2, 0x71,
+ 0x02, 0x51, 0x98, 0x08, 0x37, 0xf2, 0xe7, 0xaf, 0x0b, 0x56, 0xa6, 0x2c, 0x9f, 0x31, 0x3c, 0x11,
+ 0x86, 0x54, 0x38, 0x11, 0x46, 0x68, 0xb8, 0x09, 0xdc, 0x8d, 0x05, 0x7b, 0xb6, 0x9a, 0xa6, 0x0b,
+ 0x56, 0x89, 0x78, 0x51, 0xe0, 0x9b, 0x40, 0x00, 0x85, 0x37, 0x81, 0x6d, 0xb8, 0x75, 0xe6, 0x64,
+ 0x66, 0xda, 0xf6, 0xad, 0x35, 0x48, 0x04, 0x6e, 0xad, 0x11, 0x28, 0x6c, 0x58, 0x0b, 0xa0, 0x4f,
+ 0x1f, 0x5a, 0x56, 0x82, 0x4f, 0x1f, 0x68, 0xba, 0x75, 0x92, 0x67, 0x98, 0x49, 0x3d, 0x34, 0x3b,
+ 0x8a, 0x3e, 0x71, 0x87, 0xe8, 0x66, 0x2f, 0x16, 0x3f, 0x3a, 0x3c, 0x61, 0x59, 0x2c, 0xd7, 0xc3,
+ 0xc0, 0xf9, 0x9c, 0x66, 0xfa, 0x1c, 0x1d, 0x3a, 0xac, 0x72, 0xf8, 0x17, 0x6b, 0xd1, 0x7b, 0x98,
+ 0xc7, 0x2f, 0x0a, 0xe9, 0xf7, 0x71, 0xb7, 0xad, 0x86, 0x24, 0xae, 0xe5, 0x85, 0x35, 0xec, 0xcd,
+ 0x12, 0x2d, 0xb2, 0xb7, 0xf6, 0x54, 0x01, 0xfc, 0x6c, 0xd0, 0x94, 0x1f, 0x72, 0xc4, 0xcd, 0x92,
+ 0x10, 0x6f, 0x37, 0x5a, 0x7e, 0xb9, 0x2a, 0xb0, 0xd1, 0x32, 0x36, 0x94, 0x98, 0xd8, 0x68, 0x21,
+ 0x98, 0x1d, 0x9d, 0x6e, 0xf5, 0x5e, 0xa6, 0xe2, 0x42, 0x26, 0x72, 0x60, 0x74, 0x7a, 0x65, 0x35,
+ 0x10, 0x31, 0x3a, 0x49, 0x18, 0xa6, 0x3a, 0x1a, 0xac, 0xc7, 0x26, 0x36, 0x97, 0x1b, 0x43, 0xee,
+ 0xc8, 0xbc, 0xdf, 0x0d, 0xc2, 0x78, 0xd5, 0x62, 0xb5, 0xa7, 0x7a, 0x18, 0xb2, 0x00, 0xf6, 0x55,
+ 0x9b, 0xbd, 0x58, 0xe5, 0xf0, 0xcf, 0xa2, 0xef, 0xb4, 0x2a, 0xb6, 0xc7, 0x62, 0xb1, 0x2c, 0x59,
+ 0x32, 0xd8, 0xee, 0x28, 0xb7, 0x06, 0x8d, 0xeb, 0xc7, 0xfd, 0x15, 0x5a, 0xc9, 0xbf, 0xe6, 0x9a,
+ 0xb0, 0x32, 0x65, 0x78, 0x12, 0x32, 0xe9, 0xb3, 0xc1, 0xe4, 0x9f, 0xd6, 0x69, 0xed, 0xdf, 0xdd,
+ 0xe8, 0x1a, 0x5d, 0xc5, 0x69, 0x26, 0x9f, 0x02, 0x7f, 0x10, 0x32, 0xea, 0xa1, 0xc1, 0xfd, 0x3b,
+ 0xa9, 0xd2, 0x9a, 0x99, 0xe5, 0x18, 0x77, 0xf6, 0x7d, 0x8f, 0xe8, 0x99, 0x00, 0xd9, 0xf6, 0x6d,
+ 0xf5, 0xa4, 0x95, 0x5b, 0xa1, 0x97, 0xbc, 0xfa, 0xcf, 0x6e, 0x90, 0x63, 0x5e, 0x95, 0x2a, 0x12,
+ 0xe9, 0x5b, 0x3d, 0x69, 0xe5, 0xf5, 0x4f, 0xa3, 0x77, 0xdb, 0x5e, 0xd5, 0x42, 0xb4, 0xdd, 0x69,
+ 0x0a, 0xac, 0x45, 0x8f, 0xfb, 0x2b, 0x28, 0xf7, 0xff, 0x6e, 0x0e, 0xbc, 0x1b, 0xff, 0x33, 0xbe,
+ 0x58, 0xb0, 0x3c, 0x61, 0x89, 0xd6, 0xa8, 0xea, 0x8d, 0xd9, 0xa7, 0xb4, 0x5d, 0xa3, 0x30, 0x74,
+ 0x35, 0x4c, 0x89, 0x7e, 0xfb, 0x1b, 0x68, 0xaa, 0xa2, 0xfd, 0xf7, 0x5a, 0xf4, 0x00, 0x2d, 0x9a,
+ 0x0e, 0x5c, 0xaf, 0x88, 0xbf, 0xd7, 0xc7, 0x11, 0xa6, 0x69, 0x8a, 0x3a, 0xfa, 0x39, 0x2c, 0xa8,
+ 0x22, 0xff, 0xc7, 0x5a, 0x74, 0xdb, 0x2a, 0xd6, 0xe1, 0xbd, 0xc3, 0xf3, 0xf3, 0x2c, 0x9d, 0x09,
+ 0xf9, 0xa8, 0x57, 0xa9, 0xd0, 0xcd, 0x49, 0x69, 0x74, 0x37, 0x67, 0x40, 0xd3, 0xee, 0x8a, 0x3f,
+ 0x4b, 0x2b, 0xc1, 0xcb, 0xd5, 0xe4, 0x82, 0xbf, 0xd2, 0xef, 0x3d, 0xf9, 0xf3, 0xb2, 0x02, 0x86,
+ 0x0e, 0x41, 0xec, 0x8a, 0x71, 0xb2, 0xe5, 0xca, 0xbe, 0x1f, 0x55, 0x11, 0xae, 0x1c, 0xa2, 0xc3,
+ 0x95, 0x4f, 0xda, 0x55, 0x49, 0xd7, 0xca, 0xbe, 0xcc, 0xb5, 0x81, 0x17, 0xb5, 0xfd, 0x42, 0xd7,
+ 0xfd, 0x6e, 0xd0, 0xe6, 0xa6, 0x4a, 0xbc, 0x9b, 0x9e, 0x9f, 0x9b, 0x3a, 0xe1, 0x25, 0x75, 0x11,
+ 0x22, 0x37, 0x25, 0x50, 0xbb, 0xbd, 0xda, 0x4b, 0x33, 0x26, 0x1f, 0x0a, 0x7d, 0x71, 0x7e, 0x9e,
+ 0xf1, 0x38, 0x01, 0xdb, 0xab, 0x5a, 0x3c, 0x74, 0xe5, 0xc4, 0xf6, 0x0a, 0xe3, 0xec, 0x75, 0x93,
+ 0x5a, 0x5a, 0x47, 0x77, 0x3e, 0x4b, 0x33, 0x78, 0x6d, 0x5a, 0x6a, 0x1a, 0x21, 0x71, 0xdd, 0xa4,
+ 0x05, 0xd9, 0x14, 0xa8, 0x16, 0xd5, 0x51, 0xa9, 0xcb, 0x7f, 0xaf, 0xad, 0xe8, 0x88, 0x89, 0x14,
+ 0x08, 0xc1, 0xec, 0xf1, 0x45, 0x2d, 0x3c, 0x2d, 0xa4, 0xf1, 0x5b, 0x6d, 0xad, 0x46, 0x42, 0x1c,
+ 0x5f, 0xf8, 0x84, 0xdd, 0x2d, 0xd7, 0x7f, 0xdf, 0xe5, 0xaf, 0x72, 0x69, 0xf4, 0x76, 0x5b, 0x45,
+ 0xcb, 0x88, 0xdd, 0x32, 0x64, 0x94, 0xe1, 0xcf, 0xa3, 0x5f, 0x94, 0x86, 0x4b, 0x5e, 0x0c, 0x6e,
+ 0x20, 0x0a, 0xa5, 0x73, 0xc9, 0xf8, 0x26, 0x29, 0xb7, 0xb7, 0x53, 0x4c, 0x6c, 0x9c, 0x56, 0xf1,
+ 0x1c, 0xbe, 0x19, 0x60, 0x7b, 0x5c, 0x4a, 0x89, 0xdb, 0x29, 0x6d, 0xca, 0x8f, 0x8a, 0x23, 0x9e,
+ 0x28, 0xeb, 0x48, 0x0d, 0x8d, 0x30, 0x14, 0x15, 0x2e, 0x64, 0xd3, 0xd6, 0xa3, 0xf8, 0x2a, 0x9d,
+ 0x9b, 0xd4, 0xa2, 0x99, 0xc0, 0x2a, 0x90, 0xb6, 0x5a, 0x66, 0xe8, 0x40, 0x44, 0xda, 0x4a, 0xc2,
+ 0xca, 0xe7, 0x3f, 0xaf, 0x45, 0xb7, 0x2c, 0xb3, 0xaf, 0x0f, 0x7c, 0xc7, 0xf9, 0x39, 0xaf, 0x93,
+ 0xdc, 0x83, 0x34, 0xbf, 0xac, 0x06, 0x1f, 0x53, 0x26, 0x71, 0xde, 0x14, 0xe5, 0x93, 0x6b, 0xeb,
+ 0xd9, 0xfd, 0x89, 0x3e, 0x0d, 0xb5, 0x57, 0x22, 0x1a, 0x0d, 0xb0, 0x3f, 0x31, 0x87, 0xa6, 0x90,
+ 0x23, 0xf6, 0x27, 0x21, 0xde, 0x76, 0xb1, 0x71, 0x9e, 0xf1, 0x1c, 0x76, 0xb1, 0xb5, 0x50, 0x0b,
+ 0x89, 0x2e, 0x6e, 0x41, 0x76, 0x3e, 0xd6, 0xa2, 0xe6, 0x7c, 0x6d, 0x94, 0x65, 0x60, 0x3e, 0x36,
+ 0xaa, 0x06, 0x20, 0xe6, 0x63, 0x14, 0x54, 0x7e, 0x4e, 0xa2, 0x6f, 0xd5, 0x4d, 0x7a, 0x5c, 0xb2,
+ 0xab, 0x94, 0xc1, 0xdb, 0x3b, 0x8e, 0x84, 0x18, 0xff, 0x3e, 0x61, 0x47, 0xd6, 0x69, 0x5e, 0x15,
+ 0x59, 0x5c, 0x5d, 0xa8, 0xfb, 0x1c, 0x7e, 0x9d, 0xb5, 0x10, 0xde, 0xe8, 0xb8, 0xd7, 0x41, 0xd9,
+ 0x49, 0x5d, 0xcb, 0xcc, 0x14, 0xb3, 0x8e, 0xab, 0xb6, 0xa6, 0x99, 0x8d, 0x4e, 0xce, 0x3e, 0x34,
+ 0xd9, 0x8f, 0xb3, 0x8c, 0x95, 0x2b, 0x2d, 0x3b, 0x8c, 0xf3, 0xf4, 0x9c, 0x55, 0x02, 0x3c, 0x34,
+ 0x51, 0xd4, 0x10, 0x62, 0xc4, 0x43, 0x93, 0x00, 0x6e, 0xf7, 0x6d, 0xc0, 0xf3, 0x38, 0x4f, 0xd8,
+ 0x6b, 0xb0, 0x6f, 0x83, 0x76, 0x24, 0x43, 0xec, 0xdb, 0x28, 0xd6, 0x3e, 0x3c, 0x78, 0x96, 0xf1,
+ 0xd9, 0xa5, 0x5a, 0x02, 0xfc, 0x0e, 0x96, 0x12, 0xb8, 0x06, 0xdc, 0x0e, 0x21, 0x76, 0x11, 0x90,
+ 0x82, 0x13, 0x56, 0x64, 0xf1, 0x0c, 0x5e, 0xe1, 0x6a, 0x74, 0x94, 0x8c, 0x58, 0x04, 0x20, 0x03,
+ 0x8a, 0xab, 0xae, 0x86, 0x61, 0xc5, 0x05, 0x37, 0xc3, 0x6e, 0x87, 0x10, 0xbb, 0x0c, 0x4a, 0xc1,
+ 0xa4, 0xc8, 0x52, 0x01, 0x86, 0x41, 0xa3, 0x21, 0x25, 0xc4, 0x30, 0xf0, 0x09, 0x60, 0xf2, 0x90,
+ 0x95, 0x73, 0x86, 0x9a, 0x94, 0x92, 0xa0, 0x49, 0x4d, 0xd8, 0xfb, 0xea, 0x4d, 0xdd, 0x79, 0xb1,
+ 0x02, 0xf7, 0xd5, 0x55, 0xb5, 0x78, 0xb1, 0x22, 0xee, 0xab, 0x7b, 0x00, 0x28, 0xe2, 0x71, 0x5c,
+ 0x09, 0xbc, 0x88, 0x52, 0x12, 0x2c, 0xa2, 0x26, 0xec, 0x1a, 0xdd, 0x14, 0x71, 0x29, 0xc0, 0x1a,
+ 0xad, 0x0a, 0xe0, 0x5c, 0x62, 0xb8, 0x49, 0xca, 0xed, 0x4c, 0xd2, 0xf4, 0x0a, 0x13, 0x7b, 0x29,
+ 0xcb, 0x92, 0x0a, 0xcc, 0x24, 0xaa, 0xdd, 0xb5, 0x94, 0x98, 0x49, 0xda, 0x14, 0x08, 0x25, 0xf5,
+ 0x04, 0x04, 0xab, 0x1d, 0x78, 0x00, 0x72, 0x3b, 0x84, 0xd8, 0xf9, 0x49, 0x17, 0x7a, 0x27, 0x2e,
+ 0xcb, 0xb4, 0x5e, 0xfc, 0xd7, 0xf1, 0x02, 0x69, 0x39, 0x31, 0x3f, 0x61, 0x1c, 0x18, 0x5e, 0x7a,
+ 0xe2, 0xc6, 0x0a, 0x06, 0xa7, 0xee, 0x3b, 0x41, 0xc6, 0x66, 0x9c, 0x52, 0xe2, 0x3c, 0x85, 0xc7,
+ 0x5a, 0x13, 0x79, 0x08, 0xbf, 0xde, 0x85, 0x39, 0xaf, 0xce, 0x19, 0x17, 0x87, 0xfc, 0x8a, 0x4d,
+ 0xf9, 0xf3, 0xd7, 0x69, 0x55, 0x6f, 0xb7, 0xd4, 0xca, 0xfd, 0x94, 0xb0, 0x84, 0xc1, 0xc4, 0xab,
+ 0x73, 0x9d, 0x4a, 0x36, 0x81, 0x00, 0x65, 0x39, 0x62, 0xaf, 0xd0, 0x04, 0x02, 0x5a, 0x34, 0x1c,
+ 0x91, 0x40, 0x84, 0x78, 0x7b, 0x62, 0x66, 0x9c, 0xab, 0xef, 0x25, 0x4c, 0xb9, 0xce, 0xe5, 0x28,
+ 0x6b, 0x10, 0x24, 0x0e, 0x2d, 0x82, 0x0a, 0x76, 0x7f, 0x69, 0xfc, 0xdb, 0x21, 0x76, 0x9f, 0xb0,
+ 0xd3, 0x1e, 0x66, 0x0f, 0x7a, 0x90, 0x88, 0x2b, 0x7b, 0x95, 0x84, 0x72, 0xd5, 0xbe, 0x49, 0xf2,
+ 0xa0, 0x07, 0xe9, 0x9c, 0xbe, 0xb9, 0xd5, 0x7a, 0x16, 0xcf, 0x2e, 0xe7, 0x25, 0x5f, 0xe6, 0xc9,
+ 0x0e, 0xcf, 0x78, 0x09, 0x4e, 0xdf, 0xbc, 0x52, 0x03, 0x94, 0x38, 0x7d, 0xeb, 0x50, 0xb1, 0x19,
+ 0x9c, 0x5b, 0x8a, 0x51, 0x96, 0xce, 0xe1, 0x8e, 0xda, 0x33, 0x24, 0x01, 0x22, 0x83, 0x43, 0x41,
+ 0x24, 0x88, 0x9a, 0x1d, 0xb7, 0x48, 0x67, 0x71, 0xd6, 0xf8, 0xdb, 0xa6, 0xcd, 0x78, 0x60, 0x67,
+ 0x10, 0x21, 0x0a, 0x48, 0x3d, 0xa7, 0xcb, 0x32, 0x1f, 0xe7, 0x82, 0x93, 0xf5, 0xd4, 0x40, 0x67,
+ 0x3d, 0x1d, 0x10, 0x4c, 0xab, 0x53, 0xf6, 0xba, 0x2e, 0x4d, 0xfd, 0x0f, 0x36, 0xad, 0xd6, 0x7f,
+ 0x1f, 0x2a, 0x79, 0x68, 0x5a, 0x05, 0x1c, 0xa8, 0x8c, 0x72, 0xd2, 0x04, 0x4c, 0x40, 0xdb, 0x0f,
+ 0x93, 0xfb, 0xdd, 0x20, 0xee, 0x67, 0x22, 0x56, 0x19, 0x0b, 0xf9, 0x91, 0x40, 0x1f, 0x3f, 0x1a,
+ 0xb4, 0xc7, 0x2d, 0x5e, 0x7d, 0x2e, 0xd8, 0xec, 0xb2, 0x75, 0x33, 0xce, 0x2f, 0x68, 0x83, 0x10,
+ 0xc7, 0x2d, 0x04, 0x8a, 0x77, 0xd1, 0x78, 0xc6, 0xf3, 0x50, 0x17, 0xd5, 0xf2, 0x3e, 0x5d, 0xa4,
+ 0x38, 0xbb, 0xf9, 0x35, 0x52, 0x15, 0x99, 0x4d, 0x37, 0x6d, 0x12, 0x16, 0x5c, 0x88, 0xd8, 0xfc,
+ 0x92, 0xb0, 0xcd, 0xc9, 0xa1, 0xcf, 0xc3, 0xf6, 0x6b, 0x03, 0x2d, 0x2b, 0x87, 0xf4, 0x6b, 0x03,
+ 0x14, 0x4b, 0x57, 0xb2, 0x89, 0x91, 0x0e, 0x2b, 0x7e, 0x9c, 0x3c, 0xea, 0x07, 0xdb, 0x2d, 0x8f,
+ 0xe7, 0x73, 0x27, 0x63, 0x71, 0xd9, 0x78, 0xdd, 0x0a, 0x18, 0xb2, 0x18, 0xb1, 0xe5, 0x09, 0xe0,
+ 0x60, 0x0a, 0xf3, 0x3c, 0xef, 0xf0, 0x5c, 0xb0, 0x5c, 0x60, 0x53, 0x98, 0x6f, 0x4c, 0x81, 0xa1,
+ 0x29, 0x8c, 0x52, 0x00, 0x71, 0x2b, 0xcf, 0x83, 0x98, 0x38, 0x8a, 0x17, 0x68, 0xc6, 0xd6, 0x9c,
+ 0xf5, 0x34, 0xf2, 0x50, 0xdc, 0x02, 0xce, 0x79, 0x9c, 0xeb, 0x7a, 0x99, 0xc6, 0xe5, 0xdc, 0x9c,
+ 0x6e, 0x24, 0x83, 0xc7, 0xb4, 0x1d, 0x9f, 0x24, 0x1e, 0xe7, 0x86, 0x35, 0xc0, 0xb4, 0x33, 0x5e,
+ 0xc4, 0x73, 0x53, 0x53, 0xa4, 0x06, 0x52, 0xde, 0xaa, 0xea, 0xfd, 0x6e, 0x10, 0xf8, 0x79, 0x91,
+ 0x26, 0x8c, 0x07, 0xfc, 0x48, 0x79, 0x1f, 0x3f, 0x10, 0x04, 0xd9, 0x5b, 0x5d, 0xef, 0x66, 0x47,
+ 0x37, 0xca, 0x13, 0xb5, 0x8f, 0x1d, 0x12, 0xcd, 0x03, 0xb8, 0x50, 0xf6, 0x46, 0xf0, 0x60, 0x8c,
+ 0xea, 0x03, 0xda, 0xd0, 0x18, 0x35, 0xe7, 0xaf, 0x7d, 0xc6, 0x28, 0x06, 0x2b, 0x9f, 0x3f, 0x56,
+ 0x63, 0x74, 0x37, 0x16, 0x71, 0x9d, 0xb7, 0xbf, 0x48, 0xd9, 0x2b, 0xb5, 0x11, 0x46, 0xea, 0xab,
+ 0xa9, 0xa1, 0x7c, 0xeb, 0x19, 0xec, 0x8a, 0xb7, 0x7b, 0xf3, 0x01, 0xdf, 0x6a, 0x87, 0xd0, 0xe9,
+ 0x1b, 0x6c, 0x15, 0xb6, 0x7b, 0xf3, 0x01, 0xdf, 0xea, 0xe3, 0x0d, 0x9d, 0xbe, 0xc1, 0x17, 0x1c,
+ 0xb6, 0x7b, 0xf3, 0xca, 0xf7, 0x5f, 0xea, 0x81, 0xeb, 0x3a, 0xaf, 0xf3, 0xb0, 0x99, 0x48, 0xaf,
+ 0x18, 0x96, 0x4e, 0xfa, 0xf6, 0x0c, 0x1a, 0x4a, 0x27, 0x69, 0x15, 0xe7, 0xf3, 0x69, 0x58, 0x29,
+ 0x8e, 0x79, 0x95, 0xca, 0xeb, 0x18, 0x4f, 0x7b, 0x18, 0xd5, 0x70, 0x68, 0xd3, 0x14, 0x52, 0xb2,
+ 0x0f, 0x96, 0x3d, 0xd4, 0x5e, 0x84, 0x7f, 0x14, 0xb0, 0xd7, 0xbe, 0x0f, 0xbf, 0xd5, 0x93, 0xb6,
+ 0x8f, 0x78, 0x3d, 0x46, 0x3f, 0x9c, 0x9b, 0x30, 0x74, 0x95, 0x30, 0xa6, 0xcc, 0x43, 0x5b, 0xf7,
+ 0x29, 0xe5, 0xe3, 0xfe, 0x0a, 0x1d, 0xee, 0x47, 0x49, 0xd2, 0xcf, 0xbd, 0xfb, 0x74, 0xfb, 0x71,
+ 0x7f, 0x05, 0xe5, 0xfe, 0xaf, 0xf5, 0xb6, 0x06, 0xfa, 0x57, 0x63, 0xf0, 0x49, 0x1f, 0x8b, 0x60,
+ 0x1c, 0x3e, 0xbd, 0x96, 0x8e, 0x2a, 0xc8, 0xdf, 0xeb, 0xfd, 0xbb, 0x46, 0xe5, 0xdb, 0x48, 0xf2,
+ 0x2d, 0x66, 0x35, 0x24, 0x43, 0x51, 0x65, 0x61, 0x38, 0x30, 0x3f, 0xba, 0xa6, 0x96, 0xf3, 0x2d,
+ 0x3f, 0x0f, 0x56, 0x6f, 0xcd, 0x3a, 0xe5, 0x09, 0x59, 0x76, 0x68, 0x58, 0xa0, 0x8f, 0xaf, 0xab,
+ 0x46, 0x0d, 0x55, 0x07, 0x96, 0x5f, 0xb3, 0x79, 0xda, 0xd3, 0xb0, 0xf7, 0x7d, 0x9b, 0x0f, 0xaf,
+ 0xa7, 0xa4, 0xca, 0xf2, 0x5f, 0x6b, 0xd1, 0x3d, 0x8f, 0xb5, 0x8f, 0x33, 0xc0, 0xa1, 0xcb, 0x0f,
+ 0x02, 0xf6, 0x29, 0x25, 0x53, 0xb8, 0xdf, 0xf9, 0x66, 0xca, 0xf6, 0xc3, 0x77, 0x9e, 0xca, 0x5e,
+ 0x9a, 0x09, 0x56, 0xb6, 0x3f, 0x7c, 0xe7, 0xdb, 0x6d, 0xa8, 0x21, 0xfd, 0xe1, 0xbb, 0x00, 0xee,
+ 0x7c, 0xf8, 0x0e, 0xf1, 0x8c, 0x7e, 0xf8, 0x0e, 0xb5, 0x16, 0xfc, 0xf0, 0x5d, 0x58, 0x83, 0x5a,
+ 0x5d, 0x74, 0x11, 0x9a, 0x63, 0xf3, 0x5e, 0x16, 0xfd, 0x53, 0xf4, 0x27, 0xd7, 0x51, 0x21, 0xd6,
+ 0xd7, 0x86, 0x93, 0x17, 0x2a, 0x7b, 0xb4, 0xa9, 0x77, 0xa9, 0x72, 0xbb, 0x37, 0xaf, 0x7c, 0xff,
+ 0x48, 0x6d, 0xae, 0xcc, 0x6a, 0xc2, 0x4b, 0xf9, 0xd1, 0xc3, 0xcd, 0xd0, 0xea, 0x50, 0x5b, 0x70,
+ 0x7b, 0xfe, 0x51, 0x3f, 0x98, 0xa8, 0x6e, 0x4d, 0xa8, 0x4e, 0x1f, 0x76, 0x19, 0x02, 0x5d, 0xbe,
+ 0xdd, 0x9b, 0x27, 0x96, 0x91, 0xc6, 0x77, 0xd3, 0xdb, 0x3d, 0x8c, 0xf9, 0x7d, 0xfd, 0xb8, 0xbf,
+ 0x82, 0x72, 0x7f, 0xa5, 0xb2, 0x56, 0xd7, 0xbd, 0xec, 0xe7, 0xad, 0x2e, 0x53, 0x13, 0xaf, 0x9b,
+ 0x87, 0x7d, 0xf1, 0x50, 0xfe, 0xe2, 0x2e, 0xa1, 0x5d, 0xf9, 0x0b, 0xba, 0x8c, 0x7e, 0x78, 0x3d,
+ 0x25, 0x55, 0x96, 0x7f, 0x5a, 0x8b, 0x6e, 0x92, 0x65, 0x51, 0x71, 0xf0, 0x71, 0x5f, 0xcb, 0x20,
+ 0x1e, 0x3e, 0xb9, 0xb6, 0x9e, 0x2a, 0xd4, 0xbf, 0xae, 0x45, 0xb7, 0x02, 0x85, 0x6a, 0x02, 0xe4,
+ 0x1a, 0xd6, 0xfd, 0x40, 0xf9, 0xf4, 0xfa, 0x8a, 0xd4, 0x72, 0xef, 0xe2, 0x93, 0xf6, 0x47, 0xcc,
+ 0x02, 0xb6, 0x27, 0xf4, 0x47, 0xcc, 0xba, 0xb5, 0xe0, 0x19, 0x53, 0x7c, 0xa6, 0xf7, 0x7c, 0xe8,
+ 0x19, 0x93, 0xbc, 0x0a, 0x19, 0xfc, 0x3c, 0x0a, 0xc6, 0x61, 0x4e, 0x9e, 0xbf, 0x2e, 0xe2, 0x3c,
+ 0xa1, 0x9d, 0x34, 0xf2, 0x6e, 0x27, 0x86, 0x83, 0x67, 0x73, 0xb5, 0xf4, 0x84, 0xeb, 0x7d, 0xdc,
+ 0x03, 0x4a, 0xdf, 0x20, 0xc1, 0xb3, 0xb9, 0x16, 0x4a, 0x78, 0x53, 0x59, 0x63, 0xc8, 0x1b, 0x48,
+ 0x16, 0x1f, 0xf6, 0x41, 0xc1, 0x0e, 0xc1, 0x78, 0x33, 0x47, 0xfe, 0x8f, 0x42, 0x56, 0x5a, 0xc7,
+ 0xfe, 0x5b, 0x3d, 0x69, 0xc2, 0xed, 0x84, 0x89, 0xcf, 0x58, 0x9c, 0xb0, 0x32, 0xe8, 0xd6, 0x50,
+ 0xbd, 0xdc, 0xba, 0x34, 0xe6, 0x76, 0x87, 0x67, 0xcb, 0x45, 0xae, 0x3a, 0x93, 0x74, 0xeb, 0x52,
+ 0xdd, 0x6e, 0x01, 0x0d, 0x4f, 0x25, 0xad, 0x5b, 0x99, 0x5e, 0x3e, 0x0c, 0x9b, 0xf1, 0xb2, 0xca,
+ 0xcd, 0x5e, 0x2c, 0x5d, 0x4f, 0x15, 0x46, 0x1d, 0xf5, 0x04, 0x91, 0xb4, 0xd5, 0x93, 0x86, 0xc7,
+ 0x83, 0x8e, 0x5b, 0x13, 0x4f, 0xdb, 0x1d, 0xb6, 0x5a, 0x21, 0xf5, 0xb8, 0xbf, 0x02, 0x3c, 0x8c,
+ 0x55, 0x51, 0x75, 0x90, 0x56, 0x62, 0x2f, 0xcd, 0xb2, 0xc1, 0x66, 0x20, 0x4c, 0x34, 0x14, 0x3c,
+ 0x8c, 0x45, 0x60, 0x22, 0x92, 0xf5, 0xe1, 0x65, 0x3e, 0xe8, 0xb2, 0x23, 0xa9, 0x5e, 0x91, 0xec,
+ 0xd2, 0xe0, 0x40, 0xcd, 0x69, 0x6a, 0x53, 0xdb, 0x61, 0xb8, 0xe1, 0x5a, 0x15, 0xde, 0xee, 0xcd,
+ 0x83, 0xa7, 0xfd, 0x92, 0x92, 0x2b, 0xcb, 0x5d, 0xca, 0x84, 0xb7, 0x92, 0xdc, 0xeb, 0xa0, 0xc0,
+ 0xa1, 0x64, 0x33, 0x8c, 0x5e, 0xa6, 0xc9, 0x9c, 0x09, 0xf4, 0x41, 0x95, 0x0b, 0x04, 0x1f, 0x54,
+ 0x01, 0x10, 0x74, 0x5d, 0xf3, 0x77, 0x73, 0x1a, 0x3b, 0x4e, 0xb0, 0xae, 0x53, 0xca, 0x0e, 0x15,
+ 0xea, 0x3a, 0x94, 0x06, 0xb3, 0x81, 0x71, 0xab, 0x3e, 0x28, 0xf1, 0x30, 0x64, 0x06, 0x7c, 0x55,
+ 0x62, 0xb3, 0x17, 0x0b, 0x56, 0x14, 0xeb, 0x30, 0x5d, 0xa4, 0x02, 0x5b, 0x51, 0x1c, 0x1b, 0x35,
+ 0x12, 0x5a, 0x51, 0xda, 0x28, 0x55, 0xbd, 0x3a, 0x47, 0x18, 0x27, 0xe1, 0xea, 0x35, 0x4c, 0xbf,
+ 0xea, 0x19, 0xb6, 0xf5, 0x5c, 0x35, 0x37, 0x21, 0x23, 0x2e, 0xd4, 0x66, 0x19, 0x89, 0x6d, 0xf9,
+ 0xa2, 0x31, 0x04, 0x43, 0xb3, 0x0e, 0xa5, 0x00, 0x9f, 0x17, 0xd4, 0x9c, 0x7e, 0xf4, 0x5b, 0x14,
+ 0x2c, 0x2e, 0xe3, 0x7c, 0x86, 0x6e, 0x4e, 0xa5, 0xc1, 0x16, 0x19, 0xda, 0x9c, 0x92, 0x1a, 0xe0,
+ 0xa9, 0xbd, 0xff, 0x26, 0x2f, 0x32, 0x14, 0xcc, 0x2b, 0xb3, 0xfe, 0x8b, 0xbc, 0x0f, 0x7a, 0x90,
+ 0xf0, 0xa9, 0xbd, 0x06, 0xcc, 0xb9, 0x7b, 0xe3, 0xf4, 0x83, 0x80, 0x29, 0x1f, 0x0d, 0x6d, 0x84,
+ 0x69, 0x15, 0x10, 0xd4, 0xce, 0xd9, 0xe2, 0xe7, 0x6c, 0x85, 0x05, 0xb5, 0x7b, 0x48, 0xf8, 0x39,
+ 0x5b, 0x85, 0x82, 0xba, 0x8d, 0x82, 0x3c, 0xd3, 0xdd, 0x07, 0xad, 0x07, 0xf4, 0xdd, 0xad, 0xcf,
+ 0x46, 0x27, 0x07, 0x46, 0xce, 0x6e, 0x7a, 0xe5, 0x3d, 0xa6, 0x40, 0x0a, 0xba, 0x9b, 0x5e, 0xe1,
+ 0x4f, 0x29, 0x36, 0x7b, 0xb1, 0xf0, 0x46, 0x40, 0x2c, 0xd8, 0x6b, 0xfd, 0xa8, 0x1e, 0x29, 0xae,
+ 0x94, 0xb7, 0x9e, 0xd5, 0xdf, 0xef, 0x06, 0xed, 0xfd, 0xdb, 0xe3, 0x92, 0xcf, 0x58, 0x55, 0xa9,
+ 0x6f, 0xad, 0xfa, 0x17, 0x9c, 0x94, 0x6c, 0x08, 0xbe, 0xb4, 0x7a, 0x37, 0x0c, 0x39, 0x1f, 0x48,
+ 0x6c, 0x44, 0xf6, 0xbb, 0x4d, 0xeb, 0xa8, 0x66, 0xfb, 0x93, 0x4d, 0x1b, 0x9d, 0x9c, 0x1d, 0x5e,
+ 0x4a, 0xea, 0x7e, 0xa8, 0xe9, 0x3e, 0xaa, 0x8e, 0x7d, 0xa3, 0xe9, 0x41, 0x0f, 0x52, 0xb9, 0xfa,
+ 0x2c, 0x7a, 0xf3, 0x80, 0xcf, 0x27, 0x2c, 0x4f, 0x06, 0xdf, 0xf3, 0x6f, 0xf0, 0xf2, 0xf9, 0xb0,
+ 0xfe, 0xb3, 0x31, 0x7a, 0x83, 0x12, 0xdb, 0x3b, 0x88, 0xbb, 0xec, 0x6c, 0x39, 0x9f, 0x88, 0x58,
+ 0x80, 0x3b, 0x88, 0xf2, 0xef, 0xc3, 0x5a, 0x40, 0xdc, 0x41, 0xf4, 0x00, 0x60, 0x6f, 0x5a, 0x32,
+ 0x86, 0xda, 0xab, 0x05, 0x41, 0x7b, 0x0a, 0xb0, 0x59, 0x84, 0xb1, 0x57, 0x27, 0xea, 0xf0, 0xce,
+ 0xa0, 0xd5, 0x91, 0x52, 0x22, 0x8b, 0x68, 0x53, 0x36, 0xb8, 0x9b, 0xea, 0xcb, 0xef, 0xe6, 0x2c,
+ 0x17, 0x8b, 0xb8, 0x5c, 0x81, 0xe0, 0x56, 0xb5, 0x74, 0x00, 0x22, 0xb8, 0x51, 0xd0, 0x8e, 0x5a,
+ 0xdd, 0xcc, 0xb3, 0xcb, 0x7d, 0x5e, 0xf2, 0xa5, 0x48, 0x73, 0x06, 0xbf, 0x9d, 0x62, 0x1a, 0xd4,
+ 0x65, 0x88, 0x51, 0x4b, 0xb1, 0x36, 0xcb, 0x95, 0x44, 0x73, 0x9d, 0x51, 0x7e, 0x6c, 0xbe, 0x12,
+ 0xbc, 0x84, 0x8f, 0x33, 0x1b, 0x2b, 0x10, 0x22, 0xb2, 0x5c, 0x12, 0x06, 0x7d, 0x7f, 0x9c, 0xe6,
+ 0x73, 0xb4, 0xef, 0x8f, 0xdd, 0xef, 0x17, 0xdf, 0xa2, 0x01, 0x3b, 0xa0, 0x9a, 0x46, 0x6b, 0x06,
+ 0x80, 0x7a, 0x69, 0x18, 0x6d, 0x74, 0x97, 0x20, 0x06, 0x14, 0x4e, 0x02, 0x57, 0x5f, 0x14, 0x2c,
+ 0x67, 0x89, 0xbe, 0xb4, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0xb9, 0x48, 0xca, 0x4f,
+ 0x96, 0xf9, 0x71, 0xc9, 0xcf, 0xd3, 0x8c, 0x95, 0x60, 0x2e, 0x6a, 0xd4, 0x1d, 0x39, 0x31, 0x17,
+ 0x61, 0x9c, 0xbd, 0xfd, 0x21, 0xa5, 0xde, 0x2f, 0x26, 0x4c, 0xcb, 0x78, 0x06, 0x6f, 0x7f, 0x34,
+ 0x36, 0xda, 0x18, 0x71, 0x32, 0x18, 0xc0, 0x9d, 0x44, 0xa7, 0x71, 0x9d, 0xaf, 0x64, 0x7c, 0xa8,
+ 0x97, 0x56, 0xe5, 0x57, 0x7d, 0x2b, 0x90, 0xe8, 0x28, 0x73, 0x18, 0x49, 0x24, 0x3a, 0x61, 0x0d,
+ 0xbb, 0x94, 0x48, 0xee, 0x48, 0xdd, 0x6a, 0x02, 0x4b, 0x49, 0x63, 0x43, 0x0b, 0x89, 0xa5, 0xa4,
+ 0x05, 0x81, 0x09, 0x49, 0x0f, 0x83, 0x39, 0x3a, 0x21, 0x19, 0x69, 0x70, 0x42, 0x72, 0x29, 0x3b,
+ 0x51, 0x8c, 0xf3, 0x54, 0xa4, 0x71, 0x36, 0x61, 0xe2, 0x38, 0x2e, 0xe3, 0x05, 0x13, 0xac, 0x84,
+ 0x13, 0x85, 0x42, 0x86, 0x1e, 0x43, 0x4c, 0x14, 0x14, 0xab, 0x1c, 0xfe, 0x6e, 0xf4, 0x76, 0xbd,
+ 0xee, 0xb3, 0x5c, 0xfd, 0xd6, 0xd3, 0x73, 0xf9, 0x23, 0x71, 0x83, 0x77, 0x8c, 0x8d, 0x89, 0x28,
+ 0x59, 0xbc, 0xd0, 0xb6, 0xdf, 0x32, 0x7f, 0x97, 0xe0, 0xe3, 0xb5, 0x3a, 0x9e, 0x8f, 0xb8, 0x48,
+ 0xcf, 0xeb, 0x6d, 0xb6, 0x7a, 0x81, 0x09, 0xc4, 0xb3, 0x2b, 0x1e, 0x06, 0x3e, 0x7a, 0x82, 0x71,
+ 0x76, 0x9e, 0x76, 0xa5, 0x27, 0xac, 0xc8, 0xe0, 0x3c, 0xed, 0x69, 0x4b, 0x80, 0x98, 0xa7, 0x51,
+ 0xd0, 0x0e, 0x4e, 0x57, 0x3c, 0x65, 0xe1, 0xca, 0x4c, 0x59, 0xbf, 0xca, 0x4c, 0xbd, 0x77, 0x42,
+ 0xb2, 0xe8, 0xed, 0x43, 0xb6, 0x38, 0x63, 0x65, 0x75, 0x91, 0x16, 0xd4, 0x97, 0x87, 0x2d, 0xd1,
+ 0xf9, 0xe5, 0x61, 0x02, 0xb5, 0x2b, 0x81, 0x05, 0xc6, 0xd5, 0x51, 0xbc, 0x60, 0xf2, 0x13, 0x2e,
+ 0x60, 0x25, 0x70, 0x8c, 0x38, 0x10, 0xb1, 0x12, 0x90, 0xb0, 0xf3, 0x7a, 0x99, 0x65, 0x4e, 0xd8,
+ 0xbc, 0x8e, 0xb0, 0xf2, 0x38, 0x5e, 0x2d, 0x58, 0x2e, 0x94, 0x49, 0x70, 0x26, 0xef, 0x98, 0xc4,
+ 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x33, 0x35, 0x79, 0x0d, 0x7f, 0xcc, 0x4b, 0xd1, 0xfc, 0x92,
+ 0xdb, 0x69, 0x99, 0x81, 0xa9, 0xc9, 0x6f, 0x54, 0x8f, 0x24, 0xa6, 0xa6, 0xb0, 0x86, 0xf3, 0xab,
+ 0x1d, 0x5e, 0x19, 0x5e, 0xb0, 0xd2, 0xc4, 0xc9, 0xf3, 0x45, 0x9c, 0x66, 0x2a, 0x1a, 0xbe, 0x1f,
+ 0xb0, 0x4d, 0xe8, 0x10, 0xbf, 0xda, 0xd1, 0x57, 0xd7, 0xf9, 0x9d, 0x93, 0x70, 0x09, 0xc1, 0x23,
+ 0x82, 0x0e, 0xfb, 0xc4, 0x23, 0x82, 0x6e, 0x2d, 0xbb, 0x73, 0xb7, 0xac, 0xe4, 0x56, 0x92, 0xd8,
+ 0xe1, 0x09, 0x3c, 0x2f, 0x74, 0x6c, 0x02, 0x90, 0xd8, 0xb9, 0x07, 0x15, 0x6c, 0x6a, 0x60, 0xb1,
+ 0xbd, 0x34, 0x8f, 0xb3, 0xf4, 0xc7, 0x30, 0xad, 0x77, 0xec, 0x68, 0x82, 0x48, 0x0d, 0x70, 0x12,
+ 0x73, 0xb5, 0xcf, 0xc4, 0x34, 0xad, 0xa7, 0xfe, 0xfb, 0x81, 0x76, 0x93, 0x44, 0xb7, 0x2b, 0x87,
+ 0x74, 0xbe, 0x32, 0x0c, 0x9b, 0x75, 0x54, 0x14, 0x93, 0x7a, 0x55, 0x3d, 0x61, 0x33, 0x96, 0x16,
+ 0x62, 0xf0, 0x51, 0xb8, 0xad, 0x00, 0x4e, 0x5c, 0xb4, 0xe8, 0xa1, 0xe6, 0x3c, 0xbe, 0xaf, 0xe7,
+ 0x92, 0x49, 0xf3, 0x13, 0xa7, 0xa7, 0x15, 0x2b, 0x55, 0xa2, 0xb1, 0xcf, 0x04, 0x18, 0x9d, 0x0e,
+ 0x37, 0x74, 0xc0, 0xba, 0xa2, 0xc4, 0xe8, 0x0c, 0x6b, 0xd8, 0xc3, 0x3e, 0x87, 0x53, 0x5f, 0x8d,
+ 0x97, 0xd7, 0x1d, 0x1f, 0x91, 0xc6, 0x1c, 0x8a, 0x38, 0xec, 0xa3, 0x69, 0x9b, 0xad, 0xb5, 0xdd,
+ 0x8e, 0xf2, 0xd5, 0x18, 0x5e, 0x99, 0x40, 0x2c, 0x49, 0x8c, 0xc8, 0xd6, 0x02, 0xb8, 0x73, 0x18,
+ 0x5e, 0xf2, 0x38, 0x99, 0xc5, 0x95, 0x38, 0x8e, 0x57, 0x19, 0x8f, 0x13, 0xb9, 0xae, 0xc3, 0xc3,
+ 0x70, 0xcd, 0x0c, 0x5d, 0x88, 0x3a, 0x0c, 0xa7, 0x60, 0x37, 0x3b, 0x93, 0xbf, 0xdc, 0xaa, 0xae,
+ 0x92, 0xc2, 0xec, 0x4c, 0x96, 0x17, 0x5e, 0x23, 0xbd, 0x1b, 0x86, 0xec, 0x2b, 0x70, 0x8d, 0x48,
+ 0xa6, 0x21, 0xb7, 0x30, 0x1d, 0x2f, 0x01, 0x79, 0x3f, 0x40, 0xd8, 0x0f, 0xa0, 0x34, 0x7f, 0xd7,
+ 0x3f, 0xd6, 0x25, 0xd4, 0xb7, 0xd8, 0x1f, 0x61, 0xba, 0x2e, 0xe4, 0xdd, 0x50, 0xdb, 0xea, 0x49,
+ 0xdb, 0x34, 0x73, 0xe7, 0x22, 0x16, 0xa3, 0x24, 0x39, 0x64, 0x15, 0xf2, 0x3e, 0x7b, 0x2d, 0x1c,
+ 0x5a, 0x29, 0x91, 0x66, 0xb6, 0x29, 0x1b, 0xe8, 0xb5, 0xec, 0x79, 0x92, 0x0a, 0x25, 0xd3, 0x17,
+ 0xb4, 0x1f, 0xb5, 0x0d, 0xb4, 0x29, 0xa2, 0x56, 0x34, 0x6d, 0xe7, 0xf2, 0x9a, 0x99, 0xf2, 0xf9,
+ 0x3c, 0x63, 0x0a, 0x3a, 0x61, 0x71, 0xf3, 0x29, 0xca, 0xed, 0xb6, 0x2d, 0x14, 0x24, 0xe6, 0xf2,
+ 0xa0, 0x82, 0x4d, 0x23, 0x6b, 0xac, 0x79, 0x24, 0xa5, 0x1b, 0x76, 0xa3, 0x6d, 0xc6, 0x03, 0x88,
+ 0x34, 0x12, 0x05, 0xed, 0x6b, 0x77, 0xb5, 0x78, 0x9f, 0xe9, 0x96, 0x80, 0xdf, 0xba, 0x92, 0xca,
+ 0x8e, 0x98, 0x78, 0xed, 0x0e, 0xc1, 0xec, 0x3e, 0x01, 0x78, 0x78, 0xb6, 0x1a, 0x27, 0x70, 0x9f,
+ 0x00, 0xf5, 0x25, 0x43, 0xec, 0x13, 0x28, 0xd6, 0xef, 0x3a, 0x73, 0xee, 0x75, 0x10, 0x57, 0xb6,
+ 0x72, 0x48, 0xd7, 0xa1, 0x60, 0xa8, 0xeb, 0x28, 0x05, 0xbf, 0x49, 0xdd, 0xa3, 0x35, 0xa4, 0x49,
+ 0xb1, 0x73, 0xb5, 0xf5, 0x2e, 0xcc, 0xe6, 0xfe, 0xb5, 0xf0, 0x84, 0xc5, 0x89, 0xa9, 0x18, 0xa2,
+ 0xeb, 0xca, 0x89, 0xdc, 0x1f, 0xe3, 0x94, 0x93, 0x3f, 0x88, 0x06, 0x4d, 0x35, 0x4a, 0xd7, 0xcd,
+ 0x2d, 0xac, 0x88, 0x35, 0x41, 0x4c, 0x54, 0x3e, 0xe1, 0x24, 0x6e, 0x5e, 0x17, 0x4d, 0xb9, 0x72,
+ 0xa0, 0x5e, 0x0b, 0xad, 0x40, 0xe2, 0xe6, 0x37, 0x7b, 0x8b, 0x26, 0x12, 0xb7, 0x6e, 0x2d, 0xe7,
+ 0xb3, 0x3f, 0xa0, 0xcb, 0xf6, 0x4a, 0xbe, 0x80, 0x65, 0xfa, 0x34, 0xd8, 0x3d, 0x88, 0x06, 0xf1,
+ 0xd9, 0x9f, 0x7e, 0x9a, 0x76, 0x0d, 0x32, 0x67, 0x07, 0xf2, 0x7a, 0x1a, 0xfe, 0x7b, 0x23, 0x8d,
+ 0x90, 0x58, 0x83, 0x5a, 0x90, 0xf3, 0x23, 0xa5, 0xe3, 0x97, 0x65, 0x2a, 0xd2, 0x7c, 0x3e, 0xe5,
+ 0x3c, 0x83, 0x47, 0x96, 0xa3, 0xf1, 0xd0, 0x95, 0x52, 0x3f, 0x52, 0xda, 0xa2, 0xec, 0x12, 0x37,
+ 0x1a, 0x8f, 0x96, 0x82, 0x9f, 0xa7, 0x59, 0x06, 0x22, 0x67, 0x34, 0x1e, 0x6a, 0x09, 0x11, 0x39,
+ 0x3e, 0xe1, 0xfc, 0xb4, 0xe6, 0x58, 0x9e, 0xfe, 0xab, 0x13, 0xd0, 0x3b, 0x50, 0xc7, 0x11, 0x52,
+ 0x3f, 0xad, 0x09, 0x21, 0xe7, 0xa7, 0x42, 0xc7, 0xd8, 0x8f, 0xa6, 0x6c, 0x42, 0x75, 0x04, 0xa2,
+ 0x7e, 0x2a, 0x94, 0x82, 0x1b, 0x9f, 0xcf, 0xde, 0xff, 0x9f, 0xaf, 0x6e, 0xac, 0xfd, 0xf4, 0xab,
+ 0x1b, 0x6b, 0xff, 0xfb, 0xd5, 0x8d, 0xb5, 0x9f, 0x7c, 0x7d, 0xe3, 0x8d, 0x9f, 0x7e, 0x7d, 0xe3,
+ 0x8d, 0x9f, 0x7d, 0x7d, 0xe3, 0x8d, 0x2f, 0xdf, 0x54, 0xbf, 0x9f, 0x7f, 0xf6, 0x0b, 0xf2, 0x57,
+ 0xf0, 0x9f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x64, 0x71, 0xe6, 0xb7, 0x63, 0x7f, 0x00,
+ 0x00,
}
// This is a compile-time assertion to ensure that this generated file
@@ -429,6 +438,7 @@ type ClientCommandsHandler interface {
SpaceDelete(context.Context, *pb.RpcSpaceDeleteRequest) *pb.RpcSpaceDeleteResponse
SpaceInviteGenerate(context.Context, *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse
SpaceInviteGetCurrent(context.Context, *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse
+ SpaceInviteGetGuest(context.Context, *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse
SpaceInviteRevoke(context.Context, *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse
SpaceInviteView(context.Context, *pb.RpcSpaceInviteViewRequest) *pb.RpcSpaceInviteViewResponse
SpaceJoin(context.Context, *pb.RpcSpaceJoinRequest) *pb.RpcSpaceJoinResponse
@@ -608,6 +618,7 @@ type ClientCommandsHandler interface {
BlockDataviewViewSetActive(context.Context, *pb.RpcBlockDataviewViewSetActiveRequest) *pb.RpcBlockDataviewViewSetActiveResponse
BlockDataviewViewSetPosition(context.Context, *pb.RpcBlockDataviewViewSetPositionRequest) *pb.RpcBlockDataviewViewSetPositionResponse
BlockDataviewSetSource(context.Context, *pb.RpcBlockDataviewSetSourceRequest) *pb.RpcBlockDataviewSetSourceResponse
+ BlockDataviewRelationSet(context.Context, *pb.RpcBlockDataviewRelationSetRequest) *pb.RpcBlockDataviewRelationSetResponse
BlockDataviewRelationAdd(context.Context, *pb.RpcBlockDataviewRelationAddRequest) *pb.RpcBlockDataviewRelationAddResponse
BlockDataviewRelationDelete(context.Context, *pb.RpcBlockDataviewRelationDeleteRequest) *pb.RpcBlockDataviewRelationDeleteResponse
BlockDataviewGroupOrderUpdate(context.Context, *pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse
@@ -731,7 +742,13 @@ type ClientCommandsHandler interface {
ChatReadMessages(context.Context, *pb.RpcChatReadMessagesRequest) *pb.RpcChatReadMessagesResponse
ChatUnreadMessages(context.Context, *pb.RpcChatUnreadRequest) *pb.RpcChatUnreadResponse
ChatSubscribeToMessagePreviews(context.Context, *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse
+ ChatUnsubscribeFromMessagePreviews(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse
ObjectChatAdd(context.Context, *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse
+ // mock AI RPCs for compatibility between branches. Not implemented in main
+ AIWritingTools(context.Context, *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse
+ AIAutofill(context.Context, *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse
+ AIListSummary(context.Context, *pb.RpcAIListSummaryRequest) *pb.RpcAIListSummaryResponse
+ AIObjectCreateFromUrl(context.Context, *pb.RpcAIObjectCreateFromUrlRequest) *pb.RpcAIObjectCreateFromUrlResponse
}
func registerClientCommandsHandler(srv ClientCommandsHandler) {
@@ -1478,6 +1495,26 @@ func SpaceInviteGetCurrent(b []byte) (resp []byte) {
return resp
}
+func SpaceInviteGetGuest(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcSpaceInviteGetGuestResponse{Error: &pb.RpcSpaceInviteGetGuestResponseError{Code: pb.RpcSpaceInviteGetGuestResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcSpaceInviteGetGuestRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcSpaceInviteGetGuestResponse{Error: &pb.RpcSpaceInviteGetGuestResponseError{Code: pb.RpcSpaceInviteGetGuestResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.SpaceInviteGetGuest(context.Background(), in).Marshal()
+ return resp
+}
+
func SpaceInviteRevoke(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
@@ -4498,6 +4535,26 @@ func BlockDataviewSetSource(b []byte) (resp []byte) {
return resp
}
+func BlockDataviewRelationSet(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcBlockDataviewRelationSetResponse{Error: &pb.RpcBlockDataviewRelationSetResponseError{Code: pb.RpcBlockDataviewRelationSetResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcBlockDataviewRelationSetRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcBlockDataviewRelationSetResponse{Error: &pb.RpcBlockDataviewRelationSetResponseError{Code: pb.RpcBlockDataviewRelationSetResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.BlockDataviewRelationSet(context.Background(), in).Marshal()
+ return resp
+}
+
func BlockDataviewRelationAdd(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
@@ -6398,6 +6455,26 @@ func ChatSubscribeToMessagePreviews(b []byte) (resp []byte) {
return resp
}
+func ChatUnsubscribeFromMessagePreviews(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcChatUnsubscribeFromMessagePreviewsResponse{Error: &pb.RpcChatUnsubscribeFromMessagePreviewsResponseError{Code: pb.RpcChatUnsubscribeFromMessagePreviewsResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcChatUnsubscribeFromMessagePreviewsRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcChatUnsubscribeFromMessagePreviewsResponse{Error: &pb.RpcChatUnsubscribeFromMessagePreviewsResponseError{Code: pb.RpcChatUnsubscribeFromMessagePreviewsResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.ChatUnsubscribeFromMessagePreviews(context.Background(), in).Marshal()
+ return resp
+}
+
func ObjectChatAdd(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
@@ -6418,6 +6495,86 @@ func ObjectChatAdd(b []byte) (resp []byte) {
return resp
}
+func AIWritingTools(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcAIWritingToolsResponse{Error: &pb.RpcAIWritingToolsResponseError{Code: pb.RpcAIWritingToolsResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcAIWritingToolsRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcAIWritingToolsResponse{Error: &pb.RpcAIWritingToolsResponseError{Code: pb.RpcAIWritingToolsResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.AIWritingTools(context.Background(), in).Marshal()
+ return resp
+}
+
+func AIAutofill(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcAIAutofillResponse{Error: &pb.RpcAIAutofillResponseError{Code: pb.RpcAIAutofillResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcAIAutofillRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcAIAutofillResponse{Error: &pb.RpcAIAutofillResponseError{Code: pb.RpcAIAutofillResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.AIAutofill(context.Background(), in).Marshal()
+ return resp
+}
+
+func AIListSummary(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcAIListSummaryResponse{Error: &pb.RpcAIListSummaryResponseError{Code: pb.RpcAIListSummaryResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcAIListSummaryRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcAIListSummaryResponse{Error: &pb.RpcAIListSummaryResponseError{Code: pb.RpcAIListSummaryResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.AIListSummary(context.Background(), in).Marshal()
+ return resp
+}
+
+func AIObjectCreateFromUrl(b []byte) (resp []byte) {
+ defer func() {
+ if PanicHandler != nil {
+ if r := recover(); r != nil {
+ resp, _ = (&pb.RpcAIObjectCreateFromUrlResponse{Error: &pb.RpcAIObjectCreateFromUrlResponseError{Code: pb.RpcAIObjectCreateFromUrlResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
+ PanicHandler(r)
+ }
+ }
+ }()
+
+ in := new(pb.RpcAIObjectCreateFromUrlRequest)
+ if err := in.Unmarshal(b); err != nil {
+ resp, _ = (&pb.RpcAIObjectCreateFromUrlResponse{Error: &pb.RpcAIObjectCreateFromUrlResponseError{Code: pb.RpcAIObjectCreateFromUrlResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
+ return resp
+ }
+
+ resp, _ = clientCommandsHandler.AIObjectCreateFromUrl(context.Background(), in).Marshal()
+ return resp
+}
+
var PanicHandler func(v interface{})
func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
@@ -6498,6 +6655,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = SpaceInviteGenerate(data)
case "SpaceInviteGetCurrent":
cd = SpaceInviteGetCurrent(data)
+ case "SpaceInviteGetGuest":
+ cd = SpaceInviteGetGuest(data)
case "SpaceInviteRevoke":
cd = SpaceInviteRevoke(data)
case "SpaceInviteView":
@@ -6800,6 +6959,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = BlockDataviewViewSetPosition(data)
case "BlockDataviewSetSource":
cd = BlockDataviewSetSource(data)
+ case "BlockDataviewRelationSet":
+ cd = BlockDataviewRelationSet(data)
case "BlockDataviewRelationAdd":
cd = BlockDataviewRelationAdd(data)
case "BlockDataviewRelationDelete":
@@ -6990,8 +7151,18 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = ChatUnreadMessages(data)
case "ChatSubscribeToMessagePreviews":
cd = ChatSubscribeToMessagePreviews(data)
+ case "ChatUnsubscribeFromMessagePreviews":
+ cd = ChatUnsubscribeFromMessagePreviews(data)
case "ObjectChatAdd":
cd = ObjectChatAdd(data)
+ case "AIWritingTools":
+ cd = AIWritingTools(data)
+ case "AIAutofill":
+ cd = AIAutofill(data)
+ case "AIListSummary":
+ cd = AIListSummary(data)
+ case "AIObjectCreateFromUrl":
+ cd = AIObjectCreateFromUrl(data)
default:
log.Errorf("unknown command type: %s\n", cmd)
}
@@ -7532,6 +7703,20 @@ func (h *ClientCommandsHandlerProxy) SpaceInviteGetCurrent(ctx context.Context,
call, _ := actualCall(ctx, req)
return call.(*pb.RpcSpaceInviteGetCurrentResponse)
}
+func (h *ClientCommandsHandlerProxy) SpaceInviteGetGuest(ctx context.Context, req *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.SpaceInviteGetGuest(ctx, req.(*pb.RpcSpaceInviteGetGuestRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "SpaceInviteGetGuest", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcSpaceInviteGetGuestResponse)
+}
func (h *ClientCommandsHandlerProxy) SpaceInviteRevoke(ctx context.Context, req *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse {
actualCall := func(ctx context.Context, req any) (any, error) {
return h.client.SpaceInviteRevoke(ctx, req.(*pb.RpcSpaceInviteRevokeRequest)), nil
@@ -9646,6 +9831,20 @@ func (h *ClientCommandsHandlerProxy) BlockDataviewSetSource(ctx context.Context,
call, _ := actualCall(ctx, req)
return call.(*pb.RpcBlockDataviewSetSourceResponse)
}
+func (h *ClientCommandsHandlerProxy) BlockDataviewRelationSet(ctx context.Context, req *pb.RpcBlockDataviewRelationSetRequest) *pb.RpcBlockDataviewRelationSetResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.BlockDataviewRelationSet(ctx, req.(*pb.RpcBlockDataviewRelationSetRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "BlockDataviewRelationSet", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcBlockDataviewRelationSetResponse)
+}
func (h *ClientCommandsHandlerProxy) BlockDataviewRelationAdd(ctx context.Context, req *pb.RpcBlockDataviewRelationAddRequest) *pb.RpcBlockDataviewRelationAddResponse {
actualCall := func(ctx context.Context, req any) (any, error) {
return h.client.BlockDataviewRelationAdd(ctx, req.(*pb.RpcBlockDataviewRelationAddRequest)), nil
@@ -10976,6 +11175,20 @@ func (h *ClientCommandsHandlerProxy) ChatSubscribeToMessagePreviews(ctx context.
call, _ := actualCall(ctx, req)
return call.(*pb.RpcChatSubscribeToMessagePreviewsResponse)
}
+func (h *ClientCommandsHandlerProxy) ChatUnsubscribeFromMessagePreviews(ctx context.Context, req *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.ChatUnsubscribeFromMessagePreviews(ctx, req.(*pb.RpcChatUnsubscribeFromMessagePreviewsRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "ChatUnsubscribeFromMessagePreviews", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcChatUnsubscribeFromMessagePreviewsResponse)
+}
func (h *ClientCommandsHandlerProxy) ObjectChatAdd(ctx context.Context, req *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse {
actualCall := func(ctx context.Context, req any) (any, error) {
return h.client.ObjectChatAdd(ctx, req.(*pb.RpcObjectChatAddRequest)), nil
@@ -10990,3 +11203,59 @@ func (h *ClientCommandsHandlerProxy) ObjectChatAdd(ctx context.Context, req *pb.
call, _ := actualCall(ctx, req)
return call.(*pb.RpcObjectChatAddResponse)
}
+func (h *ClientCommandsHandlerProxy) AIWritingTools(ctx context.Context, req *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.AIWritingTools(ctx, req.(*pb.RpcAIWritingToolsRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "AIWritingTools", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcAIWritingToolsResponse)
+}
+func (h *ClientCommandsHandlerProxy) AIAutofill(ctx context.Context, req *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.AIAutofill(ctx, req.(*pb.RpcAIAutofillRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "AIAutofill", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcAIAutofillResponse)
+}
+func (h *ClientCommandsHandlerProxy) AIListSummary(ctx context.Context, req *pb.RpcAIListSummaryRequest) *pb.RpcAIListSummaryResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.AIListSummary(ctx, req.(*pb.RpcAIListSummaryRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "AIListSummary", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcAIListSummaryResponse)
+}
+func (h *ClientCommandsHandlerProxy) AIObjectCreateFromUrl(ctx context.Context, req *pb.RpcAIObjectCreateFromUrlRequest) *pb.RpcAIObjectCreateFromUrlResponse {
+ actualCall := func(ctx context.Context, req any) (any, error) {
+ return h.client.AIObjectCreateFromUrl(ctx, req.(*pb.RpcAIObjectCreateFromUrlRequest)), nil
+ }
+ for _, interceptor := range h.interceptors {
+ toCall := actualCall
+ currentInterceptor := interceptor
+ actualCall = func(ctx context.Context, req any) (any, error) {
+ return currentInterceptor(ctx, req, "AIObjectCreateFromUrl", toCall)
+ }
+ }
+ call, _ := actualCall(ctx, req)
+ return call.(*pb.RpcAIObjectCreateFromUrlResponse)
+}
diff --git a/pb/service/service.pb.go b/pb/service/service.pb.go
index de05a45aa..1727ae8d0 100644
--- a/pb/service/service.pb.go
+++ b/pb/service/service.pb.go
@@ -26,356 +26,365 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
- // 5583 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0x5b, 0x8f, 0x1c, 0x49,
- 0x56, 0xf8, 0xa7, 0x5e, 0xfe, 0xf3, 0x27, 0x97, 0x1d, 0xa0, 0x06, 0x86, 0xd9, 0x61, 0xd7, 0xf6,
- 0x78, 0xec, 0x6e, 0xdb, 0xed, 0xae, 0xf6, 0xd8, 0x73, 0x63, 0x17, 0x09, 0xca, 0xdd, 0x76, 0x4f,
- 0xef, 0x76, 0xf7, 0x34, 0x5d, 0xd5, 0xb6, 0x18, 0x09, 0x89, 0xec, 0xca, 0xe8, 0xea, 0xa4, 0xb3,
- 0x32, 0x72, 0x33, 0xa3, 0xca, 0xae, 0x45, 0x20, 0x10, 0x08, 0x04, 0x02, 0xb1, 0xe2, 0x26, 0x78,
- 0x42, 0xe2, 0x13, 0xf0, 0x31, 0x78, 0x41, 0xda, 0x47, 0x1e, 0xd1, 0xcc, 0x87, 0xe0, 0x15, 0x65,
- 0x44, 0x64, 0x5c, 0x4e, 0x9e, 0x13, 0x99, 0x3d, 0x3c, 0xd9, 0xea, 0xf3, 0x3b, 0xe7, 0xc4, 0xe5,
- 0x44, 0xc4, 0x89, 0xc8, 0xc8, 0xac, 0xe8, 0x66, 0x71, 0xbe, 0x53, 0x94, 0x5c, 0xf0, 0x6a, 0xa7,
- 0x62, 0xe5, 0x2a, 0x9d, 0xb1, 0xe6, 0xdf, 0x91, 0xfc, 0xf3, 0xf0, 0xcd, 0x38, 0x5f, 0x8b, 0x75,
- 0xc1, 0xde, 0x7b, 0xd7, 0x92, 0x33, 0xbe, 0x58, 0xc4, 0x79, 0x52, 0x29, 0xe4, 0xbd, 0x77, 0xac,
- 0x84, 0xad, 0x58, 0x2e, 0xf4, 0xdf, 0x1f, 0xff, 0xe7, 0xff, 0x0c, 0xa2, 0xb7, 0x76, 0xb3, 0x94,
- 0xe5, 0x62, 0x57, 0x6b, 0x0c, 0xbf, 0x8c, 0xbe, 0x3d, 0x2e, 0x8a, 0x7d, 0x26, 0x5e, 0xb0, 0xb2,
- 0x4a, 0x79, 0x3e, 0xfc, 0x60, 0xa4, 0x1d, 0x8c, 0x4e, 0x8b, 0xd9, 0x68, 0x5c, 0x14, 0x23, 0x2b,
- 0x1c, 0x9d, 0xb2, 0x1f, 0x2f, 0x59, 0x25, 0xde, 0xbb, 0x13, 0x86, 0xaa, 0x82, 0xe7, 0x15, 0x1b,
- 0x5e, 0x44, 0xbf, 0x34, 0x2e, 0x8a, 0x09, 0x13, 0x7b, 0xac, 0xae, 0xc0, 0x44, 0xc4, 0x82, 0x0d,
- 0x37, 0x5b, 0xaa, 0x3e, 0x60, 0x7c, 0xdc, 0xeb, 0x06, 0xb5, 0x9f, 0x69, 0xf4, 0xad, 0xda, 0xcf,
- 0xe5, 0x52, 0x24, 0xfc, 0x55, 0x3e, 0x7c, 0xbf, 0xad, 0xa8, 0x45, 0xc6, 0xf6, 0xed, 0x10, 0xa2,
- 0xad, 0xbe, 0x8c, 0x7e, 0xfe, 0x65, 0x9c, 0x65, 0x4c, 0xec, 0x96, 0xac, 0x2e, 0xb8, 0xaf, 0xa3,
- 0x44, 0x23, 0x25, 0x33, 0x76, 0x3f, 0x08, 0x32, 0xda, 0xf0, 0x97, 0xd1, 0xb7, 0x95, 0xe4, 0x94,
- 0xcd, 0xf8, 0x8a, 0x95, 0x43, 0x54, 0x4b, 0x0b, 0x89, 0x26, 0x6f, 0x41, 0xd0, 0xf6, 0x2e, 0xcf,
- 0x57, 0xac, 0x14, 0xb8, 0x6d, 0x2d, 0x0c, 0xdb, 0xb6, 0x90, 0xb6, 0xfd, 0x97, 0x83, 0xe8, 0xbb,
- 0xe3, 0xd9, 0x8c, 0x2f, 0x73, 0x71, 0xc8, 0x67, 0x71, 0x76, 0x98, 0xe6, 0x57, 0xc7, 0xec, 0xd5,
- 0xee, 0x65, 0xcd, 0xe7, 0x73, 0x36, 0x7c, 0xe2, 0xb7, 0xaa, 0x42, 0x47, 0x86, 0x1d, 0xb9, 0xb0,
- 0xf1, 0xfd, 0xd1, 0xf5, 0x94, 0x74, 0x59, 0xfe, 0x76, 0x10, 0xdd, 0x80, 0x65, 0x99, 0xf0, 0x6c,
- 0xc5, 0x6c, 0x69, 0x3e, 0xee, 0x30, 0xec, 0xe3, 0xa6, 0x3c, 0x9f, 0x5c, 0x57, 0x4d, 0x97, 0x28,
- 0x8b, 0xde, 0x76, 0xc3, 0x65, 0xc2, 0x2a, 0x39, 0x9c, 0xee, 0xd3, 0x11, 0xa1, 0x11, 0xe3, 0xf9,
- 0x41, 0x1f, 0x54, 0x7b, 0x4b, 0xa3, 0xa1, 0xf6, 0x96, 0xf1, 0xca, 0x38, 0xbb, 0x87, 0x5a, 0x70,
- 0x08, 0xe3, 0xeb, 0x7e, 0x0f, 0x52, 0xbb, 0xfa, 0xbd, 0xe8, 0x17, 0x5e, 0xf2, 0xf2, 0xaa, 0x2a,
- 0xe2, 0x19, 0xd3, 0x43, 0xe1, 0xae, 0xaf, 0xdd, 0x48, 0xe1, 0x68, 0xd8, 0xe8, 0xc2, 0x9c, 0xa0,
- 0x6d, 0x84, 0x5f, 0x14, 0x0c, 0xce, 0x41, 0x56, 0xb1, 0x16, 0x52, 0x41, 0x0b, 0x21, 0x6d, 0xfb,
- 0x2a, 0x1a, 0x5a, 0xdb, 0xe7, 0xbf, 0xcf, 0x66, 0x62, 0x9c, 0x24, 0xb0, 0x57, 0xac, 0xae, 0x24,
- 0x46, 0xe3, 0x24, 0xa1, 0x7a, 0x05, 0x47, 0xb5, 0xb3, 0x57, 0xd1, 0x3b, 0xc0, 0xd9, 0x61, 0x5a,
- 0x49, 0x87, 0xdb, 0x61, 0x2b, 0x1a, 0x33, 0x4e, 0x47, 0x7d, 0x71, 0xed, 0xf8, 0x8f, 0x07, 0xd1,
- 0x77, 0x10, 0xcf, 0xa7, 0x6c, 0xc1, 0x57, 0x6c, 0xf8, 0xa8, 0xdb, 0x9a, 0x22, 0x8d, 0xff, 0x0f,
- 0xaf, 0xa1, 0x81, 0x84, 0xc9, 0x84, 0x65, 0x6c, 0x26, 0xc8, 0x30, 0x51, 0xe2, 0xce, 0x30, 0x31,
- 0x98, 0x33, 0xc2, 0x1a, 0xe1, 0x3e, 0x13, 0xbb, 0xcb, 0xb2, 0x64, 0xb9, 0x20, 0xfb, 0xd2, 0x22,
- 0x9d, 0x7d, 0xe9, 0xa1, 0x48, 0x7d, 0xf6, 0x99, 0x18, 0x67, 0x19, 0x59, 0x1f, 0x25, 0xee, 0xac,
- 0x8f, 0xc1, 0xb4, 0x87, 0x59, 0xf4, 0x8b, 0x4e, 0x8b, 0x89, 0x83, 0xfc, 0x82, 0x0f, 0xe9, 0xb6,
- 0x90, 0x72, 0xe3, 0x63, 0xb3, 0x93, 0x43, 0xaa, 0xf1, 0xec, 0x75, 0xc1, 0x4b, 0xba, 0x5b, 0x94,
- 0xb8, 0xb3, 0x1a, 0x06, 0xd3, 0x1e, 0x7e, 0x37, 0x7a, 0x4b, 0xcf, 0x92, 0xcd, 0x7a, 0x76, 0x07,
- 0x9d, 0x42, 0xe1, 0x82, 0x76, 0xb7, 0x83, 0x6a, 0x99, 0x3f, 0x4a, 0xe7, 0x65, 0x3d, 0xfb, 0xe0,
- 0xe6, 0xb5, 0xb4, 0xc3, 0xbc, 0xa5, 0xb4, 0x79, 0x1e, 0xfd, 0xb2, 0x6f, 0x7e, 0x37, 0xce, 0x67,
- 0x2c, 0x1b, 0x3e, 0x08, 0xa9, 0x2b, 0xc6, 0xb8, 0xda, 0xea, 0xc5, 0xda, 0xc9, 0x4e, 0x13, 0x7a,
- 0x32, 0xfd, 0x00, 0xd5, 0x06, 0x53, 0xe9, 0x9d, 0x30, 0xd4, 0xb2, 0xbd, 0xc7, 0x32, 0x46, 0xda,
- 0x56, 0xc2, 0x0e, 0xdb, 0x06, 0xd2, 0xb6, 0xcb, 0xe8, 0x57, 0x4c, 0x37, 0xd7, 0x79, 0x81, 0x94,
- 0xd7, 0x8b, 0xce, 0x16, 0xd1, 0x8f, 0x2e, 0x64, 0x7c, 0x3d, 0xec, 0x07, 0xb7, 0xea, 0xa3, 0x67,
- 0x14, 0xbc, 0x3e, 0x60, 0x3e, 0xb9, 0x13, 0x86, 0xb4, 0xed, 0xbf, 0x1a, 0x44, 0xdf, 0xd3, 0xb2,
- 0x67, 0x79, 0x7c, 0x9e, 0x31, 0xb9, 0xc4, 0x1f, 0x33, 0xf1, 0x8a, 0x97, 0x57, 0x93, 0x75, 0x3e,
- 0x23, 0xd2, 0x19, 0x1c, 0xee, 0x48, 0x67, 0x48, 0x25, 0x5d, 0x98, 0x3f, 0x88, 0xde, 0x6d, 0x82,
- 0xe2, 0x32, 0xce, 0xe7, 0xec, 0x87, 0x15, 0xcf, 0xc7, 0x45, 0x3a, 0x4e, 0x92, 0x72, 0x38, 0xc2,
- 0xbb, 0x1e, 0x72, 0xa6, 0x04, 0x3b, 0xbd, 0x79, 0x27, 0x7d, 0xd6, 0xad, 0x2c, 0x78, 0x01, 0xd3,
- 0xe7, 0xa6, 0xf9, 0x04, 0x2f, 0xa8, 0xf4, 0xd9, 0x47, 0x5a, 0x56, 0x8f, 0xea, 0x35, 0x08, 0xb7,
- 0x7a, 0xe4, 0x2e, 0x3a, 0xb7, 0x43, 0x88, 0x5d, 0x03, 0x9a, 0x86, 0xe2, 0xf9, 0x45, 0x3a, 0x3f,
- 0x2b, 0x92, 0x7a, 0x0c, 0xdd, 0xc7, 0xeb, 0xec, 0x20, 0xc4, 0x1a, 0x40, 0xa0, 0xda, 0xdb, 0xdf,
- 0xd8, 0x2c, 0x53, 0xcf, 0x4b, 0xcf, 0x4b, 0xbe, 0x38, 0x64, 0xf3, 0x78, 0xb6, 0xd6, 0x93, 0xe9,
- 0x47, 0xa1, 0x59, 0x0c, 0xd2, 0xa6, 0x10, 0x1f, 0x5f, 0x53, 0x4b, 0x97, 0xe7, 0x5f, 0x07, 0xd1,
- 0x1d, 0x2f, 0x4e, 0x74, 0x30, 0xa9, 0xd2, 0x8f, 0xf3, 0xe4, 0x94, 0x55, 0x22, 0x2e, 0xc5, 0xf0,
- 0xfb, 0x81, 0x18, 0x20, 0x74, 0x4c, 0xd9, 0x7e, 0xf0, 0x8d, 0x74, 0x6d, 0xaf, 0x4f, 0xea, 0x55,
- 0x42, 0xcf, 0x3f, 0x7e, 0xaf, 0x4b, 0x09, 0x9c, 0x7d, 0x6e, 0x87, 0x10, 0xdb, 0xeb, 0x52, 0x70,
- 0x90, 0xaf, 0x52, 0xc1, 0xf6, 0x59, 0xce, 0xca, 0x76, 0xaf, 0x2b, 0x55, 0x1f, 0x21, 0x7a, 0x9d,
- 0x40, 0xed, 0x4c, 0xe7, 0x79, 0x33, 0x99, 0xc6, 0x56, 0xc0, 0x48, 0x2b, 0xd7, 0x78, 0xd8, 0x0f,
- 0xb6, 0x5b, 0x65, 0xc7, 0xe7, 0x29, 0x5b, 0xf1, 0x2b, 0xb8, 0x55, 0x76, 0x4d, 0x28, 0x80, 0xd8,
- 0x2a, 0xa3, 0xa0, 0x4d, 0x07, 0x1c, 0x3f, 0x2f, 0x52, 0xf6, 0x0a, 0xa4, 0x03, 0xae, 0x72, 0x2d,
- 0x26, 0xd2, 0x01, 0x04, 0xd3, 0x1e, 0x8e, 0xa3, 0x9f, 0x93, 0xc2, 0x1f, 0xf2, 0x34, 0x1f, 0xde,
- 0x44, 0x94, 0x6a, 0x81, 0xb1, 0x7a, 0x8b, 0x06, 0x40, 0x89, 0xeb, 0xbf, 0xea, 0xb5, 0xf9, 0x2e,
- 0xa1, 0x04, 0x96, 0xe5, 0x8d, 0x2e, 0xcc, 0xe6, 0x61, 0x52, 0x58, 0xcf, 0x5f, 0x93, 0xcb, 0xb8,
- 0x4c, 0xf3, 0xf9, 0x10, 0xd3, 0x75, 0xe4, 0x44, 0x1e, 0x86, 0x71, 0x20, 0x84, 0xb5, 0xe2, 0xb8,
- 0x28, 0xca, 0x7a, 0x5a, 0xc4, 0x42, 0xd8, 0x47, 0x82, 0x21, 0xdc, 0x42, 0x71, 0x6f, 0x7b, 0x6c,
- 0x96, 0xa5, 0x79, 0xd0, 0x9b, 0x46, 0xfa, 0x78, 0xb3, 0x28, 0x08, 0xde, 0x43, 0x16, 0xaf, 0x58,
- 0x53, 0x33, 0xac, 0x65, 0x5c, 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x9b, 0x5e, 0x29, 0x3e, 0x8a, 0xaf,
- 0x58, 0xdd, 0xc0, 0xac, 0x5e, 0x54, 0x87, 0x98, 0xbe, 0x47, 0x10, 0x9b, 0x5e, 0x9c, 0xd4, 0xae,
- 0x96, 0xd1, 0x3b, 0x52, 0x7e, 0x12, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0x37, 0x9b, 0x29, 0x6c,
- 0x5c, 0xb7, 0x28, 0xe3, 0x72, 0xbb, 0x27, 0xad, 0xdd, 0xfe, 0xd3, 0x20, 0x7a, 0x1f, 0xfa, 0x3d,
- 0x61, 0xe5, 0x22, 0x95, 0x7b, 0xf2, 0x4a, 0x4d, 0xc2, 0xc3, 0x4f, 0xc3, 0x46, 0x5b, 0x0a, 0xa6,
- 0x34, 0x9f, 0x5d, 0x5f, 0xd1, 0x66, 0x62, 0x13, 0xbd, 0x4f, 0xf9, 0xa2, 0x4c, 0x5a, 0x67, 0x56,
- 0x93, 0x66, 0xf3, 0x21, 0x85, 0x44, 0x26, 0xd6, 0x82, 0xc0, 0x08, 0x3f, 0xcb, 0xab, 0xc6, 0x3a,
- 0x36, 0xc2, 0xad, 0x38, 0x38, 0xc2, 0x3d, 0xcc, 0x8e, 0xf0, 0x93, 0xe5, 0x79, 0x96, 0x56, 0x97,
- 0x69, 0x3e, 0xd7, 0x69, 0xb7, 0xaf, 0x6b, 0xc5, 0x30, 0xf3, 0xde, 0xec, 0xe4, 0x30, 0x27, 0x3a,
- 0x58, 0x48, 0x27, 0x20, 0x4c, 0x36, 0x3b, 0x39, 0xbb, 0x1b, 0xb2, 0xd2, 0x7a, 0x1b, 0x0e, 0x76,
- 0x43, 0x8e, 0x6a, 0x2d, 0x25, 0x76, 0x43, 0x6d, 0xca, 0xee, 0x86, 0xdc, 0x3a, 0x54, 0x3c, 0x5b,
- 0xb1, 0xb3, 0x32, 0x05, 0xbb, 0x21, 0xaf, 0x7c, 0x0d, 0x43, 0xec, 0x86, 0x28, 0xd6, 0x4e, 0x54,
- 0x96, 0xd8, 0x67, 0x62, 0x22, 0x62, 0xb1, 0xac, 0xc0, 0x44, 0xe5, 0xd8, 0x30, 0x08, 0x31, 0x51,
- 0x11, 0xa8, 0xf6, 0xf6, 0xdb, 0x51, 0xa4, 0x4e, 0x30, 0xe4, 0x29, 0x93, 0xbf, 0xf6, 0xe8, 0xa3,
- 0x0d, 0xef, 0x88, 0xe9, 0xfd, 0x00, 0x61, 0x13, 0x1e, 0xf5, 0x77, 0x79, 0x78, 0x36, 0x44, 0x35,
- 0xa4, 0x88, 0x48, 0x78, 0x00, 0x02, 0x0b, 0x3a, 0xb9, 0xe4, 0xaf, 0xf0, 0x82, 0xd6, 0x92, 0x70,
- 0x41, 0x35, 0x61, 0x8f, 0xb3, 0x75, 0x41, 0xb1, 0xe3, 0xec, 0xa6, 0x18, 0xa1, 0xe3, 0x6c, 0xc8,
- 0xd8, 0x98, 0x71, 0x0d, 0x3f, 0xe5, 0xfc, 0x6a, 0x11, 0x97, 0x57, 0x20, 0x66, 0x3c, 0xe5, 0x86,
- 0x21, 0x62, 0x86, 0x62, 0x6d, 0xcc, 0xb8, 0x0e, 0xeb, 0x74, 0xf9, 0xac, 0xcc, 0x40, 0xcc, 0x78,
- 0x36, 0x34, 0x42, 0xc4, 0x0c, 0x81, 0xda, 0xd9, 0xc9, 0xf5, 0x36, 0x61, 0xf0, 0x00, 0xc5, 0x53,
- 0x9f, 0x30, 0xea, 0x00, 0x05, 0xc1, 0x60, 0x08, 0xed, 0x97, 0x71, 0x71, 0x89, 0x87, 0x90, 0x14,
- 0x85, 0x43, 0xa8, 0x41, 0x60, 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf1, 0xfe, 0x56, 0xb2, 0x70,
- 0x7f, 0x1b, 0x06, 0xf6, 0xb7, 0x12, 0xbc, 0x4c, 0xc5, 0xe5, 0x11, 0x13, 0x31, 0xde, 0xdf, 0x3e,
- 0x13, 0xee, 0xef, 0x16, 0x6b, 0xf3, 0x71, 0xd7, 0xe1, 0x64, 0x79, 0x5e, 0xcd, 0xca, 0xf4, 0x9c,
- 0x0d, 0x03, 0x56, 0x0c, 0x44, 0xe4, 0xe3, 0x24, 0xac, 0x7d, 0xfe, 0x74, 0x10, 0xdd, 0x6c, 0xba,
- 0x9d, 0x57, 0x95, 0x5e, 0xfb, 0x7c, 0xf7, 0x1f, 0xe3, 0xfd, 0x4b, 0xe0, 0xc4, 0x03, 0x86, 0x1e,
- 0x6a, 0x4e, 0x6e, 0x80, 0x17, 0xe9, 0x2c, 0xaf, 0x4c, 0xa1, 0x3e, 0xed, 0x63, 0xdd, 0x51, 0x20,
- 0x72, 0x83, 0x5e, 0x8a, 0x36, 0x2d, 0xd3, 0xfd, 0xd3, 0xc8, 0x0e, 0x92, 0x0a, 0xa4, 0x65, 0x4d,
- 0x7b, 0x3b, 0x04, 0x91, 0x96, 0xe1, 0x24, 0x0c, 0x85, 0xfd, 0x92, 0x2f, 0x8b, 0xaa, 0x23, 0x14,
- 0x00, 0x14, 0x0e, 0x85, 0x36, 0xac, 0x7d, 0xbe, 0x8e, 0x7e, 0xd5, 0x0d, 0x3f, 0xb7, 0xb1, 0xb7,
- 0xe9, 0x98, 0xc2, 0x9a, 0x78, 0xd4, 0x17, 0xb7, 0x19, 0x45, 0xe3, 0x59, 0xec, 0x31, 0x11, 0xa7,
- 0x59, 0x35, 0xdc, 0xc0, 0x6d, 0x34, 0x72, 0x22, 0xa3, 0xc0, 0x38, 0x38, 0xbf, 0xed, 0x2d, 0x8b,
- 0x2c, 0x9d, 0xb5, 0x1f, 0xef, 0x68, 0x5d, 0x23, 0x0e, 0xcf, 0x6f, 0x2e, 0x06, 0xe7, 0xeb, 0x3a,
- 0xf5, 0x93, 0xff, 0x99, 0xae, 0x0b, 0x86, 0xcf, 0xd7, 0x1e, 0x12, 0x9e, 0xaf, 0x21, 0x0a, 0xeb,
- 0x33, 0x61, 0xe2, 0x30, 0x5e, 0xf3, 0x25, 0x31, 0x5f, 0x1b, 0x71, 0xb8, 0x3e, 0x2e, 0x66, 0xf7,
- 0x06, 0xc6, 0xc3, 0x41, 0x2e, 0x58, 0x99, 0xc7, 0xd9, 0xf3, 0x2c, 0x9e, 0x57, 0x43, 0x62, 0x8e,
- 0xf1, 0x29, 0x62, 0x6f, 0x40, 0xd3, 0x48, 0x33, 0x1e, 0x54, 0xcf, 0xe3, 0x15, 0x2f, 0x53, 0x41,
- 0x37, 0xa3, 0x45, 0x3a, 0x9b, 0xd1, 0x43, 0x51, 0x6f, 0xe3, 0x72, 0x76, 0x99, 0xae, 0x58, 0x12,
- 0xf0, 0xd6, 0x20, 0x3d, 0xbc, 0x39, 0x28, 0xd2, 0x69, 0x13, 0xbe, 0x2c, 0x67, 0x8c, 0xec, 0x34,
- 0x25, 0xee, 0xec, 0x34, 0x83, 0x69, 0x0f, 0x7f, 0x36, 0x88, 0x7e, 0x4d, 0x49, 0xdd, 0x67, 0x2e,
- 0x7b, 0x71, 0x75, 0x79, 0xce, 0xe3, 0x32, 0x19, 0x7e, 0x88, 0xd9, 0x41, 0x51, 0xe3, 0xfa, 0xf1,
- 0x75, 0x54, 0x60, 0xb3, 0xd6, 0x79, 0xb7, 0x1d, 0x71, 0x68, 0xb3, 0x7a, 0x48, 0xb8, 0x59, 0x21,
- 0x0a, 0x27, 0x10, 0x29, 0x57, 0x47, 0x72, 0x1b, 0xa4, 0xbe, 0x7f, 0x2e, 0xb7, 0xd9, 0xc9, 0xc1,
- 0xf9, 0xb1, 0x16, 0xfa, 0xd1, 0xb2, 0x4d, 0xd9, 0xc0, 0x23, 0x66, 0xd4, 0x17, 0x27, 0x3d, 0x9b,
- 0x51, 0x11, 0xf6, 0xdc, 0x1a, 0x19, 0xa3, 0xbe, 0x38, 0xe1, 0xd9, 0x99, 0xd6, 0x42, 0x9e, 0x91,
- 0xa9, 0x6d, 0xd4, 0x17, 0x87, 0xd9, 0x97, 0x66, 0x9a, 0x75, 0xe1, 0x41, 0xc0, 0x0e, 0x5c, 0x1b,
- 0xb6, 0x7a, 0xb1, 0xda, 0xe1, 0x5f, 0x0c, 0xa2, 0xef, 0x5a, 0x8f, 0x47, 0x3c, 0x49, 0x2f, 0xd6,
- 0x0a, 0x7a, 0x11, 0x67, 0x4b, 0x56, 0x0d, 0x1f, 0x53, 0xd6, 0xda, 0xac, 0x29, 0xc1, 0x93, 0x6b,
- 0xe9, 0xc0, 0xb1, 0x33, 0x2e, 0x8a, 0x6c, 0x3d, 0x65, 0x8b, 0x22, 0x23, 0xc7, 0x8e, 0x87, 0x84,
- 0xc7, 0x0e, 0x44, 0x61, 0x56, 0x3e, 0xe5, 0x75, 0xce, 0x8f, 0x66, 0xe5, 0x52, 0x14, 0xce, 0xca,
- 0x1b, 0x04, 0xe6, 0x4a, 0x53, 0xbe, 0xcb, 0xb3, 0x8c, 0xcd, 0x44, 0xfb, 0xde, 0x86, 0xd1, 0xb4,
- 0x44, 0x38, 0x57, 0x02, 0xa4, 0x3d, 0x95, 0x6b, 0xf6, 0x90, 0x71, 0xc9, 0x9e, 0xae, 0x0f, 0xd3,
- 0xfc, 0x6a, 0x88, 0xa7, 0x05, 0x16, 0x20, 0x4e, 0xe5, 0x50, 0x10, 0xee, 0x55, 0xcf, 0xf2, 0x84,
- 0xe3, 0x7b, 0xd5, 0x5a, 0x12, 0xde, 0xab, 0x6a, 0x02, 0x9a, 0x3c, 0x65, 0x94, 0xc9, 0x5a, 0x12,
- 0x36, 0xa9, 0x09, 0x6c, 0x2a, 0xd4, 0xcf, 0x6e, 0xc8, 0xa9, 0x10, 0x3c, 0xad, 0xd9, 0xec, 0xe4,
- 0xe0, 0x9e, 0x4b, 0x3b, 0x40, 0x23, 0x02, 0x18, 0xff, 0x20, 0xc8, 0xc0, 0xd0, 0x6f, 0x76, 0xc3,
- 0xcf, 0x99, 0x98, 0x5d, 0xe2, 0xa1, 0xef, 0x21, 0xe1, 0xd0, 0x87, 0x28, 0x6c, 0xab, 0x29, 0x37,
- 0xbb, 0xf9, 0x0d, 0x3c, 0xf0, 0x5a, 0x3b, 0xf9, 0xcd, 0x4e, 0x0e, 0xb6, 0xd5, 0xc1, 0x82, 0x6e,
- 0x2b, 0x25, 0x0b, 0xb7, 0x95, 0x61, 0x60, 0xe9, 0x95, 0x40, 0x1e, 0x92, 0x6d, 0xd0, 0x8a, 0xde,
- 0x31, 0xd9, 0x66, 0x27, 0xa7, 0x9d, 0xfc, 0x83, 0xd9, 0x1f, 0x2a, 0xe9, 0x31, 0xaf, 0x07, 0xdf,
- 0x8b, 0x38, 0x4b, 0x93, 0x58, 0xb0, 0x29, 0xbf, 0x62, 0x39, 0xbe, 0x15, 0xd3, 0xa5, 0x55, 0xfc,
- 0xc8, 0x53, 0x08, 0x6f, 0xc5, 0xc2, 0x8a, 0x30, 0x4e, 0x14, 0x7d, 0x56, 0xb1, 0xdd, 0xb8, 0x22,
- 0xa6, 0x48, 0x0f, 0x09, 0xc7, 0x09, 0x44, 0x61, 0x22, 0xac, 0xe4, 0xcf, 0x5e, 0x17, 0xac, 0x4c,
- 0x59, 0x3e, 0x63, 0x78, 0x22, 0x0c, 0xa9, 0x70, 0x22, 0x8c, 0xd0, 0x70, 0x13, 0xb8, 0x17, 0x0b,
- 0xf6, 0x74, 0x3d, 0x4d, 0x17, 0xac, 0x12, 0xf1, 0xa2, 0xc0, 0x37, 0x81, 0x00, 0x0a, 0x6f, 0x02,
- 0xdb, 0x70, 0xeb, 0xcc, 0xc9, 0xcc, 0xb4, 0xed, 0x7b, 0x64, 0x90, 0x08, 0xdc, 0x23, 0x23, 0x50,
- 0xd8, 0xb0, 0x16, 0x40, 0x9f, 0x3e, 0xb4, 0xac, 0x04, 0x9f, 0x3e, 0xd0, 0x74, 0xeb, 0x24, 0xcf,
- 0x30, 0x93, 0x7a, 0x68, 0x76, 0x14, 0x7d, 0xe2, 0x0e, 0xd1, 0xad, 0x5e, 0x2c, 0x7e, 0x74, 0x78,
- 0xca, 0xb2, 0x58, 0xae, 0x87, 0x81, 0xf3, 0xb9, 0x86, 0xe9, 0x73, 0x74, 0xe8, 0xb0, 0xda, 0xe1,
- 0x9f, 0x0c, 0xa2, 0xf7, 0x30, 0x8f, 0x5f, 0x14, 0xd2, 0xef, 0xa3, 0x6e, 0x5b, 0x8a, 0x24, 0x2e,
- 0xca, 0x85, 0x35, 0xec, 0x5d, 0x8f, 0x46, 0x64, 0xef, 0xd1, 0xe9, 0x02, 0xf8, 0xd9, 0xa0, 0x29,
- 0x3f, 0xe4, 0x88, 0xbb, 0x1e, 0x21, 0xde, 0x6e, 0xb4, 0xfc, 0x72, 0x55, 0x60, 0xa3, 0x65, 0x6c,
- 0x68, 0x31, 0xb1, 0xd1, 0x42, 0x30, 0x3b, 0x3a, 0xdd, 0xea, 0xbd, 0x4c, 0xc5, 0xa5, 0x4c, 0xe4,
- 0xc0, 0xe8, 0xf4, 0xca, 0x6a, 0x20, 0x62, 0x74, 0x92, 0x30, 0x4c, 0x75, 0x1a, 0xb0, 0x1e, 0x9b,
- 0xd8, 0x5c, 0x6e, 0x0c, 0xb9, 0x23, 0xf3, 0x5e, 0x37, 0x08, 0xe3, 0xb5, 0x11, 0xeb, 0x3d, 0xd5,
- 0x83, 0x90, 0x05, 0xb0, 0xaf, 0xda, 0xea, 0xc5, 0x6a, 0x87, 0x7f, 0x14, 0x7d, 0xa7, 0x55, 0xb1,
- 0xe7, 0x2c, 0x16, 0xcb, 0x92, 0x25, 0xc3, 0x9d, 0x8e, 0x72, 0x37, 0xa0, 0x71, 0xfd, 0xa8, 0xbf,
- 0x42, 0x2b, 0xf9, 0x6f, 0x38, 0x15, 0x56, 0xa6, 0x0c, 0x8f, 0x43, 0x26, 0x7d, 0x36, 0x98, 0xfc,
- 0xd3, 0x3a, 0xad, 0xfd, 0xbb, 0x1b, 0x5d, 0xe3, 0x55, 0x9c, 0x66, 0xf2, 0x29, 0xf0, 0x87, 0x21,
- 0xa3, 0x1e, 0x1a, 0xdc, 0xbf, 0x93, 0x2a, 0xad, 0x99, 0x59, 0x8e, 0x71, 0x67, 0xdf, 0xf7, 0x90,
- 0x9e, 0x09, 0x90, 0x6d, 0xdf, 0x76, 0x4f, 0x5a, 0xbb, 0x15, 0xcd, 0x92, 0x57, 0xff, 0xd9, 0x0d,
- 0x72, 0xcc, 0xab, 0x56, 0x45, 0x22, 0x7d, 0xbb, 0x27, 0xad, 0xbd, 0xfe, 0x61, 0xf4, 0x6e, 0xdb,
- 0xab, 0x5e, 0x88, 0x76, 0x3a, 0x4d, 0x81, 0xb5, 0xe8, 0x51, 0x7f, 0x05, 0xed, 0xfe, 0x9f, 0xcd,
- 0x81, 0xb7, 0xf2, 0x3f, 0xe3, 0x8b, 0x05, 0xcb, 0x13, 0x96, 0x34, 0x1a, 0x55, 0xbd, 0x31, 0xfb,
- 0x8c, 0xb6, 0x6b, 0x14, 0x46, 0xae, 0x86, 0x29, 0xd1, 0xaf, 0x7f, 0x03, 0x4d, 0x5d, 0xb4, 0x7f,
- 0x1f, 0x44, 0xf7, 0xd1, 0xa2, 0x35, 0x81, 0xeb, 0x15, 0xf1, 0xb7, 0xfa, 0x38, 0xc2, 0x34, 0x4d,
- 0x51, 0xc7, 0xff, 0x07, 0x0b, 0xba, 0xc8, 0xff, 0x32, 0x88, 0x6e, 0x5b, 0xc5, 0x3a, 0xbc, 0x77,
- 0x79, 0x7e, 0x91, 0xa5, 0x33, 0x21, 0x1f, 0xf5, 0x6a, 0x15, 0xba, 0x39, 0x29, 0x8d, 0xee, 0xe6,
- 0x0c, 0x68, 0xda, 0x5d, 0xf1, 0xe7, 0x69, 0x25, 0x78, 0xb9, 0x9e, 0x5c, 0xf2, 0x57, 0xcd, 0x9b,
- 0x48, 0xfe, 0xbc, 0xac, 0x81, 0x91, 0x43, 0x10, 0xbb, 0x62, 0x9c, 0x6c, 0xb9, 0xb2, 0x6f, 0x2c,
- 0x55, 0x84, 0x2b, 0x87, 0xe8, 0x70, 0xe5, 0x93, 0x76, 0x55, 0x6a, 0x6a, 0x65, 0x5f, 0xaf, 0xda,
- 0xc4, 0x8b, 0xda, 0x7e, 0xc5, 0xea, 0x5e, 0x37, 0x68, 0x73, 0x53, 0x2d, 0xde, 0x4b, 0x2f, 0x2e,
- 0x4c, 0x9d, 0xf0, 0x92, 0xba, 0x08, 0x91, 0x9b, 0x12, 0xa8, 0xdd, 0x5e, 0x3d, 0x4f, 0x33, 0x26,
- 0x1f, 0x0a, 0x7d, 0x71, 0x71, 0x91, 0xf1, 0x38, 0x01, 0xdb, 0xab, 0x5a, 0x3c, 0x72, 0xe5, 0xc4,
- 0xf6, 0x0a, 0xe3, 0xec, 0x75, 0x93, 0x5a, 0x5a, 0x47, 0x77, 0x3e, 0x4b, 0x33, 0x78, 0x91, 0x59,
- 0x6a, 0x1a, 0x21, 0x71, 0xdd, 0xa4, 0x05, 0xd9, 0x14, 0xa8, 0x16, 0xd5, 0x51, 0xd9, 0x94, 0xff,
- 0x6e, 0x5b, 0xd1, 0x11, 0x13, 0x29, 0x10, 0x82, 0xd9, 0xe3, 0x8b, 0x5a, 0x78, 0x56, 0x48, 0xe3,
- 0xb7, 0xda, 0x5a, 0x4a, 0x42, 0x1c, 0x5f, 0xf8, 0x84, 0xdd, 0x2d, 0xd7, 0x7f, 0xdf, 0xe3, 0xaf,
- 0x72, 0x69, 0xf4, 0x76, 0x5b, 0xa5, 0x91, 0x11, 0xbb, 0x65, 0xc8, 0x68, 0xc3, 0x3f, 0x8a, 0xfe,
- 0xbf, 0x34, 0x5c, 0xf2, 0x62, 0x78, 0x03, 0x51, 0x28, 0x9d, 0x6b, 0xbf, 0x37, 0x49, 0xb9, 0xbd,
- 0x9d, 0x62, 0x62, 0xe3, 0xac, 0x8a, 0xe7, 0xf0, 0xae, 0xbe, 0xed, 0x71, 0x29, 0x25, 0x6e, 0xa7,
- 0xb4, 0x29, 0x3f, 0x2a, 0x8e, 0x79, 0xa2, 0xad, 0x23, 0x35, 0x34, 0xc2, 0x50, 0x54, 0xb8, 0x90,
- 0x4d, 0x5b, 0x8f, 0xe3, 0x55, 0x3a, 0x37, 0xa9, 0x85, 0x9a, 0xc0, 0x2a, 0x90, 0xb6, 0x5a, 0x66,
- 0xe4, 0x40, 0x44, 0xda, 0x4a, 0xc2, 0xda, 0xe7, 0xdf, 0x0f, 0xa2, 0x5b, 0x96, 0xd9, 0x6f, 0x0e,
- 0x7c, 0x0f, 0xf2, 0x0b, 0x5e, 0x27, 0xb9, 0x87, 0x69, 0x7e, 0x55, 0x0d, 0x3f, 0xa1, 0x4c, 0xe2,
- 0xbc, 0x29, 0xca, 0xa7, 0xd7, 0xd6, 0xb3, 0xfb, 0x93, 0xe6, 0x34, 0xd4, 0x5e, 0x89, 0x50, 0x1a,
- 0x60, 0x7f, 0x62, 0x0e, 0x4d, 0x21, 0x47, 0xec, 0x4f, 0x42, 0xbc, 0xed, 0x62, 0xe3, 0x3c, 0xe3,
- 0x39, 0xec, 0x62, 0x6b, 0xa1, 0x16, 0x12, 0x5d, 0xdc, 0x82, 0xec, 0x7c, 0xdc, 0x88, 0xd4, 0xf9,
- 0xda, 0x38, 0xcb, 0xc0, 0x7c, 0x6c, 0x54, 0x0d, 0x40, 0xcc, 0xc7, 0x28, 0xa8, 0xfd, 0x9c, 0x46,
- 0xdf, 0xaa, 0x9b, 0xf4, 0xa4, 0x64, 0xab, 0x94, 0xc1, 0xdb, 0x3b, 0x8e, 0x84, 0x18, 0xff, 0x3e,
- 0x61, 0x47, 0xd6, 0x59, 0x5e, 0x15, 0x59, 0x5c, 0x5d, 0xea, 0xfb, 0x1c, 0x7e, 0x9d, 0x1b, 0x21,
- 0xbc, 0xd1, 0x71, 0xb7, 0x83, 0xb2, 0x93, 0x7a, 0x23, 0x33, 0x53, 0xcc, 0x06, 0xae, 0xda, 0x9a,
- 0x66, 0x36, 0x3b, 0x39, 0xfb, 0xd0, 0x64, 0x3f, 0xce, 0x32, 0x56, 0xae, 0x1b, 0xd9, 0x51, 0x9c,
- 0xa7, 0x17, 0xac, 0x12, 0xe0, 0xa1, 0x89, 0xa6, 0x46, 0x10, 0x23, 0x1e, 0x9a, 0x04, 0x70, 0xbb,
- 0x6f, 0x03, 0x9e, 0x0f, 0xf2, 0x84, 0xbd, 0x06, 0xfb, 0x36, 0x68, 0x47, 0x32, 0xc4, 0xbe, 0x8d,
- 0x62, 0xed, 0xc3, 0x83, 0xa7, 0x19, 0x9f, 0x5d, 0xe9, 0x25, 0xc0, 0xef, 0x60, 0x29, 0x81, 0x6b,
- 0xc0, 0xed, 0x10, 0x62, 0x17, 0x01, 0x29, 0x38, 0x65, 0x45, 0x16, 0xcf, 0xe0, 0x15, 0x2e, 0xa5,
- 0xa3, 0x65, 0xc4, 0x22, 0x00, 0x19, 0x50, 0x5c, 0x7d, 0x35, 0x0c, 0x2b, 0x2e, 0xb8, 0x19, 0x76,
- 0x3b, 0x84, 0xd8, 0x65, 0x50, 0x0a, 0x26, 0x45, 0x96, 0x0a, 0x30, 0x0c, 0x94, 0x86, 0x94, 0x10,
- 0xc3, 0xc0, 0x27, 0x80, 0xc9, 0x23, 0x56, 0xce, 0x19, 0x6a, 0x52, 0x4a, 0x82, 0x26, 0x1b, 0xc2,
- 0xde, 0x57, 0x57, 0x75, 0xe7, 0xc5, 0x1a, 0xdc, 0x57, 0xd7, 0xd5, 0xe2, 0xc5, 0x9a, 0xb8, 0xaf,
- 0xee, 0x01, 0xa0, 0x88, 0x27, 0x71, 0x25, 0xf0, 0x22, 0x4a, 0x49, 0xb0, 0x88, 0x0d, 0x61, 0xd7,
- 0x68, 0x55, 0xc4, 0xa5, 0x00, 0x6b, 0xb4, 0x2e, 0x80, 0x73, 0x89, 0xe1, 0x26, 0x29, 0xb7, 0x33,
- 0x89, 0xea, 0x15, 0x26, 0x9e, 0xa7, 0x2c, 0x4b, 0x2a, 0x30, 0x93, 0xe8, 0x76, 0x6f, 0xa4, 0xc4,
- 0x4c, 0xd2, 0xa6, 0x40, 0x28, 0xe9, 0x27, 0x20, 0x58, 0xed, 0xc0, 0x03, 0x90, 0xdb, 0x21, 0xc4,
- 0xce, 0x4f, 0x4d, 0xa1, 0x77, 0xe3, 0xb2, 0x4c, 0xeb, 0xc5, 0x7f, 0x03, 0x2f, 0x50, 0x23, 0x27,
- 0xe6, 0x27, 0x8c, 0x03, 0xc3, 0xab, 0x99, 0xb8, 0xb1, 0x82, 0xc1, 0xa9, 0xfb, 0x83, 0x20, 0x63,
- 0x33, 0x4e, 0x29, 0x71, 0x9e, 0xc2, 0x63, 0xad, 0x89, 0x3c, 0x84, 0xdf, 0xe8, 0xc2, 0x9c, 0x97,
- 0xd9, 0x8c, 0x8b, 0x23, 0xbe, 0x62, 0x53, 0xfe, 0xec, 0x75, 0x5a, 0xd5, 0xdb, 0x2d, 0xbd, 0x72,
- 0x3f, 0x21, 0x2c, 0x61, 0x30, 0xf1, 0x32, 0x5b, 0xa7, 0x92, 0x4d, 0x20, 0x40, 0x59, 0x8e, 0xd9,
- 0x2b, 0x34, 0x81, 0x80, 0x16, 0x0d, 0x47, 0x24, 0x10, 0x21, 0xde, 0x9e, 0x98, 0x19, 0xe7, 0xfa,
- 0x0b, 0x06, 0x53, 0xde, 0xe4, 0x72, 0x94, 0x35, 0x08, 0x12, 0x87, 0x16, 0x41, 0x05, 0xbb, 0xbf,
- 0x34, 0xfe, 0xed, 0x10, 0xbb, 0x47, 0xd8, 0x69, 0x0f, 0xb3, 0xfb, 0x3d, 0x48, 0xc4, 0x95, 0xbd,
- 0x4a, 0x42, 0xb9, 0x6a, 0xdf, 0x24, 0xb9, 0xdf, 0x83, 0x74, 0x4e, 0xdf, 0xdc, 0x6a, 0x3d, 0x8d,
- 0x67, 0x57, 0xf3, 0x92, 0x2f, 0xf3, 0x64, 0x97, 0x67, 0xbc, 0x04, 0xa7, 0x6f, 0x5e, 0xa9, 0x01,
- 0x4a, 0x9c, 0xbe, 0x75, 0xa8, 0xd8, 0x0c, 0xce, 0x2d, 0xc5, 0x38, 0x4b, 0xe7, 0x70, 0x47, 0xed,
- 0x19, 0x92, 0x00, 0x91, 0xc1, 0xa1, 0x20, 0x12, 0x44, 0x6a, 0xc7, 0x2d, 0xd2, 0x59, 0x9c, 0x29,
- 0x7f, 0x3b, 0xb4, 0x19, 0x0f, 0xec, 0x0c, 0x22, 0x44, 0x01, 0xa9, 0xe7, 0x74, 0x59, 0xe6, 0x07,
- 0xb9, 0xe0, 0x64, 0x3d, 0x1b, 0xa0, 0xb3, 0x9e, 0x0e, 0x08, 0xa6, 0xd5, 0x29, 0x7b, 0x5d, 0x97,
- 0xa6, 0xfe, 0x07, 0x9b, 0x56, 0xeb, 0xbf, 0x8f, 0xb4, 0x3c, 0x34, 0xad, 0x02, 0x0e, 0x54, 0x46,
- 0x3b, 0x51, 0x01, 0x13, 0xd0, 0xf6, 0xc3, 0xe4, 0x5e, 0x37, 0x88, 0xfb, 0x99, 0x88, 0x75, 0xc6,
- 0x42, 0x7e, 0x24, 0xd0, 0xc7, 0x4f, 0x03, 0xda, 0xe3, 0x16, 0xaf, 0x3e, 0x97, 0x6c, 0x76, 0xd5,
- 0xba, 0x19, 0xe7, 0x17, 0x54, 0x21, 0xc4, 0x71, 0x0b, 0x81, 0xe2, 0x5d, 0x74, 0x30, 0xe3, 0x79,
- 0xa8, 0x8b, 0x6a, 0x79, 0x9f, 0x2e, 0xd2, 0x9c, 0xdd, 0xfc, 0x1a, 0xa9, 0x8e, 0x4c, 0xd5, 0x4d,
- 0x5b, 0x84, 0x05, 0x17, 0x22, 0x36, 0xbf, 0x24, 0x6c, 0x73, 0x72, 0xe8, 0xf3, 0xa8, 0xfd, 0xda,
- 0x40, 0xcb, 0xca, 0x11, 0xfd, 0xda, 0x00, 0xc5, 0xd2, 0x95, 0x54, 0x31, 0xd2, 0x61, 0xc5, 0x8f,
- 0x93, 0x87, 0xfd, 0x60, 0xbb, 0xe5, 0xf1, 0x7c, 0xee, 0x66, 0x2c, 0x2e, 0x95, 0xd7, 0xed, 0x80,
- 0x21, 0x8b, 0x11, 0x5b, 0x9e, 0x00, 0x0e, 0xa6, 0x30, 0xcf, 0xf3, 0x2e, 0xcf, 0x05, 0xcb, 0x05,
- 0x36, 0x85, 0xf9, 0xc6, 0x34, 0x18, 0x9a, 0xc2, 0x28, 0x05, 0x10, 0xb7, 0xf2, 0x3c, 0x88, 0x89,
- 0xe3, 0x78, 0x81, 0x66, 0x6c, 0xea, 0xac, 0x47, 0xc9, 0x43, 0x71, 0x0b, 0x38, 0xe7, 0x71, 0xae,
- 0xeb, 0x65, 0x1a, 0x97, 0x73, 0x73, 0xba, 0x91, 0x0c, 0x1f, 0xd1, 0x76, 0x7c, 0x92, 0x78, 0x9c,
- 0x1b, 0xd6, 0x00, 0xd3, 0xce, 0xc1, 0x22, 0x9e, 0x9b, 0x9a, 0x22, 0x35, 0x90, 0xf2, 0x56, 0x55,
- 0xef, 0x75, 0x83, 0xc0, 0xcf, 0x8b, 0x34, 0x61, 0x3c, 0xe0, 0x47, 0xca, 0xfb, 0xf8, 0x81, 0x20,
- 0xc8, 0xde, 0xea, 0x7a, 0xab, 0x1d, 0xdd, 0x38, 0x4f, 0xf4, 0x3e, 0x76, 0x44, 0x34, 0x0f, 0xe0,
- 0x42, 0xd9, 0x1b, 0xc1, 0x83, 0x31, 0xda, 0x1c, 0xd0, 0x86, 0xc6, 0xa8, 0x39, 0x7f, 0xed, 0x33,
- 0x46, 0x31, 0x58, 0xfb, 0xfc, 0x89, 0x1e, 0xa3, 0x7b, 0xb1, 0x88, 0xeb, 0xbc, 0xfd, 0x45, 0xca,
- 0x5e, 0xe9, 0x8d, 0x30, 0x52, 0xdf, 0x86, 0x1a, 0xc9, 0xb7, 0x9e, 0xc1, 0xae, 0x78, 0xa7, 0x37,
- 0x1f, 0xf0, 0xad, 0x77, 0x08, 0x9d, 0xbe, 0xc1, 0x56, 0x61, 0xa7, 0x37, 0x1f, 0xf0, 0xad, 0x3f,
- 0xa7, 0xd0, 0xe9, 0x1b, 0x7c, 0x53, 0x61, 0xa7, 0x37, 0xaf, 0x7d, 0xff, 0x69, 0x33, 0x70, 0x5d,
- 0xe7, 0x75, 0x1e, 0x36, 0x13, 0xe9, 0x8a, 0x61, 0xe9, 0xa4, 0x6f, 0xcf, 0xa0, 0xa1, 0x74, 0x92,
- 0x56, 0x71, 0x3e, 0x68, 0x86, 0x95, 0xe2, 0x84, 0x57, 0xa9, 0xbc, 0x8e, 0xf1, 0xa4, 0x87, 0xd1,
- 0x06, 0x0e, 0x6d, 0x9a, 0x42, 0x4a, 0xf6, 0xc1, 0xb2, 0x87, 0xda, 0x8b, 0xf0, 0x0f, 0x03, 0xf6,
- 0xda, 0xf7, 0xe1, 0xb7, 0x7b, 0xd2, 0xf6, 0x11, 0xaf, 0xc7, 0xb8, 0xcf, 0x96, 0x43, 0xbd, 0x8a,
- 0x3e, 0x5e, 0x7e, 0xd4, 0x5f, 0x41, 0xbb, 0xff, 0xf3, 0x66, 0x5f, 0x01, 0xfd, 0xeb, 0x41, 0xf0,
- 0xb8, 0x8f, 0x45, 0x30, 0x10, 0x9e, 0x5c, 0x4b, 0x47, 0x17, 0xe4, 0xaf, 0x9b, 0x0d, 0x74, 0x83,
- 0xca, 0xd7, 0x81, 0xe4, 0x6b, 0xc4, 0x7a, 0x4c, 0x84, 0xba, 0xd5, 0xc2, 0x70, 0x64, 0x7c, 0x7c,
- 0x4d, 0x2d, 0xe7, 0xf3, 0x76, 0x1e, 0xac, 0x5f, 0x5b, 0x75, 0xca, 0x13, 0xb2, 0xec, 0xd0, 0xb0,
- 0x40, 0x9f, 0x5c, 0x57, 0x8d, 0x1a, 0x2b, 0x0e, 0x2c, 0x3f, 0xf0, 0xf2, 0xa4, 0xa7, 0x61, 0xef,
- 0x93, 0x2f, 0x1f, 0x5d, 0x4f, 0x49, 0x97, 0xe5, 0xdf, 0x06, 0xd1, 0x5d, 0x8f, 0xb5, 0xcf, 0x13,
- 0xc0, 0xa9, 0xc7, 0x0f, 0x02, 0xf6, 0x29, 0x25, 0x53, 0xb8, 0xdf, 0xf8, 0x66, 0xca, 0xf6, 0x5b,
- 0x70, 0x9e, 0xca, 0xf3, 0x34, 0x13, 0xac, 0x6c, 0x7f, 0x0b, 0xce, 0xb7, 0xab, 0xa8, 0x11, 0xfd,
- 0x2d, 0xb8, 0x00, 0xee, 0x7c, 0x0b, 0x0e, 0xf1, 0x8c, 0x7e, 0x0b, 0x0e, 0xb5, 0x16, 0xfc, 0x16,
- 0x5c, 0x58, 0x83, 0x9a, 0xde, 0x9b, 0x22, 0xa8, 0x73, 0xeb, 0x5e, 0x16, 0xfd, 0x63, 0xec, 0xc7,
- 0xd7, 0x51, 0x21, 0x16, 0x38, 0xc5, 0xc9, 0x1b, 0x8d, 0x3d, 0xda, 0xd4, 0xbb, 0xd5, 0xb8, 0xd3,
- 0x9b, 0xd7, 0xbe, 0x7f, 0xac, 0x77, 0x37, 0x66, 0x3a, 0xe7, 0xa5, 0xfc, 0x0e, 0xe0, 0x56, 0x68,
- 0x7a, 0xae, 0x2d, 0xb8, 0x3d, 0xff, 0xb0, 0x1f, 0x4c, 0x54, 0xb7, 0x26, 0x74, 0xa7, 0x8f, 0xba,
- 0x0c, 0x81, 0x2e, 0xdf, 0xe9, 0xcd, 0x13, 0xcb, 0x88, 0xf2, 0xad, 0x7a, 0xbb, 0x87, 0x31, 0xbf,
- 0xaf, 0x1f, 0xf5, 0x57, 0xd0, 0xee, 0x57, 0x3a, 0x6d, 0x74, 0xdd, 0xcb, 0x7e, 0xde, 0xee, 0x32,
- 0x35, 0xf1, 0xba, 0x79, 0xd4, 0x17, 0x0f, 0x25, 0x10, 0xee, 0x12, 0xda, 0x95, 0x40, 0xa0, 0xcb,
- 0xe8, 0x47, 0xd7, 0x53, 0xd2, 0x65, 0xf9, 0xbb, 0x41, 0x74, 0x93, 0x2c, 0x8b, 0x8e, 0x83, 0x4f,
- 0xfa, 0x5a, 0x06, 0xf1, 0xf0, 0xe9, 0xb5, 0xf5, 0x74, 0xa1, 0xfe, 0x71, 0x10, 0xdd, 0x0a, 0x14,
- 0x4a, 0x05, 0xc8, 0x35, 0xac, 0xfb, 0x81, 0xf2, 0xd9, 0xf5, 0x15, 0xa9, 0xe5, 0xde, 0xc5, 0x27,
- 0xed, 0xef, 0x7a, 0x05, 0x6c, 0x4f, 0xe8, 0xef, 0x7a, 0x75, 0x6b, 0xc1, 0x43, 0x9e, 0xf8, 0xbc,
- 0xd9, 0x74, 0xa1, 0x87, 0x3c, 0xf2, 0x2e, 0x62, 0xf0, 0xfb, 0x24, 0x18, 0x87, 0x39, 0x79, 0xf6,
- 0xba, 0x88, 0xf3, 0x84, 0x76, 0xa2, 0xe4, 0xdd, 0x4e, 0x0c, 0x07, 0x0f, 0xc7, 0x6a, 0xe9, 0x29,
- 0x6f, 0x36, 0x52, 0xf7, 0x29, 0x7d, 0x83, 0x04, 0x0f, 0xc7, 0x5a, 0x28, 0xe1, 0x4d, 0x67, 0x8d,
- 0x21, 0x6f, 0x20, 0x59, 0x7c, 0xd0, 0x07, 0x05, 0x29, 0xba, 0xf1, 0x66, 0xce, 0xdc, 0x1f, 0x86,
- 0xac, 0xb4, 0xce, 0xdd, 0xb7, 0x7b, 0xd2, 0x84, 0xdb, 0x09, 0x13, 0x9f, 0xb3, 0x38, 0x61, 0x65,
- 0xd0, 0xad, 0xa1, 0x7a, 0xb9, 0x75, 0x69, 0xcc, 0xed, 0x2e, 0xcf, 0x96, 0x8b, 0x5c, 0x77, 0x26,
- 0xe9, 0xd6, 0xa5, 0xba, 0xdd, 0x02, 0x1a, 0x1e, 0x0b, 0x5a, 0xb7, 0x32, 0xbd, 0x7c, 0x10, 0x36,
- 0xe3, 0x65, 0x95, 0x5b, 0xbd, 0x58, 0xba, 0x9e, 0x3a, 0x8c, 0x3a, 0xea, 0x09, 0x22, 0x69, 0xbb,
- 0x27, 0x0d, 0xcf, 0xe7, 0x1c, 0xb7, 0x26, 0x9e, 0x76, 0x3a, 0x6c, 0xb5, 0x42, 0xea, 0x51, 0x7f,
- 0x05, 0x78, 0x1a, 0xaa, 0xa3, 0xea, 0x30, 0xad, 0xc4, 0xf3, 0x34, 0xcb, 0x86, 0x5b, 0x81, 0x30,
- 0x69, 0xa0, 0xe0, 0x69, 0x28, 0x02, 0x13, 0x91, 0xdc, 0x9c, 0x1e, 0xe6, 0xc3, 0x2e, 0x3b, 0x92,
- 0xea, 0x15, 0xc9, 0x2e, 0x0d, 0x4e, 0xb4, 0x9c, 0xa6, 0x36, 0xb5, 0x1d, 0x85, 0x1b, 0xae, 0x55,
- 0xe1, 0x9d, 0xde, 0x3c, 0x78, 0xdc, 0x2e, 0x29, 0xb9, 0xb2, 0xdc, 0xa1, 0x4c, 0x78, 0x2b, 0xc9,
- 0xdd, 0x0e, 0x0a, 0x9c, 0x0a, 0xaa, 0x61, 0xf4, 0x32, 0x4d, 0xe6, 0x4c, 0xa0, 0x4f, 0x8a, 0x5c,
- 0x20, 0xf8, 0xa4, 0x08, 0x80, 0xa0, 0xeb, 0xd4, 0xdf, 0xcd, 0x71, 0xe8, 0x41, 0x82, 0x75, 0x9d,
- 0x56, 0x76, 0xa8, 0x50, 0xd7, 0xa1, 0x34, 0x98, 0x0d, 0x8c, 0x5b, 0xfd, 0x45, 0x87, 0x07, 0x21,
- 0x33, 0xe0, 0xb3, 0x0e, 0x5b, 0xbd, 0x58, 0xb0, 0xa2, 0x58, 0x87, 0xe9, 0x22, 0x15, 0xd8, 0x8a,
- 0xe2, 0xd8, 0xa8, 0x91, 0xd0, 0x8a, 0xd2, 0x46, 0xa9, 0xea, 0xd5, 0x39, 0xc2, 0x41, 0x12, 0xae,
- 0x9e, 0x62, 0xfa, 0x55, 0xcf, 0xb0, 0xad, 0x07, 0x9b, 0xb9, 0x09, 0x19, 0x71, 0xa9, 0x37, 0xcb,
- 0x48, 0x6c, 0xcb, 0x37, 0x7d, 0x21, 0x18, 0x9a, 0x75, 0x28, 0x05, 0x78, 0x60, 0x5f, 0x73, 0xcd,
- 0xb3, 0xd7, 0xa2, 0x60, 0x71, 0x19, 0xe7, 0x33, 0x74, 0x73, 0x2a, 0x0d, 0xb6, 0xc8, 0xd0, 0xe6,
- 0x94, 0xd4, 0x00, 0x8f, 0xcd, 0xfd, 0x57, 0x69, 0x91, 0xa1, 0x60, 0xde, 0x59, 0xf5, 0xdf, 0xa4,
- 0xbd, 0xdf, 0x83, 0x84, 0x8f, 0xcd, 0x1b, 0xc0, 0x1c, 0x7c, 0x2b, 0xa7, 0x1f, 0x06, 0x4c, 0xf9,
- 0x68, 0x68, 0x23, 0x4c, 0xab, 0x80, 0xa0, 0x36, 0x09, 0x2e, 0x13, 0x3f, 0x62, 0x6b, 0x2c, 0xa8,
- 0x6d, 0x7e, 0x2a, 0x91, 0x50, 0x50, 0xb7, 0x51, 0x90, 0x67, 0xba, 0xfb, 0xa0, 0x8d, 0x80, 0xbe,
- 0xbb, 0xf5, 0xd9, 0xec, 0xe4, 0xc0, 0xc8, 0xd9, 0x4b, 0x57, 0xde, 0x73, 0x02, 0xa4, 0xa0, 0x7b,
- 0xe9, 0x0a, 0x7f, 0x4c, 0xb0, 0xd5, 0x8b, 0x85, 0x8f, 0xe4, 0x63, 0xc1, 0x5e, 0x37, 0xcf, 0xca,
- 0x91, 0xe2, 0x4a, 0x79, 0xeb, 0x61, 0xf9, 0xbd, 0x6e, 0xd0, 0x5e, 0x80, 0x3d, 0x29, 0xf9, 0x8c,
- 0x55, 0x95, 0xfe, 0xd8, 0xa9, 0x7f, 0xc3, 0x48, 0xcb, 0x46, 0xe0, 0x53, 0xa7, 0x77, 0xc2, 0x90,
- 0xf3, 0x85, 0x42, 0x25, 0xb2, 0x1f, 0x4e, 0xda, 0x40, 0x35, 0xdb, 0xdf, 0x4c, 0xda, 0xec, 0xe4,
- 0xec, 0xf0, 0xd2, 0x52, 0xf7, 0x4b, 0x49, 0xf7, 0x50, 0x75, 0xec, 0x23, 0x49, 0xf7, 0x7b, 0x90,
- 0xda, 0xd5, 0xe7, 0xd1, 0x9b, 0x87, 0x7c, 0x3e, 0x61, 0x79, 0x32, 0xfc, 0x9e, 0x7f, 0x85, 0x96,
- 0xcf, 0x47, 0xf5, 0x9f, 0x8d, 0xd1, 0x1b, 0x94, 0xd8, 0x5e, 0x02, 0xdc, 0x63, 0xe7, 0xcb, 0xf9,
- 0x44, 0xc4, 0x02, 0x5c, 0x02, 0x94, 0x7f, 0x1f, 0xd5, 0x02, 0xe2, 0x12, 0xa0, 0x07, 0x00, 0x7b,
- 0xd3, 0x92, 0x31, 0xd4, 0x5e, 0x2d, 0x08, 0xda, 0xd3, 0x80, 0xcd, 0x22, 0x8c, 0xbd, 0x3a, 0x51,
- 0x87, 0x97, 0xf6, 0xac, 0x8e, 0x94, 0x12, 0x59, 0x44, 0x9b, 0xb2, 0xc1, 0xad, 0xaa, 0x2f, 0x3f,
- 0x5c, 0xb3, 0x5c, 0x2c, 0xe2, 0x72, 0x0d, 0x82, 0x5b, 0xd7, 0xd2, 0x01, 0x88, 0xe0, 0x46, 0x41,
- 0x3b, 0x6a, 0x9b, 0x66, 0x9e, 0x5d, 0xed, 0xf3, 0x92, 0x2f, 0x45, 0x9a, 0x33, 0xf8, 0xf1, 0x12,
- 0xd3, 0xa0, 0x2e, 0x43, 0x8c, 0x5a, 0x8a, 0xb5, 0x59, 0xae, 0x24, 0xd4, 0x7d, 0x42, 0xf9, 0xfd,
- 0xf5, 0x4a, 0xf0, 0x12, 0x3e, 0x4f, 0x54, 0x56, 0x20, 0x44, 0x64, 0xb9, 0x24, 0x0c, 0xfa, 0xfe,
- 0x24, 0xcd, 0xe7, 0x68, 0xdf, 0x9f, 0xb8, 0x1f, 0x10, 0xbe, 0x45, 0x03, 0x76, 0x40, 0xa9, 0x46,
- 0x53, 0x03, 0x40, 0xbf, 0xb5, 0x8b, 0x36, 0xba, 0x4b, 0x10, 0x03, 0x0a, 0x27, 0x81, 0xab, 0x2f,
- 0x0a, 0x96, 0xb3, 0xa4, 0xb9, 0x35, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0xb9, 0x48,
- 0xca, 0x4f, 0x97, 0xf9, 0x49, 0xc9, 0x2f, 0xd2, 0x8c, 0x95, 0x60, 0x2e, 0x52, 0xea, 0x8e, 0x9c,
- 0x98, 0x8b, 0x30, 0xce, 0x5e, 0xbf, 0x90, 0x52, 0xef, 0x47, 0x04, 0xa6, 0x65, 0x3c, 0x83, 0xd7,
- 0x2f, 0x94, 0x8d, 0x36, 0x46, 0x9c, 0x0c, 0x06, 0x70, 0x27, 0xd1, 0x51, 0xae, 0xf3, 0xb5, 0x8c,
- 0x0f, 0xfd, 0xd6, 0xa8, 0xfc, 0xac, 0x6e, 0x05, 0x12, 0x1d, 0x6d, 0x0e, 0x23, 0x89, 0x44, 0x27,
- 0xac, 0x61, 0x97, 0x12, 0xc9, 0x1d, 0xeb, 0x6b, 0x45, 0x60, 0x29, 0x51, 0x36, 0x1a, 0x21, 0xb1,
- 0x94, 0xb4, 0x20, 0x30, 0x21, 0x35, 0xc3, 0x60, 0x8e, 0x4e, 0x48, 0x46, 0x1a, 0x9c, 0x90, 0x5c,
- 0xca, 0x4e, 0x14, 0x07, 0x79, 0x2a, 0xd2, 0x38, 0x9b, 0x30, 0x71, 0x12, 0x97, 0xf1, 0x82, 0x09,
- 0x56, 0xc2, 0x89, 0x42, 0x23, 0x23, 0x8f, 0x21, 0x26, 0x0a, 0x8a, 0xd5, 0x0e, 0x7f, 0x33, 0x7a,
- 0xbb, 0x5e, 0xf7, 0x59, 0xae, 0x7f, 0xfe, 0xe8, 0x99, 0xfc, 0xdd, 0xb4, 0xe1, 0x3b, 0xc6, 0xc6,
- 0x44, 0x94, 0x2c, 0x5e, 0x34, 0xb6, 0xdf, 0x32, 0x7f, 0x97, 0xe0, 0xa3, 0x41, 0x1d, 0xcf, 0xc7,
- 0x5c, 0xa4, 0x17, 0xf5, 0x36, 0x5b, 0xbf, 0x41, 0x04, 0xe2, 0xd9, 0x15, 0x8f, 0x02, 0x5f, 0x1d,
- 0xc1, 0x38, 0x3b, 0x4f, 0xbb, 0xd2, 0x53, 0x56, 0x64, 0x70, 0x9e, 0xf6, 0xb4, 0x25, 0x40, 0xcc,
- 0xd3, 0x28, 0x68, 0x07, 0xa7, 0x2b, 0x9e, 0xb2, 0x70, 0x65, 0xa6, 0xac, 0x5f, 0x65, 0xa6, 0xde,
- 0x4b, 0x19, 0x59, 0xf4, 0xf6, 0x11, 0x5b, 0x9c, 0xb3, 0xb2, 0xba, 0x4c, 0x0b, 0xea, 0xd3, 0xbf,
- 0x96, 0xe8, 0xfc, 0xf4, 0x2f, 0x81, 0xda, 0x95, 0xc0, 0x02, 0x07, 0xd5, 0x71, 0xbc, 0x60, 0xf2,
- 0x1b, 0x2a, 0x60, 0x25, 0x70, 0x8c, 0x38, 0x10, 0xb1, 0x12, 0x90, 0xb0, 0xf3, 0x7e, 0x97, 0x65,
- 0x4e, 0xd9, 0xbc, 0x8e, 0xb0, 0xf2, 0x24, 0x5e, 0x2f, 0x58, 0x2e, 0xb4, 0x49, 0x70, 0x26, 0xef,
- 0x98, 0xc4, 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x33, 0x35, 0x79, 0x0d, 0x7f, 0xc2, 0x4b, 0xa1,
- 0x7e, 0xdc, 0xec, 0xac, 0xcc, 0xc0, 0xd4, 0xe4, 0x37, 0xaa, 0x47, 0x12, 0x53, 0x53, 0x58, 0xc3,
- 0xf9, 0x21, 0x0b, 0xaf, 0x0c, 0x2f, 0x58, 0x69, 0xe2, 0xe4, 0xd9, 0x22, 0x4e, 0x33, 0x1d, 0x0d,
- 0xdf, 0x0f, 0xd8, 0x26, 0x74, 0x88, 0x1f, 0xb2, 0xe8, 0xab, 0xeb, 0xfc, 0xf4, 0x47, 0xb8, 0x84,
- 0xe0, 0x11, 0x41, 0x87, 0x7d, 0xe2, 0x11, 0x41, 0xb7, 0x96, 0xdd, 0xb9, 0x5b, 0x56, 0x72, 0x6b,
- 0x49, 0xec, 0xf2, 0x04, 0x9e, 0x17, 0x3a, 0x36, 0x01, 0x48, 0xec, 0xdc, 0x83, 0x0a, 0x36, 0x35,
- 0xb0, 0xd8, 0xf3, 0x34, 0x8f, 0xb3, 0xf4, 0x27, 0x30, 0xad, 0x77, 0xec, 0x34, 0x04, 0x91, 0x1a,
- 0xe0, 0x24, 0xe6, 0x6a, 0x9f, 0x89, 0x69, 0x5a, 0x4f, 0xfd, 0xf7, 0x02, 0xed, 0x26, 0x89, 0x6e,
- 0x57, 0x0e, 0xe9, 0x7c, 0xe6, 0x17, 0x36, 0xeb, 0xb8, 0x28, 0x26, 0xf5, 0xaa, 0x7a, 0xca, 0x66,
- 0x2c, 0x2d, 0xc4, 0xf0, 0xe3, 0x70, 0x5b, 0x01, 0x9c, 0xb8, 0x68, 0xd1, 0x43, 0xcd, 0x79, 0x7c,
- 0x5f, 0xcf, 0x25, 0x13, 0xf5, 0xab, 0x9f, 0x67, 0x15, 0x2b, 0x75, 0xa2, 0xb1, 0xcf, 0x04, 0x18,
- 0x9d, 0x0e, 0x37, 0x72, 0xc0, 0xba, 0xa2, 0xc4, 0xe8, 0x0c, 0x6b, 0xd8, 0xc3, 0x3e, 0x87, 0xd3,
- 0x9f, 0x6d, 0x97, 0xf7, 0x0d, 0x1f, 0x92, 0xc6, 0x1c, 0x8a, 0x38, 0xec, 0xa3, 0x69, 0x9b, 0xad,
- 0xb5, 0xdd, 0x8e, 0xf3, 0xf5, 0x01, 0xbc, 0x32, 0x81, 0x58, 0x92, 0x18, 0x91, 0xad, 0x05, 0x70,
- 0xe7, 0x30, 0xbc, 0xe4, 0x71, 0x32, 0x8b, 0x2b, 0x71, 0x12, 0xaf, 0x33, 0x1e, 0x27, 0x72, 0x5d,
- 0x87, 0x87, 0xe1, 0x0d, 0x33, 0x72, 0x21, 0xea, 0x30, 0x9c, 0x82, 0xdd, 0xec, 0x4c, 0xfe, 0x98,
- 0xa9, 0xbe, 0xcb, 0x09, 0xb3, 0x33, 0x59, 0x5e, 0x78, 0x8f, 0xf3, 0x4e, 0x18, 0xb2, 0xef, 0xa0,
- 0x29, 0x91, 0x4c, 0x43, 0x6e, 0x61, 0x3a, 0x5e, 0x02, 0xf2, 0x7e, 0x80, 0xb0, 0x5f, 0x20, 0x51,
- 0x7f, 0x6f, 0x7e, 0xbf, 0x4a, 0xe8, 0x8f, 0xa1, 0x3f, 0xc4, 0x74, 0x5d, 0x68, 0xe4, 0x7e, 0xc8,
- 0x62, 0xbb, 0x27, 0x6d, 0xd3, 0xcc, 0xdd, 0xcb, 0x58, 0x8c, 0x93, 0xe4, 0x88, 0x55, 0xc8, 0x0b,
- 0xe5, 0xb5, 0x70, 0x64, 0xa5, 0x44, 0x9a, 0xd9, 0xa6, 0x6c, 0xa0, 0xd7, 0xb2, 0x67, 0x49, 0x2a,
- 0xb4, 0xac, 0xb9, 0x21, 0xfd, 0xb0, 0x6d, 0xa0, 0x4d, 0x11, 0xb5, 0xa2, 0x69, 0x3b, 0x97, 0xd7,
- 0xcc, 0x94, 0xcf, 0xe7, 0x19, 0xd3, 0xd0, 0x29, 0x8b, 0xd5, 0xb7, 0x20, 0x77, 0xda, 0xb6, 0x50,
- 0x90, 0x98, 0xcb, 0x83, 0x0a, 0x36, 0x8d, 0xac, 0x31, 0xf5, 0x48, 0xaa, 0x69, 0xd8, 0xcd, 0xb6,
- 0x19, 0x0f, 0x20, 0xd2, 0x48, 0x14, 0xb4, 0xef, 0xbd, 0xd5, 0xe2, 0x7d, 0xd6, 0xb4, 0x04, 0xfc,
- 0xd8, 0x94, 0x54, 0x76, 0xc4, 0xc4, 0x7b, 0x6f, 0x08, 0x66, 0xf7, 0x09, 0xc0, 0xc3, 0xd3, 0xf5,
- 0x41, 0x02, 0xf7, 0x09, 0x50, 0x5f, 0x32, 0xc4, 0x3e, 0x81, 0x62, 0xfd, 0xae, 0x33, 0xe7, 0x5e,
- 0x87, 0x71, 0x65, 0x2b, 0x87, 0x74, 0x1d, 0x0a, 0x86, 0xba, 0x8e, 0x52, 0xf0, 0x9b, 0xd4, 0x3d,
- 0x5a, 0x43, 0x9a, 0x14, 0x3b, 0x57, 0xdb, 0xe8, 0xc2, 0x6c, 0xee, 0x5f, 0x0b, 0x4f, 0x59, 0x9c,
- 0x98, 0x8a, 0x21, 0xba, 0xae, 0x9c, 0xc8, 0xfd, 0x31, 0x4e, 0x3b, 0xf9, 0x9d, 0x68, 0xa8, 0xaa,
- 0x51, 0xba, 0x6e, 0x6e, 0x61, 0x45, 0xac, 0x09, 0x62, 0xa2, 0xf2, 0x09, 0x27, 0x71, 0xf3, 0xba,
- 0x68, 0xca, 0xb5, 0x03, 0xfd, 0x5e, 0x66, 0x05, 0x12, 0x37, 0xbf, 0xd9, 0x5b, 0x34, 0x91, 0xb8,
- 0x75, 0x6b, 0xd9, 0x79, 0xde, 0xec, 0xcf, 0xe5, 0x15, 0x30, 0xfc, 0x47, 0x35, 0x94, 0x90, 0x98,
- 0xe7, 0x5b, 0x90, 0xb2, 0xfd, 0xf4, 0xfd, 0xff, 0xf8, 0xea, 0xc6, 0xe0, 0x67, 0x5f, 0xdd, 0x18,
- 0xfc, 0xf7, 0x57, 0x37, 0x06, 0x3f, 0xfd, 0xfa, 0xc6, 0x1b, 0x3f, 0xfb, 0xfa, 0xc6, 0x1b, 0xff,
- 0xf5, 0xf5, 0x8d, 0x37, 0xbe, 0x7c, 0x53, 0xff, 0x68, 0xf8, 0xf9, 0xff, 0x93, 0x3f, 0xfd, 0xfd,
- 0xe4, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x14, 0xc2, 0x04, 0x4c, 0x58, 0x7c, 0x00, 0x00,
+ // 5713 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x9d, 0xdd, 0x6f, 0x24, 0x49,
+ 0x52, 0xc0, 0xd7, 0x2f, 0x2c, 0xd4, 0x71, 0x0b, 0xf4, 0xc2, 0xb2, 0xb7, 0xdc, 0xcd, 0xcc, 0xce,
+ 0x87, 0x3d, 0x33, 0x1e, 0xb7, 0x67, 0x67, 0xf6, 0x8b, 0x3b, 0x24, 0xe8, 0xb1, 0xc7, 0xde, 0xbe,
+ 0xb5, 0xbd, 0xc6, 0xdd, 0x9e, 0x11, 0x2b, 0x21, 0x51, 0xee, 0x4a, 0xb7, 0x0b, 0x57, 0x57, 0xd6,
+ 0x55, 0x65, 0x7b, 0xa6, 0x0f, 0x81, 0x40, 0x20, 0x10, 0x08, 0xc4, 0x89, 0x2f, 0xc1, 0x13, 0x12,
+ 0x7f, 0x01, 0x7f, 0x06, 0x8f, 0xf7, 0x78, 0x8f, 0x68, 0xf7, 0xef, 0x40, 0x42, 0x95, 0x95, 0x9f,
+ 0x51, 0x11, 0x59, 0xe5, 0xbd, 0xa7, 0x19, 0x39, 0x7e, 0x11, 0x91, 0x1f, 0x91, 0x99, 0x91, 0x59,
+ 0x59, 0xd5, 0xd1, 0xcd, 0xe2, 0x6c, 0xbb, 0x28, 0xb9, 0xe0, 0xd5, 0x76, 0xc5, 0xca, 0xab, 0x74,
+ 0xc6, 0xf4, 0xbf, 0x43, 0xf9, 0xe7, 0xc1, 0x9b, 0x71, 0xbe, 0x12, 0xab, 0x82, 0xbd, 0xf7, 0xae,
+ 0x25, 0x67, 0x7c, 0xb1, 0x88, 0xf3, 0xa4, 0x6a, 0x90, 0xf7, 0xde, 0xb1, 0x12, 0x76, 0xc5, 0x72,
+ 0xa1, 0xfe, 0xfe, 0xe4, 0x67, 0xff, 0xb7, 0x16, 0xbd, 0xb5, 0x93, 0xa5, 0x2c, 0x17, 0x3b, 0x4a,
+ 0x63, 0xf0, 0x65, 0xf4, 0xed, 0x51, 0x51, 0xec, 0x33, 0xf1, 0x82, 0x95, 0x55, 0xca, 0xf3, 0xc1,
+ 0x9d, 0xa1, 0x72, 0x30, 0x3c, 0x29, 0x66, 0xc3, 0x51, 0x51, 0x0c, 0xad, 0x70, 0x78, 0xc2, 0x7e,
+ 0xb4, 0x64, 0x95, 0x78, 0xef, 0x6e, 0x18, 0xaa, 0x0a, 0x9e, 0x57, 0x6c, 0x70, 0x1e, 0xfd, 0xda,
+ 0xa8, 0x28, 0x26, 0x4c, 0xec, 0xb2, 0xba, 0x02, 0x13, 0x11, 0x0b, 0x36, 0xd8, 0x68, 0xa9, 0xfa,
+ 0x80, 0xf1, 0x71, 0xbf, 0x1b, 0x54, 0x7e, 0xa6, 0xd1, 0xb7, 0x6a, 0x3f, 0x17, 0x4b, 0x91, 0xf0,
+ 0x57, 0xf9, 0xe0, 0xfd, 0xb6, 0xa2, 0x12, 0x19, 0xdb, 0xb7, 0x43, 0x88, 0xb2, 0xfa, 0x32, 0xfa,
+ 0xe5, 0x97, 0x71, 0x96, 0x31, 0xb1, 0x53, 0xb2, 0xba, 0xe0, 0xbe, 0x4e, 0x23, 0x1a, 0x36, 0x32,
+ 0x63, 0xf7, 0x4e, 0x90, 0x51, 0x86, 0xbf, 0x8c, 0xbe, 0xdd, 0x48, 0x4e, 0xd8, 0x8c, 0x5f, 0xb1,
+ 0x72, 0x80, 0x6a, 0x29, 0x21, 0xd1, 0xe4, 0x2d, 0x08, 0xda, 0xde, 0xe1, 0xf9, 0x15, 0x2b, 0x05,
+ 0x6e, 0x5b, 0x09, 0xc3, 0xb6, 0x2d, 0xa4, 0x6c, 0xff, 0xed, 0x5a, 0xf4, 0xdd, 0xd1, 0x6c, 0xc6,
+ 0x97, 0xb9, 0x38, 0xe0, 0xb3, 0x38, 0x3b, 0x48, 0xf3, 0xcb, 0x23, 0xf6, 0x6a, 0xe7, 0xa2, 0xe6,
+ 0xf3, 0x39, 0x1b, 0x3c, 0xf5, 0x5b, 0xb5, 0x41, 0x87, 0x86, 0x1d, 0xba, 0xb0, 0xf1, 0xfd, 0xe1,
+ 0xf5, 0x94, 0x54, 0x59, 0xfe, 0x71, 0x2d, 0xba, 0x01, 0xcb, 0x32, 0xe1, 0xd9, 0x15, 0xb3, 0xa5,
+ 0xf9, 0xa8, 0xc3, 0xb0, 0x8f, 0x9b, 0xf2, 0x7c, 0x7c, 0x5d, 0x35, 0x55, 0xa2, 0x2c, 0x7a, 0xdb,
+ 0x0d, 0x97, 0x09, 0xab, 0xe4, 0x70, 0x7a, 0x40, 0x47, 0x84, 0x42, 0x8c, 0xe7, 0x87, 0x7d, 0x50,
+ 0xe5, 0x2d, 0x8d, 0x06, 0xca, 0x5b, 0xc6, 0x2b, 0xe3, 0xec, 0x3e, 0x6a, 0xc1, 0x21, 0x8c, 0xaf,
+ 0x07, 0x3d, 0x48, 0xe5, 0xea, 0x8f, 0xa2, 0x5f, 0x79, 0xc9, 0xcb, 0xcb, 0xaa, 0x88, 0x67, 0x4c,
+ 0x0d, 0x85, 0x7b, 0xbe, 0xb6, 0x96, 0xc2, 0xd1, 0xb0, 0xde, 0x85, 0x39, 0x41, 0xab, 0x85, 0x5f,
+ 0x14, 0x0c, 0xce, 0x41, 0x56, 0xb1, 0x16, 0x52, 0x41, 0x0b, 0x21, 0x65, 0xfb, 0x32, 0x1a, 0x58,
+ 0xdb, 0x67, 0x7f, 0xcc, 0x66, 0x62, 0x94, 0x24, 0xb0, 0x57, 0xac, 0xae, 0x24, 0x86, 0xa3, 0x24,
+ 0xa1, 0x7a, 0x05, 0x47, 0x95, 0xb3, 0x57, 0xd1, 0x3b, 0xc0, 0xd9, 0x41, 0x5a, 0x49, 0x87, 0x5b,
+ 0x61, 0x2b, 0x0a, 0x33, 0x4e, 0x87, 0x7d, 0x71, 0xe5, 0xf8, 0xcf, 0xd7, 0xa2, 0xef, 0x20, 0x9e,
+ 0x4f, 0xd8, 0x82, 0x5f, 0xb1, 0xc1, 0xe3, 0x6e, 0x6b, 0x0d, 0x69, 0xfc, 0x7f, 0x70, 0x0d, 0x0d,
+ 0x24, 0x4c, 0x26, 0x2c, 0x63, 0x33, 0x41, 0x86, 0x49, 0x23, 0xee, 0x0c, 0x13, 0x83, 0x39, 0x23,
+ 0x4c, 0x0b, 0xf7, 0x99, 0xd8, 0x59, 0x96, 0x25, 0xcb, 0x05, 0xd9, 0x97, 0x16, 0xe9, 0xec, 0x4b,
+ 0x0f, 0x45, 0xea, 0xb3, 0xcf, 0xc4, 0x28, 0xcb, 0xc8, 0xfa, 0x34, 0xe2, 0xce, 0xfa, 0x18, 0x4c,
+ 0x79, 0x98, 0x45, 0xbf, 0xea, 0xb4, 0x98, 0x18, 0xe7, 0xe7, 0x7c, 0x40, 0xb7, 0x85, 0x94, 0x1b,
+ 0x1f, 0x1b, 0x9d, 0x1c, 0x52, 0x8d, 0xe7, 0xaf, 0x0b, 0x5e, 0xd2, 0xdd, 0xd2, 0x88, 0x3b, 0xab,
+ 0x61, 0x30, 0xe5, 0xe1, 0x0f, 0xa3, 0xb7, 0xd4, 0x2c, 0xa9, 0xd7, 0xb3, 0xbb, 0xe8, 0x14, 0x0a,
+ 0x17, 0xb4, 0x7b, 0x1d, 0x54, 0xcb, 0xfc, 0x61, 0x3a, 0x2f, 0xeb, 0xd9, 0x07, 0x37, 0xaf, 0xa4,
+ 0x1d, 0xe6, 0x2d, 0xa5, 0xcc, 0xf3, 0xe8, 0xd7, 0x7d, 0xf3, 0x3b, 0x71, 0x3e, 0x63, 0xd9, 0xe0,
+ 0x61, 0x48, 0xbd, 0x61, 0x8c, 0xab, 0xcd, 0x5e, 0xac, 0x9d, 0xec, 0x14, 0xa1, 0x26, 0xd3, 0x3b,
+ 0xa8, 0x36, 0x98, 0x4a, 0xef, 0x86, 0xa1, 0x96, 0xed, 0x5d, 0x96, 0x31, 0xd2, 0x76, 0x23, 0xec,
+ 0xb0, 0x6d, 0x20, 0x65, 0xbb, 0x8c, 0x7e, 0xc3, 0x74, 0x73, 0x9d, 0x17, 0x48, 0x79, 0xbd, 0xe8,
+ 0x6c, 0x12, 0xfd, 0xe8, 0x42, 0xc6, 0xd7, 0xa3, 0x7e, 0x70, 0xab, 0x3e, 0x6a, 0x46, 0xc1, 0xeb,
+ 0x03, 0xe6, 0x93, 0xbb, 0x61, 0x48, 0xd9, 0xfe, 0xbb, 0xb5, 0xe8, 0x7b, 0x4a, 0xf6, 0x3c, 0x8f,
+ 0xcf, 0x32, 0x26, 0x97, 0xf8, 0x23, 0x26, 0x5e, 0xf1, 0xf2, 0x72, 0xb2, 0xca, 0x67, 0x44, 0x3a,
+ 0x83, 0xc3, 0x1d, 0xe9, 0x0c, 0xa9, 0xa4, 0x0a, 0xf3, 0x27, 0xd1, 0xbb, 0x3a, 0x28, 0x2e, 0xe2,
+ 0x7c, 0xce, 0x7e, 0x58, 0xf1, 0x7c, 0x54, 0xa4, 0xa3, 0x24, 0x29, 0x07, 0x43, 0xbc, 0xeb, 0x21,
+ 0x67, 0x4a, 0xb0, 0xdd, 0x9b, 0x77, 0xd2, 0x67, 0xd5, 0xca, 0x82, 0x17, 0x30, 0x7d, 0xd6, 0xcd,
+ 0x27, 0x78, 0x41, 0xa5, 0xcf, 0x3e, 0xd2, 0xb2, 0x7a, 0x58, 0xaf, 0x41, 0xb8, 0xd5, 0x43, 0x77,
+ 0xd1, 0xb9, 0x1d, 0x42, 0xec, 0x1a, 0xa0, 0x1b, 0x8a, 0xe7, 0xe7, 0xe9, 0xfc, 0xb4, 0x48, 0xea,
+ 0x31, 0xf4, 0x00, 0xaf, 0xb3, 0x83, 0x10, 0x6b, 0x00, 0x81, 0x2a, 0x6f, 0xff, 0x60, 0xb3, 0x4c,
+ 0x35, 0x2f, 0xed, 0x95, 0x7c, 0x71, 0xc0, 0xe6, 0xf1, 0x6c, 0xa5, 0x26, 0xd3, 0x0f, 0x43, 0xb3,
+ 0x18, 0xa4, 0x4d, 0x21, 0x3e, 0xba, 0xa6, 0x96, 0x2a, 0xcf, 0x7f, 0xae, 0x45, 0x77, 0xbd, 0x38,
+ 0x51, 0xc1, 0xd4, 0x94, 0x7e, 0x94, 0x27, 0x27, 0xac, 0x12, 0x71, 0x29, 0x06, 0xdf, 0x0f, 0xc4,
+ 0x00, 0xa1, 0x63, 0xca, 0xf6, 0x83, 0x6f, 0xa4, 0x6b, 0x7b, 0x7d, 0x52, 0xaf, 0x12, 0x6a, 0xfe,
+ 0xf1, 0x7b, 0x5d, 0x4a, 0xe0, 0xec, 0x73, 0x3b, 0x84, 0xd8, 0x5e, 0x97, 0x82, 0x71, 0x7e, 0x95,
+ 0x0a, 0xb6, 0xcf, 0x72, 0x56, 0xb6, 0x7b, 0xbd, 0x51, 0xf5, 0x11, 0xa2, 0xd7, 0x09, 0xd4, 0xce,
+ 0x74, 0x9e, 0x37, 0x93, 0x69, 0x6c, 0x06, 0x8c, 0xb4, 0x72, 0x8d, 0x47, 0xfd, 0x60, 0xa2, 0x86,
+ 0x62, 0xbf, 0x36, 0x12, 0xac, 0x61, 0x83, 0xf4, 0xaa, 0xa1, 0x41, 0xed, 0xc6, 0xdc, 0xf1, 0x76,
+ 0xc2, 0xae, 0xf8, 0x25, 0xdc, 0x98, 0xbb, 0x06, 0x1a, 0x80, 0xd8, 0x98, 0xa3, 0xa0, 0x4d, 0x3e,
+ 0x1c, 0x3f, 0x2f, 0x52, 0xf6, 0x0a, 0x24, 0x1f, 0xae, 0x72, 0x2d, 0x26, 0x92, 0x0f, 0x04, 0x53,
+ 0x1e, 0x8e, 0xa2, 0x5f, 0x92, 0xc2, 0x1f, 0xf2, 0x34, 0x1f, 0xdc, 0x44, 0x94, 0x6a, 0x81, 0xb1,
+ 0x7a, 0x8b, 0x06, 0x40, 0x89, 0xeb, 0xbf, 0xaa, 0x4c, 0xe0, 0x1e, 0xa1, 0x04, 0x92, 0x80, 0xf5,
+ 0x2e, 0xcc, 0x66, 0x7d, 0x52, 0x58, 0xcf, 0x96, 0x93, 0x8b, 0xb8, 0x4c, 0xf3, 0xf9, 0x00, 0xd3,
+ 0x75, 0xe4, 0x44, 0xd6, 0x87, 0x71, 0x20, 0x9c, 0x94, 0xe2, 0xa8, 0x28, 0xca, 0x7a, 0x12, 0xc6,
+ 0xc2, 0xc9, 0x47, 0x82, 0xe1, 0xd4, 0x42, 0x71, 0x6f, 0xbb, 0x6c, 0x96, 0xa5, 0x79, 0xd0, 0x9b,
+ 0x42, 0xfa, 0x78, 0xb3, 0x28, 0x08, 0xde, 0x03, 0x16, 0x5f, 0x31, 0x5d, 0x33, 0xac, 0x65, 0x5c,
+ 0x20, 0x18, 0xbc, 0x00, 0xb4, 0x5b, 0x6c, 0x29, 0x3e, 0x8c, 0x2f, 0x59, 0xdd, 0xc0, 0xac, 0x5e,
+ 0xc2, 0x07, 0x98, 0xbe, 0x47, 0x10, 0x5b, 0x6c, 0x9c, 0x54, 0xae, 0x96, 0xd1, 0x3b, 0x52, 0x7e,
+ 0x1c, 0x97, 0x22, 0x9d, 0xa5, 0x45, 0x9c, 0xeb, 0xad, 0x1b, 0x36, 0x8b, 0xb4, 0x28, 0xe3, 0x72,
+ 0xab, 0x27, 0xad, 0xdc, 0xfe, 0xdb, 0x5a, 0xf4, 0x3e, 0xf4, 0x7b, 0xcc, 0xca, 0x45, 0x2a, 0x4f,
+ 0x00, 0xaa, 0x66, 0xca, 0x1f, 0x7c, 0x12, 0x36, 0xda, 0x52, 0x30, 0xa5, 0xf9, 0xf4, 0xfa, 0x8a,
+ 0x36, 0xef, 0x9b, 0xa8, 0x5d, 0xd1, 0x17, 0x65, 0xd2, 0x3a, 0x21, 0x9b, 0xe8, 0xad, 0x8e, 0x14,
+ 0x12, 0x79, 0x5f, 0x0b, 0x02, 0x23, 0xfc, 0x34, 0xaf, 0xb4, 0x75, 0x6c, 0x84, 0x5b, 0x71, 0x70,
+ 0x84, 0x7b, 0x98, 0x1d, 0xe1, 0xc7, 0xcb, 0xb3, 0x2c, 0xad, 0x2e, 0xd2, 0x7c, 0xae, 0x92, 0x7c,
+ 0x5f, 0xd7, 0x8a, 0x61, 0x9e, 0xbf, 0xd1, 0xc9, 0x61, 0x4e, 0x54, 0xb0, 0x90, 0x4e, 0x40, 0x98,
+ 0x6c, 0x74, 0x72, 0x76, 0xef, 0x65, 0xa5, 0xf5, 0xa6, 0x1f, 0xec, 0xbd, 0x1c, 0xd5, 0x5a, 0x4a,
+ 0xec, 0xbd, 0xda, 0x94, 0xdd, 0x7b, 0xb9, 0x75, 0xa8, 0x78, 0x76, 0xc5, 0x4e, 0xcb, 0x14, 0xec,
+ 0xbd, 0xbc, 0xf2, 0x69, 0x86, 0xd8, 0x7b, 0x51, 0xac, 0x9d, 0xa8, 0x2c, 0xb1, 0xcf, 0xc4, 0x44,
+ 0xc4, 0x62, 0x59, 0x81, 0x89, 0xca, 0xb1, 0x61, 0x10, 0x62, 0xa2, 0x22, 0x50, 0xe5, 0xed, 0xf7,
+ 0xa3, 0xa8, 0x39, 0x2f, 0x91, 0x67, 0x5a, 0xfe, 0xda, 0xa3, 0x0e, 0x52, 0xbc, 0x03, 0xad, 0xf7,
+ 0x03, 0x84, 0x4d, 0xaf, 0x9a, 0xbf, 0xcb, 0xa3, 0xba, 0x01, 0xaa, 0x21, 0x45, 0x44, 0x7a, 0x05,
+ 0x10, 0x58, 0xd0, 0xc9, 0x05, 0x7f, 0x85, 0x17, 0xb4, 0x96, 0x84, 0x0b, 0xaa, 0x08, 0x7b, 0x78,
+ 0xae, 0x0a, 0x8a, 0x1d, 0x9e, 0xeb, 0x62, 0x84, 0x0e, 0xcf, 0x21, 0x63, 0x63, 0xc6, 0x35, 0xfc,
+ 0x8c, 0xf3, 0xcb, 0x45, 0x5c, 0x5e, 0x82, 0x98, 0xf1, 0x94, 0x35, 0x43, 0xc4, 0x0c, 0xc5, 0xda,
+ 0x98, 0x71, 0x1d, 0xd6, 0xc9, 0xf9, 0x69, 0x99, 0x81, 0x98, 0xf1, 0x6c, 0x28, 0x84, 0x88, 0x19,
+ 0x02, 0xb5, 0xb3, 0x93, 0xeb, 0x6d, 0xc2, 0xe0, 0x71, 0x8d, 0xa7, 0x3e, 0x61, 0xd4, 0x71, 0x0d,
+ 0x82, 0xc1, 0x10, 0xda, 0x2f, 0xe3, 0xe2, 0x02, 0x0f, 0x21, 0x29, 0x0a, 0x87, 0x90, 0x46, 0x60,
+ 0x7f, 0x4f, 0x58, 0x5c, 0xce, 0x2e, 0xf0, 0xfe, 0x6e, 0x64, 0xe1, 0xfe, 0x36, 0x0c, 0xec, 0xef,
+ 0x46, 0xf0, 0x32, 0x15, 0x17, 0x87, 0x4c, 0xc4, 0x78, 0x7f, 0xfb, 0x4c, 0xb8, 0xbf, 0x5b, 0xac,
+ 0xcd, 0xfe, 0x5d, 0x87, 0x93, 0xe5, 0x59, 0x35, 0x2b, 0xd3, 0x33, 0x36, 0x08, 0x58, 0x31, 0x10,
+ 0x91, 0xfd, 0x93, 0xb0, 0xf2, 0xf9, 0x93, 0xb5, 0xe8, 0xa6, 0xee, 0x76, 0x5e, 0x55, 0x6a, 0xed,
+ 0xf3, 0xdd, 0x7f, 0x84, 0xf7, 0x2f, 0x81, 0x13, 0x8f, 0x33, 0x7a, 0xa8, 0x39, 0xb9, 0x01, 0x5e,
+ 0xa4, 0xd3, 0xbc, 0x32, 0x85, 0xfa, 0xa4, 0x8f, 0x75, 0x47, 0x81, 0xc8, 0x0d, 0x7a, 0x29, 0xda,
+ 0xb4, 0x4c, 0xf5, 0x8f, 0x96, 0x8d, 0x93, 0x0a, 0xa4, 0x65, 0xba, 0xbd, 0x1d, 0x82, 0x48, 0xcb,
+ 0x70, 0x12, 0x86, 0xc2, 0x7e, 0xc9, 0x97, 0x45, 0xd5, 0x11, 0x0a, 0x00, 0x0a, 0x87, 0x42, 0x1b,
+ 0x56, 0x3e, 0x5f, 0x47, 0xbf, 0xe9, 0x86, 0x9f, 0xdb, 0xd8, 0x5b, 0x74, 0x4c, 0x61, 0x4d, 0x3c,
+ 0xec, 0x8b, 0xdb, 0x8c, 0x42, 0x7b, 0x16, 0xbb, 0x4c, 0xc4, 0x69, 0x56, 0x0d, 0xd6, 0x71, 0x1b,
+ 0x5a, 0x4e, 0x64, 0x14, 0x18, 0x07, 0xe7, 0xb7, 0xdd, 0x65, 0x91, 0xa5, 0xb3, 0xf6, 0xc3, 0x24,
+ 0xa5, 0x6b, 0xc4, 0xe1, 0xf9, 0xcd, 0xc5, 0xe0, 0x7c, 0x5d, 0xa7, 0x7e, 0xf2, 0x3f, 0xd3, 0x55,
+ 0xc1, 0xf0, 0xf9, 0xda, 0x43, 0xc2, 0xf3, 0x35, 0x44, 0x61, 0x7d, 0x26, 0x4c, 0x1c, 0xc4, 0x2b,
+ 0xbe, 0x24, 0xe6, 0x6b, 0x23, 0x0e, 0xd7, 0xc7, 0xc5, 0xec, 0xde, 0xc0, 0x78, 0x18, 0xe7, 0x82,
+ 0x95, 0x79, 0x9c, 0xed, 0x65, 0xf1, 0xbc, 0x1a, 0x10, 0x73, 0x8c, 0x4f, 0x11, 0x7b, 0x03, 0x9a,
+ 0x46, 0x9a, 0x71, 0x5c, 0xed, 0xc5, 0x57, 0xbc, 0x4c, 0x05, 0xdd, 0x8c, 0x16, 0xe9, 0x6c, 0x46,
+ 0x0f, 0x45, 0xbd, 0x8d, 0xca, 0xd9, 0x45, 0x7a, 0xc5, 0x92, 0x80, 0x37, 0x8d, 0xf4, 0xf0, 0xe6,
+ 0xa0, 0x48, 0xa7, 0x4d, 0xf8, 0xb2, 0x9c, 0x31, 0xb2, 0xd3, 0x1a, 0x71, 0x67, 0xa7, 0x19, 0x4c,
+ 0x79, 0xf8, 0xab, 0xb5, 0xe8, 0xb7, 0x1a, 0xa9, 0xfb, 0x84, 0x67, 0x37, 0xae, 0x2e, 0xce, 0x78,
+ 0x5c, 0x26, 0x83, 0x0f, 0x30, 0x3b, 0x28, 0x6a, 0x5c, 0x3f, 0xb9, 0x8e, 0x0a, 0x6c, 0xd6, 0x3a,
+ 0xef, 0xb6, 0x23, 0x0e, 0x6d, 0x56, 0x0f, 0x09, 0x37, 0x2b, 0x44, 0xe1, 0x04, 0x22, 0xe5, 0xcd,
+ 0x01, 0xe0, 0x3a, 0xa9, 0xef, 0x9f, 0x02, 0x6e, 0x74, 0x72, 0x70, 0x7e, 0xac, 0x85, 0x7e, 0xb4,
+ 0x6c, 0x51, 0x36, 0xf0, 0x88, 0x19, 0xf6, 0xc5, 0x49, 0xcf, 0x66, 0x54, 0x84, 0x3d, 0xb7, 0x46,
+ 0xc6, 0xb0, 0x2f, 0x4e, 0x78, 0x76, 0xa6, 0xb5, 0x90, 0x67, 0x64, 0x6a, 0x1b, 0xf6, 0xc5, 0x61,
+ 0xf6, 0xa5, 0x18, 0xbd, 0x2e, 0x3c, 0x0c, 0xd8, 0x81, 0x6b, 0xc3, 0x66, 0x2f, 0x56, 0x39, 0xfc,
+ 0x9b, 0xb5, 0xe8, 0xbb, 0xd6, 0xe3, 0x21, 0x4f, 0xd2, 0xf3, 0x55, 0x03, 0xbd, 0x88, 0xb3, 0x25,
+ 0xab, 0x06, 0x4f, 0x28, 0x6b, 0x6d, 0xd6, 0x94, 0xe0, 0xe9, 0xb5, 0x74, 0xe0, 0xd8, 0x19, 0x15,
+ 0x45, 0xb6, 0x9a, 0xb2, 0x45, 0x91, 0x91, 0x63, 0xc7, 0x43, 0xc2, 0x63, 0x07, 0xa2, 0x30, 0x2b,
+ 0x9f, 0xf2, 0x3a, 0xe7, 0x47, 0xb3, 0x72, 0x29, 0x0a, 0x67, 0xe5, 0x1a, 0x81, 0xb9, 0xd2, 0x94,
+ 0xef, 0xf0, 0x2c, 0x63, 0x33, 0xd1, 0xbe, 0x25, 0x62, 0x34, 0x2d, 0x11, 0xce, 0x95, 0x00, 0x69,
+ 0x4f, 0xe5, 0xf4, 0x1e, 0x32, 0x2e, 0xd9, 0xb3, 0xd5, 0x41, 0x9a, 0x5f, 0x0e, 0xf0, 0xb4, 0xc0,
+ 0x02, 0xc4, 0xa9, 0x1c, 0x0a, 0xc2, 0xbd, 0xea, 0x69, 0x9e, 0x70, 0x7c, 0xaf, 0x5a, 0x4b, 0xc2,
+ 0x7b, 0x55, 0x45, 0x40, 0x93, 0x27, 0x8c, 0x32, 0x59, 0x4b, 0xc2, 0x26, 0x15, 0x81, 0x4d, 0x85,
+ 0xea, 0x49, 0x11, 0x39, 0x15, 0x82, 0x67, 0x43, 0x1b, 0x9d, 0x1c, 0xdc, 0x73, 0x29, 0x07, 0x68,
+ 0x44, 0x00, 0xe3, 0x77, 0x82, 0x0c, 0x0c, 0x7d, 0xbd, 0x1b, 0xde, 0x63, 0x62, 0x76, 0x81, 0x87,
+ 0xbe, 0x87, 0x84, 0x43, 0x1f, 0xa2, 0xb0, 0xad, 0xa6, 0xdc, 0xec, 0xe6, 0xd7, 0xf1, 0xc0, 0x6b,
+ 0xed, 0xe4, 0x37, 0x3a, 0x39, 0xd8, 0x56, 0xe3, 0x05, 0xdd, 0x56, 0x8d, 0x2c, 0xdc, 0x56, 0x86,
+ 0x81, 0xa5, 0x6f, 0x04, 0xf2, 0x90, 0x6c, 0x9d, 0x56, 0xf4, 0x8e, 0xc9, 0x36, 0x3a, 0x39, 0xe5,
+ 0xe4, 0x5f, 0xcc, 0xfe, 0xb0, 0x91, 0x1e, 0xf1, 0x7a, 0xf0, 0xbd, 0x88, 0xb3, 0x34, 0x89, 0x05,
+ 0x9b, 0xf2, 0x4b, 0x96, 0xe3, 0x5b, 0x31, 0x55, 0xda, 0x86, 0x1f, 0x7a, 0x0a, 0xe1, 0xad, 0x58,
+ 0x58, 0x11, 0xc6, 0x49, 0x43, 0x9f, 0x56, 0x6c, 0x27, 0xae, 0x88, 0x29, 0xd2, 0x43, 0xc2, 0x71,
+ 0x02, 0x51, 0x98, 0x08, 0x37, 0xf2, 0xe7, 0xaf, 0x0b, 0x56, 0xa6, 0x2c, 0x9f, 0x31, 0x3c, 0x11,
+ 0x86, 0x54, 0x38, 0x11, 0x46, 0x68, 0xb8, 0x09, 0xdc, 0x8d, 0x05, 0x7b, 0xb6, 0x9a, 0xa6, 0x0b,
+ 0x56, 0x89, 0x78, 0x51, 0xe0, 0x9b, 0x40, 0x00, 0x85, 0x37, 0x81, 0x6d, 0xb8, 0x75, 0xe6, 0x64,
+ 0x66, 0xda, 0xf6, 0xad, 0x35, 0x48, 0x04, 0x6e, 0xad, 0x11, 0x28, 0x6c, 0x58, 0x0b, 0xa0, 0x4f,
+ 0x1f, 0x5a, 0x56, 0x82, 0x4f, 0x1f, 0x68, 0xba, 0x75, 0x92, 0x67, 0x98, 0x49, 0x3d, 0x34, 0x3b,
+ 0x8a, 0x3e, 0x71, 0x87, 0xe8, 0x66, 0x2f, 0x16, 0x3f, 0x3a, 0x3c, 0x61, 0x59, 0x2c, 0xd7, 0xc3,
+ 0xc0, 0xf9, 0x9c, 0x66, 0xfa, 0x1c, 0x1d, 0x3a, 0xac, 0x72, 0xf8, 0x17, 0x6b, 0xd1, 0x7b, 0x98,
+ 0xc7, 0x2f, 0x0a, 0xe9, 0xf7, 0x71, 0xb7, 0xad, 0x86, 0x24, 0xae, 0xe5, 0x85, 0x35, 0xec, 0xcd,
+ 0x12, 0x2d, 0xb2, 0xb7, 0xf6, 0x54, 0x01, 0xfc, 0x6c, 0xd0, 0x94, 0x1f, 0x72, 0xc4, 0xcd, 0x92,
+ 0x10, 0x6f, 0x37, 0x5a, 0x7e, 0xb9, 0x2a, 0xb0, 0xd1, 0x32, 0x36, 0x94, 0x98, 0xd8, 0x68, 0x21,
+ 0x98, 0x1d, 0x9d, 0x6e, 0xf5, 0x5e, 0xa6, 0xe2, 0x42, 0x26, 0x72, 0x60, 0x74, 0x7a, 0x65, 0x35,
+ 0x10, 0x31, 0x3a, 0x49, 0x18, 0xa6, 0x3a, 0x1a, 0xac, 0xc7, 0x26, 0x36, 0x97, 0x1b, 0x43, 0xee,
+ 0xc8, 0xbc, 0xdf, 0x0d, 0xc2, 0x78, 0xd5, 0x62, 0xb5, 0xa7, 0x7a, 0x18, 0xb2, 0x00, 0xf6, 0x55,
+ 0x9b, 0xbd, 0x58, 0xe5, 0xf0, 0xcf, 0xa2, 0xef, 0xb4, 0x2a, 0xb6, 0xc7, 0x62, 0xb1, 0x2c, 0x59,
+ 0x32, 0xd8, 0xee, 0x28, 0xb7, 0x06, 0x8d, 0xeb, 0xc7, 0xfd, 0x15, 0x5a, 0xc9, 0xbf, 0xe6, 0x9a,
+ 0xb0, 0x32, 0x65, 0x78, 0x12, 0x32, 0xe9, 0xb3, 0xc1, 0xe4, 0x9f, 0xd6, 0x69, 0xed, 0xdf, 0xdd,
+ 0xe8, 0x1a, 0x5d, 0xc5, 0x69, 0x26, 0x9f, 0x02, 0x7f, 0x10, 0x32, 0xea, 0xa1, 0xc1, 0xfd, 0x3b,
+ 0xa9, 0xd2, 0x9a, 0x99, 0xe5, 0x18, 0x77, 0xf6, 0x7d, 0x8f, 0xe8, 0x99, 0x00, 0xd9, 0xf6, 0x6d,
+ 0xf5, 0xa4, 0x95, 0x5b, 0xa1, 0x97, 0xbc, 0xfa, 0xcf, 0x6e, 0x90, 0x63, 0x5e, 0x95, 0x2a, 0x12,
+ 0xe9, 0x5b, 0x3d, 0x69, 0xe5, 0xf5, 0x4f, 0xa3, 0x77, 0xdb, 0x5e, 0xd5, 0x42, 0xb4, 0xdd, 0x69,
+ 0x0a, 0xac, 0x45, 0x8f, 0xfb, 0x2b, 0x28, 0xf7, 0xff, 0x6e, 0x0e, 0xbc, 0x1b, 0xff, 0x33, 0xbe,
+ 0x58, 0xb0, 0x3c, 0x61, 0x89, 0xd6, 0xa8, 0xea, 0x8d, 0xd9, 0xa7, 0xb4, 0x5d, 0xa3, 0x30, 0x74,
+ 0x35, 0x4c, 0x89, 0x7e, 0xfb, 0x1b, 0x68, 0xaa, 0xa2, 0xfd, 0xf7, 0x5a, 0xf4, 0x00, 0x2d, 0x9a,
+ 0x0e, 0x5c, 0xaf, 0x88, 0xbf, 0xd7, 0xc7, 0x11, 0xa6, 0x69, 0x8a, 0x3a, 0xfa, 0x39, 0x2c, 0xa8,
+ 0x22, 0xff, 0xc7, 0x5a, 0x74, 0xdb, 0x2a, 0xd6, 0xe1, 0xbd, 0xc3, 0xf3, 0xf3, 0x2c, 0x9d, 0x09,
+ 0xf9, 0xa8, 0x57, 0xa9, 0xd0, 0xcd, 0x49, 0x69, 0x74, 0x37, 0x67, 0x40, 0xd3, 0xee, 0x8a, 0x3f,
+ 0x4b, 0x2b, 0xc1, 0xcb, 0xd5, 0xe4, 0x82, 0xbf, 0xd2, 0xef, 0x3d, 0xf9, 0xf3, 0xb2, 0x02, 0x86,
+ 0x0e, 0x41, 0xec, 0x8a, 0x71, 0xb2, 0xe5, 0xca, 0xbe, 0x1f, 0x55, 0x11, 0xae, 0x1c, 0xa2, 0xc3,
+ 0x95, 0x4f, 0xda, 0x55, 0x49, 0xd7, 0xca, 0xbe, 0xcc, 0xb5, 0x81, 0x17, 0xb5, 0xfd, 0x42, 0xd7,
+ 0xfd, 0x6e, 0xd0, 0xe6, 0xa6, 0x4a, 0xbc, 0x9b, 0x9e, 0x9f, 0x9b, 0x3a, 0xe1, 0x25, 0x75, 0x11,
+ 0x22, 0x37, 0x25, 0x50, 0xbb, 0xbd, 0xda, 0x4b, 0x33, 0x26, 0x1f, 0x0a, 0x7d, 0x71, 0x7e, 0x9e,
+ 0xf1, 0x38, 0x01, 0xdb, 0xab, 0x5a, 0x3c, 0x74, 0xe5, 0xc4, 0xf6, 0x0a, 0xe3, 0xec, 0x75, 0x93,
+ 0x5a, 0x5a, 0x47, 0x77, 0x3e, 0x4b, 0x33, 0x78, 0x6d, 0x5a, 0x6a, 0x1a, 0x21, 0x71, 0xdd, 0xa4,
+ 0x05, 0xd9, 0x14, 0xa8, 0x16, 0xd5, 0x51, 0xa9, 0xcb, 0x7f, 0xaf, 0xad, 0xe8, 0x88, 0x89, 0x14,
+ 0x08, 0xc1, 0xec, 0xf1, 0x45, 0x2d, 0x3c, 0x2d, 0xa4, 0xf1, 0x5b, 0x6d, 0xad, 0x46, 0x42, 0x1c,
+ 0x5f, 0xf8, 0x84, 0xdd, 0x2d, 0xd7, 0x7f, 0xdf, 0xe5, 0xaf, 0x72, 0x69, 0xf4, 0x76, 0x5b, 0x45,
+ 0xcb, 0x88, 0xdd, 0x32, 0x64, 0x94, 0xe1, 0xcf, 0xa3, 0x5f, 0x94, 0x86, 0x4b, 0x5e, 0x0c, 0x6e,
+ 0x20, 0x0a, 0xa5, 0x73, 0xc9, 0xf8, 0x26, 0x29, 0xb7, 0xb7, 0x53, 0x4c, 0x6c, 0x9c, 0x56, 0xf1,
+ 0x1c, 0xbe, 0x19, 0x60, 0x7b, 0x5c, 0x4a, 0x89, 0xdb, 0x29, 0x6d, 0xca, 0x8f, 0x8a, 0x23, 0x9e,
+ 0x28, 0xeb, 0x48, 0x0d, 0x8d, 0x30, 0x14, 0x15, 0x2e, 0x64, 0xd3, 0xd6, 0xa3, 0xf8, 0x2a, 0x9d,
+ 0x9b, 0xd4, 0xa2, 0x99, 0xc0, 0x2a, 0x90, 0xb6, 0x5a, 0x66, 0xe8, 0x40, 0x44, 0xda, 0x4a, 0xc2,
+ 0xca, 0xe7, 0x3f, 0xaf, 0x45, 0xb7, 0x2c, 0xb3, 0xaf, 0x0f, 0x7c, 0xc7, 0xf9, 0x39, 0xaf, 0x93,
+ 0xdc, 0x83, 0x34, 0xbf, 0xac, 0x06, 0x1f, 0x53, 0x26, 0x71, 0xde, 0x14, 0xe5, 0x93, 0x6b, 0xeb,
+ 0xd9, 0xfd, 0x89, 0x3e, 0x0d, 0xb5, 0x57, 0x22, 0x1a, 0x0d, 0xb0, 0x3f, 0x31, 0x87, 0xa6, 0x90,
+ 0x23, 0xf6, 0x27, 0x21, 0xde, 0x76, 0xb1, 0x71, 0x9e, 0xf1, 0x1c, 0x76, 0xb1, 0xb5, 0x50, 0x0b,
+ 0x89, 0x2e, 0x6e, 0x41, 0x76, 0x3e, 0xd6, 0xa2, 0xe6, 0x7c, 0x6d, 0x94, 0x65, 0x60, 0x3e, 0x36,
+ 0xaa, 0x06, 0x20, 0xe6, 0x63, 0x14, 0x54, 0x7e, 0x4e, 0xa2, 0x6f, 0xd5, 0x4d, 0x7a, 0x5c, 0xb2,
+ 0xab, 0x94, 0xc1, 0xdb, 0x3b, 0x8e, 0x84, 0x18, 0xff, 0x3e, 0x61, 0x47, 0xd6, 0x69, 0x5e, 0x15,
+ 0x59, 0x5c, 0x5d, 0xa8, 0xfb, 0x1c, 0x7e, 0x9d, 0xb5, 0x10, 0xde, 0xe8, 0xb8, 0xd7, 0x41, 0xd9,
+ 0x49, 0x5d, 0xcb, 0xcc, 0x14, 0xb3, 0x8e, 0xab, 0xb6, 0xa6, 0x99, 0x8d, 0x4e, 0xce, 0x3e, 0x34,
+ 0xd9, 0x8f, 0xb3, 0x8c, 0x95, 0x2b, 0x2d, 0x3b, 0x8c, 0xf3, 0xf4, 0x9c, 0x55, 0x02, 0x3c, 0x34,
+ 0x51, 0xd4, 0x10, 0x62, 0xc4, 0x43, 0x93, 0x00, 0x6e, 0xf7, 0x6d, 0xc0, 0xf3, 0x38, 0x4f, 0xd8,
+ 0x6b, 0xb0, 0x6f, 0x83, 0x76, 0x24, 0x43, 0xec, 0xdb, 0x28, 0xd6, 0x3e, 0x3c, 0x78, 0x96, 0xf1,
+ 0xd9, 0xa5, 0x5a, 0x02, 0xfc, 0x0e, 0x96, 0x12, 0xb8, 0x06, 0xdc, 0x0e, 0x21, 0x76, 0x11, 0x90,
+ 0x82, 0x13, 0x56, 0x64, 0xf1, 0x0c, 0x5e, 0xe1, 0x6a, 0x74, 0x94, 0x8c, 0x58, 0x04, 0x20, 0x03,
+ 0x8a, 0xab, 0xae, 0x86, 0x61, 0xc5, 0x05, 0x37, 0xc3, 0x6e, 0x87, 0x10, 0xbb, 0x0c, 0x4a, 0xc1,
+ 0xa4, 0xc8, 0x52, 0x01, 0x86, 0x41, 0xa3, 0x21, 0x25, 0xc4, 0x30, 0xf0, 0x09, 0x60, 0xf2, 0x90,
+ 0x95, 0x73, 0x86, 0x9a, 0x94, 0x92, 0xa0, 0x49, 0x4d, 0xd8, 0xfb, 0xea, 0x4d, 0xdd, 0x79, 0xb1,
+ 0x02, 0xf7, 0xd5, 0x55, 0xb5, 0x78, 0xb1, 0x22, 0xee, 0xab, 0x7b, 0x00, 0x28, 0xe2, 0x71, 0x5c,
+ 0x09, 0xbc, 0x88, 0x52, 0x12, 0x2c, 0xa2, 0x26, 0xec, 0x1a, 0xdd, 0x14, 0x71, 0x29, 0xc0, 0x1a,
+ 0xad, 0x0a, 0xe0, 0x5c, 0x62, 0xb8, 0x49, 0xca, 0xed, 0x4c, 0xd2, 0xf4, 0x0a, 0x13, 0x7b, 0x29,
+ 0xcb, 0x92, 0x0a, 0xcc, 0x24, 0xaa, 0xdd, 0xb5, 0x94, 0x98, 0x49, 0xda, 0x14, 0x08, 0x25, 0xf5,
+ 0x04, 0x04, 0xab, 0x1d, 0x78, 0x00, 0x72, 0x3b, 0x84, 0xd8, 0xf9, 0x49, 0x17, 0x7a, 0x27, 0x2e,
+ 0xcb, 0xb4, 0x5e, 0xfc, 0xd7, 0xf1, 0x02, 0x69, 0x39, 0x31, 0x3f, 0x61, 0x1c, 0x18, 0x5e, 0x7a,
+ 0xe2, 0xc6, 0x0a, 0x06, 0xa7, 0xee, 0x3b, 0x41, 0xc6, 0x66, 0x9c, 0x52, 0xe2, 0x3c, 0x85, 0xc7,
+ 0x5a, 0x13, 0x79, 0x08, 0xbf, 0xde, 0x85, 0x39, 0xaf, 0xce, 0x19, 0x17, 0x87, 0xfc, 0x8a, 0x4d,
+ 0xf9, 0xf3, 0xd7, 0x69, 0x55, 0x6f, 0xb7, 0xd4, 0xca, 0xfd, 0x94, 0xb0, 0x84, 0xc1, 0xc4, 0xab,
+ 0x73, 0x9d, 0x4a, 0x36, 0x81, 0x00, 0x65, 0x39, 0x62, 0xaf, 0xd0, 0x04, 0x02, 0x5a, 0x34, 0x1c,
+ 0x91, 0x40, 0x84, 0x78, 0x7b, 0x62, 0x66, 0x9c, 0xab, 0xef, 0x25, 0x4c, 0xb9, 0xce, 0xe5, 0x28,
+ 0x6b, 0x10, 0x24, 0x0e, 0x2d, 0x82, 0x0a, 0x76, 0x7f, 0x69, 0xfc, 0xdb, 0x21, 0x76, 0x9f, 0xb0,
+ 0xd3, 0x1e, 0x66, 0x0f, 0x7a, 0x90, 0x88, 0x2b, 0x7b, 0x95, 0x84, 0x72, 0xd5, 0xbe, 0x49, 0xf2,
+ 0xa0, 0x07, 0xe9, 0x9c, 0xbe, 0xb9, 0xd5, 0x7a, 0x16, 0xcf, 0x2e, 0xe7, 0x25, 0x5f, 0xe6, 0xc9,
+ 0x0e, 0xcf, 0x78, 0x09, 0x4e, 0xdf, 0xbc, 0x52, 0x03, 0x94, 0x38, 0x7d, 0xeb, 0x50, 0xb1, 0x19,
+ 0x9c, 0x5b, 0x8a, 0x51, 0x96, 0xce, 0xe1, 0x8e, 0xda, 0x33, 0x24, 0x01, 0x22, 0x83, 0x43, 0x41,
+ 0x24, 0x88, 0x9a, 0x1d, 0xb7, 0x48, 0x67, 0x71, 0xd6, 0xf8, 0xdb, 0xa6, 0xcd, 0x78, 0x60, 0x67,
+ 0x10, 0x21, 0x0a, 0x48, 0x3d, 0xa7, 0xcb, 0x32, 0x1f, 0xe7, 0x82, 0x93, 0xf5, 0xd4, 0x40, 0x67,
+ 0x3d, 0x1d, 0x10, 0x4c, 0xab, 0x53, 0xf6, 0xba, 0x2e, 0x4d, 0xfd, 0x0f, 0x36, 0xad, 0xd6, 0x7f,
+ 0x1f, 0x2a, 0x79, 0x68, 0x5a, 0x05, 0x1c, 0xa8, 0x8c, 0x72, 0xd2, 0x04, 0x4c, 0x40, 0xdb, 0x0f,
+ 0x93, 0xfb, 0xdd, 0x20, 0xee, 0x67, 0x22, 0x56, 0x19, 0x0b, 0xf9, 0x91, 0x40, 0x1f, 0x3f, 0x1a,
+ 0xb4, 0xc7, 0x2d, 0x5e, 0x7d, 0x2e, 0xd8, 0xec, 0xb2, 0x75, 0x33, 0xce, 0x2f, 0x68, 0x83, 0x10,
+ 0xc7, 0x2d, 0x04, 0x8a, 0x77, 0xd1, 0x78, 0xc6, 0xf3, 0x50, 0x17, 0xd5, 0xf2, 0x3e, 0x5d, 0xa4,
+ 0x38, 0xbb, 0xf9, 0x35, 0x52, 0x15, 0x99, 0x4d, 0x37, 0x6d, 0x12, 0x16, 0x5c, 0x88, 0xd8, 0xfc,
+ 0x92, 0xb0, 0xcd, 0xc9, 0xa1, 0xcf, 0xc3, 0xf6, 0x6b, 0x03, 0x2d, 0x2b, 0x87, 0xf4, 0x6b, 0x03,
+ 0x14, 0x4b, 0x57, 0xb2, 0x89, 0x91, 0x0e, 0x2b, 0x7e, 0x9c, 0x3c, 0xea, 0x07, 0xdb, 0x2d, 0x8f,
+ 0xe7, 0x73, 0x27, 0x63, 0x71, 0xd9, 0x78, 0xdd, 0x0a, 0x18, 0xb2, 0x18, 0xb1, 0xe5, 0x09, 0xe0,
+ 0x60, 0x0a, 0xf3, 0x3c, 0xef, 0xf0, 0x5c, 0xb0, 0x5c, 0x60, 0x53, 0x98, 0x6f, 0x4c, 0x81, 0xa1,
+ 0x29, 0x8c, 0x52, 0x00, 0x71, 0x2b, 0xcf, 0x83, 0x98, 0x38, 0x8a, 0x17, 0x68, 0xc6, 0xd6, 0x9c,
+ 0xf5, 0x34, 0xf2, 0x50, 0xdc, 0x02, 0xce, 0x79, 0x9c, 0xeb, 0x7a, 0x99, 0xc6, 0xe5, 0xdc, 0x9c,
+ 0x6e, 0x24, 0x83, 0xc7, 0xb4, 0x1d, 0x9f, 0x24, 0x1e, 0xe7, 0x86, 0x35, 0xc0, 0xb4, 0x33, 0x5e,
+ 0xc4, 0x73, 0x53, 0x53, 0xa4, 0x06, 0x52, 0xde, 0xaa, 0xea, 0xfd, 0x6e, 0x10, 0xf8, 0x79, 0x91,
+ 0x26, 0x8c, 0x07, 0xfc, 0x48, 0x79, 0x1f, 0x3f, 0x10, 0x04, 0xd9, 0x5b, 0x5d, 0xef, 0x66, 0x47,
+ 0x37, 0xca, 0x13, 0xb5, 0x8f, 0x1d, 0x12, 0xcd, 0x03, 0xb8, 0x50, 0xf6, 0x46, 0xf0, 0x60, 0x8c,
+ 0xea, 0x03, 0xda, 0xd0, 0x18, 0x35, 0xe7, 0xaf, 0x7d, 0xc6, 0x28, 0x06, 0x2b, 0x9f, 0x3f, 0x56,
+ 0x63, 0x74, 0x37, 0x16, 0x71, 0x9d, 0xb7, 0xbf, 0x48, 0xd9, 0x2b, 0xb5, 0x11, 0x46, 0xea, 0xab,
+ 0xa9, 0xa1, 0x7c, 0xeb, 0x19, 0xec, 0x8a, 0xb7, 0x7b, 0xf3, 0x01, 0xdf, 0x6a, 0x87, 0xd0, 0xe9,
+ 0x1b, 0x6c, 0x15, 0xb6, 0x7b, 0xf3, 0x01, 0xdf, 0xea, 0xe3, 0x0d, 0x9d, 0xbe, 0xc1, 0x17, 0x1c,
+ 0xb6, 0x7b, 0xf3, 0xca, 0xf7, 0x5f, 0xea, 0x81, 0xeb, 0x3a, 0xaf, 0xf3, 0xb0, 0x99, 0x48, 0xaf,
+ 0x18, 0x96, 0x4e, 0xfa, 0xf6, 0x0c, 0x1a, 0x4a, 0x27, 0x69, 0x15, 0xe7, 0xf3, 0x69, 0x58, 0x29,
+ 0x8e, 0x79, 0x95, 0xca, 0xeb, 0x18, 0x4f, 0x7b, 0x18, 0xd5, 0x70, 0x68, 0xd3, 0x14, 0x52, 0xb2,
+ 0x0f, 0x96, 0x3d, 0xd4, 0x5e, 0x84, 0x7f, 0x14, 0xb0, 0xd7, 0xbe, 0x0f, 0xbf, 0xd5, 0x93, 0xb6,
+ 0x8f, 0x78, 0x3d, 0x46, 0x3f, 0x9c, 0x9b, 0x30, 0x74, 0x95, 0x30, 0xa6, 0xcc, 0x43, 0x5b, 0xf7,
+ 0x29, 0xe5, 0xe3, 0xfe, 0x0a, 0x1d, 0xee, 0x47, 0x49, 0xd2, 0xcf, 0xbd, 0xfb, 0x74, 0xfb, 0x71,
+ 0x7f, 0x05, 0xe5, 0xfe, 0xaf, 0xf5, 0xb6, 0x06, 0xfa, 0x57, 0x63, 0xf0, 0x49, 0x1f, 0x8b, 0x60,
+ 0x1c, 0x3e, 0xbd, 0x96, 0x8e, 0x2a, 0xc8, 0xdf, 0xeb, 0xfd, 0xbb, 0x46, 0xe5, 0xdb, 0x48, 0xf2,
+ 0x2d, 0x66, 0x35, 0x24, 0x43, 0x51, 0x65, 0x61, 0x38, 0x30, 0x3f, 0xba, 0xa6, 0x96, 0xf3, 0x2d,
+ 0x3f, 0x0f, 0x56, 0x6f, 0xcd, 0x3a, 0xe5, 0x09, 0x59, 0x76, 0x68, 0x58, 0xa0, 0x8f, 0xaf, 0xab,
+ 0x46, 0x0d, 0x55, 0x07, 0x96, 0x5f, 0xb3, 0x79, 0xda, 0xd3, 0xb0, 0xf7, 0x7d, 0x9b, 0x0f, 0xaf,
+ 0xa7, 0xa4, 0xca, 0xf2, 0x5f, 0x6b, 0xd1, 0x3d, 0x8f, 0xb5, 0x8f, 0x33, 0xc0, 0xa1, 0xcb, 0x0f,
+ 0x02, 0xf6, 0x29, 0x25, 0x53, 0xb8, 0xdf, 0xf9, 0x66, 0xca, 0xf6, 0xc3, 0x77, 0x9e, 0xca, 0x5e,
+ 0x9a, 0x09, 0x56, 0xb6, 0x3f, 0x7c, 0xe7, 0xdb, 0x6d, 0xa8, 0x21, 0xfd, 0xe1, 0xbb, 0x00, 0xee,
+ 0x7c, 0xf8, 0x0e, 0xf1, 0x8c, 0x7e, 0xf8, 0x0e, 0xb5, 0x16, 0xfc, 0xf0, 0x5d, 0x58, 0x83, 0x5a,
+ 0x5d, 0x74, 0x11, 0x9a, 0x63, 0xf3, 0x5e, 0x16, 0xfd, 0x53, 0xf4, 0x27, 0xd7, 0x51, 0x21, 0xd6,
+ 0xd7, 0x86, 0x93, 0x17, 0x2a, 0x7b, 0xb4, 0xa9, 0x77, 0xa9, 0x72, 0xbb, 0x37, 0xaf, 0x7c, 0xff,
+ 0x48, 0x6d, 0xae, 0xcc, 0x6a, 0xc2, 0x4b, 0xf9, 0xd1, 0xc3, 0xcd, 0xd0, 0xea, 0x50, 0x5b, 0x70,
+ 0x7b, 0xfe, 0x51, 0x3f, 0x98, 0xa8, 0x6e, 0x4d, 0xa8, 0x4e, 0x1f, 0x76, 0x19, 0x02, 0x5d, 0xbe,
+ 0xdd, 0x9b, 0x27, 0x96, 0x91, 0xc6, 0x77, 0xd3, 0xdb, 0x3d, 0x8c, 0xf9, 0x7d, 0xfd, 0xb8, 0xbf,
+ 0x82, 0x72, 0x7f, 0xa5, 0xb2, 0x56, 0xd7, 0xbd, 0xec, 0xe7, 0xad, 0x2e, 0x53, 0x13, 0xaf, 0x9b,
+ 0x87, 0x7d, 0xf1, 0x50, 0xfe, 0xe2, 0x2e, 0xa1, 0x5d, 0xf9, 0x0b, 0xba, 0x8c, 0x7e, 0x78, 0x3d,
+ 0x25, 0x55, 0x96, 0x7f, 0x5a, 0x8b, 0x6e, 0x92, 0x65, 0x51, 0x71, 0xf0, 0x71, 0x5f, 0xcb, 0x20,
+ 0x1e, 0x3e, 0xb9, 0xb6, 0x9e, 0x2a, 0xd4, 0xbf, 0xae, 0x45, 0xb7, 0x02, 0x85, 0x6a, 0x02, 0xe4,
+ 0x1a, 0xd6, 0xfd, 0x40, 0xf9, 0xf4, 0xfa, 0x8a, 0xd4, 0x72, 0xef, 0xe2, 0x93, 0xf6, 0x47, 0xcc,
+ 0x02, 0xb6, 0x27, 0xf4, 0x47, 0xcc, 0xba, 0xb5, 0xe0, 0x19, 0x53, 0x7c, 0xa6, 0xf7, 0x7c, 0xe8,
+ 0x19, 0x93, 0xbc, 0x0a, 0x19, 0xfc, 0x3c, 0x0a, 0xc6, 0x61, 0x4e, 0x9e, 0xbf, 0x2e, 0xe2, 0x3c,
+ 0xa1, 0x9d, 0x34, 0xf2, 0x6e, 0x27, 0x86, 0x83, 0x67, 0x73, 0xb5, 0xf4, 0x84, 0xeb, 0x7d, 0xdc,
+ 0x03, 0x4a, 0xdf, 0x20, 0xc1, 0xb3, 0xb9, 0x16, 0x4a, 0x78, 0x53, 0x59, 0x63, 0xc8, 0x1b, 0x48,
+ 0x16, 0x1f, 0xf6, 0x41, 0xc1, 0x0e, 0xc1, 0x78, 0x33, 0x47, 0xfe, 0x8f, 0x42, 0x56, 0x5a, 0xc7,
+ 0xfe, 0x5b, 0x3d, 0x69, 0xc2, 0xed, 0x84, 0x89, 0xcf, 0x58, 0x9c, 0xb0, 0x32, 0xe8, 0xd6, 0x50,
+ 0xbd, 0xdc, 0xba, 0x34, 0xe6, 0x76, 0x87, 0x67, 0xcb, 0x45, 0xae, 0x3a, 0x93, 0x74, 0xeb, 0x52,
+ 0xdd, 0x6e, 0x01, 0x0d, 0x4f, 0x25, 0xad, 0x5b, 0x99, 0x5e, 0x3e, 0x0c, 0x9b, 0xf1, 0xb2, 0xca,
+ 0xcd, 0x5e, 0x2c, 0x5d, 0x4f, 0x15, 0x46, 0x1d, 0xf5, 0x04, 0x91, 0xb4, 0xd5, 0x93, 0x86, 0xc7,
+ 0x83, 0x8e, 0x5b, 0x13, 0x4f, 0xdb, 0x1d, 0xb6, 0x5a, 0x21, 0xf5, 0xb8, 0xbf, 0x02, 0x3c, 0x8c,
+ 0x55, 0x51, 0x75, 0x90, 0x56, 0x62, 0x2f, 0xcd, 0xb2, 0xc1, 0x66, 0x20, 0x4c, 0x34, 0x14, 0x3c,
+ 0x8c, 0x45, 0x60, 0x22, 0x92, 0xf5, 0xe1, 0x65, 0x3e, 0xe8, 0xb2, 0x23, 0xa9, 0x5e, 0x91, 0xec,
+ 0xd2, 0xe0, 0x40, 0xcd, 0x69, 0x6a, 0x53, 0xdb, 0x61, 0xb8, 0xe1, 0x5a, 0x15, 0xde, 0xee, 0xcd,
+ 0x83, 0xa7, 0xfd, 0x92, 0x92, 0x2b, 0xcb, 0x5d, 0xca, 0x84, 0xb7, 0x92, 0xdc, 0xeb, 0xa0, 0xc0,
+ 0xa1, 0x64, 0x33, 0x8c, 0x5e, 0xa6, 0xc9, 0x9c, 0x09, 0xf4, 0x41, 0x95, 0x0b, 0x04, 0x1f, 0x54,
+ 0x01, 0x10, 0x74, 0x5d, 0xf3, 0x77, 0x73, 0x1a, 0x3b, 0x4e, 0xb0, 0xae, 0x53, 0xca, 0x0e, 0x15,
+ 0xea, 0x3a, 0x94, 0x06, 0xb3, 0x81, 0x71, 0xab, 0x3e, 0x28, 0xf1, 0x30, 0x64, 0x06, 0x7c, 0x55,
+ 0x62, 0xb3, 0x17, 0x0b, 0x56, 0x14, 0xeb, 0x30, 0x5d, 0xa4, 0x02, 0x5b, 0x51, 0x1c, 0x1b, 0x35,
+ 0x12, 0x5a, 0x51, 0xda, 0x28, 0x55, 0xbd, 0x3a, 0x47, 0x18, 0x27, 0xe1, 0xea, 0x35, 0x4c, 0xbf,
+ 0xea, 0x19, 0xb6, 0xf5, 0x5c, 0x35, 0x37, 0x21, 0x23, 0x2e, 0xd4, 0x66, 0x19, 0x89, 0x6d, 0xf9,
+ 0xa2, 0x31, 0x04, 0x43, 0xb3, 0x0e, 0xa5, 0x00, 0x9f, 0x17, 0xd4, 0x9c, 0x7e, 0xf4, 0x5b, 0x14,
+ 0x2c, 0x2e, 0xe3, 0x7c, 0x86, 0x6e, 0x4e, 0xa5, 0xc1, 0x16, 0x19, 0xda, 0x9c, 0x92, 0x1a, 0xe0,
+ 0xa9, 0xbd, 0xff, 0x26, 0x2f, 0x32, 0x14, 0xcc, 0x2b, 0xb3, 0xfe, 0x8b, 0xbc, 0x0f, 0x7a, 0x90,
+ 0xf0, 0xa9, 0xbd, 0x06, 0xcc, 0xb9, 0x7b, 0xe3, 0xf4, 0x83, 0x80, 0x29, 0x1f, 0x0d, 0x6d, 0x84,
+ 0x69, 0x15, 0x10, 0xd4, 0xce, 0xd9, 0xe2, 0xe7, 0x6c, 0x85, 0x05, 0xb5, 0x7b, 0x48, 0xf8, 0x39,
+ 0x5b, 0x85, 0x82, 0xba, 0x8d, 0x82, 0x3c, 0xd3, 0xdd, 0x07, 0xad, 0x07, 0xf4, 0xdd, 0xad, 0xcf,
+ 0x46, 0x27, 0x07, 0x46, 0xce, 0x6e, 0x7a, 0xe5, 0x3d, 0xa6, 0x40, 0x0a, 0xba, 0x9b, 0x5e, 0xe1,
+ 0x4f, 0x29, 0x36, 0x7b, 0xb1, 0xf0, 0x46, 0x40, 0x2c, 0xd8, 0x6b, 0xfd, 0xa8, 0x1e, 0x29, 0xae,
+ 0x94, 0xb7, 0x9e, 0xd5, 0xdf, 0xef, 0x06, 0xed, 0xfd, 0xdb, 0xe3, 0x92, 0xcf, 0x58, 0x55, 0xa9,
+ 0x6f, 0xad, 0xfa, 0x17, 0x9c, 0x94, 0x6c, 0x08, 0xbe, 0xb4, 0x7a, 0x37, 0x0c, 0x39, 0x1f, 0x48,
+ 0x6c, 0x44, 0xf6, 0xbb, 0x4d, 0xeb, 0xa8, 0x66, 0xfb, 0x93, 0x4d, 0x1b, 0x9d, 0x9c, 0x1d, 0x5e,
+ 0x4a, 0xea, 0x7e, 0xa8, 0xe9, 0x3e, 0xaa, 0x8e, 0x7d, 0xa3, 0xe9, 0x41, 0x0f, 0x52, 0xb9, 0xfa,
+ 0x2c, 0x7a, 0xf3, 0x80, 0xcf, 0x27, 0x2c, 0x4f, 0x06, 0xdf, 0xf3, 0x6f, 0xf0, 0xf2, 0xf9, 0xb0,
+ 0xfe, 0xb3, 0x31, 0x7a, 0x83, 0x12, 0xdb, 0x3b, 0x88, 0xbb, 0xec, 0x6c, 0x39, 0x9f, 0x88, 0x58,
+ 0x80, 0x3b, 0x88, 0xf2, 0xef, 0xc3, 0x5a, 0x40, 0xdc, 0x41, 0xf4, 0x00, 0x60, 0x6f, 0x5a, 0x32,
+ 0x86, 0xda, 0xab, 0x05, 0x41, 0x7b, 0x0a, 0xb0, 0x59, 0x84, 0xb1, 0x57, 0x27, 0xea, 0xf0, 0xce,
+ 0xa0, 0xd5, 0x91, 0x52, 0x22, 0x8b, 0x68, 0x53, 0x36, 0xb8, 0x9b, 0xea, 0xcb, 0xef, 0xe6, 0x2c,
+ 0x17, 0x8b, 0xb8, 0x5c, 0x81, 0xe0, 0x56, 0xb5, 0x74, 0x00, 0x22, 0xb8, 0x51, 0xd0, 0x8e, 0x5a,
+ 0xdd, 0xcc, 0xb3, 0xcb, 0x7d, 0x5e, 0xf2, 0xa5, 0x48, 0x73, 0x06, 0xbf, 0x9d, 0x62, 0x1a, 0xd4,
+ 0x65, 0x88, 0x51, 0x4b, 0xb1, 0x36, 0xcb, 0x95, 0x44, 0x73, 0x9d, 0x51, 0x7e, 0x6c, 0xbe, 0x12,
+ 0xbc, 0x84, 0x8f, 0x33, 0x1b, 0x2b, 0x10, 0x22, 0xb2, 0x5c, 0x12, 0x06, 0x7d, 0x7f, 0x9c, 0xe6,
+ 0x73, 0xb4, 0xef, 0x8f, 0xdd, 0xef, 0x17, 0xdf, 0xa2, 0x01, 0x3b, 0xa0, 0x9a, 0x46, 0x6b, 0x06,
+ 0x80, 0x7a, 0x69, 0x18, 0x6d, 0x74, 0x97, 0x20, 0x06, 0x14, 0x4e, 0x02, 0x57, 0x5f, 0x14, 0x2c,
+ 0x67, 0x89, 0xbe, 0xb4, 0x87, 0xb9, 0xf2, 0x88, 0xa0, 0x2b, 0x48, 0xda, 0xb9, 0x48, 0xca, 0x4f,
+ 0x96, 0xf9, 0x71, 0xc9, 0xcf, 0xd3, 0x8c, 0x95, 0x60, 0x2e, 0x6a, 0xd4, 0x1d, 0x39, 0x31, 0x17,
+ 0x61, 0x9c, 0xbd, 0xfd, 0x21, 0xa5, 0xde, 0x2f, 0x26, 0x4c, 0xcb, 0x78, 0x06, 0x6f, 0x7f, 0x34,
+ 0x36, 0xda, 0x18, 0x71, 0x32, 0x18, 0xc0, 0x9d, 0x44, 0xa7, 0x71, 0x9d, 0xaf, 0x64, 0x7c, 0xa8,
+ 0x97, 0x56, 0xe5, 0x57, 0x7d, 0x2b, 0x90, 0xe8, 0x28, 0x73, 0x18, 0x49, 0x24, 0x3a, 0x61, 0x0d,
+ 0xbb, 0x94, 0x48, 0xee, 0x48, 0xdd, 0x6a, 0x02, 0x4b, 0x49, 0x63, 0x43, 0x0b, 0x89, 0xa5, 0xa4,
+ 0x05, 0x81, 0x09, 0x49, 0x0f, 0x83, 0x39, 0x3a, 0x21, 0x19, 0x69, 0x70, 0x42, 0x72, 0x29, 0x3b,
+ 0x51, 0x8c, 0xf3, 0x54, 0xa4, 0x71, 0x36, 0x61, 0xe2, 0x38, 0x2e, 0xe3, 0x05, 0x13, 0xac, 0x84,
+ 0x13, 0x85, 0x42, 0x86, 0x1e, 0x43, 0x4c, 0x14, 0x14, 0xab, 0x1c, 0xfe, 0x6e, 0xf4, 0x76, 0xbd,
+ 0xee, 0xb3, 0x5c, 0xfd, 0xd6, 0xd3, 0x73, 0xf9, 0x23, 0x71, 0x83, 0x77, 0x8c, 0x8d, 0x89, 0x28,
+ 0x59, 0xbc, 0xd0, 0xb6, 0xdf, 0x32, 0x7f, 0x97, 0xe0, 0xe3, 0xb5, 0x3a, 0x9e, 0x8f, 0xb8, 0x48,
+ 0xcf, 0xeb, 0x6d, 0xb6, 0x7a, 0x81, 0x09, 0xc4, 0xb3, 0x2b, 0x1e, 0x06, 0x3e, 0x7a, 0x82, 0x71,
+ 0x76, 0x9e, 0x76, 0xa5, 0x27, 0xac, 0xc8, 0xe0, 0x3c, 0xed, 0x69, 0x4b, 0x80, 0x98, 0xa7, 0x51,
+ 0xd0, 0x0e, 0x4e, 0x57, 0x3c, 0x65, 0xe1, 0xca, 0x4c, 0x59, 0xbf, 0xca, 0x4c, 0xbd, 0x77, 0x42,
+ 0xb2, 0xe8, 0xed, 0x43, 0xb6, 0x38, 0x63, 0x65, 0x75, 0x91, 0x16, 0xd4, 0x97, 0x87, 0x2d, 0xd1,
+ 0xf9, 0xe5, 0x61, 0x02, 0xb5, 0x2b, 0x81, 0x05, 0xc6, 0xd5, 0x51, 0xbc, 0x60, 0xf2, 0x13, 0x2e,
+ 0x60, 0x25, 0x70, 0x8c, 0x38, 0x10, 0xb1, 0x12, 0x90, 0xb0, 0xf3, 0x7a, 0x99, 0x65, 0x4e, 0xd8,
+ 0xbc, 0x8e, 0xb0, 0xf2, 0x38, 0x5e, 0x2d, 0x58, 0x2e, 0x94, 0x49, 0x70, 0x26, 0xef, 0x98, 0xc4,
+ 0x79, 0xe2, 0x4c, 0xbe, 0x8f, 0x9e, 0x33, 0x35, 0x79, 0x0d, 0x7f, 0xcc, 0x4b, 0xd1, 0xfc, 0x92,
+ 0xdb, 0x69, 0x99, 0x81, 0xa9, 0xc9, 0x6f, 0x54, 0x8f, 0x24, 0xa6, 0xa6, 0xb0, 0x86, 0xf3, 0xab,
+ 0x1d, 0x5e, 0x19, 0x5e, 0xb0, 0xd2, 0xc4, 0xc9, 0xf3, 0x45, 0x9c, 0x66, 0x2a, 0x1a, 0xbe, 0x1f,
+ 0xb0, 0x4d, 0xe8, 0x10, 0xbf, 0xda, 0xd1, 0x57, 0xd7, 0xf9, 0x9d, 0x93, 0x70, 0x09, 0xc1, 0x23,
+ 0x82, 0x0e, 0xfb, 0xc4, 0x23, 0x82, 0x6e, 0x2d, 0xbb, 0x73, 0xb7, 0xac, 0xe4, 0x56, 0x92, 0xd8,
+ 0xe1, 0x09, 0x3c, 0x2f, 0x74, 0x6c, 0x02, 0x90, 0xd8, 0xb9, 0x07, 0x15, 0x6c, 0x6a, 0x60, 0xb1,
+ 0xbd, 0x34, 0x8f, 0xb3, 0xf4, 0xc7, 0x30, 0xad, 0x77, 0xec, 0x68, 0x82, 0x48, 0x0d, 0x70, 0x12,
+ 0x73, 0xb5, 0xcf, 0xc4, 0x34, 0xad, 0xa7, 0xfe, 0xfb, 0x81, 0x76, 0x93, 0x44, 0xb7, 0x2b, 0x87,
+ 0x74, 0xbe, 0x32, 0x0c, 0x9b, 0x75, 0x54, 0x14, 0x93, 0x7a, 0x55, 0x3d, 0x61, 0x33, 0x96, 0x16,
+ 0x62, 0xf0, 0x51, 0xb8, 0xad, 0x00, 0x4e, 0x5c, 0xb4, 0xe8, 0xa1, 0xe6, 0x3c, 0xbe, 0xaf, 0xe7,
+ 0x92, 0x49, 0xf3, 0x13, 0xa7, 0xa7, 0x15, 0x2b, 0x55, 0xa2, 0xb1, 0xcf, 0x04, 0x18, 0x9d, 0x0e,
+ 0x37, 0x74, 0xc0, 0xba, 0xa2, 0xc4, 0xe8, 0x0c, 0x6b, 0xd8, 0xc3, 0x3e, 0x87, 0x53, 0x5f, 0x8d,
+ 0x97, 0xd7, 0x1d, 0x1f, 0x91, 0xc6, 0x1c, 0x8a, 0x38, 0xec, 0xa3, 0x69, 0x9b, 0xad, 0xb5, 0xdd,
+ 0x8e, 0xf2, 0xd5, 0x18, 0x5e, 0x99, 0x40, 0x2c, 0x49, 0x8c, 0xc8, 0xd6, 0x02, 0xb8, 0x73, 0x18,
+ 0x5e, 0xf2, 0x38, 0x99, 0xc5, 0x95, 0x38, 0x8e, 0x57, 0x19, 0x8f, 0x13, 0xb9, 0xae, 0xc3, 0xc3,
+ 0x70, 0xcd, 0x0c, 0x5d, 0x88, 0x3a, 0x0c, 0xa7, 0x60, 0x37, 0x3b, 0x93, 0xbf, 0xdc, 0xaa, 0xae,
+ 0x92, 0xc2, 0xec, 0x4c, 0x96, 0x17, 0x5e, 0x23, 0xbd, 0x1b, 0x86, 0xec, 0x2b, 0x70, 0x8d, 0x48,
+ 0xa6, 0x21, 0xb7, 0x30, 0x1d, 0x2f, 0x01, 0x79, 0x3f, 0x40, 0xd8, 0x0f, 0xa0, 0x34, 0x7f, 0xd7,
+ 0x3f, 0xd6, 0x25, 0xd4, 0xb7, 0xd8, 0x1f, 0x61, 0xba, 0x2e, 0xe4, 0xdd, 0x50, 0xdb, 0xea, 0x49,
+ 0xdb, 0x34, 0x73, 0xe7, 0x22, 0x16, 0xa3, 0x24, 0x39, 0x64, 0x15, 0xf2, 0x3e, 0x7b, 0x2d, 0x1c,
+ 0x5a, 0x29, 0x91, 0x66, 0xb6, 0x29, 0x1b, 0xe8, 0xb5, 0xec, 0x79, 0x92, 0x0a, 0x25, 0xd3, 0x17,
+ 0xb4, 0x1f, 0xb5, 0x0d, 0xb4, 0x29, 0xa2, 0x56, 0x34, 0x6d, 0xe7, 0xf2, 0x9a, 0x99, 0xf2, 0xf9,
+ 0x3c, 0x63, 0x0a, 0x3a, 0x61, 0x71, 0xf3, 0x29, 0xca, 0xed, 0xb6, 0x2d, 0x14, 0x24, 0xe6, 0xf2,
+ 0xa0, 0x82, 0x4d, 0x23, 0x6b, 0xac, 0x79, 0x24, 0xa5, 0x1b, 0x76, 0xa3, 0x6d, 0xc6, 0x03, 0x88,
+ 0x34, 0x12, 0x05, 0xed, 0x6b, 0x77, 0xb5, 0x78, 0x9f, 0xe9, 0x96, 0x80, 0xdf, 0xba, 0x92, 0xca,
+ 0x8e, 0x98, 0x78, 0xed, 0x0e, 0xc1, 0xec, 0x3e, 0x01, 0x78, 0x78, 0xb6, 0x1a, 0x27, 0x70, 0x9f,
+ 0x00, 0xf5, 0x25, 0x43, 0xec, 0x13, 0x28, 0xd6, 0xef, 0x3a, 0x73, 0xee, 0x75, 0x10, 0x57, 0xb6,
+ 0x72, 0x48, 0xd7, 0xa1, 0x60, 0xa8, 0xeb, 0x28, 0x05, 0xbf, 0x49, 0xdd, 0xa3, 0x35, 0xa4, 0x49,
+ 0xb1, 0x73, 0xb5, 0xf5, 0x2e, 0xcc, 0xe6, 0xfe, 0xb5, 0xf0, 0x84, 0xc5, 0x89, 0xa9, 0x18, 0xa2,
+ 0xeb, 0xca, 0x89, 0xdc, 0x1f, 0xe3, 0x94, 0x93, 0x3f, 0x88, 0x06, 0x4d, 0x35, 0x4a, 0xd7, 0xcd,
+ 0x2d, 0xac, 0x88, 0x35, 0x41, 0x4c, 0x54, 0x3e, 0xe1, 0x24, 0x6e, 0x5e, 0x17, 0x4d, 0xb9, 0x72,
+ 0xa0, 0x5e, 0x0b, 0xad, 0x40, 0xe2, 0xe6, 0x37, 0x7b, 0x8b, 0x26, 0x12, 0xb7, 0x6e, 0x2d, 0xe7,
+ 0xb3, 0x3f, 0xa0, 0xcb, 0xf6, 0x4a, 0xbe, 0x80, 0x65, 0xfa, 0x34, 0xd8, 0x3d, 0x88, 0x06, 0xf1,
+ 0xd9, 0x9f, 0x7e, 0x9a, 0x76, 0x0d, 0x32, 0x67, 0x07, 0xf2, 0x7a, 0x1a, 0xfe, 0x7b, 0x23, 0x8d,
+ 0x90, 0x58, 0x83, 0x5a, 0x90, 0xf3, 0x23, 0xa5, 0xe3, 0x97, 0x65, 0x2a, 0xd2, 0x7c, 0x3e, 0xe5,
+ 0x3c, 0x83, 0x47, 0x96, 0xa3, 0xf1, 0xd0, 0x95, 0x52, 0x3f, 0x52, 0xda, 0xa2, 0xec, 0x12, 0x37,
+ 0x1a, 0x8f, 0x96, 0x82, 0x9f, 0xa7, 0x59, 0x06, 0x22, 0x67, 0x34, 0x1e, 0x6a, 0x09, 0x11, 0x39,
+ 0x3e, 0xe1, 0xfc, 0xb4, 0xe6, 0x58, 0x9e, 0xfe, 0xab, 0x13, 0xd0, 0x3b, 0x50, 0xc7, 0x11, 0x52,
+ 0x3f, 0xad, 0x09, 0x21, 0xe7, 0xa7, 0x42, 0xc7, 0xd8, 0x8f, 0xa6, 0x6c, 0x42, 0x75, 0x04, 0xa2,
+ 0x7e, 0x2a, 0x94, 0x82, 0x1b, 0x9f, 0xcf, 0xde, 0xff, 0x9f, 0xaf, 0x6e, 0xac, 0xfd, 0xf4, 0xab,
+ 0x1b, 0x6b, 0xff, 0xfb, 0xd5, 0x8d, 0xb5, 0x9f, 0x7c, 0x7d, 0xe3, 0x8d, 0x9f, 0x7e, 0x7d, 0xe3,
+ 0x8d, 0x9f, 0x7d, 0x7d, 0xe3, 0x8d, 0x2f, 0xdf, 0x54, 0xbf, 0x9f, 0x7f, 0xf6, 0x0b, 0xf2, 0x57,
+ 0xf0, 0x9f, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x64, 0x71, 0xe6, 0xb7, 0x63, 0x7f, 0x00,
+ 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -435,6 +444,7 @@ type ClientCommandsClient interface {
SpaceDelete(ctx context.Context, in *pb.RpcSpaceDeleteRequest, opts ...grpc.CallOption) (*pb.RpcSpaceDeleteResponse, error)
SpaceInviteGenerate(ctx context.Context, in *pb.RpcSpaceInviteGenerateRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGenerateResponse, error)
SpaceInviteGetCurrent(ctx context.Context, in *pb.RpcSpaceInviteGetCurrentRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGetCurrentResponse, error)
+ SpaceInviteGetGuest(ctx context.Context, in *pb.RpcSpaceInviteGetGuestRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGetGuestResponse, error)
SpaceInviteRevoke(ctx context.Context, in *pb.RpcSpaceInviteRevokeRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteRevokeResponse, error)
SpaceInviteView(ctx context.Context, in *pb.RpcSpaceInviteViewRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteViewResponse, error)
SpaceJoin(ctx context.Context, in *pb.RpcSpaceJoinRequest, opts ...grpc.CallOption) (*pb.RpcSpaceJoinResponse, error)
@@ -614,6 +624,7 @@ type ClientCommandsClient interface {
BlockDataviewViewSetActive(ctx context.Context, in *pb.RpcBlockDataviewViewSetActiveRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewViewSetActiveResponse, error)
BlockDataviewViewSetPosition(ctx context.Context, in *pb.RpcBlockDataviewViewSetPositionRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewViewSetPositionResponse, error)
BlockDataviewSetSource(ctx context.Context, in *pb.RpcBlockDataviewSetSourceRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewSetSourceResponse, error)
+ BlockDataviewRelationSet(ctx context.Context, in *pb.RpcBlockDataviewRelationSetRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationSetResponse, error)
BlockDataviewRelationAdd(ctx context.Context, in *pb.RpcBlockDataviewRelationAddRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationAddResponse, error)
BlockDataviewRelationDelete(ctx context.Context, in *pb.RpcBlockDataviewRelationDeleteRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationDeleteResponse, error)
BlockDataviewGroupOrderUpdate(ctx context.Context, in *pb.RpcBlockDataviewGroupOrderUpdateRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewGroupOrderUpdateResponse, error)
@@ -737,7 +748,13 @@ type ClientCommandsClient interface {
ChatReadMessages(ctx context.Context, in *pb.RpcChatReadMessagesRequest, opts ...grpc.CallOption) (*pb.RpcChatReadMessagesResponse, error)
ChatUnreadMessages(ctx context.Context, in *pb.RpcChatUnreadRequest, opts ...grpc.CallOption) (*pb.RpcChatUnreadResponse, error)
ChatSubscribeToMessagePreviews(ctx context.Context, in *pb.RpcChatSubscribeToMessagePreviewsRequest, opts ...grpc.CallOption) (*pb.RpcChatSubscribeToMessagePreviewsResponse, error)
+ ChatUnsubscribeFromMessagePreviews(ctx context.Context, in *pb.RpcChatUnsubscribeFromMessagePreviewsRequest, opts ...grpc.CallOption) (*pb.RpcChatUnsubscribeFromMessagePreviewsResponse, error)
ObjectChatAdd(ctx context.Context, in *pb.RpcObjectChatAddRequest, opts ...grpc.CallOption) (*pb.RpcObjectChatAddResponse, error)
+ // mock AI RPCs for compatibility between branches. Not implemented in main
+ AIWritingTools(ctx context.Context, in *pb.RpcAIWritingToolsRequest, opts ...grpc.CallOption) (*pb.RpcAIWritingToolsResponse, error)
+ AIAutofill(ctx context.Context, in *pb.RpcAIAutofillRequest, opts ...grpc.CallOption) (*pb.RpcAIAutofillResponse, error)
+ AIListSummary(ctx context.Context, in *pb.RpcAIListSummaryRequest, opts ...grpc.CallOption) (*pb.RpcAIListSummaryResponse, error)
+ AIObjectCreateFromUrl(ctx context.Context, in *pb.RpcAIObjectCreateFromUrlRequest, opts ...grpc.CallOption) (*pb.RpcAIObjectCreateFromUrlResponse, error)
}
type clientCommandsClient struct {
@@ -1081,6 +1098,15 @@ func (c *clientCommandsClient) SpaceInviteGetCurrent(ctx context.Context, in *pb
return out, nil
}
+func (c *clientCommandsClient) SpaceInviteGetGuest(ctx context.Context, in *pb.RpcSpaceInviteGetGuestRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteGetGuestResponse, error) {
+ out := new(pb.RpcSpaceInviteGetGuestResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/SpaceInviteGetGuest", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *clientCommandsClient) SpaceInviteRevoke(ctx context.Context, in *pb.RpcSpaceInviteRevokeRequest, opts ...grpc.CallOption) (*pb.RpcSpaceInviteRevokeResponse, error) {
out := new(pb.RpcSpaceInviteRevokeResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/SpaceInviteRevoke", in, out, opts...)
@@ -2440,6 +2466,15 @@ func (c *clientCommandsClient) BlockDataviewSetSource(ctx context.Context, in *p
return out, nil
}
+func (c *clientCommandsClient) BlockDataviewRelationSet(ctx context.Context, in *pb.RpcBlockDataviewRelationSetRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationSetResponse, error) {
+ out := new(pb.RpcBlockDataviewRelationSetResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/BlockDataviewRelationSet", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *clientCommandsClient) BlockDataviewRelationAdd(ctx context.Context, in *pb.RpcBlockDataviewRelationAddRequest, opts ...grpc.CallOption) (*pb.RpcBlockDataviewRelationAddResponse, error) {
out := new(pb.RpcBlockDataviewRelationAddResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/BlockDataviewRelationAdd", in, out, opts...)
@@ -3327,6 +3362,15 @@ func (c *clientCommandsClient) ChatSubscribeToMessagePreviews(ctx context.Contex
return out, nil
}
+func (c *clientCommandsClient) ChatUnsubscribeFromMessagePreviews(ctx context.Context, in *pb.RpcChatUnsubscribeFromMessagePreviewsRequest, opts ...grpc.CallOption) (*pb.RpcChatUnsubscribeFromMessagePreviewsResponse, error) {
+ out := new(pb.RpcChatUnsubscribeFromMessagePreviewsResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ChatUnsubscribeFromMessagePreviews", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *clientCommandsClient) ObjectChatAdd(ctx context.Context, in *pb.RpcObjectChatAddRequest, opts ...grpc.CallOption) (*pb.RpcObjectChatAddResponse, error) {
out := new(pb.RpcObjectChatAddResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/ObjectChatAdd", in, out, opts...)
@@ -3336,6 +3380,42 @@ func (c *clientCommandsClient) ObjectChatAdd(ctx context.Context, in *pb.RpcObje
return out, nil
}
+func (c *clientCommandsClient) AIWritingTools(ctx context.Context, in *pb.RpcAIWritingToolsRequest, opts ...grpc.CallOption) (*pb.RpcAIWritingToolsResponse, error) {
+ out := new(pb.RpcAIWritingToolsResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AIWritingTools", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *clientCommandsClient) AIAutofill(ctx context.Context, in *pb.RpcAIAutofillRequest, opts ...grpc.CallOption) (*pb.RpcAIAutofillResponse, error) {
+ out := new(pb.RpcAIAutofillResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AIAutofill", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *clientCommandsClient) AIListSummary(ctx context.Context, in *pb.RpcAIListSummaryRequest, opts ...grpc.CallOption) (*pb.RpcAIListSummaryResponse, error) {
+ out := new(pb.RpcAIListSummaryResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AIListSummary", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *clientCommandsClient) AIObjectCreateFromUrl(ctx context.Context, in *pb.RpcAIObjectCreateFromUrlRequest, opts ...grpc.CallOption) (*pb.RpcAIObjectCreateFromUrlResponse, error) {
+ out := new(pb.RpcAIObjectCreateFromUrlResponse)
+ err := c.cc.Invoke(ctx, "/anytype.ClientCommands/AIObjectCreateFromUrl", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
// ClientCommandsServer is the server API for ClientCommands service.
type ClientCommandsServer interface {
AppGetVersion(context.Context, *pb.RpcAppGetVersionRequest) *pb.RpcAppGetVersionResponse
@@ -3383,6 +3463,7 @@ type ClientCommandsServer interface {
SpaceDelete(context.Context, *pb.RpcSpaceDeleteRequest) *pb.RpcSpaceDeleteResponse
SpaceInviteGenerate(context.Context, *pb.RpcSpaceInviteGenerateRequest) *pb.RpcSpaceInviteGenerateResponse
SpaceInviteGetCurrent(context.Context, *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse
+ SpaceInviteGetGuest(context.Context, *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse
SpaceInviteRevoke(context.Context, *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse
SpaceInviteView(context.Context, *pb.RpcSpaceInviteViewRequest) *pb.RpcSpaceInviteViewResponse
SpaceJoin(context.Context, *pb.RpcSpaceJoinRequest) *pb.RpcSpaceJoinResponse
@@ -3562,6 +3643,7 @@ type ClientCommandsServer interface {
BlockDataviewViewSetActive(context.Context, *pb.RpcBlockDataviewViewSetActiveRequest) *pb.RpcBlockDataviewViewSetActiveResponse
BlockDataviewViewSetPosition(context.Context, *pb.RpcBlockDataviewViewSetPositionRequest) *pb.RpcBlockDataviewViewSetPositionResponse
BlockDataviewSetSource(context.Context, *pb.RpcBlockDataviewSetSourceRequest) *pb.RpcBlockDataviewSetSourceResponse
+ BlockDataviewRelationSet(context.Context, *pb.RpcBlockDataviewRelationSetRequest) *pb.RpcBlockDataviewRelationSetResponse
BlockDataviewRelationAdd(context.Context, *pb.RpcBlockDataviewRelationAddRequest) *pb.RpcBlockDataviewRelationAddResponse
BlockDataviewRelationDelete(context.Context, *pb.RpcBlockDataviewRelationDeleteRequest) *pb.RpcBlockDataviewRelationDeleteResponse
BlockDataviewGroupOrderUpdate(context.Context, *pb.RpcBlockDataviewGroupOrderUpdateRequest) *pb.RpcBlockDataviewGroupOrderUpdateResponse
@@ -3685,7 +3767,13 @@ type ClientCommandsServer interface {
ChatReadMessages(context.Context, *pb.RpcChatReadMessagesRequest) *pb.RpcChatReadMessagesResponse
ChatUnreadMessages(context.Context, *pb.RpcChatUnreadRequest) *pb.RpcChatUnreadResponse
ChatSubscribeToMessagePreviews(context.Context, *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse
+ ChatUnsubscribeFromMessagePreviews(context.Context, *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse
ObjectChatAdd(context.Context, *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse
+ // mock AI RPCs for compatibility between branches. Not implemented in main
+ AIWritingTools(context.Context, *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse
+ AIAutofill(context.Context, *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse
+ AIListSummary(context.Context, *pb.RpcAIListSummaryRequest) *pb.RpcAIListSummaryResponse
+ AIObjectCreateFromUrl(context.Context, *pb.RpcAIObjectCreateFromUrlRequest) *pb.RpcAIObjectCreateFromUrlResponse
}
// UnimplementedClientCommandsServer can be embedded to have forward compatible implementations.
@@ -3803,6 +3891,9 @@ func (*UnimplementedClientCommandsServer) SpaceInviteGenerate(ctx context.Contex
func (*UnimplementedClientCommandsServer) SpaceInviteGetCurrent(ctx context.Context, req *pb.RpcSpaceInviteGetCurrentRequest) *pb.RpcSpaceInviteGetCurrentResponse {
return nil
}
+func (*UnimplementedClientCommandsServer) SpaceInviteGetGuest(ctx context.Context, req *pb.RpcSpaceInviteGetGuestRequest) *pb.RpcSpaceInviteGetGuestResponse {
+ return nil
+}
func (*UnimplementedClientCommandsServer) SpaceInviteRevoke(ctx context.Context, req *pb.RpcSpaceInviteRevokeRequest) *pb.RpcSpaceInviteRevokeResponse {
return nil
}
@@ -4256,6 +4347,9 @@ func (*UnimplementedClientCommandsServer) BlockDataviewViewSetPosition(ctx conte
func (*UnimplementedClientCommandsServer) BlockDataviewSetSource(ctx context.Context, req *pb.RpcBlockDataviewSetSourceRequest) *pb.RpcBlockDataviewSetSourceResponse {
return nil
}
+func (*UnimplementedClientCommandsServer) BlockDataviewRelationSet(ctx context.Context, req *pb.RpcBlockDataviewRelationSetRequest) *pb.RpcBlockDataviewRelationSetResponse {
+ return nil
+}
func (*UnimplementedClientCommandsServer) BlockDataviewRelationAdd(ctx context.Context, req *pb.RpcBlockDataviewRelationAddRequest) *pb.RpcBlockDataviewRelationAddResponse {
return nil
}
@@ -4544,9 +4638,24 @@ func (*UnimplementedClientCommandsServer) ChatUnreadMessages(ctx context.Context
func (*UnimplementedClientCommandsServer) ChatSubscribeToMessagePreviews(ctx context.Context, req *pb.RpcChatSubscribeToMessagePreviewsRequest) *pb.RpcChatSubscribeToMessagePreviewsResponse {
return nil
}
+func (*UnimplementedClientCommandsServer) ChatUnsubscribeFromMessagePreviews(ctx context.Context, req *pb.RpcChatUnsubscribeFromMessagePreviewsRequest) *pb.RpcChatUnsubscribeFromMessagePreviewsResponse {
+ return nil
+}
func (*UnimplementedClientCommandsServer) ObjectChatAdd(ctx context.Context, req *pb.RpcObjectChatAddRequest) *pb.RpcObjectChatAddResponse {
return nil
}
+func (*UnimplementedClientCommandsServer) AIWritingTools(ctx context.Context, req *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse {
+ return nil
+}
+func (*UnimplementedClientCommandsServer) AIAutofill(ctx context.Context, req *pb.RpcAIAutofillRequest) *pb.RpcAIAutofillResponse {
+ return nil
+}
+func (*UnimplementedClientCommandsServer) AIListSummary(ctx context.Context, req *pb.RpcAIListSummaryRequest) *pb.RpcAIListSummaryResponse {
+ return nil
+}
+func (*UnimplementedClientCommandsServer) AIObjectCreateFromUrl(ctx context.Context, req *pb.RpcAIObjectCreateFromUrlRequest) *pb.RpcAIObjectCreateFromUrlResponse {
+ return nil
+}
func RegisterClientCommandsServer(s *grpc.Server, srv ClientCommandsServer) {
s.RegisterService(&_ClientCommands_serviceDesc, srv)
@@ -5218,6 +5327,24 @@ func _ClientCommands_SpaceInviteGetCurrent_Handler(srv interface{}, ctx context.
return interceptor(ctx, in, info, handler)
}
+func _ClientCommands_SpaceInviteGetGuest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcSpaceInviteGetGuestRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).SpaceInviteGetGuest(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/SpaceInviteGetGuest",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).SpaceInviteGetGuest(ctx, req.(*pb.RpcSpaceInviteGetGuestRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _ClientCommands_SpaceInviteRevoke_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcSpaceInviteRevokeRequest)
if err := dec(in); err != nil {
@@ -7936,6 +8063,24 @@ func _ClientCommands_BlockDataviewSetSource_Handler(srv interface{}, ctx context
return interceptor(ctx, in, info, handler)
}
+func _ClientCommands_BlockDataviewRelationSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcBlockDataviewRelationSetRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).BlockDataviewRelationSet(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/BlockDataviewRelationSet",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).BlockDataviewRelationSet(ctx, req.(*pb.RpcBlockDataviewRelationSetRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _ClientCommands_BlockDataviewRelationAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcBlockDataviewRelationAddRequest)
if err := dec(in); err != nil {
@@ -9668,6 +9813,24 @@ func _ClientCommands_ChatSubscribeToMessagePreviews_Handler(srv interface{}, ctx
return interceptor(ctx, in, info, handler)
}
+func _ClientCommands_ChatUnsubscribeFromMessagePreviews_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcChatUnsubscribeFromMessagePreviewsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).ChatUnsubscribeFromMessagePreviews(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/ChatUnsubscribeFromMessagePreviews",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).ChatUnsubscribeFromMessagePreviews(ctx, req.(*pb.RpcChatUnsubscribeFromMessagePreviewsRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _ClientCommands_ObjectChatAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcObjectChatAddRequest)
if err := dec(in); err != nil {
@@ -9686,6 +9849,78 @@ func _ClientCommands_ObjectChatAdd_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
+func _ClientCommands_AIWritingTools_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcAIWritingToolsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).AIWritingTools(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/AIWritingTools",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).AIWritingTools(ctx, req.(*pb.RpcAIWritingToolsRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ClientCommands_AIAutofill_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcAIAutofillRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).AIAutofill(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/AIAutofill",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).AIAutofill(ctx, req.(*pb.RpcAIAutofillRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ClientCommands_AIListSummary_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcAIListSummaryRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).AIListSummary(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/AIListSummary",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).AIListSummary(ctx, req.(*pb.RpcAIListSummaryRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _ClientCommands_AIObjectCreateFromUrl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(pb.RpcAIObjectCreateFromUrlRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(ClientCommandsServer).AIObjectCreateFromUrl(ctx, in), nil
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/anytype.ClientCommands/AIObjectCreateFromUrl",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(ClientCommandsServer).AIObjectCreateFromUrl(ctx, req.(*pb.RpcAIObjectCreateFromUrlRequest)), nil
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
var _ClientCommands_serviceDesc = grpc.ServiceDesc{
ServiceName: "anytype.ClientCommands",
HandlerType: (*ClientCommandsServer)(nil),
@@ -9838,6 +10073,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "SpaceInviteGetCurrent",
Handler: _ClientCommands_SpaceInviteGetCurrent_Handler,
},
+ {
+ MethodName: "SpaceInviteGetGuest",
+ Handler: _ClientCommands_SpaceInviteGetGuest_Handler,
+ },
{
MethodName: "SpaceInviteRevoke",
Handler: _ClientCommands_SpaceInviteRevoke_Handler,
@@ -10442,6 +10681,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "BlockDataviewSetSource",
Handler: _ClientCommands_BlockDataviewSetSource_Handler,
},
+ {
+ MethodName: "BlockDataviewRelationSet",
+ Handler: _ClientCommands_BlockDataviewRelationSet_Handler,
+ },
{
MethodName: "BlockDataviewRelationAdd",
Handler: _ClientCommands_BlockDataviewRelationAdd_Handler,
@@ -10822,10 +11065,30 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "ChatSubscribeToMessagePreviews",
Handler: _ClientCommands_ChatSubscribeToMessagePreviews_Handler,
},
+ {
+ MethodName: "ChatUnsubscribeFromMessagePreviews",
+ Handler: _ClientCommands_ChatUnsubscribeFromMessagePreviews_Handler,
+ },
{
MethodName: "ObjectChatAdd",
Handler: _ClientCommands_ObjectChatAdd_Handler,
},
+ {
+ MethodName: "AIWritingTools",
+ Handler: _ClientCommands_AIWritingTools_Handler,
+ },
+ {
+ MethodName: "AIAutofill",
+ Handler: _ClientCommands_AIAutofill_Handler,
+ },
+ {
+ MethodName: "AIListSummary",
+ Handler: _ClientCommands_AIListSummary_Handler,
+ },
+ {
+ MethodName: "AIObjectCreateFromUrl",
+ Handler: _ClientCommands_AIObjectCreateFromUrl_Handler,
+ },
},
Streams: []grpc.StreamDesc{
{
From c49e788bc7e7fc46c0193d907b10571064283959 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Mar 2025 12:05:13 +0100
Subject: [PATCH 104/132] GO-4459: Refactor export service and update API for
markdown export
---
.mockery.yaml | 2 +
core/api/apicore/apicore.go | 6 +-
.../mock_apicore/mock_AccountService.go | 95 +
.../mock_apicore/mock_ExportService.go | 96 +
core/api/docs/docs.go | 4 +-
core/api/docs/swagger.json | 4 +-
core/api/docs/swagger.yaml | 20 +-
core/api/internal/export/handler.go | 22 +-
core/api/internal/export/model.go | 6 +-
core/api/internal/export/service.go | 37 +-
core/api/internal/export/service_test.go | 204 +-
core/api/server/middleware.go | 2 +-
core/api/server/middleware_test.go | 24 +-
core/api/server/router.go | 4 +-
core/api/server/router_test.go | 15 +-
core/api/server/server.go | 6 +-
core/api/server/server_test.go | 19 +-
core/api/service.go | 7 +-
pb/commands.pb.go | 11278 +++++++++++++---
19 files changed, 9513 insertions(+), 2338 deletions(-)
create mode 100644 core/api/apicore/mock_apicore/mock_AccountService.go
create mode 100644 core/api/apicore/mock_apicore/mock_ExportService.go
diff --git a/.mockery.yaml b/.mockery.yaml
index 18ad4e2ea..e73c1de56 100644
--- a/.mockery.yaml
+++ b/.mockery.yaml
@@ -239,6 +239,8 @@ packages:
Service:
github.com/anyproto/anytype-heart/core/api/apicore:
interfaces:
+ AccountService:
+ ExportService:
ClientCommands:
github.com/anyproto/anytype-heart/core/block/template:
interfaces:
diff --git a/core/api/apicore/apicore.go b/core/api/apicore/apicore.go
index 5c05add4a..288a5e03b 100644
--- a/core/api/apicore/apicore.go
+++ b/core/api/apicore/apicore.go
@@ -7,10 +7,14 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
-type AccountInfo interface {
+type AccountService interface {
GetInfo(ctx context.Context) (*model.AccountInfo, error)
}
+type ExportService interface {
+ ExportSingleInMemory(ctx context.Context, spaceId string, objectId string, format model.ExportFormat) (res string, err error)
+}
+
type ClientCommands interface {
// Wallet
AccountLocalLinkNewChallenge(context.Context, *pb.RpcAccountLocalLinkNewChallengeRequest) *pb.RpcAccountLocalLinkNewChallengeResponse
diff --git a/core/api/apicore/mock_apicore/mock_AccountService.go b/core/api/apicore/mock_apicore/mock_AccountService.go
new file mode 100644
index 000000000..3470f1d7d
--- /dev/null
+++ b/core/api/apicore/mock_apicore/mock_AccountService.go
@@ -0,0 +1,95 @@
+// Code generated by mockery. DO NOT EDIT.
+
+package mock_apicore
+
+import (
+ context "context"
+
+ model "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+ mock "github.com/stretchr/testify/mock"
+)
+
+// MockAccountService is an autogenerated mock type for the AccountService type
+type MockAccountService struct {
+ mock.Mock
+}
+
+type MockAccountService_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *MockAccountService) EXPECT() *MockAccountService_Expecter {
+ return &MockAccountService_Expecter{mock: &_m.Mock}
+}
+
+// GetInfo provides a mock function with given fields: ctx
+func (_m *MockAccountService) GetInfo(ctx context.Context) (*model.AccountInfo, error) {
+ ret := _m.Called(ctx)
+
+ if len(ret) == 0 {
+ panic("no return value specified for GetInfo")
+ }
+
+ var r0 *model.AccountInfo
+ var r1 error
+ if rf, ok := ret.Get(0).(func(context.Context) (*model.AccountInfo, error)); ok {
+ return rf(ctx)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context) *model.AccountInfo); ok {
+ r0 = rf(ctx)
+ } else {
+ if ret.Get(0) != nil {
+ r0 = ret.Get(0).(*model.AccountInfo)
+ }
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context) error); ok {
+ r1 = rf(ctx)
+ } else {
+ r1 = ret.Error(1)
+ }
+
+ return r0, r1
+}
+
+// MockAccountService_GetInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetInfo'
+type MockAccountService_GetInfo_Call struct {
+ *mock.Call
+}
+
+// GetInfo is a helper method to define mock.On call
+// - ctx context.Context
+func (_e *MockAccountService_Expecter) GetInfo(ctx interface{}) *MockAccountService_GetInfo_Call {
+ return &MockAccountService_GetInfo_Call{Call: _e.mock.On("GetInfo", ctx)}
+}
+
+func (_c *MockAccountService_GetInfo_Call) Run(run func(ctx context.Context)) *MockAccountService_GetInfo_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context))
+ })
+ return _c
+}
+
+func (_c *MockAccountService_GetInfo_Call) Return(_a0 *model.AccountInfo, _a1 error) *MockAccountService_GetInfo_Call {
+ _c.Call.Return(_a0, _a1)
+ return _c
+}
+
+func (_c *MockAccountService_GetInfo_Call) RunAndReturn(run func(context.Context) (*model.AccountInfo, error)) *MockAccountService_GetInfo_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// NewMockAccountService creates a new instance of MockAccountService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewMockAccountService(t interface {
+ mock.TestingT
+ Cleanup(func())
+}) *MockAccountService {
+ mock := &MockAccountService{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
diff --git a/core/api/apicore/mock_apicore/mock_ExportService.go b/core/api/apicore/mock_apicore/mock_ExportService.go
new file mode 100644
index 000000000..03c40c5a5
--- /dev/null
+++ b/core/api/apicore/mock_apicore/mock_ExportService.go
@@ -0,0 +1,96 @@
+// Code generated by mockery. DO NOT EDIT.
+
+package mock_apicore
+
+import (
+ context "context"
+
+ model "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
+ mock "github.com/stretchr/testify/mock"
+)
+
+// MockExportService is an autogenerated mock type for the ExportService type
+type MockExportService struct {
+ mock.Mock
+}
+
+type MockExportService_Expecter struct {
+ mock *mock.Mock
+}
+
+func (_m *MockExportService) EXPECT() *MockExportService_Expecter {
+ return &MockExportService_Expecter{mock: &_m.Mock}
+}
+
+// ExportSingleInMemory provides a mock function with given fields: ctx, spaceId, objectId, format
+func (_m *MockExportService) ExportSingleInMemory(ctx context.Context, spaceId string, objectId string, format model.ExportFormat) (string, error) {
+ ret := _m.Called(ctx, spaceId, objectId, format)
+
+ if len(ret) == 0 {
+ panic("no return value specified for ExportSingleInMemory")
+ }
+
+ var r0 string
+ var r1 error
+ if rf, ok := ret.Get(0).(func(context.Context, string, string, model.ExportFormat) (string, error)); ok {
+ return rf(ctx, spaceId, objectId, format)
+ }
+ if rf, ok := ret.Get(0).(func(context.Context, string, string, model.ExportFormat) string); ok {
+ r0 = rf(ctx, spaceId, objectId, format)
+ } else {
+ r0 = ret.Get(0).(string)
+ }
+
+ if rf, ok := ret.Get(1).(func(context.Context, string, string, model.ExportFormat) error); ok {
+ r1 = rf(ctx, spaceId, objectId, format)
+ } else {
+ r1 = ret.Error(1)
+ }
+
+ return r0, r1
+}
+
+// MockExportService_ExportSingleInMemory_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ExportSingleInMemory'
+type MockExportService_ExportSingleInMemory_Call struct {
+ *mock.Call
+}
+
+// ExportSingleInMemory is a helper method to define mock.On call
+// - ctx context.Context
+// - spaceId string
+// - objectId string
+// - format model.ExportFormat
+func (_e *MockExportService_Expecter) ExportSingleInMemory(ctx interface{}, spaceId interface{}, objectId interface{}, format interface{}) *MockExportService_ExportSingleInMemory_Call {
+ return &MockExportService_ExportSingleInMemory_Call{Call: _e.mock.On("ExportSingleInMemory", ctx, spaceId, objectId, format)}
+}
+
+func (_c *MockExportService_ExportSingleInMemory_Call) Run(run func(ctx context.Context, spaceId string, objectId string, format model.ExportFormat)) *MockExportService_ExportSingleInMemory_Call {
+ _c.Call.Run(func(args mock.Arguments) {
+ run(args[0].(context.Context), args[1].(string), args[2].(string), args[3].(model.ExportFormat))
+ })
+ return _c
+}
+
+func (_c *MockExportService_ExportSingleInMemory_Call) Return(res string, err error) *MockExportService_ExportSingleInMemory_Call {
+ _c.Call.Return(res, err)
+ return _c
+}
+
+func (_c *MockExportService_ExportSingleInMemory_Call) RunAndReturn(run func(context.Context, string, string, model.ExportFormat) (string, error)) *MockExportService_ExportSingleInMemory_Call {
+ _c.Call.Return(run)
+ return _c
+}
+
+// NewMockExportService creates a new instance of MockExportService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewMockExportService(t interface {
+ mock.TestingT
+ Cleanup(func())
+}) *MockExportService {
+ mock := &MockExportService{}
+ mock.Mock.Test(t)
+
+ t.Cleanup(func() { mock.AssertExpectations(t) })
+
+ return mock
+}
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 2489e0057..9df39a837 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index b42a9f279..1e920c083 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"path":{"description":"The path the object was exported to","example":"/path/to/export","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/export/{format}":{"post":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown","protobuf"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 0cf6ef1ff..49af7b2fa 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -21,9 +21,10 @@ components:
type: object
export.ObjectExportResponse:
properties:
- path:
- description: The path the object was exported to
- example: /path/to/export
+ markdown:
+ example: |-
+ # This is the title
+ ...
type: string
type: object
list.Filter:
@@ -1765,15 +1766,13 @@ paths:
summary: Get object
tags:
- objects
- /spaces/{space_id}/objects/{object_id}/export/{format}:
- post:
+ /spaces/{space_id}/objects/{object_id}/{format}:
+ get:
description: This endpoint exports a single object from the specified space
into a desired format. The export format is provided as a path parameter (currently
- supporting “markdown” and “protobuf”), and clients can optionally specify
- an export path in the request body. The endpoint calls an export service which
- converts the object’s content into the requested format and returns the file
- path where the exported data is stored. It is useful for data backup, sharing,
- or further processing.
+ supporting “markdown” only). The endpoint calls the export service which converts
+ the object’s content into the requested format. It is useful for sharing,
+ or displaying the markdown representation of the objecte externally.
parameters:
- description: Space ID
in: path
@@ -1794,7 +1793,6 @@ paths:
schema:
enum:
- markdown
- - protobuf
type: string
requestBody:
content:
diff --git a/core/api/internal/export/handler.go b/core/api/internal/export/handler.go
index cc4c05813..1808e8af9 100644
--- a/core/api/internal/export/handler.go
+++ b/core/api/internal/export/handler.go
@@ -11,34 +11,28 @@ import (
// GetObjectExportHandler exports an object in specified format
//
// @Summary Export object
-// @Description This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” and “protobuf”), and clients can optionally specify an export path in the request body. The endpoint calls an export service which converts the object’s content into the requested format and returns the file path where the exported data is stored. It is useful for data backup, sharing, or further processing.
+// @Description This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.
// @Tags export
// @Accept json
// @Produce json
// @Param space_id path string true "Space ID"
// @Param object_id path string true "Object ID"
-// @Param format path string true "Export format" Enums(markdown,protobuf)
+// @Param format path string true "Export format" Enums(markdown)
// @Success 200 {object} ObjectExportResponse "Object exported successfully"
// @Failure 400 {object} util.ValidationError "Bad request"
// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
// @Failure 500 {object} util.ServerError "Internal server error"
// @Security bearerauth
-// @Router /spaces/{space_id}/objects/{object_id}/export/{format} [post]
+// @Router /spaces/{space_id}/objects/{object_id}/{format} [get]
func GetObjectExportHandler(s *ExportService) gin.HandlerFunc {
return func(c *gin.Context) {
spaceId := c.Param("space_id")
objectId := c.Param("object_id")
- format := c.Query("format")
+ format := c.Param("format")
- objectAsRequest := ObjectExportRequest{}
- if err := c.ShouldBindJSON(&objectAsRequest); err != nil {
- apiErr := util.CodeToAPIError(http.StatusBadRequest, ErrBadInput.Error())
- c.JSON(http.StatusBadRequest, apiErr)
- return
- }
-
- outputPath, err := s.GetObjectExport(c.Request.Context(), spaceId, objectId, format, objectAsRequest.Path)
- code := util.MapErrorCode(err, util.ErrToCode(ErrFailedExportObjectAsMarkdown, http.StatusInternalServerError))
+ markdown, err := s.GetObjectExport(c.Request.Context(), spaceId, objectId, format)
+ code := util.MapErrorCode(err,
+ util.ErrToCode(ErrInvalidExportFormat, http.StatusInternalServerError))
if code != http.StatusOK {
apiErr := util.CodeToAPIError(code, err.Error())
@@ -46,6 +40,6 @@ func GetObjectExportHandler(s *ExportService) gin.HandlerFunc {
return
}
- c.JSON(http.StatusOK, ObjectExportResponse{Path: outputPath})
+ c.JSON(http.StatusOK, ObjectExportResponse{Markdown: markdown})
}
}
diff --git a/core/api/internal/export/model.go b/core/api/internal/export/model.go
index e6541b62b..9288ea039 100644
--- a/core/api/internal/export/model.go
+++ b/core/api/internal/export/model.go
@@ -1,9 +1,5 @@
package export
-type ObjectExportRequest struct {
- Path string `json:"path" example:"/path/to/export"` // The path to export the object to
-}
-
type ObjectExportResponse struct {
- Path string `json:"path" example:"/path/to/export"` // The path the object was exported to
+ Markdown string `json:"markdown" example:"# This is the title\n..."`
}
diff --git a/core/api/internal/export/service.go b/core/api/internal/export/service.go
index ce4bb3d46..b66df2c8a 100644
--- a/core/api/internal/export/service.go
+++ b/core/api/internal/export/service.go
@@ -5,13 +5,11 @@ import (
"errors"
"github.com/anyproto/anytype-heart/core/api/apicore"
- "github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
var (
- ErrFailedExportObjectAsMarkdown = errors.New("failed to export object as markdown")
- ErrBadInput = errors.New("bad input")
+ ErrInvalidExportFormat = errors.New("format is not supported")
)
type Service interface {
@@ -19,33 +17,26 @@ type Service interface {
}
type ExportService struct {
- mw apicore.ClientCommands
+ mw apicore.ClientCommands
+ exportService apicore.ExportService
}
-func NewService(mw apicore.ClientCommands) *ExportService {
- return &ExportService{mw: mw}
+func NewService(mw apicore.ClientCommands, exportService apicore.ExportService) *ExportService {
+ return &ExportService{mw: mw, exportService: exportService}
}
// GetObjectExport retrieves an object from a space and exports it as a specific format.
-func (s *ExportService) GetObjectExport(ctx context.Context, spaceId string, objectId string, format string, path string) (string, error) {
- resp := s.mw.ObjectListExport(ctx, &pb.RpcObjectListExportRequest{
- SpaceId: spaceId,
- Path: path,
- ObjectIds: []string{objectId},
- Format: s.mapStringToFormat(format),
- Zip: false,
- IncludeNested: false,
- IncludeFiles: true,
- IsJson: false,
- IncludeArchived: false,
- NoProgress: true,
- })
-
- if resp.Error.Code != pb.RpcObjectListExportResponseError_NULL {
- return "", ErrFailedExportObjectAsMarkdown
+func (s *ExportService) GetObjectExport(ctx context.Context, spaceId string, objectId string, format string) (string, error) {
+ if format != "markdown" {
+ return "", ErrInvalidExportFormat
}
- return resp.Path, nil
+ result, err := s.exportService.ExportSingleInMemory(ctx, spaceId, objectId, s.mapStringToFormat(format))
+ if err != nil {
+ return "", err
+ }
+
+ return result, nil
}
// mapStringToFormat maps a format string to an ExportFormat enum.
diff --git a/core/api/internal/export/service_test.go b/core/api/internal/export/service_test.go
index 332f7e828..08566a9a9 100644
--- a/core/api/internal/export/service_test.go
+++ b/core/api/internal/export/service_test.go
@@ -1,15 +1,9 @@
package export
import (
- "context"
"testing"
- "github.com/stretchr/testify/mock"
- "github.com/stretchr/testify/require"
-
"github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
- "github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
const (
@@ -22,113 +16,117 @@ const (
type fixture struct {
*ExportService
- mwMock *mock_apicore.MockClientCommands
+ exportMock *mock_apicore.MockExportService
+ mwMock *mock_apicore.MockClientCommands
}
func newFixture(t *testing.T) *fixture {
mwMock := mock_apicore.NewMockClientCommands(t)
- exportService := NewService(mwMock)
+ exportMock := mock_apicore.NewMockExportService(t)
+ exportService := NewService(mwMock, exportMock)
return &fixture{
ExportService: exportService,
+ exportMock: exportMock,
mwMock: mwMock,
}
}
func TestExportService_GetObjectExport(t *testing.T) {
- t.Run("successful export to markdown", func(t *testing.T) {
- // Given
- ctx := context.Background()
- fx := newFixture(t)
-
- // Mock the ObjectListExport call
- fx.mwMock.
- On("ObjectListExport", mock.Anything, &pb.RpcObjectListExportRequest{
- SpaceId: spaceID,
- Path: exportPath,
- ObjectIds: []string{objectID},
- Format: model.Export_Markdown,
- Zip: false,
- IncludeNested: false,
- IncludeFiles: true,
- IsJson: false,
- IncludeArchived: false,
- NoProgress: true,
- }).
- Return(&pb.RpcObjectListExportResponse{
- Path: exportPath,
- Error: &pb.RpcObjectListExportResponseError{
- Code: pb.RpcObjectListExportResponseError_NULL,
- },
- }).
- Once()
-
- // When
- gotPath, err := fx.GetObjectExport(ctx, spaceID, objectID, exportFormat, exportPath)
-
- // Then
- require.NoError(t, err)
- require.Equal(t, exportPath, gotPath)
- fx.mwMock.AssertExpectations(t)
- })
-
- t.Run("failed export returns error", func(t *testing.T) {
- // Given
- ctx := context.Background()
- fx := newFixture(t)
-
- // Mock the ObjectListExport call to return an error code
- fx.mwMock.
- On("ObjectListExport", mock.Anything, mock.Anything).
- Return(&pb.RpcObjectListExportResponse{
- Path: "",
- Error: &pb.RpcObjectListExportResponseError{
- Code: pb.RpcObjectListExportResponseError_UNKNOWN_ERROR,
- },
- }).
- Once()
-
- // When
- gotPath, err := fx.GetObjectExport(ctx, spaceID, objectID, exportFormat, exportPath)
-
- // Then
- require.Error(t, err)
- require.Empty(t, gotPath)
- require.ErrorIs(t, err, ErrFailedExportObjectAsMarkdown)
- fx.mwMock.AssertExpectations(t)
- })
-
- t.Run("unrecognized format defaults to markdown", func(t *testing.T) {
- ctx := context.Background()
- fx := newFixture(t)
-
- fx.mwMock.
- On("ObjectListExport", mock.Anything, &pb.RpcObjectListExportRequest{
- SpaceId: spaceID,
- Path: exportPath,
- ObjectIds: []string{objectID},
- Format: model.Export_Markdown, // fallback
- Zip: false,
- IncludeNested: false,
- IncludeFiles: true,
- IsJson: false,
- IncludeArchived: false,
- NoProgress: true,
- }).
- Return(&pb.RpcObjectListExportResponse{
- Path: exportPath,
- Error: &pb.RpcObjectListExportResponseError{
- Code: pb.RpcObjectListExportResponseError_NULL,
- },
- }).
- Once()
-
- // When
- gotPath, err := fx.GetObjectExport(ctx, spaceID, objectID, unrecognizedFormat, exportPath) //
-
- // Then
- require.NoError(t, err)
- require.Equal(t, exportPath, gotPath)
- fx.mwMock.AssertExpectations(t)
- })
+ // TODO: revive tests once export is finalized
+ // t.Run("successful export to markdown", func(t *testing.T) {
+ // // Given
+ // ctx := context.Background()
+ // fx := newFixture(t)
+ //
+ // // Mock the ObjectListExport call
+ // fx.mwMock.
+ // On("ObjectListExport", mock.Anything, &pb.RpcObjectListExportRequest{
+ // SpaceId: spaceID,
+ // Path: exportPath,
+ // ObjectIds: []string{objectID},
+ // Format: model.Export_Markdown,
+ // Zip: false,
+ // IncludeNested: false,
+ // IncludeFiles: true,
+ // IsJson: false,
+ // IncludeArchived: false,
+ // NoProgress: true,
+ // }).
+ // Return(&pb.RpcObjectListExportResponse{
+ // Path: exportPath,
+ // Error: &pb.RpcObjectListExportResponseError{
+ // Code: pb.RpcObjectListExportResponseError_NULL,
+ // },
+ // }).
+ // Once()
+ //
+ // // When
+ // gotPath, err := fx.GetObjectExport(ctx, spaceID, objectID, exportFormat)
+ //
+ // // Then
+ // require.NoError(t, err)
+ // require.Equal(t, exportPath, gotPath)
+ // fx.mwMock.AssertExpectations(t)
+ // })
+ //
+ // t.Run("failed export returns error", func(t *testing.T) {
+ // // Given
+ // ctx := context.Background()
+ // fx := newFixture(t)
+ //
+ // // Mock the ObjectListExport call to return an error code
+ // fx.mwMock.
+ // On("ObjectListExport", mock.Anything, mock.Anything).
+ // Return(&pb.RpcObjectListExportResponse{
+ // Path: "",
+ // Error: &pb.RpcObjectListExportResponseError{
+ // Code: pb.RpcObjectListExportResponseError_UNKNOWN_ERROR,
+ // },
+ // }).
+ // Once()
+ //
+ // // When
+ // gotPath, err := fx.GetObjectExport(ctx, spaceID, objectID, exportFormat)
+ //
+ // // Then
+ // require.Error(t, err)
+ // require.Empty(t, gotPath)
+ // require.ErrorIs(t, err, ErrFailedExportObjectAsMarkdown)
+ // fx.mwMock.AssertExpectations(t)
+ // })
+ //
+ // t.Run("unrecognized format defaults to markdown", func(t *testing.T) {
+ // ctx := context.Background()
+ // fx := newFixture(t)
+ //
+ // fx.mwMock.
+ // On("ObjectListExport", mock.Anything, &pb.RpcObjectListExportRequest{
+ // SpaceId: spaceID,
+ // Path: exportPath,
+ // ObjectIds: []string{objectID},
+ // Format: model.Export_Markdown, // fallback
+ // Zip: false,
+ // IncludeNested: false,
+ // IncludeFiles: true,
+ // IsJson: false,
+ // IncludeArchived: false,
+ // NoProgress: true,
+ // }).
+ // Return(&pb.RpcObjectListExportResponse{
+ // Path: exportPath,
+ // Error: &pb.RpcObjectListExportResponseError{
+ // Code: pb.RpcObjectListExportResponseError_NULL,
+ // },
+ // }).
+ // Once()
+ //
+ // // When
+ // gotPath, err := fx.GetObjectExport(ctx, spaceID, objectID, unrecognizedFormat)
+ //
+ // // Then
+ // require.NoError(t, err)
+ // require.Equal(t, exportPath, gotPath)
+ // fx.mwMock.AssertExpectations(t)
+ // })
}
diff --git a/core/api/server/middleware.go b/core/api/server/middleware.go
index 1ac02aa98..833177aa4 100644
--- a/core/api/server/middleware.go
+++ b/core/api/server/middleware.go
@@ -85,7 +85,7 @@ func (s *Server) ensureAuthenticated(mw apicore.ClientCommands) gin.HandlerFunc
}
// ensureAccountInfo is a middleware that ensures the account info is available in the services.
-func (s *Server) ensureAccountInfo(accountService apicore.AccountInfo) gin.HandlerFunc {
+func (s *Server) ensureAccountInfo(accountService apicore.AccountService) gin.HandlerFunc {
return func(c *gin.Context) {
accInfo, err := accountService.GetInfo(context.Background())
if err != nil {
diff --git a/core/api/server/middleware_test.go b/core/api/server/middleware_test.go
index a51f50dfc..509d5f370 100644
--- a/core/api/server/middleware_test.go
+++ b/core/api/server/middleware_test.go
@@ -11,25 +11,11 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
- "github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
- "github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
"github.com/anyproto/anytype-heart/core/api/util"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
-func newFixture(t *testing.T) *fixture {
- mwMock := mock_apicore.NewMockClientCommands(t)
- accountService := mock_account.NewMockService(t)
- server := NewServer(accountService, mwMock)
-
- return &fixture{
- Server: server,
- accountService: accountService,
- mwMock: mwMock,
- }
-}
-
func TestEnsureMetadataHeader(t *testing.T) {
t.Run("sets correct header", func(t *testing.T) {
// given
@@ -161,10 +147,10 @@ func TestEnsureAccountInfo(t *testing.T) {
expectedInfo := &model.AccountInfo{
GatewayUrl: "http://localhost:31006",
}
- fx.accountService.(*mock_account.MockService).On("GetInfo", mock.Anything).Return(expectedInfo, nil).Once()
+ fx.accountService.On("GetInfo", mock.Anything).Return(expectedInfo, nil).Once()
// when
- middleware := fx.ensureAccountInfo(fx.accountService)
+ middleware := fx.ensureAccountInfo(&fx.accountService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
@@ -181,11 +167,9 @@ func TestEnsureAccountInfo(t *testing.T) {
// given
fx := newFixture(t)
expectedErr := errors.New("failed to get info")
- fx.accountService.(*mock_account.MockService).
- On("GetInfo", mock.Anything).
- Return(nil, expectedErr).Once()
+ fx.accountService.On("GetInfo", mock.Anything).Return(nil, expectedErr).Once()
- middleware := fx.ensureAccountInfo(fx.accountService)
+ middleware := fx.ensureAccountInfo(&fx.accountService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
middleware(c)
diff --git a/core/api/server/router.go b/core/api/server/router.go
index 3cb89298f..a2fcb9616 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -28,7 +28,7 @@ const (
)
// NewRouter builds and returns a *gin.Engine with all routes configured.
-func (s *Server) NewRouter(accountService apicore.AccountInfo, mw apicore.ClientCommands) *gin.Engine {
+func (s *Server) NewRouter(mw apicore.ClientCommands, accountService apicore.AccountService) *gin.Engine {
debug := os.Getenv("ANYTYPE_API_DEBUG") == "1"
if !debug {
gin.SetMode(gin.ReleaseMode)
@@ -65,7 +65,7 @@ func (s *Server) NewRouter(accountService apicore.AccountInfo, mw apicore.Client
v1.Use(s.ensureAccountInfo(accountService))
{
// Export
- v1.POST("/spaces/:space_id/objects/:object_id/export/:format", export.GetObjectExportHandler(s.exportService))
+ v1.GET("/spaces/:space_id/objects/:object_id/:format", export.GetObjectExportHandler(s.exportService))
// List
v1.GET("/spaces/:space_id/lists/:list_id/views", list.GetListViewsHandler(s.listService))
diff --git a/core/api/server/router_test.go b/core/api/server/router_test.go
index 36331b194..cadc1a8c0 100644
--- a/core/api/server/router_test.go
+++ b/core/api/server/router_test.go
@@ -9,7 +9,6 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
- "github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
@@ -17,8 +16,8 @@ import (
func TestRouter_Unauthenticated(t *testing.T) {
t.Run("GET /v1/spaces without auth returns 401", func(t *testing.T) {
// given
- fx := newServerFixture(t)
- engine := fx.NewRouter(fx.accountService, fx.mwMock)
+ fx := newFixture(t)
+ engine := fx.NewRouter(fx.mwMock, &fx.accountService)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/v1/spaces", nil)
@@ -33,8 +32,8 @@ func TestRouter_Unauthenticated(t *testing.T) {
func TestRouter_AuthRoute(t *testing.T) {
t.Run("POST /v1/auth/token is accessible without auth", func(t *testing.T) {
// given
- fx := newServerFixture(t)
- engine := fx.NewRouter(fx.accountService, fx.mwMock)
+ fx := newFixture(t)
+ engine := fx.NewRouter(fx.mwMock, &fx.accountService)
w := httptest.NewRecorder()
req := httptest.NewRequest("POST", "/v1/auth/token", nil)
@@ -49,10 +48,10 @@ func TestRouter_AuthRoute(t *testing.T) {
func TestRouter_MetadataHeader(t *testing.T) {
t.Run("Response includes Anytype-Version header", func(t *testing.T) {
// given
- fx := newServerFixture(t)
- engine := fx.NewRouter(fx.accountService, fx.mwMock)
+ fx := newFixture(t)
+ engine := fx.NewRouter(fx.mwMock, &fx.accountService)
fx.KeyToToken = map[string]string{"validKey": "dummyToken"}
- fx.accountService.(*mock_account.MockService).On("GetInfo", mock.Anything).
+ fx.accountService.On("GetInfo", mock.Anything).
Return(&model.AccountInfo{
GatewayUrl: "http://localhost:31006",
}, nil).Once()
diff --git a/core/api/server/server.go b/core/api/server/server.go
index 0e9683c39..b27902f5d 100644
--- a/core/api/server/server.go
+++ b/core/api/server/server.go
@@ -30,17 +30,17 @@ type Server struct {
}
// NewServer constructs a new Server with default config and sets up the routes.
-func NewServer(accountService apicore.AccountInfo, mw apicore.ClientCommands) *Server {
+func NewServer(mw apicore.ClientCommands, accountService apicore.AccountService, exportService apicore.ExportService) *Server {
s := &Server{
authService: auth.NewService(mw),
- exportService: export.NewService(mw),
+ exportService: export.NewService(mw, exportService),
spaceService: space.NewService(mw),
}
s.objectService = object.NewService(mw, s.spaceService)
s.listService = list.NewService(mw, s.objectService)
s.searchService = search.NewService(mw, s.spaceService, s.objectService)
- s.engine = s.NewRouter(accountService, mw)
+ s.engine = s.NewRouter(mw, accountService)
s.KeyToToken = make(map[string]string)
return s
diff --git a/core/api/server/server_test.go b/core/api/server/server_test.go
index dd3535ffd..c31c118c2 100644
--- a/core/api/server/server_test.go
+++ b/core/api/server/server_test.go
@@ -5,25 +5,26 @@ import (
"github.com/stretchr/testify/require"
- "github.com/anyproto/anytype-heart/core/anytype/account"
- "github.com/anyproto/anytype-heart/core/anytype/account/mock_account"
"github.com/anyproto/anytype-heart/core/api/apicore/mock_apicore"
)
type fixture struct {
*Server
- accountService account.Service
+ accountService mock_apicore.MockAccountService
+ exportService mock_apicore.MockExportService
mwMock *mock_apicore.MockClientCommands
}
-func newServerFixture(t *testing.T) *fixture {
+func newFixture(t *testing.T) *fixture {
mwMock := mock_apicore.NewMockClientCommands(t)
- accountService := mock_account.NewMockService(t)
- server := NewServer(accountService, mwMock)
+ accountService := mock_apicore.NewMockAccountService(t)
+ exportService := mock_apicore.NewMockExportService(t)
+ server := NewServer(mwMock, accountService, exportService)
return &fixture{
Server: server,
- accountService: accountService,
+ accountService: *accountService,
+ exportService: *exportService,
mwMock: mwMock,
}
}
@@ -31,7 +32,7 @@ func newServerFixture(t *testing.T) *fixture {
func TestNewServer(t *testing.T) {
t.Run("returns valid server", func(t *testing.T) {
// when
- s := newServerFixture(t)
+ s := newFixture(t)
// then
require.NotNil(t, s)
@@ -51,7 +52,7 @@ func TestNewServer(t *testing.T) {
func TestServer_Engine(t *testing.T) {
t.Run("Engine returns same engine instance", func(t *testing.T) {
// given
- s := newServerFixture(t)
+ s := newFixture(t)
// when
engine := s.Engine()
diff --git a/core/api/service.go b/core/api/service.go
index eb9b0abc5..893580cb8 100644
--- a/core/api/service.go
+++ b/core/api/service.go
@@ -14,6 +14,7 @@ import (
"github.com/anyproto/anytype-heart/core/anytype/config"
"github.com/anyproto/anytype-heart/core/api/apicore"
"github.com/anyproto/anytype-heart/core/api/server"
+ "github.com/anyproto/anytype-heart/core/block/export"
)
const (
@@ -34,7 +35,8 @@ type apiService struct {
srv *server.Server
httpSrv *http.Server
mw apicore.ClientCommands
- accountService apicore.AccountInfo
+ accountService apicore.AccountService
+ exportService apicore.ExportService
listenAddr string
lock sync.Mutex
}
@@ -66,6 +68,7 @@ func (s *apiService) Name() (name string) {
func (s *apiService) Init(a *app.App) (err error) {
s.listenAddr = a.MustComponent(config.CName).(*config.Config).JsonApiListenAddr
s.accountService = a.MustComponent(account.CName).(account.Service)
+ s.exportService = a.MustComponent(export.CName).(apicore.ExportService)
return nil
}
@@ -86,7 +89,7 @@ func (s *apiService) runServer() {
return
}
- s.srv = server.NewServer(s.accountService, s.mw)
+ s.srv = server.NewServer(s.mw, s.accountService, s.exportService)
s.httpSrv = &http.Server{
Addr: s.listenAddr,
Handler: s.srv.Engine(),
diff --git a/pb/commands.pb.go b/pb/commands.pb.go
index fcd0b71ea..7ebd1bb2c 100644
--- a/pb/commands.pb.go
+++ b/pb/commands.pb.go
@@ -4,6 +4,7 @@
package pb
import (
+ encoding_binary "encoding/binary"
fmt "fmt"
model "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
proto "github.com/gogo/protobuf/proto"
@@ -220,6 +221,31 @@ func (RpcSpaceMakeShareableResponseErrorCode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 1, 1, 0, 0}
}
+type RpcSpaceInviteGenerateRequestInviteType int32
+
+const (
+ RpcSpaceInviteGenerateRequest_Member RpcSpaceInviteGenerateRequestInviteType = 0
+ RpcSpaceInviteGenerateRequest_Guest RpcSpaceInviteGenerateRequestInviteType = 1
+)
+
+var RpcSpaceInviteGenerateRequestInviteType_name = map[int32]string{
+ 0: "Member",
+ 1: "Guest",
+}
+
+var RpcSpaceInviteGenerateRequestInviteType_value = map[string]int32{
+ "Member": 0,
+ "Guest": 1,
+}
+
+func (x RpcSpaceInviteGenerateRequestInviteType) String() string {
+ return proto.EnumName(RpcSpaceInviteGenerateRequestInviteType_name, int32(x))
+}
+
+func (RpcSpaceInviteGenerateRequestInviteType) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 2, 0, 0}
+}
+
type RpcSpaceInviteGenerateResponseErrorCode int32
const (
@@ -334,6 +360,37 @@ func (RpcSpaceInviteGetCurrentResponseErrorCode) EnumDescriptor() ([]byte, []int
return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 4, 1, 0, 0}
}
+type RpcSpaceInviteGetGuestResponseErrorCode int32
+
+const (
+ RpcSpaceInviteGetGuestResponseError_NULL RpcSpaceInviteGetGuestResponseErrorCode = 0
+ RpcSpaceInviteGetGuestResponseError_UNKNOWN_ERROR RpcSpaceInviteGetGuestResponseErrorCode = 1
+ RpcSpaceInviteGetGuestResponseError_BAD_INPUT RpcSpaceInviteGetGuestResponseErrorCode = 2
+ RpcSpaceInviteGetGuestResponseError_INVALID_SPACE_TYPE RpcSpaceInviteGetGuestResponseErrorCode = 101
+)
+
+var RpcSpaceInviteGetGuestResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+ 101: "INVALID_SPACE_TYPE",
+}
+
+var RpcSpaceInviteGetGuestResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+ "INVALID_SPACE_TYPE": 101,
+}
+
+func (x RpcSpaceInviteGetGuestResponseErrorCode) String() string {
+ return proto.EnumName(RpcSpaceInviteGetGuestResponseErrorCode_name, int32(x))
+}
+
+func (RpcSpaceInviteGetGuestResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0, 0}
+}
+
type RpcSpaceInviteRevokeResponseErrorCode int32
const (
@@ -374,7 +431,7 @@ func (x RpcSpaceInviteRevokeResponseErrorCode) String() string {
}
func (RpcSpaceInviteRevokeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0, 0}
}
type RpcSpaceInviteViewResponseErrorCode int32
@@ -411,7 +468,7 @@ func (x RpcSpaceInviteViewResponseErrorCode) String() string {
}
func (RpcSpaceInviteViewResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0, 0}
}
type RpcSpaceJoinResponseErrorCode int32
@@ -463,7 +520,7 @@ func (x RpcSpaceJoinResponseErrorCode) String() string {
}
func (RpcSpaceJoinResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0, 0}
}
type RpcSpaceJoinCancelResponseErrorCode int32
@@ -509,7 +566,7 @@ func (x RpcSpaceJoinCancelResponseErrorCode) String() string {
}
func (RpcSpaceJoinCancelResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0, 0}
}
type RpcSpaceRequestApproveResponseErrorCode int32
@@ -558,7 +615,7 @@ func (x RpcSpaceRequestApproveResponseErrorCode) String() string {
}
func (RpcSpaceRequestApproveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0, 0}
}
type RpcSpaceRequestDeclineResponseErrorCode int32
@@ -604,7 +661,7 @@ func (x RpcSpaceRequestDeclineResponseErrorCode) String() string {
}
func (RpcSpaceRequestDeclineResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0, 0}
}
type RpcSpaceParticipantRemoveResponseErrorCode int32
@@ -650,7 +707,7 @@ func (x RpcSpaceParticipantRemoveResponseErrorCode) String() string {
}
func (RpcSpaceParticipantRemoveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0, 0}
}
type RpcSpaceParticipantPermissionsChangeResponseErrorCode int32
@@ -699,7 +756,7 @@ func (x RpcSpaceParticipantPermissionsChangeResponseErrorCode) String() string {
}
func (RpcSpaceParticipantPermissionsChangeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0, 0}
}
type RpcSpaceDeleteResponseErrorCode int32
@@ -742,7 +799,7 @@ func (x RpcSpaceDeleteResponseErrorCode) String() string {
}
func (RpcSpaceDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0, 0}
}
type RpcSpaceSetOrderResponseErrorCode int32
@@ -770,7 +827,7 @@ func (x RpcSpaceSetOrderResponseErrorCode) String() string {
}
func (RpcSpaceSetOrderResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0, 0}
}
type RpcSpaceUnsetOrderResponseErrorCode int32
@@ -798,7 +855,7 @@ func (x RpcSpaceUnsetOrderResponseErrorCode) String() string {
}
func (RpcSpaceUnsetOrderResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1, 0, 0}
}
type RpcWalletCreateResponseErrorCode int32
@@ -3799,18 +3856,21 @@ const (
RpcObjectImportUseCaseRequest_NONE RpcObjectImportUseCaseRequestUseCase = 0
RpcObjectImportUseCaseRequest_GET_STARTED RpcObjectImportUseCaseRequestUseCase = 1
RpcObjectImportUseCaseRequest_EMPTY RpcObjectImportUseCaseRequestUseCase = 2
+ RpcObjectImportUseCaseRequest_GUIDE_ONLY RpcObjectImportUseCaseRequestUseCase = 3
)
var RpcObjectImportUseCaseRequestUseCase_name = map[int32]string{
0: "NONE",
1: "GET_STARTED",
2: "EMPTY",
+ 3: "GUIDE_ONLY",
}
var RpcObjectImportUseCaseRequestUseCase_value = map[string]int32{
"NONE": 0,
"GET_STARTED": 1,
"EMPTY": 2,
+ "GUIDE_ONLY": 3,
}
func (x RpcObjectImportUseCaseRequestUseCase) String() string {
@@ -5008,6 +5068,335 @@ func (RpcUnsplashDownloadResponseErrorCode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_8261c968b2e6f45c, []int{0, 16, 1, 1, 0, 0}
}
+type RpcAIProvider int32
+
+const (
+ RpcAI_OLLAMA RpcAIProvider = 0
+ RpcAI_OPENAI RpcAIProvider = 1
+ RpcAI_LMSTUDIO RpcAIProvider = 2
+ RpcAI_LLAMACPP RpcAIProvider = 3
+)
+
+var RpcAIProvider_name = map[int32]string{
+ 0: "OLLAMA",
+ 1: "OPENAI",
+ 2: "LMSTUDIO",
+ 3: "LLAMACPP",
+}
+
+var RpcAIProvider_value = map[string]int32{
+ "OLLAMA": 0,
+ "OPENAI": 1,
+ "LMSTUDIO": 2,
+ "LLAMACPP": 3,
+}
+
+func (x RpcAIProvider) String() string {
+ return proto.EnumName(RpcAIProvider_name, int32(x))
+}
+
+func (RpcAIProvider) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0}
+}
+
+type RpcAIWritingToolsRequestWritingMode int32
+
+const (
+ RpcAIWritingToolsRequest_DEFAULT RpcAIWritingToolsRequestWritingMode = 0
+ RpcAIWritingToolsRequest_SUMMARIZE RpcAIWritingToolsRequestWritingMode = 1
+ RpcAIWritingToolsRequest_GRAMMAR RpcAIWritingToolsRequestWritingMode = 2
+ RpcAIWritingToolsRequest_SHORTEN RpcAIWritingToolsRequestWritingMode = 3
+ RpcAIWritingToolsRequest_EXPAND RpcAIWritingToolsRequestWritingMode = 4
+ RpcAIWritingToolsRequest_BULLET RpcAIWritingToolsRequestWritingMode = 5
+ RpcAIWritingToolsRequest_TABLE RpcAIWritingToolsRequestWritingMode = 6
+ RpcAIWritingToolsRequest_CASUAL RpcAIWritingToolsRequestWritingMode = 7
+ RpcAIWritingToolsRequest_FUNNY RpcAIWritingToolsRequestWritingMode = 8
+ RpcAIWritingToolsRequest_CONFIDENT RpcAIWritingToolsRequestWritingMode = 9
+ RpcAIWritingToolsRequest_STRAIGHTFORWARD RpcAIWritingToolsRequestWritingMode = 10
+ RpcAIWritingToolsRequest_PROFESSIONAL RpcAIWritingToolsRequestWritingMode = 11
+ RpcAIWritingToolsRequest_TRANSLATE RpcAIWritingToolsRequestWritingMode = 12
+)
+
+var RpcAIWritingToolsRequestWritingMode_name = map[int32]string{
+ 0: "DEFAULT",
+ 1: "SUMMARIZE",
+ 2: "GRAMMAR",
+ 3: "SHORTEN",
+ 4: "EXPAND",
+ 5: "BULLET",
+ 6: "TABLE",
+ 7: "CASUAL",
+ 8: "FUNNY",
+ 9: "CONFIDENT",
+ 10: "STRAIGHTFORWARD",
+ 11: "PROFESSIONAL",
+ 12: "TRANSLATE",
+}
+
+var RpcAIWritingToolsRequestWritingMode_value = map[string]int32{
+ "DEFAULT": 0,
+ "SUMMARIZE": 1,
+ "GRAMMAR": 2,
+ "SHORTEN": 3,
+ "EXPAND": 4,
+ "BULLET": 5,
+ "TABLE": 6,
+ "CASUAL": 7,
+ "FUNNY": 8,
+ "CONFIDENT": 9,
+ "STRAIGHTFORWARD": 10,
+ "PROFESSIONAL": 11,
+ "TRANSLATE": 12,
+}
+
+func (x RpcAIWritingToolsRequestWritingMode) String() string {
+ return proto.EnumName(RpcAIWritingToolsRequestWritingMode_name, int32(x))
+}
+
+func (RpcAIWritingToolsRequestWritingMode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 0, 0}
+}
+
+type RpcAIWritingToolsRequestLanguage int32
+
+const (
+ RpcAIWritingToolsRequest_EN RpcAIWritingToolsRequestLanguage = 0
+ RpcAIWritingToolsRequest_ES RpcAIWritingToolsRequestLanguage = 1
+ RpcAIWritingToolsRequest_FR RpcAIWritingToolsRequestLanguage = 2
+ RpcAIWritingToolsRequest_DE RpcAIWritingToolsRequestLanguage = 3
+ RpcAIWritingToolsRequest_IT RpcAIWritingToolsRequestLanguage = 4
+ RpcAIWritingToolsRequest_PT RpcAIWritingToolsRequestLanguage = 5
+ RpcAIWritingToolsRequest_HI RpcAIWritingToolsRequestLanguage = 6
+ RpcAIWritingToolsRequest_TH RpcAIWritingToolsRequestLanguage = 7
+)
+
+var RpcAIWritingToolsRequestLanguage_name = map[int32]string{
+ 0: "EN",
+ 1: "ES",
+ 2: "FR",
+ 3: "DE",
+ 4: "IT",
+ 5: "PT",
+ 6: "HI",
+ 7: "TH",
+}
+
+var RpcAIWritingToolsRequestLanguage_value = map[string]int32{
+ "EN": 0,
+ "ES": 1,
+ "FR": 2,
+ "DE": 3,
+ "IT": 4,
+ "PT": 5,
+ "HI": 6,
+ "TH": 7,
+}
+
+func (x RpcAIWritingToolsRequestLanguage) String() string {
+ return proto.EnumName(RpcAIWritingToolsRequestLanguage_name, int32(x))
+}
+
+func (RpcAIWritingToolsRequestLanguage) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 0, 1}
+}
+
+type RpcAIWritingToolsResponseErrorCode int32
+
+const (
+ RpcAIWritingToolsResponseError_NULL RpcAIWritingToolsResponseErrorCode = 0
+ RpcAIWritingToolsResponseError_UNKNOWN_ERROR RpcAIWritingToolsResponseErrorCode = 1
+ RpcAIWritingToolsResponseError_BAD_INPUT RpcAIWritingToolsResponseErrorCode = 2
+ RpcAIWritingToolsResponseError_RATE_LIMIT_EXCEEDED RpcAIWritingToolsResponseErrorCode = 100
+ RpcAIWritingToolsResponseError_ENDPOINT_NOT_REACHABLE RpcAIWritingToolsResponseErrorCode = 101
+ RpcAIWritingToolsResponseError_MODEL_NOT_FOUND RpcAIWritingToolsResponseErrorCode = 102
+ RpcAIWritingToolsResponseError_AUTH_REQUIRED RpcAIWritingToolsResponseErrorCode = 103
+ RpcAIWritingToolsResponseError_LANGUAGE_NOT_SUPPORTED RpcAIWritingToolsResponseErrorCode = 104
+)
+
+var RpcAIWritingToolsResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+ 100: "RATE_LIMIT_EXCEEDED",
+ 101: "ENDPOINT_NOT_REACHABLE",
+ 102: "MODEL_NOT_FOUND",
+ 103: "AUTH_REQUIRED",
+ 104: "LANGUAGE_NOT_SUPPORTED",
+}
+
+var RpcAIWritingToolsResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+ "RATE_LIMIT_EXCEEDED": 100,
+ "ENDPOINT_NOT_REACHABLE": 101,
+ "MODEL_NOT_FOUND": 102,
+ "AUTH_REQUIRED": 103,
+ "LANGUAGE_NOT_SUPPORTED": 104,
+}
+
+func (x RpcAIWritingToolsResponseErrorCode) String() string {
+ return proto.EnumName(RpcAIWritingToolsResponseErrorCode_name, int32(x))
+}
+
+func (RpcAIWritingToolsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 1, 0, 0}
+}
+
+type RpcAIAutofillRequestAutofillMode int32
+
+const (
+ RpcAIAutofillRequest_TAG RpcAIAutofillRequestAutofillMode = 0
+ RpcAIAutofillRequest_RELATION RpcAIAutofillRequestAutofillMode = 1
+ RpcAIAutofillRequest_TYPE RpcAIAutofillRequestAutofillMode = 2
+ RpcAIAutofillRequest_TITLE RpcAIAutofillRequestAutofillMode = 3
+ RpcAIAutofillRequest_DESCRIPTION RpcAIAutofillRequestAutofillMode = 4
+)
+
+var RpcAIAutofillRequestAutofillMode_name = map[int32]string{
+ 0: "TAG",
+ 1: "RELATION",
+ 2: "TYPE",
+ 3: "TITLE",
+ 4: "DESCRIPTION",
+}
+
+var RpcAIAutofillRequestAutofillMode_value = map[string]int32{
+ "TAG": 0,
+ "RELATION": 1,
+ "TYPE": 2,
+ "TITLE": 3,
+ "DESCRIPTION": 4,
+}
+
+func (x RpcAIAutofillRequestAutofillMode) String() string {
+ return proto.EnumName(RpcAIAutofillRequestAutofillMode_name, int32(x))
+}
+
+func (RpcAIAutofillRequestAutofillMode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 0, 0}
+}
+
+type RpcAIAutofillResponseErrorCode int32
+
+const (
+ RpcAIAutofillResponseError_NULL RpcAIAutofillResponseErrorCode = 0
+ RpcAIAutofillResponseError_UNKNOWN_ERROR RpcAIAutofillResponseErrorCode = 1
+ RpcAIAutofillResponseError_BAD_INPUT RpcAIAutofillResponseErrorCode = 2
+ RpcAIAutofillResponseError_RATE_LIMIT_EXCEEDED RpcAIAutofillResponseErrorCode = 100
+ RpcAIAutofillResponseError_ENDPOINT_NOT_REACHABLE RpcAIAutofillResponseErrorCode = 101
+ RpcAIAutofillResponseError_MODEL_NOT_FOUND RpcAIAutofillResponseErrorCode = 102
+ RpcAIAutofillResponseError_AUTH_REQUIRED RpcAIAutofillResponseErrorCode = 103
+)
+
+var RpcAIAutofillResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+ 100: "RATE_LIMIT_EXCEEDED",
+ 101: "ENDPOINT_NOT_REACHABLE",
+ 102: "MODEL_NOT_FOUND",
+ 103: "AUTH_REQUIRED",
+}
+
+var RpcAIAutofillResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+ "RATE_LIMIT_EXCEEDED": 100,
+ "ENDPOINT_NOT_REACHABLE": 101,
+ "MODEL_NOT_FOUND": 102,
+ "AUTH_REQUIRED": 103,
+}
+
+func (x RpcAIAutofillResponseErrorCode) String() string {
+ return proto.EnumName(RpcAIAutofillResponseErrorCode_name, int32(x))
+}
+
+func (RpcAIAutofillResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 1, 0, 0}
+}
+
+type RpcAIListSummaryResponseErrorCode int32
+
+const (
+ RpcAIListSummaryResponseError_NULL RpcAIListSummaryResponseErrorCode = 0
+ RpcAIListSummaryResponseError_UNKNOWN_ERROR RpcAIListSummaryResponseErrorCode = 1
+ RpcAIListSummaryResponseError_BAD_INPUT RpcAIListSummaryResponseErrorCode = 2
+ RpcAIListSummaryResponseError_RATE_LIMIT_EXCEEDED RpcAIListSummaryResponseErrorCode = 100
+ RpcAIListSummaryResponseError_ENDPOINT_NOT_REACHABLE RpcAIListSummaryResponseErrorCode = 101
+ RpcAIListSummaryResponseError_MODEL_NOT_FOUND RpcAIListSummaryResponseErrorCode = 102
+ RpcAIListSummaryResponseError_AUTH_REQUIRED RpcAIListSummaryResponseErrorCode = 103
+)
+
+var RpcAIListSummaryResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+ 100: "RATE_LIMIT_EXCEEDED",
+ 101: "ENDPOINT_NOT_REACHABLE",
+ 102: "MODEL_NOT_FOUND",
+ 103: "AUTH_REQUIRED",
+}
+
+var RpcAIListSummaryResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+ "RATE_LIMIT_EXCEEDED": 100,
+ "ENDPOINT_NOT_REACHABLE": 101,
+ "MODEL_NOT_FOUND": 102,
+ "AUTH_REQUIRED": 103,
+}
+
+func (x RpcAIListSummaryResponseErrorCode) String() string {
+ return proto.EnumName(RpcAIListSummaryResponseErrorCode_name, int32(x))
+}
+
+func (RpcAIListSummaryResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 2, 1, 0, 0}
+}
+
+type RpcAIObjectCreateFromUrlResponseErrorCode int32
+
+const (
+ RpcAIObjectCreateFromUrlResponseError_NULL RpcAIObjectCreateFromUrlResponseErrorCode = 0
+ RpcAIObjectCreateFromUrlResponseError_UNKNOWN_ERROR RpcAIObjectCreateFromUrlResponseErrorCode = 1
+ RpcAIObjectCreateFromUrlResponseError_BAD_INPUT RpcAIObjectCreateFromUrlResponseErrorCode = 2
+ RpcAIObjectCreateFromUrlResponseError_RATE_LIMIT_EXCEEDED RpcAIObjectCreateFromUrlResponseErrorCode = 100
+ RpcAIObjectCreateFromUrlResponseError_ENDPOINT_NOT_REACHABLE RpcAIObjectCreateFromUrlResponseErrorCode = 101
+ RpcAIObjectCreateFromUrlResponseError_MODEL_NOT_FOUND RpcAIObjectCreateFromUrlResponseErrorCode = 102
+ RpcAIObjectCreateFromUrlResponseError_AUTH_REQUIRED RpcAIObjectCreateFromUrlResponseErrorCode = 103
+)
+
+var RpcAIObjectCreateFromUrlResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+ 100: "RATE_LIMIT_EXCEEDED",
+ 101: "ENDPOINT_NOT_REACHABLE",
+ 102: "MODEL_NOT_FOUND",
+ 103: "AUTH_REQUIRED",
+}
+
+var RpcAIObjectCreateFromUrlResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+ "RATE_LIMIT_EXCEEDED": 100,
+ "ENDPOINT_NOT_REACHABLE": 101,
+ "MODEL_NOT_FOUND": 102,
+ "AUTH_REQUIRED": 103,
+}
+
+func (x RpcAIObjectCreateFromUrlResponseErrorCode) String() string {
+ return proto.EnumName(RpcAIObjectCreateFromUrlResponseErrorCode_name, int32(x))
+}
+
+func (RpcAIObjectCreateFromUrlResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 3, 1, 0, 0}
+}
+
type RpcGalleryDownloadManifestResponseErrorCode int32
const (
@@ -5033,7 +5422,7 @@ func (x RpcGalleryDownloadManifestResponseErrorCode) String() string {
}
func (RpcGalleryDownloadManifestResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 1, 0, 0}
}
type RpcGalleryDownloadIndexResponseErrorCode int32
@@ -5067,7 +5456,7 @@ func (x RpcGalleryDownloadIndexResponseErrorCode) String() string {
}
func (RpcGalleryDownloadIndexResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 1, 0, 0}
}
type RpcBlockReplaceResponseErrorCode int32
@@ -5095,7 +5484,7 @@ func (x RpcBlockReplaceResponseErrorCode) String() string {
}
func (RpcBlockReplaceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 1, 0, 0}
}
type RpcBlockSplitRequestMode int32
@@ -5130,7 +5519,7 @@ func (x RpcBlockSplitRequestMode) String() string {
}
func (RpcBlockSplitRequestMode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 0, 0}
}
type RpcBlockSplitResponseErrorCode int32
@@ -5158,7 +5547,7 @@ func (x RpcBlockSplitResponseErrorCode) String() string {
}
func (RpcBlockSplitResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 1, 0, 0}
}
type RpcBlockMergeResponseErrorCode int32
@@ -5186,7 +5575,7 @@ func (x RpcBlockMergeResponseErrorCode) String() string {
}
func (RpcBlockMergeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 2, 1, 0, 0}
}
type RpcBlockCopyResponseErrorCode int32
@@ -5214,7 +5603,7 @@ func (x RpcBlockCopyResponseErrorCode) String() string {
}
func (RpcBlockCopyResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 3, 1, 0, 0}
}
type RpcBlockPasteResponseErrorCode int32
@@ -5242,7 +5631,7 @@ func (x RpcBlockPasteResponseErrorCode) String() string {
}
func (RpcBlockPasteResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 4, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 4, 1, 0, 0}
}
type RpcBlockCutResponseErrorCode int32
@@ -5270,7 +5659,7 @@ func (x RpcBlockCutResponseErrorCode) String() string {
}
func (RpcBlockCutResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 5, 1, 0, 0}
}
type RpcBlockUploadResponseErrorCode int32
@@ -5298,7 +5687,7 @@ func (x RpcBlockUploadResponseErrorCode) String() string {
}
func (RpcBlockUploadResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 6, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 6, 1, 0, 0}
}
type RpcBlockDownloadResponseErrorCode int32
@@ -5326,7 +5715,7 @@ func (x RpcBlockDownloadResponseErrorCode) String() string {
}
func (RpcBlockDownloadResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 7, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 7, 1, 0, 0}
}
type RpcBlockCreateResponseErrorCode int32
@@ -5354,7 +5743,7 @@ func (x RpcBlockCreateResponseErrorCode) String() string {
}
func (RpcBlockCreateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 8, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 8, 1, 0, 0}
}
type RpcBlockCreateWidgetResponseErrorCode int32
@@ -5382,7 +5771,7 @@ func (x RpcBlockCreateWidgetResponseErrorCode) String() string {
}
func (RpcBlockCreateWidgetResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 9, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 9, 1, 0, 0}
}
type RpcBlockListDeleteResponseErrorCode int32
@@ -5410,7 +5799,7 @@ func (x RpcBlockListDeleteResponseErrorCode) String() string {
}
func (RpcBlockListDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 10, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 10, 1, 0, 0}
}
type RpcBlockSetFieldsResponseErrorCode int32
@@ -5438,7 +5827,7 @@ func (x RpcBlockSetFieldsResponseErrorCode) String() string {
}
func (RpcBlockSetFieldsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 11, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 11, 1, 0, 0}
}
type RpcBlockListSetAlignResponseErrorCode int32
@@ -5466,7 +5855,7 @@ func (x RpcBlockListSetAlignResponseErrorCode) String() string {
}
func (RpcBlockListSetAlignResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 12, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 12, 1, 0, 0}
}
type RpcBlockListSetVerticalAlignResponseErrorCode int32
@@ -5494,7 +5883,7 @@ func (x RpcBlockListSetVerticalAlignResponseErrorCode) String() string {
}
func (RpcBlockListSetVerticalAlignResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 13, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 13, 1, 0, 0}
}
type RpcBlockListSetFieldsResponseErrorCode int32
@@ -5522,7 +5911,7 @@ func (x RpcBlockListSetFieldsResponseErrorCode) String() string {
}
func (RpcBlockListSetFieldsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 14, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 14, 1, 0, 0}
}
type RpcBlockListDuplicateResponseErrorCode int32
@@ -5550,7 +5939,7 @@ func (x RpcBlockListDuplicateResponseErrorCode) String() string {
}
func (RpcBlockListDuplicateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 15, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 15, 1, 0, 0}
}
type RpcBlockListConvertToObjectsResponseErrorCode int32
@@ -5578,7 +5967,7 @@ func (x RpcBlockListConvertToObjectsResponseErrorCode) String() string {
}
func (RpcBlockListConvertToObjectsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 17, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 17, 1, 0, 0}
}
type RpcBlockListMoveToExistingObjectResponseErrorCode int32
@@ -5606,7 +5995,7 @@ func (x RpcBlockListMoveToExistingObjectResponseErrorCode) String() string {
}
func (RpcBlockListMoveToExistingObjectResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 18, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 18, 1, 0, 0}
}
type RpcBlockListMoveToNewObjectResponseErrorCode int32
@@ -5634,7 +6023,7 @@ func (x RpcBlockListMoveToNewObjectResponseErrorCode) String() string {
}
func (RpcBlockListMoveToNewObjectResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 19, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 19, 1, 0, 0}
}
type RpcBlockListTurnIntoResponseErrorCode int32
@@ -5662,7 +6051,7 @@ func (x RpcBlockListTurnIntoResponseErrorCode) String() string {
}
func (RpcBlockListTurnIntoResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 20, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 20, 1, 0, 0}
}
type RpcBlockListSetBackgroundColorResponseErrorCode int32
@@ -5690,7 +6079,7 @@ func (x RpcBlockListSetBackgroundColorResponseErrorCode) String() string {
}
func (RpcBlockListSetBackgroundColorResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 21, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 21, 1, 0, 0}
}
type RpcBlockExportResponseErrorCode int32
@@ -5718,7 +6107,7 @@ func (x RpcBlockExportResponseErrorCode) String() string {
}
func (RpcBlockExportResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 22, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 22, 1, 0, 0}
}
type RpcBlockSetCarriageResponseErrorCode int32
@@ -5746,7 +6135,7 @@ func (x RpcBlockSetCarriageResponseErrorCode) String() string {
}
func (RpcBlockSetCarriageResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 23, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 23, 1, 0, 0}
}
type RpcBlockPreviewResponseErrorCode int32
@@ -5774,7 +6163,7 @@ func (x RpcBlockPreviewResponseErrorCode) String() string {
}
func (RpcBlockPreviewResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 24, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 24, 1, 0, 0}
}
type RpcBlockLatexSetTextResponseErrorCode int32
@@ -5802,7 +6191,7 @@ func (x RpcBlockLatexSetTextResponseErrorCode) String() string {
}
func (RpcBlockLatexSetTextResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 1, 0, 0}
}
type RpcBlockLatexSetProcessorResponseErrorCode int32
@@ -5830,7 +6219,7 @@ func (x RpcBlockLatexSetProcessorResponseErrorCode) String() string {
}
func (RpcBlockLatexSetProcessorResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 1, 0, 0}
}
type RpcBlockTextSetTextResponseErrorCode int32
@@ -5858,7 +6247,7 @@ func (x RpcBlockTextSetTextResponseErrorCode) String() string {
}
func (RpcBlockTextSetTextResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 1, 0, 0}
}
type RpcBlockTextSetColorResponseErrorCode int32
@@ -5886,7 +6275,7 @@ func (x RpcBlockTextSetColorResponseErrorCode) String() string {
}
func (RpcBlockTextSetColorResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 1, 0, 0}
}
type RpcBlockTextSetMarksGetResponseErrorCode int32
@@ -5914,7 +6303,7 @@ func (x RpcBlockTextSetMarksGetResponseErrorCode) String() string {
}
func (RpcBlockTextSetMarksGetResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 2, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 0, 1, 0, 0}
}
type RpcBlockTextSetStyleResponseErrorCode int32
@@ -5942,7 +6331,7 @@ func (x RpcBlockTextSetStyleResponseErrorCode) String() string {
}
func (RpcBlockTextSetStyleResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 1, 0, 0}
}
type RpcBlockTextSetCheckedResponseErrorCode int32
@@ -5970,7 +6359,7 @@ func (x RpcBlockTextSetCheckedResponseErrorCode) String() string {
}
func (RpcBlockTextSetCheckedResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 4, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 1, 0, 0}
}
type RpcBlockTextSetIconResponseErrorCode int32
@@ -5998,7 +6387,7 @@ func (x RpcBlockTextSetIconResponseErrorCode) String() string {
}
func (RpcBlockTextSetIconResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 1, 0, 0}
}
type RpcBlockTextListSetStyleResponseErrorCode int32
@@ -6026,7 +6415,7 @@ func (x RpcBlockTextListSetStyleResponseErrorCode) String() string {
}
func (RpcBlockTextListSetStyleResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 6, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 1, 0, 0}
}
type RpcBlockTextListSetColorResponseErrorCode int32
@@ -6054,7 +6443,7 @@ func (x RpcBlockTextListSetColorResponseErrorCode) String() string {
}
func (RpcBlockTextListSetColorResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 7, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 1, 0, 0}
}
type RpcBlockTextListSetMarkResponseErrorCode int32
@@ -6082,7 +6471,7 @@ func (x RpcBlockTextListSetMarkResponseErrorCode) String() string {
}
func (RpcBlockTextListSetMarkResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 8, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 1, 0, 0}
}
type RpcBlockTextListClearStyleResponseErrorCode int32
@@ -6110,7 +6499,7 @@ func (x RpcBlockTextListClearStyleResponseErrorCode) String() string {
}
func (RpcBlockTextListClearStyleResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 9, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 1, 0, 0}
}
type RpcBlockTextListClearContentResponseErrorCode int32
@@ -6138,7 +6527,7 @@ func (x RpcBlockTextListClearContentResponseErrorCode) String() string {
}
func (RpcBlockTextListClearContentResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 10, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 1, 0, 0}
}
type RpcBlockTableCreateResponseErrorCode int32
@@ -6166,7 +6555,7 @@ func (x RpcBlockTableCreateResponseErrorCode) String() string {
}
func (RpcBlockTableCreateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 1, 0, 0}
}
type RpcBlockTableRowCreateResponseErrorCode int32
@@ -6194,7 +6583,7 @@ func (x RpcBlockTableRowCreateResponseErrorCode) String() string {
}
func (RpcBlockTableRowCreateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 1, 0, 0}
}
type RpcBlockTableRowSetHeaderResponseErrorCode int32
@@ -6222,7 +6611,7 @@ func (x RpcBlockTableRowSetHeaderResponseErrorCode) String() string {
}
func (RpcBlockTableRowSetHeaderResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 1, 0, 0}
}
type RpcBlockTableRowListFillResponseErrorCode int32
@@ -6250,7 +6639,7 @@ func (x RpcBlockTableRowListFillResponseErrorCode) String() string {
}
func (RpcBlockTableRowListFillResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 1, 0, 0}
}
type RpcBlockTableRowListCleanResponseErrorCode int32
@@ -6278,7 +6667,7 @@ func (x RpcBlockTableRowListCleanResponseErrorCode) String() string {
}
func (RpcBlockTableRowListCleanResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 4, 1, 0, 0}
}
type RpcBlockTableColumnListFillResponseErrorCode int32
@@ -6306,7 +6695,7 @@ func (x RpcBlockTableColumnListFillResponseErrorCode) String() string {
}
func (RpcBlockTableColumnListFillResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 5, 1, 0, 0}
}
type RpcBlockTableColumnCreateResponseErrorCode int32
@@ -6334,7 +6723,7 @@ func (x RpcBlockTableColumnCreateResponseErrorCode) String() string {
}
func (RpcBlockTableColumnCreateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 6, 1, 0, 0}
}
type RpcBlockTableRowDeleteResponseErrorCode int32
@@ -6362,7 +6751,7 @@ func (x RpcBlockTableRowDeleteResponseErrorCode) String() string {
}
func (RpcBlockTableRowDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 7, 1, 0, 0}
}
type RpcBlockTableColumnDeleteResponseErrorCode int32
@@ -6390,7 +6779,7 @@ func (x RpcBlockTableColumnDeleteResponseErrorCode) String() string {
}
func (RpcBlockTableColumnDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 8, 1, 0, 0}
}
type RpcBlockTableColumnMoveResponseErrorCode int32
@@ -6418,7 +6807,7 @@ func (x RpcBlockTableColumnMoveResponseErrorCode) String() string {
}
func (RpcBlockTableColumnMoveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 9, 1, 0, 0}
}
type RpcBlockTableRowDuplicateResponseErrorCode int32
@@ -6446,7 +6835,7 @@ func (x RpcBlockTableRowDuplicateResponseErrorCode) String() string {
}
func (RpcBlockTableRowDuplicateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 10, 1, 0, 0}
}
type RpcBlockTableColumnDuplicateResponseErrorCode int32
@@ -6474,7 +6863,7 @@ func (x RpcBlockTableColumnDuplicateResponseErrorCode) String() string {
}
func (RpcBlockTableColumnDuplicateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 11, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 11, 1, 0, 0}
}
type RpcBlockTableExpandResponseErrorCode int32
@@ -6502,7 +6891,7 @@ func (x RpcBlockTableExpandResponseErrorCode) String() string {
}
func (RpcBlockTableExpandResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 12, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 12, 1, 0, 0}
}
type RpcBlockTableSortResponseErrorCode int32
@@ -6530,7 +6919,7 @@ func (x RpcBlockTableSortResponseErrorCode) String() string {
}
func (RpcBlockTableSortResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 13, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 13, 1, 0, 0}
}
type RpcBlockFileSetNameResponseErrorCode int32
@@ -6558,7 +6947,7 @@ func (x RpcBlockFileSetNameResponseErrorCode) String() string {
}
func (RpcBlockFileSetNameResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 1, 0, 0}
}
type RpcBlockFileSetTargetObjectIdResponseErrorCode int32
@@ -6586,7 +6975,7 @@ func (x RpcBlockFileSetTargetObjectIdResponseErrorCode) String() string {
}
func (RpcBlockFileSetTargetObjectIdResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 1, 0, 0}
}
type RpcBlockFileCreateAndUploadResponseErrorCode int32
@@ -6614,7 +7003,7 @@ func (x RpcBlockFileCreateAndUploadResponseErrorCode) String() string {
}
func (RpcBlockFileCreateAndUploadResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 2, 1, 0, 0}
}
type RpcBlockFileListSetStyleResponseErrorCode int32
@@ -6642,7 +7031,7 @@ func (x RpcBlockFileListSetStyleResponseErrorCode) String() string {
}
func (RpcBlockFileListSetStyleResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 3, 1, 0, 0}
}
type RpcBlockImageSetNameResponseErrorCode int32
@@ -6670,7 +7059,7 @@ func (x RpcBlockImageSetNameResponseErrorCode) String() string {
}
func (RpcBlockImageSetNameResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 1, 0, 0}
}
type RpcBlockImageSetWidthResponseErrorCode int32
@@ -6698,7 +7087,7 @@ func (x RpcBlockImageSetWidthResponseErrorCode) String() string {
}
func (RpcBlockImageSetWidthResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 1, 0, 0}
}
type RpcBlockVideoSetNameResponseErrorCode int32
@@ -6726,7 +7115,7 @@ func (x RpcBlockVideoSetNameResponseErrorCode) String() string {
}
func (RpcBlockVideoSetNameResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 1, 0, 0}
}
type RpcBlockVideoSetWidthResponseErrorCode int32
@@ -6754,7 +7143,7 @@ func (x RpcBlockVideoSetWidthResponseErrorCode) String() string {
}
func (RpcBlockVideoSetWidthResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 1, 0, 0}
}
type RpcBlockLinkCreateWithObjectResponseErrorCode int32
@@ -6782,7 +7171,7 @@ func (x RpcBlockLinkCreateWithObjectResponseErrorCode) String() string {
}
func (RpcBlockLinkCreateWithObjectResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 1, 0, 0}
}
type RpcBlockLinkListSetAppearanceResponseErrorCode int32
@@ -6810,7 +7199,7 @@ func (x RpcBlockLinkListSetAppearanceResponseErrorCode) String() string {
}
func (RpcBlockLinkListSetAppearanceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 1, 0, 0}
}
type RpcBlockRelationSetKeyResponseErrorCode int32
@@ -6838,7 +7227,7 @@ func (x RpcBlockRelationSetKeyResponseErrorCode) String() string {
}
func (RpcBlockRelationSetKeyResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 1, 0, 0}
}
type RpcBlockRelationAddResponseErrorCode int32
@@ -6866,7 +7255,7 @@ func (x RpcBlockRelationAddResponseErrorCode) String() string {
}
func (RpcBlockRelationAddResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 1, 0, 0}
}
type RpcBlockBookmarkFetchResponseErrorCode int32
@@ -6894,7 +7283,7 @@ func (x RpcBlockBookmarkFetchResponseErrorCode) String() string {
}
func (RpcBlockBookmarkFetchResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 1, 0, 0}
}
type RpcBlockBookmarkCreateAndFetchResponseErrorCode int32
@@ -6922,7 +7311,7 @@ func (x RpcBlockBookmarkCreateAndFetchResponseErrorCode) String() string {
}
func (RpcBlockBookmarkCreateAndFetchResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 1, 1, 0, 0}
}
type RpcBlockDivListSetStyleResponseErrorCode int32
@@ -6950,7 +7339,7 @@ func (x RpcBlockDivListSetStyleResponseErrorCode) String() string {
}
func (RpcBlockDivListSetStyleResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1, 0, 0}
}
type RpcBlockDataviewViewCreateResponseErrorCode int32
@@ -6978,7 +7367,7 @@ func (x RpcBlockDataviewViewCreateResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewCreateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 0, 1, 0, 0}
}
type RpcBlockDataviewViewUpdateResponseErrorCode int32
@@ -7006,7 +7395,7 @@ func (x RpcBlockDataviewViewUpdateResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewUpdateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1, 1, 0, 0}
}
type RpcBlockDataviewViewDeleteResponseErrorCode int32
@@ -7034,7 +7423,7 @@ func (x RpcBlockDataviewViewDeleteResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 2, 1, 0, 0}
}
type RpcBlockDataviewViewSetPositionResponseErrorCode int32
@@ -7062,7 +7451,7 @@ func (x RpcBlockDataviewViewSetPositionResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewSetPositionResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 3, 1, 0, 0}
}
type RpcBlockDataviewViewSetActiveResponseErrorCode int32
@@ -7090,7 +7479,35 @@ func (x RpcBlockDataviewViewSetActiveResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewSetActiveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 4, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 4, 1, 0, 0}
+}
+
+type RpcBlockDataviewRelationSetResponseErrorCode int32
+
+const (
+ RpcBlockDataviewRelationSetResponseError_NULL RpcBlockDataviewRelationSetResponseErrorCode = 0
+ RpcBlockDataviewRelationSetResponseError_UNKNOWN_ERROR RpcBlockDataviewRelationSetResponseErrorCode = 1
+ RpcBlockDataviewRelationSetResponseError_BAD_INPUT RpcBlockDataviewRelationSetResponseErrorCode = 2
+)
+
+var RpcBlockDataviewRelationSetResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+}
+
+var RpcBlockDataviewRelationSetResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+}
+
+func (x RpcBlockDataviewRelationSetResponseErrorCode) String() string {
+ return proto.EnumName(RpcBlockDataviewRelationSetResponseErrorCode_name, int32(x))
+}
+
+func (RpcBlockDataviewRelationSetResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 0, 1, 0, 0}
}
type RpcBlockDataviewRelationAddResponseErrorCode int32
@@ -7118,7 +7535,7 @@ func (x RpcBlockDataviewRelationAddResponseErrorCode) String() string {
}
func (RpcBlockDataviewRelationAddResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1, 1, 0, 0}
}
type RpcBlockDataviewRelationDeleteResponseErrorCode int32
@@ -7146,7 +7563,7 @@ func (x RpcBlockDataviewRelationDeleteResponseErrorCode) String() string {
}
func (RpcBlockDataviewRelationDeleteResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 2, 1, 0, 0}
}
type RpcBlockDataviewSetSourceResponseErrorCode int32
@@ -7174,7 +7591,7 @@ func (x RpcBlockDataviewSetSourceResponseErrorCode) String() string {
}
func (RpcBlockDataviewSetSourceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 1, 0, 0}
}
type RpcBlockDataviewGroupOrderUpdateResponseErrorCode int32
@@ -7202,7 +7619,7 @@ func (x RpcBlockDataviewGroupOrderUpdateResponseErrorCode) String() string {
}
func (RpcBlockDataviewGroupOrderUpdateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 3, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 0, 1, 0, 0}
}
type RpcBlockDataviewObjectOrderUpdateResponseErrorCode int32
@@ -7230,7 +7647,7 @@ func (x RpcBlockDataviewObjectOrderUpdateResponseErrorCode) String() string {
}
func (RpcBlockDataviewObjectOrderUpdateResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 0, 1, 0, 0}
}
type RpcBlockDataviewObjectOrderMoveResponseErrorCode int32
@@ -7258,7 +7675,7 @@ func (x RpcBlockDataviewObjectOrderMoveResponseErrorCode) String() string {
}
func (RpcBlockDataviewObjectOrderMoveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 1, 1, 0, 0}
}
type RpcBlockDataviewCreateFromExistingObjectResponseErrorCode int32
@@ -7286,7 +7703,7 @@ func (x RpcBlockDataviewCreateFromExistingObjectResponseErrorCode) String() stri
}
func (RpcBlockDataviewCreateFromExistingObjectResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 5, 1, 0, 0}
}
type RpcBlockDataviewFilterAddResponseErrorCode int32
@@ -7314,7 +7731,7 @@ func (x RpcBlockDataviewFilterAddResponseErrorCode) String() string {
}
func (RpcBlockDataviewFilterAddResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 0, 1, 0, 0}
}
type RpcBlockDataviewFilterRemoveResponseErrorCode int32
@@ -7342,7 +7759,7 @@ func (x RpcBlockDataviewFilterRemoveResponseErrorCode) String() string {
}
func (RpcBlockDataviewFilterRemoveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 1, 1, 0, 0}
}
type RpcBlockDataviewFilterReplaceResponseErrorCode int32
@@ -7370,7 +7787,7 @@ func (x RpcBlockDataviewFilterReplaceResponseErrorCode) String() string {
}
func (RpcBlockDataviewFilterReplaceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 2, 1, 0, 0}
}
type RpcBlockDataviewFilterSortResponseErrorCode int32
@@ -7398,7 +7815,7 @@ func (x RpcBlockDataviewFilterSortResponseErrorCode) String() string {
}
func (RpcBlockDataviewFilterSortResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 3, 1, 0, 0}
}
type RpcBlockDataviewSortAddResponseErrorCode int32
@@ -7426,7 +7843,7 @@ func (x RpcBlockDataviewSortAddResponseErrorCode) String() string {
}
func (RpcBlockDataviewSortAddResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 0, 1, 0, 0}
}
type RpcBlockDataviewSortRemoveResponseErrorCode int32
@@ -7454,7 +7871,7 @@ func (x RpcBlockDataviewSortRemoveResponseErrorCode) String() string {
}
func (RpcBlockDataviewSortRemoveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 1, 1, 0, 0}
}
type RpcBlockDataviewSortReplaceResponseErrorCode int32
@@ -7482,7 +7899,7 @@ func (x RpcBlockDataviewSortReplaceResponseErrorCode) String() string {
}
func (RpcBlockDataviewSortReplaceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 2, 1, 0, 0}
}
type RpcBlockDataviewSortSSortResponseErrorCode int32
@@ -7510,7 +7927,7 @@ func (x RpcBlockDataviewSortSSortResponseErrorCode) String() string {
}
func (RpcBlockDataviewSortSSortResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 3, 1, 0, 0}
}
type RpcBlockDataviewViewRelationAddResponseErrorCode int32
@@ -7538,7 +7955,7 @@ func (x RpcBlockDataviewViewRelationAddResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewRelationAddResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 0, 1, 0, 0}
}
type RpcBlockDataviewViewRelationRemoveResponseErrorCode int32
@@ -7566,7 +7983,7 @@ func (x RpcBlockDataviewViewRelationRemoveResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewRelationRemoveResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 1, 1, 0, 0}
}
type RpcBlockDataviewViewRelationReplaceResponseErrorCode int32
@@ -7594,7 +8011,7 @@ func (x RpcBlockDataviewViewRelationReplaceResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewRelationReplaceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 2, 1, 0, 0}
}
type RpcBlockDataviewViewRelationSortResponseErrorCode int32
@@ -7622,7 +8039,7 @@ func (x RpcBlockDataviewViewRelationSortResponseErrorCode) String() string {
}
func (RpcBlockDataviewViewRelationSortResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 3, 1, 0, 0}
}
type RpcBlockWidgetSetTargetIdResponseErrorCode int32
@@ -7650,7 +8067,7 @@ func (x RpcBlockWidgetSetTargetIdResponseErrorCode) String() string {
}
func (RpcBlockWidgetSetTargetIdResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 0, 1, 0, 0}
}
type RpcBlockWidgetSetLayoutResponseErrorCode int32
@@ -7678,7 +8095,7 @@ func (x RpcBlockWidgetSetLayoutResponseErrorCode) String() string {
}
func (RpcBlockWidgetSetLayoutResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 1, 0, 0}
}
type RpcBlockWidgetSetLimitResponseErrorCode int32
@@ -7706,7 +8123,7 @@ func (x RpcBlockWidgetSetLimitResponseErrorCode) String() string {
}
func (RpcBlockWidgetSetLimitResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 1, 0, 0}
}
type RpcBlockWidgetSetViewIdResponseErrorCode int32
@@ -7734,7 +8151,7 @@ func (x RpcBlockWidgetSetViewIdResponseErrorCode) String() string {
}
func (RpcBlockWidgetSetViewIdResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 1, 0, 0}
}
type RpcDebugStatResponseErrorCode int32
@@ -7762,7 +8179,7 @@ func (x RpcDebugStatResponseErrorCode) String() string {
}
func (RpcDebugStatResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 1, 1, 0, 0}
}
type RpcDebugTreeHeadsResponseErrorCode int32
@@ -7790,7 +8207,7 @@ func (x RpcDebugTreeHeadsResponseErrorCode) String() string {
}
func (RpcDebugTreeHeadsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 2, 1, 0, 0}
}
type RpcDebugTreeResponseErrorCode int32
@@ -7818,7 +8235,7 @@ func (x RpcDebugTreeResponseErrorCode) String() string {
}
func (RpcDebugTreeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 3, 1, 0, 0}
}
type RpcDebugSpaceSummaryResponseErrorCode int32
@@ -7846,7 +8263,7 @@ func (x RpcDebugSpaceSummaryResponseErrorCode) String() string {
}
func (RpcDebugSpaceSummaryResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 4, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 4, 1, 0, 0}
}
type RpcDebugStackGoroutinesResponseErrorCode int32
@@ -7874,7 +8291,7 @@ func (x RpcDebugStackGoroutinesResponseErrorCode) String() string {
}
func (RpcDebugStackGoroutinesResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 5, 1, 0, 0}
}
type RpcDebugExportLocalstoreResponseErrorCode int32
@@ -7902,7 +8319,7 @@ func (x RpcDebugExportLocalstoreResponseErrorCode) String() string {
}
func (RpcDebugExportLocalstoreResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 6, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 6, 1, 0, 0}
}
type RpcDebugSubscriptionsResponseErrorCode int32
@@ -7930,7 +8347,7 @@ func (x RpcDebugSubscriptionsResponseErrorCode) String() string {
}
func (RpcDebugSubscriptionsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 7, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 7, 1, 0, 0}
}
type RpcDebugOpenedObjectsResponseErrorCode int32
@@ -7958,7 +8375,7 @@ func (x RpcDebugOpenedObjectsResponseErrorCode) String() string {
}
func (RpcDebugOpenedObjectsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 8, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 8, 1, 0, 0}
}
type RpcDebugRunProfilerResponseErrorCode int32
@@ -7986,7 +8403,7 @@ func (x RpcDebugRunProfilerResponseErrorCode) String() string {
}
func (RpcDebugRunProfilerResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 9, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 9, 1, 0, 0}
}
type RpcDebugAccountSelectTraceResponseErrorCode int32
@@ -8014,7 +8431,7 @@ func (x RpcDebugAccountSelectTraceResponseErrorCode) String() string {
}
func (RpcDebugAccountSelectTraceResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 10, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 10, 1, 0, 0}
}
type RpcDebugExportLogResponseErrorCode int32
@@ -8045,7 +8462,7 @@ func (x RpcDebugExportLogResponseErrorCode) String() string {
}
func (RpcDebugExportLogResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 11, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 11, 1, 0, 0}
}
type RpcDebugPingResponseErrorCode int32
@@ -8073,7 +8490,7 @@ func (x RpcDebugPingResponseErrorCode) String() string {
}
func (RpcDebugPingResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 12, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 12, 1, 0, 0}
}
type RpcDebugAnystoreObjectChangesRequestOrderBy int32
@@ -8098,7 +8515,7 @@ func (x RpcDebugAnystoreObjectChangesRequestOrderBy) String() string {
}
func (RpcDebugAnystoreObjectChangesRequestOrderBy) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 13, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 13, 0, 0}
}
type RpcDebugAnystoreObjectChangesResponseErrorCode int32
@@ -8126,7 +8543,7 @@ func (x RpcDebugAnystoreObjectChangesResponseErrorCode) String() string {
}
func (RpcDebugAnystoreObjectChangesResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 13, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 13, 1, 1, 0}
}
type RpcDebugNetCheckResponseErrorCode int32
@@ -8154,7 +8571,7 @@ func (x RpcDebugNetCheckResponseErrorCode) String() string {
}
func (RpcDebugNetCheckResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 14, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 14, 1, 0, 0}
}
type RpcInitialSetParametersResponseErrorCode int32
@@ -8182,7 +8599,7 @@ func (x RpcInitialSetParametersResponseErrorCode) String() string {
}
func (RpcInitialSetParametersResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 1, 0, 0}
}
type RpcLogSendRequestLevel int32
@@ -8219,7 +8636,7 @@ func (x RpcLogSendRequestLevel) String() string {
}
func (RpcLogSendRequestLevel) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 0, 0}
}
type RpcLogSendResponseErrorCode int32
@@ -8247,7 +8664,7 @@ func (x RpcLogSendResponseErrorCode) String() string {
}
func (RpcLogSendResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 1, 0, 0}
}
type RpcProcessCancelResponseErrorCode int32
@@ -8275,7 +8692,7 @@ func (x RpcProcessCancelResponseErrorCode) String() string {
}
func (RpcProcessCancelResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 0, 1, 0, 0}
}
type RpcProcessSubscribeResponseErrorCode int32
@@ -8303,7 +8720,7 @@ func (x RpcProcessSubscribeResponseErrorCode) String() string {
}
func (RpcProcessSubscribeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 1, 1, 0, 0}
}
type RpcProcessUnsubscribeResponseErrorCode int32
@@ -8331,7 +8748,7 @@ func (x RpcProcessUnsubscribeResponseErrorCode) String() string {
}
func (RpcProcessUnsubscribeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 2, 1, 0, 0}
}
type RpcGenericErrorResponseErrorCode int32
@@ -8359,7 +8776,7 @@ func (x RpcGenericErrorResponseErrorCode) String() string {
}
func (RpcGenericErrorResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 0, 0}
}
type RpcNotificationListResponseErrorCode int32
@@ -8390,7 +8807,7 @@ func (x RpcNotificationListResponseErrorCode) String() string {
}
func (RpcNotificationListResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 1, 0, 0}
}
type RpcNotificationReplyResponseErrorCode int32
@@ -8421,7 +8838,7 @@ func (x RpcNotificationReplyResponseErrorCode) String() string {
}
func (RpcNotificationReplyResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 1, 0, 0}
}
type RpcNotificationTestResponseErrorCode int32
@@ -8452,7 +8869,7 @@ func (x RpcNotificationTestResponseErrorCode) String() string {
}
func (RpcNotificationTestResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 1, 0, 0}
}
type RpcMembershipGetStatusResponseErrorCode int32
@@ -8498,7 +8915,7 @@ func (x RpcMembershipGetStatusResponseErrorCode) String() string {
}
func (RpcMembershipGetStatusResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 1, 0, 0}
}
type RpcMembershipIsNameValidResponseErrorCode int32
@@ -8564,7 +8981,7 @@ func (x RpcMembershipIsNameValidResponseErrorCode) String() string {
}
func (RpcMembershipIsNameValidResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 1, 0, 0}
}
type RpcMembershipRegisterPaymentRequestResponseErrorCode int32
@@ -8623,7 +9040,7 @@ func (x RpcMembershipRegisterPaymentRequestResponseErrorCode) String() string {
}
func (RpcMembershipRegisterPaymentRequestResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 1, 0, 0}
}
type RpcMembershipGetPortalLinkUrlResponseErrorCode int32
@@ -8663,7 +9080,7 @@ func (x RpcMembershipGetPortalLinkUrlResponseErrorCode) String() string {
}
func (RpcMembershipGetPortalLinkUrlResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 1, 0, 0}
}
type RpcMembershipFinalizeResponseErrorCode int32
@@ -8712,7 +9129,7 @@ func (x RpcMembershipFinalizeResponseErrorCode) String() string {
}
func (RpcMembershipFinalizeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 4, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 4, 1, 0, 0}
}
type RpcMembershipGetVerificationEmailStatusResponseErrorCode int32
@@ -8749,7 +9166,7 @@ func (x RpcMembershipGetVerificationEmailStatusResponseErrorCode) String() strin
}
func (RpcMembershipGetVerificationEmailStatusResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 5, 1, 0, 0}
}
type RpcMembershipGetVerificationEmailResponseErrorCode int32
@@ -8804,7 +9221,7 @@ func (x RpcMembershipGetVerificationEmailResponseErrorCode) String() string {
}
func (RpcMembershipGetVerificationEmailResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 6, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 6, 1, 0, 0}
}
type RpcMembershipVerifyEmailCodeResponseErrorCode int32
@@ -8859,7 +9276,7 @@ func (x RpcMembershipVerifyEmailCodeResponseErrorCode) String() string {
}
func (RpcMembershipVerifyEmailCodeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 7, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 7, 1, 0, 0}
}
type RpcMembershipGetTiersResponseErrorCode int32
@@ -8899,7 +9316,7 @@ func (x RpcMembershipGetTiersResponseErrorCode) String() string {
}
func (RpcMembershipGetTiersResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 8, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 8, 1, 0, 0}
}
type RpcMembershipVerifyAppStoreReceiptResponseErrorCode int32
@@ -8945,7 +9362,7 @@ func (x RpcMembershipVerifyAppStoreReceiptResponseErrorCode) String() string {
}
func (RpcMembershipVerifyAppStoreReceiptResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 9, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 9, 1, 0, 0}
}
type RpcNameServiceResolveNameResponseErrorCode int32
@@ -8976,7 +9393,7 @@ func (x RpcNameServiceResolveNameResponseErrorCode) String() string {
}
func (RpcNameServiceResolveNameResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 1, 0, 0}
}
type RpcNameServiceResolveAnyIdResponseErrorCode int32
@@ -9007,7 +9424,7 @@ func (x RpcNameServiceResolveAnyIdResponseErrorCode) String() string {
}
func (RpcNameServiceResolveAnyIdResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 1, 1, 0, 0}
}
type RpcNameServiceResolveSpaceIdResponseErrorCode int32
@@ -9038,7 +9455,7 @@ func (x RpcNameServiceResolveSpaceIdResponseErrorCode) String() string {
}
func (RpcNameServiceResolveSpaceIdResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 2, 1, 0, 0}
}
type RpcNameServiceUserAccountGetResponseErrorCode int32
@@ -9075,7 +9492,7 @@ func (x RpcNameServiceUserAccountGetResponseErrorCode) String() string {
}
func (RpcNameServiceUserAccountGetResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 3, 0, 1, 0, 0}
}
type RpcBroadcastPayloadEventResponseErrorCode int32
@@ -9106,7 +9523,7 @@ func (x RpcBroadcastPayloadEventResponseErrorCode) String() string {
}
func (RpcBroadcastPayloadEventResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 1, 0, 0}
}
type RpcDeviceSetNameResponseErrorCode int32
@@ -9134,7 +9551,7 @@ func (x RpcDeviceSetNameResponseErrorCode) String() string {
}
func (RpcDeviceSetNameResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 1, 0, 0}
}
type RpcDeviceListResponseErrorCode int32
@@ -9162,7 +9579,7 @@ func (x RpcDeviceListResponseErrorCode) String() string {
}
func (RpcDeviceListResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 1, 0, 0}
}
type RpcDeviceNetworkStateSetResponseErrorCode int32
@@ -9193,7 +9610,7 @@ func (x RpcDeviceNetworkStateSetResponseErrorCode) String() string {
}
func (RpcDeviceNetworkStateSetResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 2, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 0, 1, 0, 0}
}
type RpcChatAddMessageResponseErrorCode int32
@@ -9221,7 +9638,7 @@ func (x RpcChatAddMessageResponseErrorCode) String() string {
}
func (RpcChatAddMessageResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 0, 1, 0, 0}
}
type RpcChatEditMessageContentResponseErrorCode int32
@@ -9249,7 +9666,7 @@ func (x RpcChatEditMessageContentResponseErrorCode) String() string {
}
func (RpcChatEditMessageContentResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 1, 1, 0, 0}
}
type RpcChatToggleMessageReactionResponseErrorCode int32
@@ -9277,7 +9694,7 @@ func (x RpcChatToggleMessageReactionResponseErrorCode) String() string {
}
func (RpcChatToggleMessageReactionResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 2, 1, 0, 0}
}
type RpcChatDeleteMessageResponseErrorCode int32
@@ -9305,7 +9722,7 @@ func (x RpcChatDeleteMessageResponseErrorCode) String() string {
}
func (RpcChatDeleteMessageResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 3, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 3, 1, 0, 0}
}
type RpcChatGetMessagesResponseErrorCode int32
@@ -9333,7 +9750,7 @@ func (x RpcChatGetMessagesResponseErrorCode) String() string {
}
func (RpcChatGetMessagesResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 4, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 4, 1, 0, 0}
}
type RpcChatGetMessagesByIdsResponseErrorCode int32
@@ -9361,7 +9778,7 @@ func (x RpcChatGetMessagesByIdsResponseErrorCode) String() string {
}
func (RpcChatGetMessagesByIdsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 5, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 5, 1, 0, 0}
}
type RpcChatSubscribeLastMessagesResponseErrorCode int32
@@ -9389,7 +9806,7 @@ func (x RpcChatSubscribeLastMessagesResponseErrorCode) String() string {
}
func (RpcChatSubscribeLastMessagesResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 6, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 6, 1, 0, 0}
}
type RpcChatUnsubscribeResponseErrorCode int32
@@ -9417,7 +9834,7 @@ func (x RpcChatUnsubscribeResponseErrorCode) String() string {
}
func (RpcChatUnsubscribeResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 7, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 7, 1, 0, 0}
}
type RpcChatSubscribeToMessagePreviewsResponseErrorCode int32
@@ -9445,7 +9862,35 @@ func (x RpcChatSubscribeToMessagePreviewsResponseErrorCode) String() string {
}
func (RpcChatSubscribeToMessagePreviewsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 8, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 8, 1, 0, 0}
+}
+
+type RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode int32
+
+const (
+ RpcChatUnsubscribeFromMessagePreviewsResponseError_NULL RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode = 0
+ RpcChatUnsubscribeFromMessagePreviewsResponseError_UNKNOWN_ERROR RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode = 1
+ RpcChatUnsubscribeFromMessagePreviewsResponseError_BAD_INPUT RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode = 2
+)
+
+var RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode_name = map[int32]string{
+ 0: "NULL",
+ 1: "UNKNOWN_ERROR",
+ 2: "BAD_INPUT",
+}
+
+var RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode_value = map[string]int32{
+ "NULL": 0,
+ "UNKNOWN_ERROR": 1,
+ "BAD_INPUT": 2,
+}
+
+func (x RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode) String() string {
+ return proto.EnumName(RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode_name, int32(x))
+}
+
+func (RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 9, 1, 0, 0}
}
type RpcChatReadMessagesReadType int32
@@ -9470,7 +9915,7 @@ func (x RpcChatReadMessagesReadType) String() string {
}
func (RpcChatReadMessagesReadType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 10, 0}
}
type RpcChatReadMessagesResponseErrorCode int32
@@ -9501,7 +9946,7 @@ func (x RpcChatReadMessagesResponseErrorCode) String() string {
}
func (RpcChatReadMessagesResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 9, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 10, 1, 0, 0}
}
type RpcChatUnreadResponseErrorCode int32
@@ -9529,7 +9974,7 @@ func (x RpcChatUnreadResponseErrorCode) String() string {
}
func (RpcChatUnreadResponseErrorCode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 10, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 11, 1, 0, 0}
}
// Rpc is a namespace, that agregates all of the service commands between client and middleware.
@@ -10569,7 +11014,8 @@ func (m *RpcSpaceInviteGenerate) XXX_DiscardUnknown() {
var xxx_messageInfo_RpcSpaceInviteGenerate proto.InternalMessageInfo
type RpcSpaceInviteGenerateRequest struct {
- SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ InviteType RpcSpaceInviteGenerateRequestInviteType `protobuf:"varint,2,opt,name=inviteType,proto3,enum=anytype.RpcSpaceInviteGenerateRequestInviteType" json:"inviteType,omitempty"`
}
func (m *RpcSpaceInviteGenerateRequest) Reset() { *m = RpcSpaceInviteGenerateRequest{} }
@@ -10612,6 +11058,13 @@ func (m *RpcSpaceInviteGenerateRequest) GetSpaceId() string {
return ""
}
+func (m *RpcSpaceInviteGenerateRequest) GetInviteType() RpcSpaceInviteGenerateRequestInviteType {
+ if m != nil {
+ return m.InviteType
+ }
+ return RpcSpaceInviteGenerateRequest_Member
+}
+
type RpcSpaceInviteGenerateResponse struct {
Error *RpcSpaceInviteGenerateResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
InviteCid string `protobuf:"bytes,2,opt,name=inviteCid,proto3" json:"inviteCid,omitempty"`
@@ -11092,6 +11545,198 @@ func (m *RpcSpaceInviteGetCurrentResponseError) GetDescription() string {
return ""
}
+type RpcSpaceInviteGetGuest struct {
+}
+
+func (m *RpcSpaceInviteGetGuest) Reset() { *m = RpcSpaceInviteGetGuest{} }
+func (m *RpcSpaceInviteGetGuest) String() string { return proto.CompactTextString(m) }
+func (*RpcSpaceInviteGetGuest) ProtoMessage() {}
+func (*RpcSpaceInviteGetGuest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5}
+}
+func (m *RpcSpaceInviteGetGuest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcSpaceInviteGetGuest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcSpaceInviteGetGuest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcSpaceInviteGetGuest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcSpaceInviteGetGuest.Merge(m, src)
+}
+func (m *RpcSpaceInviteGetGuest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcSpaceInviteGetGuest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcSpaceInviteGetGuest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcSpaceInviteGetGuest proto.InternalMessageInfo
+
+type RpcSpaceInviteGetGuestRequest struct {
+ SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+}
+
+func (m *RpcSpaceInviteGetGuestRequest) Reset() { *m = RpcSpaceInviteGetGuestRequest{} }
+func (m *RpcSpaceInviteGetGuestRequest) String() string { return proto.CompactTextString(m) }
+func (*RpcSpaceInviteGetGuestRequest) ProtoMessage() {}
+func (*RpcSpaceInviteGetGuestRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 0}
+}
+func (m *RpcSpaceInviteGetGuestRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcSpaceInviteGetGuestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcSpaceInviteGetGuestRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcSpaceInviteGetGuestRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcSpaceInviteGetGuestRequest.Merge(m, src)
+}
+func (m *RpcSpaceInviteGetGuestRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcSpaceInviteGetGuestRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcSpaceInviteGetGuestRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcSpaceInviteGetGuestRequest proto.InternalMessageInfo
+
+func (m *RpcSpaceInviteGetGuestRequest) GetSpaceId() string {
+ if m != nil {
+ return m.SpaceId
+ }
+ return ""
+}
+
+type RpcSpaceInviteGetGuestResponse struct {
+ Error *RpcSpaceInviteGetGuestResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ InviteCid string `protobuf:"bytes,2,opt,name=inviteCid,proto3" json:"inviteCid,omitempty"`
+ InviteFileKey string `protobuf:"bytes,3,opt,name=inviteFileKey,proto3" json:"inviteFileKey,omitempty"`
+}
+
+func (m *RpcSpaceInviteGetGuestResponse) Reset() { *m = RpcSpaceInviteGetGuestResponse{} }
+func (m *RpcSpaceInviteGetGuestResponse) String() string { return proto.CompactTextString(m) }
+func (*RpcSpaceInviteGetGuestResponse) ProtoMessage() {}
+func (*RpcSpaceInviteGetGuestResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1}
+}
+func (m *RpcSpaceInviteGetGuestResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcSpaceInviteGetGuestResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcSpaceInviteGetGuestResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcSpaceInviteGetGuestResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcSpaceInviteGetGuestResponse.Merge(m, src)
+}
+func (m *RpcSpaceInviteGetGuestResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcSpaceInviteGetGuestResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcSpaceInviteGetGuestResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcSpaceInviteGetGuestResponse proto.InternalMessageInfo
+
+func (m *RpcSpaceInviteGetGuestResponse) GetError() *RpcSpaceInviteGetGuestResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+func (m *RpcSpaceInviteGetGuestResponse) GetInviteCid() string {
+ if m != nil {
+ return m.InviteCid
+ }
+ return ""
+}
+
+func (m *RpcSpaceInviteGetGuestResponse) GetInviteFileKey() string {
+ if m != nil {
+ return m.InviteFileKey
+ }
+ return ""
+}
+
+type RpcSpaceInviteGetGuestResponseError struct {
+ Code RpcSpaceInviteGetGuestResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcSpaceInviteGetGuestResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcSpaceInviteGetGuestResponseError) Reset() { *m = RpcSpaceInviteGetGuestResponseError{} }
+func (m *RpcSpaceInviteGetGuestResponseError) String() string { return proto.CompactTextString(m) }
+func (*RpcSpaceInviteGetGuestResponseError) ProtoMessage() {}
+func (*RpcSpaceInviteGetGuestResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0}
+}
+func (m *RpcSpaceInviteGetGuestResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcSpaceInviteGetGuestResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcSpaceInviteGetGuestResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcSpaceInviteGetGuestResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcSpaceInviteGetGuestResponseError.Merge(m, src)
+}
+func (m *RpcSpaceInviteGetGuestResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcSpaceInviteGetGuestResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcSpaceInviteGetGuestResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcSpaceInviteGetGuestResponseError proto.InternalMessageInfo
+
+func (m *RpcSpaceInviteGetGuestResponseError) GetCode() RpcSpaceInviteGetGuestResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcSpaceInviteGetGuestResponseError_NULL
+}
+
+func (m *RpcSpaceInviteGetGuestResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
type RpcSpaceInviteRevoke struct {
}
@@ -11099,7 +11744,7 @@ func (m *RpcSpaceInviteRevoke) Reset() { *m = RpcSpaceInviteRevoke{} }
func (m *RpcSpaceInviteRevoke) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteRevoke) ProtoMessage() {}
func (*RpcSpaceInviteRevoke) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6}
}
func (m *RpcSpaceInviteRevoke) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11136,7 +11781,7 @@ func (m *RpcSpaceInviteRevokeRequest) Reset() { *m = RpcSpaceInviteRevok
func (m *RpcSpaceInviteRevokeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteRevokeRequest) ProtoMessage() {}
func (*RpcSpaceInviteRevokeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 0}
}
func (m *RpcSpaceInviteRevokeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11180,7 +11825,7 @@ func (m *RpcSpaceInviteRevokeResponse) Reset() { *m = RpcSpaceInviteRevo
func (m *RpcSpaceInviteRevokeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteRevokeResponse) ProtoMessage() {}
func (*RpcSpaceInviteRevokeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1}
}
func (m *RpcSpaceInviteRevokeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11225,7 +11870,7 @@ func (m *RpcSpaceInviteRevokeResponseError) Reset() { *m = RpcSpaceInvit
func (m *RpcSpaceInviteRevokeResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteRevokeResponseError) ProtoMessage() {}
func (*RpcSpaceInviteRevokeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0}
}
func (m *RpcSpaceInviteRevokeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11275,7 +11920,7 @@ func (m *RpcSpaceInviteView) Reset() { *m = RpcSpaceInviteView{} }
func (m *RpcSpaceInviteView) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteView) ProtoMessage() {}
func (*RpcSpaceInviteView) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7}
}
func (m *RpcSpaceInviteView) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11313,7 +11958,7 @@ func (m *RpcSpaceInviteViewRequest) Reset() { *m = RpcSpaceInviteViewReq
func (m *RpcSpaceInviteViewRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteViewRequest) ProtoMessage() {}
func (*RpcSpaceInviteViewRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 0}
}
func (m *RpcSpaceInviteViewRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11357,18 +12002,19 @@ func (m *RpcSpaceInviteViewRequest) GetInviteFileKey() string {
}
type RpcSpaceInviteViewResponse struct {
- Error *RpcSpaceInviteViewResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
- SpaceId string `protobuf:"bytes,2,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
- SpaceName string `protobuf:"bytes,3,opt,name=spaceName,proto3" json:"spaceName,omitempty"`
- SpaceIconCid string `protobuf:"bytes,4,opt,name=spaceIconCid,proto3" json:"spaceIconCid,omitempty"`
- CreatorName string `protobuf:"bytes,5,opt,name=creatorName,proto3" json:"creatorName,omitempty"`
+ Error *RpcSpaceInviteViewResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ SpaceId string `protobuf:"bytes,2,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ SpaceName string `protobuf:"bytes,3,opt,name=spaceName,proto3" json:"spaceName,omitempty"`
+ SpaceIconCid string `protobuf:"bytes,4,opt,name=spaceIconCid,proto3" json:"spaceIconCid,omitempty"`
+ CreatorName string `protobuf:"bytes,5,opt,name=creatorName,proto3" json:"creatorName,omitempty"`
+ IsGuestUserInvite bool `protobuf:"varint,6,opt,name=isGuestUserInvite,proto3" json:"isGuestUserInvite,omitempty"`
}
func (m *RpcSpaceInviteViewResponse) Reset() { *m = RpcSpaceInviteViewResponse{} }
func (m *RpcSpaceInviteViewResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteViewResponse) ProtoMessage() {}
func (*RpcSpaceInviteViewResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1}
}
func (m *RpcSpaceInviteViewResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11432,6 +12078,13 @@ func (m *RpcSpaceInviteViewResponse) GetCreatorName() string {
return ""
}
+func (m *RpcSpaceInviteViewResponse) GetIsGuestUserInvite() bool {
+ if m != nil {
+ return m.IsGuestUserInvite
+ }
+ return false
+}
+
type RpcSpaceInviteViewResponseError struct {
Code RpcSpaceInviteViewResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcSpaceInviteViewResponseErrorCode" json:"code,omitempty"`
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
@@ -11441,7 +12094,7 @@ func (m *RpcSpaceInviteViewResponseError) Reset() { *m = RpcSpaceInviteV
func (m *RpcSpaceInviteViewResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceInviteViewResponseError) ProtoMessage() {}
func (*RpcSpaceInviteViewResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0}
}
func (m *RpcSpaceInviteViewResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11491,7 +12144,7 @@ func (m *RpcSpaceJoin) Reset() { *m = RpcSpaceJoin{} }
func (m *RpcSpaceJoin) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoin) ProtoMessage() {}
func (*RpcSpaceJoin) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8}
}
func (m *RpcSpaceJoin) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11531,7 +12184,7 @@ func (m *RpcSpaceJoinRequest) Reset() { *m = RpcSpaceJoinRequest{} }
func (m *RpcSpaceJoinRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoinRequest) ProtoMessage() {}
func (*RpcSpaceJoinRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 0}
}
func (m *RpcSpaceJoinRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11596,7 +12249,7 @@ func (m *RpcSpaceJoinResponse) Reset() { *m = RpcSpaceJoinResponse{} }
func (m *RpcSpaceJoinResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoinResponse) ProtoMessage() {}
func (*RpcSpaceJoinResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1}
}
func (m *RpcSpaceJoinResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11641,7 +12294,7 @@ func (m *RpcSpaceJoinResponseError) Reset() { *m = RpcSpaceJoinResponseE
func (m *RpcSpaceJoinResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoinResponseError) ProtoMessage() {}
func (*RpcSpaceJoinResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0}
}
func (m *RpcSpaceJoinResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11691,7 +12344,7 @@ func (m *RpcSpaceJoinCancel) Reset() { *m = RpcSpaceJoinCancel{} }
func (m *RpcSpaceJoinCancel) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoinCancel) ProtoMessage() {}
func (*RpcSpaceJoinCancel) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9}
}
func (m *RpcSpaceJoinCancel) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11728,7 +12381,7 @@ func (m *RpcSpaceJoinCancelRequest) Reset() { *m = RpcSpaceJoinCancelReq
func (m *RpcSpaceJoinCancelRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoinCancelRequest) ProtoMessage() {}
func (*RpcSpaceJoinCancelRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 0}
}
func (m *RpcSpaceJoinCancelRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11772,7 +12425,7 @@ func (m *RpcSpaceJoinCancelResponse) Reset() { *m = RpcSpaceJoinCancelRe
func (m *RpcSpaceJoinCancelResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoinCancelResponse) ProtoMessage() {}
func (*RpcSpaceJoinCancelResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1}
}
func (m *RpcSpaceJoinCancelResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11817,7 +12470,7 @@ func (m *RpcSpaceJoinCancelResponseError) Reset() { *m = RpcSpaceJoinCan
func (m *RpcSpaceJoinCancelResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceJoinCancelResponseError) ProtoMessage() {}
func (*RpcSpaceJoinCancelResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0}
}
func (m *RpcSpaceJoinCancelResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11867,7 +12520,7 @@ func (m *RpcSpaceRequestApprove) Reset() { *m = RpcSpaceRequestApprove{}
func (m *RpcSpaceRequestApprove) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestApprove) ProtoMessage() {}
func (*RpcSpaceRequestApprove) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10}
}
func (m *RpcSpaceRequestApprove) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11906,7 +12559,7 @@ func (m *RpcSpaceRequestApproveRequest) Reset() { *m = RpcSpaceRequestAp
func (m *RpcSpaceRequestApproveRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestApproveRequest) ProtoMessage() {}
func (*RpcSpaceRequestApproveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 0}
}
func (m *RpcSpaceRequestApproveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -11964,7 +12617,7 @@ func (m *RpcSpaceRequestApproveResponse) Reset() { *m = RpcSpaceRequestA
func (m *RpcSpaceRequestApproveResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestApproveResponse) ProtoMessage() {}
func (*RpcSpaceRequestApproveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1}
}
func (m *RpcSpaceRequestApproveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12009,7 +12662,7 @@ func (m *RpcSpaceRequestApproveResponseError) Reset() { *m = RpcSpaceReq
func (m *RpcSpaceRequestApproveResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestApproveResponseError) ProtoMessage() {}
func (*RpcSpaceRequestApproveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 9, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0}
}
func (m *RpcSpaceRequestApproveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12059,7 +12712,7 @@ func (m *RpcSpaceRequestDecline) Reset() { *m = RpcSpaceRequestDecline{}
func (m *RpcSpaceRequestDecline) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestDecline) ProtoMessage() {}
func (*RpcSpaceRequestDecline) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11}
}
func (m *RpcSpaceRequestDecline) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12097,7 +12750,7 @@ func (m *RpcSpaceRequestDeclineRequest) Reset() { *m = RpcSpaceRequestDe
func (m *RpcSpaceRequestDeclineRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestDeclineRequest) ProtoMessage() {}
func (*RpcSpaceRequestDeclineRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 0}
}
func (m *RpcSpaceRequestDeclineRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12148,7 +12801,7 @@ func (m *RpcSpaceRequestDeclineResponse) Reset() { *m = RpcSpaceRequestD
func (m *RpcSpaceRequestDeclineResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestDeclineResponse) ProtoMessage() {}
func (*RpcSpaceRequestDeclineResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1}
}
func (m *RpcSpaceRequestDeclineResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12193,7 +12846,7 @@ func (m *RpcSpaceRequestDeclineResponseError) Reset() { *m = RpcSpaceReq
func (m *RpcSpaceRequestDeclineResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceRequestDeclineResponseError) ProtoMessage() {}
func (*RpcSpaceRequestDeclineResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 10, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0}
}
func (m *RpcSpaceRequestDeclineResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12243,7 +12896,7 @@ func (m *RpcSpaceParticipantRemove) Reset() { *m = RpcSpaceParticipantRe
func (m *RpcSpaceParticipantRemove) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceParticipantRemove) ProtoMessage() {}
func (*RpcSpaceParticipantRemove) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12}
}
func (m *RpcSpaceParticipantRemove) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12281,7 +12934,7 @@ func (m *RpcSpaceParticipantRemoveRequest) Reset() { *m = RpcSpacePartic
func (m *RpcSpaceParticipantRemoveRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceParticipantRemoveRequest) ProtoMessage() {}
func (*RpcSpaceParticipantRemoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 0}
}
func (m *RpcSpaceParticipantRemoveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12332,7 +12985,7 @@ func (m *RpcSpaceParticipantRemoveResponse) Reset() { *m = RpcSpaceParti
func (m *RpcSpaceParticipantRemoveResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceParticipantRemoveResponse) ProtoMessage() {}
func (*RpcSpaceParticipantRemoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1}
}
func (m *RpcSpaceParticipantRemoveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12379,7 +13032,7 @@ func (m *RpcSpaceParticipantRemoveResponseError) Reset() {
func (m *RpcSpaceParticipantRemoveResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceParticipantRemoveResponseError) ProtoMessage() {}
func (*RpcSpaceParticipantRemoveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 11, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0}
}
func (m *RpcSpaceParticipantRemoveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12429,7 +13082,7 @@ func (m *RpcSpaceParticipantPermissionsChange) Reset() { *m = RpcSpacePa
func (m *RpcSpaceParticipantPermissionsChange) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceParticipantPermissionsChange) ProtoMessage() {}
func (*RpcSpaceParticipantPermissionsChange) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13}
}
func (m *RpcSpaceParticipantPermissionsChange) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12471,7 +13124,7 @@ func (m *RpcSpaceParticipantPermissionsChangeRequest) String() string {
}
func (*RpcSpaceParticipantPermissionsChangeRequest) ProtoMessage() {}
func (*RpcSpaceParticipantPermissionsChangeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 0}
}
func (m *RpcSpaceParticipantPermissionsChangeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12526,7 +13179,7 @@ func (m *RpcSpaceParticipantPermissionsChangeResponse) String() string {
}
func (*RpcSpaceParticipantPermissionsChangeResponse) ProtoMessage() {}
func (*RpcSpaceParticipantPermissionsChangeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1}
}
func (m *RpcSpaceParticipantPermissionsChangeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12575,7 +13228,7 @@ func (m *RpcSpaceParticipantPermissionsChangeResponseError) String() string {
}
func (*RpcSpaceParticipantPermissionsChangeResponseError) ProtoMessage() {}
func (*RpcSpaceParticipantPermissionsChangeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 12, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0}
}
func (m *RpcSpaceParticipantPermissionsChangeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12625,7 +13278,7 @@ func (m *RpcSpaceDelete) Reset() { *m = RpcSpaceDelete{} }
func (m *RpcSpaceDelete) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceDelete) ProtoMessage() {}
func (*RpcSpaceDelete) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14}
}
func (m *RpcSpaceDelete) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12662,7 +13315,7 @@ func (m *RpcSpaceDeleteRequest) Reset() { *m = RpcSpaceDeleteRequest{} }
func (m *RpcSpaceDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceDeleteRequest) ProtoMessage() {}
func (*RpcSpaceDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 0}
}
func (m *RpcSpaceDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12707,7 +13360,7 @@ func (m *RpcSpaceDeleteResponse) Reset() { *m = RpcSpaceDeleteResponse{}
func (m *RpcSpaceDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceDeleteResponse) ProtoMessage() {}
func (*RpcSpaceDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1}
}
func (m *RpcSpaceDeleteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12759,7 +13412,7 @@ func (m *RpcSpaceDeleteResponseError) Reset() { *m = RpcSpaceDeleteRespo
func (m *RpcSpaceDeleteResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceDeleteResponseError) ProtoMessage() {}
func (*RpcSpaceDeleteResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 13, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0}
}
func (m *RpcSpaceDeleteResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12809,7 +13462,7 @@ func (m *RpcSpaceSetOrder) Reset() { *m = RpcSpaceSetOrder{} }
func (m *RpcSpaceSetOrder) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceSetOrder) ProtoMessage() {}
func (*RpcSpaceSetOrder) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15}
}
func (m *RpcSpaceSetOrder) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12847,7 +13500,7 @@ func (m *RpcSpaceSetOrderRequest) Reset() { *m = RpcSpaceSetOrderRequest
func (m *RpcSpaceSetOrderRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceSetOrderRequest) ProtoMessage() {}
func (*RpcSpaceSetOrderRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 0}
}
func (m *RpcSpaceSetOrderRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12898,7 +13551,7 @@ func (m *RpcSpaceSetOrderResponse) Reset() { *m = RpcSpaceSetOrderRespon
func (m *RpcSpaceSetOrderResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceSetOrderResponse) ProtoMessage() {}
func (*RpcSpaceSetOrderResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1}
}
func (m *RpcSpaceSetOrderResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12943,7 +13596,7 @@ func (m *RpcSpaceSetOrderResponseError) Reset() { *m = RpcSpaceSetOrderR
func (m *RpcSpaceSetOrderResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceSetOrderResponseError) ProtoMessage() {}
func (*RpcSpaceSetOrderResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 14, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0}
}
func (m *RpcSpaceSetOrderResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -12993,7 +13646,7 @@ func (m *RpcSpaceUnsetOrder) Reset() { *m = RpcSpaceUnsetOrder{} }
func (m *RpcSpaceUnsetOrder) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceUnsetOrder) ProtoMessage() {}
func (*RpcSpaceUnsetOrder) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16}
}
func (m *RpcSpaceUnsetOrder) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -13030,7 +13683,7 @@ func (m *RpcSpaceUnsetOrderRequest) Reset() { *m = RpcSpaceUnsetOrderReq
func (m *RpcSpaceUnsetOrderRequest) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceUnsetOrderRequest) ProtoMessage() {}
func (*RpcSpaceUnsetOrderRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 0}
}
func (m *RpcSpaceUnsetOrderRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -13074,7 +13727,7 @@ func (m *RpcSpaceUnsetOrderResponse) Reset() { *m = RpcSpaceUnsetOrderRe
func (m *RpcSpaceUnsetOrderResponse) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceUnsetOrderResponse) ProtoMessage() {}
func (*RpcSpaceUnsetOrderResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1}
}
func (m *RpcSpaceUnsetOrderResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -13119,7 +13772,7 @@ func (m *RpcSpaceUnsetOrderResponseError) Reset() { *m = RpcSpaceUnsetOr
func (m *RpcSpaceUnsetOrderResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcSpaceUnsetOrderResponseError) ProtoMessage() {}
func (*RpcSpaceUnsetOrderResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 15, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 1, 16, 1, 0}
}
func (m *RpcSpaceUnsetOrderResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -14371,6 +15024,7 @@ type RpcAccountCreateRequest struct {
NetworkCustomConfigFilePath string `protobuf:"bytes,7,opt,name=networkCustomConfigFilePath,proto3" json:"networkCustomConfigFilePath,omitempty"`
PreferYamuxTransport bool `protobuf:"varint,8,opt,name=preferYamuxTransport,proto3" json:"preferYamuxTransport,omitempty"`
JsonApiListenAddr string `protobuf:"bytes,9,opt,name=jsonApiListenAddr,proto3" json:"jsonApiListenAddr,omitempty"`
+ JoinStreamUrl string `protobuf:"bytes,10,opt,name=joinStreamUrl,proto3" json:"joinStreamUrl,omitempty"`
}
func (m *RpcAccountCreateRequest) Reset() { *m = RpcAccountCreateRequest{} }
@@ -14488,6 +15142,13 @@ func (m *RpcAccountCreateRequest) GetJsonApiListenAddr() string {
return ""
}
+func (m *RpcAccountCreateRequest) GetJoinStreamUrl() string {
+ if m != nil {
+ return m.JoinStreamUrl
+ }
+ return ""
+}
+
// XXX_OneofWrappers is for the internal use of the proto package.
func (*RpcAccountCreateRequest) XXX_OneofWrappers() []interface{} {
return []interface{}{
@@ -15275,8 +15936,9 @@ func (m *RpcAccountMigrateResponse) GetError() *RpcAccountMigrateResponseError {
}
type RpcAccountMigrateResponseError struct {
- Code RpcAccountMigrateResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAccountMigrateResponseErrorCode" json:"code,omitempty"`
- Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+ Code RpcAccountMigrateResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAccountMigrateResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+ RequiredSpace int64 `protobuf:"varint,3,opt,name=requiredSpace,proto3" json:"requiredSpace,omitempty"`
}
func (m *RpcAccountMigrateResponseError) Reset() { *m = RpcAccountMigrateResponseError{} }
@@ -15326,6 +15988,13 @@ func (m *RpcAccountMigrateResponseError) GetDescription() string {
return ""
}
+func (m *RpcAccountMigrateResponseError) GetRequiredSpace() int64 {
+ if m != nil {
+ return m.RequiredSpace
+ }
+ return 0
+}
+
type RpcAccountMigrateCancel struct {
}
@@ -15550,6 +16219,7 @@ type RpcAccountSelectRequest struct {
PreferYamuxTransport bool `protobuf:"varint,6,opt,name=preferYamuxTransport,proto3" json:"preferYamuxTransport,omitempty"`
JsonApiListenAddr string `protobuf:"bytes,7,opt,name=jsonApiListenAddr,proto3" json:"jsonApiListenAddr,omitempty"`
FulltextPrimaryLanguage string `protobuf:"bytes,8,opt,name=fulltextPrimaryLanguage,proto3" json:"fulltextPrimaryLanguage,omitempty"`
+ JoinStreamURL string `protobuf:"bytes,9,opt,name=joinStreamURL,proto3" json:"joinStreamURL,omitempty"`
}
func (m *RpcAccountSelectRequest) Reset() { *m = RpcAccountSelectRequest{} }
@@ -15641,6 +16311,13 @@ func (m *RpcAccountSelectRequest) GetFulltextPrimaryLanguage() string {
return ""
}
+func (m *RpcAccountSelectRequest) GetJoinStreamURL() string {
+ if m != nil {
+ return m.JoinStreamURL
+ }
+ return ""
+}
+
// *
// Middleware-to-front-end response for an account select request, that can contain a NULL error and selected account or a non-NULL error and an empty account
type RpcAccountSelectResponse struct {
@@ -41005,6 +41682,958 @@ func (m *RpcUnsplashDownloadResponseError) GetDescription() string {
return ""
}
+type RpcAI struct {
+}
+
+func (m *RpcAI) Reset() { *m = RpcAI{} }
+func (m *RpcAI) String() string { return proto.CompactTextString(m) }
+func (*RpcAI) ProtoMessage() {}
+func (*RpcAI) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17}
+}
+func (m *RpcAI) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAI) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAI.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAI) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAI.Merge(m, src)
+}
+func (m *RpcAI) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAI) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAI.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAI proto.InternalMessageInfo
+
+type RpcAIWritingTools struct {
+}
+
+func (m *RpcAIWritingTools) Reset() { *m = RpcAIWritingTools{} }
+func (m *RpcAIWritingTools) String() string { return proto.CompactTextString(m) }
+func (*RpcAIWritingTools) ProtoMessage() {}
+func (*RpcAIWritingTools) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0}
+}
+func (m *RpcAIWritingTools) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIWritingTools) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIWritingTools.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIWritingTools) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIWritingTools.Merge(m, src)
+}
+func (m *RpcAIWritingTools) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIWritingTools) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIWritingTools.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIWritingTools proto.InternalMessageInfo
+
+type RpcAIWritingToolsRequest struct {
+ Config *RpcAIProviderConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+ Mode RpcAIWritingToolsRequestWritingMode `protobuf:"varint,2,opt,name=mode,proto3,enum=anytype.RpcAIWritingToolsRequestWritingMode" json:"mode,omitempty"`
+ Language RpcAIWritingToolsRequestLanguage `protobuf:"varint,3,opt,name=language,proto3,enum=anytype.RpcAIWritingToolsRequestLanguage" json:"language,omitempty"`
+ Text string `protobuf:"bytes,4,opt,name=text,proto3" json:"text,omitempty"`
+}
+
+func (m *RpcAIWritingToolsRequest) Reset() { *m = RpcAIWritingToolsRequest{} }
+func (m *RpcAIWritingToolsRequest) String() string { return proto.CompactTextString(m) }
+func (*RpcAIWritingToolsRequest) ProtoMessage() {}
+func (*RpcAIWritingToolsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 0}
+}
+func (m *RpcAIWritingToolsRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIWritingToolsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIWritingToolsRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIWritingToolsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIWritingToolsRequest.Merge(m, src)
+}
+func (m *RpcAIWritingToolsRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIWritingToolsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIWritingToolsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIWritingToolsRequest proto.InternalMessageInfo
+
+func (m *RpcAIWritingToolsRequest) GetConfig() *RpcAIProviderConfig {
+ if m != nil {
+ return m.Config
+ }
+ return nil
+}
+
+func (m *RpcAIWritingToolsRequest) GetMode() RpcAIWritingToolsRequestWritingMode {
+ if m != nil {
+ return m.Mode
+ }
+ return RpcAIWritingToolsRequest_DEFAULT
+}
+
+func (m *RpcAIWritingToolsRequest) GetLanguage() RpcAIWritingToolsRequestLanguage {
+ if m != nil {
+ return m.Language
+ }
+ return RpcAIWritingToolsRequest_EN
+}
+
+func (m *RpcAIWritingToolsRequest) GetText() string {
+ if m != nil {
+ return m.Text
+ }
+ return ""
+}
+
+type RpcAIWritingToolsResponse struct {
+ Error *RpcAIWritingToolsResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"`
+}
+
+func (m *RpcAIWritingToolsResponse) Reset() { *m = RpcAIWritingToolsResponse{} }
+func (m *RpcAIWritingToolsResponse) String() string { return proto.CompactTextString(m) }
+func (*RpcAIWritingToolsResponse) ProtoMessage() {}
+func (*RpcAIWritingToolsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 1}
+}
+func (m *RpcAIWritingToolsResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIWritingToolsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIWritingToolsResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIWritingToolsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIWritingToolsResponse.Merge(m, src)
+}
+func (m *RpcAIWritingToolsResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIWritingToolsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIWritingToolsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIWritingToolsResponse proto.InternalMessageInfo
+
+func (m *RpcAIWritingToolsResponse) GetError() *RpcAIWritingToolsResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+func (m *RpcAIWritingToolsResponse) GetText() string {
+ if m != nil {
+ return m.Text
+ }
+ return ""
+}
+
+type RpcAIWritingToolsResponseError struct {
+ Code RpcAIWritingToolsResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAIWritingToolsResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcAIWritingToolsResponseError) Reset() { *m = RpcAIWritingToolsResponseError{} }
+func (m *RpcAIWritingToolsResponseError) String() string { return proto.CompactTextString(m) }
+func (*RpcAIWritingToolsResponseError) ProtoMessage() {}
+func (*RpcAIWritingToolsResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 1, 0}
+}
+func (m *RpcAIWritingToolsResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIWritingToolsResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIWritingToolsResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIWritingToolsResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIWritingToolsResponseError.Merge(m, src)
+}
+func (m *RpcAIWritingToolsResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIWritingToolsResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIWritingToolsResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIWritingToolsResponseError proto.InternalMessageInfo
+
+func (m *RpcAIWritingToolsResponseError) GetCode() RpcAIWritingToolsResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcAIWritingToolsResponseError_NULL
+}
+
+func (m *RpcAIWritingToolsResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+type RpcAIAutofill struct {
+}
+
+func (m *RpcAIAutofill) Reset() { *m = RpcAIAutofill{} }
+func (m *RpcAIAutofill) String() string { return proto.CompactTextString(m) }
+func (*RpcAIAutofill) ProtoMessage() {}
+func (*RpcAIAutofill) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1}
+}
+func (m *RpcAIAutofill) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIAutofill) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIAutofill.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIAutofill) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIAutofill.Merge(m, src)
+}
+func (m *RpcAIAutofill) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIAutofill) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIAutofill.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIAutofill proto.InternalMessageInfo
+
+type RpcAIAutofillRequest struct {
+ Config *RpcAIProviderConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+ Mode RpcAIAutofillRequestAutofillMode `protobuf:"varint,2,opt,name=mode,proto3,enum=anytype.RpcAIAutofillRequestAutofillMode" json:"mode,omitempty"`
+ Options []string `protobuf:"bytes,3,rep,name=options,proto3" json:"options,omitempty"`
+ Context []string `protobuf:"bytes,4,rep,name=context,proto3" json:"context,omitempty"`
+}
+
+func (m *RpcAIAutofillRequest) Reset() { *m = RpcAIAutofillRequest{} }
+func (m *RpcAIAutofillRequest) String() string { return proto.CompactTextString(m) }
+func (*RpcAIAutofillRequest) ProtoMessage() {}
+func (*RpcAIAutofillRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 0}
+}
+func (m *RpcAIAutofillRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIAutofillRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIAutofillRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIAutofillRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIAutofillRequest.Merge(m, src)
+}
+func (m *RpcAIAutofillRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIAutofillRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIAutofillRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIAutofillRequest proto.InternalMessageInfo
+
+func (m *RpcAIAutofillRequest) GetConfig() *RpcAIProviderConfig {
+ if m != nil {
+ return m.Config
+ }
+ return nil
+}
+
+func (m *RpcAIAutofillRequest) GetMode() RpcAIAutofillRequestAutofillMode {
+ if m != nil {
+ return m.Mode
+ }
+ return RpcAIAutofillRequest_TAG
+}
+
+func (m *RpcAIAutofillRequest) GetOptions() []string {
+ if m != nil {
+ return m.Options
+ }
+ return nil
+}
+
+func (m *RpcAIAutofillRequest) GetContext() []string {
+ if m != nil {
+ return m.Context
+ }
+ return nil
+}
+
+type RpcAIAutofillResponse struct {
+ Error *RpcAIAutofillResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"`
+}
+
+func (m *RpcAIAutofillResponse) Reset() { *m = RpcAIAutofillResponse{} }
+func (m *RpcAIAutofillResponse) String() string { return proto.CompactTextString(m) }
+func (*RpcAIAutofillResponse) ProtoMessage() {}
+func (*RpcAIAutofillResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 1}
+}
+func (m *RpcAIAutofillResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIAutofillResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIAutofillResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIAutofillResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIAutofillResponse.Merge(m, src)
+}
+func (m *RpcAIAutofillResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIAutofillResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIAutofillResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIAutofillResponse proto.InternalMessageInfo
+
+func (m *RpcAIAutofillResponse) GetError() *RpcAIAutofillResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+func (m *RpcAIAutofillResponse) GetText() string {
+ if m != nil {
+ return m.Text
+ }
+ return ""
+}
+
+type RpcAIAutofillResponseError struct {
+ Code RpcAIAutofillResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAIAutofillResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcAIAutofillResponseError) Reset() { *m = RpcAIAutofillResponseError{} }
+func (m *RpcAIAutofillResponseError) String() string { return proto.CompactTextString(m) }
+func (*RpcAIAutofillResponseError) ProtoMessage() {}
+func (*RpcAIAutofillResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 1, 0}
+}
+func (m *RpcAIAutofillResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIAutofillResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIAutofillResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIAutofillResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIAutofillResponseError.Merge(m, src)
+}
+func (m *RpcAIAutofillResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIAutofillResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIAutofillResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIAutofillResponseError proto.InternalMessageInfo
+
+func (m *RpcAIAutofillResponseError) GetCode() RpcAIAutofillResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcAIAutofillResponseError_NULL
+}
+
+func (m *RpcAIAutofillResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+type RpcAIListSummary struct {
+}
+
+func (m *RpcAIListSummary) Reset() { *m = RpcAIListSummary{} }
+func (m *RpcAIListSummary) String() string { return proto.CompactTextString(m) }
+func (*RpcAIListSummary) ProtoMessage() {}
+func (*RpcAIListSummary) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 2}
+}
+func (m *RpcAIListSummary) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIListSummary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIListSummary.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIListSummary) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIListSummary.Merge(m, src)
+}
+func (m *RpcAIListSummary) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIListSummary) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIListSummary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIListSummary proto.InternalMessageInfo
+
+type RpcAIListSummaryRequest struct {
+ Config *RpcAIProviderConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+ SpaceId string `protobuf:"bytes,2,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ ObjectIds []string `protobuf:"bytes,3,rep,name=objectIds,proto3" json:"objectIds,omitempty"`
+ Prompt string `protobuf:"bytes,4,opt,name=prompt,proto3" json:"prompt,omitempty"`
+}
+
+func (m *RpcAIListSummaryRequest) Reset() { *m = RpcAIListSummaryRequest{} }
+func (m *RpcAIListSummaryRequest) String() string { return proto.CompactTextString(m) }
+func (*RpcAIListSummaryRequest) ProtoMessage() {}
+func (*RpcAIListSummaryRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 2, 0}
+}
+func (m *RpcAIListSummaryRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIListSummaryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIListSummaryRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIListSummaryRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIListSummaryRequest.Merge(m, src)
+}
+func (m *RpcAIListSummaryRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIListSummaryRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIListSummaryRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIListSummaryRequest proto.InternalMessageInfo
+
+func (m *RpcAIListSummaryRequest) GetConfig() *RpcAIProviderConfig {
+ if m != nil {
+ return m.Config
+ }
+ return nil
+}
+
+func (m *RpcAIListSummaryRequest) GetSpaceId() string {
+ if m != nil {
+ return m.SpaceId
+ }
+ return ""
+}
+
+func (m *RpcAIListSummaryRequest) GetObjectIds() []string {
+ if m != nil {
+ return m.ObjectIds
+ }
+ return nil
+}
+
+func (m *RpcAIListSummaryRequest) GetPrompt() string {
+ if m != nil {
+ return m.Prompt
+ }
+ return ""
+}
+
+type RpcAIListSummaryResponse struct {
+ Error *RpcAIListSummaryResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
+}
+
+func (m *RpcAIListSummaryResponse) Reset() { *m = RpcAIListSummaryResponse{} }
+func (m *RpcAIListSummaryResponse) String() string { return proto.CompactTextString(m) }
+func (*RpcAIListSummaryResponse) ProtoMessage() {}
+func (*RpcAIListSummaryResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 2, 1}
+}
+func (m *RpcAIListSummaryResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIListSummaryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIListSummaryResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIListSummaryResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIListSummaryResponse.Merge(m, src)
+}
+func (m *RpcAIListSummaryResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIListSummaryResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIListSummaryResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIListSummaryResponse proto.InternalMessageInfo
+
+func (m *RpcAIListSummaryResponse) GetError() *RpcAIListSummaryResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+func (m *RpcAIListSummaryResponse) GetObjectId() string {
+ if m != nil {
+ return m.ObjectId
+ }
+ return ""
+}
+
+type RpcAIListSummaryResponseError struct {
+ Code RpcAIListSummaryResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAIListSummaryResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcAIListSummaryResponseError) Reset() { *m = RpcAIListSummaryResponseError{} }
+func (m *RpcAIListSummaryResponseError) String() string { return proto.CompactTextString(m) }
+func (*RpcAIListSummaryResponseError) ProtoMessage() {}
+func (*RpcAIListSummaryResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 2, 1, 0}
+}
+func (m *RpcAIListSummaryResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIListSummaryResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIListSummaryResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIListSummaryResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIListSummaryResponseError.Merge(m, src)
+}
+func (m *RpcAIListSummaryResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIListSummaryResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIListSummaryResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIListSummaryResponseError proto.InternalMessageInfo
+
+func (m *RpcAIListSummaryResponseError) GetCode() RpcAIListSummaryResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcAIListSummaryResponseError_NULL
+}
+
+func (m *RpcAIListSummaryResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+type RpcAIObjectCreateFromUrl struct {
+}
+
+func (m *RpcAIObjectCreateFromUrl) Reset() { *m = RpcAIObjectCreateFromUrl{} }
+func (m *RpcAIObjectCreateFromUrl) String() string { return proto.CompactTextString(m) }
+func (*RpcAIObjectCreateFromUrl) ProtoMessage() {}
+func (*RpcAIObjectCreateFromUrl) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 3}
+}
+func (m *RpcAIObjectCreateFromUrl) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIObjectCreateFromUrl) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIObjectCreateFromUrl.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIObjectCreateFromUrl) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIObjectCreateFromUrl.Merge(m, src)
+}
+func (m *RpcAIObjectCreateFromUrl) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIObjectCreateFromUrl) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIObjectCreateFromUrl.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIObjectCreateFromUrl proto.InternalMessageInfo
+
+type RpcAIObjectCreateFromUrlRequest struct {
+ Config *RpcAIProviderConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+ SpaceId string `protobuf:"bytes,2,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
+ Details *types.Struct `protobuf:"bytes,4,opt,name=details,proto3" json:"details,omitempty"`
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) Reset() { *m = RpcAIObjectCreateFromUrlRequest{} }
+func (m *RpcAIObjectCreateFromUrlRequest) String() string { return proto.CompactTextString(m) }
+func (*RpcAIObjectCreateFromUrlRequest) ProtoMessage() {}
+func (*RpcAIObjectCreateFromUrlRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 3, 0}
+}
+func (m *RpcAIObjectCreateFromUrlRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIObjectCreateFromUrlRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIObjectCreateFromUrlRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIObjectCreateFromUrlRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIObjectCreateFromUrlRequest.Merge(m, src)
+}
+func (m *RpcAIObjectCreateFromUrlRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIObjectCreateFromUrlRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIObjectCreateFromUrlRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIObjectCreateFromUrlRequest proto.InternalMessageInfo
+
+func (m *RpcAIObjectCreateFromUrlRequest) GetConfig() *RpcAIProviderConfig {
+ if m != nil {
+ return m.Config
+ }
+ return nil
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) GetSpaceId() string {
+ if m != nil {
+ return m.SpaceId
+ }
+ return ""
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) GetUrl() string {
+ if m != nil {
+ return m.Url
+ }
+ return ""
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) GetDetails() *types.Struct {
+ if m != nil {
+ return m.Details
+ }
+ return nil
+}
+
+type RpcAIObjectCreateFromUrlResponse struct {
+ Error *RpcAIObjectCreateFromUrlResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
+ Details *types.Struct `protobuf:"bytes,3,opt,name=details,proto3" json:"details,omitempty"`
+}
+
+func (m *RpcAIObjectCreateFromUrlResponse) Reset() { *m = RpcAIObjectCreateFromUrlResponse{} }
+func (m *RpcAIObjectCreateFromUrlResponse) String() string { return proto.CompactTextString(m) }
+func (*RpcAIObjectCreateFromUrlResponse) ProtoMessage() {}
+func (*RpcAIObjectCreateFromUrlResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 3, 1}
+}
+func (m *RpcAIObjectCreateFromUrlResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIObjectCreateFromUrlResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIObjectCreateFromUrlResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIObjectCreateFromUrlResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIObjectCreateFromUrlResponse.Merge(m, src)
+}
+func (m *RpcAIObjectCreateFromUrlResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIObjectCreateFromUrlResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIObjectCreateFromUrlResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIObjectCreateFromUrlResponse proto.InternalMessageInfo
+
+func (m *RpcAIObjectCreateFromUrlResponse) GetError() *RpcAIObjectCreateFromUrlResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+func (m *RpcAIObjectCreateFromUrlResponse) GetObjectId() string {
+ if m != nil {
+ return m.ObjectId
+ }
+ return ""
+}
+
+func (m *RpcAIObjectCreateFromUrlResponse) GetDetails() *types.Struct {
+ if m != nil {
+ return m.Details
+ }
+ return nil
+}
+
+type RpcAIObjectCreateFromUrlResponseError struct {
+ Code RpcAIObjectCreateFromUrlResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcAIObjectCreateFromUrlResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcAIObjectCreateFromUrlResponseError) Reset() { *m = RpcAIObjectCreateFromUrlResponseError{} }
+func (m *RpcAIObjectCreateFromUrlResponseError) String() string { return proto.CompactTextString(m) }
+func (*RpcAIObjectCreateFromUrlResponseError) ProtoMessage() {}
+func (*RpcAIObjectCreateFromUrlResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 3, 1, 0}
+}
+func (m *RpcAIObjectCreateFromUrlResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIObjectCreateFromUrlResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIObjectCreateFromUrlResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIObjectCreateFromUrlResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIObjectCreateFromUrlResponseError.Merge(m, src)
+}
+func (m *RpcAIObjectCreateFromUrlResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIObjectCreateFromUrlResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIObjectCreateFromUrlResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIObjectCreateFromUrlResponseError proto.InternalMessageInfo
+
+func (m *RpcAIObjectCreateFromUrlResponseError) GetCode() RpcAIObjectCreateFromUrlResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcAIObjectCreateFromUrlResponseError_NULL
+}
+
+func (m *RpcAIObjectCreateFromUrlResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
+type RpcAIProviderConfig struct {
+ Provider RpcAIProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=anytype.RpcAIProvider" json:"provider,omitempty"`
+ Endpoint string `protobuf:"bytes,2,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
+ Model string `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"`
+ Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"`
+ Temperature float32 `protobuf:"fixed32,5,opt,name=temperature,proto3" json:"temperature,omitempty"`
+}
+
+func (m *RpcAIProviderConfig) Reset() { *m = RpcAIProviderConfig{} }
+func (m *RpcAIProviderConfig) String() string { return proto.CompactTextString(m) }
+func (*RpcAIProviderConfig) ProtoMessage() {}
+func (*RpcAIProviderConfig) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 4}
+}
+func (m *RpcAIProviderConfig) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcAIProviderConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcAIProviderConfig.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcAIProviderConfig) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcAIProviderConfig.Merge(m, src)
+}
+func (m *RpcAIProviderConfig) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcAIProviderConfig) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcAIProviderConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcAIProviderConfig proto.InternalMessageInfo
+
+func (m *RpcAIProviderConfig) GetProvider() RpcAIProvider {
+ if m != nil {
+ return m.Provider
+ }
+ return RpcAI_OLLAMA
+}
+
+func (m *RpcAIProviderConfig) GetEndpoint() string {
+ if m != nil {
+ return m.Endpoint
+ }
+ return ""
+}
+
+func (m *RpcAIProviderConfig) GetModel() string {
+ if m != nil {
+ return m.Model
+ }
+ return ""
+}
+
+func (m *RpcAIProviderConfig) GetToken() string {
+ if m != nil {
+ return m.Token
+ }
+ return ""
+}
+
+func (m *RpcAIProviderConfig) GetTemperature() float32 {
+ if m != nil {
+ return m.Temperature
+ }
+ return 0
+}
+
type RpcGallery struct {
}
@@ -41012,7 +42641,7 @@ func (m *RpcGallery) Reset() { *m = RpcGallery{} }
func (m *RpcGallery) String() string { return proto.CompactTextString(m) }
func (*RpcGallery) ProtoMessage() {}
func (*RpcGallery) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18}
}
func (m *RpcGallery) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41048,7 +42677,7 @@ func (m *RpcGalleryDownloadManifest) Reset() { *m = RpcGalleryDownloadMa
func (m *RpcGalleryDownloadManifest) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadManifest) ProtoMessage() {}
func (*RpcGalleryDownloadManifest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0}
}
func (m *RpcGalleryDownloadManifest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41085,7 +42714,7 @@ func (m *RpcGalleryDownloadManifestRequest) Reset() { *m = RpcGalleryDow
func (m *RpcGalleryDownloadManifestRequest) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadManifestRequest) ProtoMessage() {}
func (*RpcGalleryDownloadManifestRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 0}
}
func (m *RpcGalleryDownloadManifestRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41130,7 +42759,7 @@ func (m *RpcGalleryDownloadManifestResponse) Reset() { *m = RpcGalleryDo
func (m *RpcGalleryDownloadManifestResponse) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadManifestResponse) ProtoMessage() {}
func (*RpcGalleryDownloadManifestResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 1}
}
func (m *RpcGalleryDownloadManifestResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41184,7 +42813,7 @@ func (m *RpcGalleryDownloadManifestResponseError) Reset() {
func (m *RpcGalleryDownloadManifestResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadManifestResponseError) ProtoMessage() {}
func (*RpcGalleryDownloadManifestResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 1, 0}
}
func (m *RpcGalleryDownloadManifestResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41234,7 +42863,7 @@ func (m *RpcGalleryDownloadIndex) Reset() { *m = RpcGalleryDownloadIndex
func (m *RpcGalleryDownloadIndex) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadIndex) ProtoMessage() {}
func (*RpcGalleryDownloadIndex) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1}
}
func (m *RpcGalleryDownloadIndex) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41270,7 +42899,7 @@ func (m *RpcGalleryDownloadIndexRequest) Reset() { *m = RpcGalleryDownlo
func (m *RpcGalleryDownloadIndexRequest) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadIndexRequest) ProtoMessage() {}
func (*RpcGalleryDownloadIndexRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 0}
}
func (m *RpcGalleryDownloadIndexRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41309,7 +42938,7 @@ func (m *RpcGalleryDownloadIndexResponse) Reset() { *m = RpcGalleryDownl
func (m *RpcGalleryDownloadIndexResponse) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadIndexResponse) ProtoMessage() {}
func (*RpcGalleryDownloadIndexResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 1}
}
func (m *RpcGalleryDownloadIndexResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41368,7 +42997,7 @@ func (m *RpcGalleryDownloadIndexResponseError) Reset() { *m = RpcGallery
func (m *RpcGalleryDownloadIndexResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadIndexResponseError) ProtoMessage() {}
func (*RpcGalleryDownloadIndexResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 1, 0}
}
func (m *RpcGalleryDownloadIndexResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41423,7 +43052,7 @@ func (m *RpcGalleryDownloadIndexResponseCategory) Reset() {
func (m *RpcGalleryDownloadIndexResponseCategory) String() string { return proto.CompactTextString(m) }
func (*RpcGalleryDownloadIndexResponseCategory) ProtoMessage() {}
func (*RpcGalleryDownloadIndexResponseCategory) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 17, 1, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 1, 1}
}
func (m *RpcGalleryDownloadIndexResponseCategory) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41481,7 +43110,7 @@ func (m *RpcBlock) Reset() { *m = RpcBlock{} }
func (m *RpcBlock) String() string { return proto.CompactTextString(m) }
func (*RpcBlock) ProtoMessage() {}
func (*RpcBlock) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19}
}
func (m *RpcBlock) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41517,7 +43146,7 @@ func (m *RpcBlockReplace) Reset() { *m = RpcBlockReplace{} }
func (m *RpcBlockReplace) String() string { return proto.CompactTextString(m) }
func (*RpcBlockReplace) ProtoMessage() {}
func (*RpcBlockReplace) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0}
}
func (m *RpcBlockReplace) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41556,7 +43185,7 @@ func (m *RpcBlockReplaceRequest) Reset() { *m = RpcBlockReplaceRequest{}
func (m *RpcBlockReplaceRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockReplaceRequest) ProtoMessage() {}
func (*RpcBlockReplaceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 0}
}
func (m *RpcBlockReplaceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41616,7 +43245,7 @@ func (m *RpcBlockReplaceResponse) Reset() { *m = RpcBlockReplaceResponse
func (m *RpcBlockReplaceResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockReplaceResponse) ProtoMessage() {}
func (*RpcBlockReplaceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 1}
}
func (m *RpcBlockReplaceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41675,7 +43304,7 @@ func (m *RpcBlockReplaceResponseError) Reset() { *m = RpcBlockReplaceRes
func (m *RpcBlockReplaceResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockReplaceResponseError) ProtoMessage() {}
func (*RpcBlockReplaceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 1, 0}
}
func (m *RpcBlockReplaceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41725,7 +43354,7 @@ func (m *RpcBlockSplit) Reset() { *m = RpcBlockSplit{} }
func (m *RpcBlockSplit) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSplit) ProtoMessage() {}
func (*RpcBlockSplit) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1}
}
func (m *RpcBlockSplit) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41766,7 +43395,7 @@ func (m *RpcBlockSplitRequest) Reset() { *m = RpcBlockSplitRequest{} }
func (m *RpcBlockSplitRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSplitRequest) ProtoMessage() {}
func (*RpcBlockSplitRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 0}
}
func (m *RpcBlockSplitRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41840,7 +43469,7 @@ func (m *RpcBlockSplitResponse) Reset() { *m = RpcBlockSplitResponse{} }
func (m *RpcBlockSplitResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSplitResponse) ProtoMessage() {}
func (*RpcBlockSplitResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 1}
}
func (m *RpcBlockSplitResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41899,7 +43528,7 @@ func (m *RpcBlockSplitResponseError) Reset() { *m = RpcBlockSplitRespons
func (m *RpcBlockSplitResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSplitResponseError) ProtoMessage() {}
func (*RpcBlockSplitResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 1, 0}
}
func (m *RpcBlockSplitResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41949,7 +43578,7 @@ func (m *RpcBlockMerge) Reset() { *m = RpcBlockMerge{} }
func (m *RpcBlockMerge) String() string { return proto.CompactTextString(m) }
func (*RpcBlockMerge) ProtoMessage() {}
func (*RpcBlockMerge) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 2}
}
func (m *RpcBlockMerge) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -41988,7 +43617,7 @@ func (m *RpcBlockMergeRequest) Reset() { *m = RpcBlockMergeRequest{} }
func (m *RpcBlockMergeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockMergeRequest) ProtoMessage() {}
func (*RpcBlockMergeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 2, 0}
}
func (m *RpcBlockMergeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42047,7 +43676,7 @@ func (m *RpcBlockMergeResponse) Reset() { *m = RpcBlockMergeResponse{} }
func (m *RpcBlockMergeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockMergeResponse) ProtoMessage() {}
func (*RpcBlockMergeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 2, 1}
}
func (m *RpcBlockMergeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42099,7 +43728,7 @@ func (m *RpcBlockMergeResponseError) Reset() { *m = RpcBlockMergeRespons
func (m *RpcBlockMergeResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockMergeResponseError) ProtoMessage() {}
func (*RpcBlockMergeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 2, 1, 0}
}
func (m *RpcBlockMergeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42149,7 +43778,7 @@ func (m *RpcBlockCopy) Reset() { *m = RpcBlockCopy{} }
func (m *RpcBlockCopy) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCopy) ProtoMessage() {}
func (*RpcBlockCopy) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 3}
}
func (m *RpcBlockCopy) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42188,7 +43817,7 @@ func (m *RpcBlockCopyRequest) Reset() { *m = RpcBlockCopyRequest{} }
func (m *RpcBlockCopyRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCopyRequest) ProtoMessage() {}
func (*RpcBlockCopyRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 3, 0}
}
func (m *RpcBlockCopyRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42249,7 +43878,7 @@ func (m *RpcBlockCopyResponse) Reset() { *m = RpcBlockCopyResponse{} }
func (m *RpcBlockCopyResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCopyResponse) ProtoMessage() {}
func (*RpcBlockCopyResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 3, 1}
}
func (m *RpcBlockCopyResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42315,7 +43944,7 @@ func (m *RpcBlockCopyResponseError) Reset() { *m = RpcBlockCopyResponseE
func (m *RpcBlockCopyResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCopyResponseError) ProtoMessage() {}
func (*RpcBlockCopyResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 3, 1, 0}
}
func (m *RpcBlockCopyResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42365,7 +43994,7 @@ func (m *RpcBlockPaste) Reset() { *m = RpcBlockPaste{} }
func (m *RpcBlockPaste) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPaste) ProtoMessage() {}
func (*RpcBlockPaste) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 4}
}
func (m *RpcBlockPaste) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42411,7 +44040,7 @@ func (m *RpcBlockPasteRequest) Reset() { *m = RpcBlockPasteRequest{} }
func (m *RpcBlockPasteRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPasteRequest) ProtoMessage() {}
func (*RpcBlockPasteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 4, 0}
}
func (m *RpcBlockPasteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42520,7 +44149,7 @@ func (m *RpcBlockPasteRequestFile) Reset() { *m = RpcBlockPasteRequestFi
func (m *RpcBlockPasteRequestFile) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPasteRequestFile) ProtoMessage() {}
func (*RpcBlockPasteRequestFile) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 4, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 4, 0, 0}
}
func (m *RpcBlockPasteRequestFile) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42582,7 +44211,7 @@ func (m *RpcBlockPasteResponse) Reset() { *m = RpcBlockPasteResponse{} }
func (m *RpcBlockPasteResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPasteResponse) ProtoMessage() {}
func (*RpcBlockPasteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 4, 1}
}
func (m *RpcBlockPasteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42655,7 +44284,7 @@ func (m *RpcBlockPasteResponseError) Reset() { *m = RpcBlockPasteRespons
func (m *RpcBlockPasteResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPasteResponseError) ProtoMessage() {}
func (*RpcBlockPasteResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 4, 1, 0}
}
func (m *RpcBlockPasteResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42705,7 +44334,7 @@ func (m *RpcBlockCut) Reset() { *m = RpcBlockCut{} }
func (m *RpcBlockCut) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCut) ProtoMessage() {}
func (*RpcBlockCut) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 5}
}
func (m *RpcBlockCut) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42744,7 +44373,7 @@ func (m *RpcBlockCutRequest) Reset() { *m = RpcBlockCutRequest{} }
func (m *RpcBlockCutRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCutRequest) ProtoMessage() {}
func (*RpcBlockCutRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 5, 0}
}
func (m *RpcBlockCutRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42806,7 +44435,7 @@ func (m *RpcBlockCutResponse) Reset() { *m = RpcBlockCutResponse{} }
func (m *RpcBlockCutResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCutResponse) ProtoMessage() {}
func (*RpcBlockCutResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 5, 1}
}
func (m *RpcBlockCutResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42879,7 +44508,7 @@ func (m *RpcBlockCutResponseError) Reset() { *m = RpcBlockCutResponseErr
func (m *RpcBlockCutResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCutResponseError) ProtoMessage() {}
func (*RpcBlockCutResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 5, 1, 0}
}
func (m *RpcBlockCutResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42929,7 +44558,7 @@ func (m *RpcBlockUpload) Reset() { *m = RpcBlockUpload{} }
func (m *RpcBlockUpload) String() string { return proto.CompactTextString(m) }
func (*RpcBlockUpload) ProtoMessage() {}
func (*RpcBlockUpload) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 6}
}
func (m *RpcBlockUpload) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -42970,7 +44599,7 @@ func (m *RpcBlockUploadRequest) Reset() { *m = RpcBlockUploadRequest{} }
func (m *RpcBlockUploadRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockUploadRequest) ProtoMessage() {}
func (*RpcBlockUploadRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 6, 0}
}
func (m *RpcBlockUploadRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43043,7 +44672,7 @@ func (m *RpcBlockUploadResponse) Reset() { *m = RpcBlockUploadResponse{}
func (m *RpcBlockUploadResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockUploadResponse) ProtoMessage() {}
func (*RpcBlockUploadResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 6, 1}
}
func (m *RpcBlockUploadResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43095,7 +44724,7 @@ func (m *RpcBlockUploadResponseError) Reset() { *m = RpcBlockUploadRespo
func (m *RpcBlockUploadResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockUploadResponseError) ProtoMessage() {}
func (*RpcBlockUploadResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 6, 1, 0}
}
func (m *RpcBlockUploadResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43145,7 +44774,7 @@ func (m *RpcBlockDownload) Reset() { *m = RpcBlockDownload{} }
func (m *RpcBlockDownload) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDownload) ProtoMessage() {}
func (*RpcBlockDownload) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 7}
}
func (m *RpcBlockDownload) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43183,7 +44812,7 @@ func (m *RpcBlockDownloadRequest) Reset() { *m = RpcBlockDownloadRequest
func (m *RpcBlockDownloadRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDownloadRequest) ProtoMessage() {}
func (*RpcBlockDownloadRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 7, 0}
}
func (m *RpcBlockDownloadRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43235,7 +44864,7 @@ func (m *RpcBlockDownloadResponse) Reset() { *m = RpcBlockDownloadRespon
func (m *RpcBlockDownloadResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDownloadResponse) ProtoMessage() {}
func (*RpcBlockDownloadResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 7, 1}
}
func (m *RpcBlockDownloadResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43287,7 +44916,7 @@ func (m *RpcBlockDownloadResponseError) Reset() { *m = RpcBlockDownloadR
func (m *RpcBlockDownloadResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDownloadResponseError) ProtoMessage() {}
func (*RpcBlockDownloadResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 7, 1, 0}
}
func (m *RpcBlockDownloadResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43351,7 +44980,7 @@ func (m *RpcBlockCreate) Reset() { *m = RpcBlockCreate{} }
func (m *RpcBlockCreate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreate) ProtoMessage() {}
func (*RpcBlockCreate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 8}
}
func (m *RpcBlockCreate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43392,7 +45021,7 @@ func (m *RpcBlockCreateRequest) Reset() { *m = RpcBlockCreateRequest{} }
func (m *RpcBlockCreateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreateRequest) ProtoMessage() {}
func (*RpcBlockCreateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 8, 0}
}
func (m *RpcBlockCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43459,7 +45088,7 @@ func (m *RpcBlockCreateResponse) Reset() { *m = RpcBlockCreateResponse{}
func (m *RpcBlockCreateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreateResponse) ProtoMessage() {}
func (*RpcBlockCreateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 8, 1}
}
func (m *RpcBlockCreateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43518,7 +45147,7 @@ func (m *RpcBlockCreateResponseError) Reset() { *m = RpcBlockCreateRespo
func (m *RpcBlockCreateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreateResponseError) ProtoMessage() {}
func (*RpcBlockCreateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 8, 1, 0}
}
func (m *RpcBlockCreateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43568,7 +45197,7 @@ func (m *RpcBlockCreateWidget) Reset() { *m = RpcBlockCreateWidget{} }
func (m *RpcBlockCreateWidget) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreateWidget) ProtoMessage() {}
func (*RpcBlockCreateWidget) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 9}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 9}
}
func (m *RpcBlockCreateWidget) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43611,7 +45240,7 @@ func (m *RpcBlockCreateWidgetRequest) Reset() { *m = RpcBlockCreateWidge
func (m *RpcBlockCreateWidgetRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreateWidgetRequest) ProtoMessage() {}
func (*RpcBlockCreateWidgetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 9, 0}
}
func (m *RpcBlockCreateWidgetRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43699,7 +45328,7 @@ func (m *RpcBlockCreateWidgetResponse) Reset() { *m = RpcBlockCreateWidg
func (m *RpcBlockCreateWidgetResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreateWidgetResponse) ProtoMessage() {}
func (*RpcBlockCreateWidgetResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 9, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 9, 1}
}
func (m *RpcBlockCreateWidgetResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43758,7 +45387,7 @@ func (m *RpcBlockCreateWidgetResponseError) Reset() { *m = RpcBlockCreat
func (m *RpcBlockCreateWidgetResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockCreateWidgetResponseError) ProtoMessage() {}
func (*RpcBlockCreateWidgetResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 9, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 9, 1, 0}
}
func (m *RpcBlockCreateWidgetResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43809,7 +45438,7 @@ func (m *RpcBlockListDelete) Reset() { *m = RpcBlockListDelete{} }
func (m *RpcBlockListDelete) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDelete) ProtoMessage() {}
func (*RpcBlockListDelete) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 10}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 10}
}
func (m *RpcBlockListDelete) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43847,7 +45476,7 @@ func (m *RpcBlockListDeleteRequest) Reset() { *m = RpcBlockListDeleteReq
func (m *RpcBlockListDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDeleteRequest) ProtoMessage() {}
func (*RpcBlockListDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 10, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 10, 0}
}
func (m *RpcBlockListDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43899,7 +45528,7 @@ func (m *RpcBlockListDeleteResponse) Reset() { *m = RpcBlockListDeleteRe
func (m *RpcBlockListDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDeleteResponse) ProtoMessage() {}
func (*RpcBlockListDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 10, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 10, 1}
}
func (m *RpcBlockListDeleteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -43951,7 +45580,7 @@ func (m *RpcBlockListDeleteResponseError) Reset() { *m = RpcBlockListDel
func (m *RpcBlockListDeleteResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDeleteResponseError) ProtoMessage() {}
func (*RpcBlockListDeleteResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 10, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 10, 1, 0}
}
func (m *RpcBlockListDeleteResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44001,7 +45630,7 @@ func (m *RpcBlockSetFields) Reset() { *m = RpcBlockSetFields{} }
func (m *RpcBlockSetFields) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetFields) ProtoMessage() {}
func (*RpcBlockSetFields) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 11}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 11}
}
func (m *RpcBlockSetFields) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44040,7 +45669,7 @@ func (m *RpcBlockSetFieldsRequest) Reset() { *m = RpcBlockSetFieldsReque
func (m *RpcBlockSetFieldsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetFieldsRequest) ProtoMessage() {}
func (*RpcBlockSetFieldsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 11, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 11, 0}
}
func (m *RpcBlockSetFieldsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44099,7 +45728,7 @@ func (m *RpcBlockSetFieldsResponse) Reset() { *m = RpcBlockSetFieldsResp
func (m *RpcBlockSetFieldsResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetFieldsResponse) ProtoMessage() {}
func (*RpcBlockSetFieldsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 11, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 11, 1}
}
func (m *RpcBlockSetFieldsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44151,7 +45780,7 @@ func (m *RpcBlockSetFieldsResponseError) Reset() { *m = RpcBlockSetField
func (m *RpcBlockSetFieldsResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetFieldsResponseError) ProtoMessage() {}
func (*RpcBlockSetFieldsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 11, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 11, 1, 0}
}
func (m *RpcBlockSetFieldsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44201,7 +45830,7 @@ func (m *RpcBlockListSetAlign) Reset() { *m = RpcBlockListSetAlign{} }
func (m *RpcBlockListSetAlign) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetAlign) ProtoMessage() {}
func (*RpcBlockListSetAlign) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 12}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 12}
}
func (m *RpcBlockListSetAlign) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44240,7 +45869,7 @@ func (m *RpcBlockListSetAlignRequest) Reset() { *m = RpcBlockListSetAlig
func (m *RpcBlockListSetAlignRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetAlignRequest) ProtoMessage() {}
func (*RpcBlockListSetAlignRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 12, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 12, 0}
}
func (m *RpcBlockListSetAlignRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44299,7 +45928,7 @@ func (m *RpcBlockListSetAlignResponse) Reset() { *m = RpcBlockListSetAli
func (m *RpcBlockListSetAlignResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetAlignResponse) ProtoMessage() {}
func (*RpcBlockListSetAlignResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 12, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 12, 1}
}
func (m *RpcBlockListSetAlignResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44351,7 +45980,7 @@ func (m *RpcBlockListSetAlignResponseError) Reset() { *m = RpcBlockListS
func (m *RpcBlockListSetAlignResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetAlignResponseError) ProtoMessage() {}
func (*RpcBlockListSetAlignResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 12, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 12, 1, 0}
}
func (m *RpcBlockListSetAlignResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44401,7 +46030,7 @@ func (m *RpcBlockListSetVerticalAlign) Reset() { *m = RpcBlockListSetVer
func (m *RpcBlockListSetVerticalAlign) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetVerticalAlign) ProtoMessage() {}
func (*RpcBlockListSetVerticalAlign) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 13}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 13}
}
func (m *RpcBlockListSetVerticalAlign) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44440,7 +46069,7 @@ func (m *RpcBlockListSetVerticalAlignRequest) Reset() { *m = RpcBlockLis
func (m *RpcBlockListSetVerticalAlignRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetVerticalAlignRequest) ProtoMessage() {}
func (*RpcBlockListSetVerticalAlignRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 13, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 13, 0}
}
func (m *RpcBlockListSetVerticalAlignRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44499,7 +46128,7 @@ func (m *RpcBlockListSetVerticalAlignResponse) Reset() { *m = RpcBlockLi
func (m *RpcBlockListSetVerticalAlignResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetVerticalAlignResponse) ProtoMessage() {}
func (*RpcBlockListSetVerticalAlignResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 13, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 13, 1}
}
func (m *RpcBlockListSetVerticalAlignResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44555,7 +46184,7 @@ func (m *RpcBlockListSetVerticalAlignResponseError) String() string {
}
func (*RpcBlockListSetVerticalAlignResponseError) ProtoMessage() {}
func (*RpcBlockListSetVerticalAlignResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 13, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 13, 1, 0}
}
func (m *RpcBlockListSetVerticalAlignResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44605,7 +46234,7 @@ func (m *RpcBlockListSetFields) Reset() { *m = RpcBlockListSetFields{} }
func (m *RpcBlockListSetFields) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetFields) ProtoMessage() {}
func (*RpcBlockListSetFields) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 14}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 14}
}
func (m *RpcBlockListSetFields) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44643,7 +46272,7 @@ func (m *RpcBlockListSetFieldsRequest) Reset() { *m = RpcBlockListSetFie
func (m *RpcBlockListSetFieldsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetFieldsRequest) ProtoMessage() {}
func (*RpcBlockListSetFieldsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 14, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 14, 0}
}
func (m *RpcBlockListSetFieldsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44697,7 +46326,7 @@ func (m *RpcBlockListSetFieldsRequestBlockField) Reset() {
func (m *RpcBlockListSetFieldsRequestBlockField) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetFieldsRequestBlockField) ProtoMessage() {}
func (*RpcBlockListSetFieldsRequestBlockField) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 14, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 14, 0, 0}
}
func (m *RpcBlockListSetFieldsRequestBlockField) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44749,7 +46378,7 @@ func (m *RpcBlockListSetFieldsResponse) Reset() { *m = RpcBlockListSetFi
func (m *RpcBlockListSetFieldsResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetFieldsResponse) ProtoMessage() {}
func (*RpcBlockListSetFieldsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 14, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 14, 1}
}
func (m *RpcBlockListSetFieldsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44801,7 +46430,7 @@ func (m *RpcBlockListSetFieldsResponseError) Reset() { *m = RpcBlockList
func (m *RpcBlockListSetFieldsResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetFieldsResponseError) ProtoMessage() {}
func (*RpcBlockListSetFieldsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 14, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 14, 1, 0}
}
func (m *RpcBlockListSetFieldsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44852,7 +46481,7 @@ func (m *RpcBlockListDuplicate) Reset() { *m = RpcBlockListDuplicate{} }
func (m *RpcBlockListDuplicate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDuplicate) ProtoMessage() {}
func (*RpcBlockListDuplicate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 15}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 15}
}
func (m *RpcBlockListDuplicate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44893,7 +46522,7 @@ func (m *RpcBlockListDuplicateRequest) Reset() { *m = RpcBlockListDuplic
func (m *RpcBlockListDuplicateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDuplicateRequest) ProtoMessage() {}
func (*RpcBlockListDuplicateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 15, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 15, 0}
}
func (m *RpcBlockListDuplicateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -44967,7 +46596,7 @@ func (m *RpcBlockListDuplicateResponse) Reset() { *m = RpcBlockListDupli
func (m *RpcBlockListDuplicateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDuplicateResponse) ProtoMessage() {}
func (*RpcBlockListDuplicateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 15, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 15, 1}
}
func (m *RpcBlockListDuplicateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45026,7 +46655,7 @@ func (m *RpcBlockListDuplicateResponseError) Reset() { *m = RpcBlockList
func (m *RpcBlockListDuplicateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListDuplicateResponseError) ProtoMessage() {}
func (*RpcBlockListDuplicateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 15, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 15, 1, 0}
}
func (m *RpcBlockListDuplicateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45076,7 +46705,7 @@ func (m *RpcBlockListUpdate) Reset() { *m = RpcBlockListUpdate{} }
func (m *RpcBlockListUpdate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListUpdate) ProtoMessage() {}
func (*RpcBlockListUpdate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 16}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 16}
}
func (m *RpcBlockListUpdate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45123,7 +46752,7 @@ func (m *RpcBlockListUpdateRequest) Reset() { *m = RpcBlockListUpdateReq
func (m *RpcBlockListUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListUpdateRequest) ProtoMessage() {}
func (*RpcBlockListUpdateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 16, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 16, 0}
}
func (m *RpcBlockListUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45272,7 +46901,7 @@ func (m *RpcBlockListUpdateRequestText) Reset() { *m = RpcBlockListUpdat
func (m *RpcBlockListUpdateRequestText) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListUpdateRequestText) ProtoMessage() {}
func (*RpcBlockListUpdateRequestText) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 16, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 16, 0, 0}
}
func (m *RpcBlockListUpdateRequestText) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45365,7 +46994,7 @@ func (m *RpcBlockListConvertToObjects) Reset() { *m = RpcBlockListConver
func (m *RpcBlockListConvertToObjects) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListConvertToObjects) ProtoMessage() {}
func (*RpcBlockListConvertToObjects) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 17}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 17}
}
func (m *RpcBlockListConvertToObjects) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45406,7 +47035,7 @@ func (m *RpcBlockListConvertToObjectsRequest) Reset() { *m = RpcBlockLis
func (m *RpcBlockListConvertToObjectsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListConvertToObjectsRequest) ProtoMessage() {}
func (*RpcBlockListConvertToObjectsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 17, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 17, 0}
}
func (m *RpcBlockListConvertToObjectsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45480,7 +47109,7 @@ func (m *RpcBlockListConvertToObjectsResponse) Reset() { *m = RpcBlockLi
func (m *RpcBlockListConvertToObjectsResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListConvertToObjectsResponse) ProtoMessage() {}
func (*RpcBlockListConvertToObjectsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 17, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 17, 1}
}
func (m *RpcBlockListConvertToObjectsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45543,7 +47172,7 @@ func (m *RpcBlockListConvertToObjectsResponseError) String() string {
}
func (*RpcBlockListConvertToObjectsResponseError) ProtoMessage() {}
func (*RpcBlockListConvertToObjectsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 17, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 17, 1, 0}
}
func (m *RpcBlockListConvertToObjectsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45593,7 +47222,7 @@ func (m *RpcBlockListMoveToExistingObject) Reset() { *m = RpcBlockListMo
func (m *RpcBlockListMoveToExistingObject) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListMoveToExistingObject) ProtoMessage() {}
func (*RpcBlockListMoveToExistingObject) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 18}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 18}
}
func (m *RpcBlockListMoveToExistingObject) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45636,7 +47265,7 @@ func (m *RpcBlockListMoveToExistingObjectRequest) Reset() {
func (m *RpcBlockListMoveToExistingObjectRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListMoveToExistingObjectRequest) ProtoMessage() {}
func (*RpcBlockListMoveToExistingObjectRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 18, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 18, 0}
}
func (m *RpcBlockListMoveToExistingObjectRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45711,7 +47340,7 @@ func (m *RpcBlockListMoveToExistingObjectResponse) Reset() {
func (m *RpcBlockListMoveToExistingObjectResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListMoveToExistingObjectResponse) ProtoMessage() {}
func (*RpcBlockListMoveToExistingObjectResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 18, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 18, 1}
}
func (m *RpcBlockListMoveToExistingObjectResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45767,7 +47396,7 @@ func (m *RpcBlockListMoveToExistingObjectResponseError) String() string {
}
func (*RpcBlockListMoveToExistingObjectResponseError) ProtoMessage() {}
func (*RpcBlockListMoveToExistingObjectResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 18, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 18, 1, 0}
}
func (m *RpcBlockListMoveToExistingObjectResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45817,7 +47446,7 @@ func (m *RpcBlockListMoveToNewObject) Reset() { *m = RpcBlockListMoveToN
func (m *RpcBlockListMoveToNewObject) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListMoveToNewObject) ProtoMessage() {}
func (*RpcBlockListMoveToNewObject) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 19}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 19}
}
func (m *RpcBlockListMoveToNewObject) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45858,7 +47487,7 @@ func (m *RpcBlockListMoveToNewObjectRequest) Reset() { *m = RpcBlockList
func (m *RpcBlockListMoveToNewObjectRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListMoveToNewObjectRequest) ProtoMessage() {}
func (*RpcBlockListMoveToNewObjectRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 19, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 19, 0}
}
func (m *RpcBlockListMoveToNewObjectRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45932,7 +47561,7 @@ func (m *RpcBlockListMoveToNewObjectResponse) Reset() { *m = RpcBlockLis
func (m *RpcBlockListMoveToNewObjectResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListMoveToNewObjectResponse) ProtoMessage() {}
func (*RpcBlockListMoveToNewObjectResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 19, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 19, 1}
}
func (m *RpcBlockListMoveToNewObjectResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -45993,7 +47622,7 @@ func (m *RpcBlockListMoveToNewObjectResponseError) Reset() {
func (m *RpcBlockListMoveToNewObjectResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListMoveToNewObjectResponseError) ProtoMessage() {}
func (*RpcBlockListMoveToNewObjectResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 19, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 19, 1, 0}
}
func (m *RpcBlockListMoveToNewObjectResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46043,7 +47672,7 @@ func (m *RpcBlockListTurnInto) Reset() { *m = RpcBlockListTurnInto{} }
func (m *RpcBlockListTurnInto) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListTurnInto) ProtoMessage() {}
func (*RpcBlockListTurnInto) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 20}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 20}
}
func (m *RpcBlockListTurnInto) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46082,7 +47711,7 @@ func (m *RpcBlockListTurnIntoRequest) Reset() { *m = RpcBlockListTurnInt
func (m *RpcBlockListTurnIntoRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListTurnIntoRequest) ProtoMessage() {}
func (*RpcBlockListTurnIntoRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 20, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 20, 0}
}
func (m *RpcBlockListTurnIntoRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46141,7 +47770,7 @@ func (m *RpcBlockListTurnIntoResponse) Reset() { *m = RpcBlockListTurnIn
func (m *RpcBlockListTurnIntoResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListTurnIntoResponse) ProtoMessage() {}
func (*RpcBlockListTurnIntoResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 20, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 20, 1}
}
func (m *RpcBlockListTurnIntoResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46193,7 +47822,7 @@ func (m *RpcBlockListTurnIntoResponseError) Reset() { *m = RpcBlockListT
func (m *RpcBlockListTurnIntoResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListTurnIntoResponseError) ProtoMessage() {}
func (*RpcBlockListTurnIntoResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 20, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 20, 1, 0}
}
func (m *RpcBlockListTurnIntoResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46243,7 +47872,7 @@ func (m *RpcBlockListSetBackgroundColor) Reset() { *m = RpcBlockListSetB
func (m *RpcBlockListSetBackgroundColor) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetBackgroundColor) ProtoMessage() {}
func (*RpcBlockListSetBackgroundColor) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 21}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 21}
}
func (m *RpcBlockListSetBackgroundColor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46282,7 +47911,7 @@ func (m *RpcBlockListSetBackgroundColorRequest) Reset() { *m = RpcBlockL
func (m *RpcBlockListSetBackgroundColorRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetBackgroundColorRequest) ProtoMessage() {}
func (*RpcBlockListSetBackgroundColorRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 21, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 21, 0}
}
func (m *RpcBlockListSetBackgroundColorRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46343,7 +47972,7 @@ func (m *RpcBlockListSetBackgroundColorResponse) Reset() {
func (m *RpcBlockListSetBackgroundColorResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockListSetBackgroundColorResponse) ProtoMessage() {}
func (*RpcBlockListSetBackgroundColorResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 21, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 21, 1}
}
func (m *RpcBlockListSetBackgroundColorResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46399,7 +48028,7 @@ func (m *RpcBlockListSetBackgroundColorResponseError) String() string {
}
func (*RpcBlockListSetBackgroundColorResponseError) ProtoMessage() {}
func (*RpcBlockListSetBackgroundColorResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 21, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 21, 1, 0}
}
func (m *RpcBlockListSetBackgroundColorResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46449,7 +48078,7 @@ func (m *RpcBlockExport) Reset() { *m = RpcBlockExport{} }
func (m *RpcBlockExport) String() string { return proto.CompactTextString(m) }
func (*RpcBlockExport) ProtoMessage() {}
func (*RpcBlockExport) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 22}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 22}
}
func (m *RpcBlockExport) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46487,7 +48116,7 @@ func (m *RpcBlockExportRequest) Reset() { *m = RpcBlockExportRequest{} }
func (m *RpcBlockExportRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockExportRequest) ProtoMessage() {}
func (*RpcBlockExportRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 22, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 22, 0}
}
func (m *RpcBlockExportRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46540,7 +48169,7 @@ func (m *RpcBlockExportResponse) Reset() { *m = RpcBlockExportResponse{}
func (m *RpcBlockExportResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockExportResponse) ProtoMessage() {}
func (*RpcBlockExportResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 22, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 22, 1}
}
func (m *RpcBlockExportResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46599,7 +48228,7 @@ func (m *RpcBlockExportResponseError) Reset() { *m = RpcBlockExportRespo
func (m *RpcBlockExportResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockExportResponseError) ProtoMessage() {}
func (*RpcBlockExportResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 22, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 22, 1, 0}
}
func (m *RpcBlockExportResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46649,7 +48278,7 @@ func (m *RpcBlockSetCarriage) Reset() { *m = RpcBlockSetCarriage{} }
func (m *RpcBlockSetCarriage) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetCarriage) ProtoMessage() {}
func (*RpcBlockSetCarriage) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 23}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 23}
}
func (m *RpcBlockSetCarriage) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46688,7 +48317,7 @@ func (m *RpcBlockSetCarriageRequest) Reset() { *m = RpcBlockSetCarriageR
func (m *RpcBlockSetCarriageRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetCarriageRequest) ProtoMessage() {}
func (*RpcBlockSetCarriageRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 23, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 23, 0}
}
func (m *RpcBlockSetCarriageRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46746,7 +48375,7 @@ func (m *RpcBlockSetCarriageResponse) Reset() { *m = RpcBlockSetCarriage
func (m *RpcBlockSetCarriageResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetCarriageResponse) ProtoMessage() {}
func (*RpcBlockSetCarriageResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 23, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 23, 1}
}
func (m *RpcBlockSetCarriageResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46791,7 +48420,7 @@ func (m *RpcBlockSetCarriageResponseError) Reset() { *m = RpcBlockSetCar
func (m *RpcBlockSetCarriageResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockSetCarriageResponseError) ProtoMessage() {}
func (*RpcBlockSetCarriageResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 23, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 23, 1, 0}
}
func (m *RpcBlockSetCarriageResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46841,7 +48470,7 @@ func (m *RpcBlockPreview) Reset() { *m = RpcBlockPreview{} }
func (m *RpcBlockPreview) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPreview) ProtoMessage() {}
func (*RpcBlockPreview) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 24}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 24}
}
func (m *RpcBlockPreview) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46879,7 +48508,7 @@ func (m *RpcBlockPreviewRequest) Reset() { *m = RpcBlockPreviewRequest{}
func (m *RpcBlockPreviewRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPreviewRequest) ProtoMessage() {}
func (*RpcBlockPreviewRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 24, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 24, 0}
}
func (m *RpcBlockPreviewRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46931,7 +48560,7 @@ func (m *RpcBlockPreviewResponse) Reset() { *m = RpcBlockPreviewResponse
func (m *RpcBlockPreviewResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPreviewResponse) ProtoMessage() {}
func (*RpcBlockPreviewResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 24, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 24, 1}
}
func (m *RpcBlockPreviewResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -46983,7 +48612,7 @@ func (m *RpcBlockPreviewResponseError) Reset() { *m = RpcBlockPreviewRes
func (m *RpcBlockPreviewResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockPreviewResponseError) ProtoMessage() {}
func (*RpcBlockPreviewResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 18, 24, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 24, 1, 0}
}
func (m *RpcBlockPreviewResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47033,7 +48662,7 @@ func (m *RpcBlockLatex) Reset() { *m = RpcBlockLatex{} }
func (m *RpcBlockLatex) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatex) ProtoMessage() {}
func (*RpcBlockLatex) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20}
}
func (m *RpcBlockLatex) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47069,7 +48698,7 @@ func (m *RpcBlockLatexSetText) Reset() { *m = RpcBlockLatexSetText{} }
func (m *RpcBlockLatexSetText) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetText) ProtoMessage() {}
func (*RpcBlockLatexSetText) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0}
}
func (m *RpcBlockLatexSetText) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47109,7 +48738,7 @@ func (m *RpcBlockLatexSetTextRequest) Reset() { *m = RpcBlockLatexSetTex
func (m *RpcBlockLatexSetTextRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetTextRequest) ProtoMessage() {}
func (*RpcBlockLatexSetTextRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 0}
}
func (m *RpcBlockLatexSetTextRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47175,7 +48804,7 @@ func (m *RpcBlockLatexSetTextResponse) Reset() { *m = RpcBlockLatexSetTe
func (m *RpcBlockLatexSetTextResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetTextResponse) ProtoMessage() {}
func (*RpcBlockLatexSetTextResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 1}
}
func (m *RpcBlockLatexSetTextResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47227,7 +48856,7 @@ func (m *RpcBlockLatexSetTextResponseError) Reset() { *m = RpcBlockLatex
func (m *RpcBlockLatexSetTextResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetTextResponseError) ProtoMessage() {}
func (*RpcBlockLatexSetTextResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 1, 0}
}
func (m *RpcBlockLatexSetTextResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47277,7 +48906,7 @@ func (m *RpcBlockLatexSetProcessor) Reset() { *m = RpcBlockLatexSetProce
func (m *RpcBlockLatexSetProcessor) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetProcessor) ProtoMessage() {}
func (*RpcBlockLatexSetProcessor) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1}
}
func (m *RpcBlockLatexSetProcessor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47316,7 +48945,7 @@ func (m *RpcBlockLatexSetProcessorRequest) Reset() { *m = RpcBlockLatexS
func (m *RpcBlockLatexSetProcessorRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetProcessorRequest) ProtoMessage() {}
func (*RpcBlockLatexSetProcessorRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 0}
}
func (m *RpcBlockLatexSetProcessorRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47375,7 +49004,7 @@ func (m *RpcBlockLatexSetProcessorResponse) Reset() { *m = RpcBlockLatex
func (m *RpcBlockLatexSetProcessorResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetProcessorResponse) ProtoMessage() {}
func (*RpcBlockLatexSetProcessorResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 1}
}
func (m *RpcBlockLatexSetProcessorResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47429,7 +49058,7 @@ func (m *RpcBlockLatexSetProcessorResponseError) Reset() {
func (m *RpcBlockLatexSetProcessorResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLatexSetProcessorResponseError) ProtoMessage() {}
func (*RpcBlockLatexSetProcessorResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 19, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 1, 0}
}
func (m *RpcBlockLatexSetProcessorResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47479,7 +49108,7 @@ func (m *RpcBlockText) Reset() { *m = RpcBlockText{} }
func (m *RpcBlockText) String() string { return proto.CompactTextString(m) }
func (*RpcBlockText) ProtoMessage() {}
func (*RpcBlockText) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21}
}
func (m *RpcBlockText) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47515,7 +49144,7 @@ func (m *RpcBlockTextSetText) Reset() { *m = RpcBlockTextSetText{} }
func (m *RpcBlockTextSetText) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetText) ProtoMessage() {}
func (*RpcBlockTextSetText) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0}
}
func (m *RpcBlockTextSetText) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47556,7 +49185,7 @@ func (m *RpcBlockTextSetTextRequest) Reset() { *m = RpcBlockTextSetTextR
func (m *RpcBlockTextSetTextRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetTextRequest) ProtoMessage() {}
func (*RpcBlockTextSetTextRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 0}
}
func (m *RpcBlockTextSetTextRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47629,7 +49258,7 @@ func (m *RpcBlockTextSetTextResponse) Reset() { *m = RpcBlockTextSetText
func (m *RpcBlockTextSetTextResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetTextResponse) ProtoMessage() {}
func (*RpcBlockTextSetTextResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 1}
}
func (m *RpcBlockTextSetTextResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47681,7 +49310,7 @@ func (m *RpcBlockTextSetTextResponseError) Reset() { *m = RpcBlockTextSe
func (m *RpcBlockTextSetTextResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetTextResponseError) ProtoMessage() {}
func (*RpcBlockTextSetTextResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 1, 0}
}
func (m *RpcBlockTextSetTextResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47731,7 +49360,7 @@ func (m *RpcBlockTextSetColor) Reset() { *m = RpcBlockTextSetColor{} }
func (m *RpcBlockTextSetColor) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetColor) ProtoMessage() {}
func (*RpcBlockTextSetColor) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1}
}
func (m *RpcBlockTextSetColor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47770,7 +49399,7 @@ func (m *RpcBlockTextSetColorRequest) Reset() { *m = RpcBlockTextSetColo
func (m *RpcBlockTextSetColorRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetColorRequest) ProtoMessage() {}
func (*RpcBlockTextSetColorRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 0}
}
func (m *RpcBlockTextSetColorRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47829,7 +49458,7 @@ func (m *RpcBlockTextSetColorResponse) Reset() { *m = RpcBlockTextSetCol
func (m *RpcBlockTextSetColorResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetColorResponse) ProtoMessage() {}
func (*RpcBlockTextSetColorResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 1}
}
func (m *RpcBlockTextSetColorResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47881,7 +49510,7 @@ func (m *RpcBlockTextSetColorResponseError) Reset() { *m = RpcBlockTextS
func (m *RpcBlockTextSetColorResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetColorResponseError) ProtoMessage() {}
func (*RpcBlockTextSetColorResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 1, 0}
}
func (m *RpcBlockTextSetColorResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47931,7 +49560,7 @@ func (m *RpcBlockTextSetMarks) Reset() { *m = RpcBlockTextSetMarks{} }
func (m *RpcBlockTextSetMarks) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetMarks) ProtoMessage() {}
func (*RpcBlockTextSetMarks) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2}
}
func (m *RpcBlockTextSetMarks) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -47968,7 +49597,7 @@ func (m *RpcBlockTextSetMarksGet) Reset() { *m = RpcBlockTextSetMarksGet
func (m *RpcBlockTextSetMarksGet) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetMarksGet) ProtoMessage() {}
func (*RpcBlockTextSetMarksGet) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 0}
}
func (m *RpcBlockTextSetMarksGet) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48007,7 +49636,7 @@ func (m *RpcBlockTextSetMarksGetRequest) Reset() { *m = RpcBlockTextSetM
func (m *RpcBlockTextSetMarksGetRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetMarksGetRequest) ProtoMessage() {}
func (*RpcBlockTextSetMarksGetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 2, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 0, 0}
}
func (m *RpcBlockTextSetMarksGetRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48066,7 +49695,7 @@ func (m *RpcBlockTextSetMarksGetResponse) Reset() { *m = RpcBlockTextSet
func (m *RpcBlockTextSetMarksGetResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetMarksGetResponse) ProtoMessage() {}
func (*RpcBlockTextSetMarksGetResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 2, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 0, 1}
}
func (m *RpcBlockTextSetMarksGetResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48118,7 +49747,7 @@ func (m *RpcBlockTextSetMarksGetResponseError) Reset() { *m = RpcBlockTe
func (m *RpcBlockTextSetMarksGetResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetMarksGetResponseError) ProtoMessage() {}
func (*RpcBlockTextSetMarksGetResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 2, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 0, 1, 0}
}
func (m *RpcBlockTextSetMarksGetResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48168,7 +49797,7 @@ func (m *RpcBlockTextSetStyle) Reset() { *m = RpcBlockTextSetStyle{} }
func (m *RpcBlockTextSetStyle) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetStyle) ProtoMessage() {}
func (*RpcBlockTextSetStyle) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3}
}
func (m *RpcBlockTextSetStyle) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48207,7 +49836,7 @@ func (m *RpcBlockTextSetStyleRequest) Reset() { *m = RpcBlockTextSetStyl
func (m *RpcBlockTextSetStyleRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetStyleRequest) ProtoMessage() {}
func (*RpcBlockTextSetStyleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 0}
}
func (m *RpcBlockTextSetStyleRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48266,7 +49895,7 @@ func (m *RpcBlockTextSetStyleResponse) Reset() { *m = RpcBlockTextSetSty
func (m *RpcBlockTextSetStyleResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetStyleResponse) ProtoMessage() {}
func (*RpcBlockTextSetStyleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 1}
}
func (m *RpcBlockTextSetStyleResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48318,7 +49947,7 @@ func (m *RpcBlockTextSetStyleResponseError) Reset() { *m = RpcBlockTextS
func (m *RpcBlockTextSetStyleResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetStyleResponseError) ProtoMessage() {}
func (*RpcBlockTextSetStyleResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 1, 0}
}
func (m *RpcBlockTextSetStyleResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48368,7 +49997,7 @@ func (m *RpcBlockTextSetChecked) Reset() { *m = RpcBlockTextSetChecked{}
func (m *RpcBlockTextSetChecked) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetChecked) ProtoMessage() {}
func (*RpcBlockTextSetChecked) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4}
}
func (m *RpcBlockTextSetChecked) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48407,7 +50036,7 @@ func (m *RpcBlockTextSetCheckedRequest) Reset() { *m = RpcBlockTextSetCh
func (m *RpcBlockTextSetCheckedRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetCheckedRequest) ProtoMessage() {}
func (*RpcBlockTextSetCheckedRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 0}
}
func (m *RpcBlockTextSetCheckedRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48466,7 +50095,7 @@ func (m *RpcBlockTextSetCheckedResponse) Reset() { *m = RpcBlockTextSetC
func (m *RpcBlockTextSetCheckedResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetCheckedResponse) ProtoMessage() {}
func (*RpcBlockTextSetCheckedResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 1}
}
func (m *RpcBlockTextSetCheckedResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48518,7 +50147,7 @@ func (m *RpcBlockTextSetCheckedResponseError) Reset() { *m = RpcBlockTex
func (m *RpcBlockTextSetCheckedResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetCheckedResponseError) ProtoMessage() {}
func (*RpcBlockTextSetCheckedResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 1, 0}
}
func (m *RpcBlockTextSetCheckedResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48568,7 +50197,7 @@ func (m *RpcBlockTextSetIcon) Reset() { *m = RpcBlockTextSetIcon{} }
func (m *RpcBlockTextSetIcon) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetIcon) ProtoMessage() {}
func (*RpcBlockTextSetIcon) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5}
}
func (m *RpcBlockTextSetIcon) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48608,7 +50237,7 @@ func (m *RpcBlockTextSetIconRequest) Reset() { *m = RpcBlockTextSetIconR
func (m *RpcBlockTextSetIconRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetIconRequest) ProtoMessage() {}
func (*RpcBlockTextSetIconRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 0}
}
func (m *RpcBlockTextSetIconRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48674,7 +50303,7 @@ func (m *RpcBlockTextSetIconResponse) Reset() { *m = RpcBlockTextSetIcon
func (m *RpcBlockTextSetIconResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetIconResponse) ProtoMessage() {}
func (*RpcBlockTextSetIconResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 1}
}
func (m *RpcBlockTextSetIconResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48726,7 +50355,7 @@ func (m *RpcBlockTextSetIconResponseError) Reset() { *m = RpcBlockTextSe
func (m *RpcBlockTextSetIconResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextSetIconResponseError) ProtoMessage() {}
func (*RpcBlockTextSetIconResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 1, 0}
}
func (m *RpcBlockTextSetIconResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48776,7 +50405,7 @@ func (m *RpcBlockTextListSetStyle) Reset() { *m = RpcBlockTextListSetSty
func (m *RpcBlockTextListSetStyle) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetStyle) ProtoMessage() {}
func (*RpcBlockTextListSetStyle) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6}
}
func (m *RpcBlockTextListSetStyle) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48815,7 +50444,7 @@ func (m *RpcBlockTextListSetStyleRequest) Reset() { *m = RpcBlockTextLis
func (m *RpcBlockTextListSetStyleRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetStyleRequest) ProtoMessage() {}
func (*RpcBlockTextListSetStyleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 0}
}
func (m *RpcBlockTextListSetStyleRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48874,7 +50503,7 @@ func (m *RpcBlockTextListSetStyleResponse) Reset() { *m = RpcBlockTextLi
func (m *RpcBlockTextListSetStyleResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetStyleResponse) ProtoMessage() {}
func (*RpcBlockTextListSetStyleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 1}
}
func (m *RpcBlockTextListSetStyleResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48926,7 +50555,7 @@ func (m *RpcBlockTextListSetStyleResponseError) Reset() { *m = RpcBlockT
func (m *RpcBlockTextListSetStyleResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetStyleResponseError) ProtoMessage() {}
func (*RpcBlockTextListSetStyleResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 1, 0}
}
func (m *RpcBlockTextListSetStyleResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -48976,7 +50605,7 @@ func (m *RpcBlockTextListSetColor) Reset() { *m = RpcBlockTextListSetCol
func (m *RpcBlockTextListSetColor) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetColor) ProtoMessage() {}
func (*RpcBlockTextListSetColor) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7}
}
func (m *RpcBlockTextListSetColor) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49015,7 +50644,7 @@ func (m *RpcBlockTextListSetColorRequest) Reset() { *m = RpcBlockTextLis
func (m *RpcBlockTextListSetColorRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetColorRequest) ProtoMessage() {}
func (*RpcBlockTextListSetColorRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 0}
}
func (m *RpcBlockTextListSetColorRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49074,7 +50703,7 @@ func (m *RpcBlockTextListSetColorResponse) Reset() { *m = RpcBlockTextLi
func (m *RpcBlockTextListSetColorResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetColorResponse) ProtoMessage() {}
func (*RpcBlockTextListSetColorResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 1}
}
func (m *RpcBlockTextListSetColorResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49126,7 +50755,7 @@ func (m *RpcBlockTextListSetColorResponseError) Reset() { *m = RpcBlockT
func (m *RpcBlockTextListSetColorResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetColorResponseError) ProtoMessage() {}
func (*RpcBlockTextListSetColorResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 1, 0}
}
func (m *RpcBlockTextListSetColorResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49176,7 +50805,7 @@ func (m *RpcBlockTextListSetMark) Reset() { *m = RpcBlockTextListSetMark
func (m *RpcBlockTextListSetMark) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetMark) ProtoMessage() {}
func (*RpcBlockTextListSetMark) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8}
}
func (m *RpcBlockTextListSetMark) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49215,7 +50844,7 @@ func (m *RpcBlockTextListSetMarkRequest) Reset() { *m = RpcBlockTextList
func (m *RpcBlockTextListSetMarkRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetMarkRequest) ProtoMessage() {}
func (*RpcBlockTextListSetMarkRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 0}
}
func (m *RpcBlockTextListSetMarkRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49274,7 +50903,7 @@ func (m *RpcBlockTextListSetMarkResponse) Reset() { *m = RpcBlockTextLis
func (m *RpcBlockTextListSetMarkResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetMarkResponse) ProtoMessage() {}
func (*RpcBlockTextListSetMarkResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 1}
}
func (m *RpcBlockTextListSetMarkResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49326,7 +50955,7 @@ func (m *RpcBlockTextListSetMarkResponseError) Reset() { *m = RpcBlockTe
func (m *RpcBlockTextListSetMarkResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListSetMarkResponseError) ProtoMessage() {}
func (*RpcBlockTextListSetMarkResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 1, 0}
}
func (m *RpcBlockTextListSetMarkResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49376,7 +51005,7 @@ func (m *RpcBlockTextListClearStyle) Reset() { *m = RpcBlockTextListClea
func (m *RpcBlockTextListClearStyle) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListClearStyle) ProtoMessage() {}
func (*RpcBlockTextListClearStyle) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 9}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9}
}
func (m *RpcBlockTextListClearStyle) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49414,7 +51043,7 @@ func (m *RpcBlockTextListClearStyleRequest) Reset() { *m = RpcBlockTextL
func (m *RpcBlockTextListClearStyleRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListClearStyleRequest) ProtoMessage() {}
func (*RpcBlockTextListClearStyleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 0}
}
func (m *RpcBlockTextListClearStyleRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49466,7 +51095,7 @@ func (m *RpcBlockTextListClearStyleResponse) Reset() { *m = RpcBlockText
func (m *RpcBlockTextListClearStyleResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListClearStyleResponse) ProtoMessage() {}
func (*RpcBlockTextListClearStyleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 9, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 1}
}
func (m *RpcBlockTextListClearStyleResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49520,7 +51149,7 @@ func (m *RpcBlockTextListClearStyleResponseError) Reset() {
func (m *RpcBlockTextListClearStyleResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListClearStyleResponseError) ProtoMessage() {}
func (*RpcBlockTextListClearStyleResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 9, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 1, 0}
}
func (m *RpcBlockTextListClearStyleResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49570,7 +51199,7 @@ func (m *RpcBlockTextListClearContent) Reset() { *m = RpcBlockTextListCl
func (m *RpcBlockTextListClearContent) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListClearContent) ProtoMessage() {}
func (*RpcBlockTextListClearContent) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 10}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10}
}
func (m *RpcBlockTextListClearContent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49608,7 +51237,7 @@ func (m *RpcBlockTextListClearContentRequest) Reset() { *m = RpcBlockTex
func (m *RpcBlockTextListClearContentRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListClearContentRequest) ProtoMessage() {}
func (*RpcBlockTextListClearContentRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 10, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 0}
}
func (m *RpcBlockTextListClearContentRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49660,7 +51289,7 @@ func (m *RpcBlockTextListClearContentResponse) Reset() { *m = RpcBlockTe
func (m *RpcBlockTextListClearContentResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTextListClearContentResponse) ProtoMessage() {}
func (*RpcBlockTextListClearContentResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 10, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 1}
}
func (m *RpcBlockTextListClearContentResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49716,7 +51345,7 @@ func (m *RpcBlockTextListClearContentResponseError) String() string {
}
func (*RpcBlockTextListClearContentResponseError) ProtoMessage() {}
func (*RpcBlockTextListClearContentResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 20, 10, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 1, 0}
}
func (m *RpcBlockTextListClearContentResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49766,7 +51395,7 @@ func (m *RpcBlockTable) Reset() { *m = RpcBlockTable{} }
func (m *RpcBlockTable) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTable) ProtoMessage() {}
func (*RpcBlockTable) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22}
}
func (m *RpcBlockTable) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49802,7 +51431,7 @@ func (m *RpcBlockTableCreate) Reset() { *m = RpcBlockTableCreate{} }
func (m *RpcBlockTableCreate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableCreate) ProtoMessage() {}
func (*RpcBlockTableCreate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0}
}
func (m *RpcBlockTableCreate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49844,7 +51473,7 @@ func (m *RpcBlockTableCreateRequest) Reset() { *m = RpcBlockTableCreateR
func (m *RpcBlockTableCreateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableCreateRequest) ProtoMessage() {}
func (*RpcBlockTableCreateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 0}
}
func (m *RpcBlockTableCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49925,7 +51554,7 @@ func (m *RpcBlockTableCreateResponse) Reset() { *m = RpcBlockTableCreate
func (m *RpcBlockTableCreateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableCreateResponse) ProtoMessage() {}
func (*RpcBlockTableCreateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 1}
}
func (m *RpcBlockTableCreateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -49984,7 +51613,7 @@ func (m *RpcBlockTableCreateResponseError) Reset() { *m = RpcBlockTableC
func (m *RpcBlockTableCreateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableCreateResponseError) ProtoMessage() {}
func (*RpcBlockTableCreateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 1, 0}
}
func (m *RpcBlockTableCreateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50034,7 +51663,7 @@ func (m *RpcBlockTableRowCreate) Reset() { *m = RpcBlockTableRowCreate{}
func (m *RpcBlockTableRowCreate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowCreate) ProtoMessage() {}
func (*RpcBlockTableRowCreate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1}
}
func (m *RpcBlockTableRowCreate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50073,7 +51702,7 @@ func (m *RpcBlockTableRowCreateRequest) Reset() { *m = RpcBlockTableRowC
func (m *RpcBlockTableRowCreateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowCreateRequest) ProtoMessage() {}
func (*RpcBlockTableRowCreateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 0}
}
func (m *RpcBlockTableRowCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50132,7 +51761,7 @@ func (m *RpcBlockTableRowCreateResponse) Reset() { *m = RpcBlockTableRow
func (m *RpcBlockTableRowCreateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowCreateResponse) ProtoMessage() {}
func (*RpcBlockTableRowCreateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 1}
}
func (m *RpcBlockTableRowCreateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50184,7 +51813,7 @@ func (m *RpcBlockTableRowCreateResponseError) Reset() { *m = RpcBlockTab
func (m *RpcBlockTableRowCreateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowCreateResponseError) ProtoMessage() {}
func (*RpcBlockTableRowCreateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 1, 0}
}
func (m *RpcBlockTableRowCreateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50234,7 +51863,7 @@ func (m *RpcBlockTableRowSetHeader) Reset() { *m = RpcBlockTableRowSetHe
func (m *RpcBlockTableRowSetHeader) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowSetHeader) ProtoMessage() {}
func (*RpcBlockTableRowSetHeader) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2}
}
func (m *RpcBlockTableRowSetHeader) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50273,7 +51902,7 @@ func (m *RpcBlockTableRowSetHeaderRequest) Reset() { *m = RpcBlockTableR
func (m *RpcBlockTableRowSetHeaderRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowSetHeaderRequest) ProtoMessage() {}
func (*RpcBlockTableRowSetHeaderRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 0}
}
func (m *RpcBlockTableRowSetHeaderRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50332,7 +51961,7 @@ func (m *RpcBlockTableRowSetHeaderResponse) Reset() { *m = RpcBlockTable
func (m *RpcBlockTableRowSetHeaderResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowSetHeaderResponse) ProtoMessage() {}
func (*RpcBlockTableRowSetHeaderResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 1}
}
func (m *RpcBlockTableRowSetHeaderResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50386,7 +52015,7 @@ func (m *RpcBlockTableRowSetHeaderResponseError) Reset() {
func (m *RpcBlockTableRowSetHeaderResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowSetHeaderResponseError) ProtoMessage() {}
func (*RpcBlockTableRowSetHeaderResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 1, 0}
}
func (m *RpcBlockTableRowSetHeaderResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50436,7 +52065,7 @@ func (m *RpcBlockTableRowListFill) Reset() { *m = RpcBlockTableRowListFi
func (m *RpcBlockTableRowListFill) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListFill) ProtoMessage() {}
func (*RpcBlockTableRowListFill) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3}
}
func (m *RpcBlockTableRowListFill) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50474,7 +52103,7 @@ func (m *RpcBlockTableRowListFillRequest) Reset() { *m = RpcBlockTableRo
func (m *RpcBlockTableRowListFillRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListFillRequest) ProtoMessage() {}
func (*RpcBlockTableRowListFillRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 0}
}
func (m *RpcBlockTableRowListFillRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50526,7 +52155,7 @@ func (m *RpcBlockTableRowListFillResponse) Reset() { *m = RpcBlockTableR
func (m *RpcBlockTableRowListFillResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListFillResponse) ProtoMessage() {}
func (*RpcBlockTableRowListFillResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 1}
}
func (m *RpcBlockTableRowListFillResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50578,7 +52207,7 @@ func (m *RpcBlockTableRowListFillResponseError) Reset() { *m = RpcBlockT
func (m *RpcBlockTableRowListFillResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListFillResponseError) ProtoMessage() {}
func (*RpcBlockTableRowListFillResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 1, 0}
}
func (m *RpcBlockTableRowListFillResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50628,7 +52257,7 @@ func (m *RpcBlockTableRowListClean) Reset() { *m = RpcBlockTableRowListC
func (m *RpcBlockTableRowListClean) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListClean) ProtoMessage() {}
func (*RpcBlockTableRowListClean) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 4}
}
func (m *RpcBlockTableRowListClean) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50666,7 +52295,7 @@ func (m *RpcBlockTableRowListCleanRequest) Reset() { *m = RpcBlockTableR
func (m *RpcBlockTableRowListCleanRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListCleanRequest) ProtoMessage() {}
func (*RpcBlockTableRowListCleanRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 4, 0}
}
func (m *RpcBlockTableRowListCleanRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50718,7 +52347,7 @@ func (m *RpcBlockTableRowListCleanResponse) Reset() { *m = RpcBlockTable
func (m *RpcBlockTableRowListCleanResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListCleanResponse) ProtoMessage() {}
func (*RpcBlockTableRowListCleanResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 4, 1}
}
func (m *RpcBlockTableRowListCleanResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50772,7 +52401,7 @@ func (m *RpcBlockTableRowListCleanResponseError) Reset() {
func (m *RpcBlockTableRowListCleanResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowListCleanResponseError) ProtoMessage() {}
func (*RpcBlockTableRowListCleanResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 4, 1, 0}
}
func (m *RpcBlockTableRowListCleanResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50822,7 +52451,7 @@ func (m *RpcBlockTableColumnListFill) Reset() { *m = RpcBlockTableColumn
func (m *RpcBlockTableColumnListFill) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnListFill) ProtoMessage() {}
func (*RpcBlockTableColumnListFill) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 5}
}
func (m *RpcBlockTableColumnListFill) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50860,7 +52489,7 @@ func (m *RpcBlockTableColumnListFillRequest) Reset() { *m = RpcBlockTabl
func (m *RpcBlockTableColumnListFillRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnListFillRequest) ProtoMessage() {}
func (*RpcBlockTableColumnListFillRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 5, 0}
}
func (m *RpcBlockTableColumnListFillRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50912,7 +52541,7 @@ func (m *RpcBlockTableColumnListFillResponse) Reset() { *m = RpcBlockTab
func (m *RpcBlockTableColumnListFillResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnListFillResponse) ProtoMessage() {}
func (*RpcBlockTableColumnListFillResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 5, 1}
}
func (m *RpcBlockTableColumnListFillResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -50966,7 +52595,7 @@ func (m *RpcBlockTableColumnListFillResponseError) Reset() {
func (m *RpcBlockTableColumnListFillResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnListFillResponseError) ProtoMessage() {}
func (*RpcBlockTableColumnListFillResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 5, 1, 0}
}
func (m *RpcBlockTableColumnListFillResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51016,7 +52645,7 @@ func (m *RpcBlockTableColumnCreate) Reset() { *m = RpcBlockTableColumnCr
func (m *RpcBlockTableColumnCreate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnCreate) ProtoMessage() {}
func (*RpcBlockTableColumnCreate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 6}
}
func (m *RpcBlockTableColumnCreate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51055,7 +52684,7 @@ func (m *RpcBlockTableColumnCreateRequest) Reset() { *m = RpcBlockTableC
func (m *RpcBlockTableColumnCreateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnCreateRequest) ProtoMessage() {}
func (*RpcBlockTableColumnCreateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 6, 0}
}
func (m *RpcBlockTableColumnCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51114,7 +52743,7 @@ func (m *RpcBlockTableColumnCreateResponse) Reset() { *m = RpcBlockTable
func (m *RpcBlockTableColumnCreateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnCreateResponse) ProtoMessage() {}
func (*RpcBlockTableColumnCreateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 6, 1}
}
func (m *RpcBlockTableColumnCreateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51168,7 +52797,7 @@ func (m *RpcBlockTableColumnCreateResponseError) Reset() {
func (m *RpcBlockTableColumnCreateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnCreateResponseError) ProtoMessage() {}
func (*RpcBlockTableColumnCreateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 6, 1, 0}
}
func (m *RpcBlockTableColumnCreateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51218,7 +52847,7 @@ func (m *RpcBlockTableRowDelete) Reset() { *m = RpcBlockTableRowDelete{}
func (m *RpcBlockTableRowDelete) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDelete) ProtoMessage() {}
func (*RpcBlockTableRowDelete) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 7}
}
func (m *RpcBlockTableRowDelete) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51256,7 +52885,7 @@ func (m *RpcBlockTableRowDeleteRequest) Reset() { *m = RpcBlockTableRowD
func (m *RpcBlockTableRowDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDeleteRequest) ProtoMessage() {}
func (*RpcBlockTableRowDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 7, 0}
}
func (m *RpcBlockTableRowDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51308,7 +52937,7 @@ func (m *RpcBlockTableRowDeleteResponse) Reset() { *m = RpcBlockTableRow
func (m *RpcBlockTableRowDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDeleteResponse) ProtoMessage() {}
func (*RpcBlockTableRowDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 7, 1}
}
func (m *RpcBlockTableRowDeleteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51360,7 +52989,7 @@ func (m *RpcBlockTableRowDeleteResponseError) Reset() { *m = RpcBlockTab
func (m *RpcBlockTableRowDeleteResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDeleteResponseError) ProtoMessage() {}
func (*RpcBlockTableRowDeleteResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 7, 1, 0}
}
func (m *RpcBlockTableRowDeleteResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51410,7 +53039,7 @@ func (m *RpcBlockTableColumnDelete) Reset() { *m = RpcBlockTableColumnDe
func (m *RpcBlockTableColumnDelete) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnDelete) ProtoMessage() {}
func (*RpcBlockTableColumnDelete) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 8}
}
func (m *RpcBlockTableColumnDelete) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51448,7 +53077,7 @@ func (m *RpcBlockTableColumnDeleteRequest) Reset() { *m = RpcBlockTableC
func (m *RpcBlockTableColumnDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnDeleteRequest) ProtoMessage() {}
func (*RpcBlockTableColumnDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 8, 0}
}
func (m *RpcBlockTableColumnDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51500,7 +53129,7 @@ func (m *RpcBlockTableColumnDeleteResponse) Reset() { *m = RpcBlockTable
func (m *RpcBlockTableColumnDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnDeleteResponse) ProtoMessage() {}
func (*RpcBlockTableColumnDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 8, 1}
}
func (m *RpcBlockTableColumnDeleteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51554,7 +53183,7 @@ func (m *RpcBlockTableColumnDeleteResponseError) Reset() {
func (m *RpcBlockTableColumnDeleteResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnDeleteResponseError) ProtoMessage() {}
func (*RpcBlockTableColumnDeleteResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 8, 1, 0}
}
func (m *RpcBlockTableColumnDeleteResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51604,7 +53233,7 @@ func (m *RpcBlockTableColumnMove) Reset() { *m = RpcBlockTableColumnMove
func (m *RpcBlockTableColumnMove) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnMove) ProtoMessage() {}
func (*RpcBlockTableColumnMove) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 9}
}
func (m *RpcBlockTableColumnMove) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51644,7 +53273,7 @@ func (m *RpcBlockTableColumnMoveRequest) Reset() { *m = RpcBlockTableCol
func (m *RpcBlockTableColumnMoveRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnMoveRequest) ProtoMessage() {}
func (*RpcBlockTableColumnMoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 9, 0}
}
func (m *RpcBlockTableColumnMoveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51710,7 +53339,7 @@ func (m *RpcBlockTableColumnMoveResponse) Reset() { *m = RpcBlockTableCo
func (m *RpcBlockTableColumnMoveResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnMoveResponse) ProtoMessage() {}
func (*RpcBlockTableColumnMoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 9, 1}
}
func (m *RpcBlockTableColumnMoveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51762,7 +53391,7 @@ func (m *RpcBlockTableColumnMoveResponseError) Reset() { *m = RpcBlockTa
func (m *RpcBlockTableColumnMoveResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnMoveResponseError) ProtoMessage() {}
func (*RpcBlockTableColumnMoveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 9, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 9, 1, 0}
}
func (m *RpcBlockTableColumnMoveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51812,7 +53441,7 @@ func (m *RpcBlockTableRowDuplicate) Reset() { *m = RpcBlockTableRowDupli
func (m *RpcBlockTableRowDuplicate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDuplicate) ProtoMessage() {}
func (*RpcBlockTableRowDuplicate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 10}
}
func (m *RpcBlockTableRowDuplicate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51852,7 +53481,7 @@ func (m *RpcBlockTableRowDuplicateRequest) Reset() { *m = RpcBlockTableR
func (m *RpcBlockTableRowDuplicateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDuplicateRequest) ProtoMessage() {}
func (*RpcBlockTableRowDuplicateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 10, 0}
}
func (m *RpcBlockTableRowDuplicateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51918,7 +53547,7 @@ func (m *RpcBlockTableRowDuplicateResponse) Reset() { *m = RpcBlockTable
func (m *RpcBlockTableRowDuplicateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDuplicateResponse) ProtoMessage() {}
func (*RpcBlockTableRowDuplicateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 10, 1}
}
func (m *RpcBlockTableRowDuplicateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -51972,7 +53601,7 @@ func (m *RpcBlockTableRowDuplicateResponseError) Reset() {
func (m *RpcBlockTableRowDuplicateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableRowDuplicateResponseError) ProtoMessage() {}
func (*RpcBlockTableRowDuplicateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 10, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 10, 1, 0}
}
func (m *RpcBlockTableRowDuplicateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52022,7 +53651,7 @@ func (m *RpcBlockTableColumnDuplicate) Reset() { *m = RpcBlockTableColum
func (m *RpcBlockTableColumnDuplicate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnDuplicate) ProtoMessage() {}
func (*RpcBlockTableColumnDuplicate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 11}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 11}
}
func (m *RpcBlockTableColumnDuplicate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52062,7 +53691,7 @@ func (m *RpcBlockTableColumnDuplicateRequest) Reset() { *m = RpcBlockTab
func (m *RpcBlockTableColumnDuplicateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnDuplicateRequest) ProtoMessage() {}
func (*RpcBlockTableColumnDuplicateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 11, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 11, 0}
}
func (m *RpcBlockTableColumnDuplicateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52129,7 +53758,7 @@ func (m *RpcBlockTableColumnDuplicateResponse) Reset() { *m = RpcBlockTa
func (m *RpcBlockTableColumnDuplicateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableColumnDuplicateResponse) ProtoMessage() {}
func (*RpcBlockTableColumnDuplicateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 11, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 11, 1}
}
func (m *RpcBlockTableColumnDuplicateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52192,7 +53821,7 @@ func (m *RpcBlockTableColumnDuplicateResponseError) String() string {
}
func (*RpcBlockTableColumnDuplicateResponseError) ProtoMessage() {}
func (*RpcBlockTableColumnDuplicateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 11, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 11, 1, 0}
}
func (m *RpcBlockTableColumnDuplicateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52242,7 +53871,7 @@ func (m *RpcBlockTableExpand) Reset() { *m = RpcBlockTableExpand{} }
func (m *RpcBlockTableExpand) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableExpand) ProtoMessage() {}
func (*RpcBlockTableExpand) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 12}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 12}
}
func (m *RpcBlockTableExpand) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52282,7 +53911,7 @@ func (m *RpcBlockTableExpandRequest) Reset() { *m = RpcBlockTableExpandR
func (m *RpcBlockTableExpandRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableExpandRequest) ProtoMessage() {}
func (*RpcBlockTableExpandRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 12, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 12, 0}
}
func (m *RpcBlockTableExpandRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52348,7 +53977,7 @@ func (m *RpcBlockTableExpandResponse) Reset() { *m = RpcBlockTableExpand
func (m *RpcBlockTableExpandResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableExpandResponse) ProtoMessage() {}
func (*RpcBlockTableExpandResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 12, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 12, 1}
}
func (m *RpcBlockTableExpandResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52400,7 +54029,7 @@ func (m *RpcBlockTableExpandResponseError) Reset() { *m = RpcBlockTableE
func (m *RpcBlockTableExpandResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableExpandResponseError) ProtoMessage() {}
func (*RpcBlockTableExpandResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 12, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 12, 1, 0}
}
func (m *RpcBlockTableExpandResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52450,7 +54079,7 @@ func (m *RpcBlockTableSort) Reset() { *m = RpcBlockTableSort{} }
func (m *RpcBlockTableSort) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableSort) ProtoMessage() {}
func (*RpcBlockTableSort) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 13}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 13}
}
func (m *RpcBlockTableSort) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52489,7 +54118,7 @@ func (m *RpcBlockTableSortRequest) Reset() { *m = RpcBlockTableSortReque
func (m *RpcBlockTableSortRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableSortRequest) ProtoMessage() {}
func (*RpcBlockTableSortRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 13, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 13, 0}
}
func (m *RpcBlockTableSortRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52548,7 +54177,7 @@ func (m *RpcBlockTableSortResponse) Reset() { *m = RpcBlockTableSortResp
func (m *RpcBlockTableSortResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableSortResponse) ProtoMessage() {}
func (*RpcBlockTableSortResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 13, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 13, 1}
}
func (m *RpcBlockTableSortResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52600,7 +54229,7 @@ func (m *RpcBlockTableSortResponseError) Reset() { *m = RpcBlockTableSor
func (m *RpcBlockTableSortResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockTableSortResponseError) ProtoMessage() {}
func (*RpcBlockTableSortResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 21, 13, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 13, 1, 0}
}
func (m *RpcBlockTableSortResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52650,7 +54279,7 @@ func (m *RpcBlockFile) Reset() { *m = RpcBlockFile{} }
func (m *RpcBlockFile) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFile) ProtoMessage() {}
func (*RpcBlockFile) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23}
}
func (m *RpcBlockFile) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52686,7 +54315,7 @@ func (m *RpcBlockFileSetName) Reset() { *m = RpcBlockFileSetName{} }
func (m *RpcBlockFileSetName) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileSetName) ProtoMessage() {}
func (*RpcBlockFileSetName) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0}
}
func (m *RpcBlockFileSetName) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52725,7 +54354,7 @@ func (m *RpcBlockFileSetNameRequest) Reset() { *m = RpcBlockFileSetNameR
func (m *RpcBlockFileSetNameRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileSetNameRequest) ProtoMessage() {}
func (*RpcBlockFileSetNameRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 0}
}
func (m *RpcBlockFileSetNameRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52784,7 +54413,7 @@ func (m *RpcBlockFileSetNameResponse) Reset() { *m = RpcBlockFileSetName
func (m *RpcBlockFileSetNameResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileSetNameResponse) ProtoMessage() {}
func (*RpcBlockFileSetNameResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 1}
}
func (m *RpcBlockFileSetNameResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52836,7 +54465,7 @@ func (m *RpcBlockFileSetNameResponseError) Reset() { *m = RpcBlockFileSe
func (m *RpcBlockFileSetNameResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileSetNameResponseError) ProtoMessage() {}
func (*RpcBlockFileSetNameResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 1, 0}
}
func (m *RpcBlockFileSetNameResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52886,7 +54515,7 @@ func (m *RpcBlockFileSetTargetObjectId) Reset() { *m = RpcBlockFileSetTa
func (m *RpcBlockFileSetTargetObjectId) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileSetTargetObjectId) ProtoMessage() {}
func (*RpcBlockFileSetTargetObjectId) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1}
}
func (m *RpcBlockFileSetTargetObjectId) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52925,7 +54554,7 @@ func (m *RpcBlockFileSetTargetObjectIdRequest) Reset() { *m = RpcBlockFi
func (m *RpcBlockFileSetTargetObjectIdRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileSetTargetObjectIdRequest) ProtoMessage() {}
func (*RpcBlockFileSetTargetObjectIdRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 0}
}
func (m *RpcBlockFileSetTargetObjectIdRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -52984,7 +54613,7 @@ func (m *RpcBlockFileSetTargetObjectIdResponse) Reset() { *m = RpcBlockF
func (m *RpcBlockFileSetTargetObjectIdResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileSetTargetObjectIdResponse) ProtoMessage() {}
func (*RpcBlockFileSetTargetObjectIdResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 1}
}
func (m *RpcBlockFileSetTargetObjectIdResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53040,7 +54669,7 @@ func (m *RpcBlockFileSetTargetObjectIdResponseError) String() string {
}
func (*RpcBlockFileSetTargetObjectIdResponseError) ProtoMessage() {}
func (*RpcBlockFileSetTargetObjectIdResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 1, 0}
}
func (m *RpcBlockFileSetTargetObjectIdResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53090,7 +54719,7 @@ func (m *RpcBlockFileCreateAndUpload) Reset() { *m = RpcBlockFileCreateA
func (m *RpcBlockFileCreateAndUpload) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileCreateAndUpload) ProtoMessage() {}
func (*RpcBlockFileCreateAndUpload) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 2}
}
func (m *RpcBlockFileCreateAndUpload) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53133,7 +54762,7 @@ func (m *RpcBlockFileCreateAndUploadRequest) Reset() { *m = RpcBlockFile
func (m *RpcBlockFileCreateAndUploadRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileCreateAndUploadRequest) ProtoMessage() {}
func (*RpcBlockFileCreateAndUploadRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 2, 0}
}
func (m *RpcBlockFileCreateAndUploadRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53221,7 +54850,7 @@ func (m *RpcBlockFileCreateAndUploadResponse) Reset() { *m = RpcBlockFil
func (m *RpcBlockFileCreateAndUploadResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileCreateAndUploadResponse) ProtoMessage() {}
func (*RpcBlockFileCreateAndUploadResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 2, 1}
}
func (m *RpcBlockFileCreateAndUploadResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53282,7 +54911,7 @@ func (m *RpcBlockFileCreateAndUploadResponseError) Reset() {
func (m *RpcBlockFileCreateAndUploadResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileCreateAndUploadResponseError) ProtoMessage() {}
func (*RpcBlockFileCreateAndUploadResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 2, 1, 0}
}
func (m *RpcBlockFileCreateAndUploadResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53332,7 +54961,7 @@ func (m *RpcBlockFileListSetStyle) Reset() { *m = RpcBlockFileListSetSty
func (m *RpcBlockFileListSetStyle) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileListSetStyle) ProtoMessage() {}
func (*RpcBlockFileListSetStyle) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 3}
}
func (m *RpcBlockFileListSetStyle) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53371,7 +55000,7 @@ func (m *RpcBlockFileListSetStyleRequest) Reset() { *m = RpcBlockFileLis
func (m *RpcBlockFileListSetStyleRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileListSetStyleRequest) ProtoMessage() {}
func (*RpcBlockFileListSetStyleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 3, 0}
}
func (m *RpcBlockFileListSetStyleRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53430,7 +55059,7 @@ func (m *RpcBlockFileListSetStyleResponse) Reset() { *m = RpcBlockFileLi
func (m *RpcBlockFileListSetStyleResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileListSetStyleResponse) ProtoMessage() {}
func (*RpcBlockFileListSetStyleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 3, 1}
}
func (m *RpcBlockFileListSetStyleResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53482,7 +55111,7 @@ func (m *RpcBlockFileListSetStyleResponseError) Reset() { *m = RpcBlockF
func (m *RpcBlockFileListSetStyleResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockFileListSetStyleResponseError) ProtoMessage() {}
func (*RpcBlockFileListSetStyleResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 22, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 3, 1, 0}
}
func (m *RpcBlockFileListSetStyleResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53532,7 +55161,7 @@ func (m *RpcBlockImage) Reset() { *m = RpcBlockImage{} }
func (m *RpcBlockImage) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImage) ProtoMessage() {}
func (*RpcBlockImage) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24}
}
func (m *RpcBlockImage) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53568,7 +55197,7 @@ func (m *RpcBlockImageSetName) Reset() { *m = RpcBlockImageSetName{} }
func (m *RpcBlockImageSetName) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetName) ProtoMessage() {}
func (*RpcBlockImageSetName) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0}
}
func (m *RpcBlockImageSetName) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53607,7 +55236,7 @@ func (m *RpcBlockImageSetNameRequest) Reset() { *m = RpcBlockImageSetNam
func (m *RpcBlockImageSetNameRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetNameRequest) ProtoMessage() {}
func (*RpcBlockImageSetNameRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 0}
}
func (m *RpcBlockImageSetNameRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53665,7 +55294,7 @@ func (m *RpcBlockImageSetNameResponse) Reset() { *m = RpcBlockImageSetNa
func (m *RpcBlockImageSetNameResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetNameResponse) ProtoMessage() {}
func (*RpcBlockImageSetNameResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 1}
}
func (m *RpcBlockImageSetNameResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53710,7 +55339,7 @@ func (m *RpcBlockImageSetNameResponseError) Reset() { *m = RpcBlockImage
func (m *RpcBlockImageSetNameResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetNameResponseError) ProtoMessage() {}
func (*RpcBlockImageSetNameResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 1, 0}
}
func (m *RpcBlockImageSetNameResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53760,7 +55389,7 @@ func (m *RpcBlockImageSetWidth) Reset() { *m = RpcBlockImageSetWidth{} }
func (m *RpcBlockImageSetWidth) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetWidth) ProtoMessage() {}
func (*RpcBlockImageSetWidth) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1}
}
func (m *RpcBlockImageSetWidth) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53799,7 +55428,7 @@ func (m *RpcBlockImageSetWidthRequest) Reset() { *m = RpcBlockImageSetWi
func (m *RpcBlockImageSetWidthRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetWidthRequest) ProtoMessage() {}
func (*RpcBlockImageSetWidthRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 0}
}
func (m *RpcBlockImageSetWidthRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53857,7 +55486,7 @@ func (m *RpcBlockImageSetWidthResponse) Reset() { *m = RpcBlockImageSetW
func (m *RpcBlockImageSetWidthResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetWidthResponse) ProtoMessage() {}
func (*RpcBlockImageSetWidthResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 1}
}
func (m *RpcBlockImageSetWidthResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53902,7 +55531,7 @@ func (m *RpcBlockImageSetWidthResponseError) Reset() { *m = RpcBlockImag
func (m *RpcBlockImageSetWidthResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockImageSetWidthResponseError) ProtoMessage() {}
func (*RpcBlockImageSetWidthResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 23, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 1, 0}
}
func (m *RpcBlockImageSetWidthResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53952,7 +55581,7 @@ func (m *RpcBlockVideo) Reset() { *m = RpcBlockVideo{} }
func (m *RpcBlockVideo) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideo) ProtoMessage() {}
func (*RpcBlockVideo) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25}
}
func (m *RpcBlockVideo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -53988,7 +55617,7 @@ func (m *RpcBlockVideoSetName) Reset() { *m = RpcBlockVideoSetName{} }
func (m *RpcBlockVideoSetName) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetName) ProtoMessage() {}
func (*RpcBlockVideoSetName) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0}
}
func (m *RpcBlockVideoSetName) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54027,7 +55656,7 @@ func (m *RpcBlockVideoSetNameRequest) Reset() { *m = RpcBlockVideoSetNam
func (m *RpcBlockVideoSetNameRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetNameRequest) ProtoMessage() {}
func (*RpcBlockVideoSetNameRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 0}
}
func (m *RpcBlockVideoSetNameRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54085,7 +55714,7 @@ func (m *RpcBlockVideoSetNameResponse) Reset() { *m = RpcBlockVideoSetNa
func (m *RpcBlockVideoSetNameResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetNameResponse) ProtoMessage() {}
func (*RpcBlockVideoSetNameResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 1}
}
func (m *RpcBlockVideoSetNameResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54130,7 +55759,7 @@ func (m *RpcBlockVideoSetNameResponseError) Reset() { *m = RpcBlockVideo
func (m *RpcBlockVideoSetNameResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetNameResponseError) ProtoMessage() {}
func (*RpcBlockVideoSetNameResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 1, 0}
}
func (m *RpcBlockVideoSetNameResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54180,7 +55809,7 @@ func (m *RpcBlockVideoSetWidth) Reset() { *m = RpcBlockVideoSetWidth{} }
func (m *RpcBlockVideoSetWidth) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetWidth) ProtoMessage() {}
func (*RpcBlockVideoSetWidth) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1}
}
func (m *RpcBlockVideoSetWidth) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54219,7 +55848,7 @@ func (m *RpcBlockVideoSetWidthRequest) Reset() { *m = RpcBlockVideoSetWi
func (m *RpcBlockVideoSetWidthRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetWidthRequest) ProtoMessage() {}
func (*RpcBlockVideoSetWidthRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 0}
}
func (m *RpcBlockVideoSetWidthRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54277,7 +55906,7 @@ func (m *RpcBlockVideoSetWidthResponse) Reset() { *m = RpcBlockVideoSetW
func (m *RpcBlockVideoSetWidthResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetWidthResponse) ProtoMessage() {}
func (*RpcBlockVideoSetWidthResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 1}
}
func (m *RpcBlockVideoSetWidthResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54322,7 +55951,7 @@ func (m *RpcBlockVideoSetWidthResponseError) Reset() { *m = RpcBlockVide
func (m *RpcBlockVideoSetWidthResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockVideoSetWidthResponseError) ProtoMessage() {}
func (*RpcBlockVideoSetWidthResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 24, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 1, 0}
}
func (m *RpcBlockVideoSetWidthResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54372,7 +56001,7 @@ func (m *RpcBlockLink) Reset() { *m = RpcBlockLink{} }
func (m *RpcBlockLink) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLink) ProtoMessage() {}
func (*RpcBlockLink) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26}
}
func (m *RpcBlockLink) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54408,7 +56037,7 @@ func (m *RpcBlockLinkCreateWithObject) Reset() { *m = RpcBlockLinkCreate
func (m *RpcBlockLinkCreateWithObject) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLinkCreateWithObject) ProtoMessage() {}
func (*RpcBlockLinkCreateWithObject) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0}
}
func (m *RpcBlockLinkCreateWithObject) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54455,7 +56084,7 @@ func (m *RpcBlockLinkCreateWithObjectRequest) Reset() { *m = RpcBlockLin
func (m *RpcBlockLinkCreateWithObjectRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLinkCreateWithObjectRequest) ProtoMessage() {}
func (*RpcBlockLinkCreateWithObjectRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 0}
}
func (m *RpcBlockLinkCreateWithObjectRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54566,7 +56195,7 @@ func (m *RpcBlockLinkCreateWithObjectResponse) Reset() { *m = RpcBlockLi
func (m *RpcBlockLinkCreateWithObjectResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLinkCreateWithObjectResponse) ProtoMessage() {}
func (*RpcBlockLinkCreateWithObjectResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 1}
}
func (m *RpcBlockLinkCreateWithObjectResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54643,7 +56272,7 @@ func (m *RpcBlockLinkCreateWithObjectResponseError) String() string {
}
func (*RpcBlockLinkCreateWithObjectResponseError) ProtoMessage() {}
func (*RpcBlockLinkCreateWithObjectResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 1, 0}
}
func (m *RpcBlockLinkCreateWithObjectResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54693,7 +56322,7 @@ func (m *RpcBlockLinkListSetAppearance) Reset() { *m = RpcBlockLinkListS
func (m *RpcBlockLinkListSetAppearance) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLinkListSetAppearance) ProtoMessage() {}
func (*RpcBlockLinkListSetAppearance) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1}
}
func (m *RpcBlockLinkListSetAppearance) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54735,7 +56364,7 @@ func (m *RpcBlockLinkListSetAppearanceRequest) Reset() { *m = RpcBlockLi
func (m *RpcBlockLinkListSetAppearanceRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLinkListSetAppearanceRequest) ProtoMessage() {}
func (*RpcBlockLinkListSetAppearanceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 0}
}
func (m *RpcBlockLinkListSetAppearanceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54815,7 +56444,7 @@ func (m *RpcBlockLinkListSetAppearanceResponse) Reset() { *m = RpcBlockL
func (m *RpcBlockLinkListSetAppearanceResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockLinkListSetAppearanceResponse) ProtoMessage() {}
func (*RpcBlockLinkListSetAppearanceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 1}
}
func (m *RpcBlockLinkListSetAppearanceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54871,7 +56500,7 @@ func (m *RpcBlockLinkListSetAppearanceResponseError) String() string {
}
func (*RpcBlockLinkListSetAppearanceResponseError) ProtoMessage() {}
func (*RpcBlockLinkListSetAppearanceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 25, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 1, 0}
}
func (m *RpcBlockLinkListSetAppearanceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54921,7 +56550,7 @@ func (m *RpcBlockRelation) Reset() { *m = RpcBlockRelation{} }
func (m *RpcBlockRelation) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelation) ProtoMessage() {}
func (*RpcBlockRelation) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27}
}
func (m *RpcBlockRelation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54957,7 +56586,7 @@ func (m *RpcBlockRelationSetKey) Reset() { *m = RpcBlockRelationSetKey{}
func (m *RpcBlockRelationSetKey) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationSetKey) ProtoMessage() {}
func (*RpcBlockRelationSetKey) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0}
}
func (m *RpcBlockRelationSetKey) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -54996,7 +56625,7 @@ func (m *RpcBlockRelationSetKeyRequest) Reset() { *m = RpcBlockRelationS
func (m *RpcBlockRelationSetKeyRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationSetKeyRequest) ProtoMessage() {}
func (*RpcBlockRelationSetKeyRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 0}
}
func (m *RpcBlockRelationSetKeyRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55055,7 +56684,7 @@ func (m *RpcBlockRelationSetKeyResponse) Reset() { *m = RpcBlockRelation
func (m *RpcBlockRelationSetKeyResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationSetKeyResponse) ProtoMessage() {}
func (*RpcBlockRelationSetKeyResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 1}
}
func (m *RpcBlockRelationSetKeyResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55107,7 +56736,7 @@ func (m *RpcBlockRelationSetKeyResponseError) Reset() { *m = RpcBlockRel
func (m *RpcBlockRelationSetKeyResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationSetKeyResponseError) ProtoMessage() {}
func (*RpcBlockRelationSetKeyResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 1, 0}
}
func (m *RpcBlockRelationSetKeyResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55157,7 +56786,7 @@ func (m *RpcBlockRelationAdd) Reset() { *m = RpcBlockRelationAdd{} }
func (m *RpcBlockRelationAdd) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationAdd) ProtoMessage() {}
func (*RpcBlockRelationAdd) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1}
}
func (m *RpcBlockRelationAdd) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55196,7 +56825,7 @@ func (m *RpcBlockRelationAddRequest) Reset() { *m = RpcBlockRelationAddR
func (m *RpcBlockRelationAddRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationAddRequest) ProtoMessage() {}
func (*RpcBlockRelationAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 0}
}
func (m *RpcBlockRelationAddRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55255,7 +56884,7 @@ func (m *RpcBlockRelationAddResponse) Reset() { *m = RpcBlockRelationAdd
func (m *RpcBlockRelationAddResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationAddResponse) ProtoMessage() {}
func (*RpcBlockRelationAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 1}
}
func (m *RpcBlockRelationAddResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55307,7 +56936,7 @@ func (m *RpcBlockRelationAddResponseError) Reset() { *m = RpcBlockRelati
func (m *RpcBlockRelationAddResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockRelationAddResponseError) ProtoMessage() {}
func (*RpcBlockRelationAddResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 26, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 1, 0}
}
func (m *RpcBlockRelationAddResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55357,7 +56986,7 @@ func (m *RpcBlockBookmark) Reset() { *m = RpcBlockBookmark{} }
func (m *RpcBlockBookmark) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmark) ProtoMessage() {}
func (*RpcBlockBookmark) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28}
}
func (m *RpcBlockBookmark) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55393,7 +57022,7 @@ func (m *RpcBlockBookmarkFetch) Reset() { *m = RpcBlockBookmarkFetch{} }
func (m *RpcBlockBookmarkFetch) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmarkFetch) ProtoMessage() {}
func (*RpcBlockBookmarkFetch) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0}
}
func (m *RpcBlockBookmarkFetch) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55433,7 +57062,7 @@ func (m *RpcBlockBookmarkFetchRequest) Reset() { *m = RpcBlockBookmarkFe
func (m *RpcBlockBookmarkFetchRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmarkFetchRequest) ProtoMessage() {}
func (*RpcBlockBookmarkFetchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 0}
}
func (m *RpcBlockBookmarkFetchRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55499,7 +57128,7 @@ func (m *RpcBlockBookmarkFetchResponse) Reset() { *m = RpcBlockBookmarkF
func (m *RpcBlockBookmarkFetchResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmarkFetchResponse) ProtoMessage() {}
func (*RpcBlockBookmarkFetchResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 1}
}
func (m *RpcBlockBookmarkFetchResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55551,7 +57180,7 @@ func (m *RpcBlockBookmarkFetchResponseError) Reset() { *m = RpcBlockBook
func (m *RpcBlockBookmarkFetchResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmarkFetchResponseError) ProtoMessage() {}
func (*RpcBlockBookmarkFetchResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 1, 0}
}
func (m *RpcBlockBookmarkFetchResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55601,7 +57230,7 @@ func (m *RpcBlockBookmarkCreateAndFetch) Reset() { *m = RpcBlockBookmark
func (m *RpcBlockBookmarkCreateAndFetch) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmarkCreateAndFetch) ProtoMessage() {}
func (*RpcBlockBookmarkCreateAndFetch) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 1}
}
func (m *RpcBlockBookmarkCreateAndFetch) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55642,7 +57271,7 @@ func (m *RpcBlockBookmarkCreateAndFetchRequest) Reset() { *m = RpcBlockB
func (m *RpcBlockBookmarkCreateAndFetchRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmarkCreateAndFetchRequest) ProtoMessage() {}
func (*RpcBlockBookmarkCreateAndFetchRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 1, 0}
}
func (m *RpcBlockBookmarkCreateAndFetchRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55718,7 +57347,7 @@ func (m *RpcBlockBookmarkCreateAndFetchResponse) Reset() {
func (m *RpcBlockBookmarkCreateAndFetchResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockBookmarkCreateAndFetchResponse) ProtoMessage() {}
func (*RpcBlockBookmarkCreateAndFetchResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 1, 1}
}
func (m *RpcBlockBookmarkCreateAndFetchResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55781,7 +57410,7 @@ func (m *RpcBlockBookmarkCreateAndFetchResponseError) String() string {
}
func (*RpcBlockBookmarkCreateAndFetchResponseError) ProtoMessage() {}
func (*RpcBlockBookmarkCreateAndFetchResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 27, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 1, 1, 0}
}
func (m *RpcBlockBookmarkCreateAndFetchResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55831,7 +57460,7 @@ func (m *RpcBlockDiv) Reset() { *m = RpcBlockDiv{} }
func (m *RpcBlockDiv) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDiv) ProtoMessage() {}
func (*RpcBlockDiv) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 28}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 29}
}
func (m *RpcBlockDiv) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55867,7 +57496,7 @@ func (m *RpcBlockDivListSetStyle) Reset() { *m = RpcBlockDivListSetStyle
func (m *RpcBlockDivListSetStyle) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDivListSetStyle) ProtoMessage() {}
func (*RpcBlockDivListSetStyle) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0}
}
func (m *RpcBlockDivListSetStyle) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55906,7 +57535,7 @@ func (m *RpcBlockDivListSetStyleRequest) Reset() { *m = RpcBlockDivListS
func (m *RpcBlockDivListSetStyleRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDivListSetStyleRequest) ProtoMessage() {}
func (*RpcBlockDivListSetStyleRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 0}
}
func (m *RpcBlockDivListSetStyleRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -55965,7 +57594,7 @@ func (m *RpcBlockDivListSetStyleResponse) Reset() { *m = RpcBlockDivList
func (m *RpcBlockDivListSetStyleResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDivListSetStyleResponse) ProtoMessage() {}
func (*RpcBlockDivListSetStyleResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1}
}
func (m *RpcBlockDivListSetStyleResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56017,7 +57646,7 @@ func (m *RpcBlockDivListSetStyleResponseError) Reset() { *m = RpcBlockDi
func (m *RpcBlockDivListSetStyleResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDivListSetStyleResponseError) ProtoMessage() {}
func (*RpcBlockDivListSetStyleResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 28, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1, 0}
}
func (m *RpcBlockDivListSetStyleResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56067,7 +57696,7 @@ func (m *RpcBlockDataview) Reset() { *m = RpcBlockDataview{} }
func (m *RpcBlockDataview) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataview) ProtoMessage() {}
func (*RpcBlockDataview) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30}
}
func (m *RpcBlockDataview) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56103,7 +57732,7 @@ func (m *RpcBlockDataviewView) Reset() { *m = RpcBlockDataviewView{} }
func (m *RpcBlockDataviewView) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewView) ProtoMessage() {}
func (*RpcBlockDataviewView) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0}
}
func (m *RpcBlockDataviewView) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56139,7 +57768,7 @@ func (m *RpcBlockDataviewViewCreate) Reset() { *m = RpcBlockDataviewView
func (m *RpcBlockDataviewViewCreate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewCreate) ProtoMessage() {}
func (*RpcBlockDataviewViewCreate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 0}
}
func (m *RpcBlockDataviewViewCreate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56179,7 +57808,7 @@ func (m *RpcBlockDataviewViewCreateRequest) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewViewCreateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewCreateRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewCreateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 0, 0}
}
func (m *RpcBlockDataviewViewCreateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56246,7 +57875,7 @@ func (m *RpcBlockDataviewViewCreateResponse) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewViewCreateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewCreateResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewCreateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 0, 1}
}
func (m *RpcBlockDataviewViewCreateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56307,7 +57936,7 @@ func (m *RpcBlockDataviewViewCreateResponseError) Reset() {
func (m *RpcBlockDataviewViewCreateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewCreateResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewCreateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 0, 1, 0}
}
func (m *RpcBlockDataviewViewCreateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56357,7 +57986,7 @@ func (m *RpcBlockDataviewViewUpdate) Reset() { *m = RpcBlockDataviewView
func (m *RpcBlockDataviewViewUpdate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewUpdate) ProtoMessage() {}
func (*RpcBlockDataviewViewUpdate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1}
}
func (m *RpcBlockDataviewViewUpdate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56397,7 +58026,7 @@ func (m *RpcBlockDataviewViewUpdateRequest) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewViewUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewUpdateRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewUpdateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1, 0}
}
func (m *RpcBlockDataviewViewUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56463,7 +58092,7 @@ func (m *RpcBlockDataviewViewUpdateResponse) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewViewUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewUpdateResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewUpdateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1, 1}
}
func (m *RpcBlockDataviewViewUpdateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56517,7 +58146,7 @@ func (m *RpcBlockDataviewViewUpdateResponseError) Reset() {
func (m *RpcBlockDataviewViewUpdateResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewUpdateResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewUpdateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1, 1, 0}
}
func (m *RpcBlockDataviewViewUpdateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56567,7 +58196,7 @@ func (m *RpcBlockDataviewViewDelete) Reset() { *m = RpcBlockDataviewView
func (m *RpcBlockDataviewViewDelete) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewDelete) ProtoMessage() {}
func (*RpcBlockDataviewViewDelete) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 2}
}
func (m *RpcBlockDataviewViewDelete) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56606,7 +58235,7 @@ func (m *RpcBlockDataviewViewDeleteRequest) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewViewDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewDeleteRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 2, 0}
}
func (m *RpcBlockDataviewViewDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56665,7 +58294,7 @@ func (m *RpcBlockDataviewViewDeleteResponse) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewViewDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewDeleteResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 2, 1}
}
func (m *RpcBlockDataviewViewDeleteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56719,7 +58348,7 @@ func (m *RpcBlockDataviewViewDeleteResponseError) Reset() {
func (m *RpcBlockDataviewViewDeleteResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewDeleteResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewDeleteResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 2, 1, 0}
}
func (m *RpcBlockDataviewViewDeleteResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56769,7 +58398,7 @@ func (m *RpcBlockDataviewViewSetPosition) Reset() { *m = RpcBlockDatavie
func (m *RpcBlockDataviewViewSetPosition) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewSetPosition) ProtoMessage() {}
func (*RpcBlockDataviewViewSetPosition) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 3}
}
func (m *RpcBlockDataviewViewSetPosition) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56811,7 +58440,7 @@ func (m *RpcBlockDataviewViewSetPositionRequest) Reset() {
func (m *RpcBlockDataviewViewSetPositionRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewSetPositionRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewSetPositionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 3, 0}
}
func (m *RpcBlockDataviewViewSetPositionRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56879,7 +58508,7 @@ func (m *RpcBlockDataviewViewSetPositionResponse) Reset() {
func (m *RpcBlockDataviewViewSetPositionResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewSetPositionResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewSetPositionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 3, 1}
}
func (m *RpcBlockDataviewViewSetPositionResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56935,7 +58564,7 @@ func (m *RpcBlockDataviewViewSetPositionResponseError) String() string {
}
func (*RpcBlockDataviewViewSetPositionResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewSetPositionResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 3, 1, 0}
}
func (m *RpcBlockDataviewViewSetPositionResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -56986,7 +58615,7 @@ func (m *RpcBlockDataviewViewSetActive) Reset() { *m = RpcBlockDataviewV
func (m *RpcBlockDataviewViewSetActive) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewSetActive) ProtoMessage() {}
func (*RpcBlockDataviewViewSetActive) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 4}
}
func (m *RpcBlockDataviewViewSetActive) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57025,7 +58654,7 @@ func (m *RpcBlockDataviewViewSetActiveRequest) Reset() { *m = RpcBlockDa
func (m *RpcBlockDataviewViewSetActiveRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewSetActiveRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewSetActiveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 4, 0}
}
func (m *RpcBlockDataviewViewSetActiveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57084,7 +58713,7 @@ func (m *RpcBlockDataviewViewSetActiveResponse) Reset() { *m = RpcBlockD
func (m *RpcBlockDataviewViewSetActiveResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewSetActiveResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewSetActiveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 4, 1}
}
func (m *RpcBlockDataviewViewSetActiveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57140,7 +58769,7 @@ func (m *RpcBlockDataviewViewSetActiveResponseError) String() string {
}
func (*RpcBlockDataviewViewSetActiveResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewSetActiveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 0, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 4, 1, 0}
}
func (m *RpcBlockDataviewViewSetActiveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57190,7 +58819,7 @@ func (m *RpcBlockDataviewRelation) Reset() { *m = RpcBlockDataviewRelati
func (m *RpcBlockDataviewRelation) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelation) ProtoMessage() {}
func (*RpcBlockDataviewRelation) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1}
}
func (m *RpcBlockDataviewRelation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57219,6 +58848,208 @@ func (m *RpcBlockDataviewRelation) XXX_DiscardUnknown() {
var xxx_messageInfo_RpcBlockDataviewRelation proto.InternalMessageInfo
+type RpcBlockDataviewRelationSet struct {
+}
+
+func (m *RpcBlockDataviewRelationSet) Reset() { *m = RpcBlockDataviewRelationSet{} }
+func (m *RpcBlockDataviewRelationSet) String() string { return proto.CompactTextString(m) }
+func (*RpcBlockDataviewRelationSet) ProtoMessage() {}
+func (*RpcBlockDataviewRelationSet) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 0}
+}
+func (m *RpcBlockDataviewRelationSet) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcBlockDataviewRelationSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcBlockDataviewRelationSet.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcBlockDataviewRelationSet) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcBlockDataviewRelationSet.Merge(m, src)
+}
+func (m *RpcBlockDataviewRelationSet) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcBlockDataviewRelationSet) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcBlockDataviewRelationSet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcBlockDataviewRelationSet proto.InternalMessageInfo
+
+type RpcBlockDataviewRelationSetRequest struct {
+ ContextId string `protobuf:"bytes,1,opt,name=contextId,proto3" json:"contextId,omitempty"`
+ BlockId string `protobuf:"bytes,2,opt,name=blockId,proto3" json:"blockId,omitempty"`
+ RelationKeys []string `protobuf:"bytes,3,rep,name=relationKeys,proto3" json:"relationKeys,omitempty"`
+}
+
+func (m *RpcBlockDataviewRelationSetRequest) Reset() { *m = RpcBlockDataviewRelationSetRequest{} }
+func (m *RpcBlockDataviewRelationSetRequest) String() string { return proto.CompactTextString(m) }
+func (*RpcBlockDataviewRelationSetRequest) ProtoMessage() {}
+func (*RpcBlockDataviewRelationSetRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 0, 0}
+}
+func (m *RpcBlockDataviewRelationSetRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcBlockDataviewRelationSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcBlockDataviewRelationSetRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcBlockDataviewRelationSetRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcBlockDataviewRelationSetRequest.Merge(m, src)
+}
+func (m *RpcBlockDataviewRelationSetRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcBlockDataviewRelationSetRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcBlockDataviewRelationSetRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcBlockDataviewRelationSetRequest proto.InternalMessageInfo
+
+func (m *RpcBlockDataviewRelationSetRequest) GetContextId() string {
+ if m != nil {
+ return m.ContextId
+ }
+ return ""
+}
+
+func (m *RpcBlockDataviewRelationSetRequest) GetBlockId() string {
+ if m != nil {
+ return m.BlockId
+ }
+ return ""
+}
+
+func (m *RpcBlockDataviewRelationSetRequest) GetRelationKeys() []string {
+ if m != nil {
+ return m.RelationKeys
+ }
+ return nil
+}
+
+type RpcBlockDataviewRelationSetResponse struct {
+ Error *RpcBlockDataviewRelationSetResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+ Event *ResponseEvent `protobuf:"bytes,2,opt,name=event,proto3" json:"event,omitempty"`
+}
+
+func (m *RpcBlockDataviewRelationSetResponse) Reset() { *m = RpcBlockDataviewRelationSetResponse{} }
+func (m *RpcBlockDataviewRelationSetResponse) String() string { return proto.CompactTextString(m) }
+func (*RpcBlockDataviewRelationSetResponse) ProtoMessage() {}
+func (*RpcBlockDataviewRelationSetResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 0, 1}
+}
+func (m *RpcBlockDataviewRelationSetResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcBlockDataviewRelationSetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcBlockDataviewRelationSetResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcBlockDataviewRelationSetResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcBlockDataviewRelationSetResponse.Merge(m, src)
+}
+func (m *RpcBlockDataviewRelationSetResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcBlockDataviewRelationSetResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcBlockDataviewRelationSetResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcBlockDataviewRelationSetResponse proto.InternalMessageInfo
+
+func (m *RpcBlockDataviewRelationSetResponse) GetError() *RpcBlockDataviewRelationSetResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+func (m *RpcBlockDataviewRelationSetResponse) GetEvent() *ResponseEvent {
+ if m != nil {
+ return m.Event
+ }
+ return nil
+}
+
+type RpcBlockDataviewRelationSetResponseError struct {
+ Code RpcBlockDataviewRelationSetResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcBlockDataviewRelationSetResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcBlockDataviewRelationSetResponseError) Reset() {
+ *m = RpcBlockDataviewRelationSetResponseError{}
+}
+func (m *RpcBlockDataviewRelationSetResponseError) String() string { return proto.CompactTextString(m) }
+func (*RpcBlockDataviewRelationSetResponseError) ProtoMessage() {}
+func (*RpcBlockDataviewRelationSetResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 0, 1, 0}
+}
+func (m *RpcBlockDataviewRelationSetResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcBlockDataviewRelationSetResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcBlockDataviewRelationSetResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcBlockDataviewRelationSetResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcBlockDataviewRelationSetResponseError.Merge(m, src)
+}
+func (m *RpcBlockDataviewRelationSetResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcBlockDataviewRelationSetResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcBlockDataviewRelationSetResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcBlockDataviewRelationSetResponseError proto.InternalMessageInfo
+
+func (m *RpcBlockDataviewRelationSetResponseError) GetCode() RpcBlockDataviewRelationSetResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcBlockDataviewRelationSetResponseError_NULL
+}
+
+func (m *RpcBlockDataviewRelationSetResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
type RpcBlockDataviewRelationAdd struct {
}
@@ -57226,7 +59057,7 @@ func (m *RpcBlockDataviewRelationAdd) Reset() { *m = RpcBlockDataviewRel
func (m *RpcBlockDataviewRelationAdd) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelationAdd) ProtoMessage() {}
func (*RpcBlockDataviewRelationAdd) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1}
}
func (m *RpcBlockDataviewRelationAdd) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57265,7 +59096,7 @@ func (m *RpcBlockDataviewRelationAddRequest) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewRelationAddRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelationAddRequest) ProtoMessage() {}
func (*RpcBlockDataviewRelationAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1, 0}
}
func (m *RpcBlockDataviewRelationAddRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57324,7 +59155,7 @@ func (m *RpcBlockDataviewRelationAddResponse) Reset() { *m = RpcBlockDat
func (m *RpcBlockDataviewRelationAddResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelationAddResponse) ProtoMessage() {}
func (*RpcBlockDataviewRelationAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1, 1}
}
func (m *RpcBlockDataviewRelationAddResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57378,7 +59209,7 @@ func (m *RpcBlockDataviewRelationAddResponseError) Reset() {
func (m *RpcBlockDataviewRelationAddResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelationAddResponseError) ProtoMessage() {}
func (*RpcBlockDataviewRelationAddResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1, 1, 0}
}
func (m *RpcBlockDataviewRelationAddResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57428,7 +59259,7 @@ func (m *RpcBlockDataviewRelationDelete) Reset() { *m = RpcBlockDataview
func (m *RpcBlockDataviewRelationDelete) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelationDelete) ProtoMessage() {}
func (*RpcBlockDataviewRelationDelete) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 2}
}
func (m *RpcBlockDataviewRelationDelete) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57467,7 +59298,7 @@ func (m *RpcBlockDataviewRelationDeleteRequest) Reset() { *m = RpcBlockD
func (m *RpcBlockDataviewRelationDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelationDeleteRequest) ProtoMessage() {}
func (*RpcBlockDataviewRelationDeleteRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 2, 0}
}
func (m *RpcBlockDataviewRelationDeleteRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57528,7 +59359,7 @@ func (m *RpcBlockDataviewRelationDeleteResponse) Reset() {
func (m *RpcBlockDataviewRelationDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewRelationDeleteResponse) ProtoMessage() {}
func (*RpcBlockDataviewRelationDeleteResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 2, 1}
}
func (m *RpcBlockDataviewRelationDeleteResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57584,7 +59415,7 @@ func (m *RpcBlockDataviewRelationDeleteResponseError) String() string {
}
func (*RpcBlockDataviewRelationDeleteResponseError) ProtoMessage() {}
func (*RpcBlockDataviewRelationDeleteResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 1, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 2, 1, 0}
}
func (m *RpcBlockDataviewRelationDeleteResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57634,7 +59465,7 @@ func (m *RpcBlockDataviewSetSource) Reset() { *m = RpcBlockDataviewSetSo
func (m *RpcBlockDataviewSetSource) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSetSource) ProtoMessage() {}
func (*RpcBlockDataviewSetSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2}
}
func (m *RpcBlockDataviewSetSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57673,7 +59504,7 @@ func (m *RpcBlockDataviewSetSourceRequest) Reset() { *m = RpcBlockDatavi
func (m *RpcBlockDataviewSetSourceRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSetSourceRequest) ProtoMessage() {}
func (*RpcBlockDataviewSetSourceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 0}
}
func (m *RpcBlockDataviewSetSourceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57732,7 +59563,7 @@ func (m *RpcBlockDataviewSetSourceResponse) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewSetSourceResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSetSourceResponse) ProtoMessage() {}
func (*RpcBlockDataviewSetSourceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 1}
}
func (m *RpcBlockDataviewSetSourceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57786,7 +59617,7 @@ func (m *RpcBlockDataviewSetSourceResponseError) Reset() {
func (m *RpcBlockDataviewSetSourceResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSetSourceResponseError) ProtoMessage() {}
func (*RpcBlockDataviewSetSourceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 1, 0}
}
func (m *RpcBlockDataviewSetSourceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57836,7 +59667,7 @@ func (m *RpcBlockDataviewGroupOrder) Reset() { *m = RpcBlockDataviewGrou
func (m *RpcBlockDataviewGroupOrder) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewGroupOrder) ProtoMessage() {}
func (*RpcBlockDataviewGroupOrder) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3}
}
func (m *RpcBlockDataviewGroupOrder) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57872,7 +59703,7 @@ func (m *RpcBlockDataviewGroupOrderUpdate) Reset() { *m = RpcBlockDatavi
func (m *RpcBlockDataviewGroupOrderUpdate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewGroupOrderUpdate) ProtoMessage() {}
func (*RpcBlockDataviewGroupOrderUpdate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 0}
}
func (m *RpcBlockDataviewGroupOrderUpdate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57913,7 +59744,7 @@ func (m *RpcBlockDataviewGroupOrderUpdateRequest) Reset() {
func (m *RpcBlockDataviewGroupOrderUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewGroupOrderUpdateRequest) ProtoMessage() {}
func (*RpcBlockDataviewGroupOrderUpdateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 3, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 0, 0}
}
func (m *RpcBlockDataviewGroupOrderUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -57974,7 +59805,7 @@ func (m *RpcBlockDataviewGroupOrderUpdateResponse) Reset() {
func (m *RpcBlockDataviewGroupOrderUpdateResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewGroupOrderUpdateResponse) ProtoMessage() {}
func (*RpcBlockDataviewGroupOrderUpdateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 3, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 0, 1}
}
func (m *RpcBlockDataviewGroupOrderUpdateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58030,7 +59861,7 @@ func (m *RpcBlockDataviewGroupOrderUpdateResponseError) String() string {
}
func (*RpcBlockDataviewGroupOrderUpdateResponseError) ProtoMessage() {}
func (*RpcBlockDataviewGroupOrderUpdateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 3, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 0, 1, 0}
}
func (m *RpcBlockDataviewGroupOrderUpdateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58080,7 +59911,7 @@ func (m *RpcBlockDataviewObjectOrder) Reset() { *m = RpcBlockDataviewObj
func (m *RpcBlockDataviewObjectOrder) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewObjectOrder) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrder) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4}
}
func (m *RpcBlockDataviewObjectOrder) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58116,7 +59947,7 @@ func (m *RpcBlockDataviewObjectOrderUpdate) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewObjectOrderUpdate) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewObjectOrderUpdate) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderUpdate) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 0}
}
func (m *RpcBlockDataviewObjectOrderUpdate) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58157,7 +59988,7 @@ func (m *RpcBlockDataviewObjectOrderUpdateRequest) Reset() {
func (m *RpcBlockDataviewObjectOrderUpdateRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewObjectOrderUpdateRequest) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderUpdateRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 0, 0}
}
func (m *RpcBlockDataviewObjectOrderUpdateRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58220,7 +60051,7 @@ func (m *RpcBlockDataviewObjectOrderUpdateResponse) String() string {
}
func (*RpcBlockDataviewObjectOrderUpdateResponse) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderUpdateResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 0, 1}
}
func (m *RpcBlockDataviewObjectOrderUpdateResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58276,7 +60107,7 @@ func (m *RpcBlockDataviewObjectOrderUpdateResponseError) String() string {
}
func (*RpcBlockDataviewObjectOrderUpdateResponseError) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderUpdateResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 0, 1, 0}
}
func (m *RpcBlockDataviewObjectOrderUpdateResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58326,7 +60157,7 @@ func (m *RpcBlockDataviewObjectOrderMove) Reset() { *m = RpcBlockDatavie
func (m *RpcBlockDataviewObjectOrderMove) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewObjectOrderMove) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderMove) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 1}
}
func (m *RpcBlockDataviewObjectOrderMove) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58370,7 +60201,7 @@ func (m *RpcBlockDataviewObjectOrderMoveRequest) Reset() {
func (m *RpcBlockDataviewObjectOrderMoveRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewObjectOrderMoveRequest) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderMoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 1, 0}
}
func (m *RpcBlockDataviewObjectOrderMoveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58452,7 +60283,7 @@ func (m *RpcBlockDataviewObjectOrderMoveResponse) Reset() {
func (m *RpcBlockDataviewObjectOrderMoveResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewObjectOrderMoveResponse) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderMoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 1, 1}
}
func (m *RpcBlockDataviewObjectOrderMoveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58508,7 +60339,7 @@ func (m *RpcBlockDataviewObjectOrderMoveResponseError) String() string {
}
func (*RpcBlockDataviewObjectOrderMoveResponseError) ProtoMessage() {}
func (*RpcBlockDataviewObjectOrderMoveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 4, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 4, 1, 1, 0}
}
func (m *RpcBlockDataviewObjectOrderMoveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58560,7 +60391,7 @@ func (m *RpcBlockDataviewCreateFromExistingObject) Reset() {
func (m *RpcBlockDataviewCreateFromExistingObject) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewCreateFromExistingObject) ProtoMessage() {}
func (*RpcBlockDataviewCreateFromExistingObject) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 5}
}
func (m *RpcBlockDataviewCreateFromExistingObject) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58603,7 +60434,7 @@ func (m *RpcBlockDataviewCreateFromExistingObjectRequest) String() string {
}
func (*RpcBlockDataviewCreateFromExistingObjectRequest) ProtoMessage() {}
func (*RpcBlockDataviewCreateFromExistingObjectRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 5, 0}
}
func (m *RpcBlockDataviewCreateFromExistingObjectRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58669,7 +60500,7 @@ func (m *RpcBlockDataviewCreateFromExistingObjectResponse) String() string {
}
func (*RpcBlockDataviewCreateFromExistingObjectResponse) ProtoMessage() {}
func (*RpcBlockDataviewCreateFromExistingObjectResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 5, 1}
}
func (m *RpcBlockDataviewCreateFromExistingObjectResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58746,7 +60577,7 @@ func (m *RpcBlockDataviewCreateFromExistingObjectResponseError) String() string
}
func (*RpcBlockDataviewCreateFromExistingObjectResponseError) ProtoMessage() {}
func (*RpcBlockDataviewCreateFromExistingObjectResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 5, 1, 0}
}
func (m *RpcBlockDataviewCreateFromExistingObjectResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58796,7 +60627,7 @@ func (m *RpcBlockDataviewFilter) Reset() { *m = RpcBlockDataviewFilter{}
func (m *RpcBlockDataviewFilter) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilter) ProtoMessage() {}
func (*RpcBlockDataviewFilter) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6}
}
func (m *RpcBlockDataviewFilter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58832,7 +60663,7 @@ func (m *RpcBlockDataviewFilterAdd) Reset() { *m = RpcBlockDataviewFilte
func (m *RpcBlockDataviewFilterAdd) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterAdd) ProtoMessage() {}
func (*RpcBlockDataviewFilterAdd) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 0}
}
func (m *RpcBlockDataviewFilterAdd) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58872,7 +60703,7 @@ func (m *RpcBlockDataviewFilterAddRequest) Reset() { *m = RpcBlockDatavi
func (m *RpcBlockDataviewFilterAddRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterAddRequest) ProtoMessage() {}
func (*RpcBlockDataviewFilterAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 0, 0}
}
func (m *RpcBlockDataviewFilterAddRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58938,7 +60769,7 @@ func (m *RpcBlockDataviewFilterAddResponse) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewFilterAddResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterAddResponse) ProtoMessage() {}
func (*RpcBlockDataviewFilterAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 0, 1}
}
func (m *RpcBlockDataviewFilterAddResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -58992,7 +60823,7 @@ func (m *RpcBlockDataviewFilterAddResponseError) Reset() {
func (m *RpcBlockDataviewFilterAddResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterAddResponseError) ProtoMessage() {}
func (*RpcBlockDataviewFilterAddResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 0, 1, 0}
}
func (m *RpcBlockDataviewFilterAddResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59042,7 +60873,7 @@ func (m *RpcBlockDataviewFilterRemove) Reset() { *m = RpcBlockDataviewFi
func (m *RpcBlockDataviewFilterRemove) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterRemove) ProtoMessage() {}
func (*RpcBlockDataviewFilterRemove) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 1}
}
func (m *RpcBlockDataviewFilterRemove) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59082,7 +60913,7 @@ func (m *RpcBlockDataviewFilterRemoveRequest) Reset() { *m = RpcBlockDat
func (m *RpcBlockDataviewFilterRemoveRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterRemoveRequest) ProtoMessage() {}
func (*RpcBlockDataviewFilterRemoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 1, 0}
}
func (m *RpcBlockDataviewFilterRemoveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59148,7 +60979,7 @@ func (m *RpcBlockDataviewFilterRemoveResponse) Reset() { *m = RpcBlockDa
func (m *RpcBlockDataviewFilterRemoveResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterRemoveResponse) ProtoMessage() {}
func (*RpcBlockDataviewFilterRemoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 1, 1}
}
func (m *RpcBlockDataviewFilterRemoveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59204,7 +61035,7 @@ func (m *RpcBlockDataviewFilterRemoveResponseError) String() string {
}
func (*RpcBlockDataviewFilterRemoveResponseError) ProtoMessage() {}
func (*RpcBlockDataviewFilterRemoveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 1, 1, 0}
}
func (m *RpcBlockDataviewFilterRemoveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59254,7 +61085,7 @@ func (m *RpcBlockDataviewFilterReplace) Reset() { *m = RpcBlockDataviewF
func (m *RpcBlockDataviewFilterReplace) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterReplace) ProtoMessage() {}
func (*RpcBlockDataviewFilterReplace) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 2}
}
func (m *RpcBlockDataviewFilterReplace) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59295,7 +61126,7 @@ func (m *RpcBlockDataviewFilterReplaceRequest) Reset() { *m = RpcBlockDa
func (m *RpcBlockDataviewFilterReplaceRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterReplaceRequest) ProtoMessage() {}
func (*RpcBlockDataviewFilterReplaceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 2, 0}
}
func (m *RpcBlockDataviewFilterReplaceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59368,7 +61199,7 @@ func (m *RpcBlockDataviewFilterReplaceResponse) Reset() { *m = RpcBlockD
func (m *RpcBlockDataviewFilterReplaceResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterReplaceResponse) ProtoMessage() {}
func (*RpcBlockDataviewFilterReplaceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 2, 1}
}
func (m *RpcBlockDataviewFilterReplaceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59424,7 +61255,7 @@ func (m *RpcBlockDataviewFilterReplaceResponseError) String() string {
}
func (*RpcBlockDataviewFilterReplaceResponseError) ProtoMessage() {}
func (*RpcBlockDataviewFilterReplaceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 2, 1, 0}
}
func (m *RpcBlockDataviewFilterReplaceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59474,7 +61305,7 @@ func (m *RpcBlockDataviewFilterSort) Reset() { *m = RpcBlockDataviewFilt
func (m *RpcBlockDataviewFilterSort) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterSort) ProtoMessage() {}
func (*RpcBlockDataviewFilterSort) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 3}
}
func (m *RpcBlockDataviewFilterSort) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59514,7 +61345,7 @@ func (m *RpcBlockDataviewFilterSortRequest) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewFilterSortRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterSortRequest) ProtoMessage() {}
func (*RpcBlockDataviewFilterSortRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 3, 0}
}
func (m *RpcBlockDataviewFilterSortRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59580,7 +61411,7 @@ func (m *RpcBlockDataviewFilterSortResponse) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewFilterSortResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterSortResponse) ProtoMessage() {}
func (*RpcBlockDataviewFilterSortResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 3, 1}
}
func (m *RpcBlockDataviewFilterSortResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59634,7 +61465,7 @@ func (m *RpcBlockDataviewFilterSortResponseError) Reset() {
func (m *RpcBlockDataviewFilterSortResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewFilterSortResponseError) ProtoMessage() {}
func (*RpcBlockDataviewFilterSortResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 6, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 6, 3, 1, 0}
}
func (m *RpcBlockDataviewFilterSortResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59684,7 +61515,7 @@ func (m *RpcBlockDataviewSort) Reset() { *m = RpcBlockDataviewSort{} }
func (m *RpcBlockDataviewSort) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSort) ProtoMessage() {}
func (*RpcBlockDataviewSort) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7}
}
func (m *RpcBlockDataviewSort) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59720,7 +61551,7 @@ func (m *RpcBlockDataviewSortAdd) Reset() { *m = RpcBlockDataviewSortAdd
func (m *RpcBlockDataviewSortAdd) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortAdd) ProtoMessage() {}
func (*RpcBlockDataviewSortAdd) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 0}
}
func (m *RpcBlockDataviewSortAdd) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59760,7 +61591,7 @@ func (m *RpcBlockDataviewSortAddRequest) Reset() { *m = RpcBlockDataview
func (m *RpcBlockDataviewSortAddRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortAddRequest) ProtoMessage() {}
func (*RpcBlockDataviewSortAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 0, 0}
}
func (m *RpcBlockDataviewSortAddRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59826,7 +61657,7 @@ func (m *RpcBlockDataviewSortAddResponse) Reset() { *m = RpcBlockDatavie
func (m *RpcBlockDataviewSortAddResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortAddResponse) ProtoMessage() {}
func (*RpcBlockDataviewSortAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 0, 1}
}
func (m *RpcBlockDataviewSortAddResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59878,7 +61709,7 @@ func (m *RpcBlockDataviewSortAddResponseError) Reset() { *m = RpcBlockDa
func (m *RpcBlockDataviewSortAddResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortAddResponseError) ProtoMessage() {}
func (*RpcBlockDataviewSortAddResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 0, 1, 0}
}
func (m *RpcBlockDataviewSortAddResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59928,7 +61759,7 @@ func (m *RpcBlockDataviewSortRemove) Reset() { *m = RpcBlockDataviewSort
func (m *RpcBlockDataviewSortRemove) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortRemove) ProtoMessage() {}
func (*RpcBlockDataviewSortRemove) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 1}
}
func (m *RpcBlockDataviewSortRemove) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -59968,7 +61799,7 @@ func (m *RpcBlockDataviewSortRemoveRequest) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewSortRemoveRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortRemoveRequest) ProtoMessage() {}
func (*RpcBlockDataviewSortRemoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 1, 0}
}
func (m *RpcBlockDataviewSortRemoveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60034,7 +61865,7 @@ func (m *RpcBlockDataviewSortRemoveResponse) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewSortRemoveResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortRemoveResponse) ProtoMessage() {}
func (*RpcBlockDataviewSortRemoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 1, 1}
}
func (m *RpcBlockDataviewSortRemoveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60088,7 +61919,7 @@ func (m *RpcBlockDataviewSortRemoveResponseError) Reset() {
func (m *RpcBlockDataviewSortRemoveResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortRemoveResponseError) ProtoMessage() {}
func (*RpcBlockDataviewSortRemoveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 1, 1, 0}
}
func (m *RpcBlockDataviewSortRemoveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60138,7 +61969,7 @@ func (m *RpcBlockDataviewSortReplace) Reset() { *m = RpcBlockDataviewSor
func (m *RpcBlockDataviewSortReplace) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortReplace) ProtoMessage() {}
func (*RpcBlockDataviewSortReplace) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 2}
}
func (m *RpcBlockDataviewSortReplace) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60179,7 +62010,7 @@ func (m *RpcBlockDataviewSortReplaceRequest) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewSortReplaceRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortReplaceRequest) ProtoMessage() {}
func (*RpcBlockDataviewSortReplaceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 2, 0}
}
func (m *RpcBlockDataviewSortReplaceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60252,7 +62083,7 @@ func (m *RpcBlockDataviewSortReplaceResponse) Reset() { *m = RpcBlockDat
func (m *RpcBlockDataviewSortReplaceResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortReplaceResponse) ProtoMessage() {}
func (*RpcBlockDataviewSortReplaceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 2, 1}
}
func (m *RpcBlockDataviewSortReplaceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60306,7 +62137,7 @@ func (m *RpcBlockDataviewSortReplaceResponseError) Reset() {
func (m *RpcBlockDataviewSortReplaceResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortReplaceResponseError) ProtoMessage() {}
func (*RpcBlockDataviewSortReplaceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 2, 1, 0}
}
func (m *RpcBlockDataviewSortReplaceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60356,7 +62187,7 @@ func (m *RpcBlockDataviewSortSSort) Reset() { *m = RpcBlockDataviewSortS
func (m *RpcBlockDataviewSortSSort) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortSSort) ProtoMessage() {}
func (*RpcBlockDataviewSortSSort) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 3}
}
func (m *RpcBlockDataviewSortSSort) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60396,7 +62227,7 @@ func (m *RpcBlockDataviewSortSSortRequest) Reset() { *m = RpcBlockDatavi
func (m *RpcBlockDataviewSortSSortRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortSSortRequest) ProtoMessage() {}
func (*RpcBlockDataviewSortSSortRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 3, 0}
}
func (m *RpcBlockDataviewSortSSortRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60462,7 +62293,7 @@ func (m *RpcBlockDataviewSortSSortResponse) Reset() { *m = RpcBlockDatav
func (m *RpcBlockDataviewSortSSortResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortSSortResponse) ProtoMessage() {}
func (*RpcBlockDataviewSortSSortResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 3, 1}
}
func (m *RpcBlockDataviewSortSSortResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60516,7 +62347,7 @@ func (m *RpcBlockDataviewSortSSortResponseError) Reset() {
func (m *RpcBlockDataviewSortSSortResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewSortSSortResponseError) ProtoMessage() {}
func (*RpcBlockDataviewSortSSortResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 7, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 7, 3, 1, 0}
}
func (m *RpcBlockDataviewSortSSortResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60566,7 +62397,7 @@ func (m *RpcBlockDataviewViewRelation) Reset() { *m = RpcBlockDataviewVi
func (m *RpcBlockDataviewViewRelation) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelation) ProtoMessage() {}
func (*RpcBlockDataviewViewRelation) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8}
}
func (m *RpcBlockDataviewViewRelation) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60602,7 +62433,7 @@ func (m *RpcBlockDataviewViewRelationAdd) Reset() { *m = RpcBlockDatavie
func (m *RpcBlockDataviewViewRelationAdd) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationAdd) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationAdd) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 0}
}
func (m *RpcBlockDataviewViewRelationAdd) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60644,7 +62475,7 @@ func (m *RpcBlockDataviewViewRelationAddRequest) Reset() {
func (m *RpcBlockDataviewViewRelationAddRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationAddRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationAddRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 0, 0}
}
func (m *RpcBlockDataviewViewRelationAddRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60712,7 +62543,7 @@ func (m *RpcBlockDataviewViewRelationAddResponse) Reset() {
func (m *RpcBlockDataviewViewRelationAddResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationAddResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationAddResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 0, 1}
}
func (m *RpcBlockDataviewViewRelationAddResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60768,7 +62599,7 @@ func (m *RpcBlockDataviewViewRelationAddResponseError) String() string {
}
func (*RpcBlockDataviewViewRelationAddResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationAddResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 0, 1, 0}
}
func (m *RpcBlockDataviewViewRelationAddResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60818,7 +62649,7 @@ func (m *RpcBlockDataviewViewRelationRemove) Reset() { *m = RpcBlockData
func (m *RpcBlockDataviewViewRelationRemove) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationRemove) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationRemove) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 1}
}
func (m *RpcBlockDataviewViewRelationRemove) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60862,7 +62693,7 @@ func (m *RpcBlockDataviewViewRelationRemoveRequest) String() string {
}
func (*RpcBlockDataviewViewRelationRemoveRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationRemoveRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 1, 0}
}
func (m *RpcBlockDataviewViewRelationRemoveRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60932,7 +62763,7 @@ func (m *RpcBlockDataviewViewRelationRemoveResponse) String() string {
}
func (*RpcBlockDataviewViewRelationRemoveResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationRemoveResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 1, 1}
}
func (m *RpcBlockDataviewViewRelationRemoveResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -60988,7 +62819,7 @@ func (m *RpcBlockDataviewViewRelationRemoveResponseError) String() string {
}
func (*RpcBlockDataviewViewRelationRemoveResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationRemoveResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 1, 1, 0}
}
func (m *RpcBlockDataviewViewRelationRemoveResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61038,7 +62869,7 @@ func (m *RpcBlockDataviewViewRelationReplace) Reset() { *m = RpcBlockDat
func (m *RpcBlockDataviewViewRelationReplace) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationReplace) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationReplace) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 2}
}
func (m *RpcBlockDataviewViewRelationReplace) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61083,7 +62914,7 @@ func (m *RpcBlockDataviewViewRelationReplaceRequest) String() string {
}
func (*RpcBlockDataviewViewRelationReplaceRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationReplaceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 2, 0}
}
func (m *RpcBlockDataviewViewRelationReplaceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61160,7 +62991,7 @@ func (m *RpcBlockDataviewViewRelationReplaceResponse) String() string {
}
func (*RpcBlockDataviewViewRelationReplaceResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationReplaceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 2, 1}
}
func (m *RpcBlockDataviewViewRelationReplaceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61216,7 +63047,7 @@ func (m *RpcBlockDataviewViewRelationReplaceResponseError) String() string {
}
func (*RpcBlockDataviewViewRelationReplaceResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationReplaceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 2, 1, 0}
}
func (m *RpcBlockDataviewViewRelationReplaceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61266,7 +63097,7 @@ func (m *RpcBlockDataviewViewRelationSort) Reset() { *m = RpcBlockDatavi
func (m *RpcBlockDataviewViewRelationSort) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationSort) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationSort) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 3}
}
func (m *RpcBlockDataviewViewRelationSort) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61308,7 +63139,7 @@ func (m *RpcBlockDataviewViewRelationSortRequest) Reset() {
func (m *RpcBlockDataviewViewRelationSortRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationSortRequest) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationSortRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 3, 0}
}
func (m *RpcBlockDataviewViewRelationSortRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61376,7 +63207,7 @@ func (m *RpcBlockDataviewViewRelationSortResponse) Reset() {
func (m *RpcBlockDataviewViewRelationSortResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockDataviewViewRelationSortResponse) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationSortResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 3, 1}
}
func (m *RpcBlockDataviewViewRelationSortResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61432,7 +63263,7 @@ func (m *RpcBlockDataviewViewRelationSortResponseError) String() string {
}
func (*RpcBlockDataviewViewRelationSortResponseError) ProtoMessage() {}
func (*RpcBlockDataviewViewRelationSortResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 29, 8, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 8, 3, 1, 0}
}
func (m *RpcBlockDataviewViewRelationSortResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61482,7 +63313,7 @@ func (m *RpcBlockWidget) Reset() { *m = RpcBlockWidget{} }
func (m *RpcBlockWidget) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidget) ProtoMessage() {}
func (*RpcBlockWidget) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31}
}
func (m *RpcBlockWidget) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61518,7 +63349,7 @@ func (m *RpcBlockWidgetSetTargetId) Reset() { *m = RpcBlockWidgetSetTarg
func (m *RpcBlockWidgetSetTargetId) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetTargetId) ProtoMessage() {}
func (*RpcBlockWidgetSetTargetId) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 0}
}
func (m *RpcBlockWidgetSetTargetId) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61557,7 +63388,7 @@ func (m *RpcBlockWidgetSetTargetIdRequest) Reset() { *m = RpcBlockWidget
func (m *RpcBlockWidgetSetTargetIdRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetTargetIdRequest) ProtoMessage() {}
func (*RpcBlockWidgetSetTargetIdRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 0, 0}
}
func (m *RpcBlockWidgetSetTargetIdRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61616,7 +63447,7 @@ func (m *RpcBlockWidgetSetTargetIdResponse) Reset() { *m = RpcBlockWidge
func (m *RpcBlockWidgetSetTargetIdResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetTargetIdResponse) ProtoMessage() {}
func (*RpcBlockWidgetSetTargetIdResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 0, 1}
}
func (m *RpcBlockWidgetSetTargetIdResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61670,7 +63501,7 @@ func (m *RpcBlockWidgetSetTargetIdResponseError) Reset() {
func (m *RpcBlockWidgetSetTargetIdResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetTargetIdResponseError) ProtoMessage() {}
func (*RpcBlockWidgetSetTargetIdResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 0, 1, 0}
}
func (m *RpcBlockWidgetSetTargetIdResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61720,7 +63551,7 @@ func (m *RpcBlockWidgetSetLayout) Reset() { *m = RpcBlockWidgetSetLayout
func (m *RpcBlockWidgetSetLayout) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLayout) ProtoMessage() {}
func (*RpcBlockWidgetSetLayout) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1}
}
func (m *RpcBlockWidgetSetLayout) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61759,7 +63590,7 @@ func (m *RpcBlockWidgetSetLayoutRequest) Reset() { *m = RpcBlockWidgetSe
func (m *RpcBlockWidgetSetLayoutRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLayoutRequest) ProtoMessage() {}
func (*RpcBlockWidgetSetLayoutRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 0}
}
func (m *RpcBlockWidgetSetLayoutRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61818,7 +63649,7 @@ func (m *RpcBlockWidgetSetLayoutResponse) Reset() { *m = RpcBlockWidgetS
func (m *RpcBlockWidgetSetLayoutResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLayoutResponse) ProtoMessage() {}
func (*RpcBlockWidgetSetLayoutResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 1}
}
func (m *RpcBlockWidgetSetLayoutResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61870,7 +63701,7 @@ func (m *RpcBlockWidgetSetLayoutResponseError) Reset() { *m = RpcBlockWi
func (m *RpcBlockWidgetSetLayoutResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLayoutResponseError) ProtoMessage() {}
func (*RpcBlockWidgetSetLayoutResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 1, 0}
}
func (m *RpcBlockWidgetSetLayoutResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61920,7 +63751,7 @@ func (m *RpcBlockWidgetSetLimit) Reset() { *m = RpcBlockWidgetSetLimit{}
func (m *RpcBlockWidgetSetLimit) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLimit) ProtoMessage() {}
func (*RpcBlockWidgetSetLimit) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2}
}
func (m *RpcBlockWidgetSetLimit) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -61959,7 +63790,7 @@ func (m *RpcBlockWidgetSetLimitRequest) Reset() { *m = RpcBlockWidgetSet
func (m *RpcBlockWidgetSetLimitRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLimitRequest) ProtoMessage() {}
func (*RpcBlockWidgetSetLimitRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 0}
}
func (m *RpcBlockWidgetSetLimitRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62018,7 +63849,7 @@ func (m *RpcBlockWidgetSetLimitResponse) Reset() { *m = RpcBlockWidgetSe
func (m *RpcBlockWidgetSetLimitResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLimitResponse) ProtoMessage() {}
func (*RpcBlockWidgetSetLimitResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 1}
}
func (m *RpcBlockWidgetSetLimitResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62070,7 +63901,7 @@ func (m *RpcBlockWidgetSetLimitResponseError) Reset() { *m = RpcBlockWid
func (m *RpcBlockWidgetSetLimitResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetLimitResponseError) ProtoMessage() {}
func (*RpcBlockWidgetSetLimitResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 1, 0}
}
func (m *RpcBlockWidgetSetLimitResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62120,7 +63951,7 @@ func (m *RpcBlockWidgetSetViewId) Reset() { *m = RpcBlockWidgetSetViewId
func (m *RpcBlockWidgetSetViewId) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetViewId) ProtoMessage() {}
func (*RpcBlockWidgetSetViewId) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3}
}
func (m *RpcBlockWidgetSetViewId) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62159,7 +63990,7 @@ func (m *RpcBlockWidgetSetViewIdRequest) Reset() { *m = RpcBlockWidgetSe
func (m *RpcBlockWidgetSetViewIdRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetViewIdRequest) ProtoMessage() {}
func (*RpcBlockWidgetSetViewIdRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 0}
}
func (m *RpcBlockWidgetSetViewIdRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62218,7 +64049,7 @@ func (m *RpcBlockWidgetSetViewIdResponse) Reset() { *m = RpcBlockWidgetS
func (m *RpcBlockWidgetSetViewIdResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetViewIdResponse) ProtoMessage() {}
func (*RpcBlockWidgetSetViewIdResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 1}
}
func (m *RpcBlockWidgetSetViewIdResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62270,7 +64101,7 @@ func (m *RpcBlockWidgetSetViewIdResponseError) Reset() { *m = RpcBlockWi
func (m *RpcBlockWidgetSetViewIdResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBlockWidgetSetViewIdResponseError) ProtoMessage() {}
func (*RpcBlockWidgetSetViewIdResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 30, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 1, 0}
}
func (m *RpcBlockWidgetSetViewIdResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62320,7 +64151,7 @@ func (m *RpcDebug) Reset() { *m = RpcDebug{} }
func (m *RpcDebug) String() string { return proto.CompactTextString(m) }
func (*RpcDebug) ProtoMessage() {}
func (*RpcDebug) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32}
}
func (m *RpcDebug) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62358,7 +64189,7 @@ func (m *RpcDebugTreeInfo) Reset() { *m = RpcDebugTreeInfo{} }
func (m *RpcDebugTreeInfo) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeInfo) ProtoMessage() {}
func (*RpcDebugTreeInfo) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 0}
}
func (m *RpcDebugTreeInfo) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62408,7 +64239,7 @@ func (m *RpcDebugStat) Reset() { *m = RpcDebugStat{} }
func (m *RpcDebugStat) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStat) ProtoMessage() {}
func (*RpcDebugStat) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 1}
}
func (m *RpcDebugStat) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62444,7 +64275,7 @@ func (m *RpcDebugStatRequest) Reset() { *m = RpcDebugStatRequest{} }
func (m *RpcDebugStatRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStatRequest) ProtoMessage() {}
func (*RpcDebugStatRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 1, 0}
}
func (m *RpcDebugStatRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62482,7 +64313,7 @@ func (m *RpcDebugStatResponse) Reset() { *m = RpcDebugStatResponse{} }
func (m *RpcDebugStatResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStatResponse) ProtoMessage() {}
func (*RpcDebugStatResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 1, 1}
}
func (m *RpcDebugStatResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62534,7 +64365,7 @@ func (m *RpcDebugStatResponseError) Reset() { *m = RpcDebugStatResponseE
func (m *RpcDebugStatResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStatResponseError) ProtoMessage() {}
func (*RpcDebugStatResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 1, 1, 0}
}
func (m *RpcDebugStatResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62584,7 +64415,7 @@ func (m *RpcDebugTreeHeads) Reset() { *m = RpcDebugTreeHeads{} }
func (m *RpcDebugTreeHeads) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeHeads) ProtoMessage() {}
func (*RpcDebugTreeHeads) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 2}
}
func (m *RpcDebugTreeHeads) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62621,7 +64452,7 @@ func (m *RpcDebugTreeHeadsRequest) Reset() { *m = RpcDebugTreeHeadsReque
func (m *RpcDebugTreeHeadsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeHeadsRequest) ProtoMessage() {}
func (*RpcDebugTreeHeadsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 2, 0}
}
func (m *RpcDebugTreeHeadsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62667,7 +64498,7 @@ func (m *RpcDebugTreeHeadsResponse) Reset() { *m = RpcDebugTreeHeadsResp
func (m *RpcDebugTreeHeadsResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeHeadsResponse) ProtoMessage() {}
func (*RpcDebugTreeHeadsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 2, 1}
}
func (m *RpcDebugTreeHeadsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62726,7 +64557,7 @@ func (m *RpcDebugTreeHeadsResponseError) Reset() { *m = RpcDebugTreeHead
func (m *RpcDebugTreeHeadsResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeHeadsResponseError) ProtoMessage() {}
func (*RpcDebugTreeHeadsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 2, 1, 0}
}
func (m *RpcDebugTreeHeadsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62776,7 +64607,7 @@ func (m *RpcDebugTree) Reset() { *m = RpcDebugTree{} }
func (m *RpcDebugTree) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTree) ProtoMessage() {}
func (*RpcDebugTree) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 3}
}
func (m *RpcDebugTree) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62816,7 +64647,7 @@ func (m *RpcDebugTreeRequest) Reset() { *m = RpcDebugTreeRequest{} }
func (m *RpcDebugTreeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeRequest) ProtoMessage() {}
func (*RpcDebugTreeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 3, 0}
}
func (m *RpcDebugTreeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62882,7 +64713,7 @@ func (m *RpcDebugTreeResponse) Reset() { *m = RpcDebugTreeResponse{} }
func (m *RpcDebugTreeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeResponse) ProtoMessage() {}
func (*RpcDebugTreeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 3, 1}
}
func (m *RpcDebugTreeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62934,7 +64765,7 @@ func (m *RpcDebugTreeResponseError) Reset() { *m = RpcDebugTreeResponseE
func (m *RpcDebugTreeResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugTreeResponseError) ProtoMessage() {}
func (*RpcDebugTreeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 3, 1, 0}
}
func (m *RpcDebugTreeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -62984,7 +64815,7 @@ func (m *RpcDebugSpaceSummary) Reset() { *m = RpcDebugSpaceSummary{} }
func (m *RpcDebugSpaceSummary) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSpaceSummary) ProtoMessage() {}
func (*RpcDebugSpaceSummary) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 4}
}
func (m *RpcDebugSpaceSummary) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63021,7 +64852,7 @@ func (m *RpcDebugSpaceSummaryRequest) Reset() { *m = RpcDebugSpaceSummar
func (m *RpcDebugSpaceSummaryRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSpaceSummaryRequest) ProtoMessage() {}
func (*RpcDebugSpaceSummaryRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 4, 0}
}
func (m *RpcDebugSpaceSummaryRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63067,7 +64898,7 @@ func (m *RpcDebugSpaceSummaryResponse) Reset() { *m = RpcDebugSpaceSumma
func (m *RpcDebugSpaceSummaryResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSpaceSummaryResponse) ProtoMessage() {}
func (*RpcDebugSpaceSummaryResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 4, 1}
}
func (m *RpcDebugSpaceSummaryResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63126,7 +64957,7 @@ func (m *RpcDebugSpaceSummaryResponseError) Reset() { *m = RpcDebugSpace
func (m *RpcDebugSpaceSummaryResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSpaceSummaryResponseError) ProtoMessage() {}
func (*RpcDebugSpaceSummaryResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 4, 1, 0}
}
func (m *RpcDebugSpaceSummaryResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63176,7 +65007,7 @@ func (m *RpcDebugStackGoroutines) Reset() { *m = RpcDebugStackGoroutines
func (m *RpcDebugStackGoroutines) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStackGoroutines) ProtoMessage() {}
func (*RpcDebugStackGoroutines) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 5}
}
func (m *RpcDebugStackGoroutines) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63213,7 +65044,7 @@ func (m *RpcDebugStackGoroutinesRequest) Reset() { *m = RpcDebugStackGor
func (m *RpcDebugStackGoroutinesRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStackGoroutinesRequest) ProtoMessage() {}
func (*RpcDebugStackGoroutinesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 5, 0}
}
func (m *RpcDebugStackGoroutinesRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63257,7 +65088,7 @@ func (m *RpcDebugStackGoroutinesResponse) Reset() { *m = RpcDebugStackGo
func (m *RpcDebugStackGoroutinesResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStackGoroutinesResponse) ProtoMessage() {}
func (*RpcDebugStackGoroutinesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 5, 1}
}
func (m *RpcDebugStackGoroutinesResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63302,7 +65133,7 @@ func (m *RpcDebugStackGoroutinesResponseError) Reset() { *m = RpcDebugSt
func (m *RpcDebugStackGoroutinesResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugStackGoroutinesResponseError) ProtoMessage() {}
func (*RpcDebugStackGoroutinesResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 5, 1, 0}
}
func (m *RpcDebugStackGoroutinesResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63352,7 +65183,7 @@ func (m *RpcDebugExportLocalstore) Reset() { *m = RpcDebugExportLocalsto
func (m *RpcDebugExportLocalstore) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLocalstore) ProtoMessage() {}
func (*RpcDebugExportLocalstore) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 6}
}
func (m *RpcDebugExportLocalstore) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63393,7 +65224,7 @@ func (m *RpcDebugExportLocalstoreRequest) Reset() { *m = RpcDebugExportL
func (m *RpcDebugExportLocalstoreRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLocalstoreRequest) ProtoMessage() {}
func (*RpcDebugExportLocalstoreRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 6, 0}
}
func (m *RpcDebugExportLocalstoreRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63453,7 +65284,7 @@ func (m *RpcDebugExportLocalstoreResponse) Reset() { *m = RpcDebugExport
func (m *RpcDebugExportLocalstoreResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLocalstoreResponse) ProtoMessage() {}
func (*RpcDebugExportLocalstoreResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 6, 1}
}
func (m *RpcDebugExportLocalstoreResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63512,7 +65343,7 @@ func (m *RpcDebugExportLocalstoreResponseError) Reset() { *m = RpcDebugE
func (m *RpcDebugExportLocalstoreResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLocalstoreResponseError) ProtoMessage() {}
func (*RpcDebugExportLocalstoreResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 6, 1, 0}
}
func (m *RpcDebugExportLocalstoreResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63562,7 +65393,7 @@ func (m *RpcDebugSubscriptions) Reset() { *m = RpcDebugSubscriptions{} }
func (m *RpcDebugSubscriptions) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSubscriptions) ProtoMessage() {}
func (*RpcDebugSubscriptions) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 7}
}
func (m *RpcDebugSubscriptions) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63598,7 +65429,7 @@ func (m *RpcDebugSubscriptionsRequest) Reset() { *m = RpcDebugSubscripti
func (m *RpcDebugSubscriptionsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSubscriptionsRequest) ProtoMessage() {}
func (*RpcDebugSubscriptionsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 7, 0}
}
func (m *RpcDebugSubscriptionsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63636,7 +65467,7 @@ func (m *RpcDebugSubscriptionsResponse) Reset() { *m = RpcDebugSubscript
func (m *RpcDebugSubscriptionsResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSubscriptionsResponse) ProtoMessage() {}
func (*RpcDebugSubscriptionsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 7, 1}
}
func (m *RpcDebugSubscriptionsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63688,7 +65519,7 @@ func (m *RpcDebugSubscriptionsResponseError) Reset() { *m = RpcDebugSubs
func (m *RpcDebugSubscriptionsResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugSubscriptionsResponseError) ProtoMessage() {}
func (*RpcDebugSubscriptionsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 7, 1, 0}
}
func (m *RpcDebugSubscriptionsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63738,7 +65569,7 @@ func (m *RpcDebugOpenedObjects) Reset() { *m = RpcDebugOpenedObjects{} }
func (m *RpcDebugOpenedObjects) String() string { return proto.CompactTextString(m) }
func (*RpcDebugOpenedObjects) ProtoMessage() {}
func (*RpcDebugOpenedObjects) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 8}
}
func (m *RpcDebugOpenedObjects) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63774,7 +65605,7 @@ func (m *RpcDebugOpenedObjectsRequest) Reset() { *m = RpcDebugOpenedObje
func (m *RpcDebugOpenedObjectsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugOpenedObjectsRequest) ProtoMessage() {}
func (*RpcDebugOpenedObjectsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 8, 0}
}
func (m *RpcDebugOpenedObjectsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63812,7 +65643,7 @@ func (m *RpcDebugOpenedObjectsResponse) Reset() { *m = RpcDebugOpenedObj
func (m *RpcDebugOpenedObjectsResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugOpenedObjectsResponse) ProtoMessage() {}
func (*RpcDebugOpenedObjectsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 8, 1}
}
func (m *RpcDebugOpenedObjectsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63864,7 +65695,7 @@ func (m *RpcDebugOpenedObjectsResponseError) Reset() { *m = RpcDebugOpen
func (m *RpcDebugOpenedObjectsResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugOpenedObjectsResponseError) ProtoMessage() {}
func (*RpcDebugOpenedObjectsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 8, 1, 0}
}
func (m *RpcDebugOpenedObjectsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63914,7 +65745,7 @@ func (m *RpcDebugRunProfiler) Reset() { *m = RpcDebugRunProfiler{} }
func (m *RpcDebugRunProfiler) String() string { return proto.CompactTextString(m) }
func (*RpcDebugRunProfiler) ProtoMessage() {}
func (*RpcDebugRunProfiler) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 9}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 9}
}
func (m *RpcDebugRunProfiler) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63951,7 +65782,7 @@ func (m *RpcDebugRunProfilerRequest) Reset() { *m = RpcDebugRunProfilerR
func (m *RpcDebugRunProfilerRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugRunProfilerRequest) ProtoMessage() {}
func (*RpcDebugRunProfilerRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 9, 0}
}
func (m *RpcDebugRunProfilerRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -63996,7 +65827,7 @@ func (m *RpcDebugRunProfilerResponse) Reset() { *m = RpcDebugRunProfiler
func (m *RpcDebugRunProfilerResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugRunProfilerResponse) ProtoMessage() {}
func (*RpcDebugRunProfilerResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 9, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 9, 1}
}
func (m *RpcDebugRunProfilerResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64048,7 +65879,7 @@ func (m *RpcDebugRunProfilerResponseError) Reset() { *m = RpcDebugRunPro
func (m *RpcDebugRunProfilerResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugRunProfilerResponseError) ProtoMessage() {}
func (*RpcDebugRunProfilerResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 9, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 9, 1, 0}
}
func (m *RpcDebugRunProfilerResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64098,7 +65929,7 @@ func (m *RpcDebugAccountSelectTrace) Reset() { *m = RpcDebugAccountSelec
func (m *RpcDebugAccountSelectTrace) String() string { return proto.CompactTextString(m) }
func (*RpcDebugAccountSelectTrace) ProtoMessage() {}
func (*RpcDebugAccountSelectTrace) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 10}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 10}
}
func (m *RpcDebugAccountSelectTrace) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64135,7 +65966,7 @@ func (m *RpcDebugAccountSelectTraceRequest) Reset() { *m = RpcDebugAccou
func (m *RpcDebugAccountSelectTraceRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugAccountSelectTraceRequest) ProtoMessage() {}
func (*RpcDebugAccountSelectTraceRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 10, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 10, 0}
}
func (m *RpcDebugAccountSelectTraceRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64180,7 +66011,7 @@ func (m *RpcDebugAccountSelectTraceResponse) Reset() { *m = RpcDebugAcco
func (m *RpcDebugAccountSelectTraceResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugAccountSelectTraceResponse) ProtoMessage() {}
func (*RpcDebugAccountSelectTraceResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 10, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 10, 1}
}
func (m *RpcDebugAccountSelectTraceResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64234,7 +66065,7 @@ func (m *RpcDebugAccountSelectTraceResponseError) Reset() {
func (m *RpcDebugAccountSelectTraceResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugAccountSelectTraceResponseError) ProtoMessage() {}
func (*RpcDebugAccountSelectTraceResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 10, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 10, 1, 0}
}
func (m *RpcDebugAccountSelectTraceResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64284,7 +66115,7 @@ func (m *RpcDebugExportLog) Reset() { *m = RpcDebugExportLog{} }
func (m *RpcDebugExportLog) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLog) ProtoMessage() {}
func (*RpcDebugExportLog) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 11}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 11}
}
func (m *RpcDebugExportLog) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64321,7 +66152,7 @@ func (m *RpcDebugExportLogRequest) Reset() { *m = RpcDebugExportLogReque
func (m *RpcDebugExportLogRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLogRequest) ProtoMessage() {}
func (*RpcDebugExportLogRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 11, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 11, 0}
}
func (m *RpcDebugExportLogRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64366,7 +66197,7 @@ func (m *RpcDebugExportLogResponse) Reset() { *m = RpcDebugExportLogResp
func (m *RpcDebugExportLogResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLogResponse) ProtoMessage() {}
func (*RpcDebugExportLogResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 11, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 11, 1}
}
func (m *RpcDebugExportLogResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64418,7 +66249,7 @@ func (m *RpcDebugExportLogResponseError) Reset() { *m = RpcDebugExportLo
func (m *RpcDebugExportLogResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugExportLogResponseError) ProtoMessage() {}
func (*RpcDebugExportLogResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 11, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 11, 1, 0}
}
func (m *RpcDebugExportLogResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64468,7 +66299,7 @@ func (m *RpcDebugPing) Reset() { *m = RpcDebugPing{} }
func (m *RpcDebugPing) String() string { return proto.CompactTextString(m) }
func (*RpcDebugPing) ProtoMessage() {}
func (*RpcDebugPing) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 12}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 12}
}
func (m *RpcDebugPing) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64506,7 +66337,7 @@ func (m *RpcDebugPingRequest) Reset() { *m = RpcDebugPingRequest{} }
func (m *RpcDebugPingRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugPingRequest) ProtoMessage() {}
func (*RpcDebugPingRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 12, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 12, 0}
}
func (m *RpcDebugPingRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64558,7 +66389,7 @@ func (m *RpcDebugPingResponse) Reset() { *m = RpcDebugPingResponse{} }
func (m *RpcDebugPingResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugPingResponse) ProtoMessage() {}
func (*RpcDebugPingResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 12, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 12, 1}
}
func (m *RpcDebugPingResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64610,7 +66441,7 @@ func (m *RpcDebugPingResponseError) Reset() { *m = RpcDebugPingResponseE
func (m *RpcDebugPingResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugPingResponseError) ProtoMessage() {}
func (*RpcDebugPingResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 12, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 12, 1, 0}
}
func (m *RpcDebugPingResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64660,7 +66491,7 @@ func (m *RpcDebugAnystoreObjectChanges) Reset() { *m = RpcDebugAnystoreO
func (m *RpcDebugAnystoreObjectChanges) String() string { return proto.CompactTextString(m) }
func (*RpcDebugAnystoreObjectChanges) ProtoMessage() {}
func (*RpcDebugAnystoreObjectChanges) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 13}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 13}
}
func (m *RpcDebugAnystoreObjectChanges) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64698,7 +66529,7 @@ func (m *RpcDebugAnystoreObjectChangesRequest) Reset() { *m = RpcDebugAn
func (m *RpcDebugAnystoreObjectChangesRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugAnystoreObjectChangesRequest) ProtoMessage() {}
func (*RpcDebugAnystoreObjectChangesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 13, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 13, 0}
}
func (m *RpcDebugAnystoreObjectChangesRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64751,7 +66582,7 @@ func (m *RpcDebugAnystoreObjectChangesResponse) Reset() { *m = RpcDebugA
func (m *RpcDebugAnystoreObjectChangesResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugAnystoreObjectChangesResponse) ProtoMessage() {}
func (*RpcDebugAnystoreObjectChangesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 13, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 13, 1}
}
func (m *RpcDebugAnystoreObjectChangesResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64816,7 +66647,7 @@ func (m *RpcDebugAnystoreObjectChangesResponseChange) String() string {
}
func (*RpcDebugAnystoreObjectChangesResponseChange) ProtoMessage() {}
func (*RpcDebugAnystoreObjectChangesResponseChange) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 13, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 13, 1, 0}
}
func (m *RpcDebugAnystoreObjectChangesResponseChange) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64886,7 +66717,7 @@ func (m *RpcDebugAnystoreObjectChangesResponseError) String() string {
}
func (*RpcDebugAnystoreObjectChangesResponseError) ProtoMessage() {}
func (*RpcDebugAnystoreObjectChangesResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 13, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 13, 1, 1}
}
func (m *RpcDebugAnystoreObjectChangesResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64936,7 +66767,7 @@ func (m *RpcDebugNetCheck) Reset() { *m = RpcDebugNetCheck{} }
func (m *RpcDebugNetCheck) String() string { return proto.CompactTextString(m) }
func (*RpcDebugNetCheck) ProtoMessage() {}
func (*RpcDebugNetCheck) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 14}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 14}
}
func (m *RpcDebugNetCheck) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -64973,7 +66804,7 @@ func (m *RpcDebugNetCheckRequest) Reset() { *m = RpcDebugNetCheckRequest
func (m *RpcDebugNetCheckRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDebugNetCheckRequest) ProtoMessage() {}
func (*RpcDebugNetCheckRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 14, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 14, 0}
}
func (m *RpcDebugNetCheckRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65018,7 +66849,7 @@ func (m *RpcDebugNetCheckResponse) Reset() { *m = RpcDebugNetCheckRespon
func (m *RpcDebugNetCheckResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDebugNetCheckResponse) ProtoMessage() {}
func (*RpcDebugNetCheckResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 14, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 14, 1}
}
func (m *RpcDebugNetCheckResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65070,7 +66901,7 @@ func (m *RpcDebugNetCheckResponseError) Reset() { *m = RpcDebugNetCheckR
func (m *RpcDebugNetCheckResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDebugNetCheckResponseError) ProtoMessage() {}
func (*RpcDebugNetCheckResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 31, 14, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 14, 1, 0}
}
func (m *RpcDebugNetCheckResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65120,7 +66951,7 @@ func (m *RpcInitial) Reset() { *m = RpcInitial{} }
func (m *RpcInitial) String() string { return proto.CompactTextString(m) }
func (*RpcInitial) ProtoMessage() {}
func (*RpcInitial) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 32}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 33}
}
func (m *RpcInitial) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65156,7 +66987,7 @@ func (m *RpcInitialSetParameters) Reset() { *m = RpcInitialSetParameters
func (m *RpcInitialSetParameters) String() string { return proto.CompactTextString(m) }
func (*RpcInitialSetParameters) ProtoMessage() {}
func (*RpcInitialSetParameters) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0}
}
func (m *RpcInitialSetParameters) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65199,7 +67030,7 @@ func (m *RpcInitialSetParametersRequest) Reset() { *m = RpcInitialSetPar
func (m *RpcInitialSetParametersRequest) String() string { return proto.CompactTextString(m) }
func (*RpcInitialSetParametersRequest) ProtoMessage() {}
func (*RpcInitialSetParametersRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 0}
}
func (m *RpcInitialSetParametersRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65285,7 +67116,7 @@ func (m *RpcInitialSetParametersResponse) Reset() { *m = RpcInitialSetPa
func (m *RpcInitialSetParametersResponse) String() string { return proto.CompactTextString(m) }
func (*RpcInitialSetParametersResponse) ProtoMessage() {}
func (*RpcInitialSetParametersResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 1}
}
func (m *RpcInitialSetParametersResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65330,7 +67161,7 @@ func (m *RpcInitialSetParametersResponseError) Reset() { *m = RpcInitial
func (m *RpcInitialSetParametersResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcInitialSetParametersResponseError) ProtoMessage() {}
func (*RpcInitialSetParametersResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 32, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 1, 0}
}
func (m *RpcInitialSetParametersResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65380,7 +67211,7 @@ func (m *RpcLog) Reset() { *m = RpcLog{} }
func (m *RpcLog) String() string { return proto.CompactTextString(m) }
func (*RpcLog) ProtoMessage() {}
func (*RpcLog) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 33}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 34}
}
func (m *RpcLog) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65416,7 +67247,7 @@ func (m *RpcLogSend) Reset() { *m = RpcLogSend{} }
func (m *RpcLogSend) String() string { return proto.CompactTextString(m) }
func (*RpcLogSend) ProtoMessage() {}
func (*RpcLogSend) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0}
}
func (m *RpcLogSend) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65454,7 +67285,7 @@ func (m *RpcLogSendRequest) Reset() { *m = RpcLogSendRequest{} }
func (m *RpcLogSendRequest) String() string { return proto.CompactTextString(m) }
func (*RpcLogSendRequest) ProtoMessage() {}
func (*RpcLogSendRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 0}
}
func (m *RpcLogSendRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65505,7 +67336,7 @@ func (m *RpcLogSendResponse) Reset() { *m = RpcLogSendResponse{} }
func (m *RpcLogSendResponse) String() string { return proto.CompactTextString(m) }
func (*RpcLogSendResponse) ProtoMessage() {}
func (*RpcLogSendResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 1}
}
func (m *RpcLogSendResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65550,7 +67381,7 @@ func (m *RpcLogSendResponseError) Reset() { *m = RpcLogSendResponseError
func (m *RpcLogSendResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcLogSendResponseError) ProtoMessage() {}
func (*RpcLogSendResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 33, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 1, 0}
}
func (m *RpcLogSendResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65600,7 +67431,7 @@ func (m *RpcProcess) Reset() { *m = RpcProcess{} }
func (m *RpcProcess) String() string { return proto.CompactTextString(m) }
func (*RpcProcess) ProtoMessage() {}
func (*RpcProcess) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35}
}
func (m *RpcProcess) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65636,7 +67467,7 @@ func (m *RpcProcessCancel) Reset() { *m = RpcProcessCancel{} }
func (m *RpcProcessCancel) String() string { return proto.CompactTextString(m) }
func (*RpcProcessCancel) ProtoMessage() {}
func (*RpcProcessCancel) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 0}
}
func (m *RpcProcessCancel) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65673,7 +67504,7 @@ func (m *RpcProcessCancelRequest) Reset() { *m = RpcProcessCancelRequest
func (m *RpcProcessCancelRequest) String() string { return proto.CompactTextString(m) }
func (*RpcProcessCancelRequest) ProtoMessage() {}
func (*RpcProcessCancelRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 0, 0}
}
func (m *RpcProcessCancelRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65717,7 +67548,7 @@ func (m *RpcProcessCancelResponse) Reset() { *m = RpcProcessCancelRespon
func (m *RpcProcessCancelResponse) String() string { return proto.CompactTextString(m) }
func (*RpcProcessCancelResponse) ProtoMessage() {}
func (*RpcProcessCancelResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 0, 1}
}
func (m *RpcProcessCancelResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65762,7 +67593,7 @@ func (m *RpcProcessCancelResponseError) Reset() { *m = RpcProcessCancelR
func (m *RpcProcessCancelResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcProcessCancelResponseError) ProtoMessage() {}
func (*RpcProcessCancelResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 0, 1, 0}
}
func (m *RpcProcessCancelResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65812,7 +67643,7 @@ func (m *RpcProcessSubscribe) Reset() { *m = RpcProcessSubscribe{} }
func (m *RpcProcessSubscribe) String() string { return proto.CompactTextString(m) }
func (*RpcProcessSubscribe) ProtoMessage() {}
func (*RpcProcessSubscribe) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 1}
}
func (m *RpcProcessSubscribe) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65848,7 +67679,7 @@ func (m *RpcProcessSubscribeRequest) Reset() { *m = RpcProcessSubscribeR
func (m *RpcProcessSubscribeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcProcessSubscribeRequest) ProtoMessage() {}
func (*RpcProcessSubscribeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 1, 0}
}
func (m *RpcProcessSubscribeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65885,7 +67716,7 @@ func (m *RpcProcessSubscribeResponse) Reset() { *m = RpcProcessSubscribe
func (m *RpcProcessSubscribeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcProcessSubscribeResponse) ProtoMessage() {}
func (*RpcProcessSubscribeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 1, 1}
}
func (m *RpcProcessSubscribeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65930,7 +67761,7 @@ func (m *RpcProcessSubscribeResponseError) Reset() { *m = RpcProcessSubs
func (m *RpcProcessSubscribeResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcProcessSubscribeResponseError) ProtoMessage() {}
func (*RpcProcessSubscribeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 1, 1, 0}
}
func (m *RpcProcessSubscribeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -65980,7 +67811,7 @@ func (m *RpcProcessUnsubscribe) Reset() { *m = RpcProcessUnsubscribe{} }
func (m *RpcProcessUnsubscribe) String() string { return proto.CompactTextString(m) }
func (*RpcProcessUnsubscribe) ProtoMessage() {}
func (*RpcProcessUnsubscribe) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 2}
}
func (m *RpcProcessUnsubscribe) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66016,7 +67847,7 @@ func (m *RpcProcessUnsubscribeRequest) Reset() { *m = RpcProcessUnsubscr
func (m *RpcProcessUnsubscribeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcProcessUnsubscribeRequest) ProtoMessage() {}
func (*RpcProcessUnsubscribeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 2, 0}
}
func (m *RpcProcessUnsubscribeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66053,7 +67884,7 @@ func (m *RpcProcessUnsubscribeResponse) Reset() { *m = RpcProcessUnsubsc
func (m *RpcProcessUnsubscribeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcProcessUnsubscribeResponse) ProtoMessage() {}
func (*RpcProcessUnsubscribeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 2, 1}
}
func (m *RpcProcessUnsubscribeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66098,7 +67929,7 @@ func (m *RpcProcessUnsubscribeResponseError) Reset() { *m = RpcProcessUn
func (m *RpcProcessUnsubscribeResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcProcessUnsubscribeResponseError) ProtoMessage() {}
func (*RpcProcessUnsubscribeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 34, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 2, 1, 0}
}
func (m *RpcProcessUnsubscribeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66149,7 +67980,7 @@ func (m *RpcGenericErrorResponse) Reset() { *m = RpcGenericErrorResponse
func (m *RpcGenericErrorResponse) String() string { return proto.CompactTextString(m) }
func (*RpcGenericErrorResponse) ProtoMessage() {}
func (*RpcGenericErrorResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 35}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 36}
}
func (m *RpcGenericErrorResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66194,7 +68025,7 @@ func (m *RpcGenericErrorResponseError) Reset() { *m = RpcGenericErrorRes
func (m *RpcGenericErrorResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcGenericErrorResponseError) ProtoMessage() {}
func (*RpcGenericErrorResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 35, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 0}
}
func (m *RpcGenericErrorResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66244,7 +68075,7 @@ func (m *RpcNotification) Reset() { *m = RpcNotification{} }
func (m *RpcNotification) String() string { return proto.CompactTextString(m) }
func (*RpcNotification) ProtoMessage() {}
func (*RpcNotification) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37}
}
func (m *RpcNotification) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66280,7 +68111,7 @@ func (m *RpcNotificationList) Reset() { *m = RpcNotificationList{} }
func (m *RpcNotificationList) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationList) ProtoMessage() {}
func (*RpcNotificationList) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0}
}
func (m *RpcNotificationList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66318,7 +68149,7 @@ func (m *RpcNotificationListRequest) Reset() { *m = RpcNotificationListR
func (m *RpcNotificationListRequest) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationListRequest) ProtoMessage() {}
func (*RpcNotificationListRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 0}
}
func (m *RpcNotificationListRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66370,7 +68201,7 @@ func (m *RpcNotificationListResponse) Reset() { *m = RpcNotificationList
func (m *RpcNotificationListResponse) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationListResponse) ProtoMessage() {}
func (*RpcNotificationListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 1}
}
func (m *RpcNotificationListResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66422,7 +68253,7 @@ func (m *RpcNotificationListResponseError) Reset() { *m = RpcNotificatio
func (m *RpcNotificationListResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationListResponseError) ProtoMessage() {}
func (*RpcNotificationListResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 1, 0}
}
func (m *RpcNotificationListResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66472,7 +68303,7 @@ func (m *RpcNotificationReply) Reset() { *m = RpcNotificationReply{} }
func (m *RpcNotificationReply) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationReply) ProtoMessage() {}
func (*RpcNotificationReply) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1}
}
func (m *RpcNotificationReply) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66510,7 +68341,7 @@ func (m *RpcNotificationReplyRequest) Reset() { *m = RpcNotificationRepl
func (m *RpcNotificationReplyRequest) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationReplyRequest) ProtoMessage() {}
func (*RpcNotificationReplyRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 0}
}
func (m *RpcNotificationReplyRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66561,7 +68392,7 @@ func (m *RpcNotificationReplyResponse) Reset() { *m = RpcNotificationRep
func (m *RpcNotificationReplyResponse) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationReplyResponse) ProtoMessage() {}
func (*RpcNotificationReplyResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 1}
}
func (m *RpcNotificationReplyResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66606,7 +68437,7 @@ func (m *RpcNotificationReplyResponseError) Reset() { *m = RpcNotificati
func (m *RpcNotificationReplyResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationReplyResponseError) ProtoMessage() {}
func (*RpcNotificationReplyResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 1, 0}
}
func (m *RpcNotificationReplyResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66656,7 +68487,7 @@ func (m *RpcNotificationTest) Reset() { *m = RpcNotificationTest{} }
func (m *RpcNotificationTest) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationTest) ProtoMessage() {}
func (*RpcNotificationTest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2}
}
func (m *RpcNotificationTest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66692,7 +68523,7 @@ func (m *RpcNotificationTestRequest) Reset() { *m = RpcNotificationTestR
func (m *RpcNotificationTestRequest) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationTestRequest) ProtoMessage() {}
func (*RpcNotificationTestRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 0}
}
func (m *RpcNotificationTestRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66730,7 +68561,7 @@ func (m *RpcNotificationTestResponse) Reset() { *m = RpcNotificationTest
func (m *RpcNotificationTestResponse) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationTestResponse) ProtoMessage() {}
func (*RpcNotificationTestResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 1}
}
func (m *RpcNotificationTestResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66782,7 +68613,7 @@ func (m *RpcNotificationTestResponseError) Reset() { *m = RpcNotificatio
func (m *RpcNotificationTestResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcNotificationTestResponseError) ProtoMessage() {}
func (*RpcNotificationTestResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 36, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 1, 0}
}
func (m *RpcNotificationTestResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66836,7 +68667,7 @@ func (m *RpcMembership) Reset() { *m = RpcMembership{} }
func (m *RpcMembership) String() string { return proto.CompactTextString(m) }
func (*RpcMembership) ProtoMessage() {}
func (*RpcMembership) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38}
}
func (m *RpcMembership) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66876,7 +68707,7 @@ func (m *RpcMembershipGetStatus) Reset() { *m = RpcMembershipGetStatus{}
func (m *RpcMembershipGetStatus) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetStatus) ProtoMessage() {}
func (*RpcMembershipGetStatus) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0}
}
func (m *RpcMembershipGetStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66915,7 +68746,7 @@ func (m *RpcMembershipGetStatusRequest) Reset() { *m = RpcMembershipGetS
func (m *RpcMembershipGetStatusRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetStatusRequest) ProtoMessage() {}
func (*RpcMembershipGetStatusRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 0}
}
func (m *RpcMembershipGetStatusRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -66960,7 +68791,7 @@ func (m *RpcMembershipGetStatusResponse) Reset() { *m = RpcMembershipGet
func (m *RpcMembershipGetStatusResponse) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetStatusResponse) ProtoMessage() {}
func (*RpcMembershipGetStatusResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 1}
}
func (m *RpcMembershipGetStatusResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67012,7 +68843,7 @@ func (m *RpcMembershipGetStatusResponseError) Reset() { *m = RpcMembersh
func (m *RpcMembershipGetStatusResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetStatusResponseError) ProtoMessage() {}
func (*RpcMembershipGetStatusResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 1, 0}
}
func (m *RpcMembershipGetStatusResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67065,7 +68896,7 @@ func (m *RpcMembershipIsNameValid) Reset() { *m = RpcMembershipIsNameVal
func (m *RpcMembershipIsNameValid) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipIsNameValid) ProtoMessage() {}
func (*RpcMembershipIsNameValid) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1}
}
func (m *RpcMembershipIsNameValid) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67104,7 +68935,7 @@ func (m *RpcMembershipIsNameValidRequest) Reset() { *m = RpcMembershipIs
func (m *RpcMembershipIsNameValidRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipIsNameValidRequest) ProtoMessage() {}
func (*RpcMembershipIsNameValidRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 0}
}
func (m *RpcMembershipIsNameValidRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67162,7 +68993,7 @@ func (m *RpcMembershipIsNameValidResponse) Reset() { *m = RpcMembershipI
func (m *RpcMembershipIsNameValidResponse) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipIsNameValidResponse) ProtoMessage() {}
func (*RpcMembershipIsNameValidResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 1}
}
func (m *RpcMembershipIsNameValidResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67207,7 +69038,7 @@ func (m *RpcMembershipIsNameValidResponseError) Reset() { *m = RpcMember
func (m *RpcMembershipIsNameValidResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipIsNameValidResponseError) ProtoMessage() {}
func (*RpcMembershipIsNameValidResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 1, 0}
}
func (m *RpcMembershipIsNameValidResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67260,7 +69091,7 @@ func (m *RpcMembershipRegisterPaymentRequest) Reset() { *m = RpcMembersh
func (m *RpcMembershipRegisterPaymentRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipRegisterPaymentRequest) ProtoMessage() {}
func (*RpcMembershipRegisterPaymentRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2}
}
func (m *RpcMembershipRegisterPaymentRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67311,7 +69142,7 @@ func (m *RpcMembershipRegisterPaymentRequestRequest) String() string {
}
func (*RpcMembershipRegisterPaymentRequestRequest) ProtoMessage() {}
func (*RpcMembershipRegisterPaymentRequestRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 0}
}
func (m *RpcMembershipRegisterPaymentRequestRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67392,7 +69223,7 @@ func (m *RpcMembershipRegisterPaymentRequestResponse) String() string {
}
func (*RpcMembershipRegisterPaymentRequestResponse) ProtoMessage() {}
func (*RpcMembershipRegisterPaymentRequestResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 1}
}
func (m *RpcMembershipRegisterPaymentRequestResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67455,7 +69286,7 @@ func (m *RpcMembershipRegisterPaymentRequestResponseError) String() string {
}
func (*RpcMembershipRegisterPaymentRequestResponseError) ProtoMessage() {}
func (*RpcMembershipRegisterPaymentRequestResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 1, 0}
}
func (m *RpcMembershipRegisterPaymentRequestResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67510,7 +69341,7 @@ func (m *RpcMembershipGetPortalLinkUrl) Reset() { *m = RpcMembershipGetP
func (m *RpcMembershipGetPortalLinkUrl) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetPortalLinkUrl) ProtoMessage() {}
func (*RpcMembershipGetPortalLinkUrl) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3}
}
func (m *RpcMembershipGetPortalLinkUrl) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67546,7 +69377,7 @@ func (m *RpcMembershipGetPortalLinkUrlRequest) Reset() { *m = RpcMembers
func (m *RpcMembershipGetPortalLinkUrlRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetPortalLinkUrlRequest) ProtoMessage() {}
func (*RpcMembershipGetPortalLinkUrlRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 0}
}
func (m *RpcMembershipGetPortalLinkUrlRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67584,7 +69415,7 @@ func (m *RpcMembershipGetPortalLinkUrlResponse) Reset() { *m = RpcMember
func (m *RpcMembershipGetPortalLinkUrlResponse) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetPortalLinkUrlResponse) ProtoMessage() {}
func (*RpcMembershipGetPortalLinkUrlResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 1}
}
func (m *RpcMembershipGetPortalLinkUrlResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67640,7 +69471,7 @@ func (m *RpcMembershipGetPortalLinkUrlResponseError) String() string {
}
func (*RpcMembershipGetPortalLinkUrlResponseError) ProtoMessage() {}
func (*RpcMembershipGetPortalLinkUrlResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 1, 0}
}
func (m *RpcMembershipGetPortalLinkUrlResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67690,7 +69521,7 @@ func (m *RpcMembershipFinalize) Reset() { *m = RpcMembershipFinalize{} }
func (m *RpcMembershipFinalize) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipFinalize) ProtoMessage() {}
func (*RpcMembershipFinalize) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 4}
}
func (m *RpcMembershipFinalize) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67730,7 +69561,7 @@ func (m *RpcMembershipFinalizeRequest) Reset() { *m = RpcMembershipFinal
func (m *RpcMembershipFinalizeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipFinalizeRequest) ProtoMessage() {}
func (*RpcMembershipFinalizeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 4, 0}
}
func (m *RpcMembershipFinalizeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67781,7 +69612,7 @@ func (m *RpcMembershipFinalizeResponse) Reset() { *m = RpcMembershipFina
func (m *RpcMembershipFinalizeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipFinalizeResponse) ProtoMessage() {}
func (*RpcMembershipFinalizeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 4, 1}
}
func (m *RpcMembershipFinalizeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67826,7 +69657,7 @@ func (m *RpcMembershipFinalizeResponseError) Reset() { *m = RpcMembershi
func (m *RpcMembershipFinalizeResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipFinalizeResponseError) ProtoMessage() {}
func (*RpcMembershipFinalizeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 4, 1, 0}
}
func (m *RpcMembershipFinalizeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67881,7 +69712,7 @@ func (m *RpcMembershipGetVerificationEmailStatus) Reset() {
func (m *RpcMembershipGetVerificationEmailStatus) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetVerificationEmailStatus) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmailStatus) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 5}
}
func (m *RpcMembershipGetVerificationEmailStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67921,7 +69752,7 @@ func (m *RpcMembershipGetVerificationEmailStatusRequest) String() string {
}
func (*RpcMembershipGetVerificationEmailStatusRequest) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmailStatusRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 5, 0}
}
func (m *RpcMembershipGetVerificationEmailStatusRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -67963,7 +69794,7 @@ func (m *RpcMembershipGetVerificationEmailStatusResponse) String() string {
}
func (*RpcMembershipGetVerificationEmailStatusResponse) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmailStatusResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 5, 1}
}
func (m *RpcMembershipGetVerificationEmailStatusResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68019,7 +69850,7 @@ func (m *RpcMembershipGetVerificationEmailStatusResponseError) String() string {
}
func (*RpcMembershipGetVerificationEmailStatusResponseError) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmailStatusResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 5, 1, 0}
}
func (m *RpcMembershipGetVerificationEmailStatusResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68072,7 +69903,7 @@ func (m *RpcMembershipGetVerificationEmail) Reset() { *m = RpcMembership
func (m *RpcMembershipGetVerificationEmail) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetVerificationEmail) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmail) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 6}
}
func (m *RpcMembershipGetVerificationEmail) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68115,7 +69946,7 @@ func (m *RpcMembershipGetVerificationEmailRequest) Reset() {
func (m *RpcMembershipGetVerificationEmailRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetVerificationEmailRequest) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmailRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 6, 0}
}
func (m *RpcMembershipGetVerificationEmailRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68184,7 +70015,7 @@ func (m *RpcMembershipGetVerificationEmailResponse) String() string {
}
func (*RpcMembershipGetVerificationEmailResponse) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmailResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 6, 1}
}
func (m *RpcMembershipGetVerificationEmailResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68233,7 +70064,7 @@ func (m *RpcMembershipGetVerificationEmailResponseError) String() string {
}
func (*RpcMembershipGetVerificationEmailResponseError) ProtoMessage() {}
func (*RpcMembershipGetVerificationEmailResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 6, 1, 0}
}
func (m *RpcMembershipGetVerificationEmailResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68286,7 +70117,7 @@ func (m *RpcMembershipVerifyEmailCode) Reset() { *m = RpcMembershipVerif
func (m *RpcMembershipVerifyEmailCode) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipVerifyEmailCode) ProtoMessage() {}
func (*RpcMembershipVerifyEmailCode) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 7}
}
func (m *RpcMembershipVerifyEmailCode) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68323,7 +70154,7 @@ func (m *RpcMembershipVerifyEmailCodeRequest) Reset() { *m = RpcMembersh
func (m *RpcMembershipVerifyEmailCodeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipVerifyEmailCodeRequest) ProtoMessage() {}
func (*RpcMembershipVerifyEmailCodeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 7, 0}
}
func (m *RpcMembershipVerifyEmailCodeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68367,7 +70198,7 @@ func (m *RpcMembershipVerifyEmailCodeResponse) Reset() { *m = RpcMembers
func (m *RpcMembershipVerifyEmailCodeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipVerifyEmailCodeResponse) ProtoMessage() {}
func (*RpcMembershipVerifyEmailCodeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 7, 1}
}
func (m *RpcMembershipVerifyEmailCodeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68416,7 +70247,7 @@ func (m *RpcMembershipVerifyEmailCodeResponseError) String() string {
}
func (*RpcMembershipVerifyEmailCodeResponseError) ProtoMessage() {}
func (*RpcMembershipVerifyEmailCodeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 7, 1, 0}
}
func (m *RpcMembershipVerifyEmailCodeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68469,7 +70300,7 @@ func (m *RpcMembershipGetTiers) Reset() { *m = RpcMembershipGetTiers{} }
func (m *RpcMembershipGetTiers) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetTiers) ProtoMessage() {}
func (*RpcMembershipGetTiers) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 8}
}
func (m *RpcMembershipGetTiers) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68509,7 +70340,7 @@ func (m *RpcMembershipGetTiersRequest) Reset() { *m = RpcMembershipGetTi
func (m *RpcMembershipGetTiersRequest) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetTiersRequest) ProtoMessage() {}
func (*RpcMembershipGetTiersRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 8, 0}
}
func (m *RpcMembershipGetTiersRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68561,7 +70392,7 @@ func (m *RpcMembershipGetTiersResponse) Reset() { *m = RpcMembershipGetT
func (m *RpcMembershipGetTiersResponse) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetTiersResponse) ProtoMessage() {}
func (*RpcMembershipGetTiersResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 8, 1}
}
func (m *RpcMembershipGetTiersResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68613,7 +70444,7 @@ func (m *RpcMembershipGetTiersResponseError) Reset() { *m = RpcMembershi
func (m *RpcMembershipGetTiersResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipGetTiersResponseError) ProtoMessage() {}
func (*RpcMembershipGetTiersResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 8, 1, 0}
}
func (m *RpcMembershipGetTiersResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68663,7 +70494,7 @@ func (m *RpcMembershipVerifyAppStoreReceipt) Reset() { *m = RpcMembershi
func (m *RpcMembershipVerifyAppStoreReceipt) String() string { return proto.CompactTextString(m) }
func (*RpcMembershipVerifyAppStoreReceipt) ProtoMessage() {}
func (*RpcMembershipVerifyAppStoreReceipt) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 9}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 9}
}
func (m *RpcMembershipVerifyAppStoreReceipt) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68705,7 +70536,7 @@ func (m *RpcMembershipVerifyAppStoreReceiptRequest) String() string {
}
func (*RpcMembershipVerifyAppStoreReceiptRequest) ProtoMessage() {}
func (*RpcMembershipVerifyAppStoreReceiptRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 9, 0}
}
func (m *RpcMembershipVerifyAppStoreReceiptRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68753,7 +70584,7 @@ func (m *RpcMembershipVerifyAppStoreReceiptResponse) String() string {
}
func (*RpcMembershipVerifyAppStoreReceiptResponse) ProtoMessage() {}
func (*RpcMembershipVerifyAppStoreReceiptResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 9, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 9, 1}
}
func (m *RpcMembershipVerifyAppStoreReceiptResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68802,7 +70633,7 @@ func (m *RpcMembershipVerifyAppStoreReceiptResponseError) String() string {
}
func (*RpcMembershipVerifyAppStoreReceiptResponseError) ProtoMessage() {}
func (*RpcMembershipVerifyAppStoreReceiptResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 37, 9, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 9, 1, 0}
}
func (m *RpcMembershipVerifyAppStoreReceiptResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68852,7 +70683,7 @@ func (m *RpcNameService) Reset() { *m = RpcNameService{} }
func (m *RpcNameService) String() string { return proto.CompactTextString(m) }
func (*RpcNameService) ProtoMessage() {}
func (*RpcNameService) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39}
}
func (m *RpcNameService) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68888,7 +70719,7 @@ func (m *RpcNameServiceResolveName) Reset() { *m = RpcNameServiceResolve
func (m *RpcNameServiceResolveName) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveName) ProtoMessage() {}
func (*RpcNameServiceResolveName) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0}
}
func (m *RpcNameServiceResolveName) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68926,7 +70757,7 @@ func (m *RpcNameServiceResolveNameRequest) Reset() { *m = RpcNameService
func (m *RpcNameServiceResolveNameRequest) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveNameRequest) ProtoMessage() {}
func (*RpcNameServiceResolveNameRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 0}
}
func (m *RpcNameServiceResolveNameRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -68991,7 +70822,7 @@ func (m *RpcNameServiceResolveNameResponse) Reset() { *m = RpcNameServic
func (m *RpcNameServiceResolveNameResponse) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveNameResponse) ProtoMessage() {}
func (*RpcNameServiceResolveNameResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 1}
}
func (m *RpcNameServiceResolveNameResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69080,7 +70911,7 @@ func (m *RpcNameServiceResolveNameResponseError) Reset() {
func (m *RpcNameServiceResolveNameResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveNameResponseError) ProtoMessage() {}
func (*RpcNameServiceResolveNameResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 1, 0}
}
func (m *RpcNameServiceResolveNameResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69130,7 +70961,7 @@ func (m *RpcNameServiceResolveAnyId) Reset() { *m = RpcNameServiceResolv
func (m *RpcNameServiceResolveAnyId) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveAnyId) ProtoMessage() {}
func (*RpcNameServiceResolveAnyId) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 1}
}
func (m *RpcNameServiceResolveAnyId) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69167,7 +70998,7 @@ func (m *RpcNameServiceResolveAnyIdRequest) Reset() { *m = RpcNameServic
func (m *RpcNameServiceResolveAnyIdRequest) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveAnyIdRequest) ProtoMessage() {}
func (*RpcNameServiceResolveAnyIdRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 1, 0}
}
func (m *RpcNameServiceResolveAnyIdRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69215,7 +71046,7 @@ func (m *RpcNameServiceResolveAnyIdResponse) Reset() { *m = RpcNameServi
func (m *RpcNameServiceResolveAnyIdResponse) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveAnyIdResponse) ProtoMessage() {}
func (*RpcNameServiceResolveAnyIdResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 1, 1}
}
func (m *RpcNameServiceResolveAnyIdResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69283,7 +71114,7 @@ func (m *RpcNameServiceResolveAnyIdResponseError) Reset() {
func (m *RpcNameServiceResolveAnyIdResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveAnyIdResponseError) ProtoMessage() {}
func (*RpcNameServiceResolveAnyIdResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 1, 1, 0}
}
func (m *RpcNameServiceResolveAnyIdResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69333,7 +71164,7 @@ func (m *RpcNameServiceResolveSpaceId) Reset() { *m = RpcNameServiceReso
func (m *RpcNameServiceResolveSpaceId) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveSpaceId) ProtoMessage() {}
func (*RpcNameServiceResolveSpaceId) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 2}
}
func (m *RpcNameServiceResolveSpaceId) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69370,7 +71201,7 @@ func (m *RpcNameServiceResolveSpaceIdRequest) Reset() { *m = RpcNameServ
func (m *RpcNameServiceResolveSpaceIdRequest) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveSpaceIdRequest) ProtoMessage() {}
func (*RpcNameServiceResolveSpaceIdRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 2, 0}
}
func (m *RpcNameServiceResolveSpaceIdRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69418,7 +71249,7 @@ func (m *RpcNameServiceResolveSpaceIdResponse) Reset() { *m = RpcNameSer
func (m *RpcNameServiceResolveSpaceIdResponse) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceResolveSpaceIdResponse) ProtoMessage() {}
func (*RpcNameServiceResolveSpaceIdResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 2, 1}
}
func (m *RpcNameServiceResolveSpaceIdResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69488,7 +71319,7 @@ func (m *RpcNameServiceResolveSpaceIdResponseError) String() string {
}
func (*RpcNameServiceResolveSpaceIdResponseError) ProtoMessage() {}
func (*RpcNameServiceResolveSpaceIdResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 2, 1, 0}
}
func (m *RpcNameServiceResolveSpaceIdResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69538,7 +71369,7 @@ func (m *RpcNameServiceUserAccount) Reset() { *m = RpcNameServiceUserAcc
func (m *RpcNameServiceUserAccount) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceUserAccount) ProtoMessage() {}
func (*RpcNameServiceUserAccount) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 3}
}
func (m *RpcNameServiceUserAccount) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69574,7 +71405,7 @@ func (m *RpcNameServiceUserAccountGet) Reset() { *m = RpcNameServiceUser
func (m *RpcNameServiceUserAccountGet) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceUserAccountGet) ProtoMessage() {}
func (*RpcNameServiceUserAccountGet) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 3, 0}
}
func (m *RpcNameServiceUserAccountGet) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69610,7 +71441,7 @@ func (m *RpcNameServiceUserAccountGetRequest) Reset() { *m = RpcNameServ
func (m *RpcNameServiceUserAccountGetRequest) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceUserAccountGetRequest) ProtoMessage() {}
func (*RpcNameServiceUserAccountGetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 3, 0, 0}
}
func (m *RpcNameServiceUserAccountGetRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69656,7 +71487,7 @@ func (m *RpcNameServiceUserAccountGetResponse) Reset() { *m = RpcNameSer
func (m *RpcNameServiceUserAccountGetResponse) String() string { return proto.CompactTextString(m) }
func (*RpcNameServiceUserAccountGetResponse) ProtoMessage() {}
func (*RpcNameServiceUserAccountGetResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 3, 0, 1}
}
func (m *RpcNameServiceUserAccountGetResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69733,7 +71564,7 @@ func (m *RpcNameServiceUserAccountGetResponseError) String() string {
}
func (*RpcNameServiceUserAccountGetResponseError) ProtoMessage() {}
func (*RpcNameServiceUserAccountGetResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 38, 3, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 3, 0, 1, 0}
}
func (m *RpcNameServiceUserAccountGetResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69783,7 +71614,7 @@ func (m *RpcBroadcast) Reset() { *m = RpcBroadcast{} }
func (m *RpcBroadcast) String() string { return proto.CompactTextString(m) }
func (*RpcBroadcast) ProtoMessage() {}
func (*RpcBroadcast) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 39}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 40}
}
func (m *RpcBroadcast) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69819,7 +71650,7 @@ func (m *RpcBroadcastPayloadEvent) Reset() { *m = RpcBroadcastPayloadEve
func (m *RpcBroadcastPayloadEvent) String() string { return proto.CompactTextString(m) }
func (*RpcBroadcastPayloadEvent) ProtoMessage() {}
func (*RpcBroadcastPayloadEvent) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0}
}
func (m *RpcBroadcastPayloadEvent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69856,7 +71687,7 @@ func (m *RpcBroadcastPayloadEventRequest) Reset() { *m = RpcBroadcastPay
func (m *RpcBroadcastPayloadEventRequest) String() string { return proto.CompactTextString(m) }
func (*RpcBroadcastPayloadEventRequest) ProtoMessage() {}
func (*RpcBroadcastPayloadEventRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 0}
}
func (m *RpcBroadcastPayloadEventRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69901,7 +71732,7 @@ func (m *RpcBroadcastPayloadEventResponse) Reset() { *m = RpcBroadcastPa
func (m *RpcBroadcastPayloadEventResponse) String() string { return proto.CompactTextString(m) }
func (*RpcBroadcastPayloadEventResponse) ProtoMessage() {}
func (*RpcBroadcastPayloadEventResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 1}
}
func (m *RpcBroadcastPayloadEventResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -69953,7 +71784,7 @@ func (m *RpcBroadcastPayloadEventResponseError) Reset() { *m = RpcBroadc
func (m *RpcBroadcastPayloadEventResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcBroadcastPayloadEventResponseError) ProtoMessage() {}
func (*RpcBroadcastPayloadEventResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 39, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 1, 0}
}
func (m *RpcBroadcastPayloadEventResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70003,7 +71834,7 @@ func (m *RpcDevice) Reset() { *m = RpcDevice{} }
func (m *RpcDevice) String() string { return proto.CompactTextString(m) }
func (*RpcDevice) ProtoMessage() {}
func (*RpcDevice) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41}
}
func (m *RpcDevice) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70039,7 +71870,7 @@ func (m *RpcDeviceSetName) Reset() { *m = RpcDeviceSetName{} }
func (m *RpcDeviceSetName) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceSetName) ProtoMessage() {}
func (*RpcDeviceSetName) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0}
}
func (m *RpcDeviceSetName) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70077,7 +71908,7 @@ func (m *RpcDeviceSetNameRequest) Reset() { *m = RpcDeviceSetNameRequest
func (m *RpcDeviceSetNameRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceSetNameRequest) ProtoMessage() {}
func (*RpcDeviceSetNameRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 0}
}
func (m *RpcDeviceSetNameRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70128,7 +71959,7 @@ func (m *RpcDeviceSetNameResponse) Reset() { *m = RpcDeviceSetNameRespon
func (m *RpcDeviceSetNameResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceSetNameResponse) ProtoMessage() {}
func (*RpcDeviceSetNameResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 1}
}
func (m *RpcDeviceSetNameResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70173,7 +72004,7 @@ func (m *RpcDeviceSetNameResponseError) Reset() { *m = RpcDeviceSetNameR
func (m *RpcDeviceSetNameResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceSetNameResponseError) ProtoMessage() {}
func (*RpcDeviceSetNameResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 1, 0}
}
func (m *RpcDeviceSetNameResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70223,7 +72054,7 @@ func (m *RpcDeviceList) Reset() { *m = RpcDeviceList{} }
func (m *RpcDeviceList) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceList) ProtoMessage() {}
func (*RpcDeviceList) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1}
}
func (m *RpcDeviceList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70259,7 +72090,7 @@ func (m *RpcDeviceListRequest) Reset() { *m = RpcDeviceListRequest{} }
func (m *RpcDeviceListRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceListRequest) ProtoMessage() {}
func (*RpcDeviceListRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 0}
}
func (m *RpcDeviceListRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70297,7 +72128,7 @@ func (m *RpcDeviceListResponse) Reset() { *m = RpcDeviceListResponse{} }
func (m *RpcDeviceListResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceListResponse) ProtoMessage() {}
func (*RpcDeviceListResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 1}
}
func (m *RpcDeviceListResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70349,7 +72180,7 @@ func (m *RpcDeviceListResponseError) Reset() { *m = RpcDeviceListRespons
func (m *RpcDeviceListResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceListResponseError) ProtoMessage() {}
func (*RpcDeviceListResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 1, 0}
}
func (m *RpcDeviceListResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70399,7 +72230,7 @@ func (m *RpcDeviceNetworkState) Reset() { *m = RpcDeviceNetworkState{} }
func (m *RpcDeviceNetworkState) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceNetworkState) ProtoMessage() {}
func (*RpcDeviceNetworkState) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2}
}
func (m *RpcDeviceNetworkState) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70435,7 +72266,7 @@ func (m *RpcDeviceNetworkStateSet) Reset() { *m = RpcDeviceNetworkStateS
func (m *RpcDeviceNetworkStateSet) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceNetworkStateSet) ProtoMessage() {}
func (*RpcDeviceNetworkStateSet) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 0}
}
func (m *RpcDeviceNetworkStateSet) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70472,7 +72303,7 @@ func (m *RpcDeviceNetworkStateSetRequest) Reset() { *m = RpcDeviceNetwor
func (m *RpcDeviceNetworkStateSetRequest) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceNetworkStateSetRequest) ProtoMessage() {}
func (*RpcDeviceNetworkStateSetRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 2, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 0, 0}
}
func (m *RpcDeviceNetworkStateSetRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70516,7 +72347,7 @@ func (m *RpcDeviceNetworkStateSetResponse) Reset() { *m = RpcDeviceNetwo
func (m *RpcDeviceNetworkStateSetResponse) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceNetworkStateSetResponse) ProtoMessage() {}
func (*RpcDeviceNetworkStateSetResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 2, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 0, 1}
}
func (m *RpcDeviceNetworkStateSetResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70561,7 +72392,7 @@ func (m *RpcDeviceNetworkStateSetResponseError) Reset() { *m = RpcDevice
func (m *RpcDeviceNetworkStateSetResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcDeviceNetworkStateSetResponseError) ProtoMessage() {}
func (*RpcDeviceNetworkStateSetResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 40, 2, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 0, 1, 0}
}
func (m *RpcDeviceNetworkStateSetResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70611,7 +72442,7 @@ func (m *RpcChat) Reset() { *m = RpcChat{} }
func (m *RpcChat) String() string { return proto.CompactTextString(m) }
func (*RpcChat) ProtoMessage() {}
func (*RpcChat) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42}
}
func (m *RpcChat) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70647,7 +72478,7 @@ func (m *RpcChatAddMessage) Reset() { *m = RpcChatAddMessage{} }
func (m *RpcChatAddMessage) String() string { return proto.CompactTextString(m) }
func (*RpcChatAddMessage) ProtoMessage() {}
func (*RpcChatAddMessage) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 0}
}
func (m *RpcChatAddMessage) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70685,7 +72516,7 @@ func (m *RpcChatAddMessageRequest) Reset() { *m = RpcChatAddMessageReque
func (m *RpcChatAddMessageRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatAddMessageRequest) ProtoMessage() {}
func (*RpcChatAddMessageRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 0, 0}
}
func (m *RpcChatAddMessageRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70738,7 +72569,7 @@ func (m *RpcChatAddMessageResponse) Reset() { *m = RpcChatAddMessageResp
func (m *RpcChatAddMessageResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatAddMessageResponse) ProtoMessage() {}
func (*RpcChatAddMessageResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 0, 1}
}
func (m *RpcChatAddMessageResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70797,7 +72628,7 @@ func (m *RpcChatAddMessageResponseError) Reset() { *m = RpcChatAddMessag
func (m *RpcChatAddMessageResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatAddMessageResponseError) ProtoMessage() {}
func (*RpcChatAddMessageResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 0, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 0, 1, 0}
}
func (m *RpcChatAddMessageResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70847,7 +72678,7 @@ func (m *RpcChatEditMessageContent) Reset() { *m = RpcChatEditMessageCon
func (m *RpcChatEditMessageContent) String() string { return proto.CompactTextString(m) }
func (*RpcChatEditMessageContent) ProtoMessage() {}
func (*RpcChatEditMessageContent) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 1}
}
func (m *RpcChatEditMessageContent) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70886,7 +72717,7 @@ func (m *RpcChatEditMessageContentRequest) Reset() { *m = RpcChatEditMes
func (m *RpcChatEditMessageContentRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatEditMessageContentRequest) ProtoMessage() {}
func (*RpcChatEditMessageContentRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 1, 0}
}
func (m *RpcChatEditMessageContentRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70944,7 +72775,7 @@ func (m *RpcChatEditMessageContentResponse) Reset() { *m = RpcChatEditMe
func (m *RpcChatEditMessageContentResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatEditMessageContentResponse) ProtoMessage() {}
func (*RpcChatEditMessageContentResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 1, 1}
}
func (m *RpcChatEditMessageContentResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -70991,7 +72822,7 @@ func (m *RpcChatEditMessageContentResponseError) Reset() {
func (m *RpcChatEditMessageContentResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatEditMessageContentResponseError) ProtoMessage() {}
func (*RpcChatEditMessageContentResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 1, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 1, 1, 0}
}
func (m *RpcChatEditMessageContentResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71041,7 +72872,7 @@ func (m *RpcChatToggleMessageReaction) Reset() { *m = RpcChatToggleMessa
func (m *RpcChatToggleMessageReaction) String() string { return proto.CompactTextString(m) }
func (*RpcChatToggleMessageReaction) ProtoMessage() {}
func (*RpcChatToggleMessageReaction) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 2}
}
func (m *RpcChatToggleMessageReaction) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71080,7 +72911,7 @@ func (m *RpcChatToggleMessageReactionRequest) Reset() { *m = RpcChatTogg
func (m *RpcChatToggleMessageReactionRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatToggleMessageReactionRequest) ProtoMessage() {}
func (*RpcChatToggleMessageReactionRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 2, 0}
}
func (m *RpcChatToggleMessageReactionRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71138,7 +72969,7 @@ func (m *RpcChatToggleMessageReactionResponse) Reset() { *m = RpcChatTog
func (m *RpcChatToggleMessageReactionResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatToggleMessageReactionResponse) ProtoMessage() {}
func (*RpcChatToggleMessageReactionResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 2, 1}
}
func (m *RpcChatToggleMessageReactionResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71187,7 +73018,7 @@ func (m *RpcChatToggleMessageReactionResponseError) String() string {
}
func (*RpcChatToggleMessageReactionResponseError) ProtoMessage() {}
func (*RpcChatToggleMessageReactionResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 2, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 2, 1, 0}
}
func (m *RpcChatToggleMessageReactionResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71237,7 +73068,7 @@ func (m *RpcChatDeleteMessage) Reset() { *m = RpcChatDeleteMessage{} }
func (m *RpcChatDeleteMessage) String() string { return proto.CompactTextString(m) }
func (*RpcChatDeleteMessage) ProtoMessage() {}
func (*RpcChatDeleteMessage) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 3}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 3}
}
func (m *RpcChatDeleteMessage) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71275,7 +73106,7 @@ func (m *RpcChatDeleteMessageRequest) Reset() { *m = RpcChatDeleteMessag
func (m *RpcChatDeleteMessageRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatDeleteMessageRequest) ProtoMessage() {}
func (*RpcChatDeleteMessageRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 3, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 3, 0}
}
func (m *RpcChatDeleteMessageRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71326,7 +73157,7 @@ func (m *RpcChatDeleteMessageResponse) Reset() { *m = RpcChatDeleteMessa
func (m *RpcChatDeleteMessageResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatDeleteMessageResponse) ProtoMessage() {}
func (*RpcChatDeleteMessageResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 3, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 3, 1}
}
func (m *RpcChatDeleteMessageResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71371,7 +73202,7 @@ func (m *RpcChatDeleteMessageResponseError) Reset() { *m = RpcChatDelete
func (m *RpcChatDeleteMessageResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatDeleteMessageResponseError) ProtoMessage() {}
func (*RpcChatDeleteMessageResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 3, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 3, 1, 0}
}
func (m *RpcChatDeleteMessageResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71421,7 +73252,7 @@ func (m *RpcChatGetMessages) Reset() { *m = RpcChatGetMessages{} }
func (m *RpcChatGetMessages) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessages) ProtoMessage() {}
func (*RpcChatGetMessages) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 4}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 4}
}
func (m *RpcChatGetMessages) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71462,7 +73293,7 @@ func (m *RpcChatGetMessagesRequest) Reset() { *m = RpcChatGetMessagesReq
func (m *RpcChatGetMessagesRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessagesRequest) ProtoMessage() {}
func (*RpcChatGetMessagesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 4, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 4, 0}
}
func (m *RpcChatGetMessagesRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71536,7 +73367,7 @@ func (m *RpcChatGetMessagesResponse) Reset() { *m = RpcChatGetMessagesRe
func (m *RpcChatGetMessagesResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessagesResponse) ProtoMessage() {}
func (*RpcChatGetMessagesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 4, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 4, 1}
}
func (m *RpcChatGetMessagesResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71595,7 +73426,7 @@ func (m *RpcChatGetMessagesResponseError) Reset() { *m = RpcChatGetMessa
func (m *RpcChatGetMessagesResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessagesResponseError) ProtoMessage() {}
func (*RpcChatGetMessagesResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 4, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 4, 1, 0}
}
func (m *RpcChatGetMessagesResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71645,7 +73476,7 @@ func (m *RpcChatGetMessagesByIds) Reset() { *m = RpcChatGetMessagesByIds
func (m *RpcChatGetMessagesByIds) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessagesByIds) ProtoMessage() {}
func (*RpcChatGetMessagesByIds) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 5}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 5}
}
func (m *RpcChatGetMessagesByIds) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71683,7 +73514,7 @@ func (m *RpcChatGetMessagesByIdsRequest) Reset() { *m = RpcChatGetMessag
func (m *RpcChatGetMessagesByIdsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessagesByIdsRequest) ProtoMessage() {}
func (*RpcChatGetMessagesByIdsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 5, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 5, 0}
}
func (m *RpcChatGetMessagesByIdsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71735,7 +73566,7 @@ func (m *RpcChatGetMessagesByIdsResponse) Reset() { *m = RpcChatGetMessa
func (m *RpcChatGetMessagesByIdsResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessagesByIdsResponse) ProtoMessage() {}
func (*RpcChatGetMessagesByIdsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 5, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 5, 1}
}
func (m *RpcChatGetMessagesByIdsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71787,7 +73618,7 @@ func (m *RpcChatGetMessagesByIdsResponseError) Reset() { *m = RpcChatGet
func (m *RpcChatGetMessagesByIdsResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatGetMessagesByIdsResponseError) ProtoMessage() {}
func (*RpcChatGetMessagesByIdsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 5, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 5, 1, 0}
}
func (m *RpcChatGetMessagesByIdsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71837,7 +73668,7 @@ func (m *RpcChatSubscribeLastMessages) Reset() { *m = RpcChatSubscribeLa
func (m *RpcChatSubscribeLastMessages) String() string { return proto.CompactTextString(m) }
func (*RpcChatSubscribeLastMessages) ProtoMessage() {}
func (*RpcChatSubscribeLastMessages) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 6}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 6}
}
func (m *RpcChatSubscribeLastMessages) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71876,7 +73707,7 @@ func (m *RpcChatSubscribeLastMessagesRequest) Reset() { *m = RpcChatSubs
func (m *RpcChatSubscribeLastMessagesRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatSubscribeLastMessagesRequest) ProtoMessage() {}
func (*RpcChatSubscribeLastMessagesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 6, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 6, 0}
}
func (m *RpcChatSubscribeLastMessagesRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -71937,7 +73768,7 @@ func (m *RpcChatSubscribeLastMessagesResponse) Reset() { *m = RpcChatSub
func (m *RpcChatSubscribeLastMessagesResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatSubscribeLastMessagesResponse) ProtoMessage() {}
func (*RpcChatSubscribeLastMessagesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 6, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 6, 1}
}
func (m *RpcChatSubscribeLastMessagesResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72007,7 +73838,7 @@ func (m *RpcChatSubscribeLastMessagesResponseError) String() string {
}
func (*RpcChatSubscribeLastMessagesResponseError) ProtoMessage() {}
func (*RpcChatSubscribeLastMessagesResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 6, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 6, 1, 0}
}
func (m *RpcChatSubscribeLastMessagesResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72057,7 +73888,7 @@ func (m *RpcChatUnsubscribe) Reset() { *m = RpcChatUnsubscribe{} }
func (m *RpcChatUnsubscribe) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnsubscribe) ProtoMessage() {}
func (*RpcChatUnsubscribe) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 7}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 7}
}
func (m *RpcChatUnsubscribe) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72095,7 +73926,7 @@ func (m *RpcChatUnsubscribeRequest) Reset() { *m = RpcChatUnsubscribeReq
func (m *RpcChatUnsubscribeRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnsubscribeRequest) ProtoMessage() {}
func (*RpcChatUnsubscribeRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 7, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 7, 0}
}
func (m *RpcChatUnsubscribeRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72146,7 +73977,7 @@ func (m *RpcChatUnsubscribeResponse) Reset() { *m = RpcChatUnsubscribeRe
func (m *RpcChatUnsubscribeResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnsubscribeResponse) ProtoMessage() {}
func (*RpcChatUnsubscribeResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 7, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 7, 1}
}
func (m *RpcChatUnsubscribeResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72191,7 +74022,7 @@ func (m *RpcChatUnsubscribeResponseError) Reset() { *m = RpcChatUnsubscr
func (m *RpcChatUnsubscribeResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnsubscribeResponseError) ProtoMessage() {}
func (*RpcChatUnsubscribeResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 7, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 7, 1, 0}
}
func (m *RpcChatUnsubscribeResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72241,7 +74072,7 @@ func (m *RpcChatSubscribeToMessagePreviews) Reset() { *m = RpcChatSubscr
func (m *RpcChatSubscribeToMessagePreviews) String() string { return proto.CompactTextString(m) }
func (*RpcChatSubscribeToMessagePreviews) ProtoMessage() {}
func (*RpcChatSubscribeToMessagePreviews) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 8}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 8}
}
func (m *RpcChatSubscribeToMessagePreviews) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72279,7 +74110,7 @@ func (m *RpcChatSubscribeToMessagePreviewsRequest) Reset() {
func (m *RpcChatSubscribeToMessagePreviewsRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatSubscribeToMessagePreviewsRequest) ProtoMessage() {}
func (*RpcChatSubscribeToMessagePreviewsRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 8, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 8, 0}
}
func (m *RpcChatSubscribeToMessagePreviewsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72321,7 +74152,7 @@ func (m *RpcChatSubscribeToMessagePreviewsResponse) String() string {
}
func (*RpcChatSubscribeToMessagePreviewsResponse) ProtoMessage() {}
func (*RpcChatSubscribeToMessagePreviewsResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 8, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 8, 1}
}
func (m *RpcChatSubscribeToMessagePreviewsResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72377,7 +74208,7 @@ func (m *RpcChatSubscribeToMessagePreviewsResponseError) String() string {
}
func (*RpcChatSubscribeToMessagePreviewsResponseError) ProtoMessage() {}
func (*RpcChatSubscribeToMessagePreviewsResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 8, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 8, 1, 0}
}
func (m *RpcChatSubscribeToMessagePreviewsResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72420,6 +74251,186 @@ func (m *RpcChatSubscribeToMessagePreviewsResponseError) GetDescription() string
return ""
}
+type RpcChatUnsubscribeFromMessagePreviews struct {
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviews) Reset() { *m = RpcChatUnsubscribeFromMessagePreviews{} }
+func (m *RpcChatUnsubscribeFromMessagePreviews) String() string { return proto.CompactTextString(m) }
+func (*RpcChatUnsubscribeFromMessagePreviews) ProtoMessage() {}
+func (*RpcChatUnsubscribeFromMessagePreviews) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 9}
+}
+func (m *RpcChatUnsubscribeFromMessagePreviews) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviews) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviews.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcChatUnsubscribeFromMessagePreviews) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviews.Merge(m, src)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviews) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcChatUnsubscribeFromMessagePreviews) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviews.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviews proto.InternalMessageInfo
+
+type RpcChatUnsubscribeFromMessagePreviewsRequest struct {
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) Reset() {
+ *m = RpcChatUnsubscribeFromMessagePreviewsRequest{}
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) String() string {
+ return proto.CompactTextString(m)
+}
+func (*RpcChatUnsubscribeFromMessagePreviewsRequest) ProtoMessage() {}
+func (*RpcChatUnsubscribeFromMessagePreviewsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 9, 0}
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsRequest.Merge(m, src)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsRequest proto.InternalMessageInfo
+
+type RpcChatUnsubscribeFromMessagePreviewsResponse struct {
+ Error *RpcChatUnsubscribeFromMessagePreviewsResponseError `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) Reset() {
+ *m = RpcChatUnsubscribeFromMessagePreviewsResponse{}
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) String() string {
+ return proto.CompactTextString(m)
+}
+func (*RpcChatUnsubscribeFromMessagePreviewsResponse) ProtoMessage() {}
+func (*RpcChatUnsubscribeFromMessagePreviewsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 9, 1}
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponse.Merge(m, src)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponse proto.InternalMessageInfo
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) GetError() *RpcChatUnsubscribeFromMessagePreviewsResponseError {
+ if m != nil {
+ return m.Error
+ }
+ return nil
+}
+
+type RpcChatUnsubscribeFromMessagePreviewsResponseError struct {
+ Code RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode `protobuf:"varint,1,opt,name=code,proto3,enum=anytype.RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode" json:"code,omitempty"`
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) Reset() {
+ *m = RpcChatUnsubscribeFromMessagePreviewsResponseError{}
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) String() string {
+ return proto.CompactTextString(m)
+}
+func (*RpcChatUnsubscribeFromMessagePreviewsResponseError) ProtoMessage() {}
+func (*RpcChatUnsubscribeFromMessagePreviewsResponseError) Descriptor() ([]byte, []int) {
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 9, 1, 0}
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponseError.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponseError.Merge(m, src)
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) XXX_Size() int {
+ return m.Size()
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) XXX_DiscardUnknown() {
+ xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponseError.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcChatUnsubscribeFromMessagePreviewsResponseError proto.InternalMessageInfo
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) GetCode() RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode {
+ if m != nil {
+ return m.Code
+ }
+ return RpcChatUnsubscribeFromMessagePreviewsResponseError_NULL
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) GetDescription() string {
+ if m != nil {
+ return m.Description
+ }
+ return ""
+}
+
type RpcChatReadMessages struct {
}
@@ -72427,7 +74438,7 @@ func (m *RpcChatReadMessages) Reset() { *m = RpcChatReadMessages{} }
func (m *RpcChatReadMessages) String() string { return proto.CompactTextString(m) }
func (*RpcChatReadMessages) ProtoMessage() {}
func (*RpcChatReadMessages) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 9}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 10}
}
func (m *RpcChatReadMessages) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72468,7 +74479,7 @@ func (m *RpcChatReadMessagesRequest) Reset() { *m = RpcChatReadMessagesR
func (m *RpcChatReadMessagesRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatReadMessagesRequest) ProtoMessage() {}
func (*RpcChatReadMessagesRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 9, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 10, 0}
}
func (m *RpcChatReadMessagesRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72541,7 +74552,7 @@ func (m *RpcChatReadMessagesResponse) Reset() { *m = RpcChatReadMessages
func (m *RpcChatReadMessagesResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatReadMessagesResponse) ProtoMessage() {}
func (*RpcChatReadMessagesResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 9, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 10, 1}
}
func (m *RpcChatReadMessagesResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72593,7 +74604,7 @@ func (m *RpcChatReadMessagesResponseError) Reset() { *m = RpcChatReadMes
func (m *RpcChatReadMessagesResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatReadMessagesResponseError) ProtoMessage() {}
func (*RpcChatReadMessagesResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 9, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 10, 1, 0}
}
func (m *RpcChatReadMessagesResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72643,7 +74654,7 @@ func (m *RpcChatUnread) Reset() { *m = RpcChatUnread{} }
func (m *RpcChatUnread) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnread) ProtoMessage() {}
func (*RpcChatUnread) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 10}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 11}
}
func (m *RpcChatUnread) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72681,7 +74692,7 @@ func (m *RpcChatUnreadRequest) Reset() { *m = RpcChatUnreadRequest{} }
func (m *RpcChatUnreadRequest) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnreadRequest) ProtoMessage() {}
func (*RpcChatUnreadRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 10, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 11, 0}
}
func (m *RpcChatUnreadRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72733,7 +74744,7 @@ func (m *RpcChatUnreadResponse) Reset() { *m = RpcChatUnreadResponse{} }
func (m *RpcChatUnreadResponse) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnreadResponse) ProtoMessage() {}
func (*RpcChatUnreadResponse) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 10, 1}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 11, 1}
}
func (m *RpcChatUnreadResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72785,7 +74796,7 @@ func (m *RpcChatUnreadResponseError) Reset() { *m = RpcChatUnreadRespons
func (m *RpcChatUnreadResponseError) String() string { return proto.CompactTextString(m) }
func (*RpcChatUnreadResponseError) ProtoMessage() {}
func (*RpcChatUnreadResponseError) Descriptor() ([]byte, []int) {
- return fileDescriptor_8261c968b2e6f45c, []int{0, 41, 10, 1, 0}
+ return fileDescriptor_8261c968b2e6f45c, []int{0, 42, 11, 1, 0}
}
func (m *RpcChatUnreadResponseError) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -72924,9 +74935,11 @@ func init() {
proto.RegisterEnum("anytype.RpcAppShutdownResponseErrorCode", RpcAppShutdownResponseErrorCode_name, RpcAppShutdownResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcSpaceLeaveApproveResponseErrorCode", RpcSpaceLeaveApproveResponseErrorCode_name, RpcSpaceLeaveApproveResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcSpaceMakeShareableResponseErrorCode", RpcSpaceMakeShareableResponseErrorCode_name, RpcSpaceMakeShareableResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcSpaceInviteGenerateRequestInviteType", RpcSpaceInviteGenerateRequestInviteType_name, RpcSpaceInviteGenerateRequestInviteType_value)
proto.RegisterEnum("anytype.RpcSpaceInviteGenerateResponseErrorCode", RpcSpaceInviteGenerateResponseErrorCode_name, RpcSpaceInviteGenerateResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcSpaceStopSharingResponseErrorCode", RpcSpaceStopSharingResponseErrorCode_name, RpcSpaceStopSharingResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcSpaceInviteGetCurrentResponseErrorCode", RpcSpaceInviteGetCurrentResponseErrorCode_name, RpcSpaceInviteGetCurrentResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcSpaceInviteGetGuestResponseErrorCode", RpcSpaceInviteGetGuestResponseErrorCode_name, RpcSpaceInviteGetGuestResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcSpaceInviteRevokeResponseErrorCode", RpcSpaceInviteRevokeResponseErrorCode_name, RpcSpaceInviteRevokeResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcSpaceInviteViewResponseErrorCode", RpcSpaceInviteViewResponseErrorCode_name, RpcSpaceInviteViewResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcSpaceJoinResponseErrorCode", RpcSpaceJoinResponseErrorCode_name, RpcSpaceJoinResponseErrorCode_value)
@@ -73075,6 +75088,14 @@ func init() {
proto.RegisterEnum("anytype.RpcLinkPreviewResponseErrorCode", RpcLinkPreviewResponseErrorCode_name, RpcLinkPreviewResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcUnsplashSearchResponseErrorCode", RpcUnsplashSearchResponseErrorCode_name, RpcUnsplashSearchResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcUnsplashDownloadResponseErrorCode", RpcUnsplashDownloadResponseErrorCode_name, RpcUnsplashDownloadResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcAIProvider", RpcAIProvider_name, RpcAIProvider_value)
+ proto.RegisterEnum("anytype.RpcAIWritingToolsRequestWritingMode", RpcAIWritingToolsRequestWritingMode_name, RpcAIWritingToolsRequestWritingMode_value)
+ proto.RegisterEnum("anytype.RpcAIWritingToolsRequestLanguage", RpcAIWritingToolsRequestLanguage_name, RpcAIWritingToolsRequestLanguage_value)
+ proto.RegisterEnum("anytype.RpcAIWritingToolsResponseErrorCode", RpcAIWritingToolsResponseErrorCode_name, RpcAIWritingToolsResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcAIAutofillRequestAutofillMode", RpcAIAutofillRequestAutofillMode_name, RpcAIAutofillRequestAutofillMode_value)
+ proto.RegisterEnum("anytype.RpcAIAutofillResponseErrorCode", RpcAIAutofillResponseErrorCode_name, RpcAIAutofillResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcAIListSummaryResponseErrorCode", RpcAIListSummaryResponseErrorCode_name, RpcAIListSummaryResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcAIObjectCreateFromUrlResponseErrorCode", RpcAIObjectCreateFromUrlResponseErrorCode_name, RpcAIObjectCreateFromUrlResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcGalleryDownloadManifestResponseErrorCode", RpcGalleryDownloadManifestResponseErrorCode_name, RpcGalleryDownloadManifestResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcGalleryDownloadIndexResponseErrorCode", RpcGalleryDownloadIndexResponseErrorCode_name, RpcGalleryDownloadIndexResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcBlockReplaceResponseErrorCode", RpcBlockReplaceResponseErrorCode_name, RpcBlockReplaceResponseErrorCode_value)
@@ -73149,6 +75170,7 @@ func init() {
proto.RegisterEnum("anytype.RpcBlockDataviewViewDeleteResponseErrorCode", RpcBlockDataviewViewDeleteResponseErrorCode_name, RpcBlockDataviewViewDeleteResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcBlockDataviewViewSetPositionResponseErrorCode", RpcBlockDataviewViewSetPositionResponseErrorCode_name, RpcBlockDataviewViewSetPositionResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcBlockDataviewViewSetActiveResponseErrorCode", RpcBlockDataviewViewSetActiveResponseErrorCode_name, RpcBlockDataviewViewSetActiveResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcBlockDataviewRelationSetResponseErrorCode", RpcBlockDataviewRelationSetResponseErrorCode_name, RpcBlockDataviewRelationSetResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcBlockDataviewRelationAddResponseErrorCode", RpcBlockDataviewRelationAddResponseErrorCode_name, RpcBlockDataviewRelationAddResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcBlockDataviewRelationDeleteResponseErrorCode", RpcBlockDataviewRelationDeleteResponseErrorCode_name, RpcBlockDataviewRelationDeleteResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcBlockDataviewSetSourceResponseErrorCode", RpcBlockDataviewSetSourceResponseErrorCode_name, RpcBlockDataviewSetSourceResponseErrorCode_value)
@@ -73224,6 +75246,7 @@ func init() {
proto.RegisterEnum("anytype.RpcChatSubscribeLastMessagesResponseErrorCode", RpcChatSubscribeLastMessagesResponseErrorCode_name, RpcChatSubscribeLastMessagesResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcChatUnsubscribeResponseErrorCode", RpcChatUnsubscribeResponseErrorCode_name, RpcChatUnsubscribeResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcChatSubscribeToMessagePreviewsResponseErrorCode", RpcChatSubscribeToMessagePreviewsResponseErrorCode_name, RpcChatSubscribeToMessagePreviewsResponseErrorCode_value)
+ proto.RegisterEnum("anytype.RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode", RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode_name, RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcChatReadMessagesReadType", RpcChatReadMessagesReadType_name, RpcChatReadMessagesReadType_value)
proto.RegisterEnum("anytype.RpcChatReadMessagesResponseErrorCode", RpcChatReadMessagesResponseErrorCode_name, RpcChatReadMessagesResponseErrorCode_value)
proto.RegisterEnum("anytype.RpcChatUnreadResponseErrorCode", RpcChatUnreadResponseErrorCode_name, RpcChatUnreadResponseErrorCode_value)
@@ -73262,6 +75285,10 @@ func init() {
proto.RegisterType((*RpcSpaceInviteGetCurrentRequest)(nil), "anytype.Rpc.Space.InviteGetCurrent.Request")
proto.RegisterType((*RpcSpaceInviteGetCurrentResponse)(nil), "anytype.Rpc.Space.InviteGetCurrent.Response")
proto.RegisterType((*RpcSpaceInviteGetCurrentResponseError)(nil), "anytype.Rpc.Space.InviteGetCurrent.Response.Error")
+ proto.RegisterType((*RpcSpaceInviteGetGuest)(nil), "anytype.Rpc.Space.InviteGetGuest")
+ proto.RegisterType((*RpcSpaceInviteGetGuestRequest)(nil), "anytype.Rpc.Space.InviteGetGuest.Request")
+ proto.RegisterType((*RpcSpaceInviteGetGuestResponse)(nil), "anytype.Rpc.Space.InviteGetGuest.Response")
+ proto.RegisterType((*RpcSpaceInviteGetGuestResponseError)(nil), "anytype.Rpc.Space.InviteGetGuest.Response.Error")
proto.RegisterType((*RpcSpaceInviteRevoke)(nil), "anytype.Rpc.Space.InviteRevoke")
proto.RegisterType((*RpcSpaceInviteRevokeRequest)(nil), "anytype.Rpc.Space.InviteRevoke.Request")
proto.RegisterType((*RpcSpaceInviteRevokeResponse)(nil), "anytype.Rpc.Space.InviteRevoke.Response")
@@ -73858,6 +75885,24 @@ func init() {
proto.RegisterType((*RpcUnsplashDownloadRequest)(nil), "anytype.Rpc.Unsplash.Download.Request")
proto.RegisterType((*RpcUnsplashDownloadResponse)(nil), "anytype.Rpc.Unsplash.Download.Response")
proto.RegisterType((*RpcUnsplashDownloadResponseError)(nil), "anytype.Rpc.Unsplash.Download.Response.Error")
+ proto.RegisterType((*RpcAI)(nil), "anytype.Rpc.AI")
+ proto.RegisterType((*RpcAIWritingTools)(nil), "anytype.Rpc.AI.WritingTools")
+ proto.RegisterType((*RpcAIWritingToolsRequest)(nil), "anytype.Rpc.AI.WritingTools.Request")
+ proto.RegisterType((*RpcAIWritingToolsResponse)(nil), "anytype.Rpc.AI.WritingTools.Response")
+ proto.RegisterType((*RpcAIWritingToolsResponseError)(nil), "anytype.Rpc.AI.WritingTools.Response.Error")
+ proto.RegisterType((*RpcAIAutofill)(nil), "anytype.Rpc.AI.Autofill")
+ proto.RegisterType((*RpcAIAutofillRequest)(nil), "anytype.Rpc.AI.Autofill.Request")
+ proto.RegisterType((*RpcAIAutofillResponse)(nil), "anytype.Rpc.AI.Autofill.Response")
+ proto.RegisterType((*RpcAIAutofillResponseError)(nil), "anytype.Rpc.AI.Autofill.Response.Error")
+ proto.RegisterType((*RpcAIListSummary)(nil), "anytype.Rpc.AI.ListSummary")
+ proto.RegisterType((*RpcAIListSummaryRequest)(nil), "anytype.Rpc.AI.ListSummary.Request")
+ proto.RegisterType((*RpcAIListSummaryResponse)(nil), "anytype.Rpc.AI.ListSummary.Response")
+ proto.RegisterType((*RpcAIListSummaryResponseError)(nil), "anytype.Rpc.AI.ListSummary.Response.Error")
+ proto.RegisterType((*RpcAIObjectCreateFromUrl)(nil), "anytype.Rpc.AI.ObjectCreateFromUrl")
+ proto.RegisterType((*RpcAIObjectCreateFromUrlRequest)(nil), "anytype.Rpc.AI.ObjectCreateFromUrl.Request")
+ proto.RegisterType((*RpcAIObjectCreateFromUrlResponse)(nil), "anytype.Rpc.AI.ObjectCreateFromUrl.Response")
+ proto.RegisterType((*RpcAIObjectCreateFromUrlResponseError)(nil), "anytype.Rpc.AI.ObjectCreateFromUrl.Response.Error")
+ proto.RegisterType((*RpcAIProviderConfig)(nil), "anytype.Rpc.AI.ProviderConfig")
proto.RegisterType((*RpcGallery)(nil), "anytype.Rpc.Gallery")
proto.RegisterType((*RpcGalleryDownloadManifest)(nil), "anytype.Rpc.Gallery.DownloadManifest")
proto.RegisterType((*RpcGalleryDownloadManifestRequest)(nil), "anytype.Rpc.Gallery.DownloadManifest.Request")
@@ -74172,6 +76217,10 @@ func init() {
proto.RegisterType((*RpcBlockDataviewViewSetActiveResponse)(nil), "anytype.Rpc.BlockDataview.View.SetActive.Response")
proto.RegisterType((*RpcBlockDataviewViewSetActiveResponseError)(nil), "anytype.Rpc.BlockDataview.View.SetActive.Response.Error")
proto.RegisterType((*RpcBlockDataviewRelation)(nil), "anytype.Rpc.BlockDataview.Relation")
+ proto.RegisterType((*RpcBlockDataviewRelationSet)(nil), "anytype.Rpc.BlockDataview.Relation.Set")
+ proto.RegisterType((*RpcBlockDataviewRelationSetRequest)(nil), "anytype.Rpc.BlockDataview.Relation.Set.Request")
+ proto.RegisterType((*RpcBlockDataviewRelationSetResponse)(nil), "anytype.Rpc.BlockDataview.Relation.Set.Response")
+ proto.RegisterType((*RpcBlockDataviewRelationSetResponseError)(nil), "anytype.Rpc.BlockDataview.Relation.Set.Response.Error")
proto.RegisterType((*RpcBlockDataviewRelationAdd)(nil), "anytype.Rpc.BlockDataview.Relation.Add")
proto.RegisterType((*RpcBlockDataviewRelationAddRequest)(nil), "anytype.Rpc.BlockDataview.Relation.Add.Request")
proto.RegisterType((*RpcBlockDataviewRelationAddResponse)(nil), "anytype.Rpc.BlockDataview.Relation.Add.Response")
@@ -74482,6 +76531,10 @@ func init() {
proto.RegisterType((*RpcChatSubscribeToMessagePreviewsRequest)(nil), "anytype.Rpc.Chat.SubscribeToMessagePreviews.Request")
proto.RegisterType((*RpcChatSubscribeToMessagePreviewsResponse)(nil), "anytype.Rpc.Chat.SubscribeToMessagePreviews.Response")
proto.RegisterType((*RpcChatSubscribeToMessagePreviewsResponseError)(nil), "anytype.Rpc.Chat.SubscribeToMessagePreviews.Response.Error")
+ proto.RegisterType((*RpcChatUnsubscribeFromMessagePreviews)(nil), "anytype.Rpc.Chat.UnsubscribeFromMessagePreviews")
+ proto.RegisterType((*RpcChatUnsubscribeFromMessagePreviewsRequest)(nil), "anytype.Rpc.Chat.UnsubscribeFromMessagePreviews.Request")
+ proto.RegisterType((*RpcChatUnsubscribeFromMessagePreviewsResponse)(nil), "anytype.Rpc.Chat.UnsubscribeFromMessagePreviews.Response")
+ proto.RegisterType((*RpcChatUnsubscribeFromMessagePreviewsResponseError)(nil), "anytype.Rpc.Chat.UnsubscribeFromMessagePreviews.Response.Error")
proto.RegisterType((*RpcChatReadMessages)(nil), "anytype.Rpc.Chat.ReadMessages")
proto.RegisterType((*RpcChatReadMessagesRequest)(nil), "anytype.Rpc.Chat.ReadMessages.Request")
proto.RegisterType((*RpcChatReadMessagesResponse)(nil), "anytype.Rpc.Chat.ReadMessages.Response")
@@ -74498,1291 +76551,1354 @@ func init() {
func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) }
var fileDescriptor_8261c968b2e6f45c = []byte{
- // 20537 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x98, 0x24, 0x49,
- 0x55, 0x37, 0x3a, 0x55, 0x59, 0x55, 0xdd, 0x7d, 0xfa, 0x63, 0x6a, 0x72, 0x67, 0x66, 0x67, 0x63,
- 0x97, 0xd9, 0x75, 0x58, 0x96, 0x75, 0x59, 0x7a, 0x61, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xea,
- 0xea, 0xee, 0xda, 0xed, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x58, 0xdf, 0xeb, 0x2d, 0x73, 0xaa, 0xa2,
- 0xbb, 0x73, 0xa7, 0x3a, 0xb3, 0xc8, 0xcc, 0x9e, 0xd9, 0xe6, 0x3e, 0xef, 0x7d, 0x45, 0x44, 0x50,
- 0x44, 0x44, 0x45, 0x45, 0x05, 0x04, 0x44, 0x04, 0x45, 0xe4, 0xfb, 0x05, 0xe5, 0x43, 0x05, 0x41,
- 0x44, 0x45, 0xf1, 0x03, 0x50, 0xae, 0xe0, 0x27, 0xbe, 0x8f, 0x5e, 0xaf, 0x5e, 0x05, 0xf1, 0xd5,
- 0xd7, 0xfb, 0x64, 0x44, 0x64, 0x66, 0x44, 0x75, 0x65, 0x56, 0x64, 0x75, 0x65, 0xf5, 0x2a, 0xf7,
- 0xbf, 0xcc, 0xc8, 0xc8, 0x13, 0x27, 0xce, 0xef, 0x44, 0xc4, 0x89, 0x88, 0x13, 0x27, 0xe0, 0x5c,
- 0xef, 0xf2, 0x5d, 0x3d, 0xdb, 0x72, 0x2d, 0xe7, 0xae, 0xb6, 0xb5, 0xb7, 0xa7, 0x9b, 0x1d, 0x67,
- 0x91, 0xbc, 0xab, 0x53, 0xba, 0x79, 0xe0, 0x1e, 0xf4, 0x30, 0xba, 0xb5, 0x77, 0x65, 0xe7, 0xae,
- 0xae, 0x71, 0xf9, 0xae, 0xde, 0xe5, 0xbb, 0xf6, 0xac, 0x0e, 0xee, 0xfa, 0x3f, 0x90, 0x17, 0x96,
- 0x1d, 0xdd, 0x1e, 0x95, 0xab, 0x6b, 0xb5, 0xf5, 0xae, 0xe3, 0x5a, 0x36, 0x66, 0x39, 0xcf, 0x86,
- 0x45, 0xe2, 0xab, 0xd8, 0x74, 0x7d, 0x0a, 0x37, 0xed, 0x58, 0xd6, 0x4e, 0x17, 0xd3, 0x6f, 0x97,
- 0xf7, 0xb7, 0xef, 0x72, 0x5c, 0x7b, 0xbf, 0xed, 0xb2, 0xaf, 0xb7, 0xf4, 0x7f, 0xed, 0x60, 0xa7,
- 0x6d, 0x1b, 0x3d, 0xd7, 0xb2, 0x69, 0x8e, 0x0b, 0x7f, 0xf3, 0x9e, 0x69, 0x50, 0xb4, 0x5e, 0x1b,
- 0x7d, 0x65, 0x0a, 0x94, 0x52, 0xaf, 0x87, 0x3e, 0x96, 0x05, 0x58, 0xc5, 0xee, 0x45, 0x6c, 0x3b,
- 0x86, 0x65, 0xa2, 0x93, 0x30, 0xa5, 0xe1, 0xe7, 0xef, 0x63, 0xc7, 0xbd, 0x37, 0xf7, 0xd2, 0xbf,
- 0x54, 0x32, 0xe8, 0x4d, 0x59, 0x98, 0xd6, 0xb0, 0xd3, 0xb3, 0x4c, 0x07, 0xab, 0xcf, 0x81, 0x3c,
- 0xb6, 0x6d, 0xcb, 0x3e, 0x97, 0xb9, 0x25, 0x73, 0xfb, 0xec, 0xdd, 0x77, 0x2c, 0xb2, 0xea, 0x2f,
- 0x6a, 0xbd, 0xf6, 0x62, 0xa9, 0xd7, 0x5b, 0x0c, 0x29, 0x2d, 0xfa, 0x3f, 0x2d, 0x56, 0xbc, 0x3f,
- 0x34, 0xfa, 0xa3, 0x7a, 0x0e, 0xa6, 0xae, 0xd2, 0x0c, 0xe7, 0xb2, 0xb7, 0x64, 0x6e, 0x9f, 0xd1,
- 0xfc, 0x57, 0xef, 0x4b, 0x07, 0xbb, 0xba, 0xd1, 0x75, 0xce, 0x29, 0xf4, 0x0b, 0x7b, 0x45, 0x6f,
- 0xc8, 0x40, 0x9e, 0x10, 0x51, 0xcb, 0x90, 0x6b, 0x5b, 0x1d, 0x4c, 0x8a, 0x5f, 0xb8, 0xfb, 0x2e,
- 0xf9, 0xe2, 0x17, 0xcb, 0x56, 0x07, 0x6b, 0xe4, 0x67, 0xf5, 0x16, 0x98, 0xf5, 0xc5, 0x12, 0xb2,
- 0xc1, 0x27, 0x5d, 0xb8, 0x1b, 0x72, 0x5e, 0x7e, 0x75, 0x1a, 0x72, 0xb5, 0xad, 0xf5, 0xf5, 0xe2,
- 0x09, 0xf5, 0x14, 0xcc, 0x6f, 0xd5, 0x1e, 0xaa, 0xd5, 0x2f, 0xd5, 0x5a, 0x15, 0x4d, 0xab, 0x6b,
- 0xc5, 0x8c, 0x3a, 0x0f, 0x33, 0x4b, 0xa5, 0xe5, 0x56, 0xb5, 0xb6, 0xb9, 0xd5, 0x2c, 0x66, 0xd1,
- 0x6b, 0x15, 0x58, 0x68, 0x60, 0x77, 0x19, 0x5f, 0x35, 0xda, 0xb8, 0xe1, 0xea, 0x2e, 0x46, 0xaf,
- 0xc8, 0x04, 0xc2, 0x54, 0xb7, 0xbc, 0x42, 0x83, 0x4f, 0xac, 0x02, 0x4f, 0x3b, 0x54, 0x01, 0x91,
- 0xc2, 0x22, 0xfb, 0x7b, 0x91, 0x4b, 0xd3, 0x78, 0x3a, 0x17, 0x9e, 0x0c, 0xb3, 0xdc, 0x37, 0x75,
- 0x01, 0x60, 0xa9, 0x54, 0x7e, 0x68, 0x55, 0xab, 0x6f, 0xd5, 0x96, 0x8b, 0x27, 0xbc, 0xf7, 0x95,
- 0xba, 0x56, 0x61, 0xef, 0x19, 0xf4, 0xb5, 0x0c, 0x07, 0xe6, 0xb2, 0x08, 0xe6, 0xe2, 0x70, 0x66,
- 0x06, 0x00, 0x8a, 0x7e, 0x3a, 0x00, 0x67, 0x55, 0x00, 0xe7, 0x69, 0xc9, 0xc8, 0xa5, 0x0f, 0xd0,
- 0x8b, 0xb3, 0x30, 0xdd, 0xd8, 0xdd, 0x77, 0x3b, 0xd6, 0x35, 0x13, 0xcd, 0x04, 0xc8, 0xa0, 0xbf,
- 0xe5, 0x65, 0xf2, 0x6c, 0x51, 0x26, 0xb7, 0x1f, 0xae, 0x04, 0xa3, 0x10, 0x21, 0x8d, 0x9f, 0x0c,
- 0xa4, 0x51, 0x12, 0xa4, 0xf1, 0x64, 0x59, 0x42, 0xe9, 0xcb, 0xe1, 0xc7, 0x9e, 0x09, 0xf9, 0x46,
- 0x4f, 0x6f, 0x63, 0xf4, 0x29, 0x05, 0xe6, 0xd6, 0xb1, 0x7e, 0x15, 0x97, 0x7a, 0x3d, 0xdb, 0xba,
- 0x8a, 0x51, 0x39, 0xd4, 0xd7, 0x73, 0x30, 0xe5, 0x78, 0x99, 0xaa, 0x1d, 0x52, 0x83, 0x19, 0xcd,
- 0x7f, 0x55, 0xcf, 0x03, 0x18, 0x1d, 0x6c, 0xba, 0x86, 0x6b, 0x60, 0xe7, 0x5c, 0xf6, 0x16, 0xe5,
- 0xf6, 0x19, 0x8d, 0x4b, 0x41, 0x5f, 0xc9, 0xca, 0xea, 0x18, 0xe1, 0x62, 0x91, 0xe7, 0x20, 0x42,
- 0xaa, 0x6f, 0xcc, 0xca, 0xe8, 0xd8, 0x50, 0x72, 0xc9, 0x64, 0xfb, 0xf3, 0x99, 0xe4, 0xc2, 0xf5,
- 0x72, 0xd4, 0xea, 0xad, 0xc6, 0x56, 0x79, 0xad, 0xd5, 0xd8, 0x2c, 0x95, 0x2b, 0x45, 0xac, 0x9e,
- 0x86, 0x22, 0x79, 0x6c, 0x55, 0x1b, 0xad, 0xe5, 0xca, 0x7a, 0xa5, 0x59, 0x59, 0x2e, 0x6e, 0xab,
- 0x2a, 0x2c, 0x68, 0x95, 0xe7, 0x6e, 0x55, 0x1a, 0xcd, 0xd6, 0x4a, 0xa9, 0xba, 0x5e, 0x59, 0x2e,
- 0xee, 0x78, 0x3f, 0xaf, 0x57, 0x37, 0xaa, 0xcd, 0x96, 0x56, 0x29, 0x95, 0xd7, 0x2a, 0xcb, 0xc5,
- 0x5d, 0xf5, 0x7a, 0xb8, 0xae, 0x56, 0x6f, 0x95, 0x36, 0x37, 0xb5, 0xfa, 0xc5, 0x4a, 0x8b, 0xfd,
- 0xd1, 0x28, 0x1a, 0xb4, 0xa0, 0x66, 0xab, 0xb1, 0x56, 0xd2, 0x2a, 0xa5, 0xa5, 0xf5, 0x4a, 0xf1,
- 0x11, 0xf4, 0x22, 0x05, 0xe6, 0x37, 0xf4, 0x2b, 0xb8, 0xb1, 0xab, 0xdb, 0x58, 0xbf, 0xdc, 0xc5,
- 0xe8, 0xf1, 0x12, 0x78, 0xa2, 0x4f, 0xf1, 0x78, 0x55, 0x44, 0xbc, 0xee, 0x1a, 0x20, 0x60, 0xa1,
- 0x88, 0x08, 0xc0, 0xfe, 0x39, 0x68, 0x06, 0x6b, 0x02, 0x60, 0x4f, 0x4f, 0x48, 0x2f, 0x19, 0x62,
- 0xdf, 0xf1, 0x18, 0x40, 0x0c, 0x7d, 0x41, 0x81, 0x85, 0xaa, 0x79, 0xd5, 0x70, 0xf1, 0x2a, 0x36,
- 0xb1, 0xed, 0x8d, 0x03, 0x52, 0x30, 0xbc, 0x49, 0xe1, 0x60, 0x58, 0x11, 0x61, 0x78, 0xca, 0x00,
- 0xb1, 0x89, 0x65, 0x44, 0x8c, 0xb6, 0x37, 0xc1, 0x8c, 0x41, 0xf2, 0x95, 0x8d, 0x0e, 0x93, 0x58,
- 0x98, 0xa0, 0xde, 0x0a, 0xf3, 0xf4, 0x65, 0xc5, 0xe8, 0xe2, 0x87, 0xf0, 0x01, 0x1b, 0x77, 0xc5,
- 0x44, 0xf4, 0xbd, 0x41, 0xe3, 0xab, 0x0a, 0x58, 0x7e, 0x53, 0x52, 0xa6, 0x92, 0x81, 0xf9, 0xaa,
- 0xc7, 0x42, 0xf3, 0x3b, 0xd4, 0xca, 0x0c, 0xf4, 0x6f, 0x59, 0x98, 0x6d, 0xb8, 0x56, 0xcf, 0x53,
- 0x59, 0xc3, 0xdc, 0x91, 0x03, 0xf7, 0x13, 0x7c, 0x1b, 0x2b, 0x8b, 0xe0, 0x3e, 0x79, 0x80, 0x1c,
- 0xb9, 0x02, 0x22, 0x5a, 0xd8, 0x57, 0x82, 0x16, 0xb6, 0x22, 0xa0, 0x72, 0x77, 0x22, 0x6a, 0xff,
- 0x01, 0xdb, 0xd7, 0xab, 0x14, 0x28, 0xfa, 0x6a, 0xe6, 0x96, 0xf7, 0x6d, 0x1b, 0x9b, 0xae, 0x1c,
- 0x08, 0x7f, 0xc4, 0x83, 0xb0, 0x26, 0x82, 0x70, 0x77, 0x8c, 0x32, 0xfb, 0xa5, 0xa4, 0xd8, 0xc6,
- 0x3e, 0x12, 0xa0, 0xf9, 0x90, 0x80, 0xe6, 0x37, 0x27, 0x67, 0x2b, 0x19, 0xa4, 0x6b, 0x23, 0x20,
- 0x7a, 0x1a, 0x8a, 0xde, 0x98, 0x54, 0x6e, 0x56, 0x2f, 0x56, 0x5a, 0xd5, 0xda, 0xc5, 0x6a, 0xb3,
- 0x52, 0xc4, 0xe8, 0x07, 0x15, 0x98, 0xa3, 0xac, 0x69, 0xf8, 0xaa, 0x75, 0x45, 0xb2, 0xd7, 0xfb,
- 0x42, 0x42, 0x63, 0x81, 0x2f, 0x21, 0xa2, 0x65, 0x7c, 0x4f, 0x02, 0x63, 0x21, 0x86, 0xdc, 0x63,
- 0xa9, 0xb7, 0x3a, 0xd4, 0x0c, 0x76, 0x06, 0xb4, 0x96, 0x81, 0xbd, 0xd5, 0xab, 0x72, 0x00, 0xb4,
- 0x92, 0x17, 0x0d, 0x7c, 0x0d, 0x6d, 0x84, 0x98, 0x08, 0x6a, 0x9b, 0x19, 0xaa, 0xb6, 0xd9, 0x41,
- 0x6a, 0xfb, 0x3e, 0x7e, 0xcc, 0x5a, 0x12, 0xd1, 0xbb, 0x33, 0x52, 0xdc, 0x1e, 0x27, 0xd1, 0xb3,
- 0x43, 0x5f, 0x51, 0xb2, 0xa2, 0xd5, 0x79, 0x13, 0xcc, 0x90, 0xc7, 0x9a, 0xbe, 0x87, 0x59, 0x1b,
- 0x0a, 0x13, 0xd4, 0x0b, 0x30, 0x47, 0x33, 0xb6, 0x2d, 0xd3, 0xab, 0x4f, 0x8e, 0x64, 0x10, 0xd2,
- 0x3c, 0x10, 0xdb, 0x36, 0xd6, 0x5d, 0xcb, 0x26, 0x34, 0xf2, 0x14, 0x44, 0x2e, 0x09, 0x7d, 0x39,
- 0x68, 0x85, 0x15, 0x41, 0x73, 0x9e, 0x9a, 0xa4, 0x2a, 0xc9, 0xf4, 0xe6, 0xea, 0x68, 0xed, 0x8f,
- 0xb6, 0xba, 0x96, 0x87, 0xf6, 0x0a, 0x99, 0xda, 0x61, 0xf5, 0x2c, 0xa8, 0x2c, 0xd5, 0xcb, 0x5b,
- 0xae, 0xd7, 0x9a, 0x95, 0x5a, 0xb3, 0xb8, 0x3d, 0x50, 0xa3, 0x76, 0xd0, 0x1b, 0x73, 0x90, 0x7b,
- 0xd0, 0x32, 0x4c, 0xf4, 0xe2, 0x8c, 0xa0, 0x12, 0x26, 0x76, 0xaf, 0x59, 0xf6, 0x95, 0xa0, 0xa1,
- 0x86, 0x09, 0xf1, 0xd8, 0x84, 0xaa, 0xa4, 0x0c, 0x55, 0xa5, 0xdc, 0x20, 0x55, 0xfa, 0x01, 0x5e,
- 0x95, 0xee, 0x13, 0x55, 0xe9, 0xb6, 0x01, 0xf2, 0xf7, 0x98, 0x8f, 0xe8, 0x00, 0x3e, 0x1e, 0x74,
- 0x00, 0x0f, 0x08, 0x30, 0x3e, 0x49, 0x8e, 0x4c, 0x32, 0x00, 0x3f, 0x9f, 0x6a, 0xc3, 0x1f, 0x04,
- 0xf5, 0x4e, 0x04, 0xd4, 0xbb, 0x03, 0xfa, 0x04, 0xe3, 0x70, 0xd7, 0xf1, 0xc8, 0xe1, 0x6e, 0xe2,
- 0x8a, 0x7a, 0x06, 0x4e, 0x2d, 0x57, 0x57, 0x56, 0x2a, 0x5a, 0xa5, 0xd6, 0x6c, 0xd5, 0x2a, 0xcd,
- 0x4b, 0x75, 0xed, 0xa1, 0x62, 0x17, 0xbd, 0x41, 0x01, 0xf0, 0x24, 0x54, 0xd6, 0xcd, 0x36, 0xee,
- 0xca, 0xf5, 0xe8, 0xff, 0x77, 0x36, 0x59, 0x9f, 0x10, 0xd2, 0x8f, 0x80, 0xf3, 0x35, 0x59, 0xf9,
- 0x56, 0x19, 0x49, 0x2c, 0x19, 0xa8, 0x6f, 0x7d, 0x2c, 0xd8, 0x9e, 0xd7, 0xc1, 0x49, 0x9f, 0x1e,
- 0xcb, 0x3e, 0x78, 0xda, 0xf7, 0xf6, 0x1c, 0x2c, 0x30, 0x58, 0xfc, 0x79, 0xfc, 0x4b, 0x33, 0x32,
- 0x13, 0x79, 0x04, 0xd3, 0x6c, 0xda, 0xee, 0x77, 0xef, 0xc1, 0xbb, 0xba, 0x0a, 0xb3, 0x3d, 0x6c,
- 0xef, 0x19, 0x8e, 0x63, 0x58, 0x26, 0x5d, 0x90, 0x5b, 0xb8, 0xfb, 0x09, 0x81, 0xc4, 0xc9, 0xda,
- 0xe5, 0xe2, 0xa6, 0x6e, 0xbb, 0x46, 0xdb, 0xe8, 0xe9, 0xa6, 0xbb, 0x19, 0x66, 0xd6, 0xf8, 0x3f,
- 0xd1, 0x2b, 0x13, 0x4e, 0x6b, 0xc4, 0x9a, 0x44, 0xa8, 0xc4, 0x2f, 0x25, 0x98, 0x92, 0xc4, 0x12,
- 0x4c, 0xa6, 0x16, 0x1f, 0x4b, 0x55, 0x2d, 0x06, 0xe0, 0xbd, 0xa3, 0xde, 0x00, 0x67, 0xaa, 0xb5,
- 0x72, 0x5d, 0xd3, 0x2a, 0xe5, 0x66, 0x6b, 0xb3, 0xa2, 0x6d, 0x54, 0x1b, 0x8d, 0x6a, 0xbd, 0xd6,
- 0x38, 0x4a, 0x6b, 0x47, 0x9f, 0x54, 0x02, 0x8d, 0x59, 0xc6, 0xed, 0xae, 0x61, 0x62, 0xf4, 0xc0,
- 0x11, 0x15, 0x46, 0x5c, 0xf5, 0x91, 0xc7, 0x99, 0x95, 0x1f, 0x81, 0xf3, 0xeb, 0x93, 0xe3, 0x3c,
- 0x98, 0xe0, 0x7f, 0xe2, 0xe6, 0xff, 0x05, 0x05, 0x4e, 0x71, 0x0d, 0x51, 0xc3, 0x7b, 0x63, 0x5b,
- 0xc9, 0xfb, 0x0e, 0xbe, 0xed, 0x56, 0x45, 0x4c, 0x07, 0x59, 0xd3, 0x87, 0xd8, 0x88, 0x80, 0xf5,
- 0xad, 0x01, 0xac, 0xeb, 0x02, 0xac, 0xcf, 0x1c, 0x81, 0x66, 0x32, 0x64, 0x7f, 0x21, 0x55, 0x64,
- 0x6f, 0x80, 0x33, 0x9b, 0x25, 0xad, 0x59, 0x2d, 0x57, 0x37, 0x4b, 0xde, 0x38, 0xca, 0x0d, 0xd9,
- 0x11, 0xe6, 0xba, 0x08, 0xfa, 0x40, 0x7c, 0x3f, 0x9c, 0x83, 0x9b, 0x06, 0x77, 0xb4, 0xe5, 0x5d,
- 0xdd, 0xdc, 0xc1, 0xc8, 0x90, 0x81, 0x7a, 0x19, 0xa6, 0xda, 0x24, 0x3b, 0xc5, 0x99, 0xdf, 0xba,
- 0x89, 0xe9, 0xcb, 0x69, 0x09, 0x9a, 0xff, 0x2b, 0x7a, 0x17, 0xaf, 0x10, 0x4d, 0x51, 0x21, 0x9e,
- 0x1d, 0x0f, 0xde, 0x21, 0xbe, 0x23, 0x74, 0xe3, 0xd3, 0x81, 0x6e, 0x5c, 0x12, 0x74, 0xa3, 0x7c,
- 0x34, 0xf2, 0xc9, 0xd4, 0xe4, 0x37, 0x1e, 0x0b, 0x1d, 0x40, 0xa4, 0x36, 0x19, 0xd1, 0xa3, 0xc2,
- 0xc0, 0xee, 0xfe, 0x75, 0x0a, 0x14, 0x96, 0x71, 0x17, 0xcb, 0xae, 0x44, 0xfe, 0x5d, 0x56, 0x76,
- 0x43, 0x84, 0xc2, 0x40, 0x69, 0x47, 0xaf, 0x8e, 0xb8, 0xc6, 0x1e, 0x76, 0x5c, 0x7d, 0xaf, 0x47,
- 0x44, 0xad, 0x68, 0x61, 0x02, 0xfa, 0xce, 0xac, 0xcc, 0x76, 0x49, 0x4c, 0x31, 0xff, 0x39, 0xd6,
- 0x14, 0x3f, 0x93, 0x85, 0xe9, 0x06, 0x76, 0xeb, 0x76, 0x07, 0xdb, 0xa8, 0x11, 0x62, 0x74, 0x0b,
- 0xcc, 0x12, 0x50, 0xbc, 0x69, 0x66, 0x80, 0x13, 0x9f, 0xa4, 0xde, 0x06, 0x0b, 0xc1, 0x2b, 0xf9,
- 0x9d, 0x75, 0xe3, 0x7d, 0xa9, 0xe8, 0xef, 0x33, 0xb2, 0xbb, 0xb8, 0x6c, 0xc9, 0x90, 0x71, 0x13,
- 0xd1, 0x4a, 0xe5, 0x76, 0x64, 0x63, 0x49, 0xa5, 0xbf, 0xd1, 0xf5, 0x8e, 0x2c, 0xc0, 0x96, 0xe9,
- 0xf8, 0x72, 0x7d, 0x52, 0x02, 0xb9, 0xa2, 0x7f, 0xca, 0x24, 0x9b, 0xc5, 0x84, 0xe5, 0x44, 0x48,
- 0xec, 0xa7, 0x12, 0xac, 0x2d, 0x44, 0x12, 0x4b, 0x5f, 0x66, 0x9f, 0x3d, 0x09, 0x85, 0x4b, 0x7a,
- 0xb7, 0x8b, 0x5d, 0xf4, 0x5a, 0x05, 0x0a, 0x65, 0x1b, 0xeb, 0x2e, 0x46, 0x38, 0x14, 0x1d, 0x82,
- 0x69, 0xdb, 0xb2, 0xdc, 0x4d, 0xdd, 0xdd, 0x65, 0x72, 0x0b, 0xde, 0xd5, 0x67, 0xc2, 0xf5, 0xdb,
- 0xfb, 0xdd, 0xae, 0x8b, 0x1f, 0x75, 0x37, 0x6d, 0x63, 0x4f, 0xb7, 0x0f, 0xd6, 0x75, 0x73, 0x67,
- 0x5f, 0xdf, 0xc1, 0x8c, 0xbd, 0xa8, 0xcf, 0xcc, 0xd5, 0xe0, 0xe7, 0xf8, 0x8e, 0xe7, 0x01, 0x51,
- 0xe8, 0xdf, 0x28, 0xc8, 0x89, 0xb2, 0xb8, 0x48, 0xd9, 0x8b, 0xe8, 0x79, 0x10, 0x4c, 0xef, 0x99,
- 0x78, 0xcf, 0x32, 0x8d, 0xb6, 0x6f, 0xad, 0xfa, 0xef, 0xe8, 0x57, 0x02, 0x34, 0x96, 0x04, 0x34,
- 0x16, 0xa5, 0x4b, 0x49, 0x06, 0x45, 0x63, 0x84, 0x7e, 0xe7, 0x66, 0xb8, 0x91, 0x76, 0x23, 0xad,
- 0x66, 0xbd, 0x55, 0xd6, 0x2a, 0xa5, 0x66, 0xa5, 0xb5, 0x5e, 0x2f, 0x97, 0xd6, 0x5b, 0x5a, 0x65,
- 0xb3, 0x5e, 0xc4, 0xde, 0xec, 0x7c, 0x4a, 0xc3, 0x6d, 0xeb, 0x2a, 0xb6, 0xd1, 0x0b, 0x33, 0x72,
- 0x10, 0xc5, 0x08, 0x25, 0x0e, 0x3e, 0x45, 0x06, 0xbe, 0x1f, 0x90, 0xf6, 0x14, 0x61, 0x82, 0x65,
- 0xcc, 0x47, 0xb4, 0x98, 0x5f, 0x95, 0xea, 0x63, 0x62, 0x49, 0x3d, 0x06, 0x40, 0xfa, 0xc7, 0x2c,
- 0x4c, 0x95, 0x2d, 0xf3, 0x2a, 0xb6, 0x5d, 0x7e, 0x92, 0xc5, 0xe3, 0x90, 0xe9, 0xc3, 0xe1, 0x1c,
- 0x4c, 0x61, 0xd3, 0xb5, 0xad, 0x9e, 0x3f, 0xcb, 0xf2, 0x5f, 0xd1, 0x9b, 0x93, 0x4a, 0x98, 0x95,
- 0x1c, 0xbd, 0xda, 0x3a, 0xb8, 0x20, 0x81, 0x3d, 0xa5, 0xaf, 0xed, 0xbc, 0x21, 0x09, 0x2e, 0x83,
- 0x19, 0x48, 0xbf, 0x1f, 0xfb, 0xa2, 0x02, 0xf3, 0xb4, 0xdd, 0x36, 0x30, 0x31, 0x0b, 0x51, 0x9d,
- 0x5f, 0xe7, 0xec, 0x13, 0xfe, 0xda, 0x09, 0x41, 0xfc, 0x05, 0xbd, 0xd7, 0x0b, 0xd6, 0xbc, 0xd7,
- 0x4e, 0x68, 0xec, 0x9d, 0xaa, 0xf9, 0x52, 0x01, 0x72, 0xfa, 0xbe, 0xbb, 0x8b, 0xfe, 0x4d, 0x7a,
- 0xc6, 0x2b, 0xf4, 0x23, 0x8c, 0x9f, 0x08, 0x48, 0x4e, 0x43, 0xde, 0xb5, 0xae, 0x60, 0x5f, 0x0e,
- 0xf4, 0xc5, 0x83, 0x43, 0xef, 0xf5, 0x9a, 0xe4, 0x03, 0x83, 0xc3, 0x7f, 0xf7, 0x0c, 0x2c, 0xbd,
- 0xdd, 0xb6, 0xf6, 0x4d, 0xb7, 0xea, 0xaf, 0x7b, 0x87, 0x09, 0xe8, 0xb3, 0x19, 0x99, 0x19, 0xb4,
- 0x04, 0x83, 0xc9, 0x20, 0xbb, 0x3c, 0x42, 0x53, 0x5a, 0x84, 0x3b, 0x4a, 0x9b, 0x9b, 0xad, 0x66,
- 0xfd, 0xa1, 0x4a, 0x2d, 0xb4, 0x76, 0x5b, 0xd5, 0x5a, 0xab, 0xb9, 0x56, 0x69, 0x95, 0xb7, 0x34,
- 0xb2, 0x38, 0x59, 0x2a, 0x97, 0xeb, 0x5b, 0xb5, 0x66, 0x11, 0xa3, 0xb7, 0x65, 0x61, 0xae, 0xdc,
- 0xb5, 0x9c, 0x00, 0xe1, 0x9b, 0x43, 0x84, 0x03, 0x31, 0x66, 0x38, 0x31, 0xa2, 0xff, 0x99, 0x91,
- 0xf5, 0x74, 0xf0, 0x05, 0xc2, 0x91, 0x8f, 0xe8, 0xa5, 0xde, 0x2c, 0xe5, 0xe9, 0x30, 0x9c, 0x5e,
- 0xfa, 0x4d, 0xe2, 0xf3, 0x15, 0x98, 0x2a, 0x51, 0xc5, 0x40, 0x7f, 0x92, 0x81, 0x42, 0xd9, 0x32,
- 0xb7, 0x8d, 0x1d, 0xcf, 0x82, 0xc4, 0xa6, 0x7e, 0xb9, 0x8b, 0x97, 0x75, 0x57, 0xbf, 0x6a, 0xe0,
- 0x6b, 0xa4, 0x02, 0xd3, 0x5a, 0x5f, 0xaa, 0xc7, 0x14, 0x4b, 0xc1, 0x97, 0xf7, 0x77, 0x08, 0x53,
- 0xd3, 0x1a, 0x9f, 0xe4, 0x8d, 0x1f, 0xf4, 0x75, 0xd3, 0xc6, 0x36, 0xee, 0x62, 0xdd, 0xc1, 0xde,
- 0x5c, 0xcc, 0xc4, 0x5d, 0xa2, 0xb4, 0xd3, 0x5a, 0xd4, 0x67, 0xf5, 0x02, 0xcc, 0xd1, 0x4f, 0xc4,
- 0xfe, 0x71, 0x88, 0x1a, 0x4f, 0x6b, 0x42, 0x9a, 0xfa, 0x64, 0xc8, 0xe3, 0x47, 0x5d, 0x5b, 0x3f,
- 0xd7, 0x21, 0x78, 0x5d, 0xbf, 0x48, 0x5d, 0x1d, 0x17, 0x7d, 0x57, 0xc7, 0xc5, 0x06, 0x71, 0x84,
- 0xd4, 0x68, 0x2e, 0xf4, 0xc9, 0xe9, 0xc0, 0x7a, 0x79, 0x9b, 0x12, 0x2a, 0x86, 0x0a, 0x39, 0x53,
- 0xdf, 0xc3, 0x4c, 0x2f, 0xc8, 0xb3, 0x7a, 0x07, 0x9c, 0xd4, 0xaf, 0xea, 0xae, 0x6e, 0xaf, 0x5b,
- 0x6d, 0xbd, 0x4b, 0x86, 0x4d, 0xbf, 0xe5, 0xf7, 0x7f, 0x20, 0xdb, 0x50, 0xae, 0x65, 0x63, 0x92,
- 0xcb, 0xdf, 0x86, 0xf2, 0x13, 0x3c, 0xea, 0x46, 0xdb, 0x32, 0x09, 0xff, 0x8a, 0x46, 0x9e, 0x3d,
- 0xa9, 0x74, 0x0c, 0xc7, 0xab, 0x08, 0xa1, 0x52, 0xa3, 0xfb, 0x29, 0x8d, 0x03, 0xb3, 0x4d, 0xb6,
- 0xa0, 0xa6, 0xb5, 0xa8, 0xcf, 0xea, 0x12, 0xcc, 0xb2, 0xdd, 0x97, 0x0d, 0x4f, 0xaf, 0x0a, 0x44,
- 0xaf, 0x6e, 0x11, 0x1d, 0xc9, 0x28, 0x9e, 0x8b, 0xb5, 0x30, 0x9f, 0xc6, 0xff, 0xa4, 0x3e, 0x07,
- 0x6e, 0x64, 0xaf, 0xe5, 0x7d, 0xc7, 0xb5, 0xf6, 0x28, 0xe8, 0x2b, 0x46, 0x97, 0xd6, 0x60, 0x8a,
- 0xd4, 0x20, 0x2e, 0x8b, 0x7a, 0x37, 0x9c, 0xee, 0xd9, 0x78, 0x1b, 0xdb, 0x0f, 0xeb, 0x7b, 0xfb,
- 0x8f, 0x36, 0x6d, 0xdd, 0x74, 0x7a, 0x96, 0xed, 0x9e, 0x9b, 0x26, 0xcc, 0x0f, 0xfc, 0xa6, 0xde,
- 0x09, 0xa7, 0x1e, 0x71, 0x2c, 0xb3, 0xd4, 0x33, 0xd6, 0x0d, 0xc7, 0xc5, 0x66, 0xa9, 0xd3, 0xb1,
- 0xcf, 0xcd, 0x90, 0xb2, 0x0e, 0x7f, 0x60, 0xdd, 0xea, 0x34, 0x14, 0xa8, 0xb0, 0xd1, 0x2b, 0xf2,
- 0xd2, 0x1e, 0xa7, 0xac, 0xfa, 0xb1, 0x76, 0xe0, 0x53, 0x60, 0x8a, 0xf5, 0x87, 0x04, 0xd6, 0xd9,
- 0xbb, 0xcf, 0xf6, 0x2d, 0x7d, 0x30, 0x2a, 0x9a, 0x9f, 0x4d, 0x7d, 0x1a, 0x14, 0xda, 0x44, 0x08,
- 0x04, 0xe1, 0xd9, 0xbb, 0x6f, 0x1c, 0x5c, 0x28, 0xc9, 0xa2, 0xb1, 0xac, 0xe8, 0x73, 0x8a, 0x94,
- 0x93, 0x6a, 0x1c, 0xc7, 0xc9, 0xfa, 0x80, 0x2f, 0x67, 0x47, 0xe8, 0x64, 0xef, 0x84, 0xdb, 0x59,
- 0x0f, 0xca, 0xac, 0x95, 0xe5, 0xd6, 0xd2, 0x96, 0x3f, 0x5f, 0xf5, 0x6c, 0x98, 0x46, 0xb3, 0xa4,
- 0x35, 0x5b, 0xb5, 0xfa, 0xb2, 0x37, 0xcf, 0xbd, 0x03, 0x6e, 0x1b, 0x92, 0xbb, 0xd2, 0x6c, 0xd5,
- 0x4a, 0x1b, 0x95, 0xe2, 0xb6, 0x68, 0x09, 0x35, 0x9a, 0xf5, 0xcd, 0x96, 0xb6, 0x55, 0xab, 0x55,
- 0x6b, 0xab, 0x94, 0x98, 0x67, 0x7a, 0x9e, 0x0d, 0x33, 0x5c, 0xd2, 0xaa, 0xcd, 0x4a, 0xab, 0x5c,
- 0xaf, 0xad, 0x54, 0x57, 0x8b, 0xc6, 0x30, 0x33, 0xea, 0x11, 0xf5, 0x16, 0xb8, 0x49, 0xe0, 0xa4,
- 0x5a, 0xaf, 0x79, 0x93, 0xef, 0x72, 0xa9, 0x56, 0xae, 0x78, 0x33, 0xed, 0x2b, 0x2a, 0x82, 0x33,
- 0x94, 0x5c, 0x6b, 0xa5, 0xba, 0xce, 0xef, 0x97, 0x7d, 0x22, 0xa3, 0x9e, 0x83, 0xeb, 0xf8, 0x6f,
- 0xd5, 0xda, 0xc5, 0xd2, 0x7a, 0x75, 0xb9, 0xf8, 0xeb, 0x19, 0xf5, 0x56, 0xb8, 0x59, 0xf8, 0x8b,
- 0x6e, 0x7d, 0xb5, 0xaa, 0xcb, 0xad, 0x8d, 0x6a, 0x63, 0xa3, 0xd4, 0x2c, 0xaf, 0x15, 0x3f, 0x49,
- 0x26, 0x26, 0x81, 0xa5, 0xcd, 0x79, 0x8e, 0xbe, 0x8a, 0xb7, 0x00, 0x4a, 0xa2, 0xa2, 0x3e, 0x69,
- 0x20, 0xec, 0xf1, 0x16, 0xef, 0xc7, 0x82, 0xb1, 0x64, 0x59, 0x50, 0xa1, 0xa7, 0x24, 0xa0, 0x95,
- 0x4c, 0x87, 0x9a, 0x23, 0xa8, 0xd0, 0x2d, 0x70, 0x53, 0xad, 0x42, 0x91, 0xd2, 0x2a, 0xe5, 0xfa,
- 0xc5, 0x8a, 0xd6, 0xba, 0x54, 0x5a, 0x5f, 0xaf, 0x34, 0x5b, 0x2b, 0x55, 0xad, 0xd1, 0x2c, 0x6e,
- 0xa3, 0x7f, 0xca, 0x06, 0x0b, 0x4e, 0x9c, 0xb4, 0xfe, 0x24, 0x9b, 0xb4, 0x59, 0xc7, 0x2e, 0x2c,
- 0x7d, 0x13, 0x14, 0x1c, 0x57, 0x77, 0xf7, 0x1d, 0xd6, 0xaa, 0x1f, 0x37, 0xb8, 0x55, 0x2f, 0x36,
- 0x48, 0x26, 0x8d, 0x65, 0x46, 0x9f, 0xcb, 0x24, 0x69, 0xa6, 0x63, 0x58, 0x73, 0x32, 0x46, 0x10,
- 0xf1, 0x79, 0x40, 0xbe, 0xb6, 0x57, 0x1b, 0xad, 0xd2, 0xba, 0x56, 0x29, 0x2d, 0x3f, 0x1c, 0xac,
- 0x34, 0x61, 0xf5, 0x0c, 0x9c, 0xda, 0xaa, 0x95, 0x96, 0xd6, 0x2b, 0xa4, 0xb9, 0xd4, 0x6b, 0xb5,
- 0x4a, 0xd9, 0x93, 0xfb, 0x77, 0x92, 0x7d, 0x1d, 0xcf, 0xde, 0x26, 0x7c, 0x7b, 0x36, 0x11, 0x27,
- 0xff, 0xbf, 0x94, 0x76, 0x7f, 0x0a, 0x35, 0x8c, 0xa7, 0x35, 0x5e, 0x1c, 0x3e, 0x2b, 0xe5, 0xf1,
- 0x24, 0xc5, 0x49, 0x32, 0x3c, 0xbe, 0x6d, 0x04, 0x3c, 0xce, 0xc0, 0x29, 0x1e, 0x0f, 0xe2, 0xf9,
- 0x14, 0x0d, 0xc3, 0x7b, 0x15, 0x98, 0xda, 0x30, 0x76, 0x88, 0xeb, 0xe7, 0x7e, 0x68, 0x7a, 0x2c,
- 0x40, 0x36, 0xf0, 0xb4, 0xc9, 0x1a, 0x1d, 0x61, 0x9a, 0x9e, 0x95, 0x5f, 0x49, 0x91, 0x9a, 0x8a,
- 0xbf, 0x2b, 0x71, 0xcf, 0xc4, 0x18, 0x8e, 0xe8, 0x99, 0xfe, 0x2c, 0x51, 0xcf, 0x34, 0x98, 0x56,
- 0x32, 0x98, 0xec, 0xa3, 0xc1, 0xc4, 0x7b, 0xc6, 0xcc, 0xc1, 0x74, 0x30, 0x4e, 0x90, 0x4d, 0x1a,
- 0xef, 0x63, 0xa5, 0x56, 0xdf, 0x5a, 0x5d, 0x6b, 0xad, 0x68, 0x95, 0x0a, 0x5b, 0xd6, 0xdd, 0x41,
- 0xef, 0xcc, 0xc2, 0x3c, 0xe3, 0x9d, 0x79, 0x3c, 0xdc, 0x1c, 0x09, 0x1f, 0x13, 0xf4, 0xbf, 0xf3,
- 0x53, 0x8a, 0x55, 0x51, 0xd0, 0x4f, 0x8d, 0x13, 0x4e, 0xac, 0xcb, 0xc3, 0x5b, 0x02, 0x71, 0x3f,
- 0x28, 0x88, 0xfb, 0x19, 0x89, 0x29, 0xa6, 0x3f, 0xad, 0xf8, 0xeb, 0x19, 0x28, 0x34, 0x70, 0x17,
- 0xb7, 0x5d, 0xf4, 0x23, 0xca, 0xc8, 0xda, 0x1e, 0x65, 0x22, 0x2b, 0x89, 0x4c, 0xe4, 0x5c, 0x0a,
- 0x26, 0x72, 0x7e, 0x74, 0x13, 0xb9, 0x90, 0xd4, 0x44, 0x9e, 0x8a, 0x30, 0x91, 0xe3, 0xfa, 0x83,
- 0x69, 0x99, 0xfe, 0xe0, 0xa3, 0x85, 0xa4, 0x63, 0x2f, 0x85, 0xf4, 0x78, 0x4d, 0xea, 0xef, 0xcb,
- 0x27, 0x19, 0xab, 0x07, 0x72, 0x9c, 0x4c, 0xff, 0x5f, 0x93, 0x4b, 0x61, 0x09, 0x50, 0x7d, 0x3c,
- 0xdc, 0x1c, 0xbe, 0xb7, 0x2a, 0xcf, 0xab, 0x36, 0x9a, 0x0d, 0x62, 0x47, 0x97, 0xeb, 0x9a, 0xb6,
- 0xb5, 0x49, 0x37, 0x8f, 0xce, 0x82, 0x1a, 0x52, 0xd1, 0xb6, 0x6a, 0xd4, 0x6a, 0xde, 0x11, 0xa9,
- 0xaf, 0x54, 0x6b, 0xcb, 0xad, 0x60, 0x24, 0xaa, 0xad, 0xd4, 0x8b, 0xbb, 0xea, 0x22, 0xdc, 0xc1,
- 0x51, 0x27, 0x5d, 0x1b, 0x2d, 0xa1, 0x54, 0x5b, 0x6e, 0x6d, 0xd4, 0x2a, 0x1b, 0xf5, 0x5a, 0xb5,
- 0x4c, 0xd2, 0x1b, 0x95, 0x66, 0xd1, 0xf0, 0xcc, 0xb7, 0x3e, 0x3b, 0xbd, 0x51, 0x29, 0x69, 0xe5,
- 0xb5, 0x8a, 0x46, 0x8b, 0x7c, 0x44, 0xbd, 0x0d, 0x2e, 0x94, 0x6a, 0xf5, 0xa6, 0x97, 0x52, 0xaa,
- 0x3d, 0xdc, 0x7c, 0x78, 0xb3, 0xd2, 0xda, 0xd4, 0xea, 0xe5, 0x4a, 0xa3, 0xe1, 0x8d, 0x7e, 0xcc,
- 0xaa, 0x2f, 0x76, 0xd5, 0x67, 0xc3, 0xbd, 0x1c, 0x6b, 0x95, 0x26, 0xf1, 0x54, 0xd8, 0xa8, 0x13,
- 0x67, 0xb5, 0xe5, 0x4a, 0x6b, 0xad, 0xd4, 0x68, 0x55, 0x6b, 0xe5, 0xfa, 0xc6, 0x66, 0xa9, 0x59,
- 0xf5, 0x06, 0xc9, 0x4d, 0xad, 0xde, 0xac, 0xb7, 0x2e, 0x56, 0xb4, 0x46, 0xb5, 0x5e, 0x2b, 0x9a,
- 0x5e, 0x95, 0xb9, 0x51, 0xd5, 0xb7, 0x6e, 0x2c, 0xf5, 0x26, 0x38, 0xe7, 0xa7, 0xaf, 0xd7, 0x3d,
- 0x41, 0x73, 0x76, 0x7e, 0x8f, 0xb7, 0x8d, 0x1a, 0xcd, 0xba, 0x46, 0x2d, 0xfd, 0x8d, 0xea, 0xaa,
- 0xe6, 0x4d, 0x4f, 0x8a, 0xcf, 0x4f, 0x75, 0x1e, 0xf0, 0x2f, 0x59, 0xc8, 0x35, 0x5c, 0xab, 0x87,
- 0xbe, 0x31, 0xec, 0xe8, 0xce, 0x03, 0xd8, 0xc4, 0x31, 0x61, 0x59, 0x77, 0x75, 0xb6, 0x76, 0xc2,
- 0xa5, 0xa0, 0x5f, 0x93, 0xde, 0x4d, 0x0d, 0x2d, 0x25, 0xab, 0x17, 0x31, 0x30, 0x7c, 0x4d, 0xee,
- 0x78, 0x59, 0x34, 0xa1, 0x64, 0xed, 0xe1, 0x7b, 0x46, 0xd9, 0x2f, 0x45, 0x70, 0x96, 0x83, 0xd5,
- 0x93, 0xbf, 0xaf, 0x32, 0x58, 0xbd, 0x1e, 0xae, 0xeb, 0x53, 0x3e, 0xa2, 0x73, 0xdb, 0xea, 0x37,
- 0xc0, 0xe3, 0x38, 0xf5, 0xaf, 0x6c, 0xd4, 0x2f, 0x56, 0x02, 0x45, 0x5f, 0x2e, 0x35, 0x4b, 0xc5,
- 0x1d, 0xf4, 0x19, 0x05, 0x72, 0x1b, 0xd6, 0xd5, 0xfe, 0x4d, 0x6c, 0x13, 0x5f, 0xe3, 0x76, 0x3a,
- 0xfc, 0x57, 0xf1, 0x38, 0x8d, 0x94, 0xd8, 0x37, 0xa2, 0x1d, 0x56, 0x3e, 0x9b, 0x4d, 0x22, 0xf6,
- 0x8d, 0xa3, 0x7a, 0xa9, 0xfc, 0xf5, 0x28, 0x62, 0x8f, 0x10, 0x2d, 0x56, 0x2f, 0xc0, 0xf9, 0xf0,
- 0x43, 0x75, 0xb9, 0x52, 0x6b, 0x56, 0x57, 0x1e, 0x0e, 0x85, 0x5b, 0xd5, 0xa4, 0xc4, 0x3f, 0xac,
- 0x9b, 0x8b, 0x9f, 0xdf, 0x9f, 0x83, 0xd3, 0xe1, 0xb7, 0xd5, 0x4a, 0xd3, 0xff, 0xf2, 0x08, 0x7a,
- 0x71, 0x1e, 0xe6, 0x68, 0xb7, 0xbf, 0xd5, 0xeb, 0x78, 0x16, 0xf3, 0xd3, 0x42, 0x74, 0x6f, 0x87,
- 0x93, 0xd5, 0xcd, 0x95, 0x46, 0xc3, 0xb5, 0x6c, 0x7d, 0x07, 0x93, 0x11, 0x92, 0x4a, 0xab, 0x3f,
- 0x19, 0xbd, 0x47, 0x7a, 0x2d, 0x5e, 0x1c, 0x6a, 0x68, 0x99, 0x11, 0xa8, 0x7f, 0x51, 0x6a, 0xed,
- 0x5c, 0x82, 0x60, 0x32, 0xf4, 0x1f, 0x19, 0x73, 0x9b, 0x8b, 0xc6, 0x65, 0xfb, 0xc2, 0x4b, 0xb2,
- 0x30, 0xd3, 0x34, 0xf6, 0xf0, 0x0b, 0x2c, 0x13, 0x3b, 0xea, 0x14, 0x28, 0xab, 0x1b, 0xcd, 0xe2,
- 0x09, 0xef, 0xc1, 0x9b, 0xca, 0x64, 0xc8, 0x43, 0xc5, 0x2b, 0xc0, 0x7b, 0x28, 0x35, 0x8b, 0x8a,
- 0xf7, 0xb0, 0x51, 0x69, 0x16, 0x73, 0xde, 0x43, 0xad, 0xd2, 0x2c, 0xe6, 0xbd, 0x87, 0xcd, 0xf5,
- 0x66, 0xb1, 0xe0, 0x3d, 0x54, 0x1b, 0xcd, 0xe2, 0x94, 0xf7, 0xb0, 0xd4, 0x68, 0x16, 0xa7, 0xbd,
- 0x87, 0x8b, 0x8d, 0x66, 0x71, 0xc6, 0x7b, 0x28, 0x37, 0x9b, 0x45, 0xf0, 0x1e, 0x1e, 0x6c, 0x34,
- 0x8b, 0xb3, 0xde, 0x43, 0xa9, 0xdc, 0x2c, 0xce, 0x91, 0x87, 0x4a, 0xb3, 0x38, 0xef, 0x3d, 0x34,
- 0x1a, 0xcd, 0xe2, 0x02, 0xa1, 0xdc, 0x68, 0x16, 0x4f, 0x92, 0xb2, 0xaa, 0xcd, 0x62, 0xd1, 0x7b,
- 0x58, 0x6b, 0x34, 0x8b, 0xa7, 0x48, 0xe6, 0x46, 0xb3, 0xa8, 0x92, 0x42, 0x1b, 0xcd, 0xe2, 0x75,
- 0x24, 0x4f, 0xa3, 0x59, 0x3c, 0x4d, 0x8a, 0x68, 0x34, 0x8b, 0x67, 0x08, 0x1b, 0x95, 0x66, 0xf1,
- 0x2c, 0xc9, 0xa3, 0x35, 0x8b, 0xd7, 0x93, 0x4f, 0xb5, 0x66, 0xf1, 0x1c, 0x61, 0xac, 0xd2, 0x2c,
- 0xde, 0x40, 0x1e, 0xb4, 0x66, 0x11, 0x91, 0x4f, 0xa5, 0x66, 0xf1, 0x46, 0xf4, 0x38, 0x98, 0x59,
- 0xc5, 0x2e, 0x05, 0x11, 0x15, 0x41, 0x59, 0xc5, 0x2e, 0x3f, 0x79, 0x7e, 0x6d, 0x0e, 0xae, 0x67,
- 0x0b, 0x2e, 0x2b, 0xb6, 0xb5, 0xb7, 0x8e, 0x77, 0xf4, 0xf6, 0x41, 0xe5, 0x51, 0xcf, 0x94, 0x43,
- 0x2f, 0xcf, 0x08, 0xeb, 0xcb, 0xbd, 0xb0, 0x37, 0x22, 0xcf, 0xb1, 0xa6, 0xaf, 0xbf, 0x62, 0xac,
- 0x88, 0x2b, 0xc6, 0x51, 0xc6, 0x5e, 0x4e, 0xc6, 0xd8, 0xfb, 0x07, 0xbe, 0x31, 0x08, 0xdb, 0x43,
- 0x99, 0xbe, 0xed, 0x21, 0xaf, 0x85, 0xf5, 0xb0, 0xed, 0x58, 0xa6, 0xde, 0x6d, 0x30, 0x67, 0x20,
- 0x3a, 0xbf, 0xec, 0x4f, 0x56, 0x9f, 0xeb, 0x37, 0x2a, 0x6a, 0xf0, 0x3d, 0x2b, 0x6e, 0x49, 0xaa,
- 0x5f, 0x42, 0x11, 0xed, 0xeb, 0x93, 0x41, 0xfb, 0x6a, 0x0a, 0xed, 0xeb, 0x39, 0x47, 0xa0, 0x9d,
- 0xac, 0xa9, 0x55, 0x47, 0x9b, 0x64, 0x86, 0xae, 0xf2, 0xfe, 0x6e, 0x94, 0x82, 0x3e, 0x93, 0x85,
- 0xb3, 0x15, 0x73, 0xd0, 0x24, 0x85, 0x57, 0xa3, 0xb7, 0xf1, 0xd0, 0x6c, 0x8a, 0x22, 0xbd, 0x77,
- 0x60, 0xb5, 0x07, 0xd3, 0x8c, 0x90, 0xe8, 0x6f, 0x05, 0x12, 0x6d, 0x08, 0x12, 0x7d, 0x60, 0x74,
- 0xd2, 0xc9, 0x04, 0x5a, 0x1b, 0x6b, 0xdf, 0x95, 0x43, 0x7f, 0x9e, 0x85, 0x53, 0xd4, 0x9f, 0xef,
- 0x41, 0x3a, 0x27, 0x22, 0xbd, 0xbd, 0x68, 0x7d, 0x75, 0xc3, 0xf9, 0x13, 0xd5, 0x6f, 0x2e, 0x05,
- 0xbd, 0x91, 0x17, 0xf8, 0x43, 0xa2, 0xc0, 0x23, 0xfa, 0xf1, 0xfe, 0xe2, 0x22, 0x64, 0xfd, 0xeb,
- 0x81, 0xac, 0x6b, 0x82, 0xac, 0xef, 0x1d, 0x89, 0xea, 0xf1, 0x8a, 0xf9, 0xcb, 0x39, 0x78, 0x1c,
- 0xe5, 0x90, 0x29, 0x02, 0xed, 0x07, 0x4b, 0x66, 0x47, 0xc3, 0x8e, 0xab, 0xdb, 0xae, 0x10, 0xca,
- 0xa2, 0x6f, 0xd2, 0x9d, 0x49, 0x61, 0xd2, 0x9d, 0x1d, 0x3a, 0xe9, 0x46, 0xef, 0xe6, 0x0d, 0xbc,
- 0x4b, 0x22, 0xb2, 0xa5, 0x18, 0x0c, 0x22, 0x6a, 0x18, 0xd5, 0xa2, 0x02, 0xcb, 0xef, 0x5b, 0x04,
- 0x94, 0x57, 0x8e, 0x5c, 0x42, 0x32, 0xc4, 0x7f, 0x6d, 0xbc, 0x96, 0x78, 0x8e, 0xff, 0x26, 0x9a,
- 0x8d, 0xc5, 0x4e, 0xaa, 0x53, 0xa8, 0x57, 0x4e, 0xc3, 0x0c, 0xe9, 0x72, 0xd6, 0x0d, 0xf3, 0x0a,
- 0xfa, 0x33, 0x05, 0xe6, 0x6a, 0xf8, 0x5a, 0x79, 0x57, 0xef, 0x76, 0xb1, 0xb9, 0x83, 0xd1, 0x23,
- 0x82, 0x6d, 0xaf, 0xf7, 0x7a, 0xb5, 0x70, 0xb7, 0xd6, 0x7f, 0x55, 0x1f, 0x80, 0xbc, 0xd3, 0xb6,
- 0x7a, 0xd4, 0xab, 0x6c, 0x81, 0x73, 0x0d, 0x13, 0x57, 0x9c, 0x4b, 0xfb, 0xee, 0xee, 0x22, 0x29,
- 0xab, 0xd4, 0x33, 0x1a, 0xde, 0x0f, 0x1a, 0xfd, 0x8f, 0x8d, 0x93, 0x7f, 0x39, 0xb0, 0x33, 0xce,
- 0xc4, 0x74, 0xc6, 0x01, 0xe3, 0x8b, 0x3c, 0xd3, 0x11, 0x8b, 0x24, 0xb7, 0xc0, 0x6c, 0xdb, 0xcf,
- 0x12, 0x9c, 0x99, 0xe3, 0x93, 0xd0, 0x5f, 0x24, 0xea, 0xae, 0xa5, 0x0a, 0x4f, 0xa6, 0x55, 0x78,
- 0xcc, 0xa6, 0xe6, 0x19, 0x38, 0xd5, 0xac, 0xd7, 0x5b, 0x1b, 0xa5, 0xda, 0xc3, 0x61, 0xac, 0x8a,
- 0x6d, 0xf4, 0x9a, 0x1c, 0x2c, 0x34, 0xac, 0xee, 0x55, 0x1c, 0xe2, 0x5c, 0x15, 0x9c, 0x31, 0x79,
- 0x39, 0x65, 0x0e, 0xc9, 0x49, 0x3d, 0x0b, 0x05, 0xdd, 0x74, 0xae, 0x61, 0xdf, 0xfc, 0x67, 0x6f,
- 0x0c, 0xc6, 0x0f, 0xf3, 0x1d, 0x81, 0x26, 0xc2, 0x78, 0xdf, 0x10, 0x49, 0x8a, 0x5c, 0x45, 0x00,
- 0x79, 0x01, 0xe6, 0x1c, 0xea, 0xb3, 0xd1, 0xe4, 0x5c, 0x73, 0x84, 0x34, 0xc2, 0x22, 0x75, 0x1a,
- 0x52, 0x18, 0x8b, 0xe4, 0x0d, 0xbd, 0x21, 0xe8, 0x3f, 0xb6, 0x04, 0x88, 0x4b, 0x47, 0x61, 0x2c,
- 0x19, 0xc8, 0xaf, 0x1b, 0xf7, 0x24, 0xfe, 0x1c, 0x9c, 0x66, 0xcd, 0xbe, 0x55, 0x5e, 0x2b, 0xad,
- 0xaf, 0x57, 0x6a, 0xab, 0x95, 0x56, 0x75, 0x99, 0xee, 0x01, 0x87, 0x29, 0xa5, 0x66, 0xb3, 0xb2,
- 0xb1, 0xd9, 0x6c, 0xb4, 0x2a, 0xcf, 0x2b, 0x57, 0x2a, 0xcb, 0xc4, 0x1d, 0x9a, 0x9c, 0x67, 0xf4,
- 0x1d, 0xd7, 0x4b, 0xb5, 0xc6, 0xa5, 0x8a, 0x56, 0xdc, 0xbd, 0x50, 0x82, 0x59, 0x6e, 0xa0, 0xf0,
- 0xb8, 0x5b, 0xc6, 0xdb, 0xfa, 0x7e, 0x97, 0x99, 0xe3, 0xc5, 0x13, 0x1e, 0x77, 0x44, 0x36, 0x75,
- 0xb3, 0x7b, 0x50, 0xcc, 0xa8, 0x45, 0x98, 0xe3, 0xc7, 0x84, 0x62, 0x16, 0xbd, 0xe3, 0x26, 0x98,
- 0xb9, 0x64, 0xd9, 0x57, 0x88, 0x0f, 0x2f, 0x7a, 0x3f, 0x8d, 0x69, 0xe5, 0x47, 0x07, 0xe0, 0x0c,
- 0xb0, 0xd7, 0xc9, 0x3b, 0x6d, 0xf9, 0xd4, 0x16, 0x87, 0x46, 0x00, 0xb8, 0x05, 0x66, 0xaf, 0xf9,
- 0xb9, 0xc3, 0x96, 0xce, 0x25, 0xa1, 0x9f, 0x91, 0x73, 0xc3, 0x1a, 0x5e, 0x64, 0xfa, 0xeb, 0xf9,
- 0x6f, 0xcf, 0x42, 0x61, 0x15, 0xbb, 0xa5, 0x6e, 0x97, 0x97, 0xdb, 0xab, 0xa5, 0x4f, 0x75, 0x0a,
- 0x95, 0x28, 0x75, 0xbb, 0xd1, 0x8d, 0x8a, 0x13, 0x90, 0x7f, 0xfa, 0x48, 0x48, 0x93, 0xf4, 0x99,
- 0x1e, 0x52, 0x60, 0xfa, 0x12, 0xfb, 0x95, 0xd0, 0x51, 0xfa, 0x4d, 0x9c, 0x99, 0xf4, 0xd4, 0x30,
- 0x9e, 0x59, 0x26, 0xde, 0x65, 0xc9, 0xcf, 0xa7, 0x3e, 0x04, 0x53, 0xfb, 0x0e, 0x2e, 0xeb, 0x8e,
- 0x3f, 0xb4, 0x89, 0x35, 0xad, 0x5f, 0x7e, 0x04, 0xb7, 0xdd, 0xc5, 0xea, 0x9e, 0x37, 0xf1, 0xd9,
- 0xa2, 0x19, 0x83, 0x10, 0x61, 0xec, 0x5d, 0xf3, 0x29, 0x78, 0xd3, 0xce, 0x6b, 0x86, 0xbb, 0x5b,
- 0xde, 0xd5, 0x5d, 0xb6, 0x8d, 0x12, 0xbc, 0xa3, 0x57, 0x8c, 0x00, 0x67, 0xac, 0x93, 0x4d, 0xe4,
- 0xe1, 0xf0, 0xc4, 0x20, 0x8e, 0xc1, 0x33, 0x66, 0x14, 0x10, 0xff, 0x26, 0x0b, 0xb9, 0x7a, 0x0f,
- 0x9b, 0xd2, 0x27, 0x21, 0x03, 0xd9, 0x66, 0xfb, 0x64, 0xfb, 0x06, 0x79, 0x27, 0xdd, 0xa0, 0xd2,
- 0x5e, 0xc9, 0x11, 0x92, 0xbd, 0x0b, 0x72, 0x86, 0xb9, 0x6d, 0x31, 0xcb, 0xf6, 0xc6, 0x08, 0x5b,
- 0xa7, 0x6a, 0x6e, 0x5b, 0x1a, 0xc9, 0x28, 0xeb, 0x9f, 0x1b, 0x57, 0x76, 0xfa, 0xe2, 0xfe, 0xdb,
- 0x69, 0x28, 0x50, 0x75, 0x46, 0xaf, 0x52, 0x40, 0x29, 0x75, 0x3a, 0x11, 0x82, 0xcf, 0x1e, 0x12,
- 0xbc, 0x45, 0x7e, 0x0b, 0x30, 0x09, 0xde, 0xc5, 0x40, 0x56, 0x92, 0x7d, 0x3b, 0x6b, 0x52, 0xa5,
- 0x4e, 0x27, 0xfa, 0x14, 0x41, 0x50, 0x60, 0x56, 0x2c, 0x90, 0x6f, 0xe1, 0x8a, 0x5c, 0x0b, 0x4f,
- 0x3c, 0x10, 0x44, 0xf2, 0x97, 0x3e, 0x44, 0xff, 0x90, 0x85, 0xa9, 0x75, 0xc3, 0x71, 0x3d, 0x6c,
- 0x4a, 0x32, 0xd8, 0xdc, 0x04, 0x33, 0xbe, 0x68, 0xbc, 0x2e, 0xcf, 0xeb, 0xcf, 0xc3, 0x04, 0x71,
- 0x26, 0xfe, 0xa0, 0x88, 0xce, 0xd3, 0xe3, 0x6b, 0xcf, 0xb8, 0x88, 0x3e, 0x61, 0x16, 0x16, 0x9b,
- 0xed, 0x2f, 0xf6, 0xe7, 0x02, 0x81, 0x6f, 0x08, 0x02, 0xbf, 0x67, 0x94, 0x22, 0xd3, 0x17, 0xfa,
- 0xef, 0x67, 0x01, 0xbc, 0xb2, 0xd9, 0x31, 0xde, 0x27, 0x0a, 0xc1, 0x39, 0x62, 0xa4, 0xfb, 0x1a,
- 0x5e, 0xba, 0x1b, 0xa2, 0x74, 0xbf, 0x79, 0x78, 0x55, 0xe3, 0x8e, 0xeb, 0xaa, 0x45, 0x50, 0x8c,
- 0x40, 0xb4, 0xde, 0x23, 0x7a, 0x7b, 0x20, 0xd4, 0x4d, 0x41, 0xa8, 0xf7, 0x8d, 0x58, 0x52, 0xfa,
- 0x72, 0xfd, 0xa3, 0x2c, 0x4c, 0x35, 0xb0, 0xeb, 0x75, 0x93, 0xe8, 0xa2, 0x4c, 0x0f, 0xcf, 0xb5,
- 0xed, 0xac, 0x64, 0xdb, 0xfe, 0x6a, 0x46, 0x36, 0xc8, 0x57, 0x28, 0x19, 0xc6, 0x53, 0xc4, 0xea,
- 0xc3, 0x9b, 0xa4, 0x82, 0x7c, 0x0d, 0xa3, 0x96, 0xbe, 0x74, 0xdf, 0x96, 0x0d, 0x7c, 0x40, 0xc4,
- 0x53, 0x76, 0xbc, 0x59, 0x9c, 0x39, 0x6c, 0x16, 0xcb, 0x9f, 0xb2, 0xe3, 0xeb, 0x18, 0xed, 0x98,
- 0x90, 0xd8, 0xd8, 0x18, 0x83, 0xcf, 0xc0, 0x28, 0xf2, 0x7a, 0x91, 0x02, 0x05, 0xb6, 0x79, 0xf0,
- 0x40, 0xfc, 0xde, 0xc1, 0xf0, 0xa9, 0xc5, 0xfb, 0x46, 0x30, 0xe5, 0xe2, 0x96, 0xe5, 0x03, 0x36,
- 0xb2, 0x1c, 0x1b, 0x77, 0x42, 0x9e, 0x44, 0x21, 0x66, 0xe3, 0x5c, 0xe8, 0xee, 0xe1, 0x93, 0xa8,
- 0x78, 0x5f, 0x35, 0x9a, 0x29, 0x31, 0x0a, 0x63, 0x58, 0xc9, 0x1f, 0x05, 0x85, 0x2f, 0xab, 0x00,
- 0x9b, 0xfb, 0x97, 0xbb, 0x86, 0xb3, 0x6b, 0x98, 0xc4, 0xfb, 0x6b, 0x8e, 0xbd, 0xd2, 0x60, 0xba,
- 0xb1, 0xe6, 0x5f, 0xa4, 0x51, 0x50, 0x04, 0x65, 0xdf, 0x36, 0xd8, 0x32, 0x80, 0xf7, 0xa8, 0xde,
- 0x1f, 0x78, 0x48, 0xe6, 0xfa, 0xc2, 0xa8, 0x78, 0x62, 0x08, 0x39, 0x58, 0xe4, 0x4a, 0x0f, 0x3d,
- 0x25, 0xf9, 0x88, 0xc9, 0x79, 0x31, 0x62, 0xb2, 0x70, 0xb6, 0xba, 0xd0, 0x77, 0xb6, 0xda, 0xc3,
- 0xd1, 0x31, 0x5e, 0x80, 0x89, 0x53, 0x91, 0xa2, 0x91, 0x67, 0xef, 0x8f, 0x47, 0x2c, 0xc3, 0x24,
- 0x9b, 0x3a, 0xcc, 0x83, 0x3f, 0x4c, 0xe0, 0xfb, 0xbc, 0x19, 0xc9, 0x3e, 0xef, 0x23, 0xe1, 0xdc,
- 0xc7, 0x92, 0x34, 0x9c, 0x13, 0x48, 0x4e, 0x60, 0x37, 0xd7, 0xc7, 0x2e, 0xfa, 0xa8, 0x74, 0x50,
- 0x45, 0x4e, 0xc6, 0xb1, 0xb3, 0x18, 0xc6, 0x41, 0x36, 0xe0, 0x80, 0xdb, 0x03, 0x8e, 0xeb, 0x81,
- 0x87, 0xd1, 0x4f, 0xa6, 0xcb, 0x7b, 0x23, 0xac, 0xd7, 0xa8, 0xb0, 0xe0, 0x1f, 0x52, 0xaf, 0x2f,
- 0x3d, 0x58, 0x29, 0x37, 0x8b, 0xf8, 0xf0, 0xc1, 0x75, 0x72, 0x44, 0x9d, 0x1e, 0x47, 0x0f, 0xd7,
- 0x64, 0xd0, 0xff, 0xc8, 0x42, 0x81, 0x99, 0x1b, 0x0f, 0x1c, 0x11, 0x42, 0xf4, 0xda, 0x51, 0x20,
- 0x89, 0x8d, 0x15, 0xf2, 0xa9, 0xa4, 0x00, 0x8c, 0xc1, 0xc0, 0x78, 0x38, 0x35, 0x00, 0xd0, 0x3f,
- 0x67, 0x21, 0xe7, 0x99, 0x41, 0x72, 0x91, 0x18, 0x3e, 0x29, 0xed, 0xc6, 0xcb, 0x09, 0xc0, 0x23,
- 0x1f, 0xa1, 0xdf, 0x4b, 0x30, 0xd3, 0xa3, 0x19, 0x83, 0x38, 0x20, 0xb7, 0x4a, 0x74, 0x46, 0x58,
- 0x0b, 0x7f, 0x43, 0xef, 0x95, 0x72, 0x05, 0x8e, 0xe7, 0x27, 0x19, 0x1c, 0x95, 0x71, 0x04, 0x6d,
- 0xd8, 0x46, 0xff, 0x9a, 0x05, 0xd0, 0xb0, 0x63, 0x75, 0xaf, 0xe2, 0x2d, 0xdb, 0x40, 0x37, 0x86,
- 0x00, 0xb0, 0x66, 0x9f, 0x09, 0x9b, 0xfd, 0xa7, 0xb3, 0xb2, 0x6e, 0xbd, 0x82, 0xe6, 0xf9, 0xc4,
- 0x23, 0xc4, 0xff, 0x6c, 0x98, 0x62, 0x72, 0x64, 0x36, 0xa5, 0x9c, 0xf0, 0xfd, 0x9f, 0xd0, 0x07,
- 0xa4, 0xdc, 0x82, 0x65, 0x38, 0x4a, 0x06, 0x40, 0x79, 0x04, 0x00, 0x4e, 0xc2, 0xac, 0x0f, 0xc0,
- 0x96, 0x56, 0x2d, 0x62, 0xf4, 0x2e, 0x85, 0x78, 0x58, 0xd0, 0xc1, 0xed, 0xe8, 0x3d, 0xcd, 0x9f,
- 0x4b, 0x4f, 0xf6, 0x39, 0x79, 0x04, 0xe5, 0xa7, 0x04, 0xd0, 0x6f, 0x4b, 0xcd, 0xee, 0x25, 0x18,
- 0x7a, 0xac, 0xf4, 0x57, 0x17, 0x2a, 0x30, 0x2f, 0x58, 0x25, 0xea, 0x39, 0x38, 0x2d, 0x24, 0xd0,
- 0xf1, 0xae, 0x53, 0x3c, 0xa1, 0x22, 0x38, 0x2b, 0x7c, 0x61, 0x2f, 0xb8, 0x53, 0xcc, 0xa0, 0x4f,
- 0xfd, 0x51, 0x26, 0x58, 0xef, 0x79, 0x5f, 0x8e, 0xad, 0xb4, 0x7d, 0x5c, 0x0c, 0x3d, 0xd9, 0xb6,
- 0x4c, 0x17, 0x3f, 0xca, 0xb9, 0xa9, 0x04, 0x09, 0xb1, 0x56, 0xc3, 0x39, 0x98, 0x72, 0x6d, 0xde,
- 0x75, 0xc5, 0x7f, 0xe5, 0x15, 0x2b, 0x2f, 0x2a, 0x56, 0x0d, 0x2e, 0x18, 0x66, 0xbb, 0xbb, 0xdf,
- 0xc1, 0x1a, 0xee, 0xea, 0x9e, 0x0c, 0x9d, 0x92, 0xb3, 0x8c, 0x7b, 0xd8, 0xec, 0x60, 0xd3, 0xa5,
- 0x7c, 0xfa, 0xa7, 0x50, 0x25, 0x72, 0x8a, 0xca, 0x78, 0xbf, 0xa8, 0x8c, 0x4f, 0x1c, 0xb4, 0x84,
- 0x1b, 0xb3, 0xde, 0x77, 0x0f, 0x00, 0xad, 0xdb, 0x45, 0x03, 0x5f, 0x63, 0x6a, 0x78, 0x43, 0xdf,
- 0xaa, 0x5f, 0x3d, 0xc8, 0xa0, 0x71, 0x99, 0xd1, 0x17, 0x02, 0xf5, 0x7b, 0x8e, 0xa0, 0x7e, 0x77,
- 0x4a, 0xb2, 0x90, 0x4c, 0xeb, 0x7a, 0x23, 0x68, 0xdd, 0x3c, 0xcc, 0x84, 0xbb, 0xc9, 0x8a, 0x7a,
- 0x03, 0x9c, 0xf1, 0x3d, 0x8c, 0x6b, 0x95, 0xca, 0x72, 0xa3, 0xb5, 0xb5, 0xb9, 0xaa, 0x95, 0x96,
- 0x2b, 0x45, 0xf0, 0xf4, 0x93, 0xea, 0x65, 0xe0, 0x18, 0x9c, 0x43, 0x7f, 0x90, 0x85, 0x3c, 0x39,
- 0x42, 0x8d, 0xbe, 0x75, 0x4c, 0x9a, 0xe3, 0x08, 0x4e, 0x4f, 0xc1, 0xb8, 0x2b, 0x7f, 0x25, 0x04,
- 0x13, 0x26, 0xe1, 0xea, 0x48, 0x57, 0x42, 0xc4, 0x10, 0x4a, 0x7f, 0x26, 0xe4, 0x35, 0xc9, 0xc6,
- 0xae, 0x75, 0xed, 0xeb, 0xb9, 0x49, 0x7a, 0xf5, 0x3f, 0xe6, 0x26, 0x39, 0x80, 0x85, 0x89, 0x37,
- 0xc9, 0x01, 0xed, 0x2e, 0xa6, 0x99, 0xa2, 0x0f, 0xe7, 0x83, 0xf9, 0xdf, 0xc7, 0xb2, 0x47, 0xda,
- 0xfb, 0x2a, 0xc1, 0xbc, 0x61, 0xba, 0xd8, 0x36, 0xf5, 0xee, 0x4a, 0x57, 0xdf, 0xf1, 0xed, 0xd3,
- 0xfe, 0x0d, 0x8f, 0x2a, 0x97, 0x47, 0x13, 0xff, 0x50, 0xcf, 0x03, 0xb8, 0x78, 0xaf, 0xd7, 0xd5,
- 0xdd, 0x50, 0xf5, 0xb8, 0x14, 0x5e, 0xfb, 0x72, 0xa2, 0xf6, 0x3d, 0x05, 0xae, 0xa3, 0xa0, 0x35,
- 0x0f, 0x7a, 0x78, 0xcb, 0x34, 0x9e, 0xbf, 0x4f, 0x22, 0x15, 0x53, 0x1d, 0x1d, 0xf4, 0x49, 0xd8,
- 0x01, 0x2a, 0x88, 0x3b, 0x40, 0xea, 0x7d, 0x70, 0x03, 0x09, 0x2b, 0x8d, 0xbd, 0x5f, 0x2e, 0x19,
- 0x9d, 0x1d, 0xec, 0x56, 0xb7, 0x37, 0x0c, 0xc7, 0x31, 0xcc, 0x1d, 0x32, 0x1d, 0x9f, 0xd6, 0xa2,
- 0x33, 0xa0, 0xbf, 0x91, 0x8e, 0x82, 0xe4, 0xf7, 0x19, 0x43, 0xa2, 0x20, 0x05, 0xed, 0x54, 0xe9,
- 0x6b, 0xa7, 0xc1, 0xaa, 0x4e, 0x4e, 0x62, 0x55, 0x87, 0xc7, 0x34, 0x2f, 0xb9, 0x3a, 0xf0, 0x7a,
- 0xa9, 0x30, 0x4b, 0x71, 0xd5, 0x48, 0xbf, 0xef, 0xfb, 0x8a, 0x02, 0x0b, 0xb4, 0xe8, 0x25, 0xcb,
- 0xba, 0xb2, 0xa7, 0xdb, 0x57, 0xd0, 0x0f, 0x1c, 0x6d, 0x17, 0x37, 0x76, 0xf7, 0x2a, 0x6a, 0x4b,
- 0xb6, 0x4f, 0x79, 0x73, 0xfd, 0xca, 0x8b, 0x7e, 0x4b, 0x7a, 0x4a, 0x22, 0xc8, 0xd3, 0xaf, 0xd4,
- 0x64, 0xb6, 0xb7, 0xe4, 0x0e, 0x2e, 0xca, 0x30, 0x98, 0x3e, 0xf0, 0xbf, 0x11, 0x00, 0xef, 0x8f,
- 0x23, 0xfc, 0xce, 0xc0, 0x38, 0x71, 0x47, 0x5f, 0x1c, 0x0d, 0x3b, 0x9f, 0xaf, 0x11, 0xb0, 0x2b,
- 0x82, 0x72, 0x25, 0x70, 0x46, 0xf2, 0x1e, 0xf9, 0x0a, 0xe5, 0xd2, 0x43, 0x33, 0x82, 0xe5, 0x89,
- 0xa0, 0x79, 0x5a, 0x64, 0xa1, 0xde, 0x4b, 0x15, 0xd3, 0xcf, 0x4b, 0xef, 0xb8, 0x0d, 0x14, 0x10,
- 0xe5, 0x6e, 0x32, 0xad, 0x52, 0x6e, 0xbb, 0x4e, 0x9e, 0xcd, 0xf4, 0xd1, 0x7c, 0x79, 0x1e, 0x66,
- 0xfc, 0x68, 0x54, 0xe4, 0x86, 0xb6, 0x00, 0xc3, 0xb3, 0x50, 0x70, 0xac, 0x7d, 0xbb, 0x8d, 0xd9,
- 0x1e, 0x28, 0x7b, 0x1b, 0x61, 0xbf, 0x6e, 0xa8, 0xb9, 0x70, 0xc8, 0x22, 0xc9, 0x25, 0xb6, 0x48,
- 0xa2, 0xed, 0xdd, 0x18, 0xfb, 0x01, 0xbd, 0x42, 0xfa, 0x5a, 0x0d, 0x01, 0xb3, 0x06, 0x76, 0x1f,
- 0x8b, 0x46, 0xc0, 0x2f, 0x4b, 0xed, 0x06, 0x0d, 0xa9, 0x49, 0x32, 0x95, 0xab, 0x8f, 0x60, 0x07,
- 0xdf, 0x08, 0xd7, 0xfb, 0x39, 0x98, 0x01, 0x4c, 0x0c, 0xde, 0x2d, 0x6d, 0xbd, 0xa8, 0xa0, 0x17,
- 0xe5, 0xa0, 0x48, 0x59, 0xab, 0x07, 0xb6, 0x20, 0x7a, 0x75, 0xe6, 0xb8, 0x0d, 0xde, 0xe8, 0x19,
- 0xec, 0xef, 0x66, 0x65, 0x43, 0x77, 0x0b, 0x82, 0x0f, 0x6b, 0x17, 0xa1, 0x49, 0x23, 0x34, 0xb3,
- 0x18, 0xe5, 0x43, 0x3f, 0x9b, 0x91, 0x89, 0x04, 0x2e, 0xc7, 0x62, 0xfa, 0xbd, 0xd2, 0x57, 0x73,
- 0x7e, 0x50, 0xc1, 0x15, 0xdb, 0xda, 0xdb, 0xb2, 0xbb, 0xe8, 0x7f, 0x49, 0x5d, 0xb4, 0x10, 0x31,
- 0xbb, 0xc8, 0x46, 0xcf, 0x2e, 0xc8, 0x8a, 0x74, 0x37, 0xdc, 0x0a, 0xeb, 0x8e, 0x30, 0x7c, 0xab,
- 0xb7, 0xc1, 0x82, 0xde, 0xe9, 0x6c, 0xea, 0x3b, 0xb8, 0xec, 0x4d, 0xdb, 0x4d, 0x97, 0x05, 0x1c,
- 0xeb, 0x4b, 0x8d, 0x9d, 0xca, 0x88, 0x7d, 0xe4, 0xd4, 0x21, 0xab, 0x54, 0x7e, 0x19, 0x56, 0x00,
- 0x91, 0xc9, 0x6f, 0x22, 0xc3, 0x9f, 0x37, 0x64, 0xb4, 0x77, 0xf5, 0x30, 0x3c, 0x22, 0x7b, 0x93,
- 0xf4, 0xc5, 0x92, 0xe0, 0x3b, 0x7d, 0xcd, 0xfb, 0xa5, 0x2c, 0x4c, 0x79, 0x78, 0x94, 0x3a, 0x1d,
- 0xf4, 0x04, 0x21, 0x8a, 0x68, 0xa4, 0x37, 0xdc, 0x77, 0x4b, 0xbb, 0x21, 0xfa, 0x35, 0xa4, 0xf4,
- 0x23, 0x30, 0x09, 0x85, 0x98, 0x15, 0x84, 0x28, 0xe7, 0x6d, 0x18, 0x5b, 0x44, 0xfa, 0xe2, 0xfb,
- 0x64, 0x16, 0xe6, 0xfd, 0x79, 0xc6, 0x0a, 0x76, 0xdb, 0xbb, 0xe8, 0x1e, 0xd9, 0x75, 0x2e, 0xd6,
- 0x12, 0x83, 0x2d, 0xe1, 0x2e, 0xfa, 0xb7, 0x4c, 0x42, 0x95, 0x17, 0x4a, 0x8e, 0x58, 0x24, 0x4c,
- 0xa4, 0x8b, 0x71, 0x04, 0xd3, 0x17, 0xe6, 0x17, 0xb2, 0x00, 0x4d, 0x2b, 0x98, 0x2c, 0x1f, 0x41,
- 0x92, 0x3f, 0x28, 0xbd, 0x5b, 0xcc, 0x2a, 0x1e, 0x16, 0x9b, 0xbc, 0xe7, 0x90, 0x74, 0xa6, 0x1a,
- 0x56, 0xd2, 0x44, 0xda, 0xfa, 0xcc, 0xf2, 0x7e, 0xaf, 0x6b, 0xb4, 0x75, 0xb7, 0xdf, 0x03, 0x30,
- 0x5a, 0xbc, 0xe4, 0x7a, 0xe3, 0x44, 0x46, 0x63, 0x50, 0x46, 0x84, 0x2c, 0x69, 0x04, 0x9f, 0xac,
- 0x1f, 0xc1, 0x47, 0xd2, 0xab, 0x67, 0x08, 0xf1, 0x09, 0xa8, 0xa7, 0x02, 0x27, 0xeb, 0x3d, 0x6c,
- 0x2e, 0xd9, 0x58, 0xef, 0xb4, 0xed, 0xfd, 0xbd, 0xcb, 0x0e, 0xef, 0xbe, 0x1a, 0xaf, 0xa3, 0xdc,
- 0xca, 0x75, 0x56, 0x58, 0xb9, 0x46, 0xdf, 0xa5, 0xc8, 0x46, 0x4f, 0xe3, 0xf6, 0x57, 0x38, 0x1e,
- 0x46, 0x18, 0xea, 0x12, 0x39, 0x5d, 0xf5, 0x2d, 0x52, 0xe7, 0x92, 0x2c, 0x52, 0xbf, 0x55, 0x2a,
- 0x16, 0x9b, 0x54, 0xbd, 0x26, 0xe2, 0x3b, 0xb7, 0xd0, 0xc0, 0x6e, 0x04, 0xbc, 0xb7, 0xc2, 0xfc,
- 0xe5, 0xf0, 0x4b, 0x00, 0xb1, 0x98, 0x38, 0xc0, 0xa3, 0xf5, 0x6d, 0x49, 0x57, 0x68, 0x44, 0x16,
- 0x22, 0xd0, 0x0d, 0x10, 0xcc, 0xca, 0xb8, 0xcd, 0x25, 0x5a, 0x6e, 0x89, 0x2d, 0x3f, 0x7d, 0x14,
- 0x3e, 0x9a, 0x85, 0x59, 0x72, 0x69, 0xf3, 0xd2, 0x01, 0x39, 0xc8, 0x29, 0x69, 0x94, 0xbc, 0x9c,
- 0x17, 0xb3, 0x0a, 0xb9, 0xae, 0x61, 0x5e, 0xf1, 0xfd, 0x1d, 0xbd, 0xe7, 0xf0, 0x0a, 0xd0, 0xec,
- 0x80, 0x2b, 0x40, 0x83, 0x6d, 0x92, 0xa0, 0xdc, 0x23, 0xdd, 0x49, 0x3f, 0x94, 0x5c, 0xfa, 0x62,
- 0xfc, 0xab, 0x1c, 0x14, 0x1a, 0x58, 0xb7, 0xdb, 0xbb, 0xe8, 0x7d, 0xd9, 0x81, 0x53, 0x89, 0x69,
- 0x71, 0x2a, 0xb1, 0x02, 0x53, 0xdb, 0x46, 0xd7, 0xc5, 0x36, 0xf5, 0x01, 0xe7, 0xbb, 0x76, 0xda,
- 0xc4, 0x97, 0xba, 0x56, 0xfb, 0xca, 0x22, 0x33, 0xed, 0x17, 0xfd, 0xe8, 0xcd, 0x8b, 0x2b, 0xe4,
- 0x27, 0xcd, 0xff, 0xd9, 0x33, 0x08, 0x1d, 0xcb, 0x76, 0xa3, 0x6e, 0x03, 0x8a, 0xa0, 0xd2, 0xb0,
- 0x6c, 0x57, 0xa3, 0x3f, 0x7a, 0x30, 0x6f, 0xef, 0x77, 0xbb, 0x4d, 0xfc, 0xa8, 0xeb, 0x4f, 0xeb,
- 0xfc, 0x77, 0xcf, 0x58, 0xb4, 0xb6, 0xb7, 0x1d, 0x4c, 0x17, 0x15, 0xf2, 0x1a, 0x7b, 0x53, 0x4f,
- 0x43, 0xbe, 0x6b, 0xec, 0x19, 0x74, 0x22, 0x92, 0xd7, 0xe8, 0x8b, 0x7a, 0x07, 0x14, 0xc3, 0x39,
- 0x10, 0x65, 0xf4, 0x5c, 0x81, 0x34, 0xcd, 0x43, 0xe9, 0x9e, 0xce, 0x5c, 0xc1, 0x07, 0xce, 0xb9,
- 0x29, 0xf2, 0x9d, 0x3c, 0x8b, 0x07, 0x6e, 0x64, 0x36, 0x4c, 0xa8, 0xc4, 0xa3, 0x67, 0xb8, 0x36,
- 0x6e, 0x5b, 0x76, 0xc7, 0x97, 0x4d, 0xf4, 0x04, 0x83, 0xe5, 0x4b, 0xb6, 0xcd, 0x31, 0xb0, 0xf0,
- 0xf4, 0x35, 0xed, 0xdd, 0x05, 0xaf, 0xdb, 0xf4, 0x8a, 0xbe, 0x64, 0xb8, 0xbb, 0x1b, 0xd8, 0xd5,
- 0xd1, 0x5f, 0x29, 0x03, 0x35, 0x6e, 0xf6, 0xff, 0xd7, 0xb8, 0x21, 0x1a, 0x47, 0x63, 0x7e, 0xb9,
- 0xfb, 0xb6, 0xe9, 0xc9, 0x91, 0xf9, 0xd1, 0x72, 0x29, 0xea, 0x7d, 0x70, 0x43, 0xf8, 0xe6, 0x2f,
- 0xa5, 0x2e, 0x73, 0xae, 0xb5, 0xd3, 0x5a, 0x74, 0x06, 0x75, 0x13, 0x1e, 0x4f, 0x3f, 0xae, 0x35,
- 0x37, 0xd6, 0xd7, 0x8c, 0x9d, 0xdd, 0xae, 0xb1, 0xb3, 0xeb, 0x3a, 0x55, 0xd3, 0x71, 0xb1, 0xde,
- 0xa9, 0x6f, 0x6b, 0xf4, 0x1e, 0x2f, 0x20, 0x74, 0x64, 0xb2, 0x8a, 0x3e, 0xe2, 0x72, 0xa3, 0x1b,
- 0xaf, 0x29, 0x11, 0x2d, 0xe5, 0x19, 0x5e, 0x4b, 0x71, 0xf6, 0xbb, 0x01, 0xa6, 0x37, 0xf5, 0x61,
- 0x1a, 0xaa, 0xfa, 0x7e, 0x97, 0x34, 0x17, 0x92, 0x39, 0xe9, 0x38, 0x17, 0xc3, 0x49, 0xfa, 0xcd,
- 0xe6, 0x7f, 0x15, 0x20, 0xbf, 0x6a, 0xeb, 0xbd, 0x5d, 0xf4, 0x22, 0xae, 0x7f, 0x1e, 0x57, 0x9b,
- 0x08, 0xb4, 0x33, 0x3b, 0x4c, 0x3b, 0x95, 0x21, 0xda, 0x99, 0xe3, 0xb4, 0x33, 0x7a, 0xd1, 0xf9,
- 0x02, 0xcc, 0xb5, 0xad, 0x6e, 0x17, 0xb7, 0x3d, 0x79, 0x54, 0x3b, 0x64, 0xb5, 0x67, 0x46, 0x13,
- 0xd2, 0x48, 0x84, 0x7b, 0xec, 0x36, 0xe8, 0x1a, 0x3b, 0x55, 0xfa, 0x30, 0x01, 0xbd, 0x3a, 0x0b,
- 0xb9, 0x4a, 0x67, 0x07, 0x0b, 0xeb, 0xf0, 0x19, 0x6e, 0x1d, 0xfe, 0x2c, 0x14, 0x5c, 0xdd, 0xde,
- 0xc1, 0xae, 0xbf, 0x4e, 0x40, 0xdf, 0x82, 0xc0, 0xfb, 0x0a, 0x17, 0x78, 0xff, 0x9b, 0x21, 0xe7,
- 0xc9, 0x8c, 0xb9, 0xc5, 0x3f, 0x7e, 0x10, 0xfc, 0x44, 0xf6, 0x8b, 0x5e, 0x89, 0x8b, 0x5e, 0xad,
- 0x35, 0xf2, 0x43, 0x3f, 0xd6, 0xf9, 0x43, 0x58, 0x93, 0x2b, 0x89, 0xdb, 0x96, 0x59, 0xdd, 0xd3,
- 0x77, 0x30, 0xab, 0x66, 0x98, 0xe0, 0x7f, 0xad, 0xec, 0x59, 0x8f, 0x18, 0x6c, 0x51, 0x2b, 0x4c,
- 0xf0, 0xaa, 0xb0, 0x6b, 0x74, 0x3a, 0xd8, 0x64, 0x2d, 0x9b, 0xbd, 0x5d, 0x38, 0x0f, 0x39, 0x8f,
- 0x07, 0x4f, 0x7f, 0x3c, 0x63, 0xa1, 0x78, 0x42, 0x9d, 0xf3, 0x9a, 0x15, 0x6d, 0xbc, 0xc5, 0x8c,
- 0xb8, 0xe6, 0x2a, 0xe3, 0x35, 0x44, 0x2b, 0x37, 0xb8, 0x71, 0x3d, 0x19, 0xf2, 0xa6, 0xd5, 0xc1,
- 0x43, 0x07, 0x21, 0x9a, 0x4b, 0x7d, 0x3a, 0xe4, 0x71, 0xc7, 0xeb, 0x15, 0x14, 0x92, 0xfd, 0x7c,
- 0xbc, 0x2c, 0x35, 0x9a, 0x39, 0x99, 0x6b, 0xd2, 0x20, 0x6e, 0xd3, 0x6f, 0x80, 0xdf, 0x3b, 0x05,
- 0x27, 0x69, 0x1f, 0xd0, 0xd8, 0xbf, 0xec, 0x91, 0xba, 0x8c, 0xd1, 0x9b, 0x06, 0x0f, 0x5c, 0x27,
- 0x45, 0x65, 0x3f, 0x0d, 0x79, 0x67, 0xff, 0x72, 0x60, 0x84, 0xd2, 0x17, 0xbe, 0xe9, 0x66, 0xc7,
- 0x32, 0x9c, 0x29, 0xa3, 0x0e, 0x67, 0xc2, 0xd0, 0xa4, 0xf8, 0x8d, 0x3f, 0x1c, 0xc8, 0xe8, 0x81,
- 0x0e, 0x7f, 0x20, 0x1b, 0x34, 0x0c, 0x9d, 0x83, 0x29, 0x7d, 0xdb, 0xc5, 0x76, 0x68, 0x26, 0xb2,
- 0x57, 0x6f, 0xa8, 0xbc, 0x8c, 0xb7, 0x2d, 0xdb, 0x13, 0x0b, 0xbd, 0x77, 0x21, 0x78, 0xe7, 0x5a,
- 0x2e, 0x08, 0x3b, 0x68, 0x77, 0xc2, 0x29, 0xd3, 0x5a, 0xc6, 0x3d, 0x26, 0x67, 0x8a, 0xe2, 0x3c,
- 0x69, 0x01, 0x87, 0x3f, 0x1c, 0xea, 0x4a, 0x16, 0x0e, 0x77, 0x25, 0xe8, 0xd3, 0x49, 0xe7, 0xcc,
- 0x7d, 0x40, 0x8f, 0xcd, 0x42, 0x53, 0x9f, 0x05, 0x73, 0x1d, 0xe6, 0x21, 0xd6, 0x36, 0x82, 0x56,
- 0x12, 0xf9, 0x9f, 0x90, 0x39, 0x54, 0xa4, 0x1c, 0xaf, 0x48, 0xab, 0x30, 0x4d, 0x8e, 0x5e, 0x7b,
- 0x9a, 0x94, 0xef, 0xf3, 0xc8, 0x27, 0xd3, 0xba, 0xa0, 0x52, 0x9c, 0xd8, 0x16, 0xcb, 0xec, 0x17,
- 0x2d, 0xf8, 0x39, 0xd9, 0xec, 0x3b, 0x5e, 0x42, 0xe9, 0x37, 0xc7, 0x9f, 0x2b, 0xc0, 0x0d, 0x65,
- 0xdb, 0x72, 0x1c, 0x72, 0x04, 0xa7, 0xbf, 0x61, 0xbe, 0x39, 0x2b, 0x5c, 0xc1, 0xf3, 0x98, 0x6e,
- 0x7e, 0x83, 0x1a, 0xd4, 0xe4, 0x9a, 0xc6, 0x9f, 0x4b, 0x07, 0xad, 0x09, 0xf6, 0x1f, 0x22, 0x84,
- 0xfe, 0xf5, 0xd1, 0x48, 0xde, 0x9d, 0x91, 0x89, 0xa3, 0x93, 0x50, 0x56, 0x13, 0xb8, 0x73, 0x29,
- 0x0b, 0x37, 0xf6, 0x73, 0xb3, 0x65, 0x3a, 0x41, 0x83, 0xb9, 0x79, 0x48, 0x7b, 0x11, 0xe3, 0xae,
- 0xc4, 0xde, 0xb8, 0x1b, 0x51, 0x77, 0xae, 0xb4, 0x88, 0xc5, 0x92, 0xf0, 0x40, 0x4f, 0xdc, 0x8d,
- 0xbb, 0x89, 0xc9, 0xa7, 0x2f, 0xdc, 0xdf, 0xcd, 0xc1, 0xc9, 0x55, 0xdb, 0xda, 0xef, 0x39, 0x61,
- 0x0f, 0xf4, 0x27, 0x83, 0x37, 0x64, 0x0b, 0x32, 0xa6, 0xc1, 0x2d, 0x30, 0x6b, 0x33, 0x6b, 0x2e,
- 0xdc, 0x9e, 0xe5, 0x93, 0xf8, 0xde, 0x4b, 0x39, 0x4a, 0xef, 0x15, 0xf6, 0x33, 0x39, 0xa1, 0x9f,
- 0xe9, 0xef, 0x39, 0xf2, 0x03, 0x7a, 0x8e, 0x3f, 0xce, 0x26, 0x1c, 0x54, 0xfb, 0x44, 0x14, 0xd1,
- 0x5f, 0x94, 0xa1, 0xb0, 0x43, 0x32, 0xb2, 0xee, 0xe2, 0x49, 0x72, 0x35, 0x23, 0xc4, 0x35, 0xf6,
- 0x6b, 0x28, 0x57, 0x85, 0xd7, 0xe1, 0x44, 0x03, 0x5c, 0x3c, 0xb7, 0xe9, 0x2b, 0xd5, 0x1b, 0x72,
- 0x30, 0x17, 0x94, 0x5e, 0xed, 0x38, 0x42, 0x74, 0x57, 0x4e, 0xa3, 0xe6, 0x65, 0x34, 0xea, 0xd0,
- 0x3a, 0x73, 0x30, 0xea, 0x28, 0xdc, 0xa8, 0x33, 0x70, 0x74, 0x99, 0x8b, 0x18, 0x5d, 0xd0, 0x0b,
- 0x15, 0xd9, 0x4b, 0xec, 0xc4, 0xae, 0x95, 0xd4, 0xe6, 0xb1, 0x3c, 0x58, 0x48, 0x5e, 0xa5, 0x37,
- 0xbc, 0x56, 0xe9, 0x2b, 0xc9, 0x87, 0xb2, 0x70, 0xea, 0x70, 0x67, 0xfe, 0x0d, 0xa2, 0x97, 0x9a,
- 0x57, 0x27, 0x27, 0xf0, 0x52, 0x23, 0x6f, 0xe2, 0x26, 0x5d, 0x6c, 0x10, 0x14, 0xc1, 0xde, 0x1b,
- 0xde, 0x89, 0xcb, 0x85, 0x39, 0x91, 0x24, 0x9a, 0xbe, 0x00, 0x7f, 0x48, 0x81, 0x99, 0x06, 0x76,
- 0xd7, 0xf5, 0x03, 0x6b, 0xdf, 0x45, 0xba, 0xec, 0xf6, 0xdc, 0x33, 0xa1, 0xd0, 0x25, 0xbf, 0x90,
- 0x0e, 0x86, 0x0f, 0x3a, 0xca, 0xef, 0x6f, 0x11, 0xdf, 0x20, 0x4a, 0x5a, 0x63, 0xf9, 0xc5, 0xe8,
- 0x33, 0x32, 0xbb, 0xa3, 0x01, 0x77, 0x63, 0xd9, 0xda, 0x49, 0xb4, 0x77, 0x1a, 0x55, 0x74, 0xfa,
- 0xb0, 0x7c, 0x97, 0x02, 0xf3, 0x0d, 0xec, 0x56, 0x9d, 0x15, 0xfd, 0xaa, 0x65, 0x1b, 0x2e, 0x46,
- 0xab, 0xb2, 0xd0, 0x9c, 0x07, 0x30, 0x82, 0xdf, 0x58, 0x4c, 0x2c, 0x2e, 0x05, 0xfd, 0x6c, 0x52,
- 0x47, 0x21, 0x81, 0x8f, 0xb1, 0x80, 0x90, 0xc8, 0xc7, 0x22, 0xae, 0xf8, 0x09, 0x5c, 0xc3, 0x9d,
- 0x65, 0x40, 0x94, 0xec, 0xf6, 0xae, 0x71, 0x15, 0x77, 0x12, 0x02, 0xe1, 0xff, 0x16, 0x02, 0x11,
- 0x10, 0x4a, 0xec, 0xbe, 0x22, 0xf0, 0x31, 0x0e, 0xf7, 0x95, 0x38, 0x82, 0x13, 0x09, 0x6b, 0xe5,
- 0x75, 0x3d, 0x6c, 0x3d, 0xf3, 0x01, 0x59, 0xb1, 0x86, 0x26, 0x5b, 0x96, 0x37, 0xd9, 0x46, 0xea,
- 0x58, 0x68, 0xd9, 0xc3, 0x74, 0x3a, 0x97, 0x46, 0xc7, 0x32, 0xb0, 0xe8, 0xf4, 0x85, 0xfe, 0x5e,
- 0x05, 0xce, 0x04, 0xf1, 0x5e, 0x1a, 0xd8, 0x5d, 0xd6, 0x9d, 0xdd, 0xcb, 0x96, 0x6e, 0x77, 0x50,
- 0x79, 0x0c, 0x07, 0x0e, 0xd1, 0x1f, 0xf2, 0x20, 0xd4, 0x44, 0x10, 0x06, 0xba, 0x92, 0x0e, 0xe4,
- 0x65, 0x1c, 0x9d, 0x4c, 0xac, 0xb7, 0xeb, 0x2f, 0x04, 0x60, 0x3d, 0x57, 0x00, 0xeb, 0xfe, 0x51,
- 0x59, 0x4c, 0x1f, 0xb8, 0x1f, 0xa5, 0x23, 0x02, 0xe7, 0xf5, 0xfc, 0xb0, 0x2c, 0x60, 0x11, 0x5e,
- 0xaf, 0x4a, 0xa4, 0xd7, 0xeb, 0x48, 0x63, 0xc4, 0x50, 0x8f, 0xe5, 0x74, 0xc7, 0x88, 0x63, 0xf4,
- 0x46, 0x7e, 0xa7, 0x02, 0x45, 0x12, 0xf0, 0x8b, 0xf3, 0x08, 0xe7, 0xe3, 0x67, 0xc7, 0xa3, 0x73,
- 0xc8, 0xfb, 0x7c, 0x2a, 0xa9, 0xf7, 0x39, 0x7a, 0x47, 0x52, 0x1f, 0xf3, 0x7e, 0x6e, 0xc7, 0x82,
- 0x58, 0x22, 0x17, 0xf2, 0x21, 0x1c, 0xa4, 0x0f, 0xda, 0xf7, 0x29, 0x00, 0x5e, 0x83, 0x66, 0x67,
- 0x23, 0x9e, 0x27, 0x0b, 0xd7, 0x5d, 0xbc, 0xdf, 0xbd, 0x07, 0xd4, 0x99, 0x3e, 0xa0, 0x28, 0xc5,
- 0xf0, 0xd4, 0xc5, 0x9b, 0x92, 0xfa, 0x56, 0x86, 0x5c, 0x8d, 0x05, 0x96, 0x44, 0xde, 0x96, 0x91,
- 0x65, 0xa7, 0x0f, 0xc8, 0x7f, 0xcf, 0x42, 0xbe, 0x69, 0x35, 0xb0, 0x7b, 0x74, 0x53, 0x20, 0x71,
- 0xd4, 0x00, 0x52, 0xee, 0x38, 0xa2, 0x06, 0x0c, 0x22, 0x94, 0xbe, 0xe8, 0xde, 0x93, 0x85, 0xb9,
- 0xa6, 0x55, 0x0e, 0x16, 0xa7, 0xe4, 0x7d, 0x55, 0xe5, 0x2f, 0xe2, 0x0f, 0x2a, 0x18, 0x16, 0x73,
- 0xa4, 0x8b, 0xf8, 0x87, 0xd3, 0x4b, 0x5f, 0x6e, 0xf7, 0xc0, 0xc9, 0x2d, 0xb3, 0x63, 0x69, 0xb8,
- 0x63, 0xb1, 0x95, 0x6e, 0x55, 0x85, 0xdc, 0xbe, 0xd9, 0xb1, 0x08, 0xcb, 0x79, 0x8d, 0x3c, 0x7b,
- 0x69, 0x36, 0xee, 0x58, 0xcc, 0x37, 0x80, 0x3c, 0xa3, 0x3f, 0x57, 0x20, 0xe7, 0xfd, 0x2b, 0x2f,
- 0xea, 0x77, 0x2a, 0x09, 0xe3, 0x20, 0x78, 0xe4, 0xc7, 0x62, 0x09, 0x3d, 0xc0, 0xad, 0xfd, 0x53,
- 0x0f, 0xd6, 0xc7, 0x47, 0x95, 0xc7, 0x89, 0x22, 0x5c, 0xf3, 0x57, 0xcf, 0xc1, 0xd4, 0xe5, 0xae,
- 0xd5, 0xbe, 0x12, 0x1e, 0xd7, 0x67, 0xaf, 0xea, 0x1d, 0x90, 0xb7, 0x75, 0x73, 0x07, 0xb3, 0x3d,
- 0x85, 0xd3, 0x7d, 0x7d, 0x21, 0xf1, 0x7a, 0xd1, 0x68, 0x16, 0xf4, 0x8e, 0x24, 0x11, 0x18, 0x06,
- 0x54, 0x3e, 0x99, 0x3e, 0x2c, 0x8f, 0x70, 0xf2, 0xac, 0x08, 0x73, 0xe5, 0x52, 0x8d, 0xde, 0x63,
- 0x58, 0xbf, 0x58, 0x29, 0x2a, 0x04, 0x66, 0x4f, 0x26, 0x29, 0xc2, 0xec, 0x91, 0xff, 0xba, 0x85,
- 0x79, 0x40, 0xe5, 0x8f, 0x03, 0xe6, 0x4f, 0x66, 0x61, 0x7e, 0xdd, 0x70, 0xdc, 0x28, 0x6f, 0xff,
- 0x98, 0x78, 0xbf, 0xaf, 0x48, 0x6a, 0x2a, 0x0b, 0xe5, 0x48, 0x07, 0xfa, 0x4d, 0x64, 0x0e, 0xc7,
- 0x15, 0x31, 0x99, 0x63, 0x29, 0x84, 0x03, 0x7a, 0xf1, 0xbc, 0xb4, 0x24, 0x13, 0x1b, 0x4a, 0x61,
- 0x21, 0x93, 0x37, 0x94, 0x22, 0xcb, 0x4e, 0x5f, 0xbe, 0x7f, 0x9e, 0x85, 0x53, 0x5e, 0xf1, 0x71,
- 0xcb, 0x52, 0xd1, 0x62, 0x1e, 0xba, 0x2c, 0x95, 0x78, 0x65, 0xfc, 0x10, 0x2f, 0xe3, 0x58, 0x19,
- 0x1f, 0x46, 0x74, 0xc2, 0x62, 0x8e, 0x58, 0x86, 0x1d, 0x26, 0xe6, 0x98, 0x65, 0xd8, 0xd1, 0xc5,
- 0x1c, 0xbf, 0x14, 0x3b, 0xa2, 0x98, 0x8f, 0x6d, 0x81, 0xf5, 0xa7, 0x94, 0x40, 0xcc, 0x91, 0x6b,
- 0x1b, 0x31, 0x62, 0x4e, 0x7c, 0xa2, 0x57, 0xbc, 0x91, 0x3f, 0x81, 0xe0, 0xc7, 0xbc, 0xbe, 0x31,
- 0x0a, 0x4c, 0xc7, 0xb8, 0xc6, 0xf1, 0x63, 0x0a, 0x2c, 0x30, 0x2e, 0x06, 0x4f, 0x99, 0x63, 0x30,
- 0x4a, 0x3c, 0x65, 0x4e, 0x7c, 0x06, 0x48, 0xe4, 0x6c, 0xf2, 0x67, 0x80, 0x62, 0xcb, 0x4f, 0x1f,
- 0x9c, 0xbf, 0xcc, 0xc1, 0x59, 0x8f, 0x85, 0x0d, 0xab, 0x63, 0x6c, 0x1f, 0x50, 0x2e, 0x2e, 0xea,
- 0xdd, 0x7d, 0xec, 0xa0, 0xf7, 0x67, 0x65, 0x51, 0xfa, 0xdf, 0x00, 0xac, 0x1e, 0xb6, 0x69, 0x1c,
- 0x37, 0x06, 0xd4, 0x7d, 0x51, 0x95, 0x3d, 0x5c, 0x52, 0x70, 0xfd, 0x4d, 0xdd, 0x27, 0xa2, 0x71,
- 0xf4, 0x3c, 0xab, 0x70, 0x26, 0xf8, 0xd2, 0xef, 0xe0, 0x91, 0x39, 0xec, 0xe0, 0x71, 0x3b, 0x28,
- 0x7a, 0xa7, 0x13, 0x40, 0xd5, 0xbf, 0x99, 0x4d, 0xca, 0xd4, 0xbc, 0x2c, 0x5e, 0x4e, 0x07, 0x87,
- 0x47, 0xf3, 0x22, 0x72, 0x3a, 0xd8, 0x55, 0x17, 0xa1, 0x40, 0xaf, 0x03, 0x0f, 0x56, 0xf4, 0x07,
- 0x67, 0x66, 0xb9, 0x44, 0xd3, 0xae, 0x2e, 0xaa, 0xe1, 0x3d, 0x89, 0x24, 0x33, 0xa8, 0x9f, 0x0e,
- 0xed, 0x64, 0x4d, 0x50, 0xb0, 0x67, 0x8f, 0x4c, 0x79, 0x32, 0xbb, 0x61, 0xa5, 0x5e, 0xaf, 0x7b,
- 0xd0, 0x64, 0x81, 0x07, 0x12, 0xed, 0x86, 0x71, 0xf1, 0x0b, 0xb2, 0x87, 0xe2, 0x17, 0x24, 0xde,
- 0x0d, 0x13, 0xf8, 0x18, 0xc7, 0x6e, 0x58, 0x1c, 0xc1, 0x89, 0xdc, 0xc3, 0x43, 0xac, 0x66, 0x76,
- 0x1b, 0xc1, 0x3f, 0x0e, 0xf6, 0xac, 0x06, 0xd1, 0xd9, 0x65, 0xd0, 0x45, 0x05, 0xb1, 0xb7, 0xb0,
- 0xa8, 0x4f, 0x87, 0xc2, 0xb6, 0x65, 0xef, 0xe9, 0xfe, 0xc6, 0x7d, 0xff, 0x49, 0x11, 0x76, 0x03,
- 0xc0, 0x0a, 0xc9, 0xa3, 0xb1, 0xbc, 0xde, 0x7c, 0xe4, 0x05, 0x46, 0x8f, 0x05, 0x7d, 0xf4, 0x1e,
- 0xd5, 0x5b, 0x61, 0x9e, 0xc5, 0x7e, 0xac, 0x61, 0xc7, 0xc5, 0x1d, 0x16, 0xd1, 0x42, 0x4c, 0x54,
- 0x2f, 0xc0, 0x1c, 0x4b, 0x58, 0x31, 0xba, 0xd8, 0x61, 0x41, 0x2d, 0x84, 0x34, 0xf5, 0x2c, 0x14,
- 0x0c, 0xe7, 0x41, 0xc7, 0x32, 0x59, 0x40, 0x3e, 0xf6, 0xa6, 0xde, 0x0e, 0x27, 0x59, 0xbe, 0xc0,
- 0x58, 0xa5, 0x07, 0x76, 0xfa, 0x93, 0x3d, 0xd5, 0x32, 0xad, 0x4d, 0xdb, 0xda, 0xb1, 0xb1, 0xe3,
- 0x90, 0x53, 0x53, 0xd3, 0x1a, 0x97, 0xa2, 0x3e, 0x0c, 0xa7, 0xba, 0x86, 0x79, 0xc5, 0x21, 0x31,
- 0x82, 0x57, 0x98, 0xdb, 0xd8, 0xdc, 0x80, 0xd8, 0xdd, 0x5c, 0x63, 0x63, 0x72, 0xe0, 0x7f, 0xd1,
- 0x0e, 0x53, 0x51, 0xef, 0x80, 0x22, 0xe3, 0x66, 0x49, 0x6f, 0x5f, 0x21, 0xdf, 0x99, 0x3b, 0xea,
- 0xa1, 0x74, 0x4e, 0x18, 0x34, 0x8c, 0xfe, 0x82, 0x20, 0x0c, 0x1a, 0x49, 0xff, 0x55, 0x19, 0x98,
- 0x13, 0x0a, 0xd0, 0x41, 0xf5, 0xbb, 0x45, 0xe7, 0xd2, 0xae, 0xe1, 0x62, 0x8f, 0x39, 0x76, 0xd6,
- 0xe5, 0xa9, 0x43, 0x98, 0xd7, 0x0e, 0xfd, 0xa8, 0x0d, 0x20, 0xe6, 0xf1, 0x45, 0x3b, 0x3c, 0xe2,
- 0x59, 0xe6, 0x30, 0x5b, 0x55, 0x48, 0x43, 0x2f, 0x00, 0xf5, 0x30, 0x35, 0xce, 0x0b, 0x24, 0x93,
- 0xcc, 0x0b, 0xc4, 0x93, 0x9b, 0xde, 0xed, 0x5a, 0xd7, 0x70, 0x27, 0x20, 0xcb, 0x74, 0xf5, 0x50,
- 0x3a, 0xfa, 0xcc, 0x28, 0xf3, 0xc2, 0xc4, 0x17, 0x6b, 0x78, 0x8d, 0x6c, 0xbf, 0xdd, 0xc6, 0xb8,
- 0xc3, 0x0e, 0xae, 0xf9, 0xaf, 0x09, 0xaf, 0xdc, 0x48, 0x3c, 0x8b, 0x3c, 0xa6, 0x3b, 0x37, 0xde,
- 0x17, 0xde, 0x7c, 0xb2, 0x2f, 0xd3, 0xd5, 0xc4, 0x9d, 0x8f, 0x1f, 0xa9, 0x53, 0x41, 0xef, 0x49,
- 0x7a, 0x5a, 0x34, 0x16, 0xd3, 0xb3, 0xde, 0xe0, 0xee, 0xec, 0x77, 0x83, 0xe3, 0x4e, 0xf4, 0x2d,
- 0x21, 0x7a, 0x89, 0x0e, 0x90, 0x1e, 0x13, 0x72, 0xbf, 0x72, 0x06, 0x0a, 0xf4, 0xe6, 0x41, 0xf4,
- 0xaa, 0x85, 0x81, 0xd0, 0x2d, 0x88, 0xd0, 0x6d, 0xc1, 0x9c, 0x69, 0x79, 0xc5, 0x6d, 0xea, 0xb6,
- 0xbe, 0xe7, 0xc4, 0x2d, 0xef, 0x53, 0xba, 0x81, 0x2d, 0x57, 0xe3, 0x7e, 0x5b, 0x3b, 0xa1, 0x09,
- 0x64, 0xd4, 0xff, 0x1d, 0x4e, 0x5e, 0x66, 0xa1, 0x39, 0x1c, 0x46, 0x39, 0x1b, 0xed, 0xfc, 0xda,
- 0x47, 0x79, 0x49, 0xfc, 0x73, 0xed, 0x84, 0xd6, 0x4f, 0x4c, 0xfd, 0x2f, 0xb0, 0xe0, 0xbd, 0x76,
- 0xac, 0x6b, 0x3e, 0xe3, 0x4a, 0xf4, 0x0c, 0xa0, 0x8f, 0xfc, 0x86, 0xf0, 0xe3, 0xda, 0x09, 0xad,
- 0x8f, 0x94, 0x5a, 0x07, 0xd8, 0x75, 0xf7, 0xba, 0x8c, 0x70, 0x2e, 0xba, 0x33, 0xe9, 0x23, 0xbc,
- 0x16, 0xfc, 0xb4, 0x76, 0x42, 0xe3, 0x48, 0xa8, 0xeb, 0x30, 0xe3, 0x3e, 0xea, 0x32, 0x7a, 0xf9,
- 0x68, 0xaf, 0x93, 0x3e, 0x7a, 0x4d, 0xff, 0x9f, 0xb5, 0x13, 0x5a, 0x48, 0x40, 0xad, 0xc2, 0x74,
- 0xef, 0x32, 0x23, 0x56, 0x88, 0x1e, 0xa9, 0xfa, 0x88, 0x6d, 0x5e, 0x0e, 0x68, 0x05, 0xbf, 0x7b,
- 0x8c, 0xb5, 0x9d, 0xab, 0x8c, 0xd6, 0x94, 0x34, 0x63, 0x65, 0xff, 0x1f, 0x8f, 0xb1, 0x80, 0x80,
- 0x5a, 0x85, 0x19, 0xc7, 0xd4, 0x7b, 0xce, 0xae, 0xe5, 0x3a, 0xe7, 0xa6, 0xfb, 0x1c, 0x94, 0xa3,
- 0xa9, 0x35, 0xd8, 0x3f, 0x5a, 0xf8, 0xb7, 0xfa, 0x74, 0x38, 0xb3, 0xdf, 0xeb, 0xe8, 0x2e, 0xae,
- 0x3c, 0x6a, 0x38, 0xae, 0x61, 0xee, 0xf8, 0xb1, 0xa5, 0xe9, 0x30, 0x3f, 0xf8, 0xa3, 0xba, 0xc8,
- 0x8e, 0x2a, 0x02, 0x69, 0x97, 0xa8, 0x7f, 0x97, 0x9c, 0x16, 0xcb, 0x9d, 0x50, 0x7c, 0x16, 0xe4,
- 0xbc, 0x4f, 0xc4, 0x2c, 0x58, 0x18, 0xbc, 0x02, 0xdf, 0xaf, 0x3b, 0xa4, 0x01, 0x7b, 0x3f, 0xf5,
- 0x59, 0x16, 0x73, 0x87, 0x2c, 0x8b, 0x5b, 0x60, 0xd6, 0x70, 0x36, 0x8c, 0x1d, 0x3a, 0xad, 0x61,
- 0x23, 0x3f, 0x9f, 0x44, 0x97, 0x81, 0x6a, 0xf8, 0x1a, 0x1d, 0xf2, 0x4f, 0xfa, 0xcb, 0x40, 0x7e,
- 0x0a, 0xba, 0x0d, 0xe6, 0xf8, 0x46, 0x46, 0xaf, 0x2f, 0x36, 0xc2, 0x49, 0x11, 0x7b, 0x43, 0xb7,
- 0xc2, 0x82, 0xa8, 0xd3, 0x9c, 0xed, 0xa7, 0xf8, 0x83, 0x18, 0x7a, 0x3c, 0x9c, 0xec, 0x6b, 0x58,
- 0x7e, 0xb0, 0x9f, 0x4c, 0x18, 0xec, 0xe7, 0x16, 0x80, 0x50, 0x8b, 0x07, 0x92, 0xb9, 0x19, 0x66,
- 0x02, 0xbd, 0x1c, 0x98, 0xe1, 0x4b, 0x19, 0x98, 0xf6, 0x95, 0x6d, 0x50, 0x06, 0xcf, 0xa6, 0x30,
- 0xb9, 0x9d, 0x3d, 0xdf, 0xa6, 0xe0, 0xd3, 0x3c, 0x03, 0x2f, 0xf4, 0xa7, 0x6f, 0x1a, 0x6e, 0xd7,
- 0x3f, 0x93, 0xda, 0x9f, 0xac, 0x6e, 0x02, 0x18, 0x04, 0xa3, 0x66, 0x78, 0x48, 0xf5, 0x29, 0x09,
- 0xda, 0x03, 0xd5, 0x07, 0x8e, 0xc6, 0x85, 0x6f, 0x60, 0x27, 0x48, 0x67, 0x20, 0x4f, 0x2f, 0x58,
- 0x38, 0xa1, 0x2e, 0x00, 0x54, 0x9e, 0xb7, 0x59, 0xd1, 0xaa, 0x95, 0x5a, 0xb9, 0x52, 0xcc, 0xa0,
- 0x1f, 0xcf, 0xc2, 0x4c, 0xd0, 0x08, 0x06, 0x56, 0xb2, 0xc2, 0x54, 0x6b, 0xe8, 0x0d, 0xb1, 0x87,
- 0x1b, 0x15, 0xaf, 0x64, 0xcf, 0x84, 0xeb, 0xf7, 0x1d, 0xbc, 0x62, 0xd8, 0x8e, 0xab, 0x59, 0xd7,
- 0x56, 0x2c, 0x3b, 0x34, 0x89, 0x68, 0x68, 0xe2, 0xa8, 0xcf, 0x9e, 0xa9, 0xdf, 0xc1, 0xe4, 0xb4,
- 0x22, 0xb6, 0xd9, 0x96, 0x4d, 0x98, 0xe0, 0xd1, 0x75, 0x6d, 0xdd, 0x74, 0x7a, 0x96, 0x83, 0x35,
- 0xeb, 0x9a, 0x53, 0x32, 0x3b, 0x65, 0xab, 0xbb, 0xbf, 0x67, 0x3a, 0xcc, 0x58, 0x8f, 0xfa, 0xec,
- 0x49, 0x87, 0xdc, 0xff, 0xbc, 0x00, 0x50, 0xae, 0xaf, 0xaf, 0x57, 0xca, 0xcd, 0x6a, 0xbd, 0x56,
- 0x3c, 0xe1, 0x49, 0xab, 0x59, 0x5a, 0x5a, 0xf7, 0xa4, 0xf3, 0xad, 0x30, 0xed, 0xb7, 0x69, 0x16,
- 0x9f, 0x28, 0xe3, 0xc7, 0x27, 0x52, 0x4b, 0x30, 0xed, 0xb7, 0x72, 0x36, 0x22, 0x3c, 0xa1, 0xff,
- 0x3c, 0xfa, 0x9e, 0x6e, 0xbb, 0xc4, 0xb4, 0xf4, 0x89, 0x2c, 0xe9, 0x0e, 0xd6, 0x82, 0xdf, 0x2e,
- 0x3c, 0x99, 0x71, 0xa0, 0xc2, 0x42, 0x69, 0x7d, 0xbd, 0x55, 0xd7, 0x5a, 0xb5, 0x7a, 0x73, 0xad,
- 0x5a, 0x5b, 0xa5, 0x23, 0x64, 0x75, 0xb5, 0x56, 0xd7, 0x2a, 0x74, 0x80, 0x6c, 0x14, 0x33, 0xf4,
- 0xfe, 0xf1, 0xa5, 0x69, 0x28, 0xf4, 0x88, 0x74, 0xd1, 0xe7, 0x95, 0x84, 0xa6, 0x45, 0x80, 0x53,
- 0xc4, 0x0d, 0xc9, 0xc2, 0x61, 0x90, 0xec, 0x80, 0xc3, 0xda, 0x17, 0x60, 0x8e, 0x9a, 0x43, 0x0e,
- 0xd9, 0x57, 0x23, 0xc8, 0x29, 0x9a, 0x90, 0x86, 0x3e, 0x9a, 0x4d, 0x60, 0x5c, 0x0c, 0xe4, 0x28,
- 0x99, 0x71, 0xf1, 0x7b, 0x99, 0xd1, 0xae, 0x23, 0xa9, 0xd6, 0x9a, 0x15, 0xad, 0x56, 0x5a, 0x67,
- 0x59, 0x14, 0xf5, 0x1c, 0x9c, 0xae, 0xd5, 0x59, 0x30, 0xce, 0x46, 0xab, 0x59, 0x6f, 0x55, 0x37,
- 0x36, 0xeb, 0x5a, 0xb3, 0x98, 0x57, 0xcf, 0x82, 0x4a, 0x9f, 0x5b, 0xd5, 0x46, 0xab, 0x5c, 0xaa,
- 0x95, 0x2b, 0xeb, 0x95, 0xe5, 0x62, 0x41, 0x7d, 0x22, 0x3c, 0x9e, 0x5e, 0x6f, 0x55, 0x5f, 0x69,
- 0x69, 0xf5, 0x4b, 0x0d, 0x0f, 0x41, 0xad, 0xb2, 0x5e, 0xf2, 0x14, 0x89, 0xbb, 0x87, 0x7c, 0x4a,
- 0xbd, 0x0e, 0x4e, 0xae, 0x54, 0xd7, 0x2b, 0xad, 0xf5, 0x7a, 0x69, 0x99, 0x95, 0x37, 0xad, 0xde,
- 0x04, 0xe7, 0xaa, 0xb5, 0xc6, 0xd6, 0xca, 0x4a, 0xb5, 0x5c, 0xad, 0xd4, 0x9a, 0xad, 0xcd, 0x8a,
- 0xb6, 0x51, 0x6d, 0x34, 0xbc, 0x7f, 0x8b, 0x33, 0xe4, 0x96, 0x67, 0xda, 0x67, 0x7a, 0x46, 0xec,
- 0xfc, 0x45, 0xbd, 0x6b, 0x78, 0x03, 0x05, 0xb9, 0xfe, 0xbd, 0xef, 0x1c, 0x97, 0x4b, 0xae, 0x89,
- 0x67, 0x27, 0x41, 0xc8, 0x0b, 0xfa, 0x4e, 0x25, 0xe1, 0x39, 0x2e, 0x06, 0x04, 0x2d, 0x71, 0x51,
- 0x28, 0x2d, 0x62, 0xd5, 0xe1, 0xf5, 0xd9, 0x04, 0xe7, 0xb8, 0xe4, 0xc9, 0x27, 0x03, 0xff, 0x27,
- 0xc6, 0x05, 0x7e, 0x11, 0xe6, 0xb6, 0x6a, 0xa5, 0xad, 0xe6, 0x5a, 0x5d, 0xab, 0x7e, 0x0b, 0xb9,
- 0x85, 0x60, 0x1e, 0x66, 0x56, 0xea, 0xda, 0x52, 0x75, 0x79, 0xb9, 0x52, 0x2b, 0xe6, 0xd5, 0xeb,
- 0xe1, 0xba, 0x46, 0x45, 0xbb, 0x58, 0x2d, 0x57, 0x5a, 0x5b, 0xb5, 0xd2, 0xc5, 0x52, 0x75, 0x9d,
- 0xf4, 0x11, 0x85, 0x98, 0xab, 0xeb, 0xa7, 0xd0, 0xb7, 0xe7, 0x00, 0x68, 0xd5, 0xc9, 0x25, 0x5c,
- 0xdc, 0x05, 0xe7, 0x7f, 0x90, 0x74, 0xba, 0x17, 0x92, 0x89, 0x68, 0xbf, 0x55, 0x98, 0xb6, 0xd9,
- 0x07, 0xb6, 0xae, 0x39, 0x8c, 0x0e, 0x7d, 0xf4, 0xa9, 0x69, 0xc1, 0xef, 0xe8, 0xfd, 0x49, 0x66,
- 0x77, 0x91, 0x8c, 0x25, 0x43, 0x72, 0x65, 0x3c, 0x40, 0xa2, 0x97, 0x67, 0x60, 0x41, 0xac, 0x98,
- 0x57, 0x09, 0x62, 0x4c, 0xc9, 0x55, 0x42, 0xfc, 0x99, 0x33, 0xb2, 0x2e, 0x3c, 0x8d, 0x0d, 0xa7,
- 0xe0, 0xb7, 0x4c, 0x1a, 0x92, 0xc1, 0xb7, 0x58, 0x8a, 0x19, 0x8f, 0x79, 0xcf, 0xe8, 0x28, 0x66,
- 0xd5, 0x29, 0x50, 0x9a, 0x8f, 0xba, 0x45, 0x05, 0x7d, 0x49, 0x81, 0x79, 0xe1, 0x06, 0x75, 0x6f,
- 0xf6, 0x25, 0x71, 0xbb, 0x31, 0x77, 0x37, 0x7b, 0xe6, 0xa8, 0x77, 0xb3, 0x5f, 0xb8, 0x0b, 0xa6,
- 0x58, 0x1a, 0x91, 0x6f, 0xbd, 0xe6, 0x99, 0x02, 0x27, 0x61, 0x76, 0xb5, 0xd2, 0x6c, 0x35, 0x9a,
- 0x25, 0xad, 0x59, 0x59, 0x2e, 0x66, 0xbc, 0x81, 0xaf, 0xb2, 0xb1, 0xd9, 0x7c, 0xb8, 0x98, 0x4d,
- 0xee, 0x1a, 0xdb, 0xcf, 0xc8, 0x84, 0x5d, 0x63, 0xe3, 0x8a, 0x4f, 0x7f, 0xae, 0xfa, 0x69, 0x05,
- 0x8a, 0x94, 0x83, 0xca, 0xa3, 0x3d, 0x6c, 0x1b, 0xd8, 0x6c, 0x63, 0x74, 0x45, 0x26, 0x54, 0xef,
- 0xa1, 0x20, 0x95, 0xa4, 0x3f, 0xe7, 0xac, 0x44, 0xfa, 0xd2, 0x67, 0x60, 0xe7, 0x0e, 0x19, 0xd8,
- 0xbf, 0x95, 0xd4, 0x37, 0xb6, 0x9f, 0xdd, 0xb1, 0x40, 0xf6, 0x89, 0x24, 0xbe, 0xb1, 0x43, 0x38,
- 0x98, 0x48, 0x04, 0xee, 0x88, 0xf1, 0xb7, 0xa8, 0xa0, 0x97, 0x29, 0x70, 0x72, 0x59, 0x77, 0xf1,
- 0xd2, 0x41, 0xd3, 0xbf, 0xe1, 0x34, 0xe2, 0x56, 0xf2, 0xcc, 0xa1, 0x5b, 0xc9, 0xc3, 0x4b, 0x52,
- 0xb3, 0x7d, 0x97, 0xa4, 0xa2, 0x77, 0x27, 0x3d, 0x4d, 0xdb, 0xc7, 0xc3, 0xd8, 0xc2, 0x64, 0x27,
- 0x3b, 0x25, 0x1b, 0xcf, 0x45, 0xfa, 0x0d, 0xec, 0xed, 0x33, 0x50, 0xa4, 0xac, 0x70, 0xee, 0x9f,
- 0x3f, 0xc4, 0x2e, 0xf2, 0x6f, 0x25, 0x88, 0xb6, 0xe9, 0xc7, 0x2f, 0xc9, 0x8a, 0xf1, 0x4b, 0x84,
- 0xdd, 0x04, 0xa5, 0xdf, 0x65, 0x27, 0x69, 0x67, 0xc8, 0xf9, 0x7a, 0x46, 0x07, 0x38, 0x4e, 0xaf,
- 0x33, 0x8c, 0x2d, 0x7e, 0x32, 0x97, 0x4d, 0xb3, 0xfb, 0x5d, 0x2b, 0xb2, 0xc8, 0xc4, 0xdf, 0xa9,
- 0x9f, 0xd4, 0xf1, 0x5f, 0xf0, 0xb5, 0x8d, 0xb9, 0x68, 0x3e, 0x3d, 0xc7, 0xff, 0x61, 0x1c, 0xa4,
- 0x8f, 0xc2, 0xbf, 0x65, 0x21, 0xd7, 0xb0, 0x6c, 0x77, 0x5c, 0x18, 0x24, 0x75, 0x56, 0xe0, 0x24,
- 0xd0, 0x88, 0x9e, 0x73, 0xa6, 0xe7, 0xac, 0x10, 0x5f, 0xfe, 0x04, 0x02, 0x96, 0x9e, 0x84, 0x05,
- 0xca, 0x49, 0x70, 0xdb, 0xcf, 0xbf, 0x66, 0x69, 0x7f, 0xf5, 0x90, 0x2c, 0x22, 0x64, 0xcb, 0x2a,
- 0x70, 0x16, 0xf0, 0x41, 0x11, 0xd2, 0xd0, 0x9b, 0x79, 0x5c, 0x96, 0x45, 0x5c, 0x06, 0xcd, 0xb8,
- 0x83, 0x0b, 0x73, 0xc6, 0xd5, 0x33, 0x25, 0x89, 0x7d, 0x1a, 0x53, 0x78, 0xfa, 0x88, 0xbc, 0x58,
- 0x81, 0x02, 0x73, 0xd6, 0x1c, 0x2b, 0x02, 0x49, 0x5b, 0x46, 0x20, 0x04, 0x39, 0xa7, 0x4e, 0x65,
- 0xdc, 0x2d, 0x23, 0xbe, 0xfc, 0xf4, 0x71, 0xf8, 0x77, 0xe6, 0x85, 0x5c, 0xba, 0xaa, 0x1b, 0x5d,
- 0xfd, 0x72, 0x37, 0x41, 0xcc, 0xf1, 0x8f, 0x26, 0x3c, 0x77, 0x19, 0x54, 0x55, 0x28, 0x2f, 0x42,
- 0xe2, 0xdf, 0x04, 0x33, 0xb6, 0xb0, 0x4b, 0xeb, 0x59, 0x51, 0x7d, 0x1e, 0xe0, 0xec, 0xbb, 0x16,
- 0xe6, 0x4c, 0x74, 0xc8, 0x52, 0x8a, 0x9f, 0x89, 0x1c, 0x0a, 0x9b, 0x2d, 0x75, 0x3a, 0x2b, 0x58,
- 0x77, 0xf7, 0x6d, 0xdc, 0x49, 0x34, 0x44, 0xd8, 0x7d, 0x1b, 0xd9, 0x9c, 0x24, 0x84, 0xa8, 0x9f,
- 0xeb, 0x22, 0x3a, 0xcf, 0x18, 0xd2, 0x1b, 0xf8, 0xbc, 0x8c, 0xa5, 0x4b, 0xfa, 0xf9, 0x00, 0x92,
- 0xba, 0x00, 0xc9, 0xb3, 0x46, 0x63, 0x22, 0x7d, 0x40, 0x7e, 0x44, 0x81, 0x05, 0x6a, 0x27, 0x8c,
- 0x1b, 0x93, 0x0f, 0x26, 0x74, 0xee, 0xe2, 0xee, 0x53, 0xe3, 0xd9, 0x19, 0x0b, 0x2c, 0x49, 0x5c,
- 0xc1, 0xe4, 0xf8, 0x48, 0x1f, 0x99, 0x97, 0x9c, 0x02, 0xe0, 0x1c, 0x76, 0x3f, 0x5a, 0x08, 0x23,
- 0x70, 0xa2, 0x77, 0xb0, 0xf9, 0x47, 0x43, 0x08, 0x07, 0xcf, 0x39, 0xe3, 0x06, 0x1b, 0x52, 0x62,
- 0xa2, 0xd4, 0xa8, 0xf2, 0x7b, 0x09, 0x6d, 0x5e, 0xe6, 0x2e, 0x3b, 0x74, 0x70, 0x1f, 0xb1, 0x97,
- 0xfb, 0x58, 0x02, 0xe3, 0x77, 0x18, 0x2b, 0xc9, 0x50, 0x5b, 0x1f, 0x61, 0x66, 0x7f, 0x0e, 0x4e,
- 0x6b, 0x95, 0xd2, 0x72, 0xbd, 0xb6, 0xfe, 0x30, 0x7f, 0xb9, 0x56, 0x51, 0xe1, 0x27, 0x27, 0xa9,
- 0xc0, 0xf6, 0xc6, 0x84, 0x7d, 0xa0, 0x28, 0xab, 0xb8, 0xd9, 0x0a, 0xb7, 0xb8, 0x32, 0xbc, 0x57,
- 0x93, 0x20, 0x7b, 0x9c, 0x28, 0xfc, 0x7d, 0x01, 0x66, 0x35, 0xdc, 0xb6, 0xf6, 0xf6, 0xb0, 0xd9,
- 0xc1, 0x1d, 0xf4, 0x46, 0x05, 0xe6, 0x82, 0xfd, 0xbe, 0x06, 0x76, 0xd1, 0x7f, 0x09, 0xb1, 0xb9,
- 0x00, 0x73, 0x5e, 0xe5, 0xea, 0x62, 0x88, 0x7f, 0x21, 0x4d, 0xbd, 0x13, 0x4e, 0xf9, 0x28, 0xd4,
- 0xfb, 0xa6, 0x30, 0x87, 0x3f, 0x88, 0x1e, 0x39, 0x5b, 0x22, 0x46, 0x0f, 0x44, 0x0b, 0x33, 0x60,
- 0x77, 0x91, 0x67, 0x35, 0x02, 0xac, 0xdf, 0x09, 0xc0, 0x7a, 0x9e, 0x00, 0xd6, 0xf2, 0x11, 0xe9,
- 0x1f, 0x27, 0x6a, 0xbf, 0xa8, 0xc0, 0x69, 0xbf, 0x23, 0x9e, 0x1c, 0x5a, 0x1f, 0xe3, 0xd1, 0xfa,
- 0x56, 0x11, 0xad, 0x55, 0x19, 0x69, 0x0e, 0x62, 0x39, 0x02, 0xb5, 0xcf, 0x05, 0xa8, 0x7d, 0x9b,
- 0x80, 0xda, 0xfa, 0x98, 0xca, 0x39, 0x4e, 0xf4, 0x3e, 0xa8, 0xc0, 0x39, 0xcf, 0xec, 0x2c, 0x5b,
- 0xe6, 0x76, 0xd7, 0x68, 0xbb, 0x86, 0xb9, 0x13, 0x3a, 0x1f, 0xae, 0xca, 0xac, 0x6c, 0xf6, 0x63,
- 0x9b, 0x3d, 0x8c, 0xad, 0x18, 0x19, 0x45, 0xb6, 0x6d, 0x45, 0xb1, 0x15, 0x31, 0x84, 0x71, 0x6e,
- 0xf5, 0xa1, 0xe6, 0xf0, 0x49, 0xc9, 0x5b, 0x9f, 0x24, 0x07, 0xc7, 0x89, 0xdf, 0x8b, 0x81, 0x33,
- 0x3d, 0xbe, 0x5b, 0x81, 0x22, 0xf1, 0x74, 0x25, 0x3d, 0x3b, 0xbb, 0x79, 0xb6, 0x2e, 0x9e, 0x81,
- 0xe8, 0xf9, 0x02, 0xf2, 0xcf, 0x40, 0xf8, 0x09, 0xea, 0x6d, 0xb0, 0xd0, 0xde, 0xc5, 0xed, 0x2b,
- 0x55, 0xd3, 0xf7, 0x45, 0xa2, 0x8e, 0x2b, 0x7d, 0xa9, 0xe2, 0x60, 0xf6, 0x90, 0x08, 0xa6, 0xb8,
- 0xf0, 0x28, 0x4c, 0x6c, 0x78, 0xa6, 0x22, 0x1a, 0xda, 0xaf, 0x07, 0x00, 0xd5, 0x04, 0x80, 0xee,
- 0x1d, 0x89, 0x6a, 0x32, 0x58, 0x6a, 0x23, 0xc0, 0x82, 0xe0, 0x6c, 0x7d, 0xb3, 0x59, 0xad, 0xd7,
- 0x5a, 0x5b, 0x8d, 0xca, 0x72, 0x6b, 0xc9, 0x07, 0xa7, 0x51, 0x54, 0xd0, 0x97, 0xb3, 0x30, 0x45,
- 0xd9, 0x72, 0xd0, 0x93, 0x42, 0x08, 0x86, 0x1e, 0xfe, 0x40, 0x6f, 0x97, 0x0e, 0xe5, 0x14, 0x08,
- 0x82, 0x95, 0x13, 0xd1, 0x30, 0x9e, 0x09, 0x53, 0x14, 0x64, 0x7f, 0x17, 0xe0, 0x7c, 0x84, 0x65,
- 0xc7, 0xc8, 0x68, 0x7e, 0x76, 0xc9, 0xb0, 0x4e, 0x43, 0xd8, 0x48, 0xdf, 0x1a, 0x7f, 0x61, 0x8e,
- 0x2e, 0x1d, 0x5c, 0x32, 0xdc, 0x5d, 0x72, 0x36, 0x04, 0x3d, 0x57, 0xa6, 0xe3, 0xba, 0x13, 0xf2,
- 0x57, 0xbd, 0xdc, 0x43, 0xce, 0xd9, 0xd0, 0x4c, 0xe8, 0x27, 0xa4, 0xa3, 0x88, 0x0b, 0xfa, 0x19,
- 0xf0, 0x14, 0x01, 0xce, 0x06, 0xe4, 0xba, 0x86, 0xe3, 0x32, 0x9b, 0xfb, 0x9e, 0x44, 0x84, 0xfc,
- 0x87, 0xaa, 0x8b, 0xf7, 0x34, 0x42, 0x06, 0x3d, 0xe8, 0x59, 0x4c, 0x61, 0xaa, 0xc4, 0x59, 0xa3,
- 0x73, 0x30, 0xc5, 0xce, 0xc0, 0xb3, 0x6d, 0x29, 0xff, 0x55, 0x72, 0x2b, 0x48, 0xaa, 0xb6, 0xe9,
- 0xeb, 0xc0, 0xff, 0x7b, 0x12, 0xa6, 0xd6, 0x0c, 0xc7, 0xb5, 0xec, 0x03, 0xf4, 0xa6, 0x0c, 0x4c,
- 0x5d, 0xc4, 0xb6, 0x63, 0x58, 0xe6, 0x21, 0xf7, 0xac, 0x5b, 0x60, 0xb6, 0x67, 0xe3, 0xab, 0x86,
- 0xb5, 0xef, 0x70, 0xa3, 0x04, 0x97, 0xa4, 0x22, 0x98, 0xd6, 0xf7, 0xdd, 0x5d, 0xcb, 0x0e, 0x43,
- 0x67, 0xf9, 0xef, 0xea, 0x79, 0x00, 0xfa, 0x5c, 0xd3, 0xf7, 0xb0, 0x7f, 0x3b, 0x7e, 0x98, 0xa2,
- 0xaa, 0x90, 0x73, 0x8d, 0x3d, 0xcc, 0x62, 0xe9, 0x93, 0x67, 0x4f, 0xc0, 0x24, 0x2e, 0x2d, 0x8b,
- 0xff, 0xab, 0x68, 0xfe, 0x2b, 0xfa, 0x43, 0x05, 0x66, 0x57, 0xb1, 0xcb, 0x58, 0x75, 0xd0, 0x2b,
- 0x32, 0x52, 0xd7, 0x57, 0x79, 0xf3, 0x92, 0xae, 0xee, 0xf8, 0xff, 0x05, 0x43, 0xae, 0x98, 0x18,
- 0x06, 0xf6, 0x57, 0xf8, 0x5b, 0x3d, 0x48, 0x94, 0x57, 0xb7, 0x4a, 0x8f, 0x5d, 0xb0, 0xcc, 0x6c,
- 0xe3, 0xf8, 0xf0, 0x07, 0xd1, 0x26, 0x8e, 0x8d, 0x90, 0xc2, 0x64, 0xbf, 0xc8, 0xd5, 0x27, 0xb2,
- 0x3b, 0x9a, 0xbe, 0xca, 0x72, 0x1c, 0xba, 0xb0, 0x85, 0xa7, 0xc4, 0xc8, 0x68, 0x41, 0x6e, 0xc9,
- 0xd8, 0x2a, 0xc3, 0x39, 0x99, 0xc0, 0x15, 0xbd, 0x0a, 0xcc, 0x36, 0x76, 0xad, 0x6b, 0xbe, 0x1c,
- 0xbf, 0x55, 0x0e, 0xd8, 0x9b, 0x60, 0xe6, 0x6a, 0x1f, 0xa8, 0x61, 0x02, 0x7f, 0x2b, 0xa0, 0x22,
- 0xde, 0x0a, 0xf8, 0x52, 0x25, 0x29, 0x4c, 0x1c, 0x73, 0x11, 0x30, 0x89, 0x17, 0xf9, 0x65, 0x13,
- 0x5c, 0xe4, 0xa7, 0x3e, 0x03, 0xa6, 0x18, 0xd7, 0x6c, 0x99, 0x3a, 0x1e, 0x60, 0x3f, 0x33, 0x5f,
- 0xc1, 0x9c, 0x58, 0xc1, 0x64, 0xc8, 0x47, 0x57, 0x2e, 0x7d, 0xe4, 0x7f, 0x33, 0x4b, 0x22, 0x6b,
- 0xf9, 0xc0, 0x97, 0xc7, 0x00, 0x3c, 0xfa, 0x5a, 0x46, 0x76, 0x33, 0x27, 0x90, 0x40, 0xc0, 0xc1,
- 0x91, 0xae, 0xa6, 0x1b, 0x4a, 0x2e, 0x7d, 0x79, 0xfe, 0x78, 0x0e, 0xe6, 0x96, 0x8d, 0xed, 0xed,
- 0xa0, 0x93, 0x7c, 0xa5, 0x64, 0x27, 0x19, 0xed, 0x42, 0xe5, 0xd9, 0xb9, 0xfb, 0xb6, 0x8d, 0x4d,
- 0xbf, 0x52, 0xac, 0x39, 0xf5, 0xa5, 0xaa, 0xb7, 0xc3, 0x49, 0x7f, 0x5c, 0xe0, 0x3b, 0xca, 0x19,
- 0xad, 0x3f, 0x19, 0x7d, 0x45, 0xda, 0x13, 0xc0, 0x97, 0x28, 0x5f, 0xa5, 0x88, 0x06, 0x78, 0x1f,
- 0xcc, 0xef, 0xd2, 0xdc, 0x64, 0xb9, 0xd4, 0xef, 0x2c, 0xcf, 0xf6, 0xdd, 0x5c, 0xb0, 0x81, 0x1d,
- 0x47, 0xdf, 0xc1, 0x9a, 0x98, 0xb9, 0xaf, 0xf9, 0x2a, 0x49, 0xee, 0xe1, 0x94, 0x73, 0x2a, 0x90,
- 0xa8, 0x49, 0xfa, 0xda, 0xf1, 0xb9, 0x0b, 0x90, 0x5b, 0x31, 0xba, 0x18, 0x7d, 0x4f, 0x16, 0x66,
- 0xbc, 0x59, 0xb7, 0xd9, 0xf6, 0xde, 0x38, 0x87, 0xca, 0xbf, 0xcf, 0xc8, 0xde, 0x3f, 0xed, 0xd1,
- 0x59, 0x0c, 0x68, 0x44, 0xb4, 0x1b, 0xb9, 0x7b, 0xa6, 0x63, 0x49, 0x4d, 0xe0, 0xb6, 0x30, 0x6f,
- 0xea, 0xb1, 0xbd, 0xdd, 0xb5, 0x74, 0x61, 0xc3, 0xa0, 0xdf, 0x14, 0x0a, 0x8f, 0x6f, 0xd6, 0x2c,
- 0x77, 0xd3, 0x30, 0xcd, 0x20, 0x22, 0xca, 0xa1, 0x74, 0xd1, 0xd7, 0x25, 0x36, 0xa8, 0x1c, 0xa9,
- 0x3b, 0x2b, 0x3d, 0x42, 0xb3, 0x6f, 0x83, 0x85, 0xcb, 0x07, 0x2e, 0x76, 0x58, 0x2e, 0x56, 0x6c,
- 0x4e, 0xeb, 0x4b, 0xe5, 0xae, 0x84, 0x88, 0x0b, 0x3e, 0x17, 0x53, 0x60, 0x32, 0x51, 0xaf, 0x8d,
- 0x30, 0x03, 0x3c, 0x0d, 0xc5, 0x5a, 0x7d, 0xb9, 0x42, 0xfc, 0x7b, 0x7d, 0x8f, 0xc9, 0x1d, 0xf4,
- 0x83, 0x0a, 0xcc, 0x11, 0x07, 0x3c, 0x1f, 0x85, 0xc7, 0x4b, 0xcc, 0x47, 0xd0, 0x17, 0xa4, 0x7d,
- 0x7f, 0x49, 0x95, 0xf9, 0x02, 0xa2, 0x05, 0xbd, 0x6d, 0x74, 0xfb, 0x05, 0x9d, 0xd7, 0xfa, 0x52,
- 0x07, 0x00, 0xa2, 0x0c, 0x04, 0xe4, 0x17, 0xa5, 0x1c, 0x80, 0x87, 0x71, 0x77, 0x5c, 0xa8, 0xfc,
- 0x92, 0x02, 0xb3, 0xde, 0x24, 0xc5, 0x07, 0xa5, 0x2e, 0x80, 0x62, 0x99, 0xdd, 0x83, 0x70, 0x59,
- 0xc4, 0x7f, 0x4d, 0xd4, 0x48, 0xfe, 0x48, 0x7a, 0xe6, 0x4e, 0x44, 0xc4, 0xf1, 0x32, 0x21, 0xfc,
- 0x3e, 0x20, 0x35, 0x9f, 0x1f, 0xc2, 0xdc, 0x71, 0xc1, 0xf7, 0x86, 0x02, 0x14, 0xb6, 0x7a, 0x04,
- 0xb9, 0xcf, 0x2b, 0x32, 0xd7, 0xab, 0x1c, 0x3a, 0xfc, 0xe5, 0x99, 0x59, 0x5d, 0xab, 0xad, 0x77,
- 0x37, 0xc3, 0xf3, 0xcf, 0x61, 0x82, 0x7a, 0x2f, 0xf3, 0x07, 0xa7, 0xc7, 0x78, 0x6f, 0x8b, 0xbd,
- 0x79, 0x84, 0xc8, 0x88, 0x3b, 0x68, 0x77, 0x27, 0x9c, 0xea, 0x18, 0x8e, 0x7e, 0xb9, 0x8b, 0x2b,
- 0x66, 0xdb, 0x3e, 0xa0, 0xe2, 0x60, 0xd3, 0xaa, 0x43, 0x1f, 0xd4, 0xfb, 0x21, 0xef, 0xb8, 0x07,
- 0x5d, 0x3a, 0x4f, 0xe4, 0xcf, 0xe5, 0x45, 0x16, 0xd5, 0xf0, 0xb2, 0x6b, 0xf4, 0x2f, 0xde, 0xad,
- 0x73, 0x4a, 0xce, 0xad, 0x53, 0x7d, 0x1a, 0x14, 0x2c, 0xdb, 0xd8, 0x31, 0xe8, 0x65, 0x82, 0x0b,
- 0x87, 0x02, 0xec, 0x52, 0x53, 0xa0, 0x4e, 0xb2, 0x68, 0x2c, 0xab, 0xfa, 0x0c, 0x98, 0x31, 0xf6,
- 0xf4, 0x1d, 0xfc, 0x90, 0x61, 0xd2, 0xf0, 0x03, 0x0b, 0x77, 0x9f, 0x3b, 0x74, 0xe4, 0x90, 0x7d,
- 0xd7, 0xc2, 0xac, 0xea, 0x7d, 0x70, 0x43, 0xdb, 0xc6, 0xba, 0x8b, 0x3d, 0x01, 0x5d, 0x32, 0x3a,
- 0x3b, 0xd8, 0xad, 0x6e, 0x6f, 0x18, 0x8e, 0x63, 0x98, 0x3b, 0xec, 0xbe, 0xd0, 0xe8, 0x0c, 0xe8,
- 0x03, 0x59, 0xd9, 0x18, 0x82, 0x44, 0x32, 0x54, 0x25, 0x46, 0xb8, 0xd7, 0x9c, 0x93, 0xa2, 0x22,
- 0xe9, 0x1c, 0xfb, 0x3a, 0xa9, 0xe8, 0x7e, 0xd1, 0x6c, 0xa5, 0x3f, 0xf4, 0xff, 0x7e, 0x16, 0xa6,
- 0x97, 0xad, 0x6b, 0x26, 0x69, 0x26, 0xf7, 0xc8, 0x59, 0xca, 0x03, 0x02, 0x02, 0x88, 0x37, 0x64,
- 0xc7, 0x9e, 0x21, 0x23, 0xb5, 0xf5, 0x8b, 0x8c, 0x80, 0x21, 0xb6, 0xdd, 0x49, 0x1e, 0x3b, 0x8f,
- 0x2b, 0x27, 0x7d, 0xb9, 0xfe, 0xb6, 0x02, 0xb9, 0x65, 0xdb, 0xea, 0xa1, 0x9f, 0xcf, 0x24, 0x70,
- 0x12, 0xeb, 0xd8, 0x56, 0xaf, 0x49, 0x2e, 0x1e, 0x0d, 0xf7, 0x45, 0xf8, 0x34, 0xf5, 0x1e, 0x98,
- 0xee, 0x59, 0x8e, 0xe1, 0xfa, 0x93, 0x90, 0x85, 0xbb, 0x1f, 0x37, 0xb0, 0x2f, 0xd8, 0x64, 0x99,
- 0xb4, 0x20, 0xbb, 0xd7, 0xe7, 0x13, 0x11, 0x7a, 0x72, 0xf1, 0xc4, 0xe8, 0x5f, 0xbe, 0xda, 0x97,
- 0x8a, 0x5e, 0xc5, 0x23, 0xf9, 0x2c, 0x11, 0xc9, 0x27, 0x0c, 0x90, 0xb0, 0x6d, 0xf5, 0xc6, 0xe2,
- 0xd6, 0xf1, 0x9a, 0x00, 0xd5, 0x67, 0x0b, 0xa8, 0xde, 0x21, 0x55, 0x66, 0xfa, 0x88, 0x7e, 0x20,
- 0x07, 0x40, 0x8c, 0x94, 0x2d, 0x6f, 0xfa, 0x24, 0x67, 0xa1, 0x7d, 0x57, 0x8e, 0x93, 0x65, 0x49,
- 0x94, 0xe5, 0x93, 0x22, 0x6c, 0x20, 0x42, 0x3e, 0x42, 0xa2, 0x25, 0xc8, 0xef, 0x7b, 0x9f, 0x99,
- 0x44, 0x25, 0x49, 0x90, 0x57, 0x8d, 0xfe, 0x89, 0x7e, 0x33, 0x03, 0x79, 0x92, 0xa0, 0x9e, 0x07,
- 0x20, 0x66, 0x01, 0x3d, 0x82, 0x99, 0x21, 0x06, 0x00, 0x97, 0x42, 0xb4, 0xd5, 0xe8, 0xb0, 0xcf,
- 0xd4, 0xe0, 0x0e, 0x13, 0xbc, 0xbf, 0x89, 0xb1, 0x40, 0x68, 0x31, 0xf3, 0x81, 0x4b, 0xf1, 0xfe,
- 0x26, 0x6f, 0xeb, 0x78, 0x9b, 0xde, 0x09, 0x91, 0xd3, 0xc2, 0x84, 0xe0, 0xef, 0xf5, 0xe0, 0x26,
- 0x51, 0xff, 0x6f, 0x92, 0xe2, 0x4d, 0xa5, 0x89, 0x5a, 0x2e, 0x85, 0x45, 0x14, 0x48, 0xa6, 0xfe,
- 0x64, 0xf4, 0xc6, 0x40, 0x6d, 0x96, 0x05, 0xb5, 0x79, 0x4a, 0x02, 0xf1, 0xa6, 0xaf, 0x3c, 0x5f,
- 0xca, 0xc3, 0x4c, 0xcd, 0xea, 0x30, 0xdd, 0xe1, 0xa6, 0x9b, 0x9f, 0xc8, 0x27, 0x9a, 0x6e, 0x06,
- 0x34, 0x22, 0x14, 0xe4, 0x39, 0xa2, 0x82, 0xc8, 0x51, 0xe0, 0xf5, 0x43, 0x5d, 0x82, 0x02, 0xd1,
- 0xde, 0xc3, 0x57, 0x54, 0xc6, 0x91, 0x20, 0xa2, 0xd5, 0xd8, 0x9f, 0xff, 0xe9, 0x74, 0xec, 0xbf,
- 0x41, 0x9e, 0x54, 0x30, 0x66, 0x6f, 0x48, 0xac, 0x68, 0x36, 0xbe, 0xa2, 0x4a, 0x7c, 0x45, 0x73,
- 0xfd, 0x15, 0x4d, 0xb2, 0x8a, 0x10, 0xa5, 0x21, 0xe9, 0xeb, 0xf8, 0xdf, 0x4c, 0x01, 0xd4, 0xf4,
- 0xab, 0xc6, 0x0e, 0xdd, 0x5b, 0xfe, 0x43, 0x7f, 0xf6, 0xc4, 0x76, 0x81, 0xbf, 0x8f, 0x1b, 0x08,
- 0xef, 0x81, 0x29, 0x36, 0xee, 0xb1, 0x8a, 0xdc, 0x2c, 0x54, 0x24, 0xa4, 0x42, 0x8d, 0xda, 0x47,
- 0x5d, 0xcd, 0xcf, 0x2f, 0xdc, 0xa6, 0x9f, 0xed, 0xbb, 0x4d, 0x7f, 0xf0, 0x0e, 0x46, 0xc4, 0x1d,
- 0xfb, 0xe8, 0xbd, 0xd2, 0x67, 0xa8, 0x38, 0x7e, 0xb8, 0x1a, 0x45, 0x34, 0xc1, 0xa7, 0xc1, 0x94,
- 0x15, 0x6c, 0x87, 0x2b, 0x91, 0xab, 0x68, 0x55, 0x73, 0xdb, 0xd2, 0xfc, 0x9c, 0x92, 0x5b, 0x67,
- 0x52, 0x7c, 0x4c, 0xe4, 0x98, 0xe2, 0xd9, 0x55, 0x3f, 0xbe, 0xa6, 0x57, 0x8f, 0x4b, 0x86, 0xbb,
- 0xbb, 0x6e, 0x98, 0x57, 0x1c, 0xf4, 0x6d, 0x72, 0x16, 0x24, 0x87, 0x7f, 0x36, 0x19, 0xfe, 0x62,
- 0x7c, 0xab, 0x86, 0x88, 0xda, 0xfd, 0x51, 0x54, 0x06, 0x73, 0x1b, 0x01, 0xe0, 0xbd, 0x50, 0xa0,
- 0x8c, 0xb2, 0x4e, 0xf4, 0x42, 0x24, 0x7e, 0x01, 0x25, 0x8d, 0xfd, 0x81, 0xde, 0x13, 0xe0, 0x78,
- 0x51, 0xc0, 0x71, 0xe9, 0x48, 0x9c, 0xa5, 0x0e, 0xe9, 0x85, 0xa7, 0xc2, 0x14, 0x93, 0xb4, 0xba,
- 0xc0, 0xb7, 0xe2, 0xe2, 0x09, 0x15, 0xa0, 0xb0, 0x61, 0x5d, 0xc5, 0x4d, 0xab, 0x98, 0xf1, 0x9e,
- 0x3d, 0xfe, 0x9a, 0x56, 0x31, 0x8b, 0x5e, 0x3b, 0x0d, 0xd3, 0x41, 0x60, 0xc3, 0xdf, 0xcf, 0x42,
- 0xb1, 0x4c, 0x66, 0x68, 0x2b, 0xb6, 0xb5, 0x47, 0x6b, 0x24, 0xef, 0x8f, 0xff, 0x23, 0xd2, 0x0e,
- 0x22, 0x41, 0xc0, 0xc1, 0xfe, 0xc2, 0x22, 0xb0, 0xa4, 0x4b, 0x98, 0x59, 0x7f, 0x09, 0x13, 0xbd,
- 0x4d, 0xca, 0x61, 0x44, 0xb6, 0x94, 0xf4, 0x9b, 0xda, 0x6f, 0x65, 0x21, 0x5f, 0xee, 0x5a, 0x26,
- 0xe6, 0x0f, 0x8d, 0x0e, 0x3d, 0x9d, 0x38, 0x78, 0x1f, 0x03, 0xbd, 0x30, 0x2b, 0x6b, 0x6b, 0x84,
- 0x02, 0xf0, 0xca, 0x96, 0x94, 0xad, 0xdc, 0x20, 0x15, 0x4b, 0x3a, 0x7d, 0x81, 0x7e, 0x39, 0x0b,
- 0x33, 0x34, 0x12, 0x59, 0xa9, 0xdb, 0x45, 0x8f, 0x0b, 0x85, 0x3a, 0x20, 0x38, 0x24, 0xfa, 0x45,
- 0xe9, 0x43, 0x51, 0x41, 0xad, 0x02, 0xda, 0x09, 0x82, 0xe9, 0x25, 0x3b, 0xa3, 0x23, 0xb7, 0x13,
- 0x37, 0x94, 0xa1, 0xf4, 0x45, 0xfd, 0x07, 0x59, 0xcf, 0x00, 0x30, 0xaf, 0x6c, 0xda, 0xf8, 0xaa,
- 0x81, 0xaf, 0xa1, 0x1b, 0x43, 0x61, 0x1f, 0x0e, 0xb3, 0xf4, 0x16, 0xe9, 0x45, 0x1c, 0x8e, 0x64,
- 0xe4, 0x46, 0xd8, 0x6c, 0x37, 0xcc, 0xc4, 0x7a, 0xf1, 0xfe, 0xd8, 0x57, 0x1c, 0x19, 0x8d, 0xcf,
- 0x2e, 0xb9, 0x66, 0x13, 0xcd, 0x45, 0xfa, 0x82, 0xfd, 0xc8, 0x14, 0x4c, 0x6f, 0x99, 0x4e, 0xaf,
- 0xab, 0x3b, 0xbb, 0xe8, 0x5f, 0x15, 0x28, 0xd0, 0x8b, 0x51, 0xd1, 0x37, 0x09, 0xd1, 0x5c, 0x9e,
- 0xbf, 0x8f, 0x6d, 0xdf, 0x81, 0x87, 0xbe, 0x84, 0xf6, 0x51, 0x96, 0xb3, 0x8f, 0xd0, 0x07, 0x14,
- 0xd9, 0x49, 0xaa, 0x5f, 0x28, 0xbb, 0x89, 0x35, 0x3a, 0x80, 0x48, 0xcf, 0x68, 0xbb, 0xfb, 0x36,
- 0x76, 0x06, 0x06, 0x10, 0x89, 0xa4, 0xb2, 0x49, 0xff, 0xd2, 0x82, 0xdf, 0x91, 0x0e, 0x53, 0x2c,
- 0xf1, 0xd0, 0x66, 0xd4, 0xe1, 0x88, 0x07, 0x67, 0xa1, 0xa0, 0xdb, 0xae, 0xe1, 0xb8, 0x6c, 0x7b,
- 0x96, 0xbd, 0x79, 0xdd, 0x25, 0x7d, 0xda, 0xb2, 0xbb, 0x7e, 0xdc, 0xa7, 0x20, 0x01, 0xfd, 0x92,
- 0xd4, 0xfc, 0x31, 0xbe, 0xe6, 0xc9, 0x20, 0x7f, 0x68, 0x84, 0x15, 0xee, 0xeb, 0xe1, 0x3a, 0xad,
- 0xd4, 0xac, 0xb4, 0x68, 0x98, 0xa0, 0x20, 0x22, 0x50, 0x07, 0xbd, 0x5b, 0xe1, 0xd6, 0xef, 0x0e,
- 0x84, 0x31, 0x82, 0x49, 0x31, 0x1c, 0x23, 0x82, 0x84, 0x98, 0xbd, 0x6e, 0x61, 0x09, 0x57, 0x91,
- 0x5e, 0xc2, 0x45, 0x3f, 0x27, 0xbd, 0x17, 0x15, 0x88, 0x72, 0xc8, 0x1a, 0x60, 0xdc, 0xc5, 0x89,
- 0x1f, 0x92, 0xda, 0x57, 0x1a, 0x56, 0xd2, 0x31, 0xc2, 0xf6, 0xe6, 0x29, 0x98, 0x5a, 0xd5, 0xbb,
- 0x5d, 0x6c, 0x1f, 0x78, 0x43, 0x52, 0xd1, 0xe7, 0x70, 0x43, 0x37, 0x8d, 0x6d, 0xec, 0xb8, 0xf1,
- 0x9d, 0xe5, 0x7b, 0xa5, 0x83, 0xf2, 0xb3, 0x32, 0x16, 0xfb, 0xe9, 0x47, 0xc8, 0xfc, 0x2e, 0xc8,
- 0x19, 0xe6, 0xb6, 0xc5, 0xba, 0xcc, 0xfe, 0x35, 0x7f, 0xff, 0x67, 0x32, 0x75, 0x21, 0x19, 0x25,
- 0xe3, 0xf2, 0x4b, 0x72, 0x91, 0x7e, 0xcf, 0xf9, 0x0b, 0x39, 0x98, 0xf7, 0x99, 0xa8, 0x9a, 0x1d,
- 0xfc, 0x28, 0xbf, 0x14, 0xf3, 0x83, 0x39, 0xd9, 0x03, 0xb8, 0xfd, 0xf5, 0x21, 0xa4, 0x22, 0x44,
- 0xda, 0x04, 0x68, 0xeb, 0x2e, 0xde, 0xb1, 0x6c, 0x23, 0xe8, 0x0f, 0x9f, 0x9e, 0x84, 0x5a, 0x99,
- 0xfe, 0x7d, 0xa0, 0x71, 0x74, 0xd4, 0xfb, 0x61, 0x16, 0x07, 0x11, 0x4f, 0xfc, 0xa5, 0x9a, 0x58,
- 0xbc, 0xf8, 0xfc, 0xe8, 0x0f, 0xa4, 0xce, 0xf9, 0xca, 0x54, 0x33, 0x19, 0x66, 0xad, 0xd1, 0xda,
- 0xd0, 0x56, 0x6d, 0xa3, 0xa4, 0x35, 0xd6, 0x4a, 0xeb, 0xeb, 0xd5, 0xda, 0x6a, 0x10, 0x6a, 0x4b,
- 0x85, 0x85, 0xe5, 0xfa, 0xa5, 0x1a, 0x17, 0x0b, 0x2d, 0x87, 0x36, 0x61, 0xda, 0x97, 0xd7, 0x20,
- 0x4f, 0x4e, 0x5e, 0x66, 0xcc, 0x93, 0x93, 0x4b, 0xf2, 0x8c, 0x33, 0xa3, 0x1d, 0xb8, 0xf7, 0x90,
- 0x67, 0xf4, 0x1b, 0x3a, 0xe4, 0xc9, 0x9a, 0x3a, 0x7a, 0x27, 0xd9, 0x44, 0xec, 0x75, 0xf5, 0x36,
- 0x46, 0x7b, 0x09, 0xac, 0x71, 0xff, 0x96, 0xa8, 0xec, 0xa1, 0x5b, 0xa2, 0xc8, 0x23, 0xb3, 0xfa,
- 0x4e, 0x0f, 0x5a, 0xc7, 0xd7, 0x68, 0x16, 0xf1, 0x48, 0x6c, 0xec, 0xee, 0x0a, 0x5d, 0xfe, 0x67,
- 0x6c, 0x46, 0xa8, 0x64, 0x34, 0x4f, 0x69, 0x84, 0xff, 0x8d, 0xe3, 0x28, 0xfd, 0x16, 0xff, 0xf9,
- 0x1c, 0xe4, 0x1b, 0xbd, 0xae, 0xe1, 0xa2, 0x1f, 0xcb, 0x8e, 0x05, 0x33, 0x7a, 0xb3, 0x97, 0x32,
- 0xf4, 0x66, 0xaf, 0x70, 0xcf, 0x36, 0x27, 0xb1, 0x67, 0xdb, 0xc4, 0x8f, 0xba, 0xe2, 0x9e, 0xed,
- 0x3d, 0x2c, 0x5c, 0x26, 0xdd, 0xf1, 0x7d, 0xc2, 0x00, 0x91, 0x92, 0x6a, 0x0d, 0x88, 0xc3, 0x7a,
- 0xe1, 0xa9, 0x2c, 0x1c, 0x24, 0x40, 0x61, 0xa9, 0xde, 0x6c, 0xd6, 0x37, 0x8a, 0x27, 0x48, 0x1c,
- 0xb1, 0xfa, 0x26, 0x0d, 0xce, 0x55, 0xad, 0xd5, 0x2a, 0x5a, 0x31, 0x4b, 0x02, 0x54, 0x56, 0x9b,
- 0xeb, 0x95, 0xa2, 0x22, 0x5e, 0xf3, 0x12, 0x6b, 0x7e, 0x8b, 0x65, 0xa7, 0xa9, 0x5e, 0x72, 0x86,
- 0x78, 0x34, 0x3f, 0xe9, 0x2b, 0xd7, 0x0f, 0x2b, 0x90, 0xdf, 0xc0, 0xf6, 0x0e, 0x46, 0xcf, 0x4f,
- 0xb0, 0xc9, 0xb7, 0x6d, 0xd8, 0x0e, 0x0d, 0xe7, 0x19, 0x6e, 0xf2, 0xf1, 0x69, 0xea, 0xad, 0x30,
- 0xef, 0xe0, 0xb6, 0x65, 0x76, 0xfc, 0x4c, 0xb4, 0x3f, 0x12, 0x13, 0xd1, 0xab, 0x13, 0x42, 0x46,
- 0x18, 0x1d, 0xcb, 0x4e, 0x5d, 0x12, 0x60, 0x06, 0x95, 0x9a, 0x3e, 0x30, 0x5f, 0x51, 0xbc, 0x9f,
- 0x7a, 0x07, 0xe8, 0xd5, 0xd2, 0xbb, 0xaf, 0x77, 0x42, 0xe1, 0xb2, 0x1f, 0xd1, 0x5f, 0x89, 0xec,
- 0x8f, 0x59, 0x1e, 0x75, 0x09, 0x4e, 0x39, 0xb8, 0x8b, 0xdb, 0x2e, 0xee, 0x78, 0x4d, 0x57, 0x1b,
- 0xda, 0x29, 0x1c, 0xce, 0x8e, 0x7e, 0x87, 0x07, 0xf0, 0x3e, 0x11, 0xc0, 0xdb, 0x06, 0x88, 0xd2,
- 0xab, 0x50, 0xb4, 0xad, 0xec, 0x55, 0xa3, 0xd1, 0xb5, 0x82, 0x45, 0x71, 0xff, 0xdd, 0xfb, 0xb6,
- 0xeb, 0xee, 0x75, 0xc9, 0x37, 0x76, 0x3c, 0xc1, 0x7f, 0x57, 0x17, 0x61, 0x4a, 0x37, 0x0f, 0xc8,
- 0xa7, 0x5c, 0x4c, 0xad, 0xfd, 0x4c, 0xe8, 0xb5, 0x01, 0xf2, 0x0f, 0x08, 0xc8, 0x3f, 0x49, 0x8e,
- 0xdd, 0xf4, 0x81, 0xff, 0xce, 0x29, 0xc8, 0x6f, 0xea, 0x8e, 0x8b, 0xd1, 0xff, 0xa3, 0xc8, 0x22,
- 0x7f, 0x1b, 0x2c, 0x6c, 0x5b, 0xed, 0x7d, 0x07, 0x77, 0xc4, 0x46, 0xd9, 0x97, 0x3a, 0x0e, 0xcc,
- 0xd5, 0x3b, 0xa0, 0xe8, 0x27, 0x32, 0xb2, 0xfe, 0x36, 0xfc, 0xa1, 0x74, 0x72, 0x69, 0x88, 0xb3,
- 0xa9, 0xdb, 0x6e, 0x7d, 0x9b, 0xa4, 0x05, 0x97, 0x86, 0xf0, 0x89, 0x02, 0xf4, 0x85, 0x18, 0xe8,
- 0xa7, 0xa2, 0xa1, 0x9f, 0x96, 0x80, 0x5e, 0x2d, 0xc1, 0xf4, 0xb6, 0xd1, 0xc5, 0xe4, 0x87, 0x19,
- 0xf2, 0xc3, 0xa0, 0x31, 0x89, 0xc8, 0x3e, 0x18, 0x93, 0x56, 0x8c, 0x2e, 0xd6, 0x82, 0xdf, 0xfc,
- 0x89, 0x0c, 0x84, 0x13, 0x99, 0x75, 0xea, 0x8d, 0xeb, 0x19, 0x5e, 0xa6, 0xbe, 0x87, 0xfd, 0xc5,
- 0x37, 0x93, 0x1d, 0x8d, 0xe9, 0xe8, 0xae, 0x4e, 0xc0, 0x98, 0xd3, 0xc8, 0xb3, 0xe8, 0x17, 0xa2,
- 0xf4, 0xfb, 0x85, 0xbc, 0x44, 0x49, 0xd6, 0x23, 0xfa, 0xcc, 0x46, 0xb4, 0xa8, 0xcb, 0x3e, 0x40,
- 0xd4, 0x52, 0x0c, 0xde, 0x3d, 0x60, 0xda, 0xba, 0x8d, 0xdd, 0x4d, 0xde, 0x13, 0x23, 0xaf, 0x89,
- 0x89, 0xc4, 0x11, 0xd0, 0x69, 0xe8, 0x7b, 0xf4, 0x52, 0x90, 0xb2, 0xf7, 0x8d, 0x39, 0x78, 0x1d,
- 0x4a, 0x0f, 0xfb, 0xdf, 0xfc, 0xb8, 0xfb, 0xdf, 0x41, 0x75, 0x4c, 0xbf, 0x19, 0xbe, 0x3e, 0x07,
- 0x4a, 0x79, 0xdf, 0x7d, 0x4c, 0x77, 0xbf, 0xff, 0x26, 0xed, 0xe7, 0xc2, 0xfa, 0xb3, 0x7d, 0xf7,
- 0x78, 0x7b, 0xdf, 0x84, 0x5a, 0x22, 0xe7, 0x4f, 0x13, 0x55, 0xb7, 0xf4, 0x75, 0xe4, 0xe7, 0x95,
- 0xc0, 0x3d, 0xf3, 0xc5, 0x99, 0xa3, 0x9b, 0xe6, 0x88, 0xf6, 0x4f, 0x5c, 0xcf, 0x10, 0xbc, 0xfb,
- 0x1d, 0x4f, 0x4e, 0x88, 0x8e, 0x4a, 0xb6, 0xd7, 0x89, 0x28, 0xe7, 0x34, 0xfa, 0x82, 0x7e, 0x5c,
- 0xda, 0x69, 0x9d, 0x8a, 0x2d, 0xd6, 0x95, 0x30, 0x99, 0x4d, 0x25, 0x77, 0x6f, 0x7a, 0x4c, 0xb1,
- 0xe9, 0x03, 0xf6, 0x77, 0xbc, 0xab, 0x60, 0xe9, 0xc8, 0x88, 0xa1, 0xd7, 0x49, 0x6f, 0x47, 0xd1,
- 0x6a, 0x0f, 0x59, 0x2f, 0x4c, 0x26, 0x6f, 0xb9, 0xcd, 0xaa, 0xd8, 0x82, 0x27, 0x70, 0xcb, 0x99,
- 0x02, 0x05, 0xba, 0x05, 0x89, 0xde, 0x2a, 0xdd, 0x44, 0xbc, 0xde, 0x48, 0x74, 0x21, 0x0c, 0xde,
- 0x93, 0xac, 0x39, 0x08, 0xae, 0x86, 0xb9, 0x44, 0xae, 0x86, 0xe2, 0x29, 0x50, 0x89, 0x76, 0x44,
- 0xeb, 0x98, 0xf2, 0x74, 0x32, 0x49, 0x0b, 0x1b, 0xc8, 0x50, 0xfa, 0x78, 0x7f, 0x77, 0x1e, 0xe6,
- 0x68, 0xd1, 0xd4, 0xc7, 0x19, 0xbd, 0x3b, 0xfb, 0x1f, 0x07, 0x75, 0xb5, 0x06, 0x73, 0xd7, 0x08,
- 0xdb, 0xf4, 0xf6, 0x32, 0xb6, 0x72, 0x71, 0x47, 0xec, 0xba, 0x07, 0xad, 0xa7, 0x7f, 0xdf, 0x99,
- 0xf0, 0xbf, 0x27, 0x63, 0xba, 0xe0, 0x4f, 0x1d, 0xb8, 0x0a, 0xc4, 0xc8, 0xe2, 0x93, 0xd4, 0xb3,
- 0x50, 0xb8, 0x6a, 0xe0, 0x6b, 0xd5, 0x0e, 0xb3, 0x6e, 0xd9, 0x1b, 0xfa, 0x65, 0xe9, 0x7d, 0x5b,
- 0x1e, 0x6e, 0xc6, 0x4b, 0xba, 0x5a, 0x28, 0xb7, 0x7b, 0x3b, 0x94, 0xad, 0x09, 0x9c, 0x48, 0x16,
- 0xef, 0x25, 0x2f, 0x27, 0x50, 0xc4, 0x28, 0xc3, 0x59, 0x0c, 0x04, 0x12, 0x7b, 0xde, 0x85, 0x0a,
- 0x60, 0xcc, 0x57, 0x96, 0xcb, 0x45, 0xa7, 0x18, 0x52, 0x74, 0xfa, 0x92, 0x7f, 0xa3, 0x02, 0x33,
- 0x0d, 0xec, 0xae, 0x18, 0xb8, 0xdb, 0x71, 0x90, 0x7d, 0x74, 0xd3, 0xe8, 0x2e, 0x28, 0x6c, 0x13,
- 0x62, 0xc3, 0xce, 0x2d, 0xb0, 0x6c, 0xe8, 0xf5, 0x59, 0xd9, 0x1d, 0x61, 0xb6, 0xfa, 0xe6, 0x73,
- 0x3b, 0x16, 0x98, 0xe4, 0x3c, 0x7a, 0xe3, 0x4b, 0x9e, 0x40, 0x28, 0x71, 0x05, 0xe6, 0xd8, 0x45,
- 0xc6, 0xa5, 0xae, 0xb1, 0x63, 0xf2, 0xf7, 0x02, 0x8e, 0xdc, 0x42, 0xd4, 0xa7, 0x40, 0x5e, 0xf7,
- 0xa8, 0xb1, 0xad, 0x57, 0x34, 0xb0, 0xf3, 0x24, 0xe5, 0x69, 0x34, 0x63, 0x82, 0xc0, 0xbd, 0xa1,
- 0x62, 0xfb, 0x3c, 0x4f, 0x30, 0x70, 0xef, 0xd0, 0xc2, 0xd3, 0x47, 0xec, 0x8b, 0x0a, 0x9c, 0x66,
- 0x0c, 0x5c, 0xc4, 0xb6, 0x6b, 0xb4, 0xf5, 0x2e, 0x45, 0xee, 0xe5, 0x99, 0x71, 0x40, 0xb7, 0x06,
- 0xf3, 0x57, 0x79, 0xb2, 0x0c, 0xc2, 0x0b, 0x03, 0x21, 0x14, 0x18, 0xd0, 0xc4, 0x1f, 0x13, 0x04,
- 0x40, 0x15, 0xa4, 0x2a, 0xd0, 0x9c, 0x60, 0x00, 0x54, 0x69, 0x26, 0xd2, 0x87, 0xf8, 0x55, 0x2c,
- 0xb0, 0x4f, 0xd8, 0x7d, 0xfe, 0xa1, 0x34, 0xb6, 0x5b, 0x30, 0x4b, 0xb0, 0xa4, 0x3f, 0xb2, 0x65,
- 0x88, 0x18, 0x25, 0x0e, 0xfa, 0x1d, 0x76, 0x45, 0x63, 0xf0, 0xaf, 0xc6, 0xd3, 0x41, 0x97, 0x00,
- 0xc2, 0x4f, 0x7c, 0x27, 0x9d, 0x89, 0xea, 0xa4, 0xb3, 0x72, 0x9d, 0xf4, 0x5b, 0xa4, 0x43, 0xad,
- 0x0c, 0x66, 0xfb, 0xe8, 0xea, 0x21, 0x17, 0x64, 0x63, 0x78, 0xe9, 0xe9, 0xeb, 0xc5, 0x6b, 0x99,
- 0x5e, 0x2c, 0xef, 0xf7, 0xba, 0x46, 0xdb, 0x9b, 0x4f, 0x7d, 0x74, 0x2c, 0xf3, 0x29, 0xbe, 0x3f,
- 0x50, 0xfa, 0xfa, 0x83, 0x23, 0x58, 0xd2, 0xb7, 0xc3, 0x49, 0x5a, 0x44, 0x39, 0x60, 0x2b, 0x4f,
- 0x03, 0x49, 0xf4, 0x25, 0x8b, 0x51, 0x0d, 0x25, 0x95, 0x20, 0x10, 0xc2, 0x08, 0x4b, 0x9f, 0xc9,
- 0x8c, 0xdd, 0xa4, 0x0a, 0x12, 0xc5, 0xd9, 0x04, 0xdc, 0x42, 0x73, 0xd4, 0xda, 0xdd, 0x22, 0xb7,
- 0x68, 0xa2, 0xcf, 0xe5, 0xc6, 0x31, 0x22, 0x3c, 0x07, 0x72, 0xc4, 0xc5, 0x5d, 0x89, 0x5c, 0xd2,
- 0x08, 0x8b, 0x0c, 0xaf, 0x38, 0xc5, 0x8f, 0xba, 0x6b, 0x27, 0x34, 0xf2, 0xa7, 0x7a, 0x07, 0x9c,
- 0xbc, 0xac, 0xb7, 0xaf, 0xec, 0xd8, 0xd6, 0x3e, 0xb9, 0x6f, 0xd0, 0x62, 0x17, 0x17, 0x92, 0x0b,
- 0x60, 0xc5, 0x0f, 0xea, 0xdd, 0xbe, 0xe9, 0x90, 0x1f, 0x66, 0x3a, 0xac, 0x9d, 0x60, 0xc6, 0x83,
- 0xfa, 0xd4, 0xa0, 0xd3, 0x29, 0xc4, 0x76, 0x3a, 0x6b, 0x27, 0xfc, 0x6e, 0x47, 0x5d, 0x86, 0xe9,
- 0x8e, 0x71, 0x95, 0x6c, 0x55, 0x93, 0x59, 0xd7, 0xb0, 0x83, 0xcf, 0xcb, 0xc6, 0x55, 0xba, 0xb1,
- 0xbd, 0x76, 0x42, 0x0b, 0xfe, 0x54, 0x57, 0x61, 0x86, 0x6c, 0x0b, 0x10, 0x32, 0xd3, 0x89, 0x0e,
- 0x35, 0xaf, 0x9d, 0xd0, 0xc2, 0x7f, 0x3d, 0xeb, 0x23, 0x47, 0xce, 0x7e, 0x3c, 0xe0, 0x6f, 0xb7,
- 0x67, 0x12, 0x6d, 0xb7, 0x7b, 0xb2, 0xa0, 0x1b, 0xee, 0x67, 0x21, 0xdf, 0x26, 0x12, 0xce, 0x32,
- 0x09, 0xd3, 0x57, 0xf5, 0x3e, 0xc8, 0xed, 0xe9, 0xb6, 0x3f, 0x79, 0xbe, 0x6d, 0x38, 0xdd, 0x0d,
- 0xdd, 0xbe, 0xe2, 0x21, 0xe8, 0xfd, 0xb5, 0x34, 0x05, 0x79, 0x22, 0xb8, 0xe0, 0x01, 0xfd, 0x7c,
- 0x8e, 0x9a, 0x21, 0x65, 0xcb, 0xf4, 0x86, 0xfd, 0xa6, 0xe5, 0x1f, 0x90, 0xf9, 0xe5, 0xcc, 0x78,
- 0x2c, 0xc8, 0xeb, 0xb8, 0x70, 0xc3, 0xa6, 0xf1, 0xfc, 0x7d, 0xfc, 0x10, 0x3e, 0x60, 0x4b, 0xa2,
- 0x83, 0x3e, 0xa9, 0xe7, 0x01, 0x5c, 0xe6, 0x2d, 0x1c, 0x04, 0x52, 0xe2, 0x52, 0xc2, 0xe5, 0x83,
- 0xfc, 0x70, 0x47, 0x95, 0xdf, 0x19, 0xc1, 0x74, 0xe9, 0x17, 0x44, 0xf4, 0x0c, 0xbc, 0x6b, 0x98,
- 0x5c, 0x9d, 0xfd, 0xd7, 0x84, 0x9d, 0x52, 0x52, 0xa3, 0x66, 0x08, 0x7b, 0xe9, 0xf7, 0x4d, 0x3f,
- 0x9b, 0xa3, 0x11, 0x57, 0xe9, 0x29, 0x0c, 0xf1, 0x86, 0x5f, 0xf4, 0xa9, 0xb1, 0x28, 0xcd, 0x80,
- 0x01, 0x47, 0x19, 0x38, 0xe0, 0x1c, 0x3a, 0xa4, 0x9c, 0x1b, 0x72, 0x48, 0x39, 0x9f, 0x6c, 0xe5,
- 0xf0, 0xc3, 0xbc, 0xfe, 0x6c, 0x8a, 0xfa, 0x73, 0x6f, 0x04, 0x40, 0x83, 0xe4, 0x32, 0x16, 0xfb,
- 0xe6, 0x9d, 0x81, 0xa6, 0x34, 0x04, 0x4d, 0x79, 0x60, 0x74, 0x46, 0xd2, 0xd7, 0x96, 0x0f, 0xe6,
- 0xe0, 0xba, 0x90, 0x99, 0x1a, 0xbe, 0xc6, 0x14, 0xe5, 0xf7, 0xc7, 0xa2, 0x28, 0xc9, 0x63, 0x20,
- 0xa4, 0xad, 0x31, 0xbf, 0x29, 0x7d, 0x76, 0xa8, 0x1f, 0xa8, 0x40, 0x36, 0xd1, 0x77, 0xe4, 0xd3,
- 0x1e, 0xc6, 0xbf, 0x23, 0x9f, 0xbe, 0x25, 0xec, 0x6e, 0xe4, 0x4e, 0x1c, 0xc9, 0xf2, 0x36, 0x01,
- 0xfd, 0x61, 0xeb, 0x1a, 0xcd, 0x7d, 0xdb, 0xac, 0x9a, 0xae, 0x85, 0xbe, 0x63, 0x2c, 0x8a, 0x13,
- 0x78, 0xc3, 0x29, 0xa3, 0x78, 0xc3, 0x8d, 0xb4, 0xca, 0xe1, 0xd7, 0xe0, 0x58, 0x56, 0x39, 0x22,
- 0x0a, 0x4f, 0x1f, 0xbf, 0x77, 0x28, 0x70, 0x96, 0x4d, 0xb6, 0x96, 0x44, 0x0b, 0x11, 0x3d, 0x3c,
- 0x0e, 0x20, 0x4f, 0xfb, 0x66, 0x12, 0xbb, 0x57, 0x92, 0xbc, 0x88, 0x27, 0xa5, 0x62, 0x6f, 0xd4,
- 0x11, 0xa6, 0x83, 0x7d, 0x1c, 0x8e, 0x05, 0x29, 0xb9, 0x8b, 0x74, 0x12, 0xb0, 0x91, 0x3e, 0x66,
- 0xaf, 0x54, 0xa0, 0x40, 0xcf, 0x69, 0xa1, 0xad, 0x54, 0x1c, 0x26, 0xc4, 0x18, 0xd1, 0x12, 0x3b,
- 0x72, 0x94, 0x9b, 0xd4, 0xce, 0xb0, 0x25, 0xd9, 0x8b, 0x1b, 0xc8, 0xca, 0x04, 0x5c, 0x08, 0xb3,
- 0x30, 0xdb, 0xc0, 0x6e, 0x59, 0xb7, 0x6d, 0x43, 0xdf, 0x19, 0x97, 0xc7, 0xb7, 0xac, 0xf7, 0x30,
- 0xfa, 0x6a, 0x46, 0xf6, 0x3c, 0x4d, 0xb0, 0x10, 0xee, 0xb3, 0x1a, 0x11, 0x89, 0xf0, 0x4d, 0x52,
- 0x67, 0x66, 0x86, 0x51, 0x9b, 0x80, 0xc7, 0x76, 0x16, 0xa6, 0xfc, 0xb3, 0x78, 0x77, 0x09, 0xe7,
- 0x33, 0x77, 0xdd, 0x3d, 0xff, 0x18, 0x0c, 0x79, 0x3e, 0x7c, 0x06, 0x0c, 0xbd, 0x26, 0xa1, 0xa3,
- 0x7c, 0xfc, 0x41, 0xc2, 0x64, 0x6d, 0x2c, 0x89, 0x3b, 0xfc, 0x71, 0x1d, 0x1d, 0xfc, 0xc5, 0x29,
- 0xb6, 0x1c, 0xb9, 0xae, 0xbb, 0xf8, 0x51, 0xf4, 0x87, 0x0a, 0x4c, 0x35, 0xb0, 0xeb, 0x8d, 0xb7,
- 0xc2, 0x75, 0xd2, 0xa3, 0x6a, 0xb8, 0xca, 0xad, 0x78, 0xcc, 0xb0, 0x35, 0x8c, 0x07, 0x61, 0xa6,
- 0x67, 0x5b, 0x6d, 0xec, 0x38, 0x6c, 0xf5, 0x82, 0x77, 0x54, 0x1b, 0x34, 0xfa, 0x13, 0xd6, 0x16,
- 0x37, 0xfd, 0x7f, 0xb4, 0xf0, 0xf7, 0xa4, 0x66, 0x00, 0xa5, 0xc4, 0x2a, 0x38, 0x69, 0x33, 0x20,
- 0xae, 0xf0, 0xf4, 0x81, 0xfe, 0x5d, 0x05, 0xe6, 0x1a, 0xd8, 0x0d, 0xa4, 0x98, 0x60, 0x93, 0x23,
- 0x1a, 0x5e, 0x01, 0x4a, 0xe5, 0x68, 0x50, 0xca, 0x5f, 0xc6, 0x2a, 0x4a, 0x33, 0x20, 0x36, 0xc1,
- 0xcb, 0x58, 0xe5, 0x38, 0x98, 0xc0, 0xf1, 0xb5, 0x27, 0xc0, 0x0c, 0xe1, 0x85, 0x34, 0xd8, 0xef,
- 0xcd, 0x85, 0x8d, 0xf7, 0xb3, 0x29, 0x35, 0xde, 0xfb, 0x21, 0xbf, 0xa7, 0xdb, 0x57, 0x1c, 0xd2,
- 0x70, 0x67, 0x65, 0xcc, 0xf6, 0x0d, 0x2f, 0xbb, 0x46, 0xff, 0x1a, 0xec, 0xa7, 0x99, 0x4f, 0xe6,
- 0xa7, 0xf9, 0xa6, 0x6c, 0xa2, 0x91, 0x90, 0xce, 0x1d, 0xc6, 0xd8, 0xe4, 0x13, 0x8c, 0x9b, 0x31,
- 0x65, 0xa7, 0xaf, 0x1c, 0x2f, 0x57, 0x60, 0xda, 0x1b, 0xb7, 0x89, 0x3d, 0x7e, 0xe9, 0xe8, 0xea,
- 0x30, 0xd8, 0xd0, 0x4f, 0xd8, 0x03, 0xfb, 0x12, 0x19, 0x9f, 0x79, 0x9f, 0xa0, 0x07, 0x8e, 0x2b,
- 0x3c, 0x7d, 0x3c, 0xde, 0x45, 0xf1, 0x20, 0xed, 0x01, 0xfd, 0xb4, 0x02, 0xca, 0x2a, 0x76, 0x27,
- 0x6d, 0x45, 0xbe, 0x5d, 0x3a, 0xc4, 0x91, 0x20, 0x30, 0xc2, 0xf3, 0xe2, 0x2a, 0x1e, 0x4f, 0x03,
- 0x92, 0x8b, 0x6d, 0x24, 0xc5, 0x40, 0xfa, 0xa8, 0xbd, 0x8f, 0xa2, 0x46, 0x37, 0x17, 0xbe, 0x7d,
- 0x0c, 0xbd, 0xea, 0x64, 0x17, 0x3e, 0x7c, 0x01, 0x12, 0x1a, 0xc7, 0xd5, 0xde, 0x06, 0x15, 0x3e,
- 0x91, 0xcb, 0x4f, 0xc1, 0x6b, 0xec, 0xbb, 0xb8, 0x7d, 0x05, 0x77, 0xf8, 0xcb, 0xe4, 0x46, 0x85,
- 0xee, 0x1c, 0x4c, 0xb5, 0x29, 0x35, 0x02, 0xde, 0xb4, 0xe6, 0xbf, 0x26, 0xb8, 0xc9, 0x5f, 0xec,
- 0x88, 0xe8, 0xef, 0x13, 0xbc, 0xc9, 0x5f, 0xa2, 0xf8, 0x09, 0x98, 0x2d, 0x74, 0x96, 0x51, 0x6d,
- 0x5b, 0x26, 0xfa, 0xaf, 0x47, 0x87, 0xe5, 0x26, 0x98, 0x31, 0xda, 0x96, 0x49, 0xc2, 0x50, 0xf8,
- 0x87, 0x80, 0x82, 0x04, 0xff, 0x6b, 0x65, 0xcf, 0x7a, 0xc4, 0x60, 0xbb, 0xe6, 0x61, 0xc2, 0xa8,
- 0xc6, 0x84, 0xc7, 0xfa, 0x71, 0x19, 0x13, 0x03, 0xca, 0x4e, 0x1f, 0xb2, 0x8f, 0x85, 0xde, 0x6d,
- 0xb4, 0x2b, 0x7c, 0x4c, 0xac, 0x02, 0x8f, 0x32, 0x9c, 0xf1, 0xb5, 0x38, 0x96, 0xe1, 0x2c, 0x86,
- 0x81, 0x09, 0xdc, 0x86, 0x12, 0xe2, 0x98, 0xfa, 0x1a, 0xf0, 0x11, 0xd0, 0x19, 0x9f, 0x79, 0x38,
- 0x22, 0x3a, 0xc7, 0x63, 0x22, 0x7e, 0x88, 0x85, 0xc8, 0x64, 0x16, 0x0f, 0xfa, 0x6f, 0xe3, 0x00,
- 0xe7, 0xde, 0x51, 0xfc, 0x15, 0xa8, 0xb7, 0x02, 0x7a, 0x5b, 0x56, 0x36, 0x04, 0xca, 0x21, 0x09,
- 0x7a, 0x54, 0xc6, 0x82, 0xe0, 0x5b, 0xa4, 0x62, 0x93, 0xc8, 0x94, 0x9f, 0x3e, 0x80, 0x2f, 0x53,
- 0x60, 0x81, 0xf8, 0x08, 0x74, 0xb1, 0x6e, 0xd3, 0x8e, 0x72, 0x2c, 0x8e, 0xf2, 0xef, 0x92, 0x0e,
- 0xf0, 0x23, 0xca, 0x21, 0xe4, 0x63, 0x2c, 0x50, 0xc8, 0x45, 0xf7, 0x91, 0x64, 0x61, 0x22, 0xdb,
- 0x28, 0xc5, 0x80, 0x05, 0xa6, 0xe2, 0xe3, 0xc1, 0x23, 0xa1, 0x47, 0xae, 0x28, 0x0c, 0xbf, 0xb1,
- 0x4d, 0xd8, 0x23, 0x57, 0x86, 0x89, 0xf4, 0x31, 0xf9, 0xe9, 0xa7, 0xb0, 0x05, 0xe7, 0xa6, 0x7e,
- 0xb9, 0x8b, 0xd1, 0xeb, 0x72, 0xc1, 0x89, 0xb6, 0xdf, 0x1d, 0x8b, 0x07, 0xe6, 0x11, 0x02, 0xe2,
- 0xab, 0x90, 0xb3, 0xad, 0x6b, 0x74, 0x69, 0x6b, 0x5e, 0x23, 0xcf, 0xf4, 0x72, 0xcb, 0xee, 0xfe,
- 0x9e, 0x49, 0x4f, 0x86, 0xce, 0x6b, 0xfe, 0xab, 0x7a, 0x2b, 0xcc, 0x5f, 0x33, 0xdc, 0xdd, 0x35,
- 0xac, 0x77, 0xb0, 0xad, 0x59, 0xd7, 0x88, 0xc7, 0xdc, 0xb4, 0x26, 0x26, 0x8a, 0xfe, 0x2b, 0x12,
- 0xf6, 0xa5, 0x27, 0x94, 0xc9, 0x1c, 0x7f, 0x4b, 0x62, 0x79, 0x46, 0x73, 0x95, 0xbe, 0xc2, 0xbc,
- 0x5f, 0x81, 0x19, 0xcd, 0xba, 0xc6, 0x94, 0xe4, 0xff, 0x3c, 0x5e, 0x1d, 0x49, 0x3c, 0xd1, 0x23,
- 0x92, 0x0b, 0xd8, 0x9f, 0xf8, 0x44, 0x2f, 0xb6, 0xf8, 0x89, 0x9c, 0x5c, 0x9a, 0xd3, 0xac, 0x6b,
- 0x0d, 0xec, 0xd2, 0x16, 0x81, 0x5a, 0x63, 0x72, 0xb2, 0x36, 0x1c, 0x4a, 0x90, 0xcd, 0xc3, 0x83,
- 0xf7, 0xa4, 0xbb, 0x08, 0x81, 0x80, 0x02, 0x16, 0x27, 0xbd, 0x8b, 0x30, 0x94, 0x83, 0x09, 0xc4,
- 0x48, 0x51, 0x60, 0x56, 0xb3, 0xae, 0x79, 0x43, 0xc3, 0x8a, 0xd1, 0xed, 0x8e, 0x67, 0x84, 0x4c,
- 0x6a, 0xfc, 0xfb, 0x62, 0xf0, 0xb9, 0x98, 0xb8, 0xf1, 0x3f, 0x84, 0x81, 0xf4, 0x61, 0x78, 0x09,
- 0x6d, 0x2c, 0xfe, 0x08, 0x6d, 0x8e, 0x07, 0x87, 0x51, 0x1b, 0x44, 0xc0, 0xc6, 0xb1, 0x35, 0x88,
- 0x28, 0x0e, 0x26, 0xb2, 0x73, 0xb2, 0x50, 0x26, 0xc3, 0xfc, 0x78, 0xdb, 0xc4, 0x7b, 0x92, 0xb9,
- 0x26, 0xb2, 0x61, 0x57, 0x60, 0x64, 0x2c, 0x68, 0x24, 0x70, 0x41, 0x94, 0xe0, 0x21, 0x7d, 0x3c,
- 0x7e, 0x45, 0x81, 0x39, 0xca, 0xc2, 0x63, 0xc4, 0x0a, 0x18, 0xa9, 0x51, 0xf1, 0x35, 0x38, 0x9e,
- 0x46, 0x15, 0xc3, 0xc1, 0x44, 0xee, 0x14, 0xf5, 0xec, 0xb8, 0x11, 0x8e, 0x8f, 0x47, 0x21, 0x38,
- 0xb2, 0x31, 0x36, 0xc6, 0x23, 0xe4, 0xa3, 0x18, 0x63, 0xc7, 0x74, 0x8c, 0xfc, 0x25, 0x41, 0x2b,
- 0x1a, 0x27, 0x06, 0x47, 0x68, 0x0a, 0x63, 0x84, 0x61, 0xc4, 0xa6, 0x70, 0x4c, 0x48, 0x7c, 0x49,
- 0x01, 0xa0, 0x0c, 0x6c, 0x58, 0x57, 0xc9, 0x65, 0x3e, 0x63, 0xe8, 0xce, 0xfa, 0xdd, 0xea, 0x95,
- 0x21, 0x6e, 0xf5, 0x09, 0x43, 0xb8, 0x24, 0x5d, 0x09, 0xe4, 0xa4, 0xec, 0x55, 0x72, 0xe2, 0x2b,
- 0x81, 0xf1, 0xe5, 0xa7, 0x8f, 0xf1, 0x17, 0xa8, 0x35, 0x17, 0x1e, 0x30, 0xfd, 0xd1, 0xb1, 0xa0,
- 0xcc, 0xcd, 0xfe, 0x15, 0x71, 0xf6, 0x7f, 0x04, 0x6c, 0x47, 0xb5, 0x11, 0x87, 0x1d, 0x1c, 0x4d,
- 0xdf, 0x46, 0x3c, 0xbe, 0x03, 0xa2, 0xdf, 0x9e, 0x83, 0x93, 0xac, 0x13, 0xf9, 0x8f, 0x00, 0x71,
- 0xc2, 0x73, 0x78, 0x42, 0x27, 0x39, 0x04, 0xe5, 0x71, 0x2d, 0x48, 0x25, 0x59, 0xca, 0x94, 0x60,
- 0x6f, 0x22, 0xab, 0x1b, 0x85, 0xca, 0xa3, 0x3d, 0xdd, 0xec, 0xc8, 0x87, 0xfb, 0x1d, 0x02, 0xbc,
- 0xbf, 0xd6, 0xa8, 0x88, 0x6b, 0x8d, 0x03, 0x56, 0x26, 0x13, 0xef, 0x5c, 0x13, 0x91, 0x51, 0x76,
- 0x27, 0xbe, 0x73, 0x1d, 0x5d, 0x76, 0xfa, 0x28, 0xbd, 0x47, 0x81, 0x5c, 0xc3, 0xb2, 0x5d, 0xf4,
- 0xd2, 0x24, 0xad, 0x93, 0x4a, 0x3e, 0x04, 0xc9, 0x7f, 0x57, 0xcb, 0xc2, 0x1d, 0xcf, 0x77, 0xc5,
- 0x1f, 0x75, 0xd6, 0x5d, 0x9d, 0x78, 0x75, 0x7b, 0xe5, 0x73, 0x97, 0x3d, 0x27, 0x8d, 0xa7, 0x43,
- 0xe5, 0xd7, 0x88, 0x3e, 0x80, 0x91, 0x5a, 0x3c, 0x9d, 0xc8, 0x92, 0xd3, 0xc7, 0xed, 0x0d, 0x27,
- 0x99, 0x6f, 0xeb, 0x8a, 0xd1, 0xc5, 0xe8, 0xa5, 0xd4, 0x65, 0xa4, 0xa6, 0xef, 0x61, 0xf9, 0x23,
- 0x31, 0xb1, 0xae, 0xad, 0x24, 0xbe, 0xac, 0x12, 0xc6, 0x97, 0x4d, 0xda, 0xa0, 0xe8, 0x01, 0x74,
- 0xca, 0xd2, 0xa4, 0x1b, 0x54, 0x4c, 0xd9, 0x13, 0x89, 0xd3, 0x79, 0xaa, 0x81, 0x5d, 0x6a, 0x54,
- 0xd6, 0xfd, 0x1b, 0x58, 0xbe, 0x75, 0x2c, 0x11, 0x3b, 0x83, 0x0b, 0x5e, 0x94, 0xbe, 0x0b, 0x5e,
- 0xde, 0xcf, 0x83, 0xb3, 0x21, 0x82, 0xf3, 0xcd, 0xd1, 0x02, 0x12, 0x99, 0x1c, 0x0b, 0x4c, 0x6f,
- 0x0f, 0x60, 0xda, 0x14, 0x60, 0xba, 0x6f, 0x44, 0x2e, 0xd2, 0x07, 0xec, 0xfb, 0xf3, 0x70, 0x92,
- 0x4e, 0xfa, 0x4b, 0x66, 0x87, 0x45, 0x58, 0x7d, 0x6b, 0xf6, 0x98, 0x37, 0xdb, 0x0e, 0x87, 0x60,
- 0x15, 0x62, 0x39, 0xe7, 0xfb, 0xef, 0xd6, 0x5f, 0xa2, 0xe1, 0x5c, 0xbd, 0x4e, 0x94, 0xec, 0xb4,
- 0xc9, 0xdf, 0xaf, 0x1f, 0xfc, 0x27, 0xde, 0x65, 0x34, 0x25, 0x7f, 0x97, 0xd1, 0x6f, 0x27, 0x5b,
- 0xb7, 0x23, 0x45, 0xf7, 0x09, 0x3c, 0x65, 0xdb, 0x29, 0xc1, 0x8a, 0x9e, 0x04, 0x77, 0x5f, 0x1f,
- 0xee, 0x64, 0x61, 0x04, 0x91, 0x11, 0xdd, 0xc9, 0x08, 0x81, 0xe3, 0x74, 0x27, 0x1b, 0xc6, 0xc0,
- 0x04, 0x6e, 0xb5, 0xcf, 0xb3, 0xdd, 0x7c, 0xd2, 0x6e, 0xd0, 0x1f, 0x67, 0x53, 0x1f, 0xa5, 0xbf,
- 0x96, 0x49, 0xe4, 0xff, 0x4c, 0xf8, 0x8a, 0x1f, 0xa6, 0x93, 0x78, 0x34, 0xc7, 0x91, 0x9b, 0xc0,
- 0xba, 0x51, 0x96, 0xf8, 0xa2, 0x5f, 0x32, 0x3a, 0xee, 0xee, 0x98, 0x4e, 0x74, 0x5c, 0xf3, 0x68,
- 0xf9, 0xd7, 0x23, 0x93, 0x17, 0xf4, 0x3f, 0x33, 0x89, 0x42, 0x48, 0x05, 0x22, 0x21, 0x6c, 0x45,
- 0x88, 0x38, 0x41, 0xe0, 0xa7, 0x58, 0x7a, 0x13, 0xd4, 0xe8, 0x8b, 0x46, 0x07, 0x5b, 0x8f, 0x41,
- 0x8d, 0x26, 0x7c, 0x8d, 0x4f, 0xa3, 0xe3, 0xc8, 0x7d, 0x9d, 0x6a, 0x74, 0x20, 0x92, 0x31, 0x69,
- 0x74, 0x2c, 0xbd, 0xf4, 0x65, 0xfc, 0x9a, 0x39, 0x36, 0x91, 0x5a, 0x37, 0xcc, 0x2b, 0xe8, 0x9f,
- 0x0a, 0xfe, 0xc5, 0xcc, 0x97, 0x0c, 0x77, 0x97, 0xc5, 0x82, 0xf9, 0xa0, 0xf4, 0xdd, 0x28, 0x23,
- 0xc4, 0x7b, 0x11, 0xc3, 0x49, 0xe5, 0x0f, 0x85, 0x93, 0x2a, 0xc1, 0xbc, 0x61, 0xba, 0xd8, 0x36,
- 0xf5, 0xee, 0x4a, 0x57, 0xdf, 0x71, 0xce, 0x4d, 0x0d, 0xbc, 0xbc, 0xae, 0xca, 0xe5, 0xd1, 0xc4,
- 0x3f, 0xf8, 0xeb, 0x2b, 0xa7, 0xc5, 0xeb, 0x2b, 0x23, 0xa2, 0x5f, 0xcd, 0x44, 0x47, 0xbf, 0x0a,
- 0xa2, 0x5b, 0xc1, 0xf0, 0xe0, 0xd8, 0xb2, 0xb6, 0x71, 0xc2, 0x70, 0x7f, 0x77, 0x49, 0x46, 0x61,
- 0x0b, 0x42, 0x3f, 0xfe, 0xa4, 0x92, 0x68, 0x75, 0xcf, 0x53, 0x84, 0xc5, 0x7e, 0x25, 0x48, 0x6c,
- 0xa1, 0xf2, 0x95, 0x57, 0xfa, 0x2a, 0x1f, 0x98, 0x3c, 0x39, 0x09, 0x93, 0x87, 0x57, 0xaa, 0xbc,
- 0x9c, 0x52, 0x25, 0x59, 0x2c, 0x94, 0xa9, 0xed, 0x04, 0x4e, 0x23, 0xe5, 0xe1, 0x94, 0x1f, 0xed,
- 0xb6, 0xd7, 0xc3, 0xba, 0xad, 0x9b, 0x6d, 0x8c, 0x3e, 0x96, 0x1d, 0x87, 0xd9, 0xbb, 0x02, 0xd3,
- 0x46, 0xdb, 0x32, 0x1b, 0xc6, 0x0b, 0xfc, 0xcb, 0xe5, 0xe2, 0x83, 0xac, 0x13, 0x89, 0x54, 0xd9,
- 0x1f, 0x5a, 0xf0, 0xaf, 0x5a, 0x85, 0x99, 0xb6, 0x6e, 0x77, 0x68, 0x10, 0xbe, 0x7c, 0xdf, 0x45,
- 0x4e, 0x91, 0x84, 0xca, 0xfe, 0x2f, 0x5a, 0xf8, 0xb7, 0x5a, 0x17, 0x85, 0x58, 0xe8, 0x8b, 0xe6,
- 0x11, 0x49, 0x6c, 0x39, 0xfc, 0x49, 0x90, 0xb9, 0x27, 0x1d, 0x1b, 0x77, 0xc9, 0x1d, 0xf4, 0xb4,
- 0x87, 0x98, 0xd1, 0xc2, 0x84, 0xa4, 0xcb, 0x03, 0xa4, 0xa8, 0x43, 0x68, 0x4c, 0x7a, 0x79, 0x40,
- 0x8a, 0x8b, 0xf4, 0x35, 0xf3, 0x9d, 0x05, 0x98, 0xa7, 0xbd, 0x1a, 0x13, 0x27, 0x7a, 0x19, 0xb9,
- 0x42, 0xda, 0x7d, 0x08, 0x1f, 0xa0, 0xc6, 0xd1, 0xc7, 0xe4, 0x22, 0x28, 0x57, 0x82, 0x80, 0x83,
- 0xde, 0x63, 0xd2, 0x7d, 0x7b, 0x9f, 0xaf, 0x45, 0xca, 0xd3, 0xa4, 0xf7, 0xed, 0xe3, 0x8b, 0x4f,
- 0x1f, 0x9f, 0x1f, 0x50, 0x40, 0x29, 0x75, 0x3a, 0xa8, 0x7d, 0x74, 0x28, 0x6e, 0x81, 0x59, 0xbf,
- 0xcd, 0x84, 0x31, 0x20, 0xf9, 0xa4, 0xa4, 0x8b, 0xa0, 0x81, 0x6c, 0x4a, 0x9d, 0x89, 0xef, 0x2a,
- 0xc4, 0x94, 0x9d, 0x3e, 0x28, 0x9f, 0x9d, 0x62, 0x8d, 0x66, 0xc9, 0xb2, 0xae, 0x90, 0xa3, 0x32,
- 0x3f, 0xa3, 0x40, 0x7e, 0x05, 0xbb, 0xed, 0x5d, 0xe4, 0x8c, 0xa5, 0xcd, 0xec, 0xdb, 0x5d, 0xbf,
- 0xcd, 0xec, 0xdb, 0xdd, 0x61, 0x41, 0x39, 0x93, 0x46, 0x7f, 0xf6, 0xd9, 0x5e, 0x24, 0x2c, 0x4f,
- 0x3a, 0xfa, 0x73, 0x6c, 0xe9, 0x13, 0x38, 0x04, 0x97, 0x83, 0x85, 0x60, 0x05, 0x8c, 0x62, 0xf6,
- 0x0b, 0x99, 0xc7, 0xdc, 0x7a, 0xe8, 0x10, 0xbb, 0x19, 0xfd, 0x7e, 0xb2, 0x10, 0x6b, 0x81, 0xcc,
- 0xc5, 0x9a, 0xa7, 0xbc, 0x30, 0x99, 0x20, 0xf8, 0x9a, 0x1c, 0x83, 0x13, 0x58, 0x01, 0x50, 0x60,
- 0x9a, 0x30, 0xb4, 0x6c, 0x5c, 0x25, 0xae, 0x87, 0xc2, 0x42, 0xe5, 0x0b, 0xc7, 0xb2, 0x50, 0x79,
- 0x9f, 0xb8, 0x50, 0x29, 0x19, 0x31, 0xd9, 0x5f, 0xa7, 0x4c, 0xe8, 0x8b, 0xe3, 0xfd, 0x3f, 0xf6,
- 0x65, 0xca, 0x04, 0xbe, 0x38, 0x43, 0xca, 0x9f, 0x80, 0xeb, 0xe1, 0xf3, 0x58, 0x67, 0xed, 0x6f,
- 0xc8, 0xa2, 0xff, 0x71, 0x0a, 0x72, 0x17, 0xbd, 0x87, 0x7f, 0x0c, 0x6f, 0xd4, 0x7a, 0xf5, 0x18,
- 0x82, 0x3b, 0x3c, 0x1b, 0x72, 0x1e, 0x7d, 0x36, 0xed, 0xb9, 0x43, 0x6e, 0x77, 0xd8, 0x63, 0x44,
- 0x23, 0xff, 0xa9, 0x67, 0xa1, 0xe0, 0x58, 0xfb, 0x76, 0xdb, 0x33, 0xbf, 0x3d, 0x8d, 0x61, 0x6f,
- 0x49, 0x83, 0x9a, 0x0a, 0xa4, 0x17, 0xc7, 0xe7, 0x72, 0xca, 0x5d, 0xb0, 0xa4, 0x08, 0x17, 0x2c,
- 0x25, 0xd8, 0x7f, 0x90, 0xe0, 0x2d, 0x7d, 0x8d, 0xf8, 0x63, 0x72, 0xd7, 0x60, 0x67, 0x5c, 0xb0,
- 0x47, 0x88, 0xe5, 0xa8, 0xea, 0x90, 0xd4, 0x61, 0x5c, 0x14, 0x6d, 0x10, 0x47, 0x7e, 0xa2, 0x0e,
- 0xe3, 0x12, 0x3c, 0x4c, 0xe4, 0x94, 0x7b, 0x81, 0x39, 0xb9, 0x3e, 0x3c, 0x4e, 0x74, 0x73, 0x82,
- 0xd2, 0x1f, 0x09, 0x9d, 0x31, 0x3a, 0xbf, 0x8e, 0x8c, 0xce, 0x31, 0xb9, 0xbf, 0xfe, 0x9a, 0x42,
- 0x22, 0x69, 0xfa, 0x46, 0x90, 0xfc, 0x45, 0x49, 0x89, 0x21, 0xf2, 0xc6, 0x60, 0x21, 0x8e, 0xf4,
- 0xfc, 0xe8, 0xa1, 0xc5, 0x45, 0xd1, 0x71, 0xfc, 0x4f, 0x3a, 0xb4, 0xb8, 0x2c, 0x23, 0xe9, 0x03,
- 0xf9, 0x53, 0xf4, 0x62, 0xb2, 0x52, 0xdb, 0x35, 0xae, 0x8e, 0xb9, 0xa5, 0x89, 0xc3, 0x4b, 0xc2,
- 0x68, 0xc2, 0x87, 0x24, 0x44, 0x39, 0x9c, 0x74, 0x34, 0x61, 0x39, 0x36, 0xd2, 0x87, 0xe9, 0x2f,
- 0x0a, 0x9e, 0xf4, 0xd8, 0xda, 0xce, 0x4f, 0xb3, 0xd5, 0x04, 0x7c, 0x74, 0xb4, 0x2e, 0xc0, 0x1c,
- 0xb7, 0x74, 0xe0, 0x5f, 0x78, 0x23, 0xa4, 0x25, 0x3d, 0x28, 0x1f, 0x88, 0x6c, 0xec, 0x0b, 0x0b,
- 0x09, 0x16, 0x8c, 0x65, 0x98, 0x98, 0xc8, 0x7d, 0x72, 0xfe, 0x18, 0x36, 0x21, 0xac, 0x3e, 0xc8,
- 0x63, 0x55, 0x17, 0xb1, 0xba, 0x47, 0x46, 0x4c, 0x72, 0x63, 0x9a, 0xd4, 0xbc, 0xf1, 0x1d, 0x01,
- 0x5c, 0x9a, 0x00, 0xd7, 0xb3, 0x47, 0xe6, 0x23, 0x7d, 0xc4, 0x7e, 0x8c, 0x76, 0x87, 0x0d, 0x6a,
- 0xb2, 0x8f, 0xa7, 0x3b, 0x64, 0xb3, 0x01, 0x45, 0x98, 0x0d, 0x24, 0xf4, 0xd7, 0x0f, 0xdd, 0x50,
- 0x7d, 0xe6, 0x86, 0x41, 0x94, 0x1b, 0xb3, 0xbf, 0xfe, 0x50, 0x0e, 0xd2, 0x07, 0xe7, 0xef, 0x15,
- 0x80, 0x55, 0xdb, 0xda, 0xef, 0xd5, 0xed, 0x0e, 0xb6, 0xd1, 0x9f, 0x86, 0x13, 0x80, 0x1f, 0x1c,
- 0xc3, 0x04, 0x60, 0x13, 0x60, 0x27, 0x20, 0xce, 0x34, 0xfc, 0x29, 0x72, 0xe6, 0x7e, 0xc8, 0x94,
- 0xc6, 0xd1, 0x10, 0xaf, 0xac, 0x7d, 0xae, 0x88, 0x71, 0x5c, 0x9f, 0x15, 0x92, 0x1b, 0xe7, 0x04,
- 0xe0, 0x5d, 0x01, 0xd6, 0x4d, 0x01, 0xeb, 0xe7, 0x1c, 0x81, 0x93, 0xf4, 0x31, 0xff, 0x87, 0x29,
- 0x98, 0xa5, 0xdb, 0x7d, 0x54, 0xa6, 0x7f, 0x1d, 0x82, 0xfe, 0xa3, 0x63, 0x00, 0x7d, 0x0b, 0xe6,
- 0xac, 0x90, 0x3a, 0xed, 0x53, 0xf9, 0x05, 0x98, 0x58, 0xd8, 0x39, 0xbe, 0x34, 0x81, 0x0c, 0xfa,
- 0x55, 0x1e, 0x79, 0x4d, 0x44, 0xfe, 0xbe, 0x18, 0x79, 0x73, 0x14, 0xc7, 0x09, 0xfd, 0xbb, 0x03,
- 0xe8, 0xb7, 0x04, 0xe8, 0x4b, 0x47, 0x61, 0x65, 0x02, 0xe1, 0xfa, 0x15, 0xc8, 0x91, 0xd3, 0x75,
- 0x3f, 0x9b, 0xe2, 0xfc, 0xfe, 0x1c, 0x4c, 0x91, 0x26, 0x1b, 0xcc, 0x3b, 0xfc, 0x57, 0xef, 0x8b,
- 0xbe, 0xed, 0x62, 0x3b, 0x58, 0xb9, 0xf5, 0x5f, 0x3d, 0x1e, 0x7c, 0xaf, 0x66, 0xe7, 0x5c, 0x81,
- 0x6e, 0x64, 0x06, 0x09, 0x23, 0x4f, 0x4a, 0x78, 0x89, 0x8f, 0xed, 0xbc, 0xdd, 0x28, 0x93, 0x92,
- 0x21, 0x8c, 0xa4, 0x0f, 0xfc, 0xe7, 0x72, 0x70, 0x8e, 0xae, 0x2a, 0xad, 0xd8, 0xd6, 0x5e, 0xdf,
- 0xed, 0x58, 0xc6, 0xd1, 0x75, 0xe1, 0x36, 0x58, 0x70, 0x05, 0x7f, 0x6e, 0xa6, 0x13, 0x7d, 0xa9,
- 0xe8, 0x77, 0x78, 0x9f, 0x8c, 0xe7, 0x89, 0x48, 0x2e, 0xc5, 0x08, 0x30, 0x8a, 0xf7, 0xc4, 0x0b,
- 0xf5, 0x92, 0x8c, 0x72, 0x8b, 0x54, 0xca, 0x48, 0x6b, 0x96, 0x81, 0x4e, 0xe5, 0x65, 0x74, 0xea,
- 0x03, 0x81, 0x4e, 0xfd, 0x17, 0x41, 0xa7, 0x56, 0x8f, 0x2e, 0x92, 0x09, 0xac, 0x5c, 0x2c, 0x40,
- 0x61, 0xc5, 0xe8, 0xba, 0xd8, 0x46, 0x5f, 0x60, 0xf3, 0xa8, 0xd7, 0xa5, 0xd8, 0xbd, 0x2c, 0x43,
- 0x61, 0x9b, 0x94, 0xc6, 0x0c, 0xb2, 0x3b, 0xe5, 0xb0, 0xa1, 0x1c, 0x6a, 0xec, 0xdf, 0xa4, 0xb1,
- 0xe3, 0xfa, 0xc8, 0x8c, 0x6d, 0x02, 0x96, 0x20, 0x76, 0xdc, 0x70, 0x16, 0x26, 0x72, 0x6d, 0x52,
- 0x41, 0xc3, 0x7b, 0xde, 0x08, 0x72, 0x25, 0x3d, 0x84, 0x8b, 0xa0, 0x18, 0x1d, 0x87, 0x34, 0xbd,
- 0x19, 0xcd, 0x7b, 0x4c, 0xea, 0xc9, 0xd2, 0x2f, 0x2a, 0xca, 0xf2, 0xa4, 0x3d, 0x59, 0xa4, 0xb8,
- 0x48, 0x1f, 0xb3, 0xaf, 0x11, 0x37, 0xc6, 0x5e, 0x57, 0x6f, 0x63, 0x8f, 0xfb, 0xd4, 0x50, 0x5b,
- 0x80, 0xac, 0xe1, 0x8f, 0xf8, 0x59, 0x83, 0x6f, 0xa7, 0xf9, 0x23, 0xb4, 0xd3, 0x51, 0x17, 0xb9,
- 0x02, 0x99, 0x93, 0x8a, 0x1f, 0xdb, 0x22, 0x57, 0x2c, 0x1b, 0x13, 0xb8, 0x14, 0xd3, 0x3f, 0xe6,
- 0x39, 0xd1, 0xd6, 0x3a, 0xea, 0x16, 0x00, 0x13, 0xd6, 0xd8, 0x8e, 0x74, 0x8e, 0xb2, 0x05, 0x10,
- 0xcd, 0xc3, 0x04, 0xd0, 0x5a, 0x60, 0x68, 0x7d, 0x86, 0x0d, 0xa3, 0x29, 0xef, 0xc2, 0x39, 0x96,
- 0xed, 0x26, 0xdb, 0x85, 0xf3, 0xb8, 0xd3, 0xc8, 0x7f, 0x49, 0x8f, 0x05, 0x89, 0xa7, 0x7e, 0xc7,
- 0x35, 0x7c, 0x26, 0x38, 0x16, 0x34, 0x8c, 0x81, 0xf4, 0xe1, 0x7d, 0xdb, 0x31, 0x0d, 0x9e, 0xa3,
- 0x36, 0x47, 0xd6, 0x06, 0xc6, 0x36, 0x74, 0x8e, 0xd2, 0x1c, 0xa3, 0x79, 0x48, 0x1f, 0xaf, 0xbf,
- 0xe3, 0x06, 0xce, 0xb7, 0x4c, 0x70, 0xe0, 0xf4, 0x5b, 0x66, 0x7e, 0xc4, 0x96, 0x39, 0xea, 0xee,
- 0x02, 0x93, 0xf5, 0xf8, 0x06, 0xcc, 0x51, 0x76, 0x17, 0x62, 0x98, 0x48, 0x1f, 0xf1, 0xb7, 0x2a,
- 0x90, 0x6f, 0x4c, 0x7e, 0xbc, 0x1c, 0x75, 0x2e, 0x42, 0x64, 0xd5, 0x18, 0xdb, 0x70, 0x39, 0xca,
- 0x5c, 0x24, 0x92, 0x85, 0x09, 0x84, 0x85, 0x3f, 0x09, 0x73, 0x64, 0xc2, 0xed, 0x6f, 0xe2, 0xfd,
- 0x1d, 0x1b, 0x35, 0xdf, 0x94, 0x62, 0x5b, 0x7d, 0x10, 0xa6, 0xfd, 0xdd, 0x21, 0x36, 0x72, 0x2e,
- 0xca, 0xb5, 0x4f, 0x9f, 0x4b, 0x2d, 0xf8, 0xff, 0x48, 0x5b, 0xed, 0x63, 0xdf, 0x09, 0x1c, 0x75,
- 0xab, 0xfd, 0x58, 0x77, 0x03, 0x7f, 0x3b, 0x1c, 0x51, 0xff, 0x6b, 0x7a, 0x98, 0xf7, 0xef, 0x12,
- 0xe6, 0x06, 0xec, 0x12, 0x7e, 0x8c, 0xc7, 0xb2, 0x21, 0x62, 0x79, 0xbf, 0xac, 0x08, 0xc7, 0x38,
- 0xd6, 0xbe, 0x27, 0x80, 0xf3, 0xa2, 0x00, 0xe7, 0xd2, 0x91, 0x78, 0x99, 0xc0, 0xb1, 0xbc, 0x5c,
- 0x38, 0xe6, 0x7e, 0x3c, 0xc5, 0x76, 0xdc, 0xe7, 0xf3, 0x9f, 0x3b, 0xe4, 0xf3, 0x2f, 0xb4, 0xf4,
- 0xfc, 0x11, 0x5b, 0xfa, 0xc7, 0x79, 0xed, 0x68, 0x8a, 0xda, 0xf1, 0x6c, 0x79, 0x44, 0xc6, 0x37,
- 0x32, 0xbf, 0x37, 0x50, 0x8f, 0x4b, 0x82, 0x7a, 0x94, 0x8f, 0xc6, 0x4c, 0xfa, 0xfa, 0xf1, 0xeb,
- 0xfe, 0x84, 0xf6, 0x98, 0xdb, 0xfb, 0xa8, 0x1b, 0x91, 0x82, 0x10, 0xc7, 0x36, 0x72, 0x8f, 0xb2,
- 0x11, 0x39, 0x8c, 0x93, 0x09, 0x44, 0x0a, 0x9b, 0x87, 0x59, 0xc2, 0xd3, 0x25, 0xa3, 0xb3, 0x83,
- 0x5d, 0xf4, 0x93, 0xd4, 0x03, 0xce, 0x8f, 0xcb, 0x38, 0xa6, 0xe0, 0x39, 0x51, 0xa7, 0x31, 0x93,
- 0xfa, 0x0b, 0x50, 0x26, 0x17, 0x39, 0x06, 0x27, 0x1d, 0xdf, 0x6f, 0x28, 0x07, 0xe9, 0x43, 0xf6,
- 0xab, 0xd4, 0x99, 0x63, 0x5d, 0x3f, 0xb0, 0xf6, 0x5d, 0xf4, 0xe2, 0x31, 0x74, 0xd0, 0x4b, 0x50,
- 0xe8, 0x12, 0x6a, 0xcc, 0xe9, 0x3f, 0x7e, 0xba, 0xc3, 0x44, 0x40, 0xcb, 0xd7, 0xd8, 0x9f, 0x49,
- 0x3d, 0xff, 0x43, 0x39, 0x52, 0x3a, 0x93, 0xf6, 0xfc, 0x1f, 0x52, 0xfe, 0x44, 0x6e, 0x80, 0x99,
- 0xf6, 0x4a, 0x37, 0xf6, 0x0c, 0x77, 0x4c, 0xf1, 0x05, 0xba, 0x1e, 0x2d, 0x3f, 0xbe, 0x00, 0x79,
- 0x49, 0x7a, 0x9e, 0x91, 0x93, 0x8a, 0xf7, 0xfb, 0xa4, 0xcf, 0x33, 0xc6, 0x17, 0x9f, 0x3e, 0x26,
- 0x3f, 0x4c, 0x5b, 0xd6, 0x45, 0xea, 0xda, 0x99, 0xa2, 0xd7, 0xe8, 0xc8, 0x8d, 0x85, 0xb2, 0x76,
- 0x7c, 0x8d, 0x65, 0x60, 0xf9, 0xe9, 0x03, 0xf3, 0x33, 0xdf, 0x08, 0xf9, 0x65, 0x7c, 0x79, 0x7f,
- 0x07, 0xdd, 0x07, 0xd3, 0x4d, 0x1b, 0xe3, 0xaa, 0xb9, 0x6d, 0x79, 0xd2, 0x75, 0xbd, 0x67, 0x1f,
- 0x12, 0xf6, 0xe6, 0xe1, 0xb1, 0x8b, 0xf5, 0x4e, 0x78, 0xba, 0xc9, 0x7f, 0x45, 0xaf, 0xce, 0x42,
- 0xae, 0xe1, 0xea, 0x2e, 0x9a, 0x09, 0xb0, 0x45, 0x2f, 0xe6, 0xb1, 0xb8, 0x4f, 0xc4, 0xe2, 0x36,
- 0x41, 0x16, 0x84, 0x83, 0x45, 0xef, 0xff, 0x08, 0x00, 0x10, 0x4c, 0x3f, 0xe2, 0x58, 0xa6, 0x97,
- 0xc3, 0x3f, 0x80, 0xe7, 0xbf, 0xa3, 0xd7, 0x06, 0xe2, 0x7e, 0x40, 0x10, 0xf7, 0x93, 0xe4, 0x8a,
- 0x98, 0xc0, 0x4a, 0x5b, 0x16, 0x66, 0x3c, 0xd1, 0xae, 0x61, 0xbd, 0xe3, 0xa0, 0x6f, 0x08, 0x95,
- 0x3f, 0x42, 0xcc, 0xe8, 0x43, 0xd2, 0xa1, 0x22, 0x69, 0xad, 0x02, 0xe2, 0xd1, 0xfe, 0x02, 0x7e,
- 0xa8, 0x8c, 0xac, 0x18, 0x2a, 0xe3, 0x2e, 0xc8, 0x19, 0xe6, 0xb6, 0xc5, 0xbc, 0xd7, 0x6e, 0x8c,
- 0xa0, 0xed, 0xe9, 0x84, 0x46, 0x32, 0x4a, 0xc6, 0x91, 0x8c, 0x67, 0x6b, 0x22, 0x57, 0xb2, 0xe5,
- 0xbc, 0xd2, 0xd1, 0xff, 0x31, 0x54, 0xd8, 0xaa, 0x0a, 0xb9, 0x9e, 0xee, 0xee, 0xb2, 0xa2, 0xc9,
- 0xb3, 0x67, 0x23, 0xef, 0x9b, 0xba, 0x69, 0x99, 0x07, 0x7b, 0xc6, 0x0b, 0x82, 0x9b, 0x5f, 0x85,
- 0x34, 0x8f, 0xf3, 0x1d, 0x6c, 0x62, 0x5b, 0x77, 0x71, 0xe3, 0xea, 0x0e, 0x99, 0x63, 0x4d, 0x6b,
- 0x7c, 0x52, 0x62, 0xfd, 0xf7, 0x38, 0x8e, 0xd6, 0xff, 0x6d, 0xa3, 0x8b, 0x49, 0x1c, 0x21, 0xa6,
- 0xff, 0xfe, 0x7b, 0x22, 0xfd, 0x1f, 0x50, 0x44, 0xfa, 0x68, 0xfc, 0x6b, 0x16, 0xe6, 0x1a, 0x9e,
- 0xc2, 0x35, 0xf6, 0xf7, 0xf6, 0x74, 0xfb, 0x00, 0x3d, 0x3e, 0x44, 0x85, 0x53, 0xcd, 0x8c, 0xa0,
- 0x9a, 0xe8, 0xd7, 0xa4, 0x2f, 0x3d, 0x66, 0x4d, 0x9b, 0x2b, 0x21, 0x71, 0x3b, 0x78, 0x2a, 0xe4,
- 0x3d, 0xf5, 0xf6, 0xfd, 0xf9, 0x62, 0x1b, 0x02, 0xcd, 0x29, 0x19, 0x6f, 0x69, 0x28, 0x6f, 0x13,
- 0x88, 0xf5, 0x90, 0x85, 0x93, 0x0d, 0x57, 0x6f, 0x5f, 0x59, 0xb5, 0x6c, 0x6b, 0xdf, 0x35, 0x4c,
- 0xec, 0xa0, 0xc7, 0x85, 0x08, 0xf8, 0xfa, 0x9f, 0x09, 0xf5, 0x1f, 0xfd, 0x7b, 0x46, 0x76, 0x14,
- 0x0d, 0xba, 0x55, 0x9e, 0x7c, 0x44, 0xf8, 0x24, 0xb9, 0x71, 0x51, 0x86, 0x62, 0xfa, 0x42, 0x7b,
- 0x8b, 0x02, 0xc5, 0xca, 0xa3, 0x3d, 0xcb, 0x76, 0xd7, 0xad, 0xb6, 0xde, 0x75, 0x5c, 0xcb, 0xc6,
- 0xa8, 0x1e, 0x2b, 0x35, 0xaf, 0x87, 0xe9, 0x58, 0xed, 0x70, 0x70, 0x64, 0x6f, 0xbc, 0xda, 0x29,
- 0xa2, 0x8e, 0xff, 0xaa, 0xf4, 0x2e, 0x23, 0x95, 0x4a, 0x3f, 0x47, 0x11, 0x7a, 0x3e, 0xa8, 0x4b,
- 0x4b, 0xe6, 0x8a, 0x2f, 0xb7, 0xf3, 0x28, 0xc5, 0xd4, 0x04, 0x96, 0xca, 0xb3, 0x30, 0xdf, 0xd8,
- 0xbf, 0x1c, 0x10, 0x71, 0x78, 0x23, 0xe4, 0xf5, 0xd2, 0x31, 0x12, 0x98, 0xe2, 0xf1, 0x84, 0x22,
- 0xe4, 0x7b, 0x2b, 0xcc, 0x3b, 0x7c, 0x36, 0x86, 0xb7, 0x98, 0x28, 0x19, 0x1b, 0x61, 0x78, 0xa9,
- 0xe9, 0x0b, 0xf0, 0xbd, 0x59, 0x98, 0xaf, 0xf7, 0xb0, 0x89, 0x3b, 0xd4, 0xc7, 0x4e, 0x10, 0xe0,
- 0xab, 0x13, 0x0a, 0x50, 0x20, 0x14, 0x21, 0xc0, 0xd0, 0x1f, 0x76, 0xd9, 0x17, 0x5e, 0x98, 0x90,
- 0x48, 0x70, 0x71, 0xa5, 0xa5, 0x2f, 0xb8, 0xcf, 0x67, 0x61, 0x56, 0xdb, 0x37, 0x37, 0x6d, 0xcb,
- 0x1b, 0x8d, 0x6d, 0x74, 0x7f, 0xd8, 0x41, 0xdc, 0x09, 0xa7, 0x3a, 0xfb, 0x36, 0x59, 0x7f, 0xaa,
- 0x9a, 0x0d, 0xdc, 0xb6, 0xcc, 0x8e, 0x43, 0xea, 0x91, 0xd7, 0x0e, 0x7f, 0xb8, 0x37, 0xf7, 0xd2,
- 0xbf, 0x54, 0x32, 0xe8, 0x65, 0xd2, 0x81, 0x58, 0x68, 0xe5, 0xb9, 0xa2, 0xe5, 0x7b, 0x02, 0xc9,
- 0x70, 0x2b, 0xc3, 0x4a, 0x48, 0x5f, 0xb8, 0x9f, 0xc9, 0x82, 0x5a, 0x6a, 0xb7, 0xad, 0x7d, 0xd3,
- 0x6d, 0xe0, 0x2e, 0x6e, 0xbb, 0x4d, 0x5b, 0x6f, 0x63, 0xde, 0x7e, 0x2e, 0x82, 0xd2, 0x31, 0x6c,
- 0xd6, 0x07, 0x7b, 0x8f, 0x4c, 0x8e, 0xaf, 0x96, 0xde, 0x71, 0xa4, 0xb5, 0x3c, 0x5c, 0x4a, 0x02,
- 0x71, 0xca, 0xed, 0x2b, 0x4a, 0x16, 0x94, 0xbe, 0x54, 0x3f, 0x9e, 0x85, 0x19, 0xbf, 0xc7, 0xde,
- 0x91, 0x11, 0xe6, 0x0f, 0x27, 0x9c, 0x8c, 0x04, 0xc4, 0x13, 0xc8, 0xf0, 0x9d, 0x09, 0x66, 0x15,
- 0x51, 0xf4, 0x93, 0x89, 0xae, 0x94, 0x5c, 0x74, 0xde, 0x6b, 0xad, 0xde, 0x5a, 0xa9, 0xaf, 0x2f,
- 0x57, 0xb4, 0xa2, 0x82, 0xbe, 0x90, 0x85, 0xdc, 0xa6, 0x61, 0xee, 0xf0, 0xf1, 0xb2, 0x4e, 0x7b,
- 0x76, 0x64, 0x07, 0x3f, 0xca, 0x5a, 0x3a, 0x7d, 0x51, 0xef, 0x86, 0xd3, 0xe6, 0xfe, 0xde, 0x65,
- 0x6c, 0xd7, 0xb7, 0xc9, 0x28, 0xeb, 0x34, 0xad, 0x06, 0x36, 0xa9, 0x11, 0x9a, 0xd7, 0x06, 0x7e,
- 0x13, 0x4d, 0x30, 0x89, 0xc9, 0x83, 0xc7, 0x49, 0x84, 0xc4, 0x03, 0xa6, 0xb2, 0x1c, 0x53, 0x89,
- 0xa6, 0x0d, 0x03, 0x88, 0xa7, 0xaf, 0xa9, 0xbf, 0x91, 0x87, 0x33, 0x25, 0xf3, 0x80, 0xd8, 0x14,
- 0xb4, 0x83, 0x2f, 0xef, 0xea, 0xe6, 0x0e, 0x26, 0x03, 0x44, 0x20, 0x71, 0x3e, 0x80, 0x7c, 0x46,
- 0x0c, 0x20, 0xaf, 0x6a, 0x30, 0x65, 0xd9, 0x1d, 0x6c, 0x2f, 0x1d, 0x10, 0x9e, 0xfa, 0x97, 0x9d,
- 0x59, 0x9b, 0x1c, 0x54, 0xc4, 0x22, 0x23, 0xbf, 0x58, 0xa7, 0xff, 0x6b, 0x3e, 0xa1, 0x0b, 0x77,
- 0xc2, 0x14, 0x4b, 0x53, 0xe7, 0x60, 0xba, 0xae, 0x2d, 0x57, 0xb4, 0x56, 0x75, 0xb9, 0x78, 0x42,
- 0xbd, 0x0e, 0x4e, 0x56, 0x9b, 0x15, 0xad, 0xd4, 0xac, 0xd6, 0x6b, 0x2d, 0x92, 0x5e, 0xcc, 0xa0,
- 0x97, 0xe4, 0x64, 0x3d, 0x7b, 0xe3, 0x99, 0x19, 0x04, 0xab, 0x06, 0x53, 0x6d, 0x9a, 0x81, 0x0c,
- 0xa1, 0xb3, 0x89, 0x6a, 0xc7, 0x08, 0xd2, 0x04, 0xcd, 0x27, 0xa4, 0x9e, 0x07, 0xb8, 0x66, 0x5b,
- 0xe6, 0x4e, 0x78, 0xa6, 0x6d, 0x5a, 0xe3, 0x52, 0xd0, 0x8b, 0x33, 0x50, 0xa0, 0xff, 0x90, 0x0b,
- 0x33, 0xc8, 0x53, 0x28, 0x78, 0xff, 0xdd, 0xb3, 0x78, 0x89, 0xbc, 0xc2, 0x89, 0x16, 0x7b, 0xf5,
- 0x74, 0x91, 0xca, 0x80, 0x5a, 0xc2, 0xac, 0x2a, 0x77, 0x41, 0x81, 0xfe, 0xcb, 0xbc, 0x0e, 0xa2,
- 0x83, 0x5f, 0xd2, 0x6c, 0x92, 0x7e, 0xca, 0xf2, 0x32, 0x4d, 0x5f, 0x9b, 0x3f, 0x9c, 0x85, 0xe9,
- 0x1a, 0x76, 0xcb, 0xbb, 0xb8, 0x7d, 0x05, 0x3d, 0x51, 0x5c, 0x00, 0xed, 0x1a, 0xd8, 0x74, 0x1f,
- 0xde, 0xeb, 0x06, 0x0b, 0xa0, 0x7e, 0x02, 0xfa, 0x6e, 0xbe, 0xf3, 0x7d, 0x8e, 0xa8, 0x3f, 0x77,
- 0x0c, 0xa8, 0xab, 0x5f, 0x42, 0x84, 0xca, 0x9c, 0x85, 0x82, 0x8d, 0x9d, 0xfd, 0xae, 0xbf, 0x88,
- 0xc6, 0xde, 0xd0, 0x1b, 0x02, 0x71, 0x96, 0x05, 0x71, 0xde, 0x25, 0x5f, 0xc4, 0x04, 0xa2, 0x69,
- 0xe6, 0x60, 0xaa, 0x6a, 0x1a, 0xae, 0xa1, 0x77, 0xd1, 0xcb, 0x72, 0x30, 0xdf, 0xc0, 0xee, 0xa6,
- 0x6e, 0xeb, 0x7b, 0xd8, 0xc5, 0xb6, 0x83, 0xbe, 0x2a, 0xf6, 0x09, 0xbd, 0xae, 0xee, 0x6e, 0x5b,
- 0xf6, 0x9e, 0xaf, 0x9a, 0xfe, 0xbb, 0xa7, 0x9a, 0x57, 0xb1, 0xed, 0x84, 0x7c, 0xf9, 0xaf, 0xde,
- 0x97, 0x6b, 0x96, 0x7d, 0xc5, 0x1b, 0x04, 0xd9, 0x34, 0x8d, 0xbd, 0x7a, 0xf4, 0xba, 0xd6, 0xce,
- 0x3a, 0xbe, 0x8a, 0xfd, 0x60, 0x5d, 0xc1, 0xbb, 0x37, 0x17, 0xe8, 0x58, 0x35, 0xcb, 0xf5, 0x3a,
- 0xed, 0x75, 0x6b, 0x87, 0x46, 0x33, 0x9d, 0xd6, 0xc4, 0xc4, 0x30, 0x97, 0x7e, 0x15, 0x93, 0x5c,
- 0x05, 0x3e, 0x17, 0x4b, 0x54, 0x17, 0x41, 0x0d, 0x7e, 0x6b, 0xe2, 0x2e, 0xde, 0xc3, 0xae, 0x7d,
- 0x40, 0x2e, 0x2d, 0x98, 0xd6, 0x06, 0x7c, 0x61, 0x03, 0xb4, 0xfc, 0x64, 0x9d, 0x49, 0x6f, 0x51,
- 0x90, 0xdc, 0x91, 0x26, 0xeb, 0x32, 0x14, 0x27, 0x72, 0x29, 0x93, 0xe2, 0x59, 0x33, 0x3f, 0xae,
- 0x40, 0x8e, 0x0c, 0x9e, 0x6f, 0xcd, 0x08, 0x2b, 0x4c, 0x7b, 0xd8, 0x71, 0xf4, 0x1d, 0xec, 0xaf,
- 0x30, 0xb1, 0x57, 0xf5, 0x1e, 0xc8, 0x77, 0x09, 0xa6, 0x74, 0x70, 0x78, 0xbc, 0x50, 0x33, 0xcf,
- 0xc0, 0xf0, 0x68, 0x05, 0x23, 0x01, 0x81, 0x5b, 0xa3, 0x7f, 0x5c, 0x78, 0x10, 0xf2, 0x14, 0xfe,
- 0x19, 0xc8, 0x2f, 0x57, 0x96, 0xb6, 0x56, 0x8b, 0x27, 0xbc, 0x47, 0x9f, 0xbf, 0x19, 0xc8, 0xaf,
- 0x94, 0x9a, 0xa5, 0xf5, 0x62, 0xd6, 0xab, 0x47, 0xb5, 0xb6, 0x52, 0x2f, 0x2a, 0x5e, 0xe2, 0x66,
- 0xa9, 0x56, 0x2d, 0x17, 0x73, 0xea, 0x2c, 0x4c, 0x5d, 0x2a, 0x69, 0xb5, 0x6a, 0x6d, 0xb5, 0x98,
- 0x47, 0x7f, 0xc1, 0xe3, 0x77, 0xaf, 0x88, 0xdf, 0xad, 0x51, 0x3c, 0x0d, 0x82, 0xec, 0x27, 0x02,
- 0xc8, 0xee, 0x17, 0x20, 0xfb, 0x46, 0x19, 0x22, 0x13, 0x70, 0x67, 0x2a, 0xc0, 0xd4, 0xa6, 0x6d,
- 0xb5, 0xb1, 0xe3, 0xa0, 0x1f, 0xc9, 0x42, 0xa1, 0xac, 0x9b, 0x6d, 0xdc, 0x45, 0x37, 0x84, 0x50,
- 0x51, 0x57, 0xd1, 0x8c, 0xef, 0x2a, 0x8a, 0xfe, 0x3e, 0x23, 0xdb, 0xfb, 0x31, 0xba, 0x8b, 0x94,
- 0x66, 0x84, 0x7c, 0xe4, 0x7a, 0xb9, 0x58, 0x52, 0x13, 0xb8, 0xb8, 0x25, 0x0b, 0x33, 0x6c, 0x35,
- 0xe0, 0x32, 0xe6, 0xe7, 0xe1, 0x5f, 0xcd, 0xc8, 0x4e, 0x0e, 0xfd, 0x1a, 0x04, 0x64, 0x22, 0xe4,
- 0x21, 0x37, 0x11, 0x1c, 0x46, 0x6d, 0x02, 0x9b, 0x87, 0x59, 0x98, 0xdd, 0x32, 0x9d, 0x41, 0x42,
- 0x91, 0x8f, 0xf2, 0xee, 0x57, 0x83, 0x23, 0x74, 0xa4, 0x28, 0xef, 0xc3, 0xe9, 0xa5, 0x2f, 0x98,
- 0xaf, 0x66, 0xe0, 0xf4, 0x2a, 0x36, 0xb1, 0x6d, 0xb4, 0x69, 0x0d, 0x7c, 0x49, 0xdc, 0x2f, 0x4a,
- 0xe2, 0x89, 0x02, 0xe7, 0x83, 0xfe, 0x10, 0x25, 0xf0, 0xba, 0x40, 0x02, 0xcf, 0x11, 0x24, 0x70,
- 0xa7, 0x24, 0x9d, 0x09, 0xdc, 0xd6, 0x3d, 0x03, 0x73, 0x35, 0xcb, 0x35, 0xb6, 0x8d, 0x36, 0xf5,
- 0x41, 0xfb, 0x31, 0x05, 0x72, 0xeb, 0x86, 0xe3, 0xa2, 0x52, 0xd8, 0x9d, 0xdc, 0x02, 0xb3, 0x86,
- 0xd9, 0xee, 0xee, 0x77, 0xb0, 0x86, 0x75, 0xda, 0xaf, 0x4c, 0x6b, 0x7c, 0x52, 0xb8, 0xb5, 0xef,
- 0xb1, 0xa5, 0xf8, 0x5b, 0xfb, 0xbf, 0x25, 0xbd, 0x0c, 0xc3, 0xb3, 0x40, 0xc2, 0x1d, 0x46, 0xd8,
- 0x5d, 0x25, 0x98, 0x37, 0xb9, 0xac, 0xbe, 0xc1, 0xde, 0x1f, 0xee, 0x9e, 0x27, 0xa7, 0x89, 0x7f,
- 0xa0, 0xf7, 0x4b, 0x35, 0xd6, 0x61, 0x0c, 0x25, 0x43, 0x66, 0x65, 0x84, 0x49, 0xb2, 0x0a, 0x0b,
- 0xd5, 0x5a, 0xb3, 0xa2, 0xd5, 0x4a, 0xeb, 0x2c, 0x8b, 0x82, 0xfe, 0x35, 0x0b, 0x79, 0x0d, 0xf7,
- 0xba, 0x07, 0x7c, 0x3c, 0x63, 0xe6, 0x28, 0x9e, 0x09, 0x1c, 0xc5, 0xd5, 0x15, 0x00, 0xbd, 0xed,
- 0x15, 0x4c, 0x2e, 0x7c, 0xca, 0x0e, 0x8c, 0x92, 0x29, 0x54, 0xb0, 0x14, 0xe4, 0xd6, 0xb8, 0x3f,
- 0xd1, 0xcb, 0xa5, 0x77, 0x8e, 0x04, 0x6a, 0x84, 0xc3, 0x88, 0x3e, 0xe1, 0x03, 0x52, 0x9b, 0x3d,
- 0x43, 0xc9, 0x1d, 0x8f, 0xf8, 0xbf, 0x98, 0x85, 0x5c, 0xd3, 0xeb, 0x2d, 0xb9, 0x8e, 0xf3, 0x53,
- 0xa3, 0xe9, 0xb8, 0x47, 0x26, 0x42, 0xc7, 0x1f, 0x80, 0x39, 0x5e, 0x63, 0x99, 0xab, 0x44, 0xac,
- 0x8a, 0x0b, 0x3f, 0x8c, 0xa2, 0xe1, 0x03, 0xd8, 0x39, 0x1e, 0x11, 0x7f, 0xe2, 0x49, 0x00, 0x1b,
- 0x78, 0xef, 0x32, 0xb6, 0x9d, 0x5d, 0xa3, 0x87, 0xfe, 0x4a, 0x81, 0x99, 0x55, 0xec, 0x36, 0x5c,
- 0xdd, 0xdd, 0x77, 0xfa, 0xb6, 0x3b, 0x4d, 0xab, 0xac, 0xb7, 0x77, 0x31, 0xeb, 0x8e, 0xfc, 0x57,
- 0xf4, 0x6e, 0x45, 0xd6, 0x9f, 0x28, 0x2c, 0x67, 0x31, 0x28, 0x23, 0x02, 0x93, 0x27, 0x43, 0xae,
- 0xa3, 0xbb, 0x3a, 0xc3, 0xe2, 0x86, 0x3e, 0x2c, 0x42, 0x42, 0x1a, 0xc9, 0x86, 0x7e, 0x21, 0x2b,
- 0xe3, 0x50, 0x24, 0x51, 0x7e, 0x32, 0x10, 0xde, 0x9f, 0x19, 0x01, 0x85, 0x53, 0x30, 0x5f, 0xab,
- 0x37, 0x5b, 0xeb, 0xf5, 0xd5, 0xd5, 0x8a, 0x97, 0x5a, 0x54, 0xd4, 0xb3, 0xa0, 0x6e, 0x96, 0x1e,
- 0xde, 0xa8, 0xd4, 0x9a, 0xad, 0x5a, 0x7d, 0xb9, 0xc2, 0xfe, 0xcc, 0xa9, 0x27, 0x61, 0xb6, 0x5c,
- 0x2a, 0xaf, 0xf9, 0x09, 0x79, 0xf5, 0x1c, 0x9c, 0xde, 0xa8, 0x6c, 0x2c, 0x55, 0xb4, 0xc6, 0x5a,
- 0x75, 0xb3, 0xe5, 0x91, 0x59, 0xa9, 0x6f, 0xd5, 0x96, 0x8b, 0x05, 0x15, 0xc1, 0x59, 0xee, 0xcb,
- 0x25, 0xad, 0x5e, 0x5b, 0x6d, 0x35, 0x9a, 0xa5, 0x66, 0xa5, 0x38, 0xa5, 0x5e, 0x07, 0x27, 0xcb,
- 0xa5, 0x1a, 0xc9, 0x5e, 0xae, 0xd7, 0x6a, 0x95, 0x72, 0xb3, 0x38, 0x8d, 0xfe, 0x3d, 0x07, 0xb3,
- 0x55, 0xa7, 0xa6, 0xef, 0xe1, 0x8b, 0x7a, 0xd7, 0xe8, 0xa0, 0x97, 0x71, 0x33, 0x8f, 0x5b, 0x61,
- 0xde, 0xa6, 0x8f, 0xb8, 0xd3, 0x34, 0x30, 0x45, 0x73, 0x5e, 0x13, 0x13, 0xbd, 0x39, 0xb9, 0x49,
- 0x08, 0xf8, 0x73, 0x72, 0xfa, 0xa6, 0x2e, 0x01, 0xd0, 0xa7, 0x66, 0x78, 0xf5, 0xe8, 0x85, 0xfe,
- 0xd6, 0xa4, 0xef, 0x61, 0x07, 0xdb, 0x57, 0x8d, 0x36, 0xf6, 0x73, 0x6a, 0xdc, 0x5f, 0xe8, 0x4b,
- 0x8a, 0xec, 0xfe, 0x22, 0x07, 0x2a, 0x57, 0x9d, 0x88, 0xde, 0xf0, 0x7b, 0x14, 0x99, 0xdd, 0x41,
- 0x29, 0x92, 0xc9, 0x34, 0xe5, 0x95, 0xd9, 0xd1, 0x96, 0x6d, 0x9b, 0xf5, 0x7a, 0xab, 0xb1, 0x56,
- 0xd7, 0x9a, 0x45, 0x45, 0x9d, 0x83, 0x69, 0xef, 0x75, 0xbd, 0x5e, 0x5b, 0x2d, 0xe6, 0xd4, 0x33,
- 0x70, 0x6a, 0xad, 0xd4, 0x68, 0x55, 0x6b, 0x17, 0x4b, 0xeb, 0xd5, 0xe5, 0x56, 0x79, 0xad, 0xa4,
- 0x35, 0x8a, 0x79, 0xf5, 0x06, 0x38, 0xd3, 0xac, 0x56, 0xb4, 0xd6, 0x4a, 0xa5, 0xd4, 0xdc, 0xd2,
- 0x2a, 0x8d, 0x56, 0xad, 0xde, 0xaa, 0x95, 0x36, 0x2a, 0xc5, 0x82, 0xd7, 0xfc, 0xc9, 0xa7, 0x50,
- 0x6d, 0xa6, 0x0e, 0x2b, 0xe3, 0x74, 0x84, 0x32, 0xce, 0xf4, 0x2b, 0x23, 0xf0, 0x6a, 0xa5, 0x55,
- 0x1a, 0x15, 0xed, 0x62, 0xa5, 0x38, 0x3b, 0x48, 0xd7, 0xe6, 0xd4, 0xd3, 0x50, 0xf4, 0x78, 0x68,
- 0x55, 0x1b, 0x7e, 0xce, 0xe5, 0xe2, 0x3c, 0xfa, 0x78, 0x01, 0xce, 0x6a, 0x78, 0xc7, 0x70, 0x5c,
- 0x6c, 0x6f, 0xea, 0x07, 0x7b, 0xd8, 0x74, 0xfd, 0x4e, 0xfe, 0x9f, 0x13, 0x2b, 0xe3, 0x06, 0xcc,
- 0xf7, 0x28, 0x8d, 0x0d, 0xec, 0xee, 0x5a, 0x1d, 0x36, 0x0a, 0x3f, 0x31, 0xb2, 0xe7, 0x58, 0xdc,
- 0xe4, 0xb3, 0x6b, 0xe2, 0xdf, 0x9c, 0x6e, 0x2b, 0x31, 0xba, 0x9d, 0x1b, 0x45, 0xb7, 0xd5, 0x9b,
- 0x60, 0x66, 0xdf, 0xc1, 0x76, 0x65, 0x4f, 0x37, 0xba, 0xfe, 0xd5, 0x91, 0x41, 0x02, 0x7a, 0x47,
- 0x4e, 0xf6, 0xc4, 0x0a, 0x57, 0x97, 0xc1, 0x62, 0x8c, 0xe8, 0x5b, 0xcf, 0x03, 0xb0, 0xca, 0x6e,
- 0xd9, 0x5d, 0xa6, 0xac, 0x5c, 0x8a, 0xc7, 0xdf, 0x65, 0xa3, 0xdb, 0x35, 0xcc, 0x9d, 0x60, 0xdf,
- 0x3f, 0x4c, 0x40, 0xaf, 0x54, 0x64, 0x4e, 0xb0, 0x24, 0xe5, 0x2d, 0x59, 0x6b, 0x7a, 0x79, 0x76,
- 0xc2, 0xfd, 0xee, 0xe1, 0xa6, 0x53, 0x50, 0x8b, 0x30, 0x47, 0xd2, 0x58, 0x0b, 0x2c, 0x4e, 0x79,
- 0x7d, 0xb0, 0x4f, 0x6e, 0xa3, 0xd2, 0x5c, 0xab, 0x2f, 0x07, 0xdf, 0xa6, 0x3d, 0x92, 0x1e, 0x33,
- 0xa5, 0xda, 0xc3, 0xa4, 0x35, 0xce, 0xa8, 0x8f, 0x83, 0x1b, 0xb8, 0x0e, 0xbb, 0xb4, 0xae, 0x55,
- 0x4a, 0xcb, 0x0f, 0xb7, 0x2a, 0xcf, 0xab, 0x36, 0x9a, 0x0d, 0xb1, 0x71, 0xf9, 0xed, 0x68, 0xd6,
- 0xe3, 0xb7, 0xb2, 0x51, 0xaa, 0xae, 0xb3, 0xfe, 0x7d, 0xa5, 0xae, 0x6d, 0x94, 0x9a, 0xc5, 0x39,
- 0xf4, 0xe3, 0x0a, 0x14, 0x57, 0xb1, 0xbb, 0x69, 0xd9, 0xae, 0xde, 0x5d, 0x37, 0xcc, 0x2b, 0x5b,
- 0x76, 0x57, 0x98, 0x6c, 0x4a, 0x87, 0xe9, 0x10, 0x87, 0x48, 0x81, 0x60, 0xf4, 0x8e, 0x78, 0x8f,
- 0x64, 0x0b, 0x95, 0x29, 0x4c, 0x40, 0x2f, 0xcc, 0xca, 0x2c, 0x77, 0xcb, 0x97, 0x9a, 0x4c, 0x4f,
- 0x5e, 0x34, 0xe9, 0xf1, 0x79, 0x00, 0x6a, 0x05, 0xf4, 0xd2, 0x1c, 0x4c, 0xaf, 0x18, 0xa6, 0xde,
- 0x35, 0x5e, 0x20, 0x44, 0xc7, 0x0c, 0xfb, 0x98, 0x4c, 0x4c, 0x1f, 0x93, 0x1d, 0x69, 0xfc, 0xfc,
- 0x21, 0x45, 0x76, 0x79, 0x81, 0x93, 0xbd, 0xcf, 0x64, 0xc4, 0xe0, 0xf9, 0x91, 0xac, 0xcc, 0xf2,
- 0xc2, 0x70, 0x7a, 0xc9, 0x30, 0xfc, 0xe4, 0x7f, 0x0c, 0x1b, 0xab, 0xaf, 0x7d, 0x4f, 0x0f, 0x52,
- 0x85, 0x19, 0xf4, 0x7b, 0x0a, 0xa0, 0x55, 0xec, 0x5e, 0xc4, 0x76, 0x30, 0x15, 0x20, 0xbd, 0x3e,
- 0xb3, 0xb7, 0xb9, 0x26, 0xfb, 0x56, 0x1e, 0xc0, 0x4b, 0x22, 0x80, 0xa5, 0x98, 0xc6, 0x13, 0x41,
- 0x3a, 0xa2, 0xf1, 0x56, 0xa1, 0xe0, 0x90, 0xef, 0x4c, 0xcd, 0x9e, 0x1a, 0x3d, 0x5c, 0x12, 0x62,
- 0x3c, 0x75, 0x4a, 0x58, 0x63, 0x04, 0xd0, 0xd7, 0x82, 0x49, 0xd0, 0xb7, 0x08, 0xda, 0xb1, 0x72,
- 0x64, 0x66, 0x93, 0xe9, 0x8b, 0x9d, 0xae, 0xba, 0x0c, 0xb2, 0x6f, 0xd0, 0x47, 0xf2, 0x70, 0x7a,
- 0x50, 0x75, 0xd0, 0x2f, 0x66, 0x84, 0x1d, 0x76, 0x4c, 0x86, 0xfc, 0x0c, 0xdb, 0x40, 0xf4, 0x5e,
- 0xd4, 0xa7, 0xc3, 0x99, 0x60, 0x19, 0xae, 0x69, 0xd5, 0xf0, 0x35, 0xa7, 0x8b, 0x5d, 0x17, 0xdb,
- 0xa4, 0x6a, 0xd3, 0xda, 0xe0, 0x8f, 0xea, 0x33, 0xe1, 0x7a, 0xc3, 0x74, 0x8c, 0x0e, 0xb6, 0x9b,
- 0x46, 0xcf, 0x29, 0x99, 0x9d, 0xe6, 0xbe, 0x6b, 0xd9, 0x86, 0xce, 0x2e, 0x3a, 0x9c, 0xd6, 0xa2,
- 0x3e, 0xab, 0x77, 0x40, 0xd1, 0x70, 0xea, 0xe6, 0x65, 0x4b, 0xb7, 0x3b, 0x86, 0xb9, 0xb3, 0x6e,
- 0x38, 0x2e, 0xf3, 0x00, 0x3e, 0x94, 0x8e, 0xfe, 0x5a, 0x91, 0x3d, 0x4c, 0x37, 0x04, 0xd6, 0x88,
- 0x0e, 0xe5, 0xbb, 0x15, 0x99, 0xe3, 0x71, 0xc9, 0x68, 0x27, 0x53, 0x96, 0x97, 0x4c, 0xda, 0x90,
- 0x18, 0x3c, 0x82, 0x93, 0xae, 0x85, 0xa6, 0xfb, 0x86, 0xc0, 0xc5, 0x8a, 0x56, 0x5d, 0xa9, 0x56,
- 0x3c, 0xb3, 0xe2, 0x0c, 0x9c, 0x0a, 0xbf, 0x2d, 0x3f, 0xdc, 0x6a, 0x54, 0x6a, 0xcd, 0xe2, 0xb4,
- 0xd7, 0x4f, 0xd1, 0xe4, 0x95, 0x52, 0x75, 0xbd, 0xb2, 0xdc, 0x6a, 0xd6, 0xbd, 0x2f, 0xcb, 0xa3,
- 0x99, 0x16, 0xe8, 0xc5, 0x39, 0x38, 0x49, 0x64, 0x7b, 0x40, 0xa4, 0xea, 0x09, 0xa5, 0xcf, 0xd7,
- 0x36, 0x00, 0x68, 0x86, 0x8a, 0x17, 0xfd, 0xae, 0xf4, 0x3d, 0x8e, 0x1c, 0x84, 0x7d, 0x65, 0x44,
- 0x68, 0xc6, 0x57, 0xb3, 0x32, 0x11, 0x2a, 0xa4, 0xc9, 0x26, 0x53, 0x8a, 0x7f, 0x99, 0xf4, 0x88,
- 0x13, 0x0d, 0x3e, 0xb1, 0x32, 0xcb, 0xe4, 0xe7, 0xe7, 0x6d, 0x56, 0x35, 0xa2, 0x0e, 0x0b, 0x00,
- 0x24, 0x85, 0x68, 0x10, 0xd5, 0x83, 0x81, 0xe3, 0x55, 0x94, 0x1e, 0x94, 0xca, 0xcd, 0xea, 0xc5,
- 0x4a, 0x94, 0x1e, 0x7c, 0x5a, 0x81, 0xe9, 0x55, 0xec, 0x7a, 0x73, 0x2a, 0x07, 0x3d, 0x4b, 0x62,
- 0xfd, 0xc7, 0x33, 0x63, 0xc8, 0xc5, 0xf7, 0xc1, 0x32, 0x00, 0x7d, 0x43, 0xdf, 0x35, 0x8a, 0x09,
- 0xe2, 0x17, 0x1d, 0x31, 0x5e, 0x7d, 0x33, 0xe4, 0x5d, 0xef, 0x33, 0x5b, 0x86, 0xfe, 0x86, 0xc8,
- 0xe1, 0xca, 0x23, 0xb2, 0xac, 0xbb, 0xba, 0x46, 0xf3, 0x73, 0xa3, 0x93, 0xa4, 0xed, 0x12, 0xc1,
- 0xc8, 0x7f, 0x44, 0xfb, 0xf3, 0x2f, 0x14, 0x38, 0x43, 0xdb, 0x47, 0xa9, 0xd7, 0x6b, 0xb8, 0x96,
- 0x8d, 0x35, 0xdc, 0xc6, 0x46, 0xcf, 0xed, 0x5b, 0xdf, 0xb3, 0x69, 0xaa, 0xbf, 0xd9, 0xcc, 0x5e,
- 0xd1, 0x4f, 0x2b, 0xb2, 0x11, 0x7e, 0x0f, 0xb5, 0xc7, 0xbe, 0xf2, 0x22, 0x1a, 0xfb, 0xc7, 0xb2,
- 0x32, 0x31, 0x7b, 0x13, 0x12, 0x4f, 0x06, 0xd4, 0xaf, 0x1c, 0x03, 0x50, 0xfe, 0xca, 0x8d, 0x56,
- 0x29, 0x57, 0xaa, 0x9b, 0xde, 0x20, 0x70, 0x33, 0xdc, 0xb8, 0xb9, 0xa5, 0x95, 0xd7, 0x4a, 0x8d,
- 0x4a, 0x4b, 0xab, 0xac, 0x56, 0x1b, 0x4d, 0xe6, 0x94, 0x45, 0xff, 0x9a, 0x52, 0x6f, 0x82, 0x73,
- 0x8d, 0xad, 0xa5, 0x46, 0x59, 0xab, 0x6e, 0x92, 0x74, 0xad, 0x52, 0xab, 0x5c, 0x62, 0x5f, 0xa7,
- 0xd1, 0x87, 0x8a, 0x30, 0xeb, 0x4d, 0x00, 0x1a, 0x74, 0x5e, 0x80, 0xfe, 0x36, 0x07, 0xb3, 0x1a,
- 0x76, 0xac, 0xee, 0x55, 0x32, 0x47, 0x98, 0xd4, 0xd4, 0xe3, 0x2b, 0x8a, 0xec, 0xf9, 0x6d, 0x8e,
- 0xd9, 0x45, 0x8e, 0xd1, 0xe8, 0x89, 0xa6, 0x7e, 0x55, 0x37, 0xba, 0xfa, 0x65, 0xd6, 0xd5, 0x4c,
- 0x6b, 0x61, 0x82, 0xba, 0x08, 0xaa, 0x75, 0xcd, 0xc4, 0x76, 0xa3, 0x7d, 0xad, 0xe2, 0xee, 0x96,
- 0x3a, 0x1d, 0x1b, 0x3b, 0x0e, 0x5b, 0xbd, 0x18, 0xf0, 0x45, 0xbd, 0x1d, 0x4e, 0x92, 0x54, 0x2e,
- 0x33, 0x75, 0x90, 0xe9, 0x4f, 0x0e, 0x72, 0x96, 0xcc, 0x03, 0x3f, 0x67, 0x9e, 0xcb, 0x19, 0x26,
- 0xf3, 0xc7, 0x25, 0x0a, 0xe2, 0x29, 0x9d, 0x5b, 0x60, 0xd6, 0xd4, 0xf7, 0x70, 0xe5, 0xd1, 0x9e,
- 0x61, 0x63, 0x87, 0x38, 0xc6, 0x28, 0x1a, 0x9f, 0x84, 0x3e, 0x22, 0x75, 0xde, 0x5c, 0x4e, 0x62,
- 0xc9, 0x74, 0x7f, 0x75, 0x04, 0xd5, 0x1f, 0xd0, 0xcf, 0x28, 0xe8, 0x43, 0x0a, 0xcc, 0x31, 0xa6,
- 0x4a, 0xe6, 0x41, 0xb5, 0x83, 0x6e, 0x16, 0x8c, 0x5f, 0xdd, 0x4b, 0xf3, 0x8d, 0x5f, 0xf2, 0x82,
- 0xbe, 0x57, 0x91, 0x75, 0x77, 0x1e, 0x50, 0x71, 0x52, 0x46, 0xb4, 0xe3, 0xe8, 0xb6, 0xb5, 0xcf,
- 0x1c, 0x55, 0xa7, 0x35, 0xfa, 0x92, 0xe6, 0xa2, 0x1e, 0xfa, 0x65, 0x29, 0x67, 0x6a, 0xc9, 0x6a,
- 0x1c, 0x13, 0x80, 0x9f, 0x50, 0x60, 0x81, 0x71, 0xd5, 0x60, 0xe7, 0x7c, 0xa4, 0x0e, 0xbc, 0x7d,
- 0xbf, 0xb4, 0x21, 0x38, 0xa0, 0xfe, 0xac, 0xa4, 0xc7, 0x0c, 0x90, 0xbf, 0x2a, 0x15, 0x1c, 0x4d,
- 0xba, 0x22, 0xc7, 0x04, 0xe5, 0x3b, 0x73, 0x30, 0xbb, 0xe5, 0x60, 0x9b, 0xf9, 0xed, 0xa3, 0x37,
- 0xe4, 0x40, 0x59, 0xc5, 0xc2, 0x46, 0xea, 0x2b, 0xa4, 0x3d, 0x7c, 0xf9, 0xca, 0x72, 0x44, 0x3d,
- 0x1b, 0x29, 0x02, 0xb6, 0xdb, 0x60, 0x81, 0x8a, 0xb4, 0xe4, 0xba, 0x9e, 0x91, 0xe8, 0x7b, 0xd3,
- 0xf6, 0xa5, 0x8e, 0x63, 0xab, 0x88, 0x94, 0xe5, 0x65, 0x29, 0x7b, 0x3c, 0xad, 0xe3, 0x6d, 0x3a,
- 0x9f, 0xcd, 0x69, 0x7d, 0xa9, 0xe4, 0x72, 0xfd, 0x1e, 0xa6, 0xe7, 0x57, 0xb8, 0xcc, 0x79, 0x92,
- 0x79, 0xd0, 0x27, 0xf4, 0xb7, 0x52, 0xbe, 0xba, 0xf2, 0xd2, 0x49, 0xa6, 0x0b, 0xbd, 0xf1, 0x98,
- 0x24, 0xa7, 0xa1, 0xe8, 0xe5, 0x20, 0xfb, 0x2f, 0x5a, 0xa5, 0x51, 0x5f, 0xbf, 0x58, 0x19, 0xbc,
- 0x8c, 0x91, 0x47, 0x2f, 0x51, 0x60, 0x66, 0xc9, 0xb6, 0xf4, 0x4e, 0x5b, 0x77, 0x5c, 0xf4, 0xb5,
- 0x2c, 0xcc, 0x6d, 0xea, 0x07, 0x5d, 0x4b, 0xef, 0x10, 0xff, 0xfe, 0xbe, 0xbe, 0xa0, 0x47, 0x3f,
- 0xf9, 0x7d, 0x01, 0x7b, 0x15, 0x0f, 0x06, 0x06, 0x47, 0xf7, 0x32, 0x32, 0xd7, 0x35, 0x06, 0xdb,
- 0x7c, 0xd9, 0x41, 0xc1, 0x4a, 0x7d, 0xbe, 0x16, 0x79, 0x9e, 0x22, 0x2c, 0xca, 0x0f, 0xc9, 0x85,
- 0x1f, 0x95, 0x21, 0x79, 0x3c, 0xbb, 0xf2, 0x2f, 0x9d, 0x86, 0xc2, 0x32, 0x26, 0x56, 0xdc, 0x7f,
- 0xcf, 0xc2, 0x54, 0x03, 0xbb, 0xc4, 0x82, 0xbb, 0x47, 0xf0, 0x14, 0xee, 0x90, 0x0c, 0xa1, 0x13,
- 0xbb, 0xff, 0xee, 0x4d, 0xd6, 0xb9, 0xf3, 0xd6, 0xe4, 0x39, 0x81, 0x47, 0x22, 0x2d, 0x77, 0x91,
- 0x95, 0x79, 0x24, 0x8f, 0xc4, 0x58, 0x52, 0xe9, 0xfb, 0x5a, 0xbd, 0x3b, 0xcb, 0x5c, 0xab, 0xb8,
- 0x5e, 0xef, 0x27, 0x79, 0xfd, 0x8c, 0xf5, 0x36, 0x63, 0xcc, 0xc7, 0x38, 0x47, 0x3d, 0x0d, 0xa6,
- 0xa8, 0xcc, 0xfd, 0xf9, 0x68, 0xbf, 0x9f, 0x02, 0x25, 0x41, 0xce, 0x5e, 0xfb, 0x39, 0x25, 0x5d,
- 0xd4, 0xa2, 0x0b, 0x9f, 0x48, 0x0c, 0x82, 0xb9, 0x1a, 0x76, 0xaf, 0x59, 0xf6, 0x95, 0x86, 0xab,
- 0xbb, 0x18, 0xfd, 0x4b, 0x16, 0x94, 0x06, 0x76, 0xf9, 0xe8, 0x27, 0x35, 0x38, 0x45, 0x2b, 0xc4,
- 0x32, 0x92, 0xfe, 0x9b, 0x56, 0xe4, 0x96, 0x81, 0x42, 0xe0, 0xf2, 0x69, 0x87, 0x7f, 0x45, 0x3f,
- 0x32, 0x30, 0xe8, 0x53, 0x76, 0xc0, 0xa4, 0x81, 0x49, 0x86, 0x67, 0xd0, 0x53, 0xb0, 0x08, 0x3d,
- 0xfd, 0xb0, 0x94, 0x59, 0x2d, 0x47, 0xf3, 0x78, 0xba, 0x82, 0x77, 0x3e, 0x01, 0x72, 0xe5, 0x5d,
- 0xdd, 0x45, 0xef, 0x52, 0x00, 0x4a, 0x9d, 0xce, 0x06, 0xf5, 0x01, 0xe7, 0x1d, 0xd2, 0x2e, 0xc0,
- 0x5c, 0x7b, 0x57, 0x0f, 0x6f, 0xce, 0xa0, 0xfd, 0x81, 0x90, 0xa6, 0x3e, 0x3d, 0x74, 0x26, 0xa7,
- 0x52, 0x45, 0x7d, 0x30, 0x79, 0x65, 0x30, 0xda, 0x81, 0xa3, 0xb9, 0x18, 0x0a, 0x33, 0xf6, 0x08,
- 0x9d, 0xf7, 0xfb, 0x62, 0xc8, 0x5e, 0xf4, 0x1c, 0x8e, 0x91, 0x0e, 0x0e, 0xd8, 0x84, 0x09, 0x09,
- 0x4f, 0x7a, 0xcb, 0x05, 0xf4, 0x88, 0xe7, 0x6b, 0x22, 0xa1, 0x6b, 0xd5, 0x4a, 0xc7, 0xf0, 0x45,
- 0xcb, 0x02, 0x66, 0xa1, 0x97, 0x67, 0x92, 0xc1, 0x17, 0x2f, 0xb8, 0xe7, 0xc0, 0x3c, 0xee, 0x18,
- 0x2e, 0xf6, 0x6b, 0xc9, 0x04, 0x18, 0x07, 0xb1, 0xf8, 0x03, 0x7a, 0x91, 0x74, 0xd0, 0x35, 0x22,
- 0xd0, 0xc3, 0x35, 0x8a, 0x68, 0x7f, 0x72, 0x61, 0xd4, 0xe4, 0x68, 0xa6, 0x0f, 0xd6, 0x77, 0x29,
- 0x70, 0xa6, 0x69, 0xed, 0xec, 0x74, 0xb1, 0x2f, 0x26, 0x4c, 0xbd, 0x33, 0x91, 0x3e, 0x4e, 0xb8,
- 0xc8, 0x4e, 0x90, 0xf5, 0x88, 0x11, 0x1c, 0x25, 0xf3, 0x5e, 0xc4, 0x13, 0x53, 0xb1, 0xb3, 0x28,
- 0x22, 0xae, 0x81, 0x7c, 0x46, 0xa0, 0x20, 0x17, 0xf0, 0x59, 0x9a, 0x6c, 0xfa, 0x40, 0x7c, 0x36,
- 0x0b, 0xf3, 0xf4, 0x5e, 0x44, 0x5f, 0x41, 0x1f, 0x1a, 0x23, 0x00, 0xe8, 0x6b, 0x19, 0x59, 0x3f,
- 0x5b, 0x22, 0x13, 0x81, 0x93, 0x08, 0x11, 0xcb, 0x05, 0x55, 0x19, 0x4a, 0x6e, 0x02, 0x37, 0x75,
- 0xe6, 0x60, 0x76, 0x15, 0xfb, 0x2d, 0xcd, 0x41, 0xef, 0x4b, 0xd8, 0x13, 0x5d, 0x80, 0x39, 0x72,
- 0x39, 0x58, 0x9d, 0x1d, 0x93, 0xa4, 0xab, 0x66, 0x42, 0x9a, 0x7a, 0x2b, 0xcc, 0x5f, 0xc6, 0xdb,
- 0x96, 0x8d, 0xeb, 0xc2, 0x59, 0x4a, 0x31, 0x71, 0x70, 0x78, 0x3a, 0xf5, 0x76, 0x38, 0xc9, 0x1c,
- 0xdd, 0x97, 0xbc, 0xb9, 0xbe, 0x6e, 0x1f, 0xb0, 0x83, 0x69, 0xfd, 0xc9, 0xe8, 0x2f, 0xf8, 0x06,
- 0xb3, 0x24, 0xa2, 0x78, 0xe7, 0x61, 0xb1, 0x73, 0x95, 0x8e, 0x18, 0x9d, 0x9e, 0x01, 0xd3, 0x4c,
- 0x47, 0x7c, 0x83, 0x2e, 0xae, 0x07, 0x0d, 0xf2, 0xaa, 0xcf, 0x80, 0x19, 0x4f, 0x44, 0xc4, 0x6e,
- 0x60, 0x5d, 0xef, 0xb9, 0x01, 0x3f, 0x92, 0xef, 0x5a, 0x98, 0x15, 0xfd, 0x54, 0xa0, 0x33, 0x15,
- 0x41, 0x67, 0x9e, 0x9a, 0x84, 0xf9, 0x89, 0xdc, 0x4f, 0x5e, 0xe4, 0xca, 0x5f, 0x3a, 0xa8, 0x76,
- 0x1c, 0xb4, 0x91, 0x4c, 0x6b, 0xce, 0x03, 0x04, 0xcd, 0xcf, 0x0f, 0x9c, 0xc1, 0xa5, 0x88, 0xb1,
- 0xf1, 0x63, 0x8f, 0x02, 0xf6, 0x8b, 0x83, 0xb0, 0x33, 0x5e, 0x40, 0x25, 0x8f, 0x10, 0xca, 0x70,
- 0x92, 0x3e, 0x3a, 0x3f, 0x91, 0x83, 0x33, 0xc1, 0x09, 0xa7, 0x75, 0xdd, 0x09, 0x5b, 0xf6, 0xc3,
- 0xc9, 0x20, 0x12, 0x8e, 0x94, 0x04, 0xcd, 0xf1, 0x34, 0xe4, 0x9d, 0xfd, 0xcb, 0x81, 0x23, 0x20,
- 0x7d, 0x41, 0x6f, 0x56, 0x12, 0x8d, 0x55, 0x03, 0xf9, 0x1b, 0x73, 0x23, 0xbc, 0x13, 0x4e, 0x99,
- 0xfb, 0x7b, 0x01, 0x16, 0xa4, 0xa7, 0x61, 0x3d, 0xcb, 0xe1, 0x0f, 0x62, 0x93, 0xcd, 0xc9, 0x37,
- 0xd9, 0x04, 0x23, 0xa9, 0x4c, 0xa5, 0xd3, 0x57, 0x8f, 0x4f, 0xf6, 0x1d, 0x41, 0x2b, 0x27, 0x56,
- 0x0a, 0x0a, 0x7f, 0x96, 0x87, 0xff, 0x9f, 0x32, 0x89, 0x7a, 0xde, 0xe1, 0x27, 0xd7, 0x12, 0xf4,
- 0x84, 0xc7, 0x79, 0x6c, 0xed, 0x33, 0x59, 0x40, 0x8d, 0xd0, 0x21, 0x87, 0x81, 0xba, 0x69, 0xe3,
- 0xab, 0x06, 0xbe, 0x26, 0xb8, 0x6f, 0xbd, 0x45, 0x3a, 0x0e, 0xb5, 0xa8, 0x2b, 0x87, 0x88, 0x46,
- 0xaf, 0x8b, 0x0f, 0xc0, 0x45, 0x2e, 0xde, 0x74, 0xb2, 0x12, 0xd3, 0x97, 0xea, 0x1f, 0xe4, 0x60,
- 0x4e, 0xc3, 0x7a, 0x27, 0xe8, 0xb8, 0xfe, 0x2f, 0xce, 0x24, 0x79, 0x16, 0xe4, 0xdc, 0x70, 0x6d,
- 0xe1, 0x89, 0x87, 0x2b, 0xc2, 0xff, 0x49, 0x5e, 0xc8, 0x12, 0x03, 0xf9, 0xe9, 0x90, 0x86, 0x67,
- 0x25, 0xec, 0x19, 0x45, 0xc6, 0x9e, 0xc9, 0x0d, 0xb2, 0x67, 0x6e, 0x87, 0x93, 0x5d, 0xdd, 0x71,
- 0x97, 0x2f, 0x37, 0x8d, 0x3d, 0xec, 0xb8, 0xfa, 0x5e, 0x8f, 0x58, 0x2e, 0x8a, 0xd6, 0x9f, 0x2c,
- 0xde, 0x5d, 0x1e, 0x7b, 0x86, 0x69, 0x50, 0x15, 0x8f, 0x1e, 0xe7, 0xf5, 0x83, 0x52, 0x07, 0x96,
- 0x86, 0x95, 0x9d, 0x4c, 0x33, 0x1e, 0x1c, 0x61, 0x3d, 0xe4, 0x2c, 0xa8, 0x1b, 0x95, 0x46, 0xa3,
- 0xb4, 0x4a, 0xce, 0x31, 0xf8, 0x8e, 0x2d, 0x9d, 0x0b, 0x4f, 0xf0, 0xc4, 0x47, 0x91, 0x56, 0xe7,
- 0xc2, 0xf1, 0xa2, 0x78, 0x42, 0x9d, 0x85, 0x29, 0x1b, 0xf7, 0xba, 0x06, 0x76, 0x8a, 0x19, 0xf4,
- 0xd5, 0x2c, 0x14, 0xb6, 0x4c, 0x1b, 0xeb, 0x1d, 0xf4, 0xdc, 0xe8, 0x6e, 0x6f, 0x44, 0xa5, 0x10,
- 0x63, 0x35, 0xc5, 0xae, 0x24, 0xb2, 0x7e, 0xcb, 0x63, 0x64, 0x2c, 0xf0, 0xc9, 0x2d, 0x21, 0x46,
- 0x97, 0x9a, 0x7a, 0x93, 0xbe, 0x30, 0x05, 0xf9, 0xca, 0x5e, 0xcf, 0x3d, 0xb8, 0xf0, 0x04, 0x98,
- 0x6f, 0xb8, 0x36, 0xd6, 0xf7, 0xb8, 0x8d, 0x60, 0xd7, 0xba, 0x82, 0x4d, 0x7f, 0x23, 0x98, 0xbc,
- 0xdc, 0x7b, 0x0f, 0x4c, 0x99, 0x56, 0x4b, 0xdf, 0x77, 0x77, 0xd5, 0x9b, 0x0f, 0x45, 0x50, 0x61,
- 0xea, 0x57, 0x67, 0x21, 0xeb, 0xbe, 0x74, 0x1f, 0x99, 0x0e, 0x14, 0x4c, 0xab, 0xb4, 0xef, 0xee,
- 0x2e, 0xdd, 0xf4, 0x89, 0x3f, 0x3d, 0x9f, 0xf9, 0xf4, 0x9f, 0x9e, 0xcf, 0x7c, 0xf1, 0x4f, 0xcf,
- 0x67, 0xbe, 0xff, 0xcf, 0xce, 0x9f, 0xf8, 0xf4, 0x9f, 0x9d, 0x3f, 0xf1, 0xd9, 0x3f, 0x3b, 0x7f,
- 0xe2, 0x5b, 0xb2, 0xbd, 0xcb, 0x97, 0x0b, 0x84, 0xca, 0xd3, 0xfe, 0xbf, 0x00, 0x00, 0x00, 0xff,
- 0xff, 0x1c, 0x26, 0x7f, 0xb9, 0x4c, 0x1c, 0x02, 0x00,
+ // 21542 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49,
+ 0x59, 0x37, 0x3a, 0x95, 0x59, 0x55, 0xdd, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x77,
+ 0x99, 0x5d, 0x67, 0x97, 0x65, 0x5d, 0x96, 0xde, 0x65, 0x41, 0x64, 0x97, 0x5d, 0x96, 0xea, 0xaa,
+ 0xec, 0xee, 0xda, 0xad, 0xae, 0x6a, 0xb2, 0xaa, 0x67, 0x18, 0xfd, 0x3c, 0x6d, 0x4e, 0x55, 0x74,
+ 0x77, 0xee, 0x54, 0x67, 0x16, 0x99, 0xd9, 0x33, 0xdb, 0x9c, 0xe7, 0x3b, 0x9f, 0x88, 0x2b, 0x20,
+ 0x22, 0xa2, 0xa2, 0x22, 0x72, 0x17, 0x10, 0x90, 0xfb, 0xed, 0x03, 0xe5, 0x22, 0x17, 0x41, 0x44,
+ 0x45, 0xf1, 0x02, 0x28, 0x47, 0xbc, 0xe3, 0x77, 0xf4, 0xf8, 0xe1, 0x51, 0x10, 0x3f, 0xd1, 0xf3,
+ 0xc4, 0x25, 0x33, 0x23, 0xaa, 0x2b, 0xb3, 0x22, 0xab, 0x2b, 0xab, 0x17, 0xfd, 0xfe, 0xaa, 0xca,
+ 0xc8, 0xc8, 0x37, 0xde, 0x78, 0x7f, 0x6f, 0x44, 0xbc, 0x11, 0xf1, 0xc6, 0x1b, 0xe0, 0x74, 0xef,
+ 0xe2, 0xed, 0x3d, 0xd7, 0xf1, 0x1d, 0xef, 0xf6, 0xb6, 0xb3, 0xbb, 0x6b, 0xda, 0x1d, 0x6f, 0x11,
+ 0x3f, 0xab, 0x53, 0xa6, 0xbd, 0xef, 0xef, 0xf7, 0xa0, 0x76, 0x53, 0xef, 0xd2, 0xf6, 0xed, 0x5d,
+ 0xeb, 0xe2, 0xed, 0xbd, 0x8b, 0xb7, 0xef, 0x3a, 0x1d, 0xd8, 0x0d, 0x3e, 0xc0, 0x0f, 0x34, 0xbb,
+ 0x76, 0x4b, 0x5c, 0xae, 0xae, 0xd3, 0x36, 0xbb, 0x9e, 0xef, 0xb8, 0x90, 0xe6, 0x3c, 0x15, 0x15,
+ 0x09, 0x2f, 0x43, 0xdb, 0x0f, 0x28, 0x5c, 0xb7, 0xed, 0x38, 0xdb, 0x5d, 0x48, 0xde, 0x5d, 0xdc,
+ 0xdb, 0xba, 0xdd, 0xf3, 0xdd, 0xbd, 0xb6, 0x4f, 0xdf, 0xde, 0xd0, 0xff, 0xb6, 0x03, 0xbd, 0xb6,
+ 0x6b, 0xf5, 0x7c, 0xc7, 0x25, 0x39, 0xce, 0xbe, 0xe2, 0x0b, 0xd3, 0x40, 0x36, 0x7a, 0x6d, 0xed,
+ 0xeb, 0x53, 0x40, 0x2e, 0xf5, 0x7a, 0xda, 0x27, 0x25, 0x00, 0x56, 0xa0, 0x7f, 0x0e, 0xba, 0x9e,
+ 0xe5, 0xd8, 0xda, 0x71, 0x30, 0x65, 0xc0, 0x67, 0xed, 0x41, 0xcf, 0xbf, 0x3b, 0xff, 0xfc, 0xbf,
+ 0x92, 0x73, 0xda, 0xeb, 0x25, 0x30, 0x6d, 0x40, 0xaf, 0xe7, 0xd8, 0x1e, 0x54, 0x9f, 0x0e, 0x0a,
+ 0xd0, 0x75, 0x1d, 0xf7, 0x74, 0xee, 0x86, 0xdc, 0x2d, 0xb3, 0x77, 0xde, 0xba, 0x48, 0xab, 0xbf,
+ 0x68, 0xf4, 0xda, 0x8b, 0xa5, 0x5e, 0x6f, 0x31, 0xa2, 0xb4, 0x18, 0x7c, 0xb4, 0xa8, 0xa3, 0x2f,
+ 0x0c, 0xf2, 0xa1, 0x7a, 0x1a, 0x4c, 0x5d, 0x26, 0x19, 0x4e, 0x4b, 0x37, 0xe4, 0x6e, 0x99, 0x31,
+ 0x82, 0x47, 0xf4, 0xa6, 0x03, 0x7d, 0xd3, 0xea, 0x7a, 0xa7, 0x65, 0xf2, 0x86, 0x3e, 0x6a, 0xaf,
+ 0xcd, 0x81, 0x02, 0x26, 0xa2, 0x96, 0x41, 0xbe, 0xed, 0x74, 0x20, 0x2e, 0x7e, 0xe1, 0xce, 0xdb,
+ 0xc5, 0x8b, 0x5f, 0x2c, 0x3b, 0x1d, 0x68, 0xe0, 0x8f, 0xd5, 0x1b, 0xc0, 0x6c, 0x20, 0x96, 0x88,
+ 0x0d, 0x36, 0xe9, 0xec, 0x9d, 0x20, 0x8f, 0xf2, 0xab, 0xd3, 0x20, 0x5f, 0xdf, 0xa8, 0xd5, 0x94,
+ 0x63, 0xea, 0x09, 0x30, 0xbf, 0x51, 0x7f, 0xa0, 0xde, 0x38, 0x5f, 0xdf, 0xd4, 0x0d, 0xa3, 0x61,
+ 0x28, 0x39, 0x75, 0x1e, 0xcc, 0x2c, 0x95, 0x2a, 0x9b, 0xd5, 0xfa, 0xfa, 0x46, 0x4b, 0x91, 0xb4,
+ 0x57, 0xca, 0x60, 0xa1, 0x09, 0xfd, 0x0a, 0xbc, 0x6c, 0xb5, 0x61, 0xd3, 0x37, 0x7d, 0xa8, 0xbd,
+ 0x38, 0x17, 0x0a, 0x53, 0xdd, 0x40, 0x85, 0x86, 0xaf, 0x68, 0x05, 0x9e, 0x78, 0xa0, 0x02, 0x3c,
+ 0x85, 0x45, 0xfa, 0xf5, 0x22, 0x93, 0x66, 0xb0, 0x74, 0xce, 0x3e, 0x1e, 0xcc, 0x32, 0xef, 0xd4,
+ 0x05, 0x00, 0x96, 0x4a, 0xe5, 0x07, 0x56, 0x8c, 0xc6, 0x46, 0xbd, 0xa2, 0x1c, 0x43, 0xcf, 0xcb,
+ 0x0d, 0x43, 0xa7, 0xcf, 0x39, 0xed, 0x9b, 0x39, 0x06, 0xcc, 0x0a, 0x0f, 0xe6, 0xe2, 0x70, 0x66,
+ 0x06, 0x00, 0xaa, 0xbd, 0x21, 0x04, 0x67, 0x85, 0x03, 0xe7, 0x89, 0xe9, 0xc8, 0x65, 0x0f, 0xd0,
+ 0xc3, 0x12, 0x98, 0x6e, 0xee, 0xec, 0xf9, 0x1d, 0xe7, 0x8a, 0xad, 0xcd, 0x84, 0xc8, 0x68, 0x7f,
+ 0xc7, 0xca, 0xe4, 0x69, 0xbc, 0x4c, 0x6e, 0x39, 0x58, 0x09, 0x4a, 0x21, 0x46, 0x1a, 0xaf, 0x0e,
+ 0xa5, 0x51, 0xe2, 0xa4, 0xf1, 0x78, 0x51, 0x42, 0xd9, 0xcb, 0xe1, 0x0b, 0xf7, 0x80, 0x42, 0xb3,
+ 0x67, 0xb6, 0xa1, 0xf6, 0x59, 0x19, 0xcc, 0xd5, 0xa0, 0x79, 0x19, 0x96, 0x7a, 0x3d, 0xd7, 0xb9,
+ 0x0c, 0xb5, 0x72, 0xa4, 0xaf, 0xa7, 0xc1, 0x94, 0x87, 0x32, 0x55, 0x3b, 0xb8, 0x06, 0x33, 0x46,
+ 0xf0, 0xa8, 0x9e, 0x01, 0xc0, 0xea, 0x40, 0xdb, 0xb7, 0x7c, 0x0b, 0x7a, 0xa7, 0xa5, 0x1b, 0xe4,
+ 0x5b, 0x66, 0x0c, 0x26, 0x45, 0xfb, 0xba, 0x24, 0xaa, 0x63, 0x98, 0x8b, 0x45, 0x96, 0x83, 0x18,
+ 0xa9, 0xbe, 0x4e, 0x12, 0xd1, 0xb1, 0xa1, 0xe4, 0xd2, 0xc9, 0xf6, 0x6d, 0xb9, 0xf4, 0xc2, 0x45,
+ 0x39, 0xea, 0x8d, 0xcd, 0xe6, 0x46, 0x79, 0x75, 0xb3, 0xb9, 0x5e, 0x2a, 0xeb, 0x0a, 0x54, 0x4f,
+ 0x02, 0x05, 0xff, 0xdd, 0xac, 0x36, 0x37, 0x2b, 0x7a, 0x4d, 0x6f, 0xe9, 0x15, 0x65, 0x4b, 0x55,
+ 0xc1, 0x82, 0xa1, 0x3f, 0x63, 0x43, 0x6f, 0xb6, 0x36, 0x97, 0x4b, 0xd5, 0x9a, 0x5e, 0x51, 0xb6,
+ 0xd1, 0xc7, 0xb5, 0xea, 0x5a, 0xb5, 0xb5, 0x69, 0xe8, 0xa5, 0xf2, 0xaa, 0x5e, 0x51, 0x76, 0xd4,
+ 0x47, 0x81, 0xab, 0xea, 0x8d, 0xcd, 0xd2, 0xfa, 0xba, 0xd1, 0x38, 0xa7, 0x6f, 0xd2, 0x2f, 0x9a,
+ 0x8a, 0x45, 0x0a, 0x6a, 0x6d, 0x36, 0x57, 0x4b, 0x86, 0x5e, 0x5a, 0xaa, 0xe9, 0xca, 0x83, 0xda,
+ 0x73, 0x65, 0x30, 0xbf, 0x66, 0x5e, 0x82, 0xcd, 0x1d, 0xd3, 0x85, 0xe6, 0xc5, 0x2e, 0xd4, 0x6e,
+ 0x14, 0xc0, 0x53, 0xfb, 0x2c, 0x8b, 0x97, 0xce, 0xe3, 0x75, 0xfb, 0x00, 0x01, 0x73, 0x45, 0xc4,
+ 0x00, 0xf6, 0xcf, 0x61, 0x33, 0x58, 0xe5, 0x00, 0x7b, 0x52, 0x4a, 0x7a, 0xe9, 0x10, 0xfb, 0xc1,
+ 0x47, 0x00, 0x62, 0xda, 0x17, 0xf3, 0x60, 0xa1, 0x6a, 0x5f, 0xb6, 0x7c, 0xb8, 0x02, 0x6d, 0xe8,
+ 0xa2, 0x71, 0xe0, 0x95, 0x39, 0x91, 0x76, 0xd5, 0x02, 0xc0, 0xc2, 0xdf, 0xb5, 0xf6, 0x7b, 0x10,
+ 0x57, 0x6f, 0xb0, 0xbc, 0x78, 0xe2, 0xe1, 0x10, 0x51, 0x0d, 0xbf, 0x35, 0x18, 0x3a, 0x67, 0x6f,
+ 0x04, 0x20, 0x7a, 0xa3, 0x02, 0x50, 0x5c, 0x83, 0xbb, 0x17, 0xa1, 0xab, 0x1c, 0x53, 0x67, 0x40,
+ 0x61, 0x05, 0x7d, 0xa9, 0xe4, 0xb4, 0xd7, 0xcb, 0x8c, 0x0a, 0x2c, 0xf3, 0x2a, 0x70, 0x87, 0x08,
+ 0x0b, 0x83, 0x46, 0xfa, 0xeb, 0xc0, 0x0c, 0xe1, 0xa3, 0x6c, 0x75, 0x28, 0x5a, 0x51, 0x82, 0x7a,
+ 0x13, 0x98, 0x27, 0x0f, 0xcb, 0x56, 0x17, 0x3e, 0x00, 0xf7, 0xe9, 0x98, 0xcf, 0x27, 0x6a, 0x3f,
+ 0x1a, 0x36, 0xfc, 0x2a, 0xa7, 0x47, 0xdf, 0x95, 0x96, 0xa9, 0x74, 0x8a, 0xf4, 0xd2, 0x47, 0x42,
+ 0xd3, 0x3f, 0xd0, 0xc2, 0x2d, 0xed, 0x5b, 0x12, 0x98, 0x6d, 0xfa, 0x4e, 0x0f, 0x35, 0x17, 0xcb,
+ 0xde, 0x16, 0x6b, 0xdf, 0x9f, 0x66, 0xdb, 0x77, 0x99, 0x07, 0xf7, 0xf1, 0x03, 0xe4, 0xc8, 0x14,
+ 0x10, 0xd3, 0xba, 0xbf, 0x1e, 0xb6, 0xee, 0x65, 0x0e, 0x95, 0x3b, 0x53, 0x51, 0xfb, 0x36, 0x6c,
+ 0xdb, 0x2f, 0x95, 0x81, 0x12, 0xa8, 0x99, 0x5f, 0xde, 0x73, 0x5d, 0x68, 0xfb, 0x62, 0x20, 0xfc,
+ 0x11, 0x0b, 0xc2, 0x2a, 0x0f, 0xc2, 0x9d, 0x09, 0xca, 0x1c, 0x94, 0x92, 0x61, 0x1b, 0xfb, 0x68,
+ 0x88, 0xe6, 0x03, 0x1c, 0x9a, 0xdf, 0x9d, 0x9e, 0xad, 0x74, 0x90, 0xae, 0x8e, 0x80, 0xe8, 0x49,
+ 0xa0, 0xa0, 0xf1, 0xb0, 0xdc, 0xaa, 0x9e, 0xd3, 0x37, 0xab, 0xf5, 0x73, 0xd5, 0x96, 0xae, 0x40,
+ 0xed, 0x25, 0x72, 0xd4, 0xe7, 0xfa, 0xb8, 0x53, 0x13, 0x43, 0xe5, 0x8b, 0xd2, 0x68, 0xfd, 0x1e,
+ 0x29, 0x63, 0x22, 0x98, 0x88, 0xf7, 0x7b, 0x03, 0x99, 0x4a, 0x87, 0xc8, 0xfd, 0x23, 0x20, 0x72,
+ 0x0a, 0xa8, 0xd5, 0xfa, 0xb9, 0x52, 0xad, 0x5a, 0x21, 0x6d, 0x6c, 0xb3, 0x75, 0x61, 0x1d, 0x61,
+ 0xf2, 0x93, 0x32, 0x98, 0x23, 0xac, 0x19, 0xf0, 0xb2, 0x73, 0x49, 0xd0, 0x18, 0xf9, 0x72, 0x4a,
+ 0xe3, 0x91, 0x2d, 0x21, 0xa6, 0xb7, 0xfa, 0x91, 0x14, 0xc6, 0x63, 0x02, 0xb9, 0x47, 0xd2, 0x08,
+ 0x72, 0xa0, 0x6b, 0xda, 0x1e, 0xd0, 0x83, 0x0d, 0x1c, 0x41, 0x3e, 0x9e, 0x0f, 0xec, 0x81, 0x73,
+ 0x16, 0xbc, 0xa2, 0xad, 0x45, 0x98, 0x70, 0x6a, 0x9b, 0x1b, 0xaa, 0xb6, 0xd2, 0x20, 0xb5, 0xfd,
+ 0x4b, 0xd6, 0x8e, 0x58, 0xe2, 0xd1, 0xbb, 0x2d, 0x56, 0xdc, 0x88, 0x93, 0xf8, 0xd5, 0x82, 0x40,
+ 0x51, 0x24, 0xde, 0x5a, 0xba, 0x0e, 0xcc, 0xe0, 0xbf, 0x75, 0x73, 0x17, 0xd2, 0x36, 0x14, 0x25,
+ 0xa8, 0x67, 0xc1, 0x1c, 0xc9, 0xd8, 0x76, 0x6c, 0x54, 0x9f, 0x3c, 0xce, 0xc0, 0xa5, 0x21, 0x10,
+ 0xdb, 0x2e, 0x34, 0x7d, 0xc7, 0xc5, 0x34, 0x0a, 0x04, 0x44, 0x26, 0x49, 0xbd, 0x0d, 0x9c, 0xb0,
+ 0x3c, 0xdc, 0xaa, 0x36, 0x3c, 0xe8, 0x12, 0x66, 0x4f, 0x17, 0x6f, 0xc8, 0xdd, 0x32, 0x6d, 0x1c,
+ 0x7c, 0xa1, 0x7d, 0x35, 0x6c, 0xb3, 0x3a, 0xa7, 0x67, 0x4f, 0x48, 0x53, 0xf1, 0x74, 0x5a, 0x76,
+ 0x79, 0xb4, 0x1e, 0x94, 0xf4, 0x9b, 0x9b, 0x48, 0x37, 0x96, 0xf1, 0xc2, 0x00, 0xa4, 0xad, 0x18,
+ 0xa5, 0xa2, 0xbc, 0xe5, 0x46, 0xbd, 0xa5, 0xd7, 0x5b, 0xca, 0xd6, 0x40, 0xfd, 0xdb, 0xd6, 0x5e,
+ 0x97, 0x07, 0xf9, 0xfb, 0x1d, 0xcb, 0xd6, 0x1e, 0xce, 0x71, 0x0a, 0x64, 0x43, 0xff, 0x8a, 0xe3,
+ 0x5e, 0x0a, 0x9b, 0x75, 0x94, 0x90, 0x8c, 0x64, 0xa4, 0x78, 0xf2, 0x50, 0xc5, 0xcb, 0x0f, 0x52,
+ 0xbc, 0x9f, 0x60, 0x15, 0xef, 0x1e, 0x5e, 0xf1, 0x6e, 0x1e, 0x20, 0x7f, 0xc4, 0x7c, 0x4c, 0x77,
+ 0xf1, 0xa9, 0xb0, 0xbb, 0xb8, 0x8f, 0x83, 0xf1, 0x71, 0x62, 0x64, 0xd2, 0x01, 0xf8, 0xa5, 0x4c,
+ 0xbb, 0x89, 0x41, 0x50, 0x6f, 0xc7, 0x40, 0xbd, 0x33, 0xa0, 0x07, 0xb1, 0x0e, 0x76, 0x34, 0x0f,
+ 0x1e, 0xec, 0x54, 0x2e, 0xa9, 0x57, 0x83, 0x13, 0x95, 0xea, 0xf2, 0xb2, 0x6e, 0xe8, 0xf5, 0xd6,
+ 0x66, 0x5d, 0x6f, 0x9d, 0x6f, 0x18, 0x0f, 0x28, 0x5d, 0xed, 0xb5, 0x32, 0x00, 0x48, 0x42, 0x65,
+ 0xd3, 0x6e, 0xc3, 0xae, 0x58, 0xff, 0xff, 0xff, 0x4a, 0xe9, 0x7a, 0x90, 0x88, 0x7e, 0x0c, 0x9c,
+ 0xaf, 0x90, 0xc4, 0x5b, 0x65, 0x2c, 0xb1, 0x74, 0xa0, 0xbe, 0xf9, 0x91, 0x30, 0x7b, 0xb8, 0x0a,
+ 0x1c, 0x0f, 0xe8, 0xd1, 0xec, 0x83, 0x17, 0x0d, 0xde, 0x9e, 0x07, 0x0b, 0x14, 0x96, 0x60, 0x15,
+ 0xe8, 0xf9, 0x42, 0xd3, 0x55, 0x0d, 0x4c, 0xd3, 0x45, 0x9f, 0x60, 0x30, 0x08, 0x9f, 0xd5, 0x15,
+ 0x30, 0xdb, 0x83, 0xee, 0xae, 0xe5, 0x79, 0x96, 0x63, 0x93, 0xe5, 0xdc, 0x85, 0x3b, 0x1f, 0x13,
+ 0x4a, 0x1c, 0xaf, 0x7c, 0x2f, 0xae, 0x9b, 0xae, 0x6f, 0xb5, 0xad, 0x9e, 0x69, 0xfb, 0xeb, 0x51,
+ 0x66, 0x83, 0xfd, 0x12, 0x19, 0x76, 0xa9, 0x0c, 0x34, 0xbe, 0x26, 0x31, 0x2a, 0xf1, 0x2b, 0x29,
+ 0x26, 0x95, 0x89, 0x04, 0xd3, 0xa9, 0xc5, 0x27, 0x33, 0x55, 0x8b, 0x01, 0x78, 0x6f, 0xab, 0xd7,
+ 0x80, 0xab, 0xab, 0xf5, 0x72, 0xc3, 0x30, 0xf4, 0x72, 0x6b, 0x73, 0x5d, 0x37, 0xd6, 0xaa, 0xcd,
+ 0x66, 0xb5, 0x51, 0x6f, 0x1e, 0xa6, 0xb5, 0x6b, 0x9f, 0x91, 0x43, 0x8d, 0xa9, 0xc0, 0x76, 0xd7,
+ 0xb2, 0xa1, 0x76, 0xdf, 0x21, 0x15, 0x86, 0x5f, 0x33, 0x14, 0xc7, 0x99, 0x96, 0x1f, 0x83, 0xf3,
+ 0x6b, 0xd2, 0xe3, 0x3c, 0x98, 0xe0, 0x7f, 0xe0, 0xe6, 0xff, 0x65, 0x19, 0x9c, 0x60, 0x1a, 0xa2,
+ 0x01, 0x77, 0xc7, 0xb6, 0x0e, 0xfc, 0x83, 0x6c, 0xdb, 0xad, 0xf2, 0x98, 0x0e, 0xb2, 0xbd, 0x0f,
+ 0xb0, 0x11, 0x03, 0xeb, 0x9b, 0x43, 0x58, 0x6b, 0x1c, 0xac, 0x4f, 0x19, 0x81, 0x66, 0x3a, 0x64,
+ 0xdf, 0x91, 0x29, 0xb2, 0xd7, 0x80, 0xab, 0xd7, 0x4b, 0x46, 0xab, 0x5a, 0xae, 0xae, 0x97, 0xd0,
+ 0x38, 0xca, 0x0c, 0xd9, 0x31, 0xc6, 0x3d, 0x0f, 0xfa, 0x40, 0x7c, 0x3f, 0x92, 0x07, 0xd7, 0x0d,
+ 0xee, 0x68, 0xcb, 0x3b, 0xa6, 0xbd, 0x0d, 0x35, 0x4b, 0x04, 0xea, 0x0a, 0x98, 0x6a, 0xe3, 0xec,
+ 0x04, 0x67, 0x76, 0xe3, 0x2f, 0xa1, 0x2f, 0x27, 0x25, 0x18, 0xc1, 0xa7, 0xda, 0xbb, 0x59, 0x85,
+ 0x68, 0xf1, 0x0a, 0xf1, 0xb4, 0x64, 0xf0, 0x0e, 0xf0, 0x1d, 0xa3, 0x1b, 0x9f, 0x0b, 0x75, 0xe3,
+ 0x3c, 0xa7, 0x1b, 0xe5, 0xc3, 0x91, 0x4f, 0xa7, 0x26, 0xbf, 0xf1, 0x48, 0xe8, 0x00, 0x62, 0xb5,
+ 0xc9, 0x8a, 0x1f, 0x15, 0x06, 0x76, 0xf7, 0xaf, 0x92, 0x41, 0xb1, 0x02, 0xbb, 0xd0, 0x17, 0x9c,
+ 0xc1, 0xff, 0xbd, 0x24, 0xba, 0x9d, 0x46, 0x60, 0x20, 0xb4, 0xe3, 0xd7, 0x52, 0x7c, 0x6b, 0x17,
+ 0x7a, 0xbe, 0xb9, 0xdb, 0xc3, 0xa2, 0x96, 0x8d, 0x28, 0x41, 0xfb, 0x21, 0x49, 0x64, 0xb3, 0x2d,
+ 0xa1, 0x98, 0xff, 0x18, 0xab, 0xc2, 0x9f, 0x97, 0xc0, 0x74, 0x13, 0xfa, 0x0d, 0xb7, 0x03, 0x5d,
+ 0xad, 0x19, 0x61, 0x74, 0x03, 0x98, 0xc5, 0xa0, 0xa0, 0x69, 0x66, 0x88, 0x13, 0x9b, 0xa4, 0xde,
+ 0x0c, 0x16, 0xc2, 0x47, 0xfc, 0x39, 0xed, 0xc6, 0xfb, 0x52, 0xb5, 0xaf, 0xe5, 0x44, 0x7d, 0x00,
+ 0xe8, 0xa2, 0x2f, 0xe5, 0x26, 0xa6, 0x95, 0x8a, 0xed, 0xe7, 0x27, 0x92, 0xca, 0x7e, 0x9b, 0xf4,
+ 0x9d, 0x12, 0x00, 0x1b, 0xb6, 0x17, 0xc8, 0xf5, 0x71, 0x29, 0xe4, 0xaa, 0xfd, 0x53, 0x2e, 0xdd,
+ 0x2c, 0x26, 0x2a, 0x27, 0x46, 0x62, 0xbf, 0x90, 0x62, 0x6d, 0x21, 0x96, 0xd8, 0x04, 0xb6, 0x96,
+ 0x8f, 0x83, 0xe2, 0x79, 0xb3, 0xdb, 0x85, 0xbe, 0xf6, 0x4a, 0x19, 0x14, 0xcb, 0x2e, 0x34, 0x7d,
+ 0xa8, 0xc1, 0x48, 0x74, 0x1a, 0x98, 0x76, 0x1d, 0xc7, 0x5f, 0x37, 0xfd, 0x1d, 0x2a, 0xb7, 0xf0,
+ 0x59, 0x7d, 0x0a, 0x78, 0xd4, 0xd6, 0x5e, 0xb7, 0xeb, 0xc3, 0x87, 0xfc, 0x75, 0xd7, 0xda, 0x35,
+ 0xdd, 0xfd, 0x9a, 0x69, 0x6f, 0xef, 0x99, 0xdb, 0x90, 0xb2, 0x17, 0xf7, 0x9a, 0x3a, 0xaa, 0xfc,
+ 0x12, 0xdb, 0xf1, 0xdc, 0xc7, 0x0b, 0xfd, 0x3b, 0x39, 0x39, 0x11, 0x16, 0x17, 0x09, 0x7b, 0x31,
+ 0x3d, 0x8f, 0x06, 0xa6, 0x77, 0x6d, 0xb8, 0xeb, 0xd8, 0x56, 0x3b, 0xb0, 0x56, 0x83, 0x67, 0xed,
+ 0x63, 0x21, 0x1a, 0x4b, 0x1c, 0x1a, 0x8b, 0xc2, 0xa5, 0xa4, 0x83, 0xa2, 0x39, 0x42, 0xbf, 0x73,
+ 0x3d, 0xb8, 0x96, 0x74, 0x23, 0x9b, 0xad, 0xc6, 0x66, 0xd9, 0xd0, 0x4b, 0x2d, 0x7d, 0xb3, 0xd6,
+ 0x28, 0x97, 0x6a, 0x9b, 0x86, 0xbe, 0xde, 0x50, 0x20, 0x9a, 0x9d, 0x4f, 0x19, 0xb0, 0xed, 0x5c,
+ 0x86, 0xae, 0xf6, 0x9c, 0x9c, 0x18, 0x44, 0x09, 0x42, 0x49, 0x82, 0x4f, 0x16, 0x81, 0xef, 0x27,
+ 0x84, 0xfd, 0x8c, 0xa8, 0x60, 0x29, 0xf3, 0x31, 0x2d, 0xe6, 0xe3, 0x42, 0x7d, 0x4c, 0x22, 0xa9,
+ 0x47, 0x00, 0x48, 0xff, 0x28, 0x81, 0xa9, 0xb2, 0x63, 0x5f, 0x86, 0xae, 0xcf, 0x4e, 0xb2, 0x58,
+ 0x1c, 0x72, 0x7d, 0x38, 0x9c, 0x06, 0x53, 0xd0, 0xf6, 0x5d, 0xa7, 0x17, 0xcc, 0xb2, 0x82, 0x47,
+ 0xed, 0x8d, 0x69, 0x25, 0x4c, 0x4b, 0x8e, 0x5f, 0x9b, 0x1d, 0x5c, 0x10, 0xc7, 0x9e, 0xdc, 0xd7,
+ 0x76, 0x5e, 0x9b, 0x06, 0x97, 0xc1, 0x0c, 0x64, 0xdf, 0x8f, 0x7d, 0x45, 0x06, 0xf3, 0xa4, 0xdd,
+ 0x36, 0x21, 0x36, 0x0b, 0xb5, 0x06, 0xbb, 0xce, 0xd9, 0x27, 0xfc, 0xd5, 0x63, 0x9c, 0xf8, 0x8b,
+ 0x66, 0xaf, 0x17, 0xae, 0x90, 0xaf, 0x1e, 0x33, 0xe8, 0x33, 0x51, 0xf3, 0xa5, 0x22, 0xc8, 0x9b,
+ 0x7b, 0xfe, 0x8e, 0xf6, 0x2d, 0xe1, 0x19, 0x2f, 0xd7, 0x8f, 0x50, 0x7e, 0x62, 0x20, 0x39, 0x09,
+ 0x0a, 0xbe, 0x73, 0x09, 0x06, 0x72, 0x20, 0x0f, 0x08, 0x0e, 0xb3, 0xd7, 0x6b, 0xe1, 0x17, 0x14,
+ 0x8e, 0xe0, 0x19, 0x19, 0x58, 0x66, 0xbb, 0xed, 0xec, 0xd9, 0x7e, 0x35, 0x58, 0x25, 0x8f, 0x12,
+ 0xb4, 0x2f, 0x08, 0x6d, 0x43, 0x09, 0x30, 0x98, 0x0e, 0xb2, 0x8b, 0x23, 0x34, 0xa5, 0x45, 0x70,
+ 0x6b, 0x69, 0x7d, 0x7d, 0xb3, 0xd5, 0x78, 0x40, 0xaf, 0x47, 0xd6, 0xee, 0x66, 0xb5, 0xbe, 0xd9,
+ 0x5a, 0xd5, 0x37, 0xcb, 0x1b, 0x06, 0x5e, 0x9c, 0x2c, 0x95, 0xcb, 0x8d, 0x8d, 0x7a, 0x4b, 0x81,
+ 0xda, 0x5b, 0x25, 0x30, 0x57, 0xee, 0x3a, 0x5e, 0x88, 0xf0, 0xf5, 0x11, 0xc2, 0xa1, 0x18, 0x73,
+ 0x8c, 0x18, 0xb5, 0xff, 0x95, 0x13, 0xf5, 0x93, 0x09, 0x04, 0xc2, 0x90, 0x8f, 0xe9, 0xa5, 0xde,
+ 0x28, 0xe4, 0x27, 0x33, 0x9c, 0x5e, 0xf6, 0x4d, 0xe2, 0xb3, 0xcb, 0x60, 0xaa, 0x44, 0x14, 0x43,
+ 0xfb, 0x93, 0x1c, 0x28, 0x96, 0x1d, 0x7b, 0xcb, 0xda, 0x46, 0x16, 0x24, 0xb4, 0xcd, 0x8b, 0x5d,
+ 0x58, 0x31, 0x7d, 0xf3, 0xb2, 0x05, 0xaf, 0xe0, 0x0a, 0x4c, 0x1b, 0x7d, 0xa9, 0x88, 0x29, 0x9a,
+ 0x02, 0x2f, 0xee, 0x6d, 0x63, 0xa6, 0xa6, 0x0d, 0x36, 0x09, 0x8d, 0x1f, 0xe4, 0x71, 0xdd, 0x85,
+ 0x2e, 0xec, 0x42, 0xd3, 0x83, 0x68, 0x2e, 0x66, 0xc3, 0x2e, 0x56, 0xda, 0x69, 0x23, 0xee, 0xb5,
+ 0x7a, 0x16, 0xcc, 0x91, 0x57, 0xd8, 0xfe, 0xf1, 0xb0, 0x1a, 0x4f, 0x1b, 0x5c, 0x9a, 0xfa, 0x78,
+ 0x50, 0x80, 0x0f, 0xf9, 0xae, 0x79, 0xba, 0x83, 0xf1, 0x7a, 0xd4, 0x22, 0x71, 0x94, 0x5d, 0x0c,
+ 0x1c, 0x65, 0x17, 0x9b, 0xd8, 0x8d, 0xd6, 0x20, 0xb9, 0xb4, 0xff, 0x39, 0x1d, 0x5a, 0x2f, 0x9f,
+ 0x97, 0x23, 0xc5, 0x50, 0x41, 0xde, 0x36, 0x77, 0x21, 0xd5, 0x0b, 0xfc, 0x5f, 0xbd, 0x15, 0x1c,
+ 0x37, 0x2f, 0x9b, 0xbe, 0xe9, 0xd6, 0x9c, 0xb6, 0xd9, 0xc5, 0xc3, 0x66, 0xd0, 0xf2, 0xfb, 0x5f,
+ 0xe0, 0x4d, 0x2b, 0xdf, 0x71, 0x21, 0xce, 0x15, 0x6c, 0x5a, 0x05, 0x09, 0x88, 0xba, 0xd5, 0x76,
+ 0x6c, 0xcc, 0xbf, 0x6c, 0xe0, 0xff, 0x48, 0x2a, 0x1d, 0xcb, 0x43, 0x15, 0xc1, 0x54, 0xea, 0x64,
+ 0x3f, 0xa5, 0xb9, 0x6f, 0xb7, 0xf1, 0x86, 0xd5, 0xb4, 0x11, 0xf7, 0x5a, 0x5d, 0x02, 0xb3, 0x74,
+ 0xf7, 0x65, 0x0d, 0xe9, 0x55, 0x11, 0xeb, 0xd5, 0x0d, 0xbc, 0x1b, 0x22, 0xc1, 0x73, 0xb1, 0x1e,
+ 0xe5, 0x33, 0xd8, 0x8f, 0xd4, 0xa7, 0x83, 0x6b, 0xe9, 0x63, 0x79, 0xcf, 0xf3, 0x9d, 0x5d, 0x02,
+ 0xfa, 0xb2, 0xd5, 0x25, 0x35, 0x98, 0xc2, 0x35, 0x48, 0xca, 0xa2, 0xde, 0x09, 0x4e, 0xf6, 0x5c,
+ 0xb8, 0x05, 0xdd, 0x0b, 0xe6, 0xee, 0xde, 0x43, 0x2d, 0xd7, 0xb4, 0xbd, 0x9e, 0xe3, 0xfa, 0xa7,
+ 0xa7, 0x31, 0xf3, 0x03, 0xdf, 0xa9, 0xb7, 0x81, 0x13, 0x0f, 0x7a, 0x8e, 0x5d, 0xea, 0x59, 0x35,
+ 0xcb, 0xf3, 0xa1, 0x5d, 0xea, 0x74, 0xdc, 0xd3, 0x33, 0xb8, 0xac, 0x83, 0x2f, 0xd4, 0x9b, 0xc0,
+ 0xfc, 0x83, 0x8e, 0x65, 0x37, 0x7d, 0x17, 0x9a, 0xbb, 0x1b, 0x6e, 0xf7, 0x34, 0x20, 0x1b, 0x44,
+ 0x5c, 0x22, 0xed, 0x7c, 0xa7, 0x41, 0x91, 0x40, 0xa2, 0xbd, 0xb8, 0x20, 0xec, 0xd5, 0x4c, 0x85,
+ 0x94, 0x68, 0x2d, 0xde, 0x01, 0xa6, 0x68, 0xaf, 0x89, 0xc1, 0x9f, 0xbd, 0xf3, 0x54, 0xdf, 0x02,
+ 0x09, 0xa5, 0x62, 0x04, 0xd9, 0xd4, 0x27, 0x82, 0x62, 0x1b, 0x8b, 0x0a, 0xeb, 0xc1, 0xec, 0x9d,
+ 0xd7, 0x0e, 0x2e, 0x14, 0x67, 0x31, 0x68, 0x56, 0xed, 0x8b, 0xb2, 0x90, 0x23, 0x74, 0x12, 0xc7,
+ 0xe9, 0x7a, 0x8a, 0xaf, 0x4a, 0x23, 0x74, 0xc5, 0xb7, 0x81, 0x5b, 0x68, 0x3f, 0x4b, 0x6d, 0x9a,
+ 0xca, 0xe6, 0xd2, 0x46, 0x30, 0xab, 0x45, 0x96, 0x4e, 0xb3, 0x55, 0x32, 0x5a, 0x9b, 0xf5, 0x46,
+ 0x05, 0xcd, 0x86, 0x6f, 0x05, 0x37, 0x0f, 0xc9, 0xad, 0xb7, 0x36, 0xeb, 0xa5, 0x35, 0x5d, 0xd9,
+ 0xe2, 0xed, 0xa5, 0x66, 0xab, 0xb1, 0xbe, 0x69, 0x6c, 0xd4, 0xeb, 0xd5, 0xfa, 0x0a, 0x21, 0x86,
+ 0x0c, 0xd4, 0x53, 0x51, 0x86, 0xf3, 0x46, 0xb5, 0xa5, 0x6f, 0x96, 0x1b, 0xf5, 0xe5, 0xea, 0x8a,
+ 0x62, 0x0d, 0x33, 0xb6, 0x1e, 0x54, 0x6f, 0x00, 0xd7, 0x71, 0x9c, 0x54, 0x1b, 0x75, 0x34, 0x45,
+ 0x2f, 0x97, 0xea, 0x65, 0x1d, 0xcd, 0xc7, 0x2f, 0xa9, 0x1a, 0xb8, 0x9a, 0x90, 0xdb, 0x5c, 0xae,
+ 0xd6, 0xd8, 0x5d, 0xb5, 0x4f, 0xe7, 0xd4, 0xd3, 0xe0, 0x2a, 0xf6, 0x1d, 0xf5, 0x89, 0x50, 0x7e,
+ 0x3d, 0xa7, 0xde, 0x04, 0xae, 0xe7, 0xbe, 0x22, 0x1b, 0x64, 0x9b, 0xd5, 0xca, 0xe6, 0x5a, 0xb5,
+ 0xb9, 0x56, 0x6a, 0x95, 0x57, 0x95, 0xcf, 0xe0, 0xe9, 0x4b, 0x68, 0x8f, 0x33, 0xde, 0xc9, 0x2f,
+ 0x65, 0xed, 0x84, 0x12, 0xaf, 0xa8, 0x8f, 0x1b, 0x08, 0x7b, 0xb2, 0x5d, 0xfc, 0xc9, 0x70, 0xc4,
+ 0xa9, 0x70, 0x2a, 0x74, 0x47, 0x0a, 0x5a, 0xe9, 0x74, 0xa8, 0x35, 0x82, 0x0a, 0xdd, 0x00, 0xae,
+ 0xab, 0xeb, 0x04, 0x29, 0x43, 0x2f, 0x37, 0xce, 0xe9, 0xc6, 0xe6, 0xf9, 0x52, 0xad, 0xa6, 0xb7,
+ 0x36, 0x97, 0xab, 0x46, 0xb3, 0xa5, 0x6c, 0x69, 0xff, 0x24, 0x85, 0xcb, 0x52, 0x8c, 0xb4, 0xfe,
+ 0x44, 0x4a, 0xdb, 0xac, 0x13, 0x97, 0x9f, 0xbe, 0x0b, 0x14, 0x3d, 0xdf, 0xf4, 0xf7, 0x3c, 0xda,
+ 0xaa, 0x1f, 0x3d, 0xb8, 0x55, 0x2f, 0x36, 0x71, 0x26, 0x83, 0x66, 0xd6, 0xbe, 0x98, 0x4b, 0xd3,
+ 0x4c, 0xc7, 0xb0, 0x32, 0x65, 0x8d, 0x20, 0xe2, 0x33, 0x40, 0x0b, 0xb4, 0xbd, 0xda, 0xdc, 0x2c,
+ 0xd5, 0x0c, 0xbd, 0x54, 0xb9, 0x10, 0xae, 0x47, 0x41, 0xf5, 0x6a, 0x70, 0x62, 0xa3, 0x5e, 0x5a,
+ 0xaa, 0xe9, 0xb8, 0xb9, 0x34, 0xea, 0x75, 0xbd, 0x8c, 0xe4, 0xfe, 0x43, 0x78, 0xf7, 0x07, 0x59,
+ 0xe5, 0x98, 0x6f, 0x64, 0x39, 0x31, 0xf2, 0xff, 0x2b, 0x61, 0x37, 0xb7, 0x48, 0xc3, 0x58, 0x5a,
+ 0xe3, 0xc5, 0xe1, 0x0b, 0x42, 0x9e, 0x6d, 0x42, 0x9c, 0xa4, 0xc3, 0xe3, 0xfb, 0x47, 0xc0, 0xe3,
+ 0x6a, 0x70, 0x82, 0xc5, 0x03, 0x7b, 0xb8, 0xc5, 0xc3, 0xf0, 0xc7, 0x32, 0x98, 0x5a, 0xb3, 0xb6,
+ 0xb1, 0x7b, 0xf1, 0x5e, 0x64, 0xa0, 0x2c, 0x00, 0x29, 0xf4, 0xde, 0x91, 0xac, 0x0e, 0x37, 0x99,
+ 0x97, 0xc4, 0xd7, 0x5b, 0x84, 0x26, 0xec, 0x5f, 0x4c, 0xdd, 0x33, 0x51, 0x86, 0x63, 0x7a, 0xa6,
+ 0x17, 0x48, 0x69, 0x7a, 0xa6, 0xc1, 0xb4, 0x52, 0xc1, 0x84, 0x4c, 0x07, 0x17, 0x3e, 0x6b, 0xcf,
+ 0x72, 0x61, 0x07, 0x9b, 0x89, 0xb8, 0xde, 0xb2, 0xc1, 0x27, 0x9e, 0x75, 0x0f, 0x07, 0x26, 0xeb,
+ 0x65, 0x33, 0x07, 0xa6, 0xc3, 0xd1, 0x04, 0x6f, 0xf8, 0xa0, 0x97, 0x7a, 0xbd, 0xb1, 0xb1, 0xb2,
+ 0xba, 0xb9, 0x6c, 0xe8, 0x3a, 0x5d, 0x22, 0xde, 0xd6, 0xde, 0x25, 0x81, 0x79, 0x5a, 0x43, 0xea,
+ 0x3d, 0x71, 0x7d, 0x2c, 0xc8, 0x14, 0x8e, 0x7f, 0x67, 0xa7, 0x27, 0x2b, 0x3c, 0x1c, 0x4f, 0x48,
+ 0x12, 0x61, 0xa2, 0xfb, 0xc4, 0x9b, 0xc2, 0x26, 0x74, 0x3f, 0x07, 0xca, 0x93, 0x53, 0x53, 0xcc,
+ 0x7e, 0x8a, 0xf2, 0x62, 0x00, 0x8a, 0x4d, 0xd8, 0x85, 0x6d, 0x5f, 0xfb, 0x90, 0x3c, 0x72, 0x9b,
+ 0x88, 0x33, 0xb7, 0xe5, 0x54, 0xe6, 0x76, 0x3e, 0x03, 0x73, 0xbb, 0x30, 0xba, 0xb9, 0x5d, 0x4c,
+ 0x6b, 0x6e, 0x4f, 0xc5, 0x99, 0xdb, 0x09, 0xbd, 0xc6, 0x74, 0x62, 0xaf, 0xd1, 0x67, 0xa8, 0x1b,
+ 0x35, 0x6a, 0xd2, 0xf3, 0x89, 0x54, 0x99, 0x3f, 0x51, 0x4c, 0x3b, 0x8e, 0x13, 0xe0, 0x8f, 0xd6,
+ 0x3c, 0xff, 0xb1, 0x42, 0x9a, 0x71, 0x7f, 0x20, 0xc7, 0xe9, 0x5a, 0xc9, 0x2b, 0xf2, 0x19, 0x2c,
+ 0x3a, 0xaa, 0x37, 0x82, 0xeb, 0xa3, 0xe7, 0x4d, 0xfd, 0x99, 0xd5, 0x66, 0xab, 0x89, 0x6d, 0xf2,
+ 0x72, 0xc3, 0x30, 0x36, 0xd6, 0xc9, 0x76, 0xd5, 0x29, 0xa0, 0x46, 0x54, 0x8c, 0x8d, 0x3a, 0xb1,
+ 0xc0, 0xb7, 0x79, 0xea, 0xcb, 0xd5, 0x7a, 0x65, 0x33, 0x1c, 0xd5, 0xea, 0xcb, 0x0d, 0x65, 0x47,
+ 0x5d, 0x04, 0xb7, 0x32, 0xd4, 0x71, 0x07, 0x48, 0x4a, 0x28, 0xd5, 0x2b, 0x9b, 0x6b, 0x75, 0x7d,
+ 0xad, 0x51, 0xaf, 0x96, 0x71, 0x7a, 0x53, 0x6f, 0x29, 0x16, 0x32, 0x05, 0xfb, 0x6c, 0xfe, 0xa6,
+ 0x5e, 0x32, 0xca, 0xab, 0xba, 0x41, 0x8a, 0x7c, 0x50, 0xbd, 0x19, 0x9c, 0x2d, 0xd5, 0x1b, 0x2d,
+ 0x94, 0x52, 0xaa, 0x5f, 0x68, 0x5d, 0x58, 0xd7, 0x37, 0xd7, 0x8d, 0x46, 0x59, 0x6f, 0x36, 0xd1,
+ 0x48, 0x4a, 0x67, 0x08, 0x4a, 0x57, 0x7d, 0x1a, 0xb8, 0x9b, 0x61, 0x4d, 0x6f, 0x61, 0xdf, 0x88,
+ 0xb5, 0x06, 0x76, 0x8f, 0xab, 0xe8, 0x9b, 0xab, 0xa5, 0xe6, 0x66, 0xb5, 0x5e, 0x6e, 0xac, 0xad,
+ 0x97, 0x5a, 0x55, 0x34, 0xe0, 0xae, 0x1b, 0x8d, 0x56, 0x63, 0xf3, 0x9c, 0x6e, 0x34, 0xab, 0x8d,
+ 0xba, 0x62, 0xa3, 0x2a, 0x33, 0x23, 0x74, 0x60, 0x29, 0x39, 0xea, 0x75, 0xe0, 0x74, 0x90, 0x5e,
+ 0x6b, 0x20, 0x41, 0x33, 0x73, 0x86, 0x1e, 0x6b, 0x67, 0x35, 0x5b, 0x0d, 0x83, 0xcc, 0x1a, 0xd6,
+ 0xaa, 0x2b, 0x06, 0x9a, 0xea, 0x28, 0xcf, 0xca, 0x74, 0x4e, 0xf1, 0x2f, 0x12, 0xc8, 0x37, 0x7d,
+ 0xa7, 0xa7, 0x7d, 0x67, 0xd4, 0x1d, 0x9e, 0x01, 0xc0, 0xc5, 0xae, 0x10, 0x15, 0xd3, 0x37, 0xe9,
+ 0x6a, 0x0d, 0x93, 0xa2, 0xfd, 0x9a, 0xf0, 0xfe, 0x6d, 0x64, 0x75, 0x39, 0xbd, 0x98, 0xe1, 0xe3,
+ 0x9b, 0x62, 0xc7, 0x21, 0xe3, 0x09, 0xa5, 0x6b, 0x0f, 0x3f, 0x32, 0xca, 0x0e, 0xad, 0x06, 0x4e,
+ 0x31, 0xb0, 0x22, 0xf9, 0x07, 0x2a, 0x03, 0xd5, 0x47, 0x81, 0xab, 0xfa, 0x94, 0x0f, 0xeb, 0xdc,
+ 0x96, 0xfa, 0x1d, 0xe0, 0xd1, 0x8c, 0xfa, 0xeb, 0x6b, 0x8d, 0x73, 0x7a, 0xa8, 0xe8, 0x95, 0x52,
+ 0xab, 0xa4, 0x6c, 0x6b, 0x9f, 0x97, 0x41, 0x7e, 0xcd, 0xb9, 0xdc, 0xbf, 0x6d, 0x6e, 0xc3, 0x2b,
+ 0xcc, 0xde, 0x4a, 0xf0, 0xc8, 0x1f, 0xc1, 0x12, 0x12, 0xfb, 0x5a, 0xbc, 0x8b, 0xcc, 0x17, 0xa4,
+ 0x34, 0x62, 0x5f, 0x3b, 0xac, 0x5f, 0xcc, 0xdf, 0x8c, 0x22, 0xf6, 0x18, 0xd1, 0x42, 0xf5, 0x2c,
+ 0x38, 0x13, 0xbd, 0xa8, 0x56, 0xf4, 0x7a, 0xab, 0xba, 0x7c, 0x21, 0x12, 0x6e, 0xd5, 0x10, 0x12,
+ 0xff, 0xb0, 0x6e, 0x2e, 0x79, 0xad, 0xe0, 0x34, 0x38, 0x19, 0xbd, 0x5b, 0xd1, 0x5b, 0xc1, 0x9b,
+ 0x07, 0xb5, 0x87, 0x0b, 0x60, 0x8e, 0x74, 0xfb, 0x1b, 0xbd, 0x0e, 0xb2, 0xbe, 0x9f, 0x18, 0xa1,
+ 0x7b, 0x0b, 0x38, 0x5e, 0x5d, 0x5f, 0x6e, 0x36, 0x7d, 0xc7, 0x35, 0xb7, 0x21, 0x1e, 0x47, 0x89,
+ 0xb4, 0xfa, 0x93, 0xb5, 0xf7, 0x0a, 0xaf, 0xfe, 0xf3, 0x43, 0x0d, 0x29, 0x33, 0x06, 0xf5, 0xaf,
+ 0x08, 0xad, 0xd6, 0x0b, 0x10, 0x4c, 0x87, 0xfe, 0x83, 0x63, 0x6e, 0x73, 0xf1, 0xb8, 0x6c, 0x9d,
+ 0x7d, 0x9e, 0x04, 0x66, 0x5a, 0xd6, 0x2e, 0x7c, 0xb6, 0x63, 0x43, 0x4f, 0x9d, 0x02, 0xf2, 0xca,
+ 0x5a, 0x4b, 0x39, 0x86, 0xfe, 0xa0, 0x69, 0x51, 0x0e, 0xff, 0xd1, 0x51, 0x01, 0xe8, 0x4f, 0xa9,
+ 0xa5, 0xc8, 0xe8, 0xcf, 0x9a, 0xde, 0x52, 0xf2, 0xe8, 0x4f, 0x5d, 0x6f, 0x29, 0x05, 0xf4, 0x67,
+ 0xbd, 0xd6, 0x52, 0x8a, 0xe8, 0x4f, 0xb5, 0xd9, 0x52, 0xa6, 0xd0, 0x9f, 0xa5, 0x66, 0x4b, 0x99,
+ 0x46, 0x7f, 0xce, 0x35, 0x5b, 0xca, 0x0c, 0xfa, 0x53, 0x6e, 0xb5, 0x14, 0x80, 0xfe, 0xdc, 0xdf,
+ 0x6c, 0x29, 0xb3, 0xe8, 0x4f, 0xa9, 0xdc, 0x52, 0xe6, 0xf0, 0x1f, 0xbd, 0xa5, 0xcc, 0xa3, 0x3f,
+ 0xcd, 0x66, 0x4b, 0x59, 0xc0, 0x94, 0x9b, 0x2d, 0xe5, 0x38, 0x2e, 0xab, 0xda, 0x52, 0x14, 0xf4,
+ 0x67, 0xb5, 0xd9, 0x52, 0x4e, 0xe0, 0xcc, 0xcd, 0x96, 0xa2, 0xe2, 0x42, 0x9b, 0x2d, 0xe5, 0x2a,
+ 0x9c, 0xa7, 0xd9, 0x52, 0x4e, 0xe2, 0x22, 0x9a, 0x2d, 0xe5, 0x6a, 0xcc, 0x86, 0xde, 0x52, 0x4e,
+ 0xe1, 0x3c, 0x46, 0x4b, 0x79, 0x14, 0x7e, 0x55, 0x6f, 0x29, 0xa7, 0x31, 0x63, 0x7a, 0x4b, 0xb9,
+ 0x06, 0xff, 0x31, 0x5a, 0x8a, 0x86, 0x5f, 0x95, 0x5a, 0xca, 0xb5, 0xda, 0xa3, 0xc1, 0xcc, 0x0a,
+ 0xf4, 0x09, 0x88, 0x9a, 0x02, 0xe4, 0x15, 0xe8, 0xb3, 0x13, 0xf1, 0x57, 0xe6, 0xc1, 0xa3, 0xe8,
+ 0xe2, 0xcd, 0xb2, 0xeb, 0xec, 0xd6, 0xe0, 0xb6, 0xd9, 0xde, 0xd7, 0x1f, 0x42, 0x06, 0x9f, 0xf6,
+ 0xa2, 0x1c, 0xb7, 0xa2, 0xdd, 0x8b, 0x7a, 0x23, 0xfc, 0x3f, 0xd1, 0x40, 0x0e, 0xd6, 0xa8, 0x65,
+ 0x7e, 0x8d, 0x3a, 0xce, 0x24, 0xcc, 0x8b, 0x4c, 0x24, 0xff, 0x81, 0x6d, 0x0c, 0xdc, 0x86, 0x54,
+ 0xae, 0x6f, 0x43, 0x0a, 0xb5, 0xb0, 0x1e, 0x74, 0x3d, 0xc7, 0x36, 0xbb, 0x4d, 0xea, 0x7e, 0x44,
+ 0xe6, 0xaa, 0xfd, 0xc9, 0xea, 0x33, 0x82, 0x46, 0x45, 0x0c, 0xbe, 0xa7, 0x26, 0x2d, 0x6f, 0xf5,
+ 0x4b, 0x28, 0xa6, 0x7d, 0x7d, 0x26, 0x6c, 0x5f, 0x2d, 0xae, 0x7d, 0x3d, 0xfd, 0x10, 0xb4, 0xd3,
+ 0x35, 0xb5, 0xea, 0x68, 0x53, 0xd1, 0xc8, 0x39, 0x3f, 0xd8, 0xff, 0x92, 0xb5, 0xcf, 0x4b, 0xe0,
+ 0x94, 0x6e, 0x0f, 0x9a, 0xca, 0xb0, 0x6a, 0xf4, 0x56, 0x16, 0x9a, 0x75, 0x5e, 0xa4, 0x77, 0x0f,
+ 0xac, 0xf6, 0x60, 0x9a, 0x31, 0x12, 0xfd, 0xad, 0x50, 0xa2, 0x4d, 0x4e, 0xa2, 0xf7, 0x8d, 0x4e,
+ 0x3a, 0x9d, 0x40, 0xeb, 0x63, 0xed, 0xbb, 0xf2, 0xda, 0x5f, 0x48, 0xe0, 0x04, 0xf1, 0x20, 0xbc,
+ 0x9f, 0xcc, 0x9c, 0x70, 0x6f, 0xcf, 0x5b, 0x5f, 0xdd, 0x68, 0x96, 0x45, 0xf4, 0x9b, 0x49, 0xd1,
+ 0x5e, 0xc7, 0x0a, 0xfc, 0x01, 0x5e, 0xe0, 0x31, 0xfd, 0x78, 0x7f, 0x71, 0x31, 0xb2, 0xfe, 0xf5,
+ 0x50, 0xd6, 0x75, 0x4e, 0xd6, 0x77, 0x8f, 0x44, 0xf5, 0x68, 0xc5, 0xfc, 0xd5, 0x3c, 0x78, 0x34,
+ 0xe1, 0x90, 0x2a, 0x02, 0xe9, 0x07, 0x4b, 0x76, 0xc7, 0x80, 0x9e, 0x6f, 0xba, 0x3e, 0x17, 0x7a,
+ 0xa5, 0x6f, 0x6a, 0x9e, 0xcb, 0x60, 0x6a, 0x2e, 0x0d, 0x9d, 0x9a, 0x6b, 0xef, 0x61, 0x0d, 0xbc,
+ 0xf3, 0x3c, 0xb2, 0xa5, 0x04, 0x0c, 0x62, 0x6a, 0x18, 0xd7, 0xa2, 0x42, 0xcb, 0xef, 0x7b, 0x38,
+ 0x94, 0x97, 0x0f, 0x5d, 0x42, 0x3a, 0xc4, 0x7f, 0x6d, 0xbc, 0x96, 0x78, 0x9e, 0x7d, 0xc7, 0x9b,
+ 0x8d, 0x4a, 0x27, 0xd3, 0x29, 0xd4, 0x4b, 0xa6, 0xc1, 0x0c, 0xee, 0x72, 0x6a, 0x96, 0x7d, 0x49,
+ 0xfb, 0x73, 0x19, 0xcc, 0xd5, 0xe1, 0x95, 0xf2, 0x8e, 0xd9, 0xed, 0x42, 0x7b, 0x1b, 0x6a, 0x0f,
+ 0x72, 0xb6, 0xbd, 0xd9, 0xeb, 0xd5, 0xa3, 0xfd, 0xe1, 0xe0, 0x51, 0xbd, 0x0f, 0x14, 0xbc, 0xb6,
+ 0x13, 0x06, 0x75, 0xf8, 0xce, 0x98, 0xd5, 0xeb, 0xd2, 0x9e, 0xbf, 0xb3, 0x88, 0xcb, 0x2a, 0xf5,
+ 0xac, 0x26, 0xfa, 0xc0, 0x20, 0xdf, 0xd1, 0x71, 0xf2, 0xaf, 0x06, 0x76, 0xc6, 0xb9, 0x84, 0xce,
+ 0x38, 0x64, 0x7c, 0x91, 0x65, 0x3a, 0x66, 0x91, 0xe4, 0x06, 0x30, 0xdb, 0x0e, 0xb2, 0x84, 0xa7,
+ 0xf4, 0xd8, 0x24, 0xed, 0x2f, 0x53, 0x75, 0xd7, 0x42, 0x85, 0xa7, 0xd3, 0x2a, 0x38, 0x66, 0x53,
+ 0xf3, 0x6a, 0x70, 0xa2, 0xd5, 0x68, 0x6c, 0xae, 0x95, 0xea, 0x17, 0xa2, 0xd8, 0x2a, 0x5b, 0xda,
+ 0x2b, 0xf2, 0x60, 0xa1, 0xe9, 0x74, 0x2f, 0xc3, 0x08, 0xe7, 0x2a, 0xe7, 0xfe, 0xc9, 0xca, 0x29,
+ 0x77, 0x40, 0x4e, 0xea, 0x29, 0x50, 0x34, 0x6d, 0xef, 0x0a, 0x0c, 0xcc, 0x7f, 0xfa, 0x44, 0x61,
+ 0xfc, 0x08, 0xdb, 0x11, 0x18, 0x3c, 0x8c, 0xf7, 0x0c, 0x91, 0x24, 0xcf, 0x55, 0x0c, 0x90, 0x67,
+ 0xc1, 0x9c, 0x47, 0xbc, 0x44, 0x5a, 0x8c, 0x33, 0x10, 0x97, 0x86, 0x59, 0x24, 0x6e, 0x4a, 0x32,
+ 0x65, 0x11, 0x3f, 0x69, 0xaf, 0x0d, 0xfb, 0x8f, 0x0d, 0x0e, 0xe2, 0xd2, 0x61, 0x18, 0x4b, 0x07,
+ 0xf2, 0xab, 0xc6, 0x3d, 0x89, 0x3f, 0x0d, 0x4e, 0x06, 0x27, 0xd4, 0xcb, 0xab, 0xa5, 0x5a, 0x4d,
+ 0xaf, 0xaf, 0xe8, 0x9b, 0xd5, 0x0a, 0xd9, 0x4f, 0x8e, 0x52, 0x4a, 0xad, 0x96, 0xbe, 0xb6, 0xde,
+ 0x6a, 0x6e, 0xea, 0xcf, 0x2c, 0xeb, 0x7a, 0x05, 0x3b, 0x60, 0xe3, 0x13, 0x94, 0x81, 0xab, 0x7c,
+ 0xa9, 0xde, 0x3c, 0xaf, 0x1b, 0xca, 0xce, 0xd9, 0x12, 0x98, 0x65, 0x06, 0x0a, 0xc4, 0x5d, 0x05,
+ 0x6e, 0x99, 0x7b, 0x5d, 0x6a, 0x8e, 0x2b, 0xc7, 0x10, 0x77, 0x58, 0x36, 0x0d, 0xbb, 0xbb, 0xaf,
+ 0xe4, 0x54, 0x05, 0xcc, 0xb1, 0x63, 0x82, 0x22, 0x69, 0xef, 0xbc, 0x0e, 0xcc, 0x9c, 0x77, 0xdc,
+ 0x4b, 0xd8, 0x6b, 0x58, 0xfb, 0x00, 0x89, 0xc1, 0x16, 0x44, 0x94, 0x60, 0x0c, 0xb0, 0x57, 0x89,
+ 0xbb, 0x89, 0x05, 0xd4, 0x16, 0x87, 0x46, 0x8d, 0xb8, 0x01, 0xcc, 0x5e, 0x09, 0x72, 0x47, 0x2d,
+ 0x9d, 0x49, 0xd2, 0x7e, 0x51, 0xcc, 0xf1, 0x6b, 0x78, 0x91, 0xd9, 0xaf, 0xfa, 0xbf, 0x5d, 0x02,
+ 0xc5, 0x15, 0xe8, 0x97, 0xba, 0x5d, 0x56, 0x6e, 0x2f, 0x13, 0x3e, 0x47, 0xca, 0x55, 0xa2, 0xd4,
+ 0xed, 0xc6, 0x37, 0x2a, 0x46, 0x40, 0xc1, 0x79, 0x27, 0x2e, 0x4d, 0xd0, 0x4b, 0x7b, 0x48, 0x81,
+ 0xd9, 0x4b, 0xec, 0x63, 0x91, 0x6b, 0xf6, 0xeb, 0x19, 0x33, 0xe9, 0x09, 0x51, 0xfc, 0xbd, 0x5c,
+ 0xb2, 0x93, 0x54, 0x90, 0x4f, 0x7d, 0x00, 0x4c, 0xed, 0x79, 0xb0, 0x6c, 0x7a, 0xc1, 0xd0, 0xc6,
+ 0xd7, 0xb4, 0x71, 0xf1, 0x41, 0xd8, 0xf6, 0x17, 0xab, 0xbb, 0x68, 0xe2, 0xb3, 0x41, 0x32, 0x86,
+ 0xf1, 0x8a, 0xe8, 0xb3, 0x11, 0x50, 0x40, 0xd3, 0xce, 0x2b, 0x96, 0xbf, 0x53, 0xde, 0x31, 0x7d,
+ 0xba, 0xd9, 0x12, 0x3e, 0x6b, 0x2f, 0x1e, 0x01, 0xce, 0x44, 0x87, 0x9d, 0xd8, 0xe3, 0xe8, 0xa9,
+ 0x41, 0x1c, 0x83, 0x97, 0xcd, 0x28, 0x20, 0xfe, 0xad, 0x04, 0xf2, 0x8d, 0x1e, 0xb4, 0x85, 0xcf,
+ 0x5e, 0x86, 0xb2, 0x95, 0xfa, 0x64, 0xfb, 0x5a, 0x71, 0xb7, 0xe0, 0xb0, 0xd2, 0xa8, 0xe4, 0x18,
+ 0xc9, 0xde, 0x0e, 0xf2, 0x96, 0xbd, 0xe5, 0x50, 0xcb, 0xf6, 0xda, 0x18, 0x5b, 0xa7, 0x6a, 0x6f,
+ 0x39, 0x06, 0xce, 0x28, 0xea, 0x11, 0x9c, 0x54, 0x76, 0xf6, 0xe2, 0xfe, 0xbb, 0x69, 0x50, 0x24,
+ 0xea, 0xac, 0xbd, 0x54, 0x06, 0x72, 0xa9, 0xd3, 0x89, 0x11, 0xbc, 0x74, 0x40, 0xf0, 0x0e, 0xfe,
+ 0x2c, 0xc4, 0x24, 0x7c, 0xe6, 0x03, 0xaf, 0x09, 0xf6, 0xed, 0xb4, 0x49, 0x95, 0x3a, 0x9d, 0xf8,
+ 0x73, 0x0b, 0x61, 0x81, 0x12, 0x5f, 0x20, 0xdb, 0xc2, 0x65, 0xb1, 0x16, 0x9e, 0x7a, 0x20, 0x88,
+ 0xe5, 0x2f, 0x7b, 0x88, 0xfe, 0x41, 0x02, 0x53, 0x35, 0xcb, 0xf3, 0x11, 0x36, 0x25, 0x11, 0x6c,
+ 0xae, 0x03, 0x33, 0x81, 0x68, 0x50, 0x97, 0x87, 0xfa, 0xf3, 0x28, 0x81, 0x9f, 0x89, 0xdf, 0xcf,
+ 0xa3, 0xf3, 0xa4, 0xe4, 0xda, 0x53, 0x2e, 0xe2, 0xcf, 0xb4, 0x45, 0xc5, 0x4a, 0xfd, 0xc5, 0xfe,
+ 0x52, 0x28, 0xf0, 0x35, 0x4e, 0xe0, 0x77, 0x8d, 0x52, 0x64, 0xf6, 0x42, 0xff, 0x7d, 0x09, 0x00,
+ 0x54, 0x36, 0x3d, 0x38, 0xfc, 0x58, 0x2e, 0x1c, 0x48, 0x82, 0x74, 0x5f, 0xc1, 0x4a, 0x77, 0x8d,
+ 0x97, 0xee, 0x77, 0x0f, 0xaf, 0x6a, 0xd2, 0x01, 0x61, 0x55, 0x01, 0xb2, 0x15, 0x8a, 0x16, 0xfd,
+ 0xd5, 0xde, 0x1e, 0x0a, 0x75, 0x9d, 0x13, 0xea, 0x3d, 0x23, 0x96, 0x94, 0xbd, 0x5c, 0xff, 0x48,
+ 0x02, 0x53, 0x4d, 0xe8, 0xa3, 0x6e, 0x52, 0x3b, 0x27, 0xd2, 0xc3, 0x33, 0x6d, 0x5b, 0x12, 0x6c,
+ 0xdb, 0xdf, 0xc8, 0x89, 0x06, 0x86, 0x8b, 0x24, 0x43, 0x79, 0x8a, 0x59, 0x7d, 0x78, 0xbd, 0x50,
+ 0x60, 0xb8, 0x61, 0xd4, 0xb2, 0x97, 0xee, 0x5b, 0xa5, 0xd0, 0x53, 0x84, 0x3f, 0xd7, 0xc7, 0x9a,
+ 0xc5, 0xb9, 0x83, 0x66, 0xb1, 0xf8, 0xb9, 0x3e, 0xb6, 0x8e, 0xf1, 0x8e, 0x09, 0xa9, 0x8d, 0x8d,
+ 0x31, 0xf8, 0x0c, 0x8c, 0x22, 0xaf, 0xe7, 0xca, 0xa0, 0x48, 0x37, 0x0f, 0xee, 0x4b, 0xde, 0x3b,
+ 0x18, 0x3e, 0xb5, 0x78, 0xff, 0x08, 0xa6, 0x5c, 0xd2, 0xb2, 0x7c, 0xc8, 0x86, 0xc4, 0xb0, 0x71,
+ 0x1b, 0x28, 0xe0, 0xa8, 0xd9, 0x74, 0x9c, 0x8b, 0xdc, 0x3d, 0x02, 0x12, 0x3a, 0x7a, 0x6b, 0x90,
+ 0x4c, 0xa9, 0x51, 0x18, 0xc3, 0x4a, 0xfe, 0x28, 0x28, 0x7c, 0x55, 0x05, 0x60, 0x7d, 0xef, 0x62,
+ 0xd7, 0xf2, 0x76, 0x2c, 0x1b, 0xfb, 0x88, 0xcd, 0xd1, 0x47, 0x12, 0xfc, 0x39, 0xd1, 0xfc, 0x8b,
+ 0x35, 0x0a, 0x14, 0x20, 0xef, 0xb9, 0x16, 0x5d, 0x06, 0x40, 0x7f, 0xd5, 0x7b, 0x43, 0x6f, 0xcb,
+ 0x7c, 0x5f, 0xe0, 0x16, 0x24, 0x86, 0x88, 0x83, 0x45, 0xa6, 0xf4, 0xc8, 0xeb, 0x92, 0x8d, 0xf0,
+ 0x5d, 0xe0, 0x23, 0x7c, 0x73, 0xa7, 0xb9, 0x8b, 0x7d, 0xa7, 0xb9, 0x11, 0x8e, 0x9e, 0xf5, 0x6c,
+ 0x88, 0x5d, 0x8f, 0x64, 0x03, 0xff, 0x47, 0x5f, 0x60, 0xf7, 0x20, 0xec, 0x9d, 0x47, 0xce, 0x0c,
+ 0x44, 0x09, 0x6c, 0x9f, 0x37, 0x23, 0xd8, 0xe7, 0x7d, 0x34, 0x9a, 0xfb, 0x38, 0x82, 0x86, 0x73,
+ 0x0a, 0xc9, 0x71, 0xec, 0xe6, 0xfb, 0xd8, 0xd5, 0x3e, 0x21, 0x1c, 0x88, 0x93, 0x91, 0x71, 0xe2,
+ 0x2c, 0x86, 0x72, 0x20, 0x85, 0x1c, 0x30, 0x7b, 0xc0, 0x49, 0x3d, 0xf0, 0x30, 0xfa, 0xe9, 0x74,
+ 0x79, 0x77, 0x84, 0xf5, 0x1a, 0x15, 0x2c, 0x04, 0xc7, 0xe2, 0x1b, 0x4b, 0xf7, 0xeb, 0xe5, 0x96,
+ 0x02, 0x0f, 0x1e, 0x95, 0xc7, 0x87, 0xe2, 0xc9, 0x01, 0xf8, 0x68, 0x4d, 0x46, 0xfb, 0x1f, 0x12,
+ 0x28, 0x52, 0x73, 0xe3, 0xbe, 0x43, 0x42, 0xa8, 0xbd, 0x72, 0x14, 0x48, 0x12, 0xa3, 0x93, 0x7c,
+ 0x36, 0x2d, 0x00, 0x63, 0x30, 0x30, 0x2e, 0x64, 0x06, 0x80, 0xf6, 0xcf, 0x12, 0xc8, 0x23, 0x33,
+ 0x48, 0x2c, 0xf6, 0xc3, 0x67, 0x84, 0x5d, 0x82, 0x19, 0x01, 0x20, 0xf2, 0x31, 0xfa, 0xbd, 0x04,
+ 0x66, 0x7a, 0x24, 0x63, 0x18, 0x79, 0xe4, 0x26, 0x81, 0xce, 0x08, 0x1a, 0xd1, 0x67, 0xda, 0xfb,
+ 0x84, 0x0e, 0x3c, 0x24, 0xf3, 0x93, 0x0e, 0x0e, 0x7d, 0x1c, 0x61, 0x22, 0xb6, 0xb4, 0x7f, 0x95,
+ 0x00, 0x30, 0xa0, 0xe7, 0x74, 0x2f, 0xc3, 0x0d, 0xd7, 0xd2, 0xae, 0x8d, 0x00, 0xa0, 0xcd, 0x3e,
+ 0x17, 0x35, 0xfb, 0xcf, 0x49, 0xa2, 0xce, 0xbf, 0x9c, 0xe6, 0x05, 0xc4, 0x63, 0xc4, 0xff, 0x34,
+ 0x30, 0x45, 0xe5, 0x48, 0x6d, 0x4a, 0x31, 0xe1, 0x07, 0x1f, 0x69, 0x1f, 0x14, 0x72, 0x1e, 0x16,
+ 0xe1, 0x28, 0x1d, 0x00, 0xe5, 0x11, 0x00, 0x38, 0x0e, 0x66, 0x03, 0x00, 0x36, 0x8c, 0xaa, 0x02,
+ 0xb5, 0x77, 0xcb, 0xd8, 0xc3, 0x82, 0x0c, 0x6e, 0x87, 0xef, 0x69, 0xfe, 0x42, 0x78, 0xb2, 0xcf,
+ 0xc8, 0x23, 0x2c, 0x3f, 0x23, 0x80, 0x7e, 0x5b, 0x68, 0x76, 0x2f, 0xc0, 0xd0, 0x23, 0xa5, 0xbf,
+ 0x3a, 0xab, 0x83, 0x79, 0xce, 0x2a, 0x51, 0x4f, 0x83, 0x93, 0x5c, 0x02, 0x19, 0xef, 0x3a, 0xca,
+ 0x31, 0x55, 0x03, 0xa7, 0xb8, 0x37, 0xf4, 0x01, 0x76, 0x94, 0x9c, 0xf6, 0xc7, 0x7f, 0x94, 0x0b,
+ 0xd7, 0x7b, 0xde, 0x9f, 0xa7, 0x2b, 0x6d, 0x9f, 0xe2, 0x83, 0x5d, 0xb6, 0x1d, 0xdb, 0x87, 0x0f,
+ 0x31, 0x6e, 0x2a, 0x61, 0x42, 0xa2, 0xd5, 0x70, 0x1a, 0x4c, 0xf9, 0x2e, 0xeb, 0xba, 0x12, 0x3c,
+ 0xb2, 0x8a, 0x55, 0xe0, 0x15, 0xab, 0x0e, 0xce, 0x5a, 0x76, 0xbb, 0xbb, 0xd7, 0x81, 0x06, 0xec,
+ 0x9a, 0x48, 0x86, 0x5e, 0xc9, 0xab, 0xc0, 0x1e, 0xb4, 0x3b, 0xd0, 0xf6, 0x09, 0x9f, 0xc1, 0xb9,
+ 0x57, 0x81, 0x9c, 0xbc, 0x32, 0xde, 0xcb, 0x2b, 0xe3, 0x63, 0x07, 0x2d, 0xe1, 0x26, 0xac, 0xf7,
+ 0xdd, 0x05, 0x00, 0xa9, 0xdb, 0x39, 0x0b, 0x5e, 0xa1, 0x6a, 0x78, 0x4d, 0xdf, 0xaa, 0x5f, 0x23,
+ 0xcc, 0x60, 0x30, 0x99, 0xb5, 0x2f, 0x87, 0xea, 0xf7, 0x74, 0x4e, 0xfd, 0x6e, 0x13, 0x64, 0x21,
+ 0x9d, 0xd6, 0xf5, 0x46, 0xd0, 0xba, 0x79, 0x30, 0x13, 0xed, 0x26, 0xcb, 0xea, 0x35, 0xe0, 0xea,
+ 0xc0, 0xc3, 0xb8, 0xae, 0xeb, 0x95, 0xe6, 0xe6, 0xc6, 0xfa, 0x8a, 0x51, 0xaa, 0xe8, 0x0a, 0x40,
+ 0xfa, 0x49, 0xf4, 0x32, 0x74, 0x0c, 0xce, 0x6b, 0x7f, 0x20, 0x81, 0x02, 0x3e, 0xb4, 0xad, 0x7d,
+ 0xdf, 0x98, 0x34, 0xc7, 0xe3, 0x9c, 0x9e, 0xc2, 0x71, 0x57, 0xfc, 0x0a, 0x13, 0x2a, 0x4c, 0xcc,
+ 0xd5, 0xa1, 0xae, 0x30, 0x49, 0x20, 0x94, 0xfd, 0x4c, 0x08, 0x35, 0xc9, 0xe6, 0x8e, 0x73, 0xe5,
+ 0x3f, 0x73, 0x93, 0x44, 0xf5, 0x3f, 0xe2, 0x26, 0x39, 0x80, 0x85, 0x89, 0x37, 0xc9, 0x01, 0xed,
+ 0x2e, 0xa1, 0x99, 0x6a, 0x1f, 0x29, 0x84, 0xf3, 0xbf, 0x4f, 0x4a, 0x87, 0xda, 0xfb, 0x2a, 0x81,
+ 0x79, 0xcb, 0xf6, 0xa1, 0x6b, 0x9b, 0xdd, 0xe5, 0xae, 0xb9, 0x1d, 0xd8, 0xa7, 0xfd, 0x1b, 0x1e,
+ 0x55, 0x26, 0x8f, 0xc1, 0x7f, 0xa1, 0x9e, 0x01, 0xc0, 0x87, 0xbb, 0xbd, 0xae, 0xe9, 0x47, 0xaa,
+ 0xc7, 0xa4, 0xb0, 0xda, 0x97, 0xe7, 0xb5, 0xef, 0x0e, 0x70, 0x15, 0x01, 0xad, 0xb5, 0xdf, 0x83,
+ 0x1b, 0xb6, 0xf5, 0xac, 0x3d, 0x1c, 0x1b, 0x99, 0xe8, 0xe8, 0xa0, 0x57, 0xdc, 0x0e, 0x50, 0x91,
+ 0xdf, 0x01, 0x52, 0xef, 0x01, 0xd7, 0xe0, 0xb0, 0xd7, 0xf8, 0x8e, 0x90, 0xf3, 0x56, 0x67, 0x1b,
+ 0xfa, 0xd5, 0xad, 0x35, 0xcb, 0xf3, 0x2c, 0x7b, 0x1b, 0x4f, 0xc7, 0xa7, 0x8d, 0xf8, 0x0c, 0xda,
+ 0xdf, 0x0a, 0xc7, 0x5d, 0x0a, 0xfa, 0x8c, 0x21, 0x71, 0x97, 0xc2, 0x76, 0x2a, 0xf7, 0xb5, 0xd3,
+ 0x70, 0x55, 0x27, 0x2f, 0xb0, 0xaa, 0xc3, 0x62, 0x5a, 0x10, 0x5c, 0x1d, 0x78, 0x8d, 0x50, 0x60,
+ 0xa7, 0xa4, 0x6a, 0x64, 0xdf, 0xf7, 0x7d, 0x5d, 0x06, 0x0b, 0xa4, 0xe8, 0x25, 0xc7, 0xb9, 0xb4,
+ 0x6b, 0xba, 0x97, 0xb4, 0x9f, 0x38, 0xdc, 0x2e, 0x6e, 0xe2, 0xee, 0x55, 0xdc, 0x96, 0x6c, 0x9f,
+ 0xf2, 0xe6, 0xfb, 0x95, 0x57, 0xfb, 0x2d, 0xe1, 0x29, 0x09, 0x27, 0xcf, 0xa0, 0x52, 0x93, 0xd9,
+ 0xde, 0x12, 0x3b, 0xde, 0x28, 0xc2, 0x60, 0xf6, 0xc0, 0xff, 0x46, 0x08, 0x7c, 0x30, 0x8e, 0xb0,
+ 0x3b, 0x03, 0xe3, 0xc4, 0x5d, 0xfb, 0xca, 0x68, 0xd8, 0x05, 0x7c, 0x8d, 0x80, 0x9d, 0x02, 0xe4,
+ 0x4b, 0xa1, 0x33, 0x12, 0xfa, 0xcb, 0x56, 0x28, 0x9f, 0x1d, 0x9a, 0x31, 0x2c, 0x4f, 0x04, 0xcd,
+ 0x93, 0x3c, 0x0b, 0x8d, 0x5e, 0xa6, 0x98, 0x7e, 0x49, 0x78, 0xc7, 0x6d, 0xa0, 0x80, 0x08, 0x77,
+ 0x93, 0x69, 0x95, 0x62, 0xdb, 0x75, 0xe2, 0x6c, 0x66, 0x8f, 0xe6, 0x8b, 0x0a, 0x60, 0x26, 0x88,
+ 0x7f, 0x85, 0x6f, 0x14, 0x0c, 0x31, 0x3c, 0x05, 0x8a, 0x9e, 0xb3, 0xe7, 0xb6, 0x21, 0xdd, 0x03,
+ 0xa5, 0x4f, 0x23, 0xec, 0xd7, 0x0d, 0x35, 0x17, 0x0e, 0x58, 0x24, 0xf9, 0xd4, 0x16, 0x49, 0xbc,
+ 0xbd, 0x9b, 0x60, 0x3f, 0x68, 0x2f, 0x16, 0xbe, 0xf6, 0x83, 0xc3, 0xac, 0x09, 0xfd, 0x47, 0xa2,
+ 0x11, 0xf0, 0xab, 0x42, 0xbb, 0x41, 0x43, 0x6a, 0x92, 0x4e, 0xe5, 0x1a, 0x23, 0xd8, 0xc1, 0xd7,
+ 0x82, 0x47, 0x05, 0x39, 0xa8, 0x01, 0x8c, 0x0d, 0xde, 0x0d, 0xa3, 0xa6, 0xc8, 0xda, 0x73, 0xf3,
+ 0x40, 0x21, 0xac, 0x35, 0x42, 0x5b, 0x50, 0x7b, 0x59, 0xee, 0xa8, 0x0d, 0xde, 0xf8, 0x19, 0xec,
+ 0xef, 0x4a, 0xa2, 0xc1, 0xc2, 0x39, 0xc1, 0x47, 0xb5, 0x8b, 0xd1, 0xa4, 0x11, 0x9a, 0x59, 0x82,
+ 0xf2, 0x69, 0x6f, 0xc9, 0x89, 0xc4, 0x1e, 0x17, 0x63, 0x31, 0xfb, 0x5e, 0xe9, 0x1b, 0xf9, 0x20,
+ 0x8c, 0xe1, 0xb2, 0xeb, 0xec, 0x6e, 0xb8, 0x5d, 0xed, 0xdf, 0x84, 0xae, 0x76, 0x88, 0x99, 0x5d,
+ 0x48, 0xf1, 0xb3, 0x0b, 0xbc, 0x22, 0xdd, 0x8d, 0xb6, 0xc2, 0xba, 0x23, 0x0c, 0xdf, 0xea, 0xcd,
+ 0x60, 0xc1, 0xec, 0x74, 0xd6, 0xcd, 0x6d, 0x58, 0x46, 0xd3, 0x76, 0xdb, 0xa7, 0x21, 0xce, 0xfa,
+ 0x52, 0x13, 0xa7, 0x32, 0x7c, 0x1f, 0x39, 0x75, 0xc0, 0x2a, 0x15, 0x5f, 0x86, 0xe5, 0x40, 0xa4,
+ 0xf2, 0x9b, 0xc8, 0xf0, 0x87, 0x86, 0x8c, 0xf6, 0x8e, 0x19, 0x05, 0x64, 0xa4, 0x4f, 0x82, 0xbe,
+ 0x58, 0x02, 0x7c, 0x67, 0xaf, 0x79, 0xbf, 0x22, 0x81, 0x29, 0x84, 0x47, 0xa9, 0xd3, 0xd1, 0x1e,
+ 0xc3, 0xc5, 0x2d, 0x8d, 0xf5, 0x86, 0x7b, 0x81, 0xb0, 0x1b, 0x62, 0x50, 0x43, 0x42, 0x3f, 0x06,
+ 0x93, 0x48, 0x88, 0x12, 0x27, 0x44, 0x31, 0x6f, 0xc3, 0xc4, 0x22, 0xb2, 0x17, 0xdf, 0x67, 0x24,
+ 0x30, 0x1f, 0xcc, 0x33, 0x96, 0xa1, 0xdf, 0xde, 0xd1, 0xee, 0x12, 0x5d, 0xe7, 0xa2, 0x2d, 0x31,
+ 0xdc, 0x12, 0xee, 0x6a, 0xdf, 0xca, 0xa5, 0x54, 0x79, 0xae, 0xe4, 0x98, 0x45, 0xc2, 0x54, 0xba,
+ 0x98, 0x44, 0x30, 0x7b, 0x61, 0x7e, 0x59, 0x02, 0xa0, 0xe5, 0x84, 0x93, 0xe5, 0x43, 0x48, 0xf2,
+ 0x27, 0x85, 0x77, 0x8b, 0x69, 0xc5, 0xa3, 0x62, 0xd3, 0xf7, 0x1c, 0x82, 0xce, 0x54, 0xc3, 0x4a,
+ 0x9a, 0x48, 0x5b, 0x9f, 0xa9, 0xec, 0xf5, 0xba, 0x56, 0xdb, 0xf4, 0xfb, 0x3d, 0x00, 0xe3, 0xc5,
+ 0x8b, 0xaf, 0xe3, 0x4e, 0x65, 0x34, 0x86, 0x65, 0xc4, 0xc8, 0x92, 0xc4, 0xf9, 0x91, 0x82, 0x38,
+ 0x3f, 0x82, 0x5e, 0x3d, 0x43, 0x88, 0x4f, 0x40, 0x3d, 0x65, 0x70, 0xbc, 0xd1, 0x83, 0xf6, 0x92,
+ 0x0b, 0xcd, 0x4e, 0xdb, 0xdd, 0xdb, 0xbd, 0xe8, 0xb1, 0xee, 0xab, 0xc9, 0x3a, 0xca, 0xac, 0x5c,
+ 0x4b, 0xdc, 0xca, 0xb5, 0xf6, 0xc3, 0xb2, 0x68, 0x24, 0x36, 0x66, 0x7f, 0x85, 0xe1, 0x61, 0x84,
+ 0xa1, 0x2e, 0x95, 0xd3, 0x55, 0xdf, 0x22, 0x75, 0x3e, 0xcd, 0x22, 0xf5, 0x9b, 0x85, 0xe2, 0xba,
+ 0x09, 0xd5, 0x6b, 0x22, 0xbe, 0x73, 0x0b, 0x4d, 0xe8, 0xc7, 0xc0, 0x7b, 0x13, 0x98, 0xbf, 0x18,
+ 0xbd, 0x09, 0x21, 0xe6, 0x13, 0x07, 0x78, 0xb4, 0xbe, 0x35, 0xed, 0x0a, 0x0d, 0xcf, 0x42, 0x0c,
+ 0xba, 0x21, 0x82, 0x92, 0x88, 0xdb, 0x5c, 0xaa, 0xe5, 0x96, 0xc4, 0xf2, 0xb3, 0x47, 0xe1, 0x13,
+ 0x12, 0x98, 0xc5, 0x97, 0x8c, 0x2f, 0xed, 0xe3, 0x83, 0x9c, 0x82, 0x46, 0xc9, 0x8b, 0x58, 0x31,
+ 0xab, 0x20, 0xdf, 0xb5, 0xec, 0x4b, 0x81, 0xbf, 0x23, 0xfa, 0x1f, 0x5d, 0x51, 0x2a, 0x0d, 0xb8,
+ 0xa2, 0x34, 0xdc, 0x26, 0x09, 0xcb, 0x8d, 0x19, 0x4d, 0xdf, 0x90, 0x13, 0xb9, 0xa2, 0x74, 0x28,
+ 0xb9, 0xec, 0xc5, 0xf8, 0xd7, 0x79, 0x50, 0x6c, 0x42, 0xd3, 0x6d, 0xef, 0x68, 0xef, 0x97, 0x06,
+ 0x4e, 0x25, 0xa6, 0xf9, 0xa9, 0xc4, 0x32, 0x98, 0xda, 0xb2, 0xba, 0x3e, 0x74, 0x89, 0x0f, 0x38,
+ 0xdb, 0xb5, 0x93, 0x26, 0xbe, 0xd4, 0x75, 0xda, 0x97, 0x16, 0xa9, 0x69, 0xbf, 0x18, 0xc4, 0x8b,
+ 0x5e, 0x5c, 0xc6, 0x1f, 0x19, 0xc1, 0xc7, 0xc8, 0x20, 0xf4, 0x1c, 0xd7, 0x8f, 0xbb, 0x7f, 0x28,
+ 0x86, 0x4a, 0xd3, 0x71, 0x7d, 0x83, 0x7c, 0x88, 0x60, 0xde, 0xda, 0xeb, 0x76, 0x5b, 0xf0, 0x21,
+ 0x3f, 0x98, 0xd6, 0x05, 0xcf, 0xc8, 0x58, 0x74, 0xb6, 0xb6, 0x3c, 0x48, 0x16, 0x15, 0x0a, 0x06,
+ 0x7d, 0x52, 0x4f, 0x82, 0x42, 0xd7, 0xda, 0xb5, 0xc8, 0x44, 0xa4, 0x60, 0x90, 0x07, 0xf5, 0x56,
+ 0xa0, 0x44, 0x73, 0x20, 0xc2, 0xe8, 0xe9, 0x22, 0x6e, 0x9a, 0x07, 0xd2, 0x91, 0xce, 0x5c, 0x82,
+ 0xfb, 0xde, 0xe9, 0x29, 0xfc, 0x1e, 0xff, 0xe7, 0x0f, 0xdc, 0x88, 0x6c, 0x98, 0x10, 0x89, 0xc7,
+ 0xcf, 0x70, 0x5d, 0xd8, 0x76, 0xdc, 0x4e, 0x20, 0x9b, 0xf8, 0x09, 0x06, 0xcd, 0x97, 0x6e, 0x9b,
+ 0x63, 0x60, 0xe1, 0xd9, 0x6b, 0xda, 0x7b, 0x8a, 0xa8, 0xdb, 0x44, 0x45, 0x9f, 0xb7, 0xfc, 0x9d,
+ 0x35, 0xe8, 0x9b, 0xda, 0x5f, 0xcb, 0x03, 0x35, 0x6e, 0xf6, 0x7f, 0x6b, 0xdc, 0x10, 0x8d, 0x23,
+ 0x31, 0xbf, 0xfc, 0x3d, 0xd7, 0x46, 0x72, 0xa4, 0x7e, 0xb4, 0x4c, 0x8a, 0x7a, 0x0f, 0xb8, 0x26,
+ 0x7a, 0x0a, 0x96, 0x52, 0x2b, 0x8c, 0x6b, 0xed, 0xb4, 0x11, 0x9f, 0x41, 0x5d, 0x07, 0x37, 0x92,
+ 0x97, 0xab, 0xad, 0xb5, 0xda, 0xaa, 0xb5, 0xbd, 0xd3, 0xb5, 0xb6, 0x77, 0x7c, 0xaf, 0x6a, 0x7b,
+ 0x3e, 0x34, 0x3b, 0x8d, 0x2d, 0x83, 0xdc, 0x1c, 0x06, 0x30, 0x1d, 0x91, 0xac, 0xbc, 0x8f, 0xb8,
+ 0xd8, 0xe8, 0xc6, 0x6a, 0x4a, 0x4c, 0x4b, 0x79, 0x32, 0x6a, 0x29, 0xde, 0x5e, 0x37, 0xc4, 0xf4,
+ 0xba, 0x3e, 0x4c, 0x23, 0x55, 0xdf, 0xeb, 0xe2, 0xe6, 0x82, 0x33, 0xa7, 0x1d, 0xe7, 0x12, 0x38,
+ 0xc9, 0xbe, 0xd9, 0xfc, 0x5b, 0x11, 0x14, 0x56, 0x5c, 0xb3, 0xb7, 0xa3, 0x3d, 0x97, 0xe9, 0x9f,
+ 0xc7, 0xd5, 0x26, 0x42, 0xed, 0x94, 0x86, 0x69, 0xa7, 0x3c, 0x44, 0x3b, 0xf3, 0x8c, 0x76, 0xc6,
+ 0x2f, 0x3a, 0x9f, 0x05, 0x73, 0x6d, 0xa7, 0xdb, 0x85, 0x6d, 0x24, 0x8f, 0x6a, 0x07, 0xaf, 0xf6,
+ 0xcc, 0x18, 0x5c, 0x1a, 0x8e, 0xa9, 0x0f, 0xfd, 0x26, 0x59, 0x63, 0x27, 0x4a, 0x1f, 0x25, 0x68,
+ 0x2f, 0x93, 0x40, 0x5e, 0xef, 0x6c, 0x43, 0x6e, 0x1d, 0x3e, 0xc7, 0xac, 0xc3, 0x9f, 0x02, 0x45,
+ 0xdf, 0x74, 0xb7, 0xa1, 0x1f, 0xac, 0x13, 0x90, 0xa7, 0x30, 0xd4, 0xbf, 0xcc, 0x84, 0xfa, 0xff,
+ 0x6e, 0x90, 0x47, 0x32, 0xa3, 0x6e, 0xf1, 0x37, 0x0e, 0x82, 0x1f, 0xcb, 0x7e, 0x11, 0x95, 0xb8,
+ 0x88, 0x6a, 0x6d, 0xe0, 0x0f, 0xfa, 0xb1, 0x2e, 0x1c, 0x0c, 0x45, 0x7b, 0x1d, 0x98, 0xb1, 0xda,
+ 0x8e, 0x5d, 0xdd, 0x35, 0xb7, 0x21, 0xad, 0x66, 0x94, 0x10, 0xbc, 0xd5, 0x77, 0x9d, 0x07, 0x2d,
+ 0xba, 0xa8, 0x15, 0x25, 0xa0, 0x2a, 0xec, 0x58, 0x9d, 0x0e, 0xb4, 0x69, 0xcb, 0xa6, 0x4f, 0x67,
+ 0xcf, 0x80, 0x3c, 0xe2, 0x01, 0xe9, 0x0f, 0x32, 0x16, 0x94, 0x63, 0xea, 0x1c, 0x6a, 0x56, 0xa4,
+ 0xf1, 0x2a, 0x39, 0x7e, 0xcd, 0x55, 0xc4, 0x6b, 0x88, 0x54, 0x6e, 0x70, 0xe3, 0x7a, 0x3c, 0x28,
+ 0xd8, 0x4e, 0x07, 0x0e, 0x1d, 0x84, 0x48, 0x2e, 0xf5, 0x49, 0xa0, 0x00, 0x3b, 0xa8, 0x57, 0x90,
+ 0x71, 0xf6, 0x33, 0xc9, 0xb2, 0x34, 0x48, 0xe6, 0x74, 0xae, 0x49, 0x83, 0xb8, 0xcd, 0xbe, 0x01,
+ 0xfe, 0xe8, 0x14, 0x38, 0x4e, 0xfa, 0x80, 0xe6, 0xde, 0x45, 0x44, 0xea, 0x22, 0xd4, 0x5e, 0x3f,
+ 0x78, 0xe0, 0x3a, 0xce, 0x2b, 0xfb, 0x49, 0x50, 0xf0, 0xf6, 0x2e, 0x86, 0x46, 0x28, 0x79, 0x60,
+ 0x9b, 0xae, 0x34, 0x96, 0xe1, 0x4c, 0x1e, 0x75, 0x38, 0xe3, 0x86, 0x26, 0x39, 0x68, 0xfc, 0xd1,
+ 0x40, 0x46, 0x0e, 0x74, 0x04, 0x03, 0xd9, 0xa0, 0x61, 0xe8, 0x34, 0x98, 0x32, 0xb7, 0x7c, 0xe8,
+ 0x46, 0x66, 0x22, 0x7d, 0x44, 0x43, 0xe5, 0x45, 0xb8, 0xe5, 0xb8, 0x48, 0x2c, 0x24, 0x2c, 0x6c,
+ 0xf8, 0xcc, 0xb4, 0x5c, 0xc0, 0xed, 0xa0, 0xdd, 0x06, 0x4e, 0xd8, 0x4e, 0x05, 0xf6, 0xa8, 0x9c,
+ 0x09, 0x8a, 0xf3, 0xe4, 0x76, 0xf6, 0x03, 0x2f, 0x0e, 0x74, 0x25, 0x0b, 0x07, 0xbb, 0x12, 0xed,
+ 0x73, 0x69, 0xe7, 0xcc, 0x7d, 0x40, 0x8f, 0xcd, 0x42, 0x53, 0x9f, 0x0a, 0xe6, 0x3a, 0xd4, 0x43,
+ 0xac, 0x6d, 0x85, 0xad, 0x24, 0xf6, 0x3b, 0x2e, 0x73, 0xa4, 0x48, 0x79, 0x56, 0x91, 0x56, 0xc0,
+ 0x34, 0x3e, 0x7a, 0x8d, 0x34, 0xa9, 0xd0, 0xe7, 0x91, 0x8f, 0xa7, 0x75, 0x61, 0xa5, 0x18, 0xb1,
+ 0x2d, 0x96, 0xe9, 0x27, 0x46, 0xf8, 0x71, 0xba, 0xd9, 0x77, 0xb2, 0x84, 0xb2, 0x6f, 0x8e, 0xbf,
+ 0x54, 0x04, 0xd7, 0x94, 0x5d, 0xc7, 0xf3, 0xf0, 0x11, 0x9c, 0xfe, 0x86, 0xf9, 0x46, 0x89, 0xbb,
+ 0xf4, 0xe7, 0x11, 0xdd, 0xfc, 0x06, 0x35, 0xa8, 0xc9, 0x35, 0x8d, 0xbf, 0x10, 0x0e, 0x5a, 0x13,
+ 0xee, 0x3f, 0xc4, 0x08, 0xfd, 0x3f, 0x47, 0x23, 0x79, 0x4f, 0x4e, 0x24, 0x8e, 0x4e, 0x4a, 0x59,
+ 0x65, 0xdf, 0x5c, 0xbe, 0x24, 0x81, 0x6b, 0xfb, 0xb9, 0xd9, 0xb0, 0xbd, 0xb0, 0xc1, 0x5c, 0x3f,
+ 0xa4, 0xbd, 0xf0, 0x71, 0x57, 0x12, 0xef, 0xf8, 0x8d, 0xa9, 0x3b, 0x53, 0x5a, 0xcc, 0x62, 0x49,
+ 0x74, 0xa0, 0x27, 0xe9, 0x8e, 0xdf, 0xd4, 0xe4, 0xb3, 0x17, 0xee, 0xef, 0xe6, 0xc1, 0xf1, 0x15,
+ 0xd7, 0xd9, 0xeb, 0x79, 0x51, 0x0f, 0xf4, 0x27, 0x83, 0x37, 0x64, 0x8b, 0x22, 0xa6, 0xc1, 0x0d,
+ 0x60, 0xd6, 0xa5, 0xd6, 0x5c, 0xb4, 0x3d, 0xcb, 0x26, 0xb1, 0xbd, 0x97, 0x7c, 0x98, 0xde, 0x2b,
+ 0xea, 0x67, 0xf2, 0x5c, 0x3f, 0xd3, 0xdf, 0x73, 0x14, 0x06, 0xf4, 0x1c, 0x7f, 0x2c, 0xa5, 0x1c,
+ 0x54, 0xfb, 0x44, 0x14, 0xd3, 0x5f, 0x94, 0x41, 0x71, 0x1b, 0x67, 0xa4, 0xdd, 0xc5, 0xe3, 0xc4,
+ 0x6a, 0x86, 0x89, 0x1b, 0xf4, 0xd3, 0x48, 0xae, 0x32, 0xab, 0xc3, 0xa9, 0x06, 0xb8, 0x64, 0x6e,
+ 0xb3, 0x57, 0xaa, 0xd7, 0xe6, 0xc1, 0x5c, 0x58, 0x7a, 0xb5, 0xe3, 0x71, 0xd1, 0x5d, 0x19, 0x8d,
+ 0x9a, 0x17, 0xd1, 0xa8, 0x03, 0xeb, 0xcc, 0xe1, 0xa8, 0x23, 0x33, 0xa3, 0xce, 0xc0, 0xd1, 0x65,
+ 0x2e, 0x66, 0x74, 0xd1, 0x9e, 0x23, 0x8b, 0x5e, 0x9b, 0xc7, 0x77, 0xad, 0xb8, 0x36, 0x8f, 0xe4,
+ 0xc1, 0x42, 0xf0, 0xf2, 0xbe, 0xe1, 0xb5, 0xca, 0x5e, 0x49, 0x3e, 0x2c, 0x81, 0x13, 0x07, 0x3b,
+ 0xf3, 0xef, 0xe0, 0xbd, 0xd4, 0x50, 0x9d, 0xbc, 0xd0, 0x4b, 0x0d, 0x3f, 0xf1, 0x9b, 0x74, 0x89,
+ 0x41, 0x50, 0x38, 0x7b, 0x6f, 0x78, 0x27, 0x2e, 0x16, 0xe6, 0x44, 0x90, 0x68, 0xf6, 0x02, 0xfc,
+ 0x29, 0x19, 0xcc, 0x34, 0xa1, 0x5f, 0x33, 0xf7, 0x9d, 0x3d, 0x5f, 0x33, 0x45, 0xb7, 0xe7, 0x9e,
+ 0x02, 0x8a, 0x5d, 0xfc, 0x09, 0xee, 0x60, 0xd8, 0xa0, 0xa3, 0xec, 0xfe, 0x16, 0xf6, 0x0d, 0x22,
+ 0xa4, 0x0d, 0x9a, 0x9f, 0x8f, 0x3e, 0x23, 0xb2, 0x3b, 0x1a, 0x72, 0x37, 0x96, 0xad, 0x9d, 0x54,
+ 0x7b, 0xa7, 0x71, 0x45, 0x67, 0x0f, 0xcb, 0x0f, 0xcb, 0x60, 0xbe, 0x09, 0xfd, 0xaa, 0xb7, 0x6c,
+ 0x5e, 0x76, 0x5c, 0xcb, 0x87, 0xda, 0x8a, 0x28, 0x34, 0x67, 0x00, 0xb0, 0xc2, 0xcf, 0x68, 0x4c,
+ 0x2c, 0x26, 0x45, 0x7b, 0x4b, 0x5a, 0x47, 0x21, 0x8e, 0x8f, 0xb1, 0x80, 0x90, 0xca, 0xc7, 0x22,
+ 0xa9, 0xf8, 0x09, 0x5c, 0xfc, 0x2d, 0x51, 0x20, 0x4a, 0x6e, 0x7b, 0xc7, 0xba, 0x0c, 0x3b, 0x29,
+ 0x81, 0x08, 0x3e, 0x8b, 0x80, 0x08, 0x09, 0xa5, 0x76, 0x5f, 0xe1, 0xf8, 0x18, 0x87, 0xfb, 0x4a,
+ 0x12, 0xc1, 0x89, 0x84, 0xb5, 0x42, 0x5d, 0x0f, 0x5d, 0xcf, 0xbc, 0x4f, 0x54, 0xac, 0x91, 0xc9,
+ 0x26, 0xb1, 0x26, 0xdb, 0x48, 0x1d, 0x0b, 0x29, 0x7b, 0x98, 0x4e, 0xe7, 0xb3, 0xe8, 0x58, 0x06,
+ 0x16, 0x9d, 0xbd, 0xd0, 0xdf, 0x27, 0x83, 0xab, 0xc3, 0x78, 0x2f, 0x4d, 0xe8, 0x57, 0x4c, 0x6f,
+ 0xe7, 0xa2, 0x63, 0xba, 0x1d, 0xad, 0x3c, 0x86, 0x03, 0x87, 0xda, 0x1f, 0xb2, 0x20, 0xd4, 0x79,
+ 0x10, 0x06, 0xba, 0x92, 0x0e, 0xe4, 0x65, 0x1c, 0x9d, 0x4c, 0xa2, 0xb7, 0xeb, 0x3b, 0x42, 0xb0,
+ 0x9e, 0xc1, 0x81, 0x75, 0xef, 0xa8, 0x2c, 0x66, 0x0f, 0xdc, 0xcf, 0x92, 0x11, 0x81, 0xf1, 0x7a,
+ 0xbe, 0x20, 0x0a, 0x58, 0x8c, 0xd7, 0xab, 0x1c, 0xeb, 0xf5, 0x3a, 0xd2, 0x18, 0x31, 0xd4, 0x63,
+ 0x39, 0xdb, 0x31, 0xe2, 0x08, 0xbd, 0x91, 0xdf, 0x25, 0x03, 0x05, 0x07, 0xfc, 0x62, 0x3c, 0xc2,
+ 0xd9, 0xf8, 0xd9, 0xc9, 0xe8, 0x1c, 0xf0, 0x3e, 0x9f, 0x4a, 0xeb, 0x7d, 0xae, 0xbd, 0x33, 0xad,
+ 0x8f, 0x79, 0x3f, 0xb7, 0x63, 0x41, 0x2c, 0x95, 0x0b, 0xf9, 0x10, 0x0e, 0xb2, 0x07, 0xed, 0xc7,
+ 0x64, 0x00, 0x50, 0x83, 0xa6, 0x67, 0x23, 0x9e, 0x29, 0x0a, 0xd7, 0xed, 0xac, 0xdf, 0x3d, 0x02,
+ 0xea, 0xea, 0x3e, 0xa0, 0x08, 0xc5, 0xe8, 0xd4, 0xc5, 0xeb, 0xd3, 0xfa, 0x56, 0x46, 0x5c, 0x8d,
+ 0x05, 0x96, 0x54, 0xde, 0x96, 0xb1, 0x65, 0x67, 0x0f, 0xc8, 0x7f, 0x97, 0x40, 0xa1, 0xe5, 0x34,
+ 0xa1, 0x7f, 0x78, 0x53, 0x20, 0x75, 0xd4, 0x00, 0x5c, 0xee, 0x38, 0xa2, 0x06, 0x0c, 0x22, 0x94,
+ 0xbd, 0xe8, 0xde, 0x2b, 0x81, 0xb9, 0x96, 0x53, 0x0e, 0x17, 0xa7, 0xc4, 0x7d, 0x55, 0xc5, 0xaf,
+ 0xfe, 0x0f, 0x2b, 0x18, 0x15, 0x73, 0xa8, 0xab, 0xff, 0x87, 0xd3, 0xcb, 0x5e, 0x6e, 0x77, 0x81,
+ 0xe3, 0x1b, 0x76, 0xc7, 0x31, 0x60, 0xc7, 0xa1, 0x2b, 0xdd, 0xaa, 0x0a, 0xf2, 0x7b, 0x76, 0xc7,
+ 0xc1, 0x2c, 0x17, 0x0c, 0xfc, 0x1f, 0xa5, 0xb9, 0xb0, 0xe3, 0x50, 0xdf, 0x00, 0xfc, 0x5f, 0xfb,
+ 0x0b, 0x19, 0xe4, 0xd1, 0xb7, 0xe2, 0xa2, 0x7e, 0x97, 0x9c, 0x32, 0x0e, 0x02, 0x22, 0x3f, 0x16,
+ 0x4b, 0xe8, 0x3e, 0x66, 0xed, 0x9f, 0x78, 0xb0, 0xde, 0x18, 0x57, 0x1e, 0x23, 0x8a, 0x68, 0xcd,
+ 0x5f, 0x3d, 0x0d, 0xa6, 0x2e, 0x76, 0x9d, 0xf6, 0xa5, 0xe8, 0xb8, 0x3e, 0x7d, 0x54, 0x6f, 0x05,
+ 0x05, 0xd7, 0xb4, 0xb7, 0x21, 0xdd, 0x53, 0x38, 0xd9, 0xd7, 0x17, 0x62, 0xaf, 0x17, 0x83, 0x64,
+ 0xd1, 0xde, 0x99, 0x26, 0x02, 0xc3, 0x80, 0xca, 0xa7, 0xd3, 0x87, 0xca, 0x08, 0x27, 0xcf, 0x14,
+ 0x30, 0x57, 0x2e, 0xd5, 0xc9, 0x3d, 0x86, 0x8d, 0x73, 0xba, 0x22, 0x63, 0x98, 0x91, 0x4c, 0x32,
+ 0x84, 0x19, 0x91, 0xff, 0x4f, 0x0b, 0xf3, 0x80, 0xca, 0x1f, 0x05, 0xcc, 0x9f, 0x91, 0xc0, 0x7c,
+ 0xcd, 0xf2, 0xfc, 0x38, 0x6f, 0xff, 0x84, 0x78, 0xbf, 0x2f, 0x4e, 0x6b, 0x2a, 0x73, 0xe5, 0x08,
+ 0x07, 0xfa, 0x4d, 0x65, 0x0e, 0x27, 0x15, 0x31, 0x99, 0x63, 0x29, 0x98, 0x03, 0x72, 0x89, 0xbd,
+ 0xb0, 0x24, 0x53, 0x1b, 0x4a, 0x51, 0x21, 0x93, 0x37, 0x94, 0x62, 0xcb, 0xce, 0x5e, 0xbe, 0x7f,
+ 0x21, 0x81, 0x13, 0xa8, 0xf8, 0xa4, 0x65, 0xa9, 0x78, 0x31, 0x0f, 0x5d, 0x96, 0x4a, 0xbd, 0x32,
+ 0x7e, 0x80, 0x97, 0x71, 0xac, 0x8c, 0x0f, 0x23, 0x3a, 0x61, 0x31, 0xc7, 0x2c, 0xc3, 0x0e, 0x13,
+ 0x73, 0xc2, 0x32, 0xec, 0xe8, 0x62, 0x4e, 0x5e, 0x8a, 0x1d, 0x51, 0xcc, 0x47, 0xb6, 0xc0, 0xfa,
+ 0x0b, 0x72, 0x28, 0xe6, 0xd8, 0xb5, 0x8d, 0x04, 0x31, 0xa7, 0x3e, 0xd1, 0xab, 0xbd, 0x7b, 0x44,
+ 0xc1, 0x8f, 0x79, 0x7d, 0x63, 0x14, 0x98, 0x8e, 0x70, 0x8d, 0xe3, 0xe7, 0x64, 0xb0, 0x40, 0xb9,
+ 0x18, 0x3c, 0x65, 0x4e, 0xc0, 0x28, 0xf5, 0x94, 0x39, 0xf5, 0x19, 0x20, 0x9e, 0xb3, 0xc9, 0x9f,
+ 0x01, 0x4a, 0x2c, 0x3f, 0x7b, 0x70, 0xfe, 0x2a, 0x0f, 0x4e, 0x21, 0x16, 0xd6, 0x9c, 0x8e, 0xb5,
+ 0xb5, 0x4f, 0xb8, 0x38, 0x67, 0x76, 0xf7, 0xa0, 0xa7, 0x7d, 0x40, 0x12, 0x45, 0xe9, 0xbf, 0x00,
+ 0xe0, 0xf4, 0xa0, 0x4b, 0xe2, 0xb8, 0x51, 0xa0, 0xee, 0x89, 0xab, 0xec, 0xc1, 0x92, 0xc2, 0xeb,
+ 0x6f, 0x1a, 0x01, 0x11, 0x83, 0xa1, 0x87, 0xac, 0xc2, 0x99, 0xf0, 0x4d, 0xbf, 0x83, 0x47, 0xee,
+ 0xa0, 0x83, 0xc7, 0x2d, 0x40, 0x36, 0x3b, 0x9d, 0x10, 0xaa, 0xfe, 0xcd, 0x6c, 0x5c, 0xa6, 0x81,
+ 0xb2, 0xa0, 0x9c, 0x1e, 0x8c, 0x8e, 0xe6, 0xc5, 0xe4, 0xf4, 0xa0, 0xaf, 0x2e, 0x82, 0x22, 0xb9,
+ 0x0e, 0x3c, 0x5c, 0xd1, 0x1f, 0x9c, 0x99, 0xe6, 0xe2, 0x4d, 0xbb, 0x06, 0xaf, 0x86, 0x77, 0xa5,
+ 0x92, 0xcc, 0xa0, 0x7e, 0x3a, 0xb2, 0x93, 0x0d, 0x4e, 0xc1, 0x9e, 0x36, 0x32, 0xe5, 0xc9, 0xec,
+ 0x86, 0x95, 0x7a, 0xbd, 0xee, 0x7e, 0x8b, 0x06, 0x1e, 0x48, 0xb5, 0x1b, 0xc6, 0xc4, 0x2f, 0x90,
+ 0x0e, 0xc4, 0x2f, 0x48, 0xbd, 0x1b, 0xc6, 0xf1, 0x31, 0x8e, 0xdd, 0xb0, 0x24, 0x82, 0x13, 0xb9,
+ 0x87, 0x07, 0x5b, 0xcd, 0xf4, 0x36, 0x82, 0x7f, 0x1c, 0xec, 0x59, 0x0d, 0x78, 0x67, 0x97, 0x41,
+ 0x17, 0x15, 0x24, 0xde, 0xc2, 0xa2, 0x3e, 0x09, 0x14, 0xb7, 0x1c, 0x77, 0xd7, 0x0c, 0x36, 0xee,
+ 0xfb, 0x4f, 0x8a, 0xd0, 0x1b, 0x00, 0x96, 0x71, 0x1e, 0x83, 0xe6, 0x45, 0xf3, 0x91, 0x67, 0x5b,
+ 0x3d, 0x1a, 0xf4, 0x11, 0xfd, 0x55, 0x6f, 0x02, 0xf3, 0x34, 0xf6, 0x63, 0x1d, 0x7a, 0x3e, 0xec,
+ 0xd0, 0x88, 0x16, 0x7c, 0xa2, 0x7a, 0x16, 0xcc, 0xd1, 0x84, 0x65, 0xab, 0x0b, 0x3d, 0x1a, 0xd4,
+ 0x82, 0x4b, 0x53, 0x4f, 0x81, 0xa2, 0xe5, 0xdd, 0xef, 0x39, 0x36, 0x0d, 0xc8, 0x47, 0x9f, 0xd4,
+ 0x5b, 0xc0, 0x71, 0x9a, 0x2f, 0x34, 0x56, 0xc9, 0x81, 0x9d, 0xfe, 0x64, 0xa4, 0x5a, 0xb6, 0xb3,
+ 0xee, 0x3a, 0xdb, 0x2e, 0xf4, 0x3c, 0x7c, 0x6a, 0x6a, 0xda, 0x60, 0x52, 0xd4, 0x0b, 0xe0, 0x44,
+ 0xd7, 0xb2, 0x2f, 0x79, 0x38, 0x46, 0xf0, 0x32, 0x75, 0x1b, 0x9b, 0x1b, 0x10, 0xbb, 0x9b, 0x69,
+ 0x6c, 0x54, 0x0e, 0xec, 0x27, 0xc6, 0x41, 0x2a, 0xea, 0xad, 0x40, 0xa1, 0xdc, 0x2c, 0x99, 0xed,
+ 0x4b, 0xf8, 0x3d, 0x75, 0x47, 0x3d, 0x90, 0xce, 0x08, 0x83, 0x84, 0xd1, 0x5f, 0xe0, 0x84, 0x41,
+ 0x22, 0xe9, 0xbf, 0x34, 0x07, 0xe6, 0xb8, 0x02, 0x4c, 0xa0, 0x06, 0xdd, 0xa2, 0x77, 0x7e, 0xc7,
+ 0xf2, 0x21, 0x62, 0x8e, 0x9e, 0x75, 0x79, 0xc2, 0x10, 0xe6, 0x8d, 0x03, 0x1f, 0x1a, 0x03, 0x88,
+ 0x21, 0xbe, 0x48, 0x87, 0x87, 0x3d, 0xcb, 0x3c, 0x6a, 0xab, 0x72, 0x69, 0xda, 0xb3, 0x81, 0x7a,
+ 0x90, 0x1a, 0xe3, 0x05, 0x92, 0x4b, 0xe7, 0x05, 0x82, 0xe4, 0x66, 0x76, 0xbb, 0xce, 0x15, 0xd8,
+ 0x09, 0xc9, 0x52, 0x5d, 0x3d, 0x90, 0xae, 0x7d, 0x7e, 0x94, 0x79, 0x61, 0xea, 0x8b, 0x35, 0x50,
+ 0x23, 0xdb, 0x6b, 0xb7, 0x21, 0xec, 0xd0, 0x83, 0x6b, 0xc1, 0x63, 0xca, 0x2b, 0x37, 0x52, 0xcf,
+ 0x22, 0x8f, 0xe8, 0xce, 0x8d, 0xf7, 0x47, 0x37, 0x9f, 0xec, 0x89, 0x74, 0x35, 0x49, 0xe7, 0xe3,
+ 0x47, 0xea, 0x54, 0xb4, 0xf7, 0xa6, 0x3d, 0x2d, 0x9a, 0x88, 0xe9, 0x29, 0x34, 0xb8, 0x7b, 0x7b,
+ 0xdd, 0xf0, 0xb8, 0x13, 0x79, 0x4a, 0x89, 0x5e, 0xaa, 0x03, 0xa4, 0x47, 0x84, 0xdc, 0xc7, 0xae,
+ 0x06, 0x45, 0x72, 0xf3, 0xa0, 0xf6, 0xd2, 0x85, 0x81, 0xd0, 0x2d, 0xf0, 0xd0, 0x6d, 0x80, 0x39,
+ 0xdb, 0x41, 0xc5, 0xad, 0x9b, 0xae, 0xb9, 0xeb, 0x25, 0x2d, 0xef, 0x13, 0xba, 0xa1, 0x2d, 0x57,
+ 0x67, 0x3e, 0x5b, 0x3d, 0x66, 0x70, 0x64, 0xd4, 0xff, 0x03, 0x1c, 0xbf, 0x48, 0x43, 0x73, 0x78,
+ 0x94, 0xb2, 0x14, 0xef, 0xfc, 0xda, 0x47, 0x79, 0x89, 0xff, 0x72, 0xf5, 0x98, 0xd1, 0x4f, 0x4c,
+ 0xfd, 0x5e, 0xb0, 0x80, 0x1e, 0x3b, 0xce, 0x95, 0x80, 0x71, 0x39, 0x7e, 0x06, 0xd0, 0x47, 0x7e,
+ 0x8d, 0xfb, 0x70, 0xf5, 0x98, 0xd1, 0x47, 0x4a, 0x6d, 0x00, 0xb0, 0xe3, 0xef, 0x76, 0x29, 0xe1,
+ 0x7c, 0x7c, 0x67, 0xd2, 0x47, 0x78, 0x35, 0xfc, 0x68, 0xf5, 0x98, 0xc1, 0x90, 0x50, 0x6b, 0x60,
+ 0xc6, 0x7f, 0xc8, 0xa7, 0xf4, 0x0a, 0xf1, 0x5e, 0x27, 0x7d, 0xf4, 0x5a, 0xc1, 0x37, 0xab, 0xc7,
+ 0x8c, 0x88, 0x80, 0x5a, 0x05, 0xd3, 0xbd, 0x8b, 0x94, 0x58, 0x31, 0x7e, 0xa4, 0xea, 0x23, 0xb6,
+ 0x7e, 0x31, 0xa4, 0x15, 0x7e, 0x8e, 0x18, 0x6b, 0x7b, 0x97, 0x29, 0xad, 0x29, 0x61, 0xc6, 0xca,
+ 0xc1, 0x37, 0x88, 0xb1, 0x90, 0x80, 0x5a, 0x05, 0x33, 0x9e, 0x6d, 0xf6, 0xbc, 0x1d, 0xc7, 0xf7,
+ 0x4e, 0x4f, 0xf7, 0x39, 0x28, 0xc7, 0x53, 0x6b, 0xd2, 0x6f, 0x8c, 0xe8, 0x6b, 0xf5, 0x49, 0xe0,
+ 0xea, 0xbd, 0x5e, 0xc7, 0xf4, 0xa1, 0xfe, 0x90, 0xe5, 0xf9, 0x96, 0xbd, 0x1d, 0xc4, 0x96, 0x26,
+ 0xc3, 0xfc, 0xe0, 0x97, 0xea, 0x22, 0x3d, 0xaa, 0x08, 0x70, 0xbb, 0xd4, 0xfa, 0x77, 0xc9, 0x49,
+ 0xb1, 0xcc, 0x09, 0xc5, 0xa7, 0x82, 0x3c, 0x7a, 0x85, 0xcd, 0x82, 0x85, 0xc1, 0x2b, 0xf0, 0xfd,
+ 0xba, 0x83, 0x1b, 0x30, 0xfa, 0xa8, 0xcf, 0xb2, 0x98, 0x3b, 0x60, 0x59, 0xdc, 0x00, 0x66, 0x2d,
+ 0x6f, 0xcd, 0xda, 0x26, 0xd3, 0x1a, 0x3a, 0xf2, 0xb3, 0x49, 0x64, 0x19, 0xa8, 0x0e, 0xaf, 0x90,
+ 0x21, 0xff, 0x78, 0xb0, 0x0c, 0x14, 0xa4, 0x68, 0x37, 0x83, 0x39, 0xb6, 0x91, 0x91, 0xeb, 0x8b,
+ 0xad, 0x68, 0x52, 0x44, 0x9f, 0xb4, 0x9b, 0xc0, 0x02, 0xaf, 0xd3, 0x8c, 0xed, 0x27, 0x07, 0x83,
+ 0x98, 0x76, 0x23, 0x38, 0xde, 0xd7, 0xb0, 0x82, 0x60, 0x3f, 0xb9, 0x28, 0xd8, 0xcf, 0x0d, 0x00,
+ 0x44, 0x5a, 0x3c, 0x90, 0xcc, 0xf5, 0x60, 0x26, 0xd4, 0xcb, 0x81, 0x19, 0xfe, 0x34, 0x07, 0xa6,
+ 0x03, 0x65, 0x1b, 0x94, 0x01, 0xd9, 0x14, 0x36, 0xb3, 0xb3, 0x17, 0xd8, 0x14, 0x6c, 0x1a, 0x32,
+ 0xf0, 0x22, 0x7f, 0xfa, 0x96, 0xe5, 0x77, 0x83, 0x33, 0xa9, 0xfd, 0xc9, 0xea, 0x3a, 0x00, 0x16,
+ 0xc6, 0xa8, 0x15, 0x1d, 0x52, 0xbd, 0x23, 0x45, 0x7b, 0x20, 0xfa, 0xc0, 0xd0, 0x38, 0xfb, 0x1d,
+ 0xf4, 0x04, 0xe9, 0x0c, 0x28, 0x90, 0x0b, 0x16, 0x8e, 0xa9, 0x0b, 0x00, 0xe8, 0xcf, 0x5c, 0xd7,
+ 0x8d, 0xaa, 0x5e, 0x2f, 0xeb, 0x4a, 0x4e, 0x7b, 0xb9, 0x04, 0x66, 0xc2, 0x46, 0x30, 0xb0, 0x92,
+ 0x3a, 0x55, 0xad, 0xa1, 0x37, 0xc4, 0x1e, 0x6c, 0x54, 0xac, 0x92, 0x3d, 0x05, 0x3c, 0x6a, 0xcf,
+ 0x83, 0xcb, 0x96, 0xeb, 0xf9, 0x86, 0x73, 0x65, 0xd9, 0x71, 0x23, 0x93, 0x88, 0x84, 0x26, 0x8e,
+ 0x7b, 0x8d, 0x4c, 0xfd, 0x0e, 0xc4, 0xa7, 0x15, 0xa1, 0x4b, 0xb7, 0x6c, 0xa2, 0x04, 0x44, 0xd7,
+ 0x77, 0x4d, 0xdb, 0xeb, 0x39, 0x1e, 0x34, 0x9c, 0x2b, 0x5e, 0xc9, 0xee, 0x94, 0x9d, 0xee, 0xde,
+ 0xae, 0xed, 0x51, 0x63, 0x3d, 0xee, 0x35, 0x92, 0x0e, 0xbe, 0xff, 0x79, 0x01, 0x80, 0x72, 0xa3,
+ 0x56, 0xd3, 0xcb, 0xad, 0x6a, 0xa3, 0xae, 0x1c, 0x43, 0xd2, 0x6a, 0x95, 0x96, 0x6a, 0x48, 0x3a,
+ 0xdf, 0x07, 0xa6, 0x83, 0x36, 0x4d, 0xe3, 0x13, 0xe5, 0x82, 0xf8, 0x44, 0x6a, 0x09, 0x4c, 0x07,
+ 0xad, 0x9c, 0x8e, 0x08, 0x8f, 0xe9, 0x3f, 0x8f, 0xbe, 0x6b, 0xba, 0x3e, 0x36, 0x2d, 0x03, 0x22,
+ 0x4b, 0xa6, 0x07, 0x8d, 0xf0, 0xb3, 0xb3, 0x8f, 0xa7, 0x1c, 0xa8, 0x60, 0xa1, 0x54, 0xab, 0x6d,
+ 0x36, 0x8c, 0xcd, 0x7a, 0xa3, 0xb5, 0x5a, 0xad, 0xaf, 0x90, 0x11, 0xb2, 0xba, 0x52, 0x6f, 0x18,
+ 0x3a, 0x19, 0x20, 0x9b, 0x4a, 0x8e, 0xdc, 0x3f, 0xbe, 0x34, 0x0d, 0x8a, 0x3d, 0x2c, 0x5d, 0xed,
+ 0x4b, 0x72, 0x4a, 0xd3, 0x22, 0xc4, 0x29, 0xe6, 0x86, 0x64, 0xee, 0x30, 0x88, 0x34, 0xe0, 0xb0,
+ 0xf6, 0x59, 0x30, 0x47, 0xcc, 0x21, 0x0f, 0xef, 0xab, 0x61, 0xe4, 0x64, 0x83, 0x4b, 0xd3, 0x3e,
+ 0x21, 0xa5, 0x30, 0x2e, 0x06, 0x72, 0x94, 0xce, 0xb8, 0xf8, 0xbd, 0xdc, 0x68, 0xd7, 0x91, 0x54,
+ 0xeb, 0x2d, 0xdd, 0xa8, 0x97, 0x6a, 0x34, 0x8b, 0xac, 0x9e, 0x06, 0x27, 0xeb, 0x0d, 0x1a, 0x8c,
+ 0xb3, 0xb9, 0xd9, 0x6a, 0x6c, 0x56, 0xd7, 0xd6, 0x1b, 0x46, 0x4b, 0x29, 0xa8, 0xa7, 0x80, 0x4a,
+ 0xfe, 0x6f, 0x56, 0x9b, 0x9b, 0xe5, 0x52, 0xbd, 0xac, 0xd7, 0xf4, 0x8a, 0x52, 0x54, 0x1f, 0x0b,
+ 0x6e, 0x24, 0xd7, 0x5b, 0x35, 0x96, 0x37, 0x8d, 0xc6, 0xf9, 0x26, 0x42, 0xd0, 0xd0, 0x6b, 0x25,
+ 0xa4, 0x48, 0xcc, 0x3d, 0xe4, 0x53, 0xea, 0x55, 0xe0, 0xf8, 0x72, 0xb5, 0xa6, 0x6f, 0xd6, 0x1a,
+ 0xa5, 0x0a, 0x2d, 0x6f, 0x5a, 0xbd, 0x0e, 0x9c, 0xae, 0xd6, 0x9b, 0x1b, 0xcb, 0xcb, 0xd5, 0x72,
+ 0x55, 0xaf, 0xb7, 0x36, 0xd7, 0x75, 0x63, 0xad, 0xda, 0x6c, 0xa2, 0x6f, 0x95, 0x19, 0x7c, 0xcb,
+ 0x33, 0xe9, 0x33, 0x91, 0x11, 0x3b, 0x7f, 0xce, 0xec, 0x5a, 0x68, 0xa0, 0xc0, 0xd7, 0xbf, 0xf7,
+ 0x9d, 0xe3, 0xf2, 0xf1, 0x35, 0xf1, 0xf4, 0x24, 0x08, 0x7e, 0xd0, 0x7e, 0x48, 0x4e, 0x79, 0x8e,
+ 0x8b, 0x02, 0x41, 0x4a, 0x5c, 0xe4, 0x4a, 0x8b, 0x59, 0x75, 0x78, 0x8d, 0x94, 0xe2, 0x1c, 0x97,
+ 0x38, 0xf9, 0x74, 0xe0, 0xff, 0xfc, 0xb8, 0xc0, 0x57, 0xc0, 0xdc, 0x46, 0xbd, 0xb4, 0xd1, 0x5a,
+ 0x6d, 0x18, 0xd5, 0xef, 0xc1, 0xb7, 0x10, 0xcc, 0x83, 0x99, 0xe5, 0x86, 0xb1, 0x54, 0xad, 0x54,
+ 0xf4, 0xba, 0x52, 0x50, 0x1f, 0x05, 0xae, 0x6a, 0xea, 0xc6, 0xb9, 0x6a, 0x59, 0xdf, 0xdc, 0xa8,
+ 0x97, 0xce, 0x95, 0xaa, 0x35, 0xdc, 0x47, 0x14, 0x13, 0xae, 0xae, 0x9f, 0xd2, 0x7e, 0x20, 0x0f,
+ 0x00, 0xa9, 0x3a, 0xbe, 0x84, 0x8b, 0xb9, 0xe0, 0xfc, 0x0f, 0xd2, 0x4e, 0xf7, 0x22, 0x32, 0x31,
+ 0xed, 0xb7, 0x0a, 0xa6, 0x5d, 0xfa, 0x82, 0xae, 0x6b, 0x0e, 0xa3, 0x43, 0xfe, 0x06, 0xd4, 0x8c,
+ 0xf0, 0x73, 0xed, 0x03, 0x69, 0x66, 0x77, 0xb1, 0x8c, 0xa5, 0x43, 0x72, 0x79, 0x3c, 0x40, 0x6a,
+ 0x2f, 0xca, 0x81, 0x05, 0xbe, 0x62, 0xa8, 0x12, 0xd8, 0x98, 0x12, 0xab, 0x04, 0xff, 0x31, 0x63,
+ 0x64, 0x9d, 0x7d, 0x22, 0x1d, 0x4e, 0x41, 0xd0, 0x32, 0x49, 0x48, 0x86, 0xc0, 0x62, 0x51, 0x72,
+ 0x88, 0x79, 0x64, 0x74, 0x28, 0x92, 0x3a, 0x05, 0xe4, 0xd6, 0x43, 0xbe, 0x22, 0x6b, 0x5f, 0x93,
+ 0xc1, 0x3c, 0x77, 0x83, 0xba, 0xf6, 0xce, 0x9c, 0xc8, 0xed, 0xc6, 0xcc, 0xdd, 0xec, 0xb9, 0xc3,
+ 0xde, 0xcd, 0x7e, 0xf6, 0x3e, 0x30, 0x45, 0xd3, 0xb0, 0x7c, 0x1b, 0x75, 0x64, 0x0a, 0x1c, 0x07,
+ 0xb3, 0x2b, 0x7a, 0x6b, 0xb3, 0xd9, 0x2a, 0x19, 0x2d, 0xbd, 0xa2, 0xe4, 0xd0, 0xc0, 0xa7, 0xaf,
+ 0xad, 0xb7, 0x2e, 0x28, 0x12, 0x1a, 0x13, 0x57, 0x36, 0xaa, 0x15, 0x7d, 0xb3, 0x51, 0xaf, 0x5d,
+ 0x50, 0xe4, 0xf4, 0xae, 0xb2, 0xfd, 0x8c, 0x4d, 0xd8, 0x55, 0x36, 0xa9, 0xf8, 0xec, 0xe7, 0xae,
+ 0x9f, 0x93, 0x81, 0x42, 0x38, 0xd0, 0x1f, 0xea, 0x41, 0xd7, 0x82, 0x76, 0x1b, 0x6a, 0x97, 0x44,
+ 0x42, 0xf7, 0x1e, 0x08, 0x5a, 0x89, 0xfb, 0x77, 0xc6, 0x6a, 0x24, 0x0f, 0x7d, 0x06, 0x77, 0xfe,
+ 0x80, 0xc1, 0xfd, 0x5b, 0x69, 0x7d, 0x65, 0xfb, 0xd9, 0x1d, 0x0b, 0x64, 0x9f, 0x4e, 0xe3, 0x2b,
+ 0x3b, 0x84, 0x83, 0x89, 0x44, 0xe4, 0x8e, 0x19, 0x8f, 0x15, 0x59, 0x7b, 0xa1, 0x0c, 0x8e, 0x57,
+ 0x4c, 0x1f, 0x2e, 0xed, 0xb7, 0x82, 0x1b, 0x4f, 0x63, 0x6e, 0x29, 0xcf, 0x1d, 0xb8, 0xa5, 0x3c,
+ 0xba, 0x34, 0x55, 0xea, 0xbb, 0x34, 0x55, 0x7b, 0x4f, 0xda, 0xd3, 0xb5, 0x7d, 0x3c, 0x8c, 0x2d,
+ 0x6c, 0x76, 0xba, 0x53, 0xb3, 0xc9, 0x5c, 0x64, 0xdf, 0xc0, 0xde, 0x3e, 0x03, 0x14, 0xc2, 0x0a,
+ 0xe3, 0x0e, 0xfa, 0x53, 0xf4, 0x62, 0xff, 0xcd, 0x14, 0xd1, 0x37, 0x83, 0x78, 0x26, 0x12, 0x1f,
+ 0xcf, 0x84, 0xdb, 0x5d, 0x90, 0xfb, 0x5d, 0x78, 0xd2, 0x76, 0x86, 0x8c, 0xef, 0x67, 0x7c, 0xc0,
+ 0xe3, 0xec, 0x3a, 0xc3, 0xc4, 0xe2, 0x27, 0x73, 0xf9, 0x34, 0xbd, 0xef, 0x55, 0x17, 0x45, 0x26,
+ 0xf9, 0x8e, 0xfd, 0xb4, 0x07, 0x01, 0x38, 0xdf, 0xdb, 0x84, 0x8b, 0xe7, 0xb3, 0x3b, 0x08, 0x30,
+ 0x8c, 0x83, 0xec, 0x51, 0xf8, 0x96, 0x04, 0xf2, 0x4d, 0xc7, 0xf5, 0xc7, 0x85, 0x41, 0x5a, 0xe7,
+ 0x05, 0x46, 0x02, 0xcd, 0xf8, 0x39, 0x68, 0x76, 0xce, 0x0b, 0xc9, 0xe5, 0x4f, 0x20, 0x80, 0xe9,
+ 0x71, 0xb0, 0x40, 0x38, 0x09, 0x6f, 0xff, 0xf9, 0x57, 0x89, 0xf4, 0x57, 0x0f, 0x88, 0x22, 0x82,
+ 0xb7, 0xb0, 0x42, 0xe7, 0x81, 0x00, 0x14, 0x2e, 0x4d, 0x7b, 0x23, 0x8b, 0x4b, 0x85, 0xc7, 0x65,
+ 0xd0, 0x0c, 0x3c, 0xbc, 0x40, 0x67, 0x5c, 0x3d, 0x53, 0x9a, 0x58, 0xa8, 0x09, 0x85, 0x67, 0x8f,
+ 0xc8, 0xc3, 0x32, 0x28, 0x52, 0xe7, 0xcd, 0xb1, 0x22, 0x90, 0xb6, 0x65, 0x84, 0x42, 0x10, 0x73,
+ 0xf2, 0x94, 0xc7, 0xdd, 0x32, 0x92, 0xcb, 0xcf, 0x1e, 0x87, 0x7f, 0xa7, 0x5e, 0xc9, 0xa5, 0xcb,
+ 0xa6, 0xd5, 0x35, 0x2f, 0x76, 0x53, 0xc4, 0x20, 0xff, 0x44, 0xca, 0x73, 0x98, 0x61, 0x55, 0xb9,
+ 0xf2, 0x62, 0x24, 0xfe, 0x5d, 0x60, 0xc6, 0xe5, 0x76, 0x6d, 0x91, 0x15, 0xd5, 0xe7, 0x11, 0x4e,
+ 0xdf, 0x1b, 0x51, 0xce, 0x54, 0x87, 0x2e, 0x85, 0xf8, 0x99, 0xc8, 0x21, 0xb1, 0xd9, 0x52, 0xa7,
+ 0xb3, 0x0c, 0x4d, 0x7f, 0xcf, 0x85, 0x9d, 0x54, 0x43, 0x84, 0xdb, 0xb7, 0xb1, 0xcd, 0x48, 0x82,
+ 0x8b, 0x02, 0x5a, 0xe3, 0xd1, 0x79, 0xf2, 0x90, 0xde, 0x20, 0xe0, 0x65, 0x2c, 0x5d, 0xd2, 0xdb,
+ 0x42, 0x48, 0x1a, 0x1c, 0x24, 0x4f, 0x1d, 0x8d, 0x89, 0xec, 0x01, 0xf9, 0x19, 0x19, 0x2c, 0x10,
+ 0x3b, 0x61, 0xdc, 0x98, 0x7c, 0x28, 0xa5, 0xb3, 0x17, 0x73, 0xbf, 0x1a, 0xcb, 0xce, 0x58, 0x60,
+ 0x49, 0xe3, 0x1a, 0x26, 0xc6, 0x47, 0xf6, 0xc8, 0x3c, 0xef, 0x04, 0x00, 0x8c, 0x03, 0xef, 0x27,
+ 0x8a, 0x51, 0x44, 0x4e, 0xed, 0x9d, 0x74, 0xfe, 0xd1, 0xe4, 0xc2, 0xc3, 0x33, 0xce, 0xb9, 0xe1,
+ 0x06, 0x15, 0x9f, 0x28, 0x34, 0xaa, 0xfc, 0x5e, 0x4a, 0x9b, 0x97, 0xba, 0xcf, 0x0e, 0x1d, 0xdc,
+ 0x47, 0xec, 0xe5, 0x3e, 0x99, 0xc2, 0xf8, 0x1d, 0xc6, 0x4a, 0x3a, 0xd4, 0x6a, 0x23, 0xcc, 0xec,
+ 0x4f, 0x83, 0x93, 0x86, 0x5e, 0xaa, 0x34, 0xea, 0xb5, 0x0b, 0xec, 0x65, 0x5b, 0x8a, 0xcc, 0x4e,
+ 0x4e, 0x32, 0x81, 0xed, 0x75, 0x29, 0xfb, 0x40, 0x5e, 0x56, 0x49, 0xb3, 0x15, 0x66, 0x71, 0x65,
+ 0x78, 0xaf, 0x26, 0x40, 0xf6, 0x28, 0x51, 0xf8, 0x5a, 0x11, 0xcc, 0x1a, 0xb0, 0xed, 0xec, 0xee,
+ 0x42, 0xbb, 0x03, 0x3b, 0xda, 0xeb, 0x64, 0x30, 0x17, 0xee, 0xff, 0x35, 0xa1, 0xaf, 0x7d, 0x6f,
+ 0x84, 0xcd, 0x59, 0x30, 0x87, 0x2a, 0xd7, 0xe0, 0x43, 0xfe, 0x73, 0x69, 0xea, 0x6d, 0xe0, 0x44,
+ 0x80, 0x42, 0xa3, 0x6f, 0x0a, 0x73, 0xf0, 0x05, 0xef, 0xa1, 0xb3, 0xc1, 0x63, 0x74, 0x5f, 0xbc,
+ 0x30, 0x43, 0x76, 0x17, 0x59, 0x56, 0x63, 0xc0, 0xfa, 0x9d, 0x10, 0xac, 0x67, 0x72, 0x60, 0x55,
+ 0x0e, 0x49, 0xff, 0x28, 0x51, 0xfb, 0x65, 0x19, 0x9c, 0x0c, 0x3a, 0xe2, 0xc9, 0xa1, 0xf5, 0x49,
+ 0x16, 0xad, 0xef, 0xe3, 0xd1, 0x5a, 0x11, 0x91, 0xe6, 0x20, 0x96, 0x63, 0x50, 0xfb, 0x62, 0x88,
+ 0xda, 0xf7, 0x73, 0xa8, 0xd5, 0xc6, 0x54, 0xce, 0x51, 0xa2, 0xf7, 0x21, 0x19, 0x9c, 0x46, 0x66,
+ 0x67, 0xd9, 0xb1, 0xb7, 0xba, 0x56, 0xdb, 0xb7, 0xec, 0xed, 0xc8, 0x19, 0x71, 0x45, 0x64, 0x65,
+ 0xb3, 0x1f, 0x5b, 0xe9, 0x20, 0xb6, 0x7c, 0xa4, 0x14, 0xd1, 0xb6, 0x15, 0xc7, 0x56, 0xcc, 0x10,
+ 0xc6, 0xb8, 0xd9, 0x47, 0x9a, 0xc3, 0x26, 0xa5, 0x6f, 0x7d, 0x82, 0x1c, 0x1c, 0x25, 0x7e, 0x0f,
+ 0x03, 0xc6, 0xf4, 0x78, 0x81, 0x0c, 0x14, 0xec, 0xf9, 0x8a, 0x7b, 0x76, 0x7a, 0x13, 0x6d, 0x83,
+ 0x3f, 0x13, 0xd1, 0x0b, 0x04, 0x14, 0x9c, 0x89, 0x08, 0x12, 0xd4, 0x9b, 0xc1, 0x42, 0x7b, 0x07,
+ 0xb6, 0x2f, 0x55, 0xed, 0xc0, 0x37, 0x89, 0x38, 0xb2, 0xf4, 0xa5, 0xf2, 0x83, 0xd9, 0x03, 0x3c,
+ 0x98, 0xfc, 0xc2, 0x23, 0x37, 0xb1, 0x61, 0x99, 0x8a, 0x69, 0x68, 0xbf, 0x1e, 0x02, 0x54, 0xe7,
+ 0x00, 0xba, 0x7b, 0x24, 0xaa, 0xe9, 0x60, 0xa9, 0x8f, 0x00, 0x8b, 0x06, 0x4e, 0x35, 0xd6, 0x5b,
+ 0xd5, 0x46, 0x7d, 0x73, 0xa3, 0xa9, 0x57, 0x36, 0x97, 0x02, 0x70, 0x9a, 0x8a, 0xac, 0x7d, 0x55,
+ 0x02, 0x53, 0x84, 0x2d, 0x4f, 0x7b, 0x5c, 0x04, 0xc1, 0xd0, 0xc3, 0x20, 0xda, 0xdb, 0x85, 0x43,
+ 0x3b, 0x85, 0x82, 0xa0, 0xe5, 0xc4, 0x34, 0x8c, 0xa7, 0x80, 0x29, 0x02, 0x72, 0xb0, 0x0b, 0x70,
+ 0x26, 0xc6, 0xb2, 0xa3, 0x64, 0x8c, 0x20, 0xbb, 0x60, 0x98, 0xa7, 0x21, 0x6c, 0x64, 0x6f, 0x8d,
+ 0x3f, 0x27, 0x4f, 0x96, 0x0e, 0xce, 0x5b, 0xfe, 0x0e, 0x3e, 0x2b, 0xa2, 0x3d, 0x43, 0xa4, 0xe3,
+ 0xba, 0x0d, 0x14, 0x2e, 0xa3, 0xdc, 0x43, 0xce, 0xdd, 0x90, 0x4c, 0xda, 0xcf, 0x0b, 0x47, 0x15,
+ 0xe7, 0xf4, 0x33, 0xe4, 0x29, 0x06, 0x9c, 0x35, 0x90, 0xef, 0x5a, 0x9e, 0x4f, 0x6d, 0xee, 0xbb,
+ 0x52, 0x11, 0x0a, 0xfe, 0x54, 0x7d, 0xb8, 0x6b, 0x60, 0x32, 0xda, 0xfd, 0xc8, 0x62, 0x8a, 0x52,
+ 0x05, 0xce, 0x1e, 0x9d, 0x06, 0x53, 0xf4, 0x4c, 0x3c, 0xdd, 0x96, 0x0a, 0x1e, 0x05, 0xb7, 0x82,
+ 0x84, 0x6a, 0x9b, 0xbd, 0x0e, 0xfc, 0x7f, 0xc7, 0xc1, 0xd4, 0xaa, 0xe5, 0xf9, 0x8e, 0xbb, 0xaf,
+ 0xbd, 0x3e, 0x07, 0xa6, 0xce, 0x41, 0xd7, 0xb3, 0x1c, 0xfb, 0x80, 0xbb, 0xd6, 0x0d, 0x60, 0xb6,
+ 0xe7, 0xc2, 0xcb, 0x96, 0xb3, 0xe7, 0x31, 0xa3, 0x04, 0x93, 0xa4, 0x6a, 0x60, 0xda, 0xdc, 0xf3,
+ 0x77, 0x1c, 0x37, 0x0a, 0xa5, 0x15, 0x3c, 0xab, 0x67, 0x00, 0x20, 0xff, 0xeb, 0xe6, 0x2e, 0x0c,
+ 0x6e, 0xcb, 0x8f, 0x52, 0x54, 0x15, 0xe4, 0x7d, 0x6b, 0x17, 0xd2, 0xd8, 0xfa, 0xf8, 0x3f, 0x12,
+ 0x30, 0x8e, 0x53, 0x4b, 0xe3, 0x01, 0xcb, 0x46, 0xf0, 0xa8, 0xfd, 0xa1, 0x0c, 0x66, 0x57, 0xa0,
+ 0x4f, 0x59, 0xf5, 0xb4, 0x17, 0xe7, 0x84, 0xae, 0xb3, 0x42, 0xf3, 0x92, 0xae, 0xe9, 0x05, 0xdf,
+ 0x85, 0x43, 0x2e, 0x9f, 0x18, 0x05, 0xfa, 0x97, 0xd9, 0x5b, 0x3e, 0x70, 0xd4, 0x57, 0xbf, 0x4a,
+ 0x8e, 0x61, 0xd0, 0xcc, 0x74, 0xe3, 0xf8, 0xe0, 0x0b, 0xde, 0x26, 0x4e, 0x8c, 0x98, 0x42, 0x65,
+ 0xbf, 0xc8, 0xd4, 0x27, 0xb6, 0x3b, 0x9a, 0xbe, 0x4c, 0x73, 0x1c, 0xb8, 0xc0, 0x85, 0xa5, 0x44,
+ 0xc9, 0x18, 0x61, 0x6e, 0xc1, 0x58, 0x2b, 0xc3, 0x39, 0x99, 0xc0, 0x95, 0xbd, 0x32, 0x98, 0x6d,
+ 0xee, 0x38, 0x57, 0x02, 0x39, 0x7e, 0x9f, 0x18, 0xb0, 0xd7, 0x81, 0x99, 0xcb, 0x7d, 0xa0, 0x46,
+ 0x09, 0xec, 0x2d, 0x81, 0x32, 0x7f, 0x4b, 0xe0, 0xf3, 0xe5, 0xb4, 0x30, 0x31, 0xcc, 0xc5, 0xc0,
+ 0xc4, 0x5f, 0xec, 0x27, 0xa5, 0xb8, 0xd8, 0x4f, 0x7d, 0x32, 0x98, 0xa2, 0x5c, 0xd3, 0x65, 0xea,
+ 0x64, 0x80, 0x83, 0xcc, 0x6c, 0x05, 0xf3, 0x7c, 0x05, 0xd3, 0x21, 0x1f, 0x5f, 0xb9, 0xec, 0x91,
+ 0xff, 0x4d, 0x09, 0x47, 0xda, 0x0a, 0x80, 0x2f, 0x8f, 0x01, 0x78, 0xed, 0x9b, 0x39, 0xd1, 0xcd,
+ 0x9c, 0x50, 0x02, 0x21, 0x07, 0x87, 0xba, 0xaa, 0x6e, 0x28, 0xb9, 0xec, 0xe5, 0xf9, 0xf2, 0x3c,
+ 0x98, 0xab, 0x58, 0x5b, 0x5b, 0x61, 0x27, 0xf9, 0x12, 0xc1, 0x4e, 0x32, 0xde, 0xa5, 0x0a, 0xd9,
+ 0xb9, 0x7b, 0xae, 0x0b, 0xed, 0xa0, 0x52, 0xb4, 0x39, 0xf5, 0xa5, 0xaa, 0xb7, 0x80, 0xe3, 0xc1,
+ 0xb8, 0xc0, 0x76, 0x94, 0x33, 0x46, 0x7f, 0xb2, 0xf6, 0x75, 0x61, 0x4f, 0x80, 0x40, 0xa2, 0x6c,
+ 0x95, 0x62, 0x1a, 0xe0, 0x3d, 0x60, 0x7e, 0x87, 0xe4, 0xc6, 0xcb, 0xa5, 0x41, 0x67, 0x79, 0xaa,
+ 0xef, 0x26, 0x83, 0x35, 0xe8, 0x79, 0xe6, 0x36, 0x34, 0xf8, 0xcc, 0x7d, 0xcd, 0x57, 0x4e, 0x73,
+ 0x2f, 0xa7, 0x98, 0x53, 0x81, 0x40, 0x4d, 0xb2, 0xd7, 0x8e, 0x2f, 0x9e, 0x05, 0xf9, 0x65, 0xab,
+ 0x0b, 0xb5, 0x1f, 0x91, 0xc0, 0x0c, 0x9a, 0x75, 0xdb, 0x6d, 0xf4, 0xc4, 0x38, 0x58, 0x7e, 0x2d,
+ 0x27, 0x7a, 0x1f, 0x35, 0xa2, 0xb3, 0x18, 0xd2, 0x88, 0x69, 0x37, 0x62, 0xf7, 0x4e, 0x27, 0x92,
+ 0x9a, 0xc0, 0xed, 0x61, 0x68, 0xea, 0xb1, 0xb5, 0xd5, 0x75, 0x4c, 0x6e, 0xc3, 0xa0, 0xdf, 0x14,
+ 0x8a, 0x8e, 0x73, 0xd6, 0x1d, 0x7f, 0xdd, 0xb2, 0xed, 0x30, 0x42, 0xca, 0x81, 0x74, 0xde, 0xd7,
+ 0x25, 0x31, 0xc8, 0x1c, 0xae, 0x3b, 0x2d, 0x3d, 0x46, 0xb3, 0x6f, 0x06, 0x0b, 0x17, 0xf7, 0x7d,
+ 0xe8, 0xd1, 0x5c, 0xb4, 0xd8, 0xbc, 0xd1, 0x97, 0xca, 0x5c, 0x11, 0x91, 0x14, 0x8c, 0x2e, 0xa1,
+ 0xc0, 0x74, 0xa2, 0x5e, 0x1d, 0x61, 0x06, 0x78, 0x12, 0x28, 0xf5, 0x46, 0x45, 0xc7, 0xfe, 0xbe,
+ 0x81, 0x07, 0xe5, 0xb6, 0xf6, 0x93, 0x32, 0x98, 0xc3, 0x0e, 0x78, 0x01, 0x0a, 0x37, 0x0a, 0xcc,
+ 0x47, 0xb4, 0x2f, 0x0b, 0xfb, 0x02, 0xe3, 0x2a, 0xb3, 0x05, 0xc4, 0x0b, 0x7a, 0xcb, 0xea, 0xf6,
+ 0x0b, 0xba, 0x60, 0xf4, 0xa5, 0x0e, 0x00, 0x44, 0x1e, 0x08, 0xc8, 0x2f, 0x0b, 0x39, 0x04, 0x0f,
+ 0xe3, 0xee, 0xa8, 0x50, 0xf9, 0x15, 0x19, 0xcc, 0xa2, 0x49, 0x4a, 0x00, 0x4a, 0x83, 0x03, 0xc5,
+ 0xb1, 0xbb, 0xfb, 0xd1, 0xb2, 0x48, 0xf0, 0x98, 0xaa, 0x91, 0xfc, 0x91, 0xf0, 0xcc, 0x1d, 0x8b,
+ 0x88, 0xe1, 0x65, 0x42, 0xf8, 0x7d, 0x50, 0x68, 0x3e, 0x3f, 0x84, 0xb9, 0xa3, 0x82, 0xef, 0xb5,
+ 0x45, 0x50, 0xdc, 0xe8, 0x61, 0xe4, 0xbe, 0x24, 0x8b, 0x5c, 0xb7, 0x72, 0xe0, 0x30, 0x18, 0x32,
+ 0xb3, 0xba, 0x4e, 0xdb, 0xec, 0xae, 0x47, 0xe7, 0xa1, 0xa3, 0x04, 0xf5, 0x6e, 0xea, 0x1f, 0x4e,
+ 0x8e, 0xf5, 0xde, 0x9c, 0x78, 0x13, 0x09, 0x96, 0x11, 0x73, 0xf0, 0xee, 0x36, 0x70, 0xa2, 0x63,
+ 0x79, 0xe6, 0xc5, 0x2e, 0xd4, 0xed, 0xb6, 0xbb, 0x4f, 0xc4, 0x41, 0xa7, 0x55, 0x07, 0x5e, 0xa8,
+ 0xf7, 0x82, 0x82, 0xe7, 0xef, 0x77, 0xc9, 0x3c, 0x91, 0x3d, 0xa7, 0x17, 0x5b, 0x54, 0x13, 0x65,
+ 0x37, 0xc8, 0x57, 0xac, 0x5b, 0xe7, 0x94, 0x98, 0x5b, 0xa7, 0xfa, 0x44, 0x50, 0x74, 0x5c, 0x6b,
+ 0xdb, 0x22, 0x97, 0x0b, 0x2e, 0x1c, 0x08, 0xb8, 0x4b, 0x4c, 0x81, 0x06, 0xce, 0x62, 0xd0, 0xac,
+ 0xea, 0x93, 0xc1, 0x8c, 0xb5, 0x6b, 0x6e, 0xc3, 0x07, 0x2c, 0x9b, 0x84, 0x23, 0x58, 0xb8, 0xf3,
+ 0xf4, 0x81, 0x23, 0x88, 0xf4, 0xbd, 0x11, 0x65, 0x55, 0xef, 0x01, 0xd7, 0xb4, 0x5d, 0x68, 0xfa,
+ 0x10, 0x09, 0xe8, 0xbc, 0xd5, 0xd9, 0x86, 0x7e, 0x75, 0x6b, 0xcd, 0xf2, 0x3c, 0xcb, 0xde, 0xa6,
+ 0xf7, 0x87, 0xc6, 0x67, 0xd0, 0x3e, 0x28, 0x89, 0xc6, 0x14, 0xc4, 0x92, 0x21, 0x2a, 0x31, 0xc2,
+ 0x3d, 0xe7, 0x8c, 0x14, 0x65, 0x41, 0xe7, 0xd8, 0x57, 0x09, 0x45, 0xfb, 0x8b, 0x67, 0x2b, 0xfb,
+ 0xa1, 0xff, 0xf7, 0x25, 0x30, 0x5d, 0x71, 0xae, 0xd8, 0xb8, 0x99, 0xdc, 0x25, 0x66, 0x29, 0x0f,
+ 0x08, 0x10, 0xc0, 0xdf, 0x98, 0x9d, 0x78, 0xa6, 0x0c, 0xd7, 0x36, 0x28, 0x32, 0x06, 0x86, 0xc4,
+ 0x76, 0x27, 0x78, 0x0c, 0x3d, 0xa9, 0x9c, 0xec, 0xe5, 0xfa, 0xdb, 0x32, 0xc8, 0x57, 0x5c, 0xa7,
+ 0xa7, 0xbd, 0x2d, 0x97, 0xc2, 0x49, 0xac, 0xe3, 0x3a, 0xbd, 0x16, 0xbe, 0x88, 0x34, 0xda, 0x17,
+ 0x61, 0xd3, 0xd4, 0xbb, 0xc0, 0x74, 0xcf, 0xf1, 0x2c, 0x3f, 0x98, 0x84, 0x2c, 0xdc, 0xf9, 0xe8,
+ 0x81, 0x7d, 0xc1, 0x3a, 0xcd, 0x64, 0x84, 0xd9, 0x51, 0x9f, 0x8f, 0x45, 0x88, 0xe4, 0x82, 0xc4,
+ 0x18, 0x5c, 0xc6, 0xda, 0x97, 0xaa, 0xbd, 0x94, 0x45, 0xf2, 0xa9, 0x3c, 0x92, 0x8f, 0x19, 0x20,
+ 0x61, 0xd7, 0xe9, 0x8d, 0xc5, 0xad, 0xe3, 0x15, 0x21, 0xaa, 0x4f, 0xe3, 0x50, 0xbd, 0x55, 0xa8,
+ 0xcc, 0xec, 0x11, 0xfd, 0x60, 0x1e, 0x00, 0x6c, 0xa4, 0x6c, 0xa0, 0xe9, 0x93, 0x98, 0x85, 0xf6,
+ 0xc3, 0x79, 0x46, 0x96, 0x25, 0x5e, 0x96, 0x8f, 0x8b, 0xb1, 0x81, 0x30, 0xf9, 0x18, 0x89, 0x96,
+ 0x40, 0x61, 0x0f, 0xbd, 0xa6, 0x12, 0x15, 0x24, 0x81, 0x1f, 0x0d, 0xf2, 0xa5, 0xf6, 0x9b, 0x39,
+ 0x50, 0xc0, 0x09, 0xea, 0x19, 0x00, 0xb0, 0x59, 0x40, 0x8e, 0x64, 0xe6, 0xb0, 0x01, 0xc0, 0xa4,
+ 0x60, 0x6d, 0xb5, 0x3a, 0xf4, 0x35, 0x31, 0xb8, 0xa3, 0x04, 0xf4, 0x35, 0x36, 0x16, 0x30, 0x2d,
+ 0x6a, 0x3e, 0x30, 0x29, 0xe8, 0x6b, 0xfc, 0x54, 0x83, 0x5b, 0xe4, 0x8e, 0x88, 0xbc, 0x11, 0x25,
+ 0x84, 0x5f, 0xd7, 0xc2, 0x9b, 0x45, 0x83, 0xaf, 0x71, 0x0a, 0x9a, 0x4a, 0x63, 0xb5, 0x5c, 0x8a,
+ 0x8a, 0x28, 0xe2, 0x4c, 0xfd, 0xc9, 0xda, 0xeb, 0x42, 0xb5, 0xa9, 0x70, 0x6a, 0x73, 0x47, 0x0a,
+ 0xf1, 0x66, 0xaf, 0x3c, 0x7f, 0x5a, 0x00, 0x33, 0x75, 0xa7, 0x43, 0x75, 0x87, 0x99, 0x6e, 0x7e,
+ 0xba, 0x90, 0x6a, 0xba, 0x19, 0xd2, 0x88, 0x51, 0x90, 0xa7, 0xf3, 0x0a, 0x22, 0x46, 0x81, 0xd5,
+ 0x0f, 0x75, 0x09, 0x14, 0xb1, 0xf6, 0x1e, 0xbc, 0xb2, 0x32, 0x89, 0x04, 0x16, 0xad, 0x41, 0xbf,
+ 0xfc, 0x0f, 0xa7, 0x63, 0xff, 0x0d, 0x14, 0x70, 0x05, 0x13, 0xf6, 0x86, 0xf8, 0x8a, 0x4a, 0xc9,
+ 0x15, 0x95, 0x93, 0x2b, 0x9a, 0xef, 0xaf, 0x68, 0x9a, 0x55, 0x84, 0x38, 0x0d, 0xc9, 0x5e, 0xc7,
+ 0xff, 0x76, 0x0a, 0x80, 0xba, 0x79, 0xd9, 0xda, 0x26, 0x7b, 0xcb, 0x7f, 0x18, 0xcc, 0x9e, 0xe8,
+ 0x2e, 0xf0, 0x8f, 0x31, 0x03, 0xe1, 0x5d, 0x60, 0x8a, 0x8e, 0x7b, 0xb4, 0x22, 0xd7, 0x73, 0x15,
+ 0x89, 0xa8, 0x10, 0xa3, 0xf6, 0x21, 0xdf, 0x08, 0xf2, 0x73, 0xb7, 0xeb, 0x4b, 0x7d, 0xb7, 0xeb,
+ 0x0f, 0xde, 0xc1, 0x88, 0xb9, 0x73, 0x5f, 0x7b, 0x9f, 0xf0, 0x19, 0x2a, 0x86, 0x1f, 0xa6, 0x46,
+ 0x31, 0x4d, 0xf0, 0x89, 0x60, 0xca, 0x09, 0xb7, 0xc3, 0xe5, 0xd8, 0x55, 0xb4, 0xaa, 0xbd, 0xe5,
+ 0x18, 0x41, 0x4e, 0xc1, 0xad, 0x33, 0x21, 0x3e, 0x26, 0x72, 0x4c, 0xf1, 0xd4, 0x4a, 0x10, 0x6f,
+ 0x13, 0xd5, 0xe3, 0xbc, 0xe5, 0xef, 0xd4, 0x2c, 0xfb, 0x92, 0xa7, 0x7d, 0xbf, 0x98, 0x05, 0xc9,
+ 0xe0, 0x2f, 0xa5, 0xc3, 0x9f, 0x8f, 0x77, 0xd5, 0xe4, 0x51, 0xbb, 0x37, 0x8e, 0xca, 0x60, 0x6e,
+ 0x63, 0x00, 0xbc, 0x1b, 0x14, 0x09, 0xa3, 0xb4, 0x13, 0x3d, 0x1b, 0x8b, 0x5f, 0x48, 0xc9, 0xa0,
+ 0x5f, 0x68, 0xef, 0x0d, 0x71, 0x3c, 0xc7, 0xe1, 0xb8, 0x74, 0x28, 0xce, 0x32, 0x87, 0xf4, 0xec,
+ 0x13, 0xc0, 0x14, 0x95, 0xb4, 0xba, 0xc0, 0xb6, 0x62, 0xe5, 0x98, 0x0a, 0x40, 0x71, 0xcd, 0xb9,
+ 0x0c, 0x5b, 0x8e, 0x92, 0x43, 0xff, 0x11, 0x7f, 0x2d, 0x47, 0x91, 0xb4, 0x57, 0x4e, 0x83, 0xe9,
+ 0x30, 0xd0, 0xe1, 0xef, 0x4b, 0x40, 0x29, 0xe3, 0x19, 0xda, 0xb2, 0xeb, 0xec, 0x92, 0x1a, 0x89,
+ 0xfb, 0xe3, 0xff, 0x8c, 0xb0, 0x83, 0x48, 0x18, 0x80, 0xb0, 0xbf, 0xb0, 0x18, 0x2c, 0xc9, 0x12,
+ 0xa6, 0x14, 0x2c, 0x61, 0x6a, 0x6f, 0x15, 0x72, 0x18, 0x11, 0x2d, 0x25, 0xfb, 0xa6, 0xf6, 0x5b,
+ 0x12, 0x28, 0x94, 0xbb, 0x8e, 0x0d, 0xd9, 0x43, 0xa3, 0x43, 0x4f, 0x27, 0x0e, 0xde, 0xc7, 0xd0,
+ 0x9e, 0x23, 0x89, 0xda, 0x1a, 0x91, 0x00, 0x50, 0xd9, 0x82, 0xb2, 0x15, 0x1b, 0xa4, 0x12, 0x49,
+ 0x67, 0x2f, 0xd0, 0xaf, 0x4a, 0x60, 0x86, 0x44, 0x26, 0x2b, 0x75, 0xbb, 0xda, 0xa3, 0x23, 0xa1,
+ 0x0e, 0x08, 0x16, 0xa9, 0xfd, 0xb2, 0xf0, 0xa1, 0xa8, 0xb0, 0x56, 0x21, 0xed, 0x14, 0xc1, 0xf5,
+ 0xd2, 0x9d, 0xd1, 0x11, 0xdb, 0x89, 0x1b, 0xca, 0x50, 0xf6, 0xa2, 0xfe, 0x03, 0x09, 0x19, 0x00,
+ 0xf6, 0xa5, 0x75, 0x17, 0x5e, 0xb6, 0xe0, 0x15, 0xed, 0xda, 0x48, 0xd8, 0x07, 0xc3, 0x2e, 0xbd,
+ 0x49, 0x78, 0x11, 0x87, 0x21, 0x19, 0xbb, 0x11, 0x36, 0xdb, 0x8d, 0x32, 0xd1, 0x5e, 0xbc, 0x3f,
+ 0x16, 0x16, 0x43, 0xc6, 0x60, 0xb3, 0x0b, 0xae, 0xd9, 0xc4, 0x73, 0x91, 0xbd, 0x60, 0x3f, 0x3a,
+ 0x05, 0xa6, 0x37, 0x6c, 0xaf, 0xd7, 0x35, 0xbd, 0x1d, 0xed, 0x5f, 0x65, 0x50, 0x24, 0x17, 0xa5,
+ 0x6a, 0xdf, 0xc5, 0x45, 0x77, 0x79, 0xd6, 0x1e, 0x74, 0x03, 0x07, 0x1e, 0xf2, 0x10, 0xd9, 0x47,
+ 0x12, 0x63, 0x1f, 0x69, 0x1f, 0x94, 0x45, 0x27, 0xa9, 0x41, 0xa1, 0xf4, 0x66, 0xd6, 0xf8, 0x80,
+ 0x22, 0x3d, 0xab, 0xed, 0xef, 0xb9, 0xd0, 0x1b, 0x18, 0x50, 0x24, 0x96, 0xca, 0x3a, 0xf9, 0xca,
+ 0x08, 0x3f, 0xd7, 0x4c, 0x30, 0x45, 0x13, 0x0f, 0x6c, 0x46, 0x1d, 0x8c, 0x78, 0x70, 0x0a, 0x14,
+ 0x4d, 0xd7, 0xb7, 0x3c, 0x9f, 0x6e, 0xcf, 0xd2, 0x27, 0xd4, 0x5d, 0x92, 0x7f, 0x1b, 0x6e, 0x37,
+ 0x88, 0x03, 0x15, 0x26, 0x68, 0xbf, 0x22, 0x34, 0x7f, 0x4c, 0xae, 0x79, 0x3a, 0xc8, 0x1f, 0x18,
+ 0x61, 0x85, 0xfb, 0x51, 0xe0, 0x2a, 0xa3, 0xd4, 0xd2, 0x37, 0x49, 0xd8, 0xa0, 0x30, 0x42, 0x50,
+ 0x47, 0x7b, 0x8f, 0xcc, 0xac, 0xdf, 0xed, 0x73, 0x63, 0x04, 0x95, 0x62, 0x34, 0x46, 0x84, 0x09,
+ 0x09, 0x7b, 0xdd, 0xdc, 0x12, 0xae, 0x2c, 0xbc, 0x84, 0xab, 0xfd, 0x92, 0xf0, 0x5e, 0x54, 0x28,
+ 0xca, 0x21, 0x6b, 0x80, 0x49, 0x17, 0x29, 0x7e, 0x58, 0x68, 0x5f, 0x69, 0x58, 0x49, 0x47, 0x08,
+ 0xdb, 0x37, 0x4f, 0x01, 0xa9, 0x54, 0xd5, 0x7e, 0x74, 0x0a, 0xcc, 0x9d, 0x77, 0x2d, 0xdf, 0xb2,
+ 0xb7, 0x5b, 0x8e, 0xd3, 0xf5, 0xb4, 0x6f, 0x30, 0x1b, 0x15, 0x4f, 0x06, 0xc5, 0xb6, 0x63, 0x6f,
+ 0x59, 0xdb, 0x54, 0x8c, 0x67, 0xb8, 0xca, 0x95, 0xaa, 0x8b, 0xeb, 0xae, 0x73, 0xd9, 0xea, 0x40,
+ 0xb7, 0x8c, 0x73, 0x19, 0x34, 0x37, 0xd2, 0x63, 0x26, 0xf0, 0xda, 0x1d, 0xfd, 0x5f, 0xb1, 0xe5,
+ 0x85, 0x91, 0x5f, 0x68, 0x22, 0x13, 0x77, 0xad, 0x0a, 0xa6, 0xbb, 0xa6, 0xbd, 0xbd, 0x17, 0xcc,
+ 0xbc, 0xfb, 0x77, 0x51, 0xe3, 0x28, 0xd5, 0xe8, 0x47, 0x46, 0xf8, 0x39, 0x76, 0x72, 0x43, 0xa6,
+ 0x3e, 0x69, 0x7b, 0xf8, 0xff, 0xd9, 0x8f, 0xe5, 0xc0, 0x2c, 0x53, 0xa8, 0x3a, 0x0b, 0xa6, 0x2a,
+ 0xfa, 0x72, 0x69, 0xa3, 0xd6, 0x52, 0x8e, 0x21, 0x29, 0x36, 0x37, 0xd6, 0xd6, 0x4a, 0x46, 0xf5,
+ 0x7b, 0x74, 0x25, 0x87, 0xde, 0xad, 0x18, 0x25, 0xf4, 0xac, 0x48, 0xe8, 0xa1, 0xb9, 0xda, 0x30,
+ 0x5a, 0x7a, 0x5d, 0x91, 0x91, 0x3d, 0xaa, 0x3f, 0x73, 0xbd, 0x54, 0xaf, 0x28, 0x79, 0xf4, 0x7f,
+ 0x69, 0xa3, 0x56, 0xd3, 0x5b, 0x4a, 0x21, 0x0a, 0xc5, 0x56, 0x44, 0xc9, 0xe5, 0x52, 0x73, 0xa3,
+ 0x54, 0x53, 0xa6, 0x50, 0xf2, 0xf2, 0x46, 0xbd, 0x7e, 0x41, 0x99, 0x46, 0x45, 0x94, 0x1b, 0xf5,
+ 0xe5, 0x6a, 0x45, 0xaf, 0xb7, 0x94, 0x19, 0xf5, 0x2a, 0x70, 0xbc, 0xd9, 0x32, 0x4a, 0xd5, 0x95,
+ 0xd5, 0xd6, 0x72, 0xc3, 0x38, 0x5f, 0x32, 0x2a, 0x0a, 0x50, 0x15, 0x30, 0xb7, 0x6e, 0x34, 0x96,
+ 0x75, 0x1c, 0xcb, 0xa3, 0x54, 0x53, 0x66, 0xd1, 0x57, 0x2d, 0xa3, 0x54, 0x6f, 0xd6, 0x4a, 0x2d,
+ 0x5d, 0x99, 0x3b, 0x7b, 0x3f, 0x98, 0x0e, 0xaa, 0xab, 0x16, 0x81, 0xa4, 0xd7, 0x95, 0x63, 0xf8,
+ 0xb7, 0xa9, 0xe4, 0xd0, 0xef, 0x32, 0xe2, 0xb7, 0x08, 0xa4, 0x8a, 0xae, 0xc8, 0xe8, 0xb7, 0xda,
+ 0x52, 0xf2, 0xe8, 0x77, 0x1d, 0xb1, 0x58, 0x04, 0xd2, 0x6a, 0x55, 0x29, 0xa2, 0xdf, 0xd6, 0xaa,
+ 0x32, 0xc5, 0xdf, 0x97, 0x9e, 0xd8, 0x0b, 0x1f, 0x94, 0x7c, 0x8c, 0xa1, 0xe1, 0x47, 0x73, 0x64,
+ 0xfc, 0x5f, 0x7b, 0x85, 0x24, 0xd2, 0xd7, 0x25, 0xd3, 0x4f, 0xd7, 0x68, 0xde, 0x92, 0x1b, 0x63,
+ 0xab, 0x51, 0x35, 0x70, 0x4a, 0xaf, 0x57, 0xd6, 0x1b, 0xd5, 0x7a, 0x8b, 0x04, 0xcc, 0xd2, 0x4b,
+ 0xe5, 0x55, 0x8c, 0x33, 0x44, 0x08, 0xae, 0x35, 0x2a, 0x7a, 0x0d, 0xbf, 0x58, 0x6e, 0x6c, 0xd4,
+ 0x2b, 0xca, 0x16, 0x2a, 0xab, 0xb4, 0xd1, 0x5a, 0xdd, 0x34, 0xf4, 0x67, 0x6c, 0x54, 0x0d, 0xbd,
+ 0xa2, 0x6c, 0x23, 0x1a, 0xb5, 0x52, 0x7d, 0x65, 0xa3, 0xb4, 0x42, 0xf7, 0x0b, 0x37, 0xd6, 0xd7,
+ 0x1b, 0x78, 0xc7, 0x70, 0x47, 0xfb, 0x87, 0x3c, 0x98, 0x2e, 0xed, 0xf9, 0xce, 0x96, 0xd5, 0xed,
+ 0x6a, 0x0f, 0x4b, 0x87, 0x6f, 0x8a, 0x25, 0xae, 0x29, 0x1e, 0x68, 0x40, 0x41, 0x59, 0x61, 0xe3,
+ 0x09, 0x12, 0x98, 0x76, 0x78, 0x3a, 0x72, 0xc6, 0x96, 0xe9, 0x4e, 0x33, 0x79, 0x24, 0x8e, 0xb8,
+ 0x36, 0x6d, 0x59, 0xf8, 0x0d, 0x7d, 0x3c, 0xfb, 0x00, 0x98, 0x63, 0x29, 0xe1, 0xa0, 0x52, 0xa5,
+ 0x15, 0x12, 0x75, 0x2a, 0x88, 0x33, 0x47, 0xa2, 0x4e, 0xe1, 0x43, 0x01, 0x12, 0x6e, 0x2f, 0xd5,
+ 0x56, 0x0d, 0xe9, 0xe9, 0x71, 0x30, 0x5b, 0xd1, 0x9b, 0x65, 0xa3, 0x8a, 0xfd, 0xd4, 0x95, 0x3c,
+ 0xef, 0x65, 0x90, 0x68, 0x99, 0xf1, 0x35, 0x12, 0x55, 0xca, 0x6f, 0x09, 0xd9, 0x5b, 0xf1, 0xb4,
+ 0xd3, 0x29, 0xe4, 0x8b, 0x1f, 0x69, 0x0a, 0xa9, 0xbd, 0x38, 0x4f, 0xd6, 0xc9, 0x9a, 0x7b, 0xbb,
+ 0xbb, 0xa6, 0xbb, 0xcf, 0xf9, 0xab, 0x8d, 0xaa, 0x77, 0xf1, 0xe3, 0x7b, 0x62, 0x84, 0x1a, 0x64,
+ 0x42, 0xf5, 0x5c, 0x67, 0xb7, 0x17, 0xf4, 0xd5, 0xf4, 0x49, 0xfb, 0x7f, 0x84, 0x67, 0x8e, 0xa5,
+ 0xea, 0x22, 0x53, 0x99, 0x11, 0x86, 0xf6, 0x1f, 0x90, 0x44, 0x66, 0x91, 0x89, 0xc5, 0x7c, 0xbb,
+ 0x6b, 0xc4, 0xdf, 0xe4, 0xc1, 0x55, 0x34, 0xfa, 0x48, 0xb8, 0xfe, 0x80, 0x4c, 0xd5, 0x57, 0x67,
+ 0xaa, 0x19, 0xd4, 0xa0, 0x96, 0x23, 0x83, 0x9a, 0xd9, 0xf0, 0xce, 0x0b, 0x6e, 0x78, 0xbf, 0x4d,
+ 0xf8, 0xd0, 0x43, 0xa9, 0xba, 0x38, 0xa0, 0x8e, 0x93, 0xd9, 0x96, 0x7f, 0xbe, 0x24, 0xb2, 0xda,
+ 0x2a, 0xc4, 0xe1, 0xb7, 0xbb, 0xae, 0xbd, 0x23, 0x07, 0x16, 0x78, 0x55, 0x51, 0x9f, 0x04, 0xa6,
+ 0x7b, 0x34, 0x85, 0xca, 0xe5, 0x74, 0x9c, 0x72, 0x19, 0x61, 0x4e, 0x04, 0x11, 0xb4, 0x3b, 0x3d,
+ 0xc7, 0xb2, 0xc3, 0x75, 0xf9, 0xe0, 0x19, 0xcd, 0x3b, 0xf1, 0xd4, 0x21, 0x88, 0x45, 0x87, 0x1f,
+ 0xa2, 0x08, 0xa4, 0x79, 0x26, 0x02, 0x29, 0x12, 0xa2, 0x0f, 0x77, 0xf1, 0x5d, 0x38, 0x7b, 0x2e,
+ 0x71, 0x78, 0x91, 0x0c, 0x36, 0xe9, 0xec, 0xd3, 0xc0, 0x74, 0x50, 0x3e, 0xb2, 0xee, 0x1a, 0xb5,
+ 0x5a, 0x69, 0xad, 0x44, 0x16, 0x2a, 0x1b, 0xeb, 0x7a, 0xbd, 0x54, 0x55, 0x72, 0x68, 0xa0, 0xab,
+ 0xad, 0x35, 0x5b, 0x1b, 0x95, 0x6a, 0x43, 0x91, 0xf0, 0x13, 0xca, 0x54, 0x5e, 0x5f, 0x57, 0x64,
+ 0xed, 0x8d, 0x53, 0x60, 0x6a, 0xc5, 0xec, 0x76, 0xa1, 0xbb, 0xaf, 0x7d, 0x55, 0x02, 0x4a, 0x30,
+ 0x3b, 0x58, 0x33, 0x6d, 0x6b, 0x0b, 0x7a, 0x7e, 0xf2, 0x42, 0xc5, 0xfb, 0x84, 0x2f, 0xc8, 0xa2,
+ 0x65, 0x2c, 0xf6, 0xd3, 0x8f, 0xd1, 0xf1, 0xdb, 0x41, 0xde, 0xb2, 0xb7, 0x1c, 0xba, 0x5c, 0xd1,
+ 0xef, 0x6f, 0x13, 0x7c, 0x8c, 0xb7, 0x0d, 0x70, 0x46, 0xc1, 0x3b, 0xb2, 0x04, 0xb9, 0xc8, 0x7e,
+ 0xd5, 0xe2, 0x1d, 0x79, 0x30, 0x1f, 0x30, 0x51, 0xb5, 0x3b, 0xf0, 0x21, 0x76, 0x1b, 0xf4, 0x27,
+ 0xf3, 0xa2, 0xc1, 0x6f, 0xfa, 0xeb, 0x83, 0x49, 0xc5, 0x88, 0xb4, 0x05, 0x40, 0xdb, 0xf4, 0xe1,
+ 0xb6, 0xe3, 0x5a, 0xe1, 0x5a, 0xc4, 0x93, 0xd2, 0x50, 0x2b, 0x93, 0xaf, 0xf7, 0x0d, 0x86, 0x8e,
+ 0x7a, 0x2f, 0x98, 0x85, 0x61, 0xb4, 0xc1, 0x60, 0x9b, 0x34, 0x11, 0x2f, 0x36, 0xbf, 0xf6, 0x07,
+ 0x42, 0x31, 0x76, 0x44, 0xaa, 0x99, 0x0e, 0xb3, 0xcd, 0xd1, 0xba, 0x9e, 0x8d, 0xfa, 0x5a, 0xc9,
+ 0x68, 0xae, 0x96, 0x6a, 0xb5, 0x6a, 0x7d, 0x25, 0x0c, 0x7b, 0xab, 0x82, 0x85, 0x4a, 0xe3, 0x7c,
+ 0x9d, 0x89, 0x4b, 0x9c, 0xd7, 0xd6, 0xc1, 0x74, 0x20, 0xaf, 0x41, 0xa7, 0xa8, 0x58, 0x99, 0xd1,
+ 0x53, 0x54, 0x4c, 0x12, 0x32, 0x0d, 0xad, 0x76, 0xe8, 0x5a, 0x8f, 0xff, 0x6b, 0xbf, 0x61, 0x82,
+ 0x02, 0xf6, 0x67, 0xd1, 0xde, 0x85, 0xe7, 0xc5, 0xbd, 0xae, 0xd9, 0x86, 0xda, 0x6e, 0x8a, 0x95,
+ 0xf0, 0xe0, 0xc6, 0x56, 0xe9, 0xc0, 0x8d, 0xad, 0xf8, 0x2f, 0x1d, 0x31, 0x4e, 0x0e, 0xf2, 0xa1,
+ 0x31, 0x48, 0x16, 0x3e, 0x1c, 0x4d, 0xa2, 0x67, 0x13, 0x71, 0xbd, 0xa1, 0x6c, 0xc6, 0xa8, 0x64,
+ 0x3c, 0x4f, 0x59, 0x5c, 0xc5, 0x91, 0xc4, 0x51, 0xf6, 0x2d, 0xfe, 0x4b, 0x79, 0x50, 0x68, 0xf6,
+ 0xba, 0x96, 0xaf, 0xfd, 0x9c, 0x34, 0x16, 0xcc, 0xc8, 0x2d, 0xbb, 0xf2, 0xd0, 0x5b, 0x76, 0x23,
+ 0x7f, 0xc9, 0xbc, 0x80, 0xbf, 0x64, 0x0b, 0x3e, 0xe4, 0xf3, 0xfe, 0x92, 0x77, 0xd1, 0x69, 0x1b,
+ 0xf1, 0xb6, 0x7c, 0xcc, 0x00, 0x91, 0xe2, 0x6a, 0x0d, 0xb8, 0x13, 0xe1, 0xec, 0x13, 0x68, 0x68,
+ 0x76, 0x00, 0x8a, 0x4b, 0x8d, 0x56, 0xab, 0xb1, 0xa6, 0x1c, 0xc3, 0xd3, 0xaf, 0xc6, 0x3a, 0x09,
+ 0x94, 0x5b, 0xad, 0xd7, 0x75, 0x83, 0x9b, 0x71, 0xf1, 0x57, 0x2e, 0x26, 0x4e, 0xb0, 0xf8, 0xb2,
+ 0xb3, 0x54, 0x2f, 0xb1, 0x45, 0xf0, 0x78, 0x7e, 0xb2, 0x57, 0xae, 0x9f, 0x96, 0x41, 0x61, 0x0d,
+ 0xba, 0xdb, 0x50, 0x7b, 0x56, 0x0a, 0x07, 0xbb, 0x2d, 0xcb, 0xf5, 0x48, 0x68, 0xfd, 0xc8, 0xc1,
+ 0x8e, 0x4d, 0x53, 0x6f, 0x02, 0xf3, 0x1e, 0x6c, 0x3b, 0x76, 0x27, 0xc8, 0x44, 0xfa, 0x23, 0x3e,
+ 0x51, 0x7b, 0x59, 0x4a, 0xc8, 0x30, 0xa3, 0x63, 0xf1, 0x92, 0x4b, 0x03, 0xcc, 0xa0, 0x52, 0xb3,
+ 0x07, 0xe6, 0xeb, 0x32, 0xfa, 0xa8, 0xb7, 0xaf, 0xbd, 0x4c, 0xd8, 0xf3, 0xf1, 0x36, 0x50, 0xbc,
+ 0x18, 0xdc, 0xae, 0x25, 0xc7, 0xf6, 0xc7, 0x34, 0x8f, 0xba, 0x04, 0x4e, 0x78, 0xb0, 0x0b, 0xdb,
+ 0x3e, 0xec, 0xa0, 0xa6, 0x6b, 0x0c, 0xed, 0x14, 0x0e, 0x66, 0xd7, 0x7e, 0x87, 0x05, 0xf0, 0x1e,
+ 0x1e, 0xc0, 0x9b, 0x07, 0x88, 0x12, 0x55, 0x28, 0x7e, 0x6e, 0x82, 0xaa, 0xd1, 0xec, 0x3a, 0xa1,
+ 0xe1, 0x1b, 0x3c, 0xa3, 0x77, 0x3b, 0xfe, 0x6e, 0x17, 0xbf, 0xa3, 0x47, 0x83, 0x83, 0x67, 0x75,
+ 0x11, 0x4c, 0x99, 0xf6, 0x3e, 0x7e, 0x95, 0x4f, 0xa8, 0x75, 0x90, 0x49, 0x7b, 0x65, 0x88, 0xfc,
+ 0x7d, 0x1c, 0xf2, 0x8f, 0x13, 0x63, 0x37, 0x7b, 0xe0, 0x7f, 0x68, 0x0a, 0x14, 0xd6, 0x4d, 0xcf,
+ 0x87, 0xda, 0xff, 0x94, 0x45, 0x91, 0xbf, 0x19, 0x2c, 0x6c, 0x39, 0xed, 0x3d, 0x0f, 0x76, 0xf8,
+ 0x46, 0xd9, 0x97, 0x3a, 0x0e, 0xcc, 0xd5, 0x5b, 0x81, 0x12, 0x24, 0x52, 0xb2, 0x81, 0x0b, 0xec,
+ 0x81, 0x74, 0x7c, 0x81, 0x9f, 0xb7, 0x6e, 0xba, 0x7e, 0x63, 0x0b, 0xa7, 0x85, 0x17, 0xf8, 0xb1,
+ 0x89, 0x1c, 0xf4, 0xc5, 0x04, 0xe8, 0xa7, 0xe2, 0xa1, 0x9f, 0x16, 0x80, 0x5e, 0x2d, 0x81, 0xe9,
+ 0x2d, 0xab, 0x0b, 0xf1, 0x07, 0x33, 0xf8, 0x83, 0x41, 0x63, 0x12, 0x96, 0x7d, 0x38, 0x26, 0x2d,
+ 0x5b, 0x5d, 0x68, 0x84, 0x9f, 0x05, 0x13, 0x19, 0x10, 0x4d, 0x64, 0x6a, 0xe4, 0x24, 0x1c, 0x32,
+ 0xbc, 0x6c, 0x73, 0x17, 0x06, 0x1b, 0xdf, 0x36, 0x3d, 0x96, 0xde, 0x31, 0x7d, 0x13, 0x83, 0x31,
+ 0x67, 0xe0, 0xff, 0xbc, 0x4f, 0xb6, 0xdc, 0xef, 0x93, 0xfd, 0x3c, 0x39, 0x5d, 0x8f, 0x18, 0x30,
+ 0x1b, 0xd3, 0xa2, 0x2e, 0x06, 0x00, 0x11, 0x4b, 0x31, 0x7c, 0x46, 0xc0, 0xb4, 0x4d, 0x17, 0xfa,
+ 0xeb, 0xac, 0x17, 0x74, 0xc1, 0xe0, 0x13, 0xf1, 0x21, 0x1c, 0xaf, 0x69, 0xee, 0x92, 0x0b, 0xfa,
+ 0xca, 0xe8, 0x1d, 0x3d, 0x5c, 0x71, 0x20, 0x3d, 0xea, 0x7f, 0x0b, 0xe3, 0xee, 0x7f, 0x07, 0xd5,
+ 0x31, 0xfb, 0x66, 0xf8, 0x9a, 0x3c, 0x90, 0xcb, 0x7b, 0xfe, 0x23, 0xba, 0xfb, 0xfd, 0x96, 0xb0,
+ 0x8f, 0x39, 0xed, 0xcf, 0xf6, 0xfc, 0xa3, 0xed, 0x7d, 0x53, 0x6a, 0x89, 0x98, 0x2f, 0x7b, 0x5c,
+ 0xdd, 0xb2, 0xd7, 0x91, 0xb7, 0xc9, 0xe1, 0xd1, 0xa8, 0x87, 0x73, 0x87, 0x37, 0xcd, 0x35, 0xd2,
+ 0x3f, 0x31, 0x3d, 0x43, 0xf8, 0x1c, 0x74, 0x3c, 0x79, 0xee, 0x66, 0x02, 0xec, 0xda, 0x8a, 0x45,
+ 0x39, 0x67, 0x90, 0x07, 0xed, 0xe5, 0xc2, 0x07, 0x46, 0x89, 0xd8, 0x12, 0x8f, 0xf1, 0xa4, 0xb3,
+ 0xa9, 0x5e, 0x2d, 0x74, 0x6c, 0x34, 0xa1, 0xd8, 0xec, 0x01, 0xfb, 0x7b, 0xf6, 0x98, 0x4e, 0xe9,
+ 0xd0, 0x88, 0x69, 0xaf, 0x12, 0x5e, 0xd0, 0x27, 0xd5, 0x1e, 0xb2, 0x57, 0x9f, 0x4e, 0xde, 0x62,
+ 0x8e, 0x62, 0x89, 0x05, 0x4f, 0xe0, 0xc6, 0x61, 0x19, 0x14, 0xc9, 0xc2, 0xaf, 0xf6, 0x66, 0xe1,
+ 0x26, 0x82, 0x7a, 0x23, 0xfe, 0xf8, 0x4e, 0xf8, 0x9c, 0x66, 0xcd, 0x81, 0x3b, 0xe6, 0x93, 0x4f,
+ 0x75, 0xcc, 0x87, 0x8f, 0xc0, 0x22, 0xd0, 0x8e, 0x48, 0x1d, 0x33, 0x9e, 0x4e, 0xa6, 0x69, 0x61,
+ 0x03, 0x19, 0xca, 0x1e, 0xef, 0x17, 0x14, 0xc0, 0x1c, 0x29, 0x9a, 0x9c, 0x2f, 0xd4, 0xde, 0x23,
+ 0x7d, 0xfb, 0xa0, 0xae, 0xd6, 0xc1, 0xdc, 0x15, 0xcc, 0x36, 0xb9, 0x49, 0x98, 0xae, 0x5c, 0xdc,
+ 0x9a, 0xb8, 0xee, 0x41, 0xea, 0x19, 0xdc, 0x3d, 0xcc, 0x7d, 0x8f, 0x64, 0x4c, 0x36, 0x58, 0xc8,
+ 0xe1, 0x89, 0x22, 0x36, 0xb2, 0xd8, 0x24, 0xf5, 0x14, 0x28, 0x5e, 0xb6, 0xe0, 0x95, 0x6a, 0x87,
+ 0x5a, 0xb7, 0xf4, 0x49, 0xfb, 0x55, 0x61, 0x9f, 0x49, 0x16, 0x6e, 0xca, 0x4b, 0xb6, 0x5a, 0x28,
+ 0xe6, 0x39, 0x39, 0x94, 0xad, 0x09, 0x44, 0x03, 0x92, 0xc8, 0x6d, 0xe7, 0x34, 0xcc, 0x7c, 0x39,
+ 0x85, 0x22, 0xc6, 0x19, 0xce, 0x7c, 0x10, 0xbe, 0xc4, 0xb3, 0xe6, 0x44, 0x00, 0x51, 0xf9, 0x63,
+ 0xe9, 0xf3, 0xc5, 0x22, 0xc3, 0x0d, 0x29, 0x3a, 0x7b, 0xc9, 0xbf, 0x4e, 0x06, 0x33, 0x4d, 0xe8,
+ 0x2f, 0x5b, 0xb0, 0xdb, 0xf1, 0x34, 0xf7, 0xf0, 0xa6, 0xd1, 0xed, 0xa0, 0xb8, 0x85, 0x89, 0x0d,
+ 0xdb, 0x9c, 0xa4, 0xd9, 0xb4, 0xd7, 0x48, 0xa2, 0x7e, 0x40, 0x74, 0xf5, 0x2d, 0xe0, 0x76, 0x2c,
+ 0x30, 0x89, 0x9d, 0xa6, 0x4b, 0x2e, 0x79, 0x02, 0xd7, 0xf8, 0xc8, 0x60, 0x0e, 0x6f, 0xff, 0x43,
+ 0xbf, 0xd4, 0xb5, 0xb6, 0x6d, 0xf6, 0x8e, 0xee, 0x91, 0x5b, 0x88, 0x7a, 0x07, 0x28, 0x98, 0x88,
+ 0x1a, 0x75, 0x77, 0xd3, 0x06, 0x76, 0x9e, 0xb8, 0x3c, 0x83, 0x64, 0x4c, 0x71, 0x69, 0x46, 0xa4,
+ 0xd8, 0x01, 0xcf, 0x13, 0xbc, 0x34, 0x63, 0x68, 0xe1, 0xd9, 0x23, 0xf6, 0x15, 0x19, 0x9c, 0xa4,
+ 0x0c, 0x9c, 0x83, 0xae, 0x6f, 0xb5, 0xcd, 0x2e, 0x41, 0xee, 0x45, 0xb9, 0x71, 0x40, 0xb7, 0x0a,
+ 0xe6, 0x2f, 0xb3, 0x64, 0x29, 0x84, 0x67, 0x07, 0x42, 0xc8, 0x31, 0x60, 0xf0, 0x1f, 0xa6, 0xb8,
+ 0x7c, 0x80, 0x93, 0x2a, 0x47, 0x73, 0x82, 0x97, 0x0f, 0x08, 0x33, 0x91, 0x3d, 0xc4, 0x2f, 0xa5,
+ 0x41, 0x35, 0xa3, 0xee, 0xf3, 0x0f, 0x85, 0xb1, 0xdd, 0x00, 0xb3, 0x18, 0x4b, 0xf2, 0x21, 0x5d,
+ 0x86, 0x48, 0x50, 0xe2, 0xb0, 0xdf, 0xa1, 0xd7, 0xa5, 0x87, 0xdf, 0x1a, 0x2c, 0x1d, 0xed, 0x3c,
+ 0x00, 0xd1, 0x2b, 0xb6, 0x93, 0xce, 0xc5, 0x75, 0xd2, 0x92, 0x58, 0x27, 0xfd, 0x26, 0xe1, 0x30,
+ 0x87, 0x83, 0xd9, 0x3e, 0xbc, 0x7a, 0x88, 0x05, 0xb8, 0x1b, 0x5e, 0x7a, 0xf6, 0x7a, 0xf1, 0x4a,
+ 0xaa, 0x17, 0x95, 0xbd, 0x5e, 0xd7, 0x6a, 0xa3, 0xf9, 0xd4, 0x27, 0xc6, 0x32, 0x9f, 0x62, 0xfb,
+ 0x03, 0xb9, 0xaf, 0x3f, 0x38, 0x84, 0x25, 0x7d, 0x0b, 0x38, 0x4e, 0x8a, 0x28, 0x87, 0x6c, 0x15,
+ 0x48, 0x10, 0xb7, 0xbe, 0x64, 0x3e, 0xa2, 0xb8, 0xa0, 0x12, 0x84, 0x42, 0x18, 0x61, 0xe9, 0x33,
+ 0x9d, 0xb1, 0x9b, 0x56, 0x41, 0xe2, 0x38, 0x9b, 0xc0, 0x91, 0xac, 0x3c, 0xb1, 0x76, 0x37, 0xf0,
+ 0x8d, 0xf6, 0xda, 0x17, 0xf3, 0xe3, 0x18, 0x11, 0x9e, 0x4e, 0x3d, 0x4d, 0xe5, 0xd8, 0x25, 0x8d,
+ 0xa8, 0xc8, 0xb0, 0x1f, 0x69, 0xc1, 0x87, 0xfc, 0xd5, 0x63, 0xc4, 0x2f, 0x55, 0xbd, 0x15, 0x1c,
+ 0xbf, 0x68, 0xb6, 0x2f, 0x6d, 0xbb, 0xce, 0x1e, 0xbe, 0xfb, 0xdb, 0xa1, 0x97, 0x88, 0xaf, 0x1e,
+ 0x33, 0xfa, 0x5f, 0xa8, 0x77, 0x06, 0xa6, 0x43, 0x61, 0x98, 0xe9, 0xb0, 0x7a, 0x8c, 0x1a, 0x0f,
+ 0xea, 0x13, 0xc2, 0x4e, 0xa7, 0x98, 0xd8, 0xe9, 0xac, 0x1e, 0x0b, 0xba, 0x1d, 0xb5, 0x02, 0xa6,
+ 0x3b, 0xd6, 0x65, 0xbc, 0x55, 0x8d, 0x67, 0x5d, 0xc3, 0x82, 0x0e, 0x55, 0xac, 0xcb, 0x64, 0x63,
+ 0x7b, 0xf5, 0x98, 0x11, 0x7e, 0xa9, 0xae, 0x80, 0x19, 0xbc, 0x2d, 0x80, 0xc9, 0x4c, 0xa7, 0x0a,
+ 0x28, 0xb4, 0x7a, 0xcc, 0x88, 0xbe, 0x45, 0xd6, 0x47, 0x1e, 0x9f, 0xbb, 0xbe, 0x2f, 0xd8, 0x6e,
+ 0xcf, 0xa5, 0xda, 0x6e, 0x47, 0xb2, 0x20, 0x1b, 0xee, 0xa7, 0x40, 0xa1, 0x8d, 0x25, 0x2c, 0x51,
+ 0x09, 0x93, 0x47, 0xf5, 0x1e, 0x90, 0xdf, 0x35, 0xdd, 0x60, 0xf2, 0x7c, 0xf3, 0x70, 0xba, 0x6b,
+ 0xa6, 0x7b, 0x09, 0x21, 0x88, 0xbe, 0x5a, 0x9a, 0x02, 0x05, 0x2c, 0xb8, 0xf0, 0x8f, 0xf6, 0xb6,
+ 0x3c, 0x31, 0x43, 0xca, 0x8e, 0x8d, 0x86, 0xfd, 0x96, 0x13, 0x1c, 0x4e, 0xff, 0xd5, 0xdc, 0x78,
+ 0x2c, 0xc8, 0xab, 0x98, 0xab, 0x3e, 0x6c, 0xeb, 0x59, 0x7b, 0xf0, 0x01, 0xb8, 0x4f, 0x97, 0x44,
+ 0x07, 0xbd, 0x52, 0xcf, 0x00, 0xe0, 0xd3, 0x93, 0x7a, 0x61, 0x10, 0x53, 0x26, 0x25, 0x5a, 0x3e,
+ 0x28, 0x0c, 0x77, 0x54, 0xf9, 0x9d, 0x11, 0x4c, 0x97, 0x7e, 0x41, 0xc4, 0xcf, 0xc0, 0xbb, 0x96,
+ 0xcd, 0xd4, 0x39, 0x78, 0x4c, 0xd9, 0x29, 0xa5, 0x35, 0x6a, 0x86, 0xb0, 0x97, 0x7d, 0xdf, 0xf4,
+ 0x96, 0x3c, 0xb9, 0xed, 0x80, 0x9c, 0x80, 0xd6, 0x1f, 0xb2, 0x3c, 0xdf, 0xb2, 0xb7, 0xe9, 0xf9,
+ 0xe6, 0xcf, 0x8e, 0x45, 0x69, 0x06, 0x0c, 0x38, 0xf2, 0xc0, 0x01, 0xe7, 0x40, 0x80, 0xa0, 0xfc,
+ 0x90, 0x00, 0x41, 0x85, 0x74, 0x2b, 0x87, 0x1f, 0x61, 0xf5, 0x67, 0x9d, 0xd7, 0x9f, 0xbb, 0x63,
+ 0x00, 0x1a, 0x24, 0x97, 0xb1, 0xd8, 0x37, 0xef, 0x0a, 0x35, 0xa5, 0xc9, 0x69, 0xca, 0x7d, 0xa3,
+ 0x33, 0x92, 0xbd, 0xb6, 0x7c, 0x28, 0x0f, 0xae, 0x8a, 0x98, 0xa9, 0xc3, 0x2b, 0x54, 0x51, 0x7e,
+ 0x7f, 0x2c, 0x8a, 0x92, 0xde, 0xd1, 0x39, 0x6b, 0x8d, 0xf9, 0x4d, 0xe1, 0x73, 0xfb, 0xfd, 0x40,
+ 0x85, 0xb2, 0x89, 0x51, 0x96, 0x53, 0xa0, 0x48, 0x7a, 0x18, 0x0a, 0x0d, 0x7d, 0x4a, 0xd9, 0xdd,
+ 0x88, 0x9d, 0xf6, 0x17, 0xe5, 0x6d, 0x02, 0xfa, 0x43, 0xd7, 0x35, 0x5a, 0x7b, 0xae, 0x5d, 0xb5,
+ 0x7d, 0x47, 0xfb, 0xc1, 0xb1, 0x28, 0x4e, 0xe8, 0x0d, 0x27, 0x8f, 0xe2, 0x0d, 0x37, 0xd2, 0x2a,
+ 0x47, 0x50, 0x83, 0x23, 0x59, 0xe5, 0x88, 0x29, 0x3c, 0x7b, 0xfc, 0xde, 0x29, 0x83, 0x53, 0x74,
+ 0xb2, 0xb5, 0xc4, 0x5b, 0x88, 0xda, 0x85, 0x71, 0x00, 0x79, 0x32, 0x30, 0x93, 0xa8, 0x1f, 0x3d,
+ 0x7e, 0xe0, 0xa3, 0x14, 0x24, 0xde, 0x66, 0xc9, 0x4d, 0x07, 0xfb, 0x38, 0x1c, 0x0b, 0x52, 0x62,
+ 0x97, 0x58, 0xa6, 0x60, 0x23, 0x7b, 0xcc, 0x5e, 0x22, 0x83, 0x22, 0x89, 0x91, 0xa0, 0x6d, 0x64,
+ 0xe2, 0x30, 0xc1, 0xdf, 0xcf, 0x22, 0xb0, 0x23, 0x47, 0xb8, 0xc9, 0x2c, 0x7e, 0x44, 0x9a, 0xbd,
+ 0xb8, 0x81, 0xac, 0x4c, 0xc0, 0x85, 0x50, 0x02, 0xb3, 0x4d, 0xe8, 0x97, 0x4d, 0xd7, 0xb5, 0xcc,
+ 0xed, 0x71, 0x79, 0x7c, 0x8b, 0x7a, 0x0f, 0x6b, 0xdf, 0xc8, 0x89, 0x9e, 0x65, 0x0f, 0x17, 0xc2,
+ 0x03, 0x56, 0x63, 0xa2, 0x80, 0xbf, 0x5e, 0xe8, 0xbc, 0xfa, 0x30, 0x6a, 0x13, 0xf0, 0xd8, 0x96,
+ 0xc0, 0x54, 0x10, 0x07, 0xe3, 0x76, 0x2e, 0x36, 0xca, 0x8e, 0xbf, 0x1b, 0x1c, 0x83, 0xc1, 0xff,
+ 0x0f, 0xc6, 0x5f, 0xd0, 0x5e, 0x91, 0xd2, 0x51, 0x3e, 0x39, 0x88, 0x47, 0xba, 0x36, 0x96, 0xc6,
+ 0x1d, 0xfe, 0xa8, 0xc2, 0x76, 0xfc, 0xf2, 0x14, 0x5d, 0x8e, 0xac, 0x99, 0x3e, 0x7c, 0x48, 0xfb,
+ 0x43, 0x19, 0x4c, 0x35, 0xa1, 0x8f, 0xc6, 0x5b, 0xc4, 0xfe, 0xa1, 0x35, 0x5c, 0x65, 0x56, 0x3c,
+ 0xe8, 0xd9, 0x5a, 0xf5, 0x7e, 0x30, 0xd3, 0x73, 0x9d, 0x36, 0xf4, 0x3c, 0xba, 0x7a, 0xc1, 0x3a,
+ 0xaa, 0x0d, 0x1a, 0xfd, 0x31, 0x6b, 0x8b, 0xeb, 0xc1, 0x37, 0x46, 0xf4, 0x79, 0x5a, 0x33, 0x80,
+ 0x50, 0xa2, 0x15, 0x9c, 0xb4, 0x19, 0x90, 0x54, 0x78, 0xf6, 0x40, 0xff, 0xae, 0x0c, 0xe6, 0x9a,
+ 0xd0, 0x0f, 0xa5, 0x98, 0x62, 0x93, 0x23, 0x1e, 0x5e, 0x0e, 0x4a, 0xf9, 0x70, 0x50, 0xbe, 0x53,
+ 0xf8, 0x52, 0x58, 0x5e, 0x9a, 0x21, 0xb1, 0xb1, 0xe0, 0xf9, 0x16, 0xa1, 0xbb, 0x60, 0xc5, 0x38,
+ 0x98, 0xc0, 0xf1, 0xb5, 0xc7, 0x80, 0x19, 0xcc, 0x0b, 0x6e, 0xb0, 0x3f, 0x9a, 0x8f, 0x1a, 0xef,
+ 0x17, 0x32, 0x6a, 0xbc, 0xf7, 0x82, 0xc2, 0xae, 0xe9, 0x5e, 0x0a, 0x0e, 0xdf, 0x3e, 0x56, 0x6c,
+ 0xf5, 0xcb, 0x33, 0xc8, 0x57, 0x83, 0xfd, 0x34, 0x0b, 0xe9, 0xfc, 0x34, 0x5f, 0x2f, 0xa5, 0x1a,
+ 0x09, 0xc9, 0xdc, 0x61, 0x8c, 0x4d, 0x3e, 0xc5, 0xb8, 0x99, 0x50, 0x76, 0xf6, 0xca, 0xf1, 0x22,
+ 0x19, 0x4c, 0xa3, 0x71, 0x1b, 0xdb, 0xe3, 0xe7, 0x0f, 0xaf, 0x0e, 0x83, 0x0d, 0xfd, 0x94, 0x3d,
+ 0x70, 0x20, 0x91, 0xf1, 0x99, 0xf7, 0x29, 0x7a, 0xe0, 0xa4, 0xc2, 0xb3, 0xc7, 0xe3, 0xdd, 0x04,
+ 0x0f, 0xdc, 0x1e, 0xb4, 0x37, 0xc8, 0x40, 0x5e, 0x81, 0xfe, 0xa4, 0xad, 0xc8, 0xb7, 0x0b, 0x87,
+ 0x17, 0xe5, 0x04, 0x86, 0x79, 0x5e, 0x5c, 0x81, 0xe3, 0x69, 0x40, 0x62, 0x71, 0x45, 0x85, 0x18,
+ 0xc8, 0x1e, 0xb5, 0xf7, 0x13, 0xd4, 0xc8, 0xe6, 0xc2, 0x0f, 0x8c, 0xa1, 0x57, 0x9d, 0xec, 0xc2,
+ 0x47, 0x20, 0x40, 0x4c, 0xe3, 0xa8, 0xda, 0xdb, 0xa0, 0xc2, 0xb3, 0x47, 0xee, 0x67, 0x64, 0x7c,
+ 0x89, 0x59, 0x79, 0x07, 0xb6, 0x2f, 0xc1, 0x0e, 0x7b, 0x91, 0xf3, 0xa8, 0xd0, 0x9d, 0x06, 0x53,
+ 0x6d, 0x42, 0x0d, 0x83, 0x37, 0x6d, 0x04, 0x8f, 0xfc, 0xcd, 0x42, 0x89, 0x77, 0x67, 0xf1, 0x1d,
+ 0x11, 0xf9, 0x7c, 0x2c, 0xb8, 0x88, 0x5d, 0x78, 0x25, 0x50, 0xfc, 0x04, 0xcc, 0x16, 0x32, 0xcb,
+ 0xa8, 0xb6, 0x1d, 0x5b, 0xfb, 0xaf, 0x87, 0x87, 0xe5, 0x3a, 0x30, 0x63, 0xb5, 0x1d, 0x1b, 0x87,
+ 0x80, 0x0b, 0x0e, 0x01, 0x85, 0x09, 0xc1, 0x5b, 0x7d, 0xd7, 0x79, 0xd0, 0xa2, 0xbb, 0xe6, 0x51,
+ 0xc2, 0xa8, 0xc6, 0x04, 0x62, 0xfd, 0xa8, 0x8c, 0x89, 0x01, 0x65, 0x67, 0x0f, 0xd9, 0x27, 0x23,
+ 0xef, 0x36, 0xd2, 0x15, 0x3e, 0x22, 0x56, 0x81, 0x47, 0x19, 0xce, 0xd8, 0x5a, 0x1c, 0xc9, 0x70,
+ 0x96, 0xc0, 0xc0, 0x04, 0x6e, 0x22, 0x8c, 0x70, 0xcc, 0x7c, 0x0d, 0xf8, 0x10, 0xe8, 0x8c, 0xcf,
+ 0x3c, 0x1c, 0x11, 0x9d, 0xa3, 0x31, 0x11, 0x3f, 0x4c, 0xc3, 0xd3, 0x53, 0x8b, 0x47, 0xfb, 0x6f,
+ 0xe3, 0x00, 0xe7, 0xee, 0x51, 0xfc, 0x15, 0x88, 0xb7, 0x82, 0xf6, 0x56, 0x49, 0x34, 0x04, 0xca,
+ 0x01, 0x09, 0x22, 0x2a, 0x63, 0x41, 0xf0, 0x4d, 0x42, 0xb1, 0x49, 0x44, 0xca, 0xcf, 0x1e, 0xc0,
+ 0x17, 0xca, 0x60, 0x01, 0xfb, 0x08, 0x74, 0xa1, 0xe9, 0x92, 0x8e, 0x72, 0x2c, 0x8e, 0xf2, 0xef,
+ 0x16, 0x0e, 0xf0, 0xc3, 0xcb, 0x21, 0xe2, 0x63, 0x2c, 0x50, 0x88, 0x45, 0xf7, 0x11, 0x64, 0x61,
+ 0x22, 0xdb, 0x28, 0x4a, 0xc8, 0x02, 0x55, 0xf1, 0xf1, 0xe0, 0x91, 0xd2, 0x23, 0x97, 0x17, 0x46,
+ 0xd0, 0xd8, 0x26, 0xec, 0x91, 0x2b, 0xc2, 0x44, 0xf6, 0x98, 0xbc, 0xe1, 0x0e, 0xba, 0xe0, 0xdc,
+ 0x32, 0x2f, 0x76, 0xa1, 0xf6, 0xaa, 0x7c, 0x78, 0xa2, 0xed, 0x77, 0xc7, 0xe2, 0x81, 0x79, 0x88,
+ 0xcb, 0xa8, 0x54, 0x90, 0x77, 0x9d, 0x2b, 0x64, 0x69, 0x6b, 0xde, 0xc0, 0xff, 0x49, 0x3c, 0xcb,
+ 0xee, 0xde, 0xae, 0x4d, 0x4e, 0x86, 0xce, 0x1b, 0xc1, 0xa3, 0x7a, 0x13, 0x98, 0xbf, 0x62, 0xf9,
+ 0x3b, 0xab, 0xd0, 0xec, 0x40, 0xd7, 0x70, 0xae, 0x60, 0x8f, 0xb9, 0x69, 0x83, 0x4f, 0xe4, 0xfd,
+ 0x57, 0x04, 0xec, 0x4b, 0x24, 0x94, 0xc9, 0x1c, 0x7f, 0x4b, 0x63, 0x79, 0xc6, 0x73, 0x95, 0xbd,
+ 0xc2, 0x7c, 0x40, 0x06, 0x33, 0x86, 0x73, 0x85, 0x2a, 0xc9, 0xff, 0x75, 0xb4, 0x3a, 0x92, 0x7a,
+ 0xa2, 0x87, 0x25, 0x17, 0xb2, 0x3f, 0xf1, 0x89, 0x5e, 0x62, 0xf1, 0x13, 0x39, 0xb9, 0x34, 0x67,
+ 0x38, 0x57, 0x9a, 0xd0, 0x27, 0x2d, 0x42, 0xdb, 0x1c, 0x93, 0x93, 0xb5, 0xe5, 0x11, 0x82, 0x74,
+ 0x1e, 0x1e, 0x3e, 0xa7, 0xdd, 0x45, 0x08, 0x05, 0x14, 0xb2, 0x38, 0xe9, 0x5d, 0x84, 0xa1, 0x1c,
+ 0x4c, 0x20, 0x46, 0x8a, 0x0c, 0x66, 0x0d, 0xe7, 0x0a, 0x1a, 0x1a, 0x96, 0xad, 0x6e, 0x77, 0x3c,
+ 0x23, 0x64, 0x5a, 0xe3, 0x3f, 0x10, 0x43, 0xc0, 0xc5, 0xc4, 0x8d, 0xff, 0x21, 0x0c, 0x64, 0x0f,
+ 0xc3, 0xf3, 0x48, 0x63, 0x09, 0x46, 0x68, 0x7b, 0x3c, 0x38, 0x8c, 0xda, 0x20, 0x42, 0x36, 0x8e,
+ 0xac, 0x41, 0xc4, 0x71, 0x30, 0x91, 0x9d, 0x93, 0x85, 0x32, 0x1e, 0xe6, 0xc7, 0xdb, 0x26, 0xde,
+ 0x9b, 0xce, 0x35, 0x91, 0x0e, 0xbb, 0x1c, 0x23, 0x63, 0x41, 0x23, 0x85, 0x0b, 0xa2, 0x00, 0x0f,
+ 0xd9, 0xe3, 0xf1, 0x31, 0x19, 0xcc, 0x11, 0x16, 0x1e, 0x21, 0x56, 0xc0, 0x48, 0x8d, 0x8a, 0xad,
+ 0xc1, 0xd1, 0x34, 0xaa, 0x04, 0x0e, 0x26, 0x72, 0x9f, 0x3f, 0xb2, 0xe3, 0x46, 0x38, 0x3e, 0x1e,
+ 0x87, 0xe0, 0xc8, 0xc6, 0xd8, 0x18, 0x8f, 0x90, 0x8f, 0x62, 0x8c, 0x1d, 0xd1, 0x31, 0xf2, 0xe7,
+ 0x85, 0xad, 0x68, 0x9c, 0x18, 0x1c, 0xa2, 0x29, 0x8c, 0x11, 0x86, 0x11, 0x9b, 0xc2, 0x11, 0x21,
+ 0xf1, 0xa7, 0x32, 0x00, 0x84, 0x81, 0x35, 0xe7, 0x32, 0xbe, 0x48, 0x73, 0x0c, 0xdd, 0x59, 0xbf,
+ 0x5b, 0xbd, 0x3c, 0xc4, 0xad, 0x3e, 0x65, 0x08, 0x97, 0xb4, 0x2b, 0x81, 0x8c, 0x94, 0x51, 0x25,
+ 0x27, 0xbe, 0x12, 0x98, 0x5c, 0x7e, 0xf6, 0x18, 0x7f, 0x99, 0x58, 0x73, 0xd1, 0x01, 0xd3, 0x9f,
+ 0x1d, 0x0b, 0xca, 0xcc, 0xec, 0x5f, 0xe6, 0x67, 0xff, 0x87, 0xc0, 0x76, 0x54, 0x1b, 0x71, 0xd8,
+ 0xc1, 0xd1, 0xec, 0x6d, 0xc4, 0xa3, 0x3b, 0x20, 0xfa, 0x03, 0x79, 0x70, 0x9c, 0x76, 0x22, 0xdf,
+ 0x0e, 0x10, 0xa7, 0x3c, 0x87, 0xc7, 0x75, 0x92, 0x43, 0x50, 0x1e, 0xd7, 0x82, 0x54, 0x9a, 0xa5,
+ 0x4c, 0x01, 0xf6, 0x26, 0xb2, 0xba, 0x51, 0xd4, 0x1f, 0xea, 0x99, 0x76, 0x47, 0x3c, 0xdc, 0xef,
+ 0x10, 0xe0, 0x83, 0xb5, 0x46, 0x99, 0x5f, 0x6b, 0x1c, 0xb0, 0x32, 0x99, 0x7a, 0xe7, 0x1a, 0x8b,
+ 0x8c, 0xb0, 0x3b, 0xf1, 0x9d, 0xeb, 0xf8, 0xb2, 0xb3, 0x47, 0xe9, 0xbd, 0x32, 0xc8, 0x37, 0x1d,
+ 0xd7, 0xd7, 0x9e, 0x9f, 0xa6, 0x75, 0x12, 0xc9, 0x47, 0x20, 0x05, 0xcf, 0x6a, 0x19, 0xe4, 0x51,
+ 0xe5, 0xe8, 0x8c, 0xe1, 0xf6, 0xe4, 0xa3, 0xce, 0xa6, 0x6f, 0x62, 0xaf, 0x6e, 0x54, 0xfe, 0x62,
+ 0x6b, 0xbf, 0x07, 0x0d, 0xfc, 0x71, 0xda, 0x78, 0x3a, 0x44, 0x7e, 0xcd, 0xf8, 0x03, 0x18, 0x99,
+ 0xc5, 0xd3, 0x89, 0x2d, 0x39, 0x7b, 0xdc, 0x5e, 0x7b, 0x9c, 0xfa, 0xb6, 0x2e, 0x5b, 0x5d, 0xa8,
+ 0x3d, 0x9f, 0xb8, 0x8c, 0xd4, 0xcd, 0x5d, 0x28, 0x7e, 0x24, 0x26, 0xd1, 0xb5, 0x15, 0xc7, 0x97,
+ 0x95, 0xa3, 0xf8, 0xb2, 0x69, 0x1b, 0x14, 0x39, 0x80, 0x4e, 0x58, 0x9a, 0x74, 0x83, 0x4a, 0x28,
+ 0x7b, 0x22, 0x71, 0x3a, 0x4f, 0x34, 0xa1, 0x4f, 0x8c, 0xca, 0x46, 0x70, 0x45, 0xd2, 0xf7, 0x8d,
+ 0x25, 0x62, 0x67, 0x78, 0xa1, 0x8e, 0xdc, 0x77, 0x03, 0xd3, 0x07, 0x58, 0x70, 0xd6, 0x78, 0x70,
+ 0xbe, 0x3b, 0x5e, 0x40, 0x3c, 0x93, 0x63, 0x81, 0xe9, 0xed, 0x21, 0x4c, 0xeb, 0x1c, 0x4c, 0xf7,
+ 0x8c, 0xc8, 0x45, 0xf6, 0x80, 0xfd, 0x78, 0x01, 0x1c, 0x27, 0x93, 0xfe, 0x92, 0xdd, 0xa1, 0x11,
+ 0x56, 0xdf, 0x2c, 0x1d, 0xf1, 0x66, 0xdb, 0xc1, 0x10, 0xac, 0x5c, 0x2c, 0xe7, 0x42, 0x5f, 0x2c,
+ 0x67, 0x75, 0x89, 0x84, 0x73, 0x45, 0x9d, 0x28, 0xde, 0x69, 0x1b, 0x16, 0x66, 0x02, 0xcb, 0x1e,
+ 0x77, 0xb9, 0xe1, 0x77, 0xfc, 0x3d, 0xa2, 0x53, 0xe2, 0xf7, 0x88, 0xfe, 0x76, 0xba, 0x75, 0x3b,
+ 0x5c, 0x74, 0x9f, 0xc0, 0x33, 0xb6, 0x9d, 0x52, 0xac, 0xe8, 0x09, 0x70, 0xf7, 0x9f, 0xc3, 0x9d,
+ 0x2c, 0x8a, 0x20, 0x32, 0xa2, 0x3b, 0x19, 0x26, 0x70, 0x94, 0xee, 0x64, 0xc3, 0x18, 0xc8, 0x1e,
+ 0xc7, 0xdf, 0x2e, 0xd0, 0xdd, 0x7c, 0xdc, 0x6e, 0xb4, 0x3f, 0x96, 0x32, 0x1f, 0xa5, 0xbf, 0x99,
+ 0x4b, 0xe5, 0xff, 0x8c, 0xf9, 0x4a, 0x1e, 0xa6, 0xd3, 0x78, 0x34, 0x27, 0x91, 0x9b, 0xc0, 0xba,
+ 0x91, 0x84, 0x7d, 0xd1, 0xcf, 0x5b, 0x1d, 0x7f, 0x67, 0x4c, 0x27, 0x3a, 0xae, 0x20, 0x5a, 0x34,
+ 0x5e, 0x3d, 0x79, 0xd0, 0xfe, 0x57, 0x2e, 0x55, 0x08, 0xa9, 0x50, 0x24, 0x98, 0xad, 0x18, 0x11,
+ 0xa7, 0x08, 0xfc, 0x94, 0x48, 0x6f, 0x82, 0x1a, 0x7d, 0xce, 0xea, 0x40, 0xe7, 0x11, 0xa8, 0xd1,
+ 0x98, 0xaf, 0xf1, 0x69, 0x74, 0x12, 0xb9, 0xff, 0xa4, 0x1a, 0x1d, 0x8a, 0x64, 0x4c, 0x1a, 0x9d,
+ 0x48, 0x2f, 0x7b, 0x19, 0xbf, 0x62, 0x8e, 0x4e, 0xa4, 0x6a, 0x96, 0x7d, 0x49, 0xfb, 0xa7, 0x22,
+ 0x50, 0x82, 0x38, 0xc2, 0xfe, 0x0e, 0x8d, 0x05, 0xf3, 0x21, 0xe1, 0xbb, 0x51, 0x46, 0x88, 0xf7,
+ 0xc2, 0x87, 0x93, 0x2a, 0x1c, 0x08, 0x27, 0x55, 0x02, 0xf3, 0x96, 0xed, 0x43, 0xd7, 0x36, 0xbb,
+ 0xcb, 0x5d, 0x73, 0xdb, 0x3b, 0x3d, 0x35, 0xf0, 0xf2, 0xba, 0x2a, 0x93, 0xc7, 0xe0, 0xbf, 0x60,
+ 0x2f, 0x10, 0x9d, 0xe6, 0x2f, 0x10, 0x8d, 0x89, 0x7e, 0x35, 0x13, 0x1f, 0xfd, 0x2a, 0x8c, 0x6e,
+ 0x05, 0x86, 0x07, 0xc7, 0x16, 0xb5, 0x8d, 0x53, 0x86, 0xfb, 0xbb, 0x5d, 0x30, 0x0a, 0x5b, 0x18,
+ 0xfa, 0xf1, 0xd5, 0x72, 0xaa, 0xd5, 0x3d, 0xa4, 0x08, 0x8b, 0xfd, 0x4a, 0x90, 0xda, 0x42, 0x65,
+ 0x2b, 0x2f, 0xf7, 0x55, 0x3e, 0x34, 0x79, 0xf2, 0x02, 0x26, 0x0f, 0xab, 0x54, 0x05, 0xd1, 0x3b,
+ 0x5d, 0xc5, 0x17, 0x0b, 0x45, 0x6a, 0x3b, 0x81, 0xd3, 0x48, 0x05, 0x70, 0x22, 0x88, 0x76, 0xdb,
+ 0xeb, 0x41, 0xd3, 0x35, 0xed, 0x36, 0xd4, 0x3e, 0x29, 0x8d, 0xc3, 0xec, 0x5d, 0x06, 0xd3, 0x56,
+ 0xdb, 0xb1, 0x9b, 0xd6, 0xb3, 0x83, 0xcb, 0xe5, 0x92, 0x83, 0xac, 0x63, 0x89, 0x54, 0xe9, 0x17,
+ 0x46, 0xf8, 0xad, 0x5a, 0x05, 0x33, 0x6d, 0xd3, 0xed, 0x90, 0x20, 0x7c, 0x85, 0xbe, 0x8b, 0x9c,
+ 0x62, 0x09, 0x95, 0x83, 0x4f, 0x8c, 0xe8, 0x6b, 0xb5, 0xc1, 0x0b, 0xb1, 0xd8, 0x17, 0xcd, 0x23,
+ 0x96, 0x58, 0x25, 0xfa, 0x88, 0x93, 0x39, 0x92, 0x8e, 0x0b, 0xbb, 0x26, 0xb9, 0x74, 0x7c, 0x8a,
+ 0xdc, 0x11, 0x1d, 0x26, 0xa4, 0x5d, 0x1e, 0xc0, 0x45, 0x1d, 0x40, 0x63, 0xd2, 0xcb, 0x03, 0x42,
+ 0x5c, 0x64, 0xaf, 0x99, 0xef, 0x2a, 0x82, 0x79, 0xd2, 0xab, 0x51, 0x71, 0x6a, 0x2f, 0x94, 0x41,
+ 0xb1, 0x09, 0xfd, 0x07, 0xe0, 0xbe, 0xd6, 0x3c, 0xfc, 0x98, 0xac, 0x00, 0xf9, 0x52, 0x18, 0x70,
+ 0x10, 0xfd, 0x4d, 0xbb, 0x6f, 0x1f, 0xf0, 0xb5, 0x48, 0x78, 0x9a, 0xf4, 0xbe, 0x7d, 0x72, 0xf1,
+ 0xd9, 0xe3, 0xf3, 0x13, 0x32, 0x90, 0x4b, 0x9d, 0x8e, 0xd6, 0x3e, 0x3c, 0x14, 0x37, 0x80, 0xd9,
+ 0xa0, 0xcd, 0x44, 0x31, 0x20, 0xd9, 0xa4, 0xb4, 0x8b, 0xa0, 0xa1, 0x6c, 0x4a, 0x9d, 0x89, 0xef,
+ 0x2a, 0x24, 0x94, 0x9d, 0x3d, 0x28, 0x5f, 0x98, 0xa2, 0x8d, 0x66, 0xc9, 0x71, 0x2e, 0xe1, 0xa3,
+ 0x32, 0xbf, 0x28, 0x83, 0xc2, 0x32, 0xf4, 0xdb, 0x3b, 0x9a, 0x37, 0x96, 0x36, 0xd3, 0x77, 0xef,
+ 0xf9, 0x90, 0xa0, 0x9c, 0x69, 0xa3, 0x3f, 0x07, 0x6c, 0x2f, 0x62, 0x96, 0x27, 0x1d, 0xfd, 0x39,
+ 0xb1, 0xf4, 0x09, 0x1c, 0x82, 0xcb, 0x83, 0x85, 0x70, 0x05, 0x8c, 0x60, 0xf6, 0x8e, 0xdc, 0x23,
+ 0x6e, 0x3d, 0x74, 0x88, 0xdd, 0xac, 0xfd, 0x7e, 0xba, 0x10, 0x6b, 0xa1, 0xcc, 0xf9, 0x9a, 0x67,
+ 0xbc, 0x30, 0x99, 0x22, 0xf8, 0x9a, 0x18, 0x83, 0x13, 0x58, 0x01, 0x90, 0xc1, 0x34, 0x66, 0xa8,
+ 0x62, 0x5d, 0xc6, 0xae, 0x87, 0xdc, 0x42, 0xe5, 0x73, 0xc6, 0xb2, 0x50, 0x79, 0x0f, 0xbf, 0x50,
+ 0x29, 0x18, 0x31, 0x39, 0x58, 0xa7, 0x4c, 0xe9, 0x8b, 0x83, 0xbe, 0x1f, 0xfb, 0x32, 0x65, 0x0a,
+ 0x5f, 0x9c, 0x21, 0xe5, 0x67, 0x8f, 0xe8, 0x1b, 0xff, 0x0b, 0xed, 0xac, 0x83, 0x0d, 0x59, 0xed,
+ 0x7f, 0x9c, 0x00, 0xf9, 0x73, 0xe8, 0xcf, 0x3f, 0x46, 0x37, 0x6a, 0xbd, 0x6c, 0x0c, 0xc1, 0x1d,
+ 0x9e, 0x06, 0xf2, 0x88, 0x3e, 0x9d, 0xf6, 0xdc, 0x2a, 0xb6, 0x3b, 0x8c, 0x18, 0x31, 0xf0, 0x77,
+ 0xea, 0x29, 0x50, 0xf4, 0x9c, 0x3d, 0xb7, 0x8d, 0xcc, 0x6f, 0xa4, 0x31, 0xf4, 0x29, 0x6d, 0x50,
+ 0x53, 0x8e, 0xf4, 0xe2, 0xf8, 0x5c, 0x4e, 0x99, 0x0b, 0x96, 0x64, 0xee, 0x82, 0xa5, 0x14, 0xfb,
+ 0x0f, 0x02, 0xbc, 0x65, 0xaf, 0x11, 0x7f, 0x8c, 0xef, 0x1a, 0xec, 0x8c, 0x0b, 0xf6, 0x18, 0xb1,
+ 0x1c, 0x56, 0x1d, 0xd2, 0x3a, 0x8c, 0xf3, 0xa2, 0x0d, 0xe3, 0xc8, 0x4f, 0xd4, 0x61, 0x5c, 0x80,
+ 0x87, 0x89, 0x9c, 0x72, 0x2f, 0x52, 0x27, 0xd7, 0x0b, 0xe3, 0x44, 0x37, 0xcf, 0x29, 0xfd, 0xa1,
+ 0xd0, 0x19, 0xa3, 0xf3, 0xeb, 0xc8, 0xe8, 0x1c, 0x91, 0xfb, 0xeb, 0xaf, 0xc9, 0x38, 0x92, 0x66,
+ 0x60, 0x04, 0x89, 0x5f, 0x94, 0x94, 0x1a, 0x22, 0x34, 0x06, 0x73, 0x71, 0xa4, 0xe7, 0x47, 0x0f,
+ 0x2d, 0xce, 0x8b, 0x8e, 0xe1, 0x7f, 0xd2, 0xa1, 0xc5, 0x45, 0x19, 0xc9, 0x1e, 0xc8, 0x5f, 0x20,
+ 0x17, 0x93, 0x95, 0xda, 0xbe, 0x75, 0x79, 0xcc, 0x2d, 0x8d, 0x1f, 0x5e, 0x52, 0x46, 0x13, 0x3e,
+ 0x20, 0x21, 0xc2, 0xe1, 0xa4, 0xa3, 0x09, 0x8b, 0xb1, 0x91, 0x3d, 0x4c, 0x3f, 0x06, 0x90, 0xf4,
+ 0xe8, 0xda, 0xce, 0x1b, 0x64, 0x20, 0x37, 0xa1, 0xaf, 0xc1, 0xc3, 0xa3, 0x75, 0x16, 0xcc, 0x31,
+ 0x4b, 0x07, 0xc1, 0x85, 0x37, 0x5c, 0x5a, 0xda, 0x83, 0xf2, 0xa1, 0xc8, 0xd8, 0x45, 0x97, 0x49,
+ 0x1f, 0x94, 0x17, 0x61, 0x62, 0x02, 0x07, 0xe5, 0xe9, 0xb2, 0xcf, 0xb7, 0x0b, 0x50, 0xe3, 0x5a,
+ 0x01, 0x3a, 0x14, 0x50, 0x47, 0xb1, 0x14, 0xf4, 0xf6, 0xc8, 0xd8, 0x98, 0x10, 0x56, 0x1f, 0x62,
+ 0xb1, 0x6a, 0xf0, 0x58, 0xdd, 0x25, 0x22, 0x26, 0x31, 0xe3, 0x43, 0x68, 0x82, 0xff, 0xce, 0x10,
+ 0x2e, 0x83, 0x83, 0xeb, 0x69, 0x23, 0xf3, 0x91, 0x3d, 0x62, 0x3f, 0x47, 0xc6, 0xad, 0x26, 0x99,
+ 0x5b, 0x8d, 0x67, 0xdc, 0xa2, 0xd3, 0x36, 0x99, 0x9b, 0xb6, 0xa5, 0x3c, 0x58, 0x11, 0xf9, 0x0b,
+ 0x07, 0xcc, 0x0d, 0x83, 0x28, 0x3f, 0xe6, 0x83, 0x15, 0x43, 0x39, 0xc8, 0x1e, 0x9c, 0xaf, 0xc9,
+ 0x00, 0xac, 0xb8, 0xce, 0x5e, 0xaf, 0xe1, 0x76, 0xa0, 0xab, 0xfd, 0x59, 0x34, 0x53, 0xfb, 0xc9,
+ 0x31, 0xcc, 0xd4, 0xd6, 0x01, 0xd8, 0x0e, 0x89, 0x53, 0x0d, 0xbf, 0x43, 0x6c, 0x5e, 0x16, 0x31,
+ 0x65, 0x30, 0x34, 0xf8, 0xbb, 0x85, 0x9f, 0xc1, 0x63, 0x9c, 0xd4, 0x67, 0x45, 0xe4, 0xc6, 0x39,
+ 0x53, 0x7b, 0x77, 0x88, 0x75, 0x8b, 0xc3, 0xfa, 0xe9, 0x87, 0xe0, 0x24, 0x7b, 0xcc, 0xff, 0x61,
+ 0x0a, 0xcc, 0x92, 0x7d, 0x59, 0x22, 0xd3, 0xbf, 0x89, 0x40, 0xff, 0xd9, 0x31, 0x80, 0xbe, 0x01,
+ 0xe6, 0x9c, 0x88, 0x3a, 0xe9, 0x53, 0xd9, 0x95, 0xb2, 0x44, 0xd8, 0x19, 0xbe, 0x0c, 0x8e, 0x8c,
+ 0xf6, 0x71, 0x16, 0x79, 0x83, 0x47, 0xfe, 0x9e, 0x04, 0x79, 0x33, 0x14, 0xc7, 0x09, 0xfd, 0x7b,
+ 0x42, 0xe8, 0x37, 0x38, 0xe8, 0x4b, 0x87, 0x61, 0x65, 0x02, 0xf7, 0x2a, 0xc8, 0x20, 0x8f, 0x8f,
+ 0x41, 0xbe, 0x25, 0xc3, 0x85, 0x98, 0xd3, 0x60, 0x0a, 0x37, 0xd9, 0x70, 0x82, 0x18, 0x3c, 0xa2,
+ 0x37, 0xe6, 0x96, 0x0f, 0xdd, 0x70, 0x89, 0x3d, 0x78, 0x44, 0x3c, 0x04, 0xee, 0xe7, 0xde, 0xe9,
+ 0x22, 0xd9, 0x71, 0x0e, 0x13, 0x46, 0x9e, 0x3d, 0xb2, 0x12, 0x1f, 0xdb, 0xc1, 0xc8, 0x51, 0x66,
+ 0x8f, 0x43, 0x18, 0xc9, 0x1e, 0xf8, 0x2f, 0xe6, 0xc1, 0x69, 0xb2, 0xfc, 0xb7, 0xec, 0x3a, 0xbb,
+ 0x7d, 0xd7, 0x98, 0x59, 0x87, 0xd7, 0x85, 0x9b, 0xc1, 0x82, 0xcf, 0x39, 0xde, 0x53, 0x9d, 0xe8,
+ 0x4b, 0xd5, 0x7e, 0x87, 0x75, 0x9e, 0x79, 0x26, 0x8f, 0xe4, 0x52, 0x82, 0x00, 0xe3, 0x78, 0x4f,
+ 0xbd, 0xa3, 0x22, 0xc8, 0x28, 0xb3, 0x9a, 0x28, 0x8f, 0xb4, 0xb8, 0x1c, 0xea, 0x54, 0x41, 0x44,
+ 0xa7, 0x3e, 0x18, 0xea, 0xd4, 0xf7, 0x72, 0x3a, 0xb5, 0x72, 0x78, 0x91, 0x4c, 0x60, 0x89, 0x69,
+ 0x01, 0x14, 0x97, 0xad, 0xae, 0x0f, 0x5d, 0xed, 0xcb, 0x74, 0x1e, 0xf5, 0xaa, 0x0c, 0xbb, 0x97,
+ 0x0a, 0x28, 0x6e, 0xe1, 0xd2, 0xa8, 0x41, 0x76, 0x9b, 0x18, 0x36, 0x84, 0x43, 0x83, 0x7e, 0x9b,
+ 0x36, 0xc8, 0x5f, 0x1f, 0x99, 0xb1, 0x4d, 0xc0, 0x52, 0x04, 0xf9, 0x1b, 0xce, 0xc2, 0x44, 0xee,
+ 0xb7, 0x2a, 0x1a, 0x70, 0x17, 0x8d, 0x20, 0x97, 0xb2, 0x43, 0x58, 0x01, 0xb2, 0xd5, 0xf1, 0x70,
+ 0xd3, 0x9b, 0x31, 0xd0, 0xdf, 0xb4, 0x2e, 0x47, 0xfd, 0xa2, 0x22, 0x2c, 0x4f, 0xda, 0xe5, 0x48,
+ 0x88, 0x8b, 0xec, 0x31, 0xfb, 0x26, 0xf6, 0x37, 0xed, 0x75, 0xcd, 0x36, 0x44, 0xdc, 0x67, 0x86,
+ 0xda, 0x02, 0x90, 0xac, 0x60, 0xc4, 0x97, 0x2c, 0xb6, 0x9d, 0x16, 0x0e, 0xd1, 0x4e, 0x47, 0x5d,
+ 0x8d, 0x0c, 0x65, 0x8e, 0x2b, 0x7e, 0x64, 0xab, 0x91, 0x89, 0x6c, 0x4c, 0xe0, 0xf6, 0xd2, 0xe0,
+ 0x3c, 0xee, 0x44, 0x5b, 0xeb, 0xa8, 0x7b, 0x35, 0x54, 0x58, 0x63, 0x3b, 0x7b, 0x3b, 0xca, 0x5e,
+ 0x4d, 0x3c, 0x0f, 0x13, 0x40, 0x6b, 0x81, 0xa2, 0xf5, 0x79, 0x3a, 0x8c, 0x66, 0xbc, 0x5d, 0xea,
+ 0x39, 0xae, 0x9f, 0x6e, 0xbb, 0x14, 0x71, 0x67, 0xe0, 0xef, 0xd2, 0x9e, 0xdf, 0xe2, 0x8f, 0x67,
+ 0x8f, 0x6b, 0xf8, 0x4c, 0x71, 0x7e, 0x6b, 0x18, 0x03, 0xd9, 0xc3, 0xfb, 0xd6, 0x23, 0x1a, 0x3c,
+ 0x47, 0x6d, 0x8e, 0xb4, 0x0d, 0x8c, 0x6d, 0xe8, 0x1c, 0xa5, 0x39, 0xc6, 0xf3, 0x90, 0x3d, 0x5e,
+ 0x7f, 0xcf, 0x0c, 0x9c, 0x6f, 0x9a, 0xe0, 0xc0, 0x19, 0xb4, 0xcc, 0xc2, 0x88, 0x2d, 0x73, 0xd4,
+ 0xdd, 0x05, 0x2a, 0xeb, 0xf1, 0x0d, 0x98, 0xa3, 0xec, 0x2e, 0x24, 0x30, 0x91, 0x3d, 0xe2, 0x6f,
+ 0x96, 0x41, 0xa1, 0x39, 0xf9, 0xf1, 0x72, 0xd4, 0xb9, 0x08, 0x96, 0x55, 0x73, 0x6c, 0xc3, 0xe5,
+ 0x28, 0x73, 0x91, 0x58, 0x16, 0x26, 0x10, 0xbf, 0xff, 0x38, 0x98, 0xc3, 0x13, 0xee, 0x60, 0xb7,
+ 0xf5, 0xef, 0xe9, 0xa8, 0xf9, 0xfa, 0x0c, 0xdb, 0xea, 0xfd, 0x60, 0x3a, 0xd8, 0x1d, 0xa2, 0x23,
+ 0xe7, 0xa2, 0x58, 0xfb, 0x0c, 0xb8, 0x34, 0xc2, 0xef, 0x0f, 0xe5, 0x13, 0x31, 0xf6, 0x9d, 0xc0,
+ 0x51, 0x7d, 0x22, 0x8e, 0x74, 0x37, 0xf0, 0xb7, 0xa3, 0x11, 0xf5, 0xbf, 0x66, 0x87, 0x79, 0xff,
+ 0x2e, 0x61, 0x7e, 0xc0, 0x2e, 0xe1, 0x27, 0x59, 0x2c, 0x9b, 0x3c, 0x96, 0xf7, 0x8a, 0x8a, 0x70,
+ 0x8c, 0x63, 0xed, 0x7b, 0x43, 0x38, 0xcf, 0x71, 0x70, 0x2e, 0x1d, 0x8a, 0x97, 0x09, 0x9c, 0x9f,
+ 0xcc, 0x47, 0x63, 0xee, 0xa7, 0x32, 0x6c, 0xc7, 0x7d, 0x87, 0x33, 0xf2, 0x07, 0x0e, 0x67, 0x70,
+ 0x2d, 0xbd, 0x70, 0xc8, 0x96, 0xfe, 0x29, 0x56, 0x3b, 0x5a, 0xbc, 0x76, 0x3c, 0x4d, 0x1c, 0x91,
+ 0xf1, 0x8d, 0xcc, 0xef, 0x0b, 0xd5, 0xe3, 0x3c, 0xa7, 0x1e, 0xe5, 0xc3, 0x31, 0x93, 0xbd, 0x7e,
+ 0xfc, 0x7a, 0x30, 0xa1, 0x3d, 0xe2, 0xf6, 0x3e, 0xea, 0x46, 0x24, 0x27, 0xc4, 0xb1, 0x8d, 0xdc,
+ 0xa3, 0x6c, 0x44, 0x0e, 0xe3, 0x64, 0x02, 0x21, 0xdd, 0xe6, 0xc1, 0x2c, 0xe6, 0xe9, 0xbc, 0xd5,
+ 0xd9, 0x86, 0xbe, 0xf6, 0x6a, 0xe2, 0xaa, 0x18, 0x04, 0xd0, 0x1c, 0x53, 0x94, 0xa3, 0xb8, 0x63,
+ 0xb3, 0x69, 0xfd, 0x05, 0x08, 0x93, 0x8b, 0x0c, 0x83, 0x93, 0x0e, 0xc4, 0x38, 0x94, 0x83, 0xec,
+ 0x21, 0xfb, 0x38, 0x71, 0xe6, 0xa8, 0x99, 0xfb, 0xce, 0x9e, 0xaf, 0x3d, 0x3c, 0x86, 0x0e, 0x7a,
+ 0x09, 0x14, 0xbb, 0x98, 0x1a, 0x3d, 0x9d, 0x91, 0x3c, 0xdd, 0xa1, 0x22, 0x20, 0xe5, 0x1b, 0xf4,
+ 0xcb, 0xb4, 0x47, 0x34, 0x22, 0x39, 0x12, 0x3a, 0x93, 0x3e, 0xa2, 0x31, 0xa4, 0xfc, 0x89, 0x5c,
+ 0xd5, 0x33, 0x8d, 0x4a, 0xb7, 0x76, 0x2d, 0x7f, 0x4c, 0x81, 0x20, 0xba, 0x88, 0x56, 0x10, 0x08,
+ 0x02, 0x3f, 0xa4, 0x3d, 0x78, 0xca, 0x48, 0x05, 0x7d, 0x3e, 0xe9, 0x83, 0xa7, 0xc9, 0xc5, 0x67,
+ 0x8f, 0xc9, 0x4f, 0x93, 0x96, 0x75, 0x8e, 0xf8, 0xe0, 0x66, 0xe8, 0xde, 0x3b, 0x72, 0x63, 0x21,
+ 0xac, 0x1d, 0x5d, 0x63, 0x19, 0x58, 0x7e, 0xf6, 0xc0, 0xfc, 0xe2, 0x77, 0x82, 0x42, 0x05, 0x5e,
+ 0xdc, 0xdb, 0xd6, 0xee, 0x01, 0xd3, 0x2d, 0x17, 0xc2, 0xaa, 0xbd, 0xe5, 0x20, 0xe9, 0xfa, 0xe8,
+ 0x7f, 0x00, 0x09, 0x7d, 0x42, 0x78, 0xec, 0x40, 0xb3, 0x13, 0x1d, 0x43, 0x0b, 0x1e, 0xb5, 0x97,
+ 0x49, 0x20, 0xdf, 0xf4, 0x4d, 0x5f, 0x9b, 0x09, 0xb1, 0xd5, 0x1e, 0x66, 0xb1, 0xb8, 0x87, 0xc7,
+ 0xe2, 0x66, 0x4e, 0x16, 0x98, 0x83, 0x45, 0xf4, 0x7d, 0x0c, 0x00, 0x1a, 0x98, 0x7e, 0xd0, 0x73,
+ 0x6c, 0x94, 0x23, 0x38, 0x29, 0x19, 0x3c, 0x6b, 0xaf, 0x0c, 0xc5, 0x7d, 0x1f, 0x27, 0xee, 0xc7,
+ 0x89, 0x15, 0x31, 0x81, 0x95, 0x36, 0x09, 0xcc, 0x20, 0xd1, 0xae, 0x42, 0xb3, 0xe3, 0x69, 0xdf,
+ 0x11, 0x29, 0x7f, 0x8c, 0x98, 0xb5, 0x0f, 0x0b, 0xc7, 0xf4, 0x24, 0xb5, 0x0a, 0x89, 0xc7, 0xfb,
+ 0x0b, 0x04, 0x31, 0x4d, 0x24, 0x3e, 0xa6, 0xc9, 0xed, 0x20, 0x6f, 0xd9, 0x5b, 0x0e, 0xf5, 0x5e,
+ 0xbb, 0x36, 0x86, 0x36, 0xd2, 0x09, 0x03, 0x67, 0x14, 0x0c, 0xf8, 0x99, 0xcc, 0xd6, 0x44, 0xee,
+ 0xce, 0xcb, 0xa3, 0xd2, 0xb5, 0xff, 0x73, 0xa8, 0xb0, 0x55, 0x15, 0xe4, 0x7b, 0xa6, 0xbf, 0x43,
+ 0x8b, 0xc6, 0xff, 0x91, 0x8d, 0xbc, 0x67, 0x9b, 0xb6, 0x63, 0xef, 0xef, 0x5a, 0xcf, 0x0e, 0xaf,
+ 0xe8, 0xe5, 0xd2, 0x10, 0xe7, 0xdb, 0xd0, 0x86, 0xae, 0xe9, 0xc3, 0xe6, 0xe5, 0x6d, 0x3c, 0xc7,
+ 0x9a, 0x36, 0xd8, 0xa4, 0xd4, 0xfa, 0x8f, 0x38, 0x8e, 0xd7, 0xff, 0x2d, 0xab, 0x0b, 0x71, 0xc0,
+ 0x27, 0xaa, 0xff, 0xc1, 0x73, 0x2a, 0xfd, 0x1f, 0x50, 0x44, 0xf6, 0x68, 0xfc, 0xab, 0x04, 0xe6,
+ 0x9a, 0x48, 0xe1, 0x9a, 0x7b, 0xbb, 0xbb, 0xa6, 0xbb, 0xaf, 0xdd, 0x18, 0xa1, 0xc2, 0xa8, 0x66,
+ 0x8e, 0x53, 0x4d, 0xed, 0xd7, 0x84, 0x6f, 0xa7, 0xa6, 0x4d, 0x9b, 0x29, 0x21, 0x75, 0x3b, 0x78,
+ 0x02, 0x28, 0x20, 0xf5, 0x0e, 0xfc, 0xf9, 0x12, 0x1b, 0x02, 0xc9, 0x29, 0x18, 0x18, 0x6b, 0x28,
+ 0x6f, 0x13, 0x08, 0xca, 0x21, 0x81, 0xe3, 0x4d, 0xdf, 0x6c, 0x5f, 0x5a, 0x71, 0x5c, 0x67, 0xcf,
+ 0xb7, 0x6c, 0xe8, 0x69, 0x8f, 0x8e, 0x10, 0x08, 0xf4, 0x3f, 0x17, 0xe9, 0xbf, 0xf6, 0xef, 0x39,
+ 0xd1, 0x51, 0x34, 0xec, 0x56, 0x59, 0xf2, 0x31, 0x71, 0xae, 0xc4, 0xc6, 0x45, 0x11, 0x8a, 0xd9,
+ 0x0b, 0xed, 0x4d, 0x32, 0x50, 0xf4, 0x87, 0x7a, 0x8e, 0xeb, 0xd7, 0x9c, 0xb6, 0xd9, 0xf5, 0x7c,
+ 0xc7, 0x85, 0x5a, 0x23, 0x51, 0x6a, 0xa8, 0x87, 0xe9, 0x38, 0xed, 0x68, 0x70, 0xa4, 0x4f, 0xac,
+ 0xda, 0xc9, 0xbc, 0x8e, 0x7f, 0x5c, 0x78, 0x97, 0x91, 0x48, 0xa5, 0x9f, 0xa3, 0x18, 0x3d, 0x1f,
+ 0xd4, 0xa5, 0xa5, 0x73, 0xc5, 0x17, 0xdb, 0x79, 0x14, 0x62, 0x6a, 0x02, 0x4b, 0xe5, 0x12, 0x98,
+ 0x6f, 0xee, 0x5d, 0x0c, 0x89, 0x78, 0xac, 0x11, 0xf2, 0x1a, 0xe1, 0x60, 0x16, 0x54, 0xf1, 0x58,
+ 0x42, 0x31, 0xf2, 0xbd, 0x09, 0xcc, 0x7b, 0x6c, 0x36, 0x8a, 0x37, 0x9f, 0x28, 0x18, 0xc4, 0x62,
+ 0x78, 0xa9, 0xd9, 0x0b, 0xf0, 0x7d, 0x12, 0x98, 0x6f, 0xf4, 0xa0, 0x0d, 0x3b, 0xc4, 0xc7, 0x8e,
+ 0x13, 0xe0, 0xcb, 0x52, 0x0a, 0x90, 0x23, 0x14, 0x23, 0xc0, 0xc8, 0x1f, 0xb6, 0x12, 0x08, 0x2f,
+ 0x4a, 0x48, 0x25, 0xb8, 0xa4, 0xd2, 0xb2, 0x17, 0xdc, 0x97, 0x24, 0x30, 0x6b, 0xec, 0xd9, 0xeb,
+ 0xae, 0x83, 0x46, 0x63, 0x57, 0xbb, 0x37, 0xea, 0x20, 0x6e, 0x03, 0x27, 0x3a, 0x7b, 0x2e, 0x5e,
+ 0x7f, 0xaa, 0xda, 0x4d, 0xd8, 0x76, 0xec, 0x8e, 0x87, 0xeb, 0x51, 0x30, 0x0e, 0xbe, 0xb8, 0x3b,
+ 0xff, 0xfc, 0xbf, 0x92, 0x73, 0xda, 0x0b, 0x85, 0x23, 0xe6, 0x90, 0xca, 0x33, 0x45, 0x8b, 0xf7,
+ 0x04, 0x82, 0x71, 0x71, 0x86, 0x95, 0x90, 0xbd, 0x70, 0x3f, 0x2f, 0x01, 0xb5, 0xd4, 0x6e, 0x3b,
+ 0x7b, 0xb6, 0xdf, 0x84, 0x5d, 0xd8, 0xf6, 0x5b, 0xae, 0xd9, 0x86, 0xac, 0xfd, 0xac, 0x00, 0xb9,
+ 0x63, 0xb9, 0xb4, 0x0f, 0x46, 0x7f, 0xa9, 0x1c, 0x5f, 0x26, 0xbc, 0xe3, 0x48, 0x6a, 0x79, 0xb0,
+ 0x94, 0x14, 0xe2, 0x14, 0xdb, 0x57, 0x14, 0x2c, 0x28, 0x7b, 0xa9, 0x7e, 0x4a, 0x02, 0x33, 0x41,
+ 0x8f, 0xbd, 0x2d, 0x22, 0xcc, 0x9f, 0x4e, 0x39, 0x19, 0x09, 0x89, 0xa7, 0x90, 0xe1, 0xbb, 0x52,
+ 0xcc, 0x2a, 0xe2, 0xe8, 0xa7, 0x13, 0x5d, 0x29, 0xbd, 0xe8, 0xd0, 0x63, 0xbd, 0xb1, 0xb9, 0xdc,
+ 0xa8, 0x55, 0x74, 0x43, 0x91, 0xb5, 0x2f, 0x4b, 0x20, 0xbf, 0x6e, 0xd9, 0xdb, 0x6c, 0x60, 0xb3,
+ 0x93, 0xc8, 0x8e, 0xec, 0xc0, 0x87, 0x68, 0x4b, 0x27, 0x0f, 0xea, 0x9d, 0xe0, 0xa4, 0xbd, 0xb7,
+ 0x7b, 0x11, 0xba, 0x8d, 0x2d, 0x3c, 0xca, 0x7a, 0x2d, 0xa7, 0x09, 0x6d, 0x62, 0x84, 0x16, 0x8c,
+ 0x81, 0xef, 0x78, 0x13, 0x4c, 0x60, 0xf2, 0x80, 0x38, 0x89, 0x91, 0x78, 0xc8, 0x94, 0xc4, 0x30,
+ 0x95, 0x6a, 0xda, 0x30, 0x80, 0x78, 0xf6, 0x9a, 0xfa, 0x1b, 0x05, 0x70, 0x75, 0xc9, 0xde, 0xc7,
+ 0x36, 0x05, 0xe9, 0xe0, 0xcb, 0x3b, 0xa6, 0xbd, 0x0d, 0xf1, 0x00, 0x11, 0x4a, 0x9c, 0x8d, 0xf4,
+ 0x9f, 0xe3, 0x23, 0xfd, 0xab, 0x06, 0x98, 0x72, 0xdc, 0x0e, 0x74, 0x97, 0xf6, 0x31, 0x4f, 0xfd,
+ 0xcb, 0xce, 0xb4, 0x4d, 0x0e, 0x2a, 0x62, 0x91, 0x92, 0x5f, 0x6c, 0x90, 0xef, 0x8d, 0x80, 0xd0,
+ 0xd9, 0xdb, 0xc0, 0x14, 0x4d, 0x53, 0xe7, 0xc0, 0x74, 0xc3, 0xa8, 0xe8, 0xc6, 0x66, 0xb5, 0xa2,
+ 0x1c, 0x53, 0xaf, 0x02, 0xc7, 0xab, 0x2d, 0xdd, 0x28, 0xb5, 0xaa, 0x8d, 0xfa, 0x26, 0x4e, 0x57,
+ 0x72, 0xda, 0xf3, 0xf2, 0xa2, 0x9e, 0xbd, 0xc9, 0xcc, 0x0c, 0x82, 0xd5, 0x00, 0x53, 0x6d, 0x92,
+ 0x01, 0x0f, 0xa1, 0xb3, 0xa9, 0x6a, 0x47, 0x09, 0x92, 0x04, 0x23, 0x20, 0xa4, 0x9e, 0x01, 0xe0,
+ 0x8a, 0xeb, 0xd8, 0xdb, 0xd1, 0x99, 0xb6, 0x69, 0x83, 0x49, 0xd1, 0x1e, 0xce, 0x81, 0x22, 0xf9,
+ 0x06, 0xdf, 0x6c, 0x82, 0xff, 0x45, 0x82, 0x0f, 0x9e, 0x91, 0xc5, 0x8b, 0xe5, 0x15, 0x4d, 0xb4,
+ 0xe8, 0x23, 0xd2, 0x45, 0x22, 0x03, 0x62, 0x09, 0xd3, 0xaa, 0xdc, 0x0e, 0x8a, 0xe4, 0x5b, 0xea,
+ 0x75, 0x10, 0x1f, 0xa5, 0x94, 0x64, 0x13, 0xf4, 0x53, 0x16, 0x97, 0x69, 0xf6, 0xda, 0xfc, 0x11,
+ 0x09, 0x4c, 0xd7, 0xa1, 0x5f, 0xde, 0x81, 0xed, 0x4b, 0xda, 0x63, 0xf9, 0x05, 0xd0, 0xae, 0x05,
+ 0x6d, 0xff, 0xc2, 0x6e, 0x37, 0x5c, 0x00, 0x0d, 0x12, 0xb4, 0x17, 0xb0, 0x9d, 0xef, 0xd3, 0x79,
+ 0xfd, 0xb9, 0x75, 0x40, 0x5d, 0x83, 0x12, 0x62, 0x54, 0xe6, 0x14, 0x28, 0xba, 0xd0, 0xdb, 0xeb,
+ 0x06, 0x8b, 0x68, 0xf4, 0x49, 0x7b, 0x6d, 0x28, 0xce, 0x32, 0x27, 0xce, 0xdb, 0xc5, 0x8b, 0x98,
+ 0x40, 0xd8, 0xd3, 0x3c, 0x98, 0xaa, 0xda, 0x96, 0x6f, 0x99, 0x5d, 0xed, 0x85, 0x79, 0x30, 0xdf,
+ 0x84, 0xfe, 0xba, 0xe9, 0x9a, 0xbb, 0xd0, 0x87, 0xae, 0xa7, 0x7d, 0x83, 0xef, 0x13, 0x7a, 0x5d,
+ 0xd3, 0xdf, 0x72, 0xdc, 0xdd, 0x40, 0x35, 0x83, 0x67, 0xa4, 0x9a, 0x97, 0xa1, 0xeb, 0x45, 0x7c,
+ 0x05, 0x8f, 0xe8, 0xcd, 0x15, 0xc7, 0xbd, 0x84, 0x06, 0x41, 0x3a, 0x4d, 0xa3, 0x8f, 0x88, 0x5e,
+ 0xd7, 0xd9, 0xae, 0xc1, 0xcb, 0x30, 0x88, 0xaa, 0x16, 0x3e, 0xa3, 0xb9, 0x40, 0xc7, 0xa9, 0x3b,
+ 0x3e, 0xea, 0xb4, 0x6b, 0xce, 0x36, 0x09, 0x3b, 0x3b, 0x6d, 0xf0, 0x89, 0x51, 0x2e, 0xf3, 0x32,
+ 0xc4, 0xb9, 0x8a, 0x6c, 0x2e, 0x9a, 0xa8, 0x2e, 0x02, 0x35, 0xfc, 0xac, 0x05, 0xbb, 0x70, 0x17,
+ 0xfa, 0xee, 0x3e, 0xbe, 0x5d, 0x62, 0xda, 0x18, 0xf0, 0x86, 0x0e, 0xd0, 0xe2, 0x93, 0x75, 0x2a,
+ 0xbd, 0x45, 0x4e, 0x72, 0x87, 0x9a, 0xac, 0x8b, 0x50, 0x9c, 0xc8, 0xed, 0x59, 0x32, 0xb2, 0x66,
+ 0x5e, 0x2e, 0x83, 0x3c, 0x1e, 0x3c, 0xdf, 0x9c, 0xe3, 0x56, 0x98, 0x76, 0xa1, 0xe7, 0x99, 0xdb,
+ 0x30, 0x58, 0x61, 0xa2, 0x8f, 0xea, 0x5d, 0xa0, 0xd0, 0xc5, 0x98, 0x92, 0xc1, 0xe1, 0x46, 0xae,
+ 0x66, 0xc8, 0xc0, 0x40, 0xb4, 0xc2, 0x91, 0x00, 0xc3, 0x6d, 0x90, 0x2f, 0xce, 0xde, 0x0f, 0x0a,
+ 0x04, 0xfe, 0x19, 0x50, 0xa8, 0xe8, 0x4b, 0x1b, 0x2b, 0xca, 0x31, 0xf4, 0x37, 0xe0, 0x6f, 0x06,
+ 0x14, 0x96, 0x4b, 0xad, 0x52, 0x4d, 0x91, 0x50, 0x3d, 0xaa, 0xf5, 0xe5, 0x86, 0x22, 0xa3, 0xc4,
+ 0xf5, 0x52, 0xbd, 0x5a, 0x56, 0xf2, 0xea, 0x2c, 0x98, 0x3a, 0x5f, 0x32, 0xea, 0xd5, 0xfa, 0x8a,
+ 0x52, 0xd0, 0xfe, 0x92, 0xc5, 0xef, 0x6e, 0x1e, 0xbf, 0x9b, 0xe2, 0x78, 0x1a, 0x04, 0xd9, 0xcf,
+ 0x87, 0x90, 0xdd, 0xcb, 0x41, 0xf6, 0x9d, 0x22, 0x44, 0x26, 0xe0, 0xce, 0x54, 0x04, 0x53, 0xeb,
+ 0xae, 0xd3, 0x86, 0x9e, 0xa7, 0xfd, 0x8c, 0x04, 0x8a, 0x65, 0xd3, 0x6e, 0xc3, 0xae, 0x76, 0x4d,
+ 0x04, 0x15, 0x71, 0x15, 0xcd, 0x05, 0xae, 0xa2, 0xda, 0xd7, 0x72, 0xa2, 0xbd, 0x1f, 0xa5, 0xbb,
+ 0x48, 0x68, 0xc6, 0xc8, 0x47, 0xac, 0x97, 0x4b, 0x24, 0x35, 0x81, 0x1b, 0x76, 0x24, 0x30, 0x43,
+ 0x57, 0x03, 0x2e, 0x42, 0x76, 0x1e, 0xfe, 0x8d, 0x9c, 0xe8, 0xe4, 0x30, 0xa8, 0x41, 0x48, 0x26,
+ 0x46, 0x1e, 0x62, 0x13, 0xc1, 0x61, 0xd4, 0x26, 0xb0, 0x79, 0x28, 0x81, 0xd9, 0x0d, 0xdb, 0x1b,
+ 0x24, 0x14, 0xf1, 0x70, 0xfc, 0x41, 0x35, 0x18, 0x42, 0x87, 0x0a, 0xc7, 0x3f, 0x9c, 0x5e, 0xf6,
+ 0x82, 0xf9, 0x46, 0x0e, 0x9c, 0x5c, 0x81, 0x36, 0x74, 0xad, 0x36, 0xa9, 0x41, 0x20, 0x89, 0x7b,
+ 0x79, 0x49, 0x3c, 0x96, 0xe3, 0x7c, 0xd0, 0x17, 0xbc, 0x04, 0x5e, 0x15, 0x4a, 0xe0, 0xe9, 0x9c,
+ 0x04, 0x6e, 0x13, 0xa4, 0x33, 0x81, 0x6b, 0xd5, 0x67, 0xc0, 0x5c, 0xdd, 0xf1, 0xad, 0x2d, 0xab,
+ 0x4d, 0x7c, 0xd0, 0x7e, 0x4e, 0x06, 0xf9, 0x9a, 0xe5, 0xf9, 0x5a, 0x29, 0xea, 0x4e, 0x6e, 0x00,
+ 0xb3, 0x96, 0xdd, 0xee, 0xee, 0x75, 0xa0, 0x01, 0x4d, 0xd2, 0xaf, 0x4c, 0x1b, 0x6c, 0x52, 0xb4,
+ 0xb5, 0x8f, 0xd8, 0x92, 0x83, 0xad, 0xfd, 0xdf, 0x12, 0x5e, 0x86, 0x61, 0x59, 0xc0, 0x71, 0x29,
+ 0x63, 0xec, 0xae, 0x12, 0x98, 0xb7, 0x99, 0xac, 0x81, 0xc1, 0xde, 0x7f, 0x2f, 0x01, 0x4b, 0xce,
+ 0xe0, 0xbf, 0xd0, 0x3e, 0x20, 0xd4, 0x58, 0x87, 0x31, 0x94, 0x0e, 0x99, 0xe5, 0x11, 0x26, 0xc9,
+ 0x2a, 0x58, 0xa8, 0xd6, 0x5b, 0xba, 0x51, 0x2f, 0xd5, 0x68, 0x16, 0x59, 0xfb, 0x57, 0x09, 0x14,
+ 0x0c, 0xd8, 0xeb, 0xee, 0xb3, 0x81, 0xa7, 0xa9, 0xa3, 0x78, 0x2e, 0x74, 0x14, 0x57, 0x97, 0x01,
+ 0x30, 0xdb, 0xa8, 0x60, 0x7c, 0x33, 0x97, 0x34, 0x30, 0x9c, 0x29, 0x57, 0xc1, 0x52, 0x98, 0xdb,
+ 0x60, 0xbe, 0xd4, 0x5e, 0x24, 0xbc, 0x73, 0xc4, 0x51, 0xc3, 0x1c, 0xc6, 0xf4, 0x09, 0x1f, 0x14,
+ 0xda, 0xec, 0x19, 0x4a, 0xee, 0x68, 0xc4, 0xff, 0x15, 0x09, 0xe4, 0x5b, 0xa8, 0xb7, 0x64, 0x3a,
+ 0xce, 0xcf, 0x8e, 0xa6, 0xe3, 0x88, 0x4c, 0x8c, 0x8e, 0xdf, 0x07, 0xe6, 0x58, 0x8d, 0xa5, 0xae,
+ 0x12, 0x89, 0x2a, 0xce, 0x7d, 0x30, 0x8a, 0x86, 0x0f, 0x60, 0xe7, 0x68, 0x44, 0xfc, 0xe9, 0xc7,
+ 0x01, 0xb0, 0x06, 0x77, 0x2f, 0x42, 0xd7, 0xdb, 0xb1, 0x7a, 0xda, 0x5f, 0xcb, 0x60, 0x66, 0x05,
+ 0xfa, 0x4d, 0xdf, 0xf4, 0xf7, 0xbc, 0xbe, 0xed, 0x4e, 0xdb, 0x29, 0x9b, 0xed, 0x1d, 0x48, 0xbb,
+ 0xa3, 0xe0, 0x51, 0x7b, 0x8f, 0x2c, 0xea, 0x4f, 0x14, 0x95, 0xb3, 0x18, 0x96, 0x11, 0x83, 0xc9,
+ 0xe3, 0x41, 0xbe, 0x63, 0xfa, 0x26, 0xc5, 0xe2, 0x9a, 0x3e, 0x2c, 0x22, 0x42, 0x06, 0xce, 0xa6,
+ 0xbd, 0x43, 0x12, 0x71, 0x28, 0x12, 0x28, 0x3f, 0x1d, 0x08, 0x1f, 0xc8, 0x8d, 0x80, 0xc2, 0x09,
+ 0x30, 0x5f, 0x6f, 0xb4, 0x36, 0x6b, 0x8d, 0x95, 0x15, 0x1d, 0xa5, 0x2a, 0xb2, 0x7a, 0x0a, 0xa8,
+ 0xeb, 0xa5, 0x0b, 0x6b, 0x7a, 0xbd, 0xb5, 0x59, 0x6f, 0x54, 0x74, 0xfa, 0x65, 0x5e, 0x3d, 0x0e,
+ 0x66, 0xcb, 0xa5, 0xf2, 0x6a, 0x90, 0x50, 0x50, 0x4f, 0x83, 0x93, 0x6b, 0xfa, 0xda, 0x92, 0x6e,
+ 0x34, 0x57, 0xab, 0xeb, 0x9b, 0x88, 0xcc, 0x72, 0x63, 0xa3, 0x5e, 0x51, 0x8a, 0xaa, 0x06, 0x4e,
+ 0x31, 0x6f, 0xce, 0x1b, 0x8d, 0xfa, 0xca, 0x66, 0xb3, 0x55, 0x6a, 0xe9, 0xca, 0x94, 0x7a, 0x15,
+ 0x38, 0x5e, 0x2e, 0xd5, 0x71, 0xf6, 0x72, 0xa3, 0x5e, 0xd7, 0xcb, 0x2d, 0x65, 0x5a, 0xfb, 0xf7,
+ 0x3c, 0x98, 0xad, 0x7a, 0x75, 0x73, 0x17, 0x9e, 0x33, 0xbb, 0x56, 0x47, 0x7b, 0x21, 0x33, 0xf3,
+ 0xb8, 0x09, 0xcc, 0xbb, 0xe4, 0x2f, 0xec, 0xb4, 0x2c, 0x48, 0xd0, 0x9c, 0x37, 0xf8, 0x44, 0x34,
+ 0x27, 0xb7, 0x31, 0x81, 0x60, 0x4e, 0x4e, 0x9e, 0xd4, 0x25, 0x00, 0xc8, 0xbf, 0x56, 0x74, 0x47,
+ 0xec, 0xd9, 0xfe, 0xd6, 0x64, 0xee, 0x42, 0x0f, 0xba, 0x97, 0xad, 0x36, 0x0c, 0x72, 0x1a, 0xcc,
+ 0x57, 0xda, 0x9f, 0xca, 0xa2, 0xfb, 0x8b, 0x0c, 0xa8, 0x4c, 0x75, 0x62, 0x7a, 0xc3, 0x1f, 0x91,
+ 0x45, 0x76, 0x07, 0x85, 0x48, 0xa6, 0xd3, 0x94, 0x97, 0x48, 0xa3, 0x2d, 0xdb, 0xb6, 0x1a, 0x8d,
+ 0xcd, 0xe6, 0x6a, 0xc3, 0x68, 0x29, 0xb2, 0x3a, 0x07, 0xa6, 0xd1, 0x63, 0xad, 0x51, 0x5f, 0x51,
+ 0xf2, 0xea, 0xd5, 0xe0, 0xc4, 0x6a, 0xa9, 0xb9, 0x59, 0xad, 0x9f, 0x2b, 0xd5, 0xaa, 0x95, 0xcd,
+ 0xf2, 0x6a, 0xc9, 0x68, 0x2a, 0x05, 0xf5, 0x1a, 0x70, 0x75, 0xab, 0xaa, 0x1b, 0x9b, 0xcb, 0x7a,
+ 0xa9, 0xb5, 0x61, 0xe8, 0xcd, 0xcd, 0x7a, 0x63, 0xb3, 0x5e, 0x5a, 0xd3, 0x95, 0x22, 0x6a, 0xfe,
+ 0xf8, 0x55, 0xa4, 0x36, 0x53, 0x07, 0x95, 0x71, 0x3a, 0x46, 0x19, 0x67, 0xfa, 0x95, 0x11, 0xb0,
+ 0x6a, 0x65, 0xe8, 0x4d, 0xdd, 0x38, 0xa7, 0x2b, 0xb3, 0x83, 0x74, 0x6d, 0x4e, 0x3d, 0x09, 0x14,
+ 0xc4, 0xc3, 0x66, 0xb5, 0x19, 0xe4, 0xac, 0x28, 0xf3, 0xda, 0xa7, 0x8a, 0xe0, 0x94, 0x01, 0xb7,
+ 0x2d, 0xcf, 0x87, 0xee, 0xba, 0xb9, 0xbf, 0x0b, 0x6d, 0x3f, 0xe8, 0xe4, 0xff, 0x39, 0xb5, 0x32,
+ 0xae, 0x81, 0xf9, 0x1e, 0xa1, 0xb1, 0x06, 0xfd, 0x1d, 0xa7, 0x43, 0x47, 0xe1, 0xc7, 0xc6, 0xf6,
+ 0x1c, 0x8b, 0xeb, 0x6c, 0x76, 0x83, 0xff, 0x9a, 0xd1, 0x6d, 0x39, 0x41, 0xb7, 0xf3, 0xa3, 0xe8,
+ 0xb6, 0x7a, 0x1d, 0x98, 0xd9, 0xf3, 0xa0, 0xab, 0xef, 0x9a, 0x56, 0x37, 0xb8, 0xe3, 0x33, 0x4c,
+ 0xd0, 0xde, 0x99, 0x17, 0x3d, 0xb1, 0xc2, 0xd4, 0x65, 0xb0, 0x18, 0x63, 0xfa, 0xd6, 0x33, 0x00,
+ 0xd0, 0xca, 0x6e, 0xb8, 0x5d, 0xaa, 0xac, 0x4c, 0x0a, 0xe2, 0xef, 0xa2, 0xd5, 0xed, 0x5a, 0xf6,
+ 0x76, 0xb8, 0xef, 0x1f, 0x25, 0x68, 0x2f, 0x91, 0x45, 0x4e, 0xb0, 0xa4, 0xe5, 0x2d, 0x5d, 0x6b,
+ 0x7a, 0x91, 0x34, 0xe1, 0x7e, 0xf7, 0x60, 0xd3, 0x29, 0xaa, 0x0a, 0x98, 0xc3, 0x69, 0xb4, 0x05,
+ 0x2a, 0x53, 0xa8, 0x0f, 0x0e, 0xc8, 0xad, 0xe9, 0xad, 0xd5, 0x46, 0x25, 0x7c, 0x37, 0x8d, 0x48,
+ 0x22, 0x66, 0x4a, 0xf5, 0x0b, 0xb8, 0x35, 0xce, 0xa8, 0x8f, 0x06, 0xd7, 0x30, 0x1d, 0x76, 0xa9,
+ 0x66, 0xe8, 0xa5, 0xca, 0x85, 0x4d, 0xfd, 0x99, 0xd5, 0x66, 0xab, 0xc9, 0x37, 0xae, 0xa0, 0x1d,
+ 0xcd, 0x22, 0x7e, 0xf5, 0xb5, 0x52, 0xb5, 0x46, 0xfb, 0xf7, 0xe5, 0x86, 0xb1, 0x56, 0x6a, 0x29,
+ 0x73, 0xda, 0xcb, 0x65, 0xa0, 0xac, 0x40, 0x7f, 0xdd, 0x71, 0x7d, 0xb3, 0x5b, 0xb3, 0xec, 0x4b,
+ 0x1b, 0x6e, 0x97, 0x9b, 0x6c, 0x0a, 0x87, 0xe9, 0xe0, 0x87, 0x48, 0x8e, 0x60, 0xfc, 0x8e, 0x78,
+ 0x0f, 0x67, 0x8b, 0x94, 0x29, 0x4a, 0xd0, 0x9e, 0x23, 0x89, 0x2c, 0x77, 0x8b, 0x97, 0x9a, 0x4e,
+ 0x4f, 0x9e, 0x3b, 0xe9, 0xf1, 0x79, 0x00, 0x6a, 0x45, 0xed, 0xf9, 0x79, 0x30, 0xbd, 0x6c, 0xd9,
+ 0x66, 0xd7, 0x7a, 0x36, 0x17, 0x1d, 0x33, 0xea, 0x63, 0x72, 0x09, 0x7d, 0x8c, 0x34, 0xd2, 0xf8,
+ 0xf9, 0x53, 0xb2, 0xe8, 0xf2, 0x02, 0x23, 0xfb, 0x80, 0xc9, 0x98, 0xc1, 0xf3, 0xa3, 0x92, 0xc8,
+ 0xf2, 0xc2, 0x70, 0x7a, 0xe9, 0x30, 0xfc, 0xcc, 0xb7, 0x87, 0x8d, 0xd5, 0xd7, 0xbe, 0xa7, 0x07,
+ 0xa9, 0xc2, 0x8c, 0xf6, 0x7b, 0x32, 0xd0, 0x56, 0xa0, 0x7f, 0x0e, 0xba, 0xe1, 0x54, 0x00, 0xf7,
+ 0xfa, 0xd4, 0xde, 0x66, 0x9a, 0xec, 0x9b, 0x59, 0x00, 0xcf, 0xf3, 0x00, 0x96, 0x12, 0x1a, 0x4f,
+ 0x0c, 0xe9, 0x98, 0xc6, 0x5b, 0x05, 0x45, 0x0f, 0xbf, 0xa7, 0x6a, 0xf6, 0x84, 0xf8, 0xe1, 0x12,
+ 0x13, 0x63, 0xa9, 0x13, 0xc2, 0x06, 0x25, 0xa0, 0x7d, 0x33, 0x9c, 0x04, 0x7d, 0x0f, 0xa7, 0x1d,
+ 0xcb, 0x87, 0x66, 0x36, 0x9d, 0xbe, 0xb8, 0xd9, 0xaa, 0xcb, 0x20, 0xfb, 0x46, 0xfb, 0x68, 0x01,
+ 0x9c, 0x1c, 0x54, 0x1d, 0xed, 0x97, 0x73, 0xdc, 0x0e, 0x3b, 0xc4, 0x43, 0x7e, 0x8e, 0x6e, 0x20,
+ 0xa2, 0x07, 0xf5, 0x49, 0xe0, 0xea, 0x70, 0x19, 0xae, 0xe5, 0xd4, 0xe1, 0x15, 0xaf, 0x0b, 0x7d,
+ 0x1f, 0xba, 0xb8, 0x6a, 0xd3, 0xc6, 0xe0, 0x97, 0xea, 0x53, 0xc0, 0xa3, 0x2c, 0xdb, 0xb3, 0x3a,
+ 0xd0, 0x6d, 0x59, 0x3d, 0xaf, 0x64, 0x77, 0x5a, 0x7b, 0xbe, 0xe3, 0x5a, 0x26, 0xbd, 0x91, 0x72,
+ 0xda, 0x88, 0x7b, 0xad, 0xde, 0x0a, 0x14, 0xcb, 0x6b, 0xd8, 0x17, 0x1d, 0xd3, 0xed, 0x58, 0xf6,
+ 0x76, 0xcd, 0xf2, 0x7c, 0xea, 0x01, 0x7c, 0x20, 0x5d, 0xfb, 0x1b, 0x59, 0xf4, 0x30, 0xdd, 0x10,
+ 0x58, 0x63, 0x3a, 0x94, 0x17, 0xc8, 0x22, 0xc7, 0xe3, 0xd2, 0xd1, 0x4e, 0xa7, 0x2c, 0xcf, 0x9b,
+ 0xb4, 0x21, 0x31, 0x78, 0x04, 0xc7, 0x5d, 0x0b, 0x49, 0x0f, 0x0c, 0x81, 0x73, 0xba, 0x51, 0x5d,
+ 0xae, 0xea, 0xc8, 0xac, 0xb8, 0x1a, 0x9c, 0x88, 0xde, 0x55, 0x2e, 0x6c, 0x36, 0xf5, 0x7a, 0x4b,
+ 0x99, 0x46, 0xfd, 0x14, 0x49, 0x5e, 0x2e, 0x55, 0x6b, 0x7a, 0x65, 0xb3, 0xd5, 0x40, 0x6f, 0x2a,
+ 0xa3, 0x99, 0x16, 0xda, 0xc3, 0x79, 0x70, 0x1c, 0xcb, 0x76, 0x1f, 0x4b, 0x15, 0x09, 0xa5, 0xcf,
+ 0xd7, 0x36, 0x04, 0x68, 0x86, 0x88, 0x57, 0xfb, 0x5d, 0xe1, 0x0b, 0x37, 0x19, 0x08, 0xfb, 0xca,
+ 0x88, 0xd1, 0x8c, 0x6f, 0x48, 0x22, 0x11, 0x2a, 0x84, 0xc9, 0xa6, 0x53, 0x8a, 0x7f, 0x99, 0xf4,
+ 0x88, 0x13, 0x0f, 0x3e, 0xb6, 0x32, 0xcb, 0xf8, 0xe3, 0x67, 0xae, 0x57, 0x0d, 0xac, 0x0e, 0x0b,
+ 0x00, 0xe0, 0x14, 0xac, 0x41, 0x44, 0x0f, 0x06, 0x8e, 0x57, 0x71, 0x7a, 0x50, 0x2a, 0xb7, 0xaa,
+ 0xe7, 0xf4, 0x38, 0x3d, 0xf8, 0x9c, 0x0c, 0xa6, 0x57, 0xa0, 0x8f, 0xe6, 0x54, 0x9e, 0xf6, 0x54,
+ 0x81, 0xf5, 0x1f, 0x64, 0xc6, 0x74, 0x9d, 0xb6, 0xd9, 0x0d, 0x97, 0x01, 0xc8, 0x93, 0xf6, 0xc3,
+ 0xa3, 0x98, 0x20, 0x41, 0xd1, 0x31, 0xe3, 0xd5, 0x77, 0x83, 0x82, 0x8f, 0x5e, 0xd3, 0x65, 0xe8,
+ 0xef, 0x88, 0x1d, 0xae, 0x10, 0x91, 0x8a, 0xe9, 0x9b, 0x06, 0xc9, 0xcf, 0x8c, 0x4e, 0x82, 0xb6,
+ 0x4b, 0x0c, 0x23, 0xdf, 0x8e, 0xf6, 0xe7, 0x5f, 0xca, 0xe0, 0x6a, 0xd2, 0x3e, 0x4a, 0xbd, 0x5e,
+ 0xd3, 0x77, 0x5c, 0x68, 0xc0, 0x36, 0xb4, 0x7a, 0x7e, 0xdf, 0xfa, 0x9e, 0x4b, 0x52, 0x83, 0xcd,
+ 0x66, 0xfa, 0xa8, 0xbd, 0x41, 0x16, 0x8d, 0xf0, 0x7b, 0xa0, 0x3d, 0xf6, 0x95, 0x17, 0xd3, 0xd8,
+ 0x3f, 0x29, 0x89, 0xc4, 0xec, 0x4d, 0x49, 0x3c, 0x1d, 0x50, 0x1f, 0x3b, 0x02, 0xa0, 0x82, 0x95,
+ 0x1b, 0x43, 0x2f, 0xeb, 0xd5, 0x75, 0x34, 0x08, 0x5c, 0x0f, 0xae, 0x5d, 0xdf, 0x30, 0xca, 0xab,
+ 0xa5, 0xa6, 0xbe, 0x69, 0xe8, 0x2b, 0xd5, 0x66, 0x8b, 0x3a, 0x65, 0x91, 0xaf, 0xa6, 0xd4, 0xeb,
+ 0xc0, 0xe9, 0xe6, 0xc6, 0x52, 0xb3, 0x6c, 0x54, 0xd7, 0x71, 0xba, 0xa1, 0xd7, 0xf5, 0xf3, 0xf4,
+ 0xed, 0xb4, 0xf6, 0x61, 0x05, 0xcc, 0xa2, 0x09, 0x40, 0x93, 0xcc, 0x0b, 0xb4, 0xbf, 0xcb, 0x83,
+ 0x59, 0x03, 0x7a, 0x4e, 0xf7, 0x32, 0x9e, 0x23, 0x4c, 0x6a, 0xea, 0xf1, 0x75, 0x59, 0xf4, 0xfc,
+ 0x36, 0xc3, 0xec, 0x22, 0xc3, 0x68, 0xfc, 0x44, 0xd3, 0xbc, 0x6c, 0x5a, 0x5d, 0xf3, 0x22, 0xed,
+ 0x6a, 0xa6, 0x8d, 0x28, 0x41, 0x5d, 0x04, 0xaa, 0x73, 0xc5, 0x86, 0x6e, 0xb3, 0x7d, 0x45, 0xf7,
+ 0x77, 0x4a, 0x9d, 0x8e, 0x0b, 0x3d, 0x8f, 0xae, 0x5e, 0x0c, 0x78, 0xa3, 0xde, 0x02, 0x8e, 0xe3,
+ 0x54, 0x26, 0x33, 0x71, 0x90, 0xe9, 0x4f, 0x0e, 0x73, 0x96, 0xec, 0xfd, 0x20, 0x67, 0x81, 0xc9,
+ 0x19, 0x25, 0xb3, 0xc7, 0x25, 0x8a, 0xfc, 0x29, 0x9d, 0x1b, 0xc0, 0xac, 0x6d, 0xee, 0x42, 0xfd,
+ 0xa1, 0x9e, 0xe5, 0x42, 0x0f, 0x3b, 0xc6, 0xc8, 0x06, 0x9b, 0xa4, 0x7d, 0x54, 0xe8, 0xbc, 0xb9,
+ 0x98, 0xc4, 0xd2, 0xe9, 0xfe, 0xca, 0x08, 0xaa, 0x3f, 0xa0, 0x9f, 0x91, 0xb5, 0x0f, 0xcb, 0x60,
+ 0x8e, 0x32, 0x55, 0xb2, 0xf7, 0xab, 0x1d, 0xed, 0x7a, 0xce, 0xf8, 0x35, 0x51, 0x5a, 0x60, 0xfc,
+ 0xe2, 0x07, 0xed, 0x47, 0x65, 0x51, 0x77, 0xe7, 0x01, 0x15, 0xc7, 0x65, 0xc4, 0x3b, 0x8e, 0x6e,
+ 0x39, 0x7b, 0xd4, 0x51, 0x75, 0xda, 0x20, 0x0f, 0x59, 0x2e, 0xea, 0x69, 0xbf, 0x2a, 0xe4, 0x4c,
+ 0x2d, 0x58, 0x8d, 0x23, 0x02, 0xf0, 0xd3, 0x32, 0x58, 0xa0, 0x5c, 0x35, 0xe9, 0x39, 0x1f, 0xa1,
+ 0x03, 0x6f, 0x3f, 0x2e, 0x6c, 0x08, 0x0e, 0xa8, 0x3f, 0x2d, 0xe9, 0x11, 0x03, 0xe4, 0xc7, 0x85,
+ 0x82, 0xa3, 0x09, 0x57, 0xe4, 0x88, 0xa0, 0x7c, 0x57, 0x1e, 0xcc, 0x6e, 0x78, 0xd0, 0xa5, 0x7e,
+ 0xfb, 0xda, 0x6b, 0xf3, 0x40, 0x5e, 0x81, 0xdc, 0x46, 0xea, 0x8b, 0x85, 0x3d, 0x7c, 0xd9, 0xca,
+ 0x32, 0x44, 0x91, 0x8d, 0x14, 0x03, 0xdb, 0xcd, 0x60, 0x81, 0x88, 0xb4, 0xe4, 0xfb, 0xc8, 0x48,
+ 0x0c, 0xbc, 0x69, 0xfb, 0x52, 0xc7, 0xb1, 0x55, 0x84, 0xcb, 0x42, 0x59, 0xca, 0x88, 0xa7, 0x1a,
+ 0xdc, 0x22, 0xf3, 0xd9, 0xbc, 0xd1, 0x97, 0xaa, 0xde, 0x01, 0xae, 0x72, 0x7a, 0x90, 0x9c, 0x5f,
+ 0x61, 0x32, 0x17, 0x70, 0xe6, 0x41, 0xaf, 0xb4, 0xbf, 0x13, 0xf2, 0xd5, 0x15, 0x97, 0x4e, 0x3a,
+ 0x5d, 0xe8, 0x8d, 0xc7, 0x24, 0x39, 0x09, 0x14, 0x94, 0x03, 0xef, 0xbf, 0x18, 0x7a, 0xb3, 0x51,
+ 0x3b, 0xa7, 0x0f, 0x5e, 0xc6, 0x28, 0x68, 0xcf, 0x93, 0xc1, 0xcc, 0x92, 0xeb, 0x98, 0x9d, 0xb6,
+ 0xe9, 0xf9, 0xda, 0x37, 0x25, 0x30, 0xb7, 0x6e, 0xee, 0x77, 0x1d, 0xb3, 0x83, 0xfd, 0xfb, 0xfb,
+ 0xfa, 0x82, 0x1e, 0x79, 0x15, 0xf4, 0x05, 0xf4, 0x91, 0x3f, 0x18, 0x18, 0x1e, 0xdd, 0xcb, 0x89,
+ 0xdc, 0xab, 0x19, 0x6e, 0xf3, 0x49, 0x83, 0x82, 0x95, 0x06, 0x7c, 0x2d, 0xb2, 0x3c, 0xc5, 0x58,
+ 0x94, 0x1f, 0x16, 0x0b, 0x3f, 0x2a, 0x42, 0xf2, 0x68, 0x76, 0xe5, 0x9f, 0x3f, 0x0d, 0x8a, 0x15,
+ 0x88, 0xad, 0xb8, 0xff, 0x2e, 0x81, 0xa9, 0x26, 0xf4, 0xb1, 0x05, 0x77, 0x17, 0xe7, 0x29, 0xdc,
+ 0xc1, 0x19, 0x22, 0x27, 0xf6, 0xe0, 0x19, 0x4d, 0xd6, 0x99, 0xf3, 0xd6, 0xf8, 0x7f, 0x0a, 0x8f,
+ 0x44, 0x52, 0xee, 0x22, 0x2d, 0xf3, 0x50, 0x1e, 0x89, 0x89, 0xa4, 0xb2, 0xf7, 0xb5, 0x7a, 0x8f,
+ 0x44, 0x5d, 0xab, 0x98, 0x5e, 0xef, 0xd5, 0xac, 0x7e, 0x26, 0x7a, 0x9b, 0x51, 0xe6, 0x13, 0x9c,
+ 0xa3, 0x9e, 0x08, 0xa6, 0x88, 0xcc, 0x83, 0xf9, 0x68, 0xbf, 0x9f, 0x02, 0x21, 0x81, 0xcf, 0x5e,
+ 0x07, 0x39, 0x05, 0x5d, 0xd4, 0xe2, 0x0b, 0x9f, 0x48, 0x0c, 0x82, 0xb9, 0x3a, 0xf4, 0xaf, 0x38,
+ 0xee, 0xa5, 0xa6, 0x6f, 0xfa, 0x50, 0xfb, 0x17, 0x89, 0x5c, 0x97, 0xc7, 0x44, 0x3f, 0xa9, 0x83,
+ 0x13, 0xa4, 0x42, 0x34, 0x23, 0xee, 0xbf, 0x49, 0x45, 0x6e, 0x18, 0x28, 0x04, 0x26, 0x9f, 0x71,
+ 0xf0, 0x53, 0xed, 0x67, 0x06, 0x06, 0x7d, 0x92, 0x06, 0x4c, 0x1a, 0xa8, 0x64, 0x58, 0x06, 0xe3,
+ 0xef, 0xc7, 0xd3, 0x3e, 0x22, 0x64, 0x56, 0x8b, 0xd1, 0x3c, 0x9a, 0xae, 0xe0, 0xdf, 0x1e, 0x0b,
+ 0xf2, 0xe5, 0x1d, 0xd3, 0xd7, 0xde, 0x2d, 0x03, 0x50, 0xea, 0x74, 0xd6, 0x88, 0x0f, 0x38, 0xeb,
+ 0x90, 0x76, 0x16, 0xcc, 0xb5, 0x77, 0xcc, 0xe8, 0xe6, 0x0c, 0xd2, 0x1f, 0x70, 0x69, 0xea, 0x93,
+ 0x22, 0x67, 0x72, 0x22, 0x55, 0xad, 0x0f, 0x26, 0x54, 0x06, 0xa5, 0x1d, 0x3a, 0x9a, 0xf3, 0xa1,
+ 0x30, 0x13, 0x8f, 0xd0, 0xa1, 0xcf, 0x17, 0x23, 0xf6, 0xe2, 0xe7, 0x70, 0x94, 0x74, 0x78, 0xc0,
+ 0x26, 0x4a, 0x48, 0x79, 0xd2, 0x5b, 0x2c, 0xa0, 0x47, 0x32, 0x5f, 0x13, 0x09, 0x5d, 0xab, 0xea,
+ 0x1d, 0x2b, 0x10, 0x2d, 0x0d, 0x98, 0xa5, 0xbd, 0x28, 0x97, 0x0e, 0xbe, 0x64, 0xc1, 0x3d, 0x1d,
+ 0xcc, 0xc3, 0x8e, 0xe5, 0xc3, 0xa0, 0x96, 0x54, 0x80, 0x49, 0x10, 0xf3, 0x1f, 0x68, 0xcf, 0x15,
+ 0x0e, 0xba, 0x86, 0x05, 0x7a, 0xb0, 0x46, 0x31, 0xed, 0x4f, 0x2c, 0x8c, 0x9a, 0x18, 0xcd, 0xec,
+ 0xc1, 0xfa, 0x61, 0x19, 0x5c, 0xdd, 0x72, 0xb6, 0xb7, 0xbb, 0x30, 0x10, 0x13, 0x24, 0xde, 0x99,
+ 0x9a, 0x39, 0x4e, 0xb8, 0xf0, 0x4e, 0x90, 0xf3, 0xa0, 0x15, 0x1e, 0x25, 0x43, 0x0f, 0xfc, 0x89,
+ 0xa9, 0xc4, 0x59, 0x14, 0x16, 0xd7, 0x40, 0x3e, 0x63, 0x50, 0x10, 0x0b, 0xf8, 0x2c, 0x4c, 0x36,
+ 0x7b, 0x20, 0xbe, 0x20, 0x81, 0x79, 0x72, 0x2f, 0x62, 0xa0, 0xa0, 0x0f, 0x8c, 0x11, 0x00, 0xed,
+ 0x9b, 0x39, 0x51, 0x3f, 0x5b, 0x2c, 0x13, 0x8e, 0x93, 0x18, 0x11, 0x8b, 0x05, 0x55, 0x19, 0x4a,
+ 0x6e, 0x02, 0x37, 0x75, 0xe6, 0xc1, 0xec, 0x0a, 0x0c, 0x5a, 0x9a, 0xa7, 0xbd, 0x3f, 0x65, 0x4f,
+ 0x74, 0x16, 0xcc, 0xe1, 0xcb, 0xc1, 0x1a, 0xf4, 0x98, 0x24, 0x59, 0x35, 0xe3, 0xd2, 0xd4, 0x9b,
+ 0xc0, 0xfc, 0x45, 0xb8, 0xe5, 0xb8, 0xb0, 0xc1, 0x9d, 0xa5, 0xe4, 0x13, 0x07, 0x87, 0xa7, 0x53,
+ 0x6f, 0x01, 0xc7, 0xa9, 0xa3, 0xfb, 0x12, 0x9a, 0xeb, 0x9b, 0xee, 0x3e, 0x3d, 0x98, 0xd6, 0x9f,
+ 0xac, 0xfd, 0x25, 0xdb, 0x60, 0x96, 0x78, 0x14, 0x6f, 0x3b, 0x28, 0x76, 0xa6, 0xd2, 0x31, 0xa3,
+ 0xd3, 0x93, 0xc1, 0x34, 0xd5, 0x91, 0xc0, 0xa0, 0x4b, 0xea, 0x41, 0xc3, 0xbc, 0xea, 0x93, 0xc1,
+ 0x0c, 0x12, 0x11, 0xb6, 0x1b, 0x68, 0xd7, 0x7b, 0x7a, 0xc0, 0x87, 0xf8, 0xbd, 0x11, 0x65, 0xd5,
+ 0x7e, 0x21, 0xd4, 0x19, 0x9d, 0xd3, 0x99, 0x27, 0xa4, 0x61, 0x7e, 0x22, 0x17, 0xc9, 0x2b, 0x4c,
+ 0xf9, 0x4b, 0xfb, 0xd5, 0x8e, 0xa7, 0xad, 0xa5, 0xd3, 0x9a, 0x33, 0x00, 0x84, 0xcd, 0x2f, 0x08,
+ 0x9c, 0xc1, 0xa4, 0xf0, 0xb1, 0xf1, 0x13, 0x8f, 0x02, 0xf6, 0x8b, 0x03, 0xb3, 0x33, 0x5e, 0x40,
+ 0x05, 0x8f, 0x10, 0x8a, 0x70, 0x92, 0x3d, 0x3a, 0x3f, 0x9f, 0x07, 0x57, 0x87, 0x27, 0x9c, 0x6a,
+ 0xa6, 0x17, 0xb5, 0xec, 0x0b, 0xe9, 0x20, 0xe2, 0x8e, 0x94, 0x84, 0xcd, 0xf1, 0x24, 0x28, 0x78,
+ 0x7b, 0x17, 0x43, 0x47, 0x40, 0xf2, 0xa0, 0xbd, 0x51, 0x4e, 0x35, 0x56, 0x0d, 0xe4, 0x6f, 0xcc,
+ 0x8d, 0xf0, 0x36, 0x70, 0xc2, 0xde, 0xdb, 0x0d, 0xb1, 0xc0, 0x3d, 0x0d, 0xed, 0x59, 0x0e, 0xbe,
+ 0xe0, 0x9b, 0x6c, 0x5e, 0xbc, 0xc9, 0xa6, 0x18, 0x49, 0x45, 0x2a, 0x9d, 0xbd, 0x7a, 0x7c, 0xa6,
+ 0xef, 0x08, 0x5a, 0x39, 0xb5, 0x52, 0x10, 0xf8, 0x25, 0x16, 0xfe, 0x7f, 0xca, 0xa5, 0xea, 0x79,
+ 0x87, 0x9f, 0x5c, 0x4b, 0xd1, 0x13, 0x1e, 0xe5, 0xb1, 0xb5, 0xcf, 0x4b, 0x40, 0x6b, 0x46, 0x0e,
+ 0x39, 0x14, 0xd4, 0x75, 0x17, 0x5e, 0xb6, 0xe0, 0x15, 0xce, 0x7d, 0xeb, 0x4d, 0xc2, 0x71, 0xa8,
+ 0x79, 0x5d, 0x39, 0x40, 0x34, 0x7e, 0x5d, 0x7c, 0x00, 0x2e, 0x62, 0xf1, 0xa6, 0xd3, 0x95, 0x38,
+ 0x81, 0xd8, 0xe1, 0x12, 0x38, 0xc3, 0xa0, 0xba, 0xec, 0x3a, 0xbb, 0x09, 0x92, 0x7d, 0x39, 0x2b,
+ 0xd9, 0x0d, 0x5e, 0xb2, 0xf7, 0x25, 0xaa, 0xcb, 0x00, 0xc2, 0x31, 0xea, 0xf8, 0xfe, 0x50, 0x8e,
+ 0xcf, 0xe4, 0xe4, 0x58, 0x39, 0x24, 0xfd, 0xec, 0x65, 0xf9, 0x07, 0x79, 0x30, 0x67, 0x40, 0xb3,
+ 0x13, 0x0e, 0x02, 0xff, 0x37, 0x63, 0xde, 0x3d, 0x15, 0xe4, 0xfd, 0x68, 0x9d, 0xe6, 0xb1, 0x07,
+ 0x2b, 0xc3, 0x7e, 0x89, 0x1f, 0xf0, 0x72, 0x0d, 0xfe, 0xe8, 0x40, 0x6f, 0x21, 0x09, 0xd8, 0x86,
+ 0xb2, 0x88, 0x6d, 0x98, 0x1f, 0x64, 0x1b, 0xde, 0x02, 0x8e, 0x77, 0x4d, 0xcf, 0xaf, 0x5c, 0x6c,
+ 0x59, 0xbb, 0xd0, 0xf3, 0xcd, 0xdd, 0x1e, 0xb6, 0x02, 0x65, 0xa3, 0x3f, 0x99, 0xbf, 0x07, 0x3e,
+ 0xf1, 0x3c, 0xd8, 0xa0, 0x2a, 0x1e, 0x3e, 0x66, 0xee, 0x87, 0x84, 0x0e, 0x7f, 0x0d, 0x2b, 0x3b,
+ 0x9d, 0x66, 0xdc, 0x3f, 0xc2, 0xda, 0xd2, 0x29, 0xa0, 0xae, 0xe9, 0xcd, 0x66, 0x69, 0x05, 0x9f,
+ 0x09, 0x09, 0x9c, 0x84, 0x3a, 0x67, 0x1f, 0x83, 0xc4, 0x47, 0x90, 0x56, 0xe7, 0xa2, 0xb1, 0x57,
+ 0x39, 0xa6, 0xce, 0x82, 0x29, 0x17, 0xf6, 0xba, 0x16, 0xf4, 0x94, 0x9c, 0xf6, 0x0d, 0x09, 0x14,
+ 0x37, 0x6c, 0x17, 0x9a, 0x1d, 0xed, 0x19, 0xf1, 0x43, 0xc8, 0x88, 0x4a, 0xc1, 0xc7, 0xbd, 0x4a,
+ 0x5c, 0x95, 0xa5, 0x8d, 0x0e, 0x31, 0x32, 0x16, 0xf8, 0xc4, 0x96, 0x63, 0xe3, 0x4b, 0xcd, 0xbc,
+ 0x49, 0x9f, 0x9d, 0x02, 0x05, 0x7d, 0xb7, 0xe7, 0xef, 0x9f, 0x7d, 0x0c, 0x98, 0x6f, 0xfa, 0x2e,
+ 0x34, 0x77, 0x99, 0x4d, 0x75, 0xdf, 0xb9, 0x04, 0xed, 0x60, 0x53, 0x1d, 0x3f, 0xdc, 0x7d, 0x17,
+ 0x98, 0xb2, 0x9d, 0x4d, 0x73, 0xcf, 0xdf, 0x51, 0xaf, 0x3f, 0x10, 0x8d, 0x86, 0xaa, 0x5f, 0x83,
+ 0x86, 0xff, 0xfb, 0xd3, 0x7b, 0xf0, 0xd4, 0xaa, 0x68, 0x3b, 0xa5, 0x3d, 0x7f, 0x67, 0xe9, 0xba,
+ 0x4f, 0xff, 0xd9, 0x99, 0xdc, 0xe7, 0xfe, 0xec, 0x4c, 0xee, 0x2b, 0x7f, 0x76, 0x26, 0xf7, 0xe3,
+ 0x7f, 0x7e, 0xe6, 0xd8, 0xe7, 0xfe, 0xfc, 0xcc, 0xb1, 0x2f, 0xfc, 0xf9, 0x99, 0x63, 0xdf, 0x23,
+ 0xf5, 0x2e, 0x5e, 0x2c, 0x62, 0x2a, 0x4f, 0xfc, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x2f,
+ 0x5e, 0xe5, 0x7d, 0x2d, 0x02, 0x00,
}
func (m *Rpc) Marshal() (dAtA []byte, err error) {
@@ -76519,6 +78635,11 @@ func (m *RpcSpaceInviteGenerateRequest) MarshalToSizedBuffer(dAtA []byte) (int,
_ = i
var l int
_ = l
+ if m.InviteType != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.InviteType))
+ i--
+ dAtA[i] = 0x10
+ }
if len(m.SpaceId) > 0 {
i -= len(m.SpaceId)
copy(dAtA[i:], m.SpaceId)
@@ -76873,6 +78994,143 @@ func (m *RpcSpaceInviteGetCurrentResponseError) MarshalToSizedBuffer(dAtA []byte
return len(dAtA) - i, nil
}
+func (m *RpcSpaceInviteGetGuest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcSpaceInviteGetGuest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcSpaceInviteGetGuest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcSpaceInviteGetGuestRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcSpaceInviteGetGuestRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcSpaceInviteGetGuestRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.SpaceId) > 0 {
+ i -= len(m.SpaceId)
+ copy(dAtA[i:], m.SpaceId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.SpaceId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcSpaceInviteGetGuestResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcSpaceInviteGetGuestResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcSpaceInviteGetGuestResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.InviteFileKey) > 0 {
+ i -= len(m.InviteFileKey)
+ copy(dAtA[i:], m.InviteFileKey)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.InviteFileKey)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.InviteCid) > 0 {
+ i -= len(m.InviteCid)
+ copy(dAtA[i:], m.InviteCid)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.InviteCid)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcSpaceInviteGetGuestResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcSpaceInviteGetGuestResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcSpaceInviteGetGuestResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *RpcSpaceInviteRevoke) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -77076,6 +79334,16 @@ func (m *RpcSpaceInviteViewResponse) MarshalToSizedBuffer(dAtA []byte) (int, err
_ = i
var l int
_ = l
+ if m.IsGuestUserInvite {
+ i--
+ if m.IsGuestUserInvite {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x30
+ }
if len(m.CreatorName) > 0 {
i -= len(m.CreatorName)
copy(dAtA[i:], m.CreatorName)
@@ -79219,6 +81487,13 @@ func (m *RpcAccountCreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)
_ = i
var l int
_ = l
+ if len(m.JoinStreamUrl) > 0 {
+ i -= len(m.JoinStreamUrl)
+ copy(dAtA[i:], m.JoinStreamUrl)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.JoinStreamUrl)))
+ i--
+ dAtA[i] = 0x52
+ }
if len(m.JsonApiListenAddr) > 0 {
i -= len(m.JsonApiListenAddr)
copy(dAtA[i:], m.JsonApiListenAddr)
@@ -79891,6 +82166,11 @@ func (m *RpcAccountMigrateResponseError) MarshalToSizedBuffer(dAtA []byte) (int,
_ = i
var l int
_ = l
+ if m.RequiredSpace != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.RequiredSpace))
+ i--
+ dAtA[i] = 0x18
+ }
if len(m.Description) > 0 {
i -= len(m.Description)
copy(dAtA[i:], m.Description)
@@ -80072,6 +82352,13 @@ func (m *RpcAccountSelectRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)
_ = i
var l int
_ = l
+ if len(m.JoinStreamURL) > 0 {
+ i -= len(m.JoinStreamURL)
+ copy(dAtA[i:], m.JoinStreamURL)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.JoinStreamURL)))
+ i--
+ dAtA[i] = 0x4a
+ }
if len(m.FulltextPrimaryLanguage) > 0 {
i -= len(m.FulltextPrimaryLanguage)
copy(dAtA[i:], m.FulltextPrimaryLanguage)
@@ -99010,6 +101297,725 @@ func (m *RpcUnsplashDownloadResponseError) MarshalToSizedBuffer(dAtA []byte) (in
return len(dAtA) - i, nil
}
+func (m *RpcAI) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAI) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAI) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIWritingTools) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIWritingTools) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIWritingTools) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIWritingToolsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIWritingToolsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIWritingToolsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Text) > 0 {
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if m.Language != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Language))
+ i--
+ dAtA[i] = 0x18
+ }
+ if m.Mode != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Mode))
+ i--
+ dAtA[i] = 0x10
+ }
+ if m.Config != nil {
+ {
+ size, err := m.Config.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIWritingToolsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIWritingToolsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIWritingToolsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Text) > 0 {
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIWritingToolsResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIWritingToolsResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIWritingToolsResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIAutofill) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIAutofill) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIAutofill) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIAutofillRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIAutofillRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIAutofillRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Context) > 0 {
+ for iNdEx := len(m.Context) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.Context[iNdEx])
+ copy(dAtA[i:], m.Context[iNdEx])
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Context[iNdEx])))
+ i--
+ dAtA[i] = 0x22
+ }
+ }
+ if len(m.Options) > 0 {
+ for iNdEx := len(m.Options) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.Options[iNdEx])
+ copy(dAtA[i:], m.Options[iNdEx])
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Options[iNdEx])))
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if m.Mode != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Mode))
+ i--
+ dAtA[i] = 0x10
+ }
+ if m.Config != nil {
+ {
+ size, err := m.Config.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIAutofillResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIAutofillResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIAutofillResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Text) > 0 {
+ i -= len(m.Text)
+ copy(dAtA[i:], m.Text)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Text)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIAutofillResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIAutofillResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIAutofillResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIListSummary) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIListSummary) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIListSummary) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIListSummaryRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIListSummaryRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIListSummaryRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Prompt) > 0 {
+ i -= len(m.Prompt)
+ copy(dAtA[i:], m.Prompt)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Prompt)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.ObjectIds) > 0 {
+ for iNdEx := len(m.ObjectIds) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.ObjectIds[iNdEx])
+ copy(dAtA[i:], m.ObjectIds[iNdEx])
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.ObjectIds[iNdEx])))
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.SpaceId) > 0 {
+ i -= len(m.SpaceId)
+ copy(dAtA[i:], m.SpaceId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.SpaceId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Config != nil {
+ {
+ size, err := m.Config.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIListSummaryResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIListSummaryResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIListSummaryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ObjectId) > 0 {
+ i -= len(m.ObjectId)
+ copy(dAtA[i:], m.ObjectId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.ObjectId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIListSummaryResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIListSummaryResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIListSummaryResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIObjectCreateFromUrl) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIObjectCreateFromUrl) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIObjectCreateFromUrl) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Details != nil {
+ {
+ size, err := m.Details.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Url) > 0 {
+ i -= len(m.Url)
+ copy(dAtA[i:], m.Url)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Url)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.SpaceId) > 0 {
+ i -= len(m.SpaceId)
+ copy(dAtA[i:], m.SpaceId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.SpaceId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Config != nil {
+ {
+ size, err := m.Config.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIObjectCreateFromUrlResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIObjectCreateFromUrlResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIObjectCreateFromUrlResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Details != nil {
+ {
+ size, err := m.Details.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.ObjectId) > 0 {
+ i -= len(m.ObjectId)
+ copy(dAtA[i:], m.ObjectId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.ObjectId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIObjectCreateFromUrlResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIObjectCreateFromUrlResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIObjectCreateFromUrlResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcAIProviderConfig) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcAIProviderConfig) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcAIProviderConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Temperature != 0 {
+ i -= 4
+ encoding_binary.LittleEndian.PutUint32(dAtA[i:], uint32(math.Float32bits(float32(m.Temperature))))
+ i--
+ dAtA[i] = 0x2d
+ }
+ if len(m.Token) > 0 {
+ i -= len(m.Token)
+ copy(dAtA[i:], m.Token)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Token)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.Model) > 0 {
+ i -= len(m.Model)
+ copy(dAtA[i:], m.Model)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Model)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Endpoint) > 0 {
+ i -= len(m.Endpoint)
+ copy(dAtA[i:], m.Endpoint)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Endpoint)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Provider != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Provider))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *RpcGallery) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -111169,6 +114175,157 @@ func (m *RpcBlockDataviewRelation) MarshalToSizedBuffer(dAtA []byte) (int, error
return len(dAtA) - i, nil
}
+func (m *RpcBlockDataviewRelationSet) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcBlockDataviewRelationSet) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcBlockDataviewRelationSet) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcBlockDataviewRelationSetRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcBlockDataviewRelationSetRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcBlockDataviewRelationSetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.RelationKeys) > 0 {
+ for iNdEx := len(m.RelationKeys) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.RelationKeys[iNdEx])
+ copy(dAtA[i:], m.RelationKeys[iNdEx])
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.RelationKeys[iNdEx])))
+ i--
+ dAtA[i] = 0x1a
+ }
+ }
+ if len(m.BlockId) > 0 {
+ i -= len(m.BlockId)
+ copy(dAtA[i:], m.BlockId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.BlockId)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ContextId) > 0 {
+ i -= len(m.ContextId)
+ copy(dAtA[i:], m.ContextId)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.ContextId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcBlockDataviewRelationSetResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcBlockDataviewRelationSetResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcBlockDataviewRelationSetResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Event != nil {
+ {
+ size, err := m.Event.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcBlockDataviewRelationSetResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcBlockDataviewRelationSetResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcBlockDataviewRelationSetResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *RpcBlockDataviewRelationAdd) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -122114,6 +125271,122 @@ func (m *RpcChatSubscribeToMessagePreviewsResponseError) MarshalToSizedBuffer(dA
return len(dAtA) - i, nil
}
+func (m *RpcChatUnsubscribeFromMessagePreviews) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviews) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviews) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Error != nil {
+ {
+ size, err := m.Error.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintCommands(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Description) > 0 {
+ i -= len(m.Description)
+ copy(dAtA[i:], m.Description)
+ i = encodeVarintCommands(dAtA, i, uint64(len(m.Description)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Code != 0 {
+ i = encodeVarintCommands(dAtA, i, uint64(m.Code))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *RpcChatReadMessages) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -122785,6 +126058,9 @@ func (m *RpcSpaceInviteGenerateRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
+ if m.InviteType != 0 {
+ n += 1 + sovCommands(uint64(m.InviteType))
+ }
return n
}
@@ -122935,6 +126211,65 @@ func (m *RpcSpaceInviteGetCurrentResponseError) Size() (n int) {
return n
}
+func (m *RpcSpaceInviteGetGuest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcSpaceInviteGetGuestRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.SpaceId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcSpaceInviteGetGuestResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.InviteCid)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.InviteFileKey)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcSpaceInviteGetGuestResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
func (m *RpcSpaceInviteRevoke) Size() (n int) {
if m == nil {
return 0
@@ -123038,6 +126373,9 @@ func (m *RpcSpaceInviteViewResponse) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
+ if m.IsGuestUserInvite {
+ n += 2
+ }
return n
}
@@ -123963,6 +127301,10 @@ func (m *RpcAccountCreateRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
+ l = len(m.JoinStreamUrl)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
return n
}
@@ -124218,6 +127560,9 @@ func (m *RpcAccountMigrateResponseError) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
+ if m.RequiredSpace != 0 {
+ n += 1 + sovCommands(uint64(m.RequiredSpace))
+ }
return n
}
@@ -124316,6 +127661,10 @@ func (m *RpcAccountSelectRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
+ l = len(m.JoinStreamURL)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
return n
}
@@ -132327,6 +135676,317 @@ func (m *RpcUnsplashDownloadResponseError) Size() (n int) {
return n
}
+func (m *RpcAI) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcAIWritingTools) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcAIWritingToolsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Config != nil {
+ l = m.Config.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Mode != 0 {
+ n += 1 + sovCommands(uint64(m.Mode))
+ }
+ if m.Language != 0 {
+ n += 1 + sovCommands(uint64(m.Language))
+ }
+ l = len(m.Text)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIWritingToolsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.Text)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIWritingToolsResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIAutofill) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcAIAutofillRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Config != nil {
+ l = m.Config.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Mode != 0 {
+ n += 1 + sovCommands(uint64(m.Mode))
+ }
+ if len(m.Options) > 0 {
+ for _, s := range m.Options {
+ l = len(s)
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ }
+ if len(m.Context) > 0 {
+ for _, s := range m.Context {
+ l = len(s)
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *RpcAIAutofillResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.Text)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIAutofillResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIListSummary) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcAIListSummaryRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Config != nil {
+ l = m.Config.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.SpaceId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if len(m.ObjectIds) > 0 {
+ for _, s := range m.ObjectIds {
+ l = len(s)
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ }
+ l = len(m.Prompt)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIListSummaryResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.ObjectId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIListSummaryResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIObjectCreateFromUrl) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcAIObjectCreateFromUrlRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Config != nil {
+ l = m.Config.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.SpaceId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.Url)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Details != nil {
+ l = m.Details.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIObjectCreateFromUrlResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.ObjectId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Details != nil {
+ l = m.Details.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIObjectCreateFromUrlResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcAIProviderConfig) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Provider != 0 {
+ n += 1 + sovCommands(uint64(m.Provider))
+ }
+ l = len(m.Endpoint)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.Model)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.Token)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Temperature != 0 {
+ n += 5
+ }
+ return n
+}
+
func (m *RpcGallery) Size() (n int) {
if m == nil {
return 0
@@ -137528,6 +141188,71 @@ func (m *RpcBlockDataviewRelation) Size() (n int) {
return n
}
+func (m *RpcBlockDataviewRelationSet) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcBlockDataviewRelationSetRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ContextId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ l = len(m.BlockId)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if len(m.RelationKeys) > 0 {
+ for _, s := range m.RelationKeys {
+ l = len(s)
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *RpcBlockDataviewRelationSetResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ if m.Event != nil {
+ l = m.Event.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcBlockDataviewRelationSetResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
func (m *RpcBlockDataviewRelationAdd) Size() (n int) {
if m == nil {
return 0
@@ -142137,6 +145862,53 @@ func (m *RpcChatSubscribeToMessagePreviewsResponseError) Size() (n int) {
return n
}
+func (m *RpcChatUnsubscribeFromMessagePreviews) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Error != nil {
+ l = m.Error.Size()
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Code != 0 {
+ n += 1 + sovCommands(uint64(m.Code))
+ }
+ l = len(m.Description)
+ if l > 0 {
+ n += 1 + l + sovCommands(uint64(l))
+ }
+ return n
+}
+
func (m *RpcChatReadMessages) Size() (n int) {
if m == nil {
return 0
@@ -144168,6 +147940,25 @@ func (m *RpcSpaceInviteGenerateRequest) Unmarshal(dAtA []byte) error {
}
m.SpaceId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field InviteType", wireType)
+ }
+ m.InviteType = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.InviteType |= RpcSpaceInviteGenerateRequestInviteType(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
@@ -145142,6 +148933,389 @@ func (m *RpcSpaceInviteGetCurrentResponseError) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *RpcSpaceInviteGetGuest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: InviteGetGuest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: InviteGetGuest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcSpaceInviteGetGuestRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.SpaceId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcSpaceInviteGetGuestResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcSpaceInviteGetGuestResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field InviteCid", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.InviteCid = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field InviteFileKey", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.InviteFileKey = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcSpaceInviteGetGuestResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcSpaceInviteGetGuestResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *RpcSpaceInviteRevoke) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -145818,6 +149992,26 @@ func (m *RpcSpaceInviteViewResponse) Unmarshal(dAtA []byte) error {
}
m.CreatorName = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field IsGuestUserInvite", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.IsGuestUserInvite = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
@@ -151637,6 +155831,38 @@ func (m *RpcAccountCreateRequest) Unmarshal(dAtA []byte) error {
}
m.JsonApiListenAddr = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 10:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field JoinStreamUrl", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.JoinStreamUrl = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
@@ -153212,6 +157438,25 @@ func (m *RpcAccountMigrateResponseError) Unmarshal(dAtA []byte) error {
}
m.Description = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RequiredSpace", wireType)
+ }
+ m.RequiredSpace = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.RequiredSpace |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
@@ -153850,6 +158095,38 @@ func (m *RpcAccountSelectRequest) Unmarshal(dAtA []byte) error {
}
m.FulltextPrimaryLanguage = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 9:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field JoinStreamURL", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.JoinStreamURL = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
@@ -204665,6 +208942,2037 @@ func (m *RpcUnsplashDownloadResponseError) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *RpcAI) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: AI: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: AI: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIWritingTools) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: WritingTools: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: WritingTools: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIWritingToolsRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Config == nil {
+ m.Config = &RpcAIProviderConfig{}
+ }
+ if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType)
+ }
+ m.Mode = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Mode |= RpcAIWritingToolsRequestWritingMode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 3:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Language", wireType)
+ }
+ m.Language = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Language |= RpcAIWritingToolsRequestLanguage(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Text = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIWritingToolsResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcAIWritingToolsResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Text = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIWritingToolsResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcAIWritingToolsResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIAutofill) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Autofill: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Autofill: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIAutofillRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Config == nil {
+ m.Config = &RpcAIProviderConfig{}
+ }
+ if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType)
+ }
+ m.Mode = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Mode |= RpcAIAutofillRequestAutofillMode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Options = append(m.Options, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Context", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Context = append(m.Context, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIAutofillResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcAIAutofillResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Text = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIAutofillResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcAIAutofillResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIListSummary) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ListSummary: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ListSummary: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIListSummaryRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Config == nil {
+ m.Config = &RpcAIProviderConfig{}
+ }
+ if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.SpaceId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ObjectIds", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ObjectIds = append(m.ObjectIds, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Prompt", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Prompt = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIListSummaryResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcAIListSummaryResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ObjectId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIListSummaryResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcAIListSummaryResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIObjectCreateFromUrl) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ObjectCreateFromUrl: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ObjectCreateFromUrl: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIObjectCreateFromUrlRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Config == nil {
+ m.Config = &RpcAIProviderConfig{}
+ }
+ if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.SpaceId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Url", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Url = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Details == nil {
+ m.Details = &types.Struct{}
+ }
+ if err := m.Details.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIObjectCreateFromUrlResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcAIObjectCreateFromUrlResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ObjectId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Details == nil {
+ m.Details = &types.Struct{}
+ }
+ if err := m.Details.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIObjectCreateFromUrlResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcAIObjectCreateFromUrlResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcAIProviderConfig) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: ProviderConfig: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ProviderConfig: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType)
+ }
+ m.Provider = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Provider |= RpcAIProvider(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Endpoint = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Model", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Model = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Token = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 5 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Temperature", wireType)
+ }
+ var v uint32
+ if (iNdEx + 4) > l {
+ return io.ErrUnexpectedEOF
+ }
+ v = uint32(encoding_binary.LittleEndian.Uint32(dAtA[iNdEx:]))
+ iNdEx += 4
+ m.Temperature = float32(math.Float32frombits(v))
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *RpcGallery) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -238268,6 +244576,425 @@ func (m *RpcBlockDataviewRelation) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *RpcBlockDataviewRelationSet) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Set: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Set: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcBlockDataviewRelationSetRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ContextId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ContextId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field BlockId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.BlockId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RelationKeys", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.RelationKeys = append(m.RelationKeys, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcBlockDataviewRelationSetResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcBlockDataviewRelationSetResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Event", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Event == nil {
+ m.Event = &ResponseEvent{}
+ }
+ if err := m.Event.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcBlockDataviewRelationSetResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcBlockDataviewRelationSetResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *RpcBlockDataviewRelationAdd) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -267811,6 +274538,293 @@ func (m *RpcChatSubscribeToMessagePreviewsResponseError) Unmarshal(dAtA []byte)
}
return nil
}
+func (m *RpcChatUnsubscribeFromMessagePreviews) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: UnsubscribeFromMessagePreviews: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: UnsubscribeFromMessagePreviews: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Request: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Response: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Response: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Error == nil {
+ m.Error = &RpcChatUnsubscribeFromMessagePreviewsResponseError{}
+ }
+ if err := m.Error.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *RpcChatUnsubscribeFromMessagePreviewsResponseError) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Error: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Error: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
+ }
+ m.Code = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Code |= RpcChatUnsubscribeFromMessagePreviewsResponseErrorCode(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowCommands
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthCommands
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Description = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipCommands(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthCommands
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *RpcChatReadMessages) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
From a7c4acb9350ccada9f47f9b468009d0d7392ce03 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 28 Mar 2025 12:19:05 +0100
Subject: [PATCH 105/132] Bump golang.org/x/net from 0.37.0 to 0.38.0 (#2273)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
go.mod | 4 +++-
go.sum | 4 ++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/go.mod b/go.mod
index 0b74d6d00..1c5cc2ed2 100644
--- a/go.mod
+++ b/go.mod
@@ -2,6 +2,8 @@ module github.com/anyproto/anytype-heart
go 1.23.2
+toolchain go1.24.1
+
require (
github.com/JohannesKaufmann/html-to-markdown v1.4.0
github.com/PuerkitoBio/goquery v1.10.2
@@ -108,7 +110,7 @@ require (
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394
golang.org/x/image v0.25.0
golang.org/x/mobile v0.0.0-20250218173827-cd096645fcd3
- golang.org/x/net v0.37.0
+ golang.org/x/net v0.38.0
golang.org/x/oauth2 v0.28.0
golang.org/x/sys v0.31.0
golang.org/x/text v0.23.0
diff --git a/go.sum b/go.sum
index d17f90317..cc79e314e 100644
--- a/go.sum
+++ b/go.sum
@@ -1303,8 +1303,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
-golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
+golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
+golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
From 40e775cf77668844afdc026867d499dd41fea8c6 Mon Sep 17 00:00:00 2001
From: AnastasiaShemyakinskaya
Date: Fri, 28 Mar 2025 15:02:32 +0100
Subject: [PATCH 106/132] GO-5320: remove fileKeys
Signed-off-by: AnastasiaShemyakinskaya
---
core/block/import/common/collection.go | 12 +-----------
core/block/import/pb/gallery.go | 17 ++---------------
2 files changed, 3 insertions(+), 26 deletions(-)
diff --git a/core/block/import/common/collection.go b/core/block/import/common/collection.go
index badf05f5b..c4bd53a49 100644
--- a/core/block/import/common/collection.go
+++ b/core/block/import/common/collection.go
@@ -13,7 +13,6 @@ import (
"github.com/anyproto/anytype-heart/core/block/simple"
simpleDataview "github.com/anyproto/anytype-heart/core/block/simple/dataview"
"github.com/anyproto/anytype-heart/core/domain"
- "github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
sb "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
@@ -25,7 +24,6 @@ type ImportCollectionSetting struct {
collectionName string
targetObjects []string
icon string
- fileKeys []*pb.ChangeFileKeys
needToAddDate, shouldBeFavorite, shouldAddRelations bool
widgetSnapshot *Snapshot
}
@@ -58,12 +56,6 @@ func WithIcon(icon string) ImportCollectionOption {
}
}
-func WithFileKeys(keys []*pb.ChangeFileKeys) ImportCollectionOption {
- return func(s *ImportCollectionSetting) {
- s.fileKeys = keys
- }
-}
-
func WithAddDate() ImportCollectionOption {
return func(s *ImportCollectionSetting) {
s.needToAddDate = true
@@ -119,7 +111,7 @@ func (r *ImportCollection) MakeImportCollection(req *ImportCollectionSetting) (*
detailsStruct = st.CombinedDetails().Merge(detailsStruct)
st.UpdateStoreSlice(template.CollectionStoreKey, req.targetObjects)
- rootCollectionSnapshot := r.getRootCollectionSnapshot(req.collectionName, st, detailsStruct, req.fileKeys)
+ rootCollectionSnapshot := r.getRootCollectionSnapshot(req.collectionName, st, detailsStruct)
widgetSnapshot := r.makeWidgetSnapshot(req, rootCollectionSnapshot)
return rootCollectionSnapshot, widgetSnapshot, nil
}
@@ -206,7 +198,6 @@ func (r *ImportCollection) getRootCollectionSnapshot(
collectionName string,
st *state.State,
detailsStruct *domain.Details,
- fileKeys []*pb.ChangeFileKeys,
) *Snapshot {
if detailsStruct == nil {
detailsStruct = domain.NewDetails()
@@ -224,7 +215,6 @@ func (r *ImportCollection) getRootCollectionSnapshot(
RelationLinks: st.GetRelationLinks(),
Collections: st.Store(),
},
- FileKeys: fileKeys,
},
}
}
diff --git a/core/block/import/pb/gallery.go b/core/block/import/pb/gallery.go
index 8faf42561..17f4a5e72 100644
--- a/core/block/import/pb/gallery.go
+++ b/core/block/import/pb/gallery.go
@@ -1,8 +1,6 @@
package pb
import (
- "github.com/samber/lo"
-
"github.com/anyproto/anytype-heart/core/block/collection"
"github.com/anyproto/anytype-heart/core/block/editor/state"
widgets "github.com/anyproto/anytype-heart/core/block/editor/widget"
@@ -40,12 +38,10 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
}
var (
icon string
- fileKeys []*pb.ChangeFileKeys
widgetSnapshot *common.Snapshot
)
if workspaceSnapshot != nil { // we use space icon for import collection
icon = workspaceSnapshot.Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage)
- fileKeys = lo.Filter(workspaceSnapshot.Snapshot.FileKeys, func(item *pb.ChangeFileKeys, index int) bool { return item.Hash == icon })
}
collectionName := params.GetCollectionTitle() // collection name should be the name of experience
if collectionName == "" {
@@ -53,7 +49,7 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
}
rootCollection := common.NewImportCollection(g.service)
if len(widgetObjects) > 0 {
- resultSnapshots, widgetSnapshot, err = g.getWidgetsCollection(collectionName, rootCollection, widgetObjects, icon, fileKeys, resultSnapshots)
+ resultSnapshots, widgetSnapshot, err = g.getWidgetsCollection(collectionName, rootCollection, widgetObjects, icon, resultSnapshots)
if err != nil {
return nil, err
}
@@ -64,7 +60,6 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
common.WithTargetObjects(objectsIDs),
common.WithIcon(icon),
common.WithRelations(),
- common.WithFileKeys(fileKeys),
common.WithWidgetSnapshot(widgetSnapshot),
)
objectsCollection, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
@@ -75,21 +70,13 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
return resultSnapshots, nil
}
-func (g *GalleryImport) getWidgetsCollection(
- collectionName string,
- rootCollection *common.ImportCollection,
- widgetObjects []string,
- icon string,
- fileKeys []*pb.ChangeFileKeys,
- collectionsSnapshots []*common.Snapshot,
-) ([]*common.Snapshot, *common.Snapshot, error) {
+func (g *GalleryImport) getWidgetsCollection(collectionName string, rootCollection *common.ImportCollection, widgetObjects []string, icon string, collectionsSnapshots []*common.Snapshot) ([]*common.Snapshot, *common.Snapshot, error) {
widgetCollectionName := collectionName + widgetCollectionPattern
settings := common.NewImportCollectionSetting(
common.WithCollectionName(widgetCollectionName),
common.WithTargetObjects(widgetObjects),
common.WithIcon(icon),
common.WithRelations(),
- common.WithFileKeys(fileKeys),
)
widgetsCollectionSnapshot, widget, err := rootCollection.MakeImportCollection(settings)
if err != nil {
From 9c05f3febd6fb7173f55e3216920f093f09cc732 Mon Sep 17 00:00:00 2001
From: Jannis Metrikat <120120832+jmetrikat@users.noreply.github.com>
Date: Fri, 28 Mar 2025 17:15:19 +0100
Subject: [PATCH 107/132] GO-4459: Update API version and license in swagger
---
core/api/docs/docs.go | 4 ++--
core/api/docs/swagger.json | 2 +-
core/api/docs/swagger.yaml | 4 ++--
core/api/service.go | 4 ++--
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 9df39a837..8b13e380e 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -7,7 +7,7 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
- "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
+ "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
@@ -18,7 +18,7 @@ const docTemplate = `{
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
- Version: "1.0",
+ Version: "2025-03-17",
Title: "Anytype API",
Description: "This API allows interaction with Anytype resources such as spaces, objects and types.",
InfoInstanceName: "swagger",
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index 1e920c083..e25d58240 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,6 +1,6 @@
{
"components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
- "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"1.0"},
+ "info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-03-17"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
"paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index 49af7b2fa..cf5d69d2d 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -819,10 +819,10 @@ info:
objects and types.
license:
name: Any Source Available License 1.0
- url: https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
+ url: https://github.com/anyproto/anytype-api/blob/main/LICENSE.md
termsOfService: https://anytype.io/terms_of_use
title: Anytype API
- version: "1.0"
+ version: "2025-03-17"
openapi: 3.1.0
paths:
/auth/display_code:
diff --git a/core/api/service.go b/core/api/service.go
index 893580cb8..1a5fbe090 100644
--- a/core/api/service.go
+++ b/core/api/service.go
@@ -52,14 +52,14 @@ func (s *apiService) Name() (name string) {
// Init initializes the API service.
//
// @title Anytype API
-// @version 1.0
+// @version 2025-03-17
// @description This API allows interaction with Anytype resources such as spaces, objects and types.
// @termsOfService https://anytype.io/terms_of_use
// @contact.name Anytype Support
// @contact.url https://anytype.io/contact
// @contact.email support@anytype.io
// @license.name Any Source Available License 1.0
-// @license.url https://github.com/anyproto/anytype-ts/blob/main/LICENSE.md
+// @license.url https://github.com/anyproto/anytype-api/blob/main/LICENSE.md
// @host http://localhost:31009
// @BasePath /v1
// @securitydefinitions.bearerauth BearerAuth
From 0e8cd67a202d4a4c3a6861829e3b1a4e63e427c5 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Fri, 28 Mar 2025 17:36:22 +0100
Subject: [PATCH 108/132] GO-5303 Event added: spaceAutoWidgetAdded
---
core/block/detailservice/set_details.go | 2 +-
core/block/editor/archive.go | 2 +-
core/block/editor/smartblock/detailsinject.go | 5 +
core/block/editor/widget/widget.go | 34 +-
core/block/widget.go | 14 +-
docs/proto.md | 39 +-
pb/events.pb.go | 1173 ++++++++-----
pb/protos/events.proto | 7 +
pkg/lib/pb/model/models.pb.go | 1561 +++++++----------
pkg/lib/pb/model/protos/models.proto | 8 +-
util/builtinobjects/builtinobjects.go | 2 +-
11 files changed, 1462 insertions(+), 1385 deletions(-)
diff --git a/core/block/detailservice/set_details.go b/core/block/detailservice/set_details.go
index 0b8f0b326..d1b38a66f 100644
--- a/core/block/detailservice/set_details.go
+++ b/core/block/detailservice/set_details.go
@@ -273,6 +273,6 @@ func (s *service) createFavoriteWidget(spc clientspace.Space) error {
}
return cache.DoState(s.objectGetter, widgetObjectId, func(st *state.State, w widget.Widget) (err error) {
- return w.AddAutoWidget(st, widget.DefaultWidgetFavorite, widget.DefaultWidgetFavorite, "", model.BlockContentWidget_CompactList)
+ return w.AddAutoWidget(st, widget.DefaultWidgetFavorite, widget.DefaultWidgetFavorite, "", model.BlockContentWidget_CompactList, "Favorites")
})
}
diff --git a/core/block/editor/archive.go b/core/block/editor/archive.go
index 42b65c018..2806d8b20 100644
--- a/core/block/editor/archive.go
+++ b/core/block/editor/archive.go
@@ -100,7 +100,7 @@ func (p *Archive) autoInstallBinWidget() error {
st := sb.NewState()
if w, ok := sb.(widget.Widget); ok {
// We rely on AddAutoWidget to check if the widget was already installed/removed before
- err = w.AddAutoWidget(st, widget.DefaultWidgetBin, widget.DefaultWidgetBin, "", model.BlockContentWidget_Link)
+ err = w.AddAutoWidget(st, widget.DefaultWidgetBin, widget.DefaultWidgetBin, "", model.BlockContentWidget_Link, "Bin")
if err != nil {
return err
}
diff --git a/core/block/editor/smartblock/detailsinject.go b/core/block/editor/smartblock/detailsinject.go
index 7afc67721..cde641403 100644
--- a/core/block/editor/smartblock/detailsinject.go
+++ b/core/block/editor/smartblock/detailsinject.go
@@ -385,6 +385,11 @@ func (sb *smartBlock) changeResolvedLayoutForObjects(msgs []simple.EventMessage,
return nil
}
+func (sb *smartBlock) getTypeDetails() (*domain.Details, error) {
+ typeId := sb.LocalDetails().GetString(bundle.RelationKeyType)
+ return sb.spaceIndex.GetDetails(typeId)
+}
+
func getLayoutFromMessages(msgs []simple.EventMessage) (layout int64, found bool) {
for _, ev := range msgs {
if amend := ev.Msg.GetObjectDetailsAmend(); amend != nil {
diff --git a/core/block/editor/widget/widget.go b/core/block/editor/widget/widget.go
index c3e3b1451..252320577 100644
--- a/core/block/editor/widget/widget.go
+++ b/core/block/editor/widget/widget.go
@@ -8,6 +8,7 @@ import (
"github.com/anyproto/anytype-heart/core/block/editor/state"
"github.com/anyproto/anytype-heart/core/block/simple"
"github.com/anyproto/anytype-heart/core/domain"
+ "github.com/anyproto/anytype-heart/core/event"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
@@ -27,7 +28,8 @@ type Widget interface {
CreateBlock(s *state.State, req *pb.RpcBlockCreateWidgetRequest) (string, error)
// AddAutoWidget adds a widget block. If widget with the same targetId was installed/removed before, it will not be added again.
// blockId is optional and used to protect from multi-device conflicts.
- AddAutoWidget(s *state.State, targetId, blockId, viewId string, layout model.BlockContentWidgetLayout) error
+ // if eventName is empty no event is produced
+ AddAutoWidget(s *state.State, targetId, blockId, viewId string, layout model.BlockContentWidgetLayout, eventName string) error
}
type widget struct {
@@ -71,7 +73,7 @@ func NewWidget(sb smartblock.SmartBlock) Widget {
}
}
-func (w *widget) AddAutoWidget(st *state.State, targetId, widgetBlockId, viewId string, layout model.BlockContentWidgetLayout) error {
+func (w *widget) AddAutoWidget(st *state.State, targetId, widgetBlockId, viewId string, layout model.BlockContentWidgetLayout, eventName string) error {
targets := st.Details().Get(bundle.RelationKeyAutoWidgetTargets).StringList()
if slices.Contains(targets, targetId) {
return nil
@@ -125,7 +127,7 @@ func (w *widget) AddAutoWidget(st *state.State, targetId, widgetBlockId, viewId
position = model.Block_Bottom
}
- _, err = w.CreateBlock(st, &pb.RpcBlockCreateWidgetRequest{
+ _, err = w.createBlock(st, &pb.RpcBlockCreateWidgetRequest{
ContextId: st.RootId(),
ObjectLimit: 6,
WidgetLayout: layout,
@@ -138,11 +140,28 @@ func (w *widget) AddAutoWidget(st *state.State, targetId, widgetBlockId, viewId
TargetBlockId: targetId,
}},
},
+ }, true)
+ if err != nil {
+ return err
+ }
+
+ msg := event.NewMessage(w.SpaceID(), &pb.EventMessageValueOfSpaceAutoWidgetAdded{
+ SpaceAutoWidgetAdded: &pb.EventSpaceAutoWidgetAdded{
+ TargetId: targetId,
+ TargetName: eventName,
+ WidgetBlockId: widgetBlockId,
+ },
})
- return err
+ w.SendEvent([]*pb.EventMessage{msg})
+
+ return nil
}
func (w *widget) CreateBlock(s *state.State, req *pb.RpcBlockCreateWidgetRequest) (string, error) {
+ return w.createBlock(s, req, false)
+}
+
+func (w *widget) createBlock(s *state.State, req *pb.RpcBlockCreateWidgetRequest, isAutoAdded bool) (string, error) {
if req.Block.Content == nil {
return "", fmt.Errorf("block has no content")
}
@@ -169,9 +188,10 @@ func (w *widget) CreateBlock(s *state.State, req *pb.RpcBlockCreateWidgetRequest
},
Content: &model.BlockContentOfWidget{
Widget: &model.BlockContentWidget{
- Layout: req.WidgetLayout,
- Limit: req.ObjectLimit,
- ViewId: req.ViewId,
+ Layout: req.WidgetLayout,
+ Limit: req.ObjectLimit,
+ ViewId: req.ViewId,
+ AutoAdded: isAutoAdded,
},
},
})
diff --git a/core/block/widget.go b/core/block/widget.go
index 00bded508..3f3e70b14 100644
--- a/core/block/widget.go
+++ b/core/block/widget.go
@@ -5,8 +5,6 @@ import (
"fmt"
"slices"
- "github.com/google/uuid"
-
"github.com/anyproto/anytype-heart/core/block/cache"
"github.com/anyproto/anytype-heart/core/block/editor/basic"
"github.com/anyproto/anytype-heart/core/block/editor/smartblock"
@@ -97,6 +95,7 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
return err
}
widgetObjectId := space.DerivedIDs().Widgets
+ spaceIndex := s.objectStore.SpaceIndex(space.Id())
widgetDetails, err := s.objectStore.SpaceIndex(space.Id()).GetDetails(widgetObjectId)
if err == nil {
keys := widgetDetails.Get(bundle.RelationKeyAutoWidgetTargets).StringList()
@@ -130,8 +129,17 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
// only create widget if this was the first object of this type created
return nil
}
+
+ var targetName string
+ typeDetails, err := spaceIndex.GetDetails(typeId)
+ if err == nil {
+ targetName = typeDetails.Get(bundle.RelationKeyPluralName).String()
+ if targetName == "" {
+ targetName = typeDetails.Get(bundle.RelationKeyName).String()
+ }
+ }
return cache.DoState(s, widgetObjectId, func(st *state.State, w widget.Widget) (err error) {
- return w.AddAutoWidget(st, typeId, key.String(), addr.ObjectTypeAllViewId, model.BlockContentWidget_View)
+ return w.AddAutoWidget(st, typeId, key.String(), addr.ObjectTypeAllViewId, model.BlockContentWidget_View, targetName)
})
return err
}
diff --git a/docs/proto.md b/docs/proto.md
index 73d9bdb1d..d985af57e 100644
--- a/docs/proto.md
+++ b/docs/proto.md
@@ -1850,6 +1850,7 @@
- [Event.Process.New](#anytype-Event-Process-New)
- [Event.Process.Update](#anytype-Event-Process-Update)
- [Event.Space](#anytype-Event-Space)
+ - [Event.Space.AutoWidgetAdded](#anytype-Event-Space-AutoWidgetAdded)
- [Event.Space.SyncStatus](#anytype-Event-Space-SyncStatus)
- [Event.Space.SyncStatus.Update](#anytype-Event-Space-SyncStatus-Update)
- [Event.Status](#anytype-Event-Status)
@@ -1966,7 +1967,6 @@
- [Metadata.Payload](#anytype-model-Metadata-Payload)
- [Metadata.Payload.IdentityPayload](#anytype-model-Metadata-Payload-IdentityPayload)
- [Notification](#anytype-model-Notification)
- - [Notification.AutoTypeWidgetAdded](#anytype-model-Notification-AutoTypeWidgetAdded)
- [Notification.Export](#anytype-model-Notification-Export)
- [Notification.GalleryImport](#anytype-model-Notification-GalleryImport)
- [Notification.Import](#anytype-model-Notification-Import)
@@ -28761,6 +28761,7 @@ Precondition: user A opened a block
| payloadBroadcast | [Event.Payload.Broadcast](#anytype-Event-Payload-Broadcast) | | |
| membershipUpdate | [Event.Membership.Update](#anytype-Event-Membership-Update) | | |
| spaceSyncStatusUpdate | [Event.Space.SyncStatus.Update](#anytype-Event-Space-SyncStatus-Update) | | |
+| spaceAutoWidgetAdded | [Event.Space.AutoWidgetAdded](#anytype-Event-Space-AutoWidgetAdded) | | |
| p2pStatusUpdate | [Event.P2PStatus.Update](#anytype-Event-P2PStatus-Update) | | |
| importFinish | [Event.Import.Finish](#anytype-Event-Import-Finish) | | |
| chatAdd | [Event.Chat.Add](#anytype-Event-Chat-Add) | | |
@@ -29227,6 +29228,23 @@ Removes document from subscription
+
+
+### Event.Space.AutoWidgetAdded
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| targetId | [string](#string) | | |
+| targetName | [string](#string) | | pluralName (if exists) for types, fallback to name. Special cases for "bin" and "favorites" |
+| widgetBlockId | [string](#string) | | |
+
+
+
+
+
+
### Event.Space.SyncStatus
@@ -30591,6 +30609,7 @@ Link: block to link some content from an external sources.
| layout | [Block.Content.Widget.Layout](#anytype-model-Block-Content-Widget-Layout) | | |
| limit | [int32](#int32) | | |
| viewId | [string](#string) | | |
+| autoAdded | [bool](#bool) | | |
@@ -31111,7 +31130,6 @@ Used to decode block meta only, without the content itself
| participantRemove | [Notification.ParticipantRemove](#anytype-model-Notification-ParticipantRemove) | | |
| participantRequestDecline | [Notification.ParticipantRequestDecline](#anytype-model-Notification-ParticipantRequestDecline) | | |
| participantPermissionsChange | [Notification.ParticipantPermissionsChange](#anytype-model-Notification-ParticipantPermissionsChange) | | |
-| autoTypeWidgetAdded | [Notification.AutoTypeWidgetAdded](#anytype-model-Notification-AutoTypeWidgetAdded) | | |
| space | [string](#string) | | |
| aclHeadId | [string](#string) | | |
@@ -31120,23 +31138,6 @@ Used to decode block meta only, without the content itself
-
-
-### Notification.AutoTypeWidgetAdded
-
-
-
-| Field | Type | Label | Description |
-| ----- | ---- | ----- | ----------- |
-| spaceId | [string](#string) | | |
-| typePluralName | [string](#string) | | fallback to singular if missing |
-| widgetBlockId | [string](#string) | | |
-
-
-
-
-
-
### Notification.Export
diff --git a/pb/events.pb.go b/pb/events.pb.go
index ab2072f03..f5d99e673 100644
--- a/pb/events.pb.go
+++ b/pb/events.pb.go
@@ -397,6 +397,7 @@ type EventMessage struct {
// *EventMessageValueOfPayloadBroadcast
// *EventMessageValueOfMembershipUpdate
// *EventMessageValueOfSpaceSyncStatusUpdate
+ // *EventMessageValueOfSpaceAutoWidgetAdded
// *EventMessageValueOfP2PStatusUpdate
// *EventMessageValueOfImportFinish
// *EventMessageValueOfChatAdd
@@ -654,6 +655,9 @@ type EventMessageValueOfMembershipUpdate struct {
type EventMessageValueOfSpaceSyncStatusUpdate struct {
SpaceSyncStatusUpdate *EventSpaceSyncStatusUpdate `protobuf:"bytes,119,opt,name=spaceSyncStatusUpdate,proto3,oneof" json:"spaceSyncStatusUpdate,omitempty"`
}
+type EventMessageValueOfSpaceAutoWidgetAdded struct {
+ SpaceAutoWidgetAdded *EventSpaceAutoWidgetAdded `protobuf:"bytes,122,opt,name=spaceAutoWidgetAdded,proto3,oneof" json:"spaceAutoWidgetAdded,omitempty"`
+}
type EventMessageValueOfP2PStatusUpdate struct {
P2PStatusUpdate *EventP2PStatusUpdate `protobuf:"bytes,120,opt,name=p2pStatusUpdate,proto3,oneof" json:"p2pStatusUpdate,omitempty"`
}
@@ -748,6 +752,7 @@ func (*EventMessageValueOfNotificationUpdate) IsEventMessageValue()
func (*EventMessageValueOfPayloadBroadcast) IsEventMessageValue() {}
func (*EventMessageValueOfMembershipUpdate) IsEventMessageValue() {}
func (*EventMessageValueOfSpaceSyncStatusUpdate) IsEventMessageValue() {}
+func (*EventMessageValueOfSpaceAutoWidgetAdded) IsEventMessageValue() {}
func (*EventMessageValueOfP2PStatusUpdate) IsEventMessageValue() {}
func (*EventMessageValueOfImportFinish) IsEventMessageValue() {}
func (*EventMessageValueOfChatAdd) IsEventMessageValue() {}
@@ -1254,6 +1259,13 @@ func (m *EventMessage) GetSpaceSyncStatusUpdate() *EventSpaceSyncStatusUpdate {
return nil
}
+func (m *EventMessage) GetSpaceAutoWidgetAdded() *EventSpaceAutoWidgetAdded {
+ if x, ok := m.GetValue().(*EventMessageValueOfSpaceAutoWidgetAdded); ok {
+ return x.SpaceAutoWidgetAdded
+ }
+ return nil
+}
+
func (m *EventMessage) GetP2PStatusUpdate() *EventP2PStatusUpdate {
if x, ok := m.GetValue().(*EventMessageValueOfP2PStatusUpdate); ok {
return x.P2PStatusUpdate
@@ -1382,6 +1394,7 @@ func (*EventMessage) XXX_OneofWrappers() []interface{} {
(*EventMessageValueOfPayloadBroadcast)(nil),
(*EventMessageValueOfMembershipUpdate)(nil),
(*EventMessageValueOfSpaceSyncStatusUpdate)(nil),
+ (*EventMessageValueOfSpaceAutoWidgetAdded)(nil),
(*EventMessageValueOfP2PStatusUpdate)(nil),
(*EventMessageValueOfImportFinish)(nil),
(*EventMessageValueOfChatAdd)(nil),
@@ -11613,6 +11626,66 @@ func (m *EventSpaceSyncStatusUpdate) GetSyncingObjectsCounter() int64 {
return 0
}
+type EventSpaceAutoWidgetAdded struct {
+ TargetId string `protobuf:"bytes,1,opt,name=targetId,proto3" json:"targetId,omitempty"`
+ TargetName string `protobuf:"bytes,2,opt,name=targetName,proto3" json:"targetName,omitempty"`
+ WidgetBlockId string `protobuf:"bytes,3,opt,name=widgetBlockId,proto3" json:"widgetBlockId,omitempty"`
+}
+
+func (m *EventSpaceAutoWidgetAdded) Reset() { *m = EventSpaceAutoWidgetAdded{} }
+func (m *EventSpaceAutoWidgetAdded) String() string { return proto.CompactTextString(m) }
+func (*EventSpaceAutoWidgetAdded) ProtoMessage() {}
+func (*EventSpaceAutoWidgetAdded) Descriptor() ([]byte, []int) {
+ return fileDescriptor_a966342d378ae5f5, []int{0, 13, 1}
+}
+func (m *EventSpaceAutoWidgetAdded) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *EventSpaceAutoWidgetAdded) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_EventSpaceAutoWidgetAdded.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *EventSpaceAutoWidgetAdded) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EventSpaceAutoWidgetAdded.Merge(m, src)
+}
+func (m *EventSpaceAutoWidgetAdded) XXX_Size() int {
+ return m.Size()
+}
+func (m *EventSpaceAutoWidgetAdded) XXX_DiscardUnknown() {
+ xxx_messageInfo_EventSpaceAutoWidgetAdded.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventSpaceAutoWidgetAdded proto.InternalMessageInfo
+
+func (m *EventSpaceAutoWidgetAdded) GetTargetId() string {
+ if m != nil {
+ return m.TargetId
+ }
+ return ""
+}
+
+func (m *EventSpaceAutoWidgetAdded) GetTargetName() string {
+ if m != nil {
+ return m.TargetName
+ }
+ return ""
+}
+
+func (m *EventSpaceAutoWidgetAdded) GetWidgetBlockId() string {
+ if m != nil {
+ return m.WidgetBlockId
+ }
+ return ""
+}
+
type EventP2PStatus struct {
}
@@ -12512,6 +12585,7 @@ func init() {
proto.RegisterType((*EventSpace)(nil), "anytype.Event.Space")
proto.RegisterType((*EventSpaceSyncStatus)(nil), "anytype.Event.Space.SyncStatus")
proto.RegisterType((*EventSpaceSyncStatusUpdate)(nil), "anytype.Event.Space.SyncStatus.Update")
+ proto.RegisterType((*EventSpaceAutoWidgetAdded)(nil), "anytype.Event.Space.AutoWidgetAdded")
proto.RegisterType((*EventP2PStatus)(nil), "anytype.Event.P2PStatus")
proto.RegisterType((*EventP2PStatusUpdate)(nil), "anytype.Event.P2PStatus.Update")
proto.RegisterType((*EventImport)(nil), "anytype.Event.Import")
@@ -12530,404 +12604,408 @@ func init() {
func init() { proto.RegisterFile("pb/protos/events.proto", fileDescriptor_a966342d378ae5f5) }
var fileDescriptor_a966342d378ae5f5 = []byte{
- // 6345 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x49, 0x8c, 0x1d, 0xc7,
- 0x79, 0xff, 0xdb, 0x97, 0x6f, 0x86, 0xc3, 0xc7, 0x22, 0x45, 0xb5, 0x5a, 0x14, 0x45, 0x0d, 0x17,
- 0xd1, 0x12, 0xf5, 0x28, 0x91, 0x14, 0x29, 0x53, 0xe2, 0x32, 0x1b, 0xf5, 0x1e, 0x97, 0xe1, 0xb8,
- 0x86, 0xa4, 0x65, 0xd9, 0xf8, 0xc3, 0x3d, 0xaf, 0x6b, 0x66, 0xda, 0x7c, 0xd3, 0xfd, 0xdc, 0xdd,
- 0x33, 0xe4, 0x78, 0xfb, 0x3b, 0x5e, 0x12, 0x04, 0x48, 0x90, 0x1c, 0x82, 0x24, 0xc8, 0x25, 0x40,
- 0x10, 0x03, 0x39, 0x04, 0x41, 0x80, 0x5c, 0x92, 0x4b, 0x12, 0x20, 0x09, 0xb2, 0x03, 0xf6, 0x2d,
- 0x17, 0xc7, 0x86, 0x9c, 0x43, 0x0e, 0xc9, 0xc1, 0x49, 0x10, 0xe4, 0x18, 0xd4, 0xd2, 0xd5, 0x55,
- 0xbd, 0xbc, 0x7e, 0xcf, 0x92, 0xb3, 0x20, 0x3e, 0xcd, 0xab, 0xea, 0xef, 0xfb, 0xd5, 0xf2, 0x2d,
- 0x55, 0xf5, 0xd5, 0x32, 0x70, 0x74, 0xb4, 0x71, 0x7e, 0xe4, 0x7b, 0xa1, 0x17, 0x9c, 0x27, 0x7b,
- 0xc4, 0x0d, 0x83, 0x2e, 0x4b, 0xa1, 0xa6, 0xe5, 0xee, 0x87, 0xfb, 0x23, 0x62, 0x9e, 0x1a, 0x3d,
- 0xde, 0x3a, 0x3f, 0x74, 0x36, 0xce, 0x8f, 0x36, 0xce, 0xef, 0x78, 0x36, 0x19, 0x46, 0xe4, 0x2c,
- 0x21, 0xc8, 0xcd, 0x63, 0x5b, 0x9e, 0xb7, 0x35, 0x24, 0xfc, 0xdb, 0xc6, 0xee, 0xe6, 0xf9, 0x20,
- 0xf4, 0x77, 0x07, 0x21, 0xff, 0x3a, 0xff, 0x0f, 0x7f, 0x5a, 0x86, 0xfa, 0x0a, 0x85, 0x47, 0x17,
- 0xa0, 0xb5, 0x43, 0x82, 0xc0, 0xda, 0x22, 0x81, 0x51, 0x3e, 0x51, 0x3d, 0x3b, 0x73, 0xe1, 0x68,
- 0x57, 0x14, 0xd5, 0x65, 0x14, 0xdd, 0x7b, 0xfc, 0x33, 0x96, 0x74, 0xe8, 0x18, 0xb4, 0x07, 0x9e,
- 0x1b, 0x92, 0xa7, 0x61, 0xdf, 0x36, 0x2a, 0x27, 0xca, 0x67, 0xdb, 0x38, 0xce, 0x40, 0x97, 0xa0,
- 0xed, 0xb8, 0x4e, 0xe8, 0x58, 0xa1, 0xe7, 0x1b, 0xd5, 0x13, 0x65, 0x0d, 0x92, 0x55, 0xb2, 0xbb,
- 0x30, 0x18, 0x78, 0xbb, 0x6e, 0x88, 0x63, 0x42, 0x64, 0x40, 0x33, 0xf4, 0xad, 0x01, 0xe9, 0xdb,
- 0x46, 0x8d, 0x21, 0x46, 0x49, 0xf3, 0xdf, 0x2e, 0x40, 0x53, 0xd4, 0x01, 0x3d, 0x07, 0xcd, 0x60,
- 0xc4, 0xa9, 0xbe, 0x51, 0xe6, 0x64, 0x22, 0x8d, 0x6e, 0xc0, 0x8c, 0xc5, 0x61, 0xd7, 0xb7, 0xbd,
- 0x27, 0x46, 0x99, 0x15, 0xfc, 0x7c, 0xa2, 0x2d, 0xa2, 0xe0, 0x2e, 0x25, 0xe9, 0x95, 0xb0, 0xca,
- 0x81, 0xfa, 0x30, 0x27, 0x92, 0xcb, 0x24, 0xb4, 0x9c, 0x61, 0x60, 0xfc, 0x25, 0x07, 0x39, 0x9e,
- 0x03, 0x22, 0xc8, 0x7a, 0x25, 0x9c, 0x60, 0x44, 0x9f, 0x82, 0xc3, 0x22, 0x67, 0xc9, 0x73, 0x37,
- 0x9d, 0xad, 0x87, 0x23, 0xdb, 0x0a, 0x89, 0xf1, 0x57, 0x1c, 0xef, 0x54, 0x0e, 0x1e, 0xa7, 0xed,
- 0x72, 0xe2, 0x5e, 0x09, 0x67, 0x61, 0xa0, 0x5b, 0x70, 0x40, 0x64, 0x0b, 0xd0, 0xbf, 0xe6, 0xa0,
- 0x2f, 0xe4, 0x80, 0x4a, 0x34, 0x9d, 0x0d, 0x7d, 0x1a, 0x8e, 0x88, 0x8c, 0xbb, 0x8e, 0xfb, 0x78,
- 0x69, 0xdb, 0x1a, 0x0e, 0x89, 0xbb, 0x45, 0x8c, 0xbf, 0x19, 0x5f, 0x47, 0x8d, 0xb8, 0x57, 0xc2,
- 0x99, 0x20, 0x68, 0x0b, 0x8c, 0xac, 0xfc, 0x9e, 0x63, 0x13, 0xe3, 0x6f, 0x79, 0x01, 0x67, 0x27,
- 0x2a, 0xc0, 0xb1, 0x69, 0x21, 0xb9, 0x60, 0xe8, 0x3e, 0x74, 0xbc, 0x8d, 0xcf, 0x91, 0x41, 0xd4,
- 0xf3, 0xeb, 0x24, 0x34, 0x3a, 0x0c, 0xff, 0xa5, 0x04, 0xfe, 0x7d, 0x46, 0x16, 0xc9, 0xac, 0xbb,
- 0x4e, 0xc2, 0x5e, 0x09, 0xa7, 0x98, 0xd1, 0x43, 0x40, 0x5a, 0xde, 0xc2, 0x0e, 0x71, 0x6d, 0xe3,
- 0x02, 0x83, 0x3c, 0x39, 0x1e, 0x92, 0x91, 0xf6, 0x4a, 0x38, 0x03, 0x20, 0x05, 0xfb, 0xd0, 0x0d,
- 0x48, 0x68, 0x5c, 0x9c, 0x04, 0x96, 0x91, 0xa6, 0x60, 0x59, 0x2e, 0x15, 0x22, 0xcf, 0xc5, 0x64,
- 0x68, 0x85, 0x8e, 0xe7, 0x8a, 0xfa, 0x5e, 0x62, 0xc0, 0xa7, 0xb3, 0x81, 0x25, 0xad, 0xac, 0x71,
- 0x26, 0x08, 0xfa, 0x7f, 0xf0, 0x4c, 0x22, 0x1f, 0x93, 0x1d, 0x6f, 0x8f, 0x18, 0x6f, 0x32, 0xf4,
- 0x33, 0x45, 0xe8, 0x9c, 0xba, 0x57, 0xc2, 0xd9, 0x30, 0x68, 0x11, 0x66, 0xa3, 0x0f, 0x0c, 0xf6,
- 0x32, 0x83, 0x3d, 0x96, 0x07, 0x2b, 0xc0, 0x34, 0x1e, 0x6a, 0xf4, 0x3c, 0xbd, 0x34, 0xf4, 0x02,
- 0x62, 0x2c, 0x64, 0x1a, 0xbd, 0x80, 0x60, 0x24, 0xd4, 0xe8, 0x15, 0x0e, 0xb5, 0x91, 0x41, 0xe8,
- 0x3b, 0x03, 0x56, 0x41, 0xaa, 0x45, 0x57, 0xc6, 0x37, 0x32, 0x26, 0x16, 0xaa, 0x94, 0x0d, 0x83,
- 0x30, 0x1c, 0x0c, 0x76, 0x37, 0x82, 0x81, 0xef, 0x8c, 0x68, 0xde, 0x82, 0x6d, 0x1b, 0xef, 0x8c,
- 0x43, 0x5e, 0x57, 0x88, 0xbb, 0x0b, 0x36, 0x95, 0x4e, 0x12, 0x00, 0x7d, 0x1a, 0x90, 0x9a, 0x25,
- 0xba, 0xef, 0x1a, 0x83, 0xfd, 0xd8, 0x04, 0xb0, 0xb2, 0x2f, 0x33, 0x60, 0x90, 0x05, 0x47, 0xd4,
- 0xdc, 0x35, 0x2f, 0x70, 0xe8, 0x5f, 0xe3, 0x3a, 0x83, 0x7f, 0x75, 0x02, 0xf8, 0x88, 0x85, 0x2a,
- 0x56, 0x16, 0x54, 0xb2, 0x88, 0x25, 0x6a, 0xda, 0xc4, 0x0f, 0x8c, 0x1b, 0x13, 0x17, 0x11, 0xb1,
- 0x24, 0x8b, 0x88, 0xf2, 0x93, 0x5d, 0xf4, 0xae, 0xef, 0xed, 0x8e, 0x02, 0xe3, 0xe6, 0xc4, 0x5d,
- 0xc4, 0x19, 0x92, 0x5d, 0xc4, 0x73, 0xd1, 0x65, 0x68, 0x6d, 0x0c, 0xbd, 0xc1, 0x63, 0x2a, 0xcc,
- 0x0a, 0x83, 0x34, 0x12, 0x90, 0x8b, 0xf4, 0xb3, 0x10, 0x9f, 0xa4, 0xa5, 0xca, 0xca, 0x7e, 0x2f,
- 0x93, 0x21, 0x09, 0x89, 0x18, 0x1a, 0x9f, 0xcf, 0x64, 0xe5, 0x24, 0x54, 0x59, 0x15, 0x0e, 0xb4,
- 0x0c, 0x33, 0x9b, 0xce, 0x90, 0x04, 0x0f, 0x47, 0x43, 0xcf, 0xe2, 0xe3, 0xe4, 0xcc, 0x85, 0x13,
- 0x99, 0x00, 0xb7, 0x62, 0x3a, 0x8a, 0xa2, 0xb0, 0xa1, 0xeb, 0xd0, 0xde, 0xb1, 0xfc, 0xc7, 0x41,
- 0xdf, 0xdd, 0xf4, 0x8c, 0x7a, 0xe6, 0x08, 0xc7, 0x31, 0xee, 0x45, 0x54, 0xbd, 0x12, 0x8e, 0x59,
- 0xe8, 0x38, 0xc9, 0x2a, 0xb5, 0x4e, 0xc2, 0x5b, 0x0e, 0x19, 0xda, 0x81, 0xd1, 0x60, 0x20, 0x2f,
- 0x66, 0x82, 0xac, 0x93, 0xb0, 0xcb, 0xc9, 0xe8, 0x38, 0xa9, 0x33, 0xa2, 0xf7, 0xe0, 0x70, 0x94,
- 0xb3, 0xb4, 0xed, 0x0c, 0x6d, 0x9f, 0xb8, 0x7d, 0x3b, 0x30, 0x9a, 0x99, 0x43, 0x50, 0x8c, 0xa7,
- 0xd0, 0xd2, 0x61, 0x32, 0x03, 0x82, 0x7a, 0xc6, 0x28, 0x5b, 0x35, 0x49, 0xa3, 0x95, 0xe9, 0x19,
- 0x63, 0x68, 0x95, 0x98, 0x6a, 0x57, 0x16, 0x08, 0xb2, 0xe1, 0xd9, 0x28, 0x7f, 0xd1, 0x1a, 0x3c,
- 0xde, 0xf2, 0xbd, 0x5d, 0xd7, 0x5e, 0xf2, 0x86, 0x9e, 0x6f, 0xb4, 0x33, 0x07, 0xb7, 0x18, 0x3f,
- 0x41, 0xdf, 0x2b, 0xe1, 0x3c, 0x28, 0xb4, 0x04, 0xb3, 0xd1, 0xa7, 0x07, 0xe4, 0x69, 0x68, 0x40,
- 0xe6, 0x38, 0x1f, 0x43, 0x53, 0x22, 0xea, 0x20, 0x55, 0x26, 0x15, 0x84, 0xaa, 0x84, 0x31, 0x53,
- 0x00, 0x42, 0x89, 0x54, 0x10, 0x9a, 0x56, 0x41, 0xe8, 0x10, 0x6c, 0x1c, 0x28, 0x00, 0xa1, 0x44,
- 0x2a, 0x08, 0x4d, 0xd3, 0xa1, 0x5a, 0xb6, 0xd4, 0xf3, 0x1e, 0x53, 0x7d, 0x32, 0xe6, 0x32, 0x87,
- 0x6a, 0xa5, 0xb7, 0x04, 0x21, 0x1d, 0xaa, 0x93, 0xcc, 0x74, 0x26, 0x14, 0xe5, 0x2d, 0x0c, 0x9d,
- 0x2d, 0xd7, 0x38, 0x38, 0x46, 0x97, 0x29, 0x1a, 0xa3, 0xa2, 0x33, 0x21, 0x8d, 0x0d, 0xdd, 0x14,
- 0x66, 0xb9, 0x4e, 0xc2, 0x65, 0x67, 0xcf, 0x38, 0x94, 0x39, 0x0c, 0xc5, 0x28, 0xcb, 0xce, 0x9e,
- 0xb4, 0x4b, 0xce, 0xa2, 0x36, 0x2d, 0x1a, 0xe4, 0x8c, 0x67, 0x0a, 0x9a, 0x16, 0x11, 0xaa, 0x4d,
- 0x8b, 0xf2, 0xd4, 0xa6, 0xdd, 0xb5, 0x42, 0xf2, 0xd4, 0x78, 0xae, 0xa0, 0x69, 0x8c, 0x4a, 0x6d,
- 0x1a, 0xcb, 0xa0, 0xa3, 0x5b, 0x94, 0xf1, 0x88, 0xf8, 0xa1, 0x33, 0xb0, 0x86, 0xbc, 0xab, 0x4e,
- 0x65, 0x8e, 0x41, 0x31, 0x9e, 0x46, 0x4d, 0x47, 0xb7, 0x4c, 0x18, 0xb5, 0xe1, 0x0f, 0xac, 0x8d,
- 0x21, 0xc1, 0xde, 0x13, 0xe3, 0x74, 0x41, 0xc3, 0x23, 0x42, 0xb5, 0xe1, 0x51, 0x9e, 0xea, 0x5b,
- 0x3e, 0xe9, 0xd8, 0x5b, 0x24, 0x34, 0xce, 0x16, 0xf8, 0x16, 0x4e, 0xa6, 0xfa, 0x16, 0x9e, 0x23,
- 0x3d, 0xc0, 0xb2, 0x15, 0x5a, 0x7b, 0x0e, 0x79, 0xf2, 0xc8, 0x21, 0x4f, 0xe8, 0xc0, 0x7e, 0x78,
- 0x8c, 0x07, 0x88, 0x68, 0xbb, 0x82, 0x58, 0x7a, 0x80, 0x04, 0x88, 0xf4, 0x00, 0x6a, 0xbe, 0x70,
- 0xeb, 0x47, 0xc6, 0x78, 0x00, 0x0d, 0x5f, 0xfa, 0xf8, 0x3c, 0x28, 0x64, 0xc1, 0xd1, 0xd4, 0xa7,
- 0xfb, 0xbe, 0x4d, 0x7c, 0xe3, 0x05, 0x56, 0xc8, 0xcb, 0xc5, 0x85, 0x30, 0xf2, 0x5e, 0x09, 0xe7,
- 0x00, 0xa5, 0x8a, 0x58, 0xf7, 0x76, 0xfd, 0x01, 0xa1, 0xfd, 0x74, 0x72, 0x92, 0x22, 0x24, 0x79,
- 0xaa, 0x08, 0xf9, 0x05, 0xed, 0xc1, 0x0b, 0xf2, 0x0b, 0x2d, 0x98, 0x8d, 0xa2, 0xac, 0x74, 0xb1,
- 0x82, 0x39, 0xc3, 0x4a, 0xea, 0x8e, 0x2f, 0x29, 0xc9, 0xd5, 0x2b, 0xe1, 0xf1, 0xb0, 0x68, 0x1f,
- 0x8e, 0x6b, 0x04, 0x7c, 0x9c, 0x57, 0x0b, 0x7e, 0x99, 0x15, 0x7c, 0x7e, 0x7c, 0xc1, 0x29, 0xb6,
- 0x5e, 0x09, 0x17, 0x00, 0xa3, 0x11, 0x3c, 0xaf, 0x75, 0x46, 0x64, 0xd8, 0x42, 0x45, 0xbe, 0xc4,
- 0xca, 0x3d, 0x37, 0xbe, 0x5c, 0x9d, 0xa7, 0x57, 0xc2, 0xe3, 0x20, 0xe9, 0x8a, 0x2b, 0xf3, 0x33,
- 0x95, 0xe4, 0x17, 0x33, 0xa7, 0x3d, 0x39, 0xc5, 0x71, 0x59, 0xe6, 0x82, 0x65, 0x6a, 0xbe, 0xe8,
- 0xce, 0x2f, 0x4f, 0xaa, 0xf9, 0xb2, 0x1f, 0xf3, 0xa0, 0x34, 0xd9, 0xd1, 0x4f, 0x0f, 0x2c, 0x7f,
- 0x8b, 0x84, 0xbc, 0xa3, 0xfb, 0x36, 0x6d, 0xd4, 0x57, 0x26, 0x91, 0x5d, 0x8a, 0x4d, 0x93, 0x5d,
- 0x26, 0x30, 0x0a, 0xe0, 0x98, 0x46, 0xd1, 0x0f, 0x96, 0xbc, 0xe1, 0x90, 0x0c, 0xa2, 0xde, 0xfc,
- 0xff, 0xac, 0xe0, 0xd7, 0xc6, 0x17, 0x9c, 0x60, 0xea, 0x95, 0xf0, 0x58, 0xd0, 0x54, 0x7b, 0xef,
- 0x0f, 0xed, 0x84, 0xce, 0x18, 0x13, 0xe9, 0x6a, 0x92, 0x2d, 0xd5, 0xde, 0x14, 0x45, 0x4a, 0x57,
- 0x15, 0x0a, 0xda, 0xdc, 0x67, 0x27, 0xd1, 0x55, 0x9d, 0x27, 0xa5, 0xab, 0xfa, 0x67, 0x3a, 0xba,
- 0xed, 0x06, 0xc4, 0x67, 0x18, 0xb7, 0x3d, 0xc7, 0x35, 0x5e, 0xcc, 0x1c, 0xdd, 0x1e, 0x06, 0xc4,
- 0x17, 0x05, 0x51, 0x2a, 0x3a, 0xba, 0x69, 0x6c, 0x1a, 0xce, 0x5d, 0xb2, 0x19, 0x1a, 0x27, 0x8a,
- 0x70, 0x28, 0x95, 0x86, 0x43, 0x33, 0xe8, 0x48, 0x21, 0x33, 0xd6, 0x09, 0x95, 0x0a, 0xb6, 0xdc,
- 0x2d, 0x62, 0xbc, 0x94, 0x39, 0x52, 0x28, 0x70, 0x0a, 0x31, 0x1d, 0x29, 0xb2, 0x40, 0xe8, 0xca,
- 0x5f, 0xe6, 0xd3, 0x19, 0x19, 0x87, 0x9e, 0xcf, 0x5c, 0xf9, 0x2b, 0xd0, 0x92, 0x94, 0xae, 0x41,
- 0xd2, 0x00, 0xe8, 0x63, 0x50, 0x1b, 0x39, 0xee, 0x96, 0x61, 0x33, 0xa0, 0xc3, 0x09, 0xa0, 0x35,
- 0xc7, 0xdd, 0xea, 0x95, 0x30, 0x23, 0x41, 0xef, 0x00, 0x8c, 0x7c, 0x6f, 0x40, 0x82, 0x60, 0x95,
- 0x3c, 0x31, 0x08, 0x63, 0x30, 0x93, 0x0c, 0x9c, 0xa0, 0xbb, 0x4a, 0xe8, 0xb8, 0xac, 0xd0, 0xa3,
- 0x15, 0x38, 0x20, 0x52, 0xc2, 0xca, 0x37, 0x33, 0x27, 0x7f, 0x11, 0x40, 0x1c, 0x6e, 0xd2, 0xb8,
- 0xe8, 0xda, 0x47, 0x64, 0x2c, 0x7b, 0x2e, 0x31, 0xb6, 0x32, 0xd7, 0x3e, 0x11, 0x08, 0x25, 0xa1,
- 0x73, 0x2c, 0x85, 0x03, 0x2d, 0xc2, 0x6c, 0xb8, 0xed, 0x13, 0xcb, 0x5e, 0x0f, 0xad, 0x70, 0x37,
- 0x30, 0xdc, 0xcc, 0x69, 0x1a, 0xff, 0xd8, 0x7d, 0xc0, 0x28, 0xe9, 0x14, 0x54, 0xe5, 0x41, 0xab,
- 0xd0, 0xa1, 0x0b, 0xa1, 0xbb, 0xce, 0x8e, 0x13, 0x62, 0x62, 0x0d, 0xb6, 0x89, 0x6d, 0x78, 0x99,
- 0x8b, 0x28, 0x3a, 0xed, 0xed, 0xaa, 0x74, 0x74, 0xb6, 0x92, 0xe4, 0x45, 0x3d, 0x98, 0xa3, 0x79,
- 0xeb, 0x23, 0x6b, 0x40, 0x1e, 0x06, 0xd6, 0x16, 0x31, 0x46, 0x99, 0x1a, 0xc8, 0xd0, 0x62, 0x2a,
- 0x3a, 0x59, 0xd1, 0xf9, 0x22, 0xa4, 0xbb, 0xde, 0xc0, 0x1a, 0x72, 0xa4, 0xcf, 0xe7, 0x23, 0xc5,
- 0x54, 0x11, 0x52, 0x9c, 0xa3, 0xb5, 0x91, 0xf7, 0xbd, 0x6d, 0xec, 0x15, 0xb4, 0x51, 0xd0, 0x69,
- 0x6d, 0x14, 0x79, 0x14, 0xcf, 0xf5, 0x42, 0x67, 0xd3, 0x19, 0x08, 0xfb, 0x75, 0x6d, 0xc3, 0xcf,
- 0xc4, 0x5b, 0x55, 0xc8, 0xba, 0xeb, 0x3c, 0xb2, 0x94, 0xe2, 0x45, 0x0f, 0x00, 0xa9, 0x79, 0x42,
- 0xa9, 0x02, 0x86, 0x38, 0x3f, 0x0e, 0x51, 0x6a, 0x56, 0x06, 0x3f, 0xad, 0xe5, 0xc8, 0xda, 0xa7,
- 0xcb, 0xdb, 0x45, 0xdf, 0xb3, 0xec, 0x81, 0x15, 0x84, 0x46, 0x98, 0x59, 0xcb, 0x35, 0x4e, 0xd6,
- 0x95, 0x74, 0xb4, 0x96, 0x49, 0x5e, 0x8a, 0xb7, 0x43, 0x76, 0x36, 0x88, 0x1f, 0x6c, 0x3b, 0x23,
- 0x51, 0xc7, 0xdd, 0x4c, 0xbc, 0x7b, 0x92, 0x2c, 0xae, 0x61, 0x8a, 0x97, 0x4e, 0xc4, 0x59, 0x9c,
- 0x7a, 0x7d, 0xdf, 0x1d, 0x70, 0x65, 0x14, 0xa0, 0x4f, 0x32, 0x27, 0xe2, 0x4c, 0x33, 0xba, 0x31,
- 0x71, 0x0c, 0x9d, 0x0d, 0x83, 0xee, 0xc0, 0xc1, 0xd1, 0x85, 0x91, 0x86, 0xfc, 0x34, 0x73, 0xe2,
- 0xbc, 0x76, 0x61, 0x2d, 0x09, 0x99, 0xe4, 0xa4, 0xa6, 0xe6, 0xec, 0x8c, 0x3c, 0x3f, 0xbc, 0xe5,
- 0xb8, 0x4e, 0xb0, 0x6d, 0xec, 0x67, 0x9a, 0x5a, 0x9f, 0x91, 0x74, 0x39, 0x0d, 0x35, 0x35, 0x95,
- 0x07, 0x5d, 0x82, 0xe6, 0x60, 0xdb, 0x0a, 0x17, 0x6c, 0xdb, 0xf8, 0x2a, 0x0f, 0xf8, 0x3e, 0x9b,
- 0xe0, 0x5f, 0xda, 0xb6, 0x42, 0x11, 0x22, 0x89, 0x48, 0xd1, 0x35, 0x00, 0xfa, 0x53, 0xb4, 0xe0,
- 0xa7, 0xca, 0x99, 0xbe, 0x8a, 0x31, 0xca, 0xda, 0x2b, 0x0c, 0xe8, 0x3d, 0x38, 0x1c, 0xa7, 0xa8,
- 0x91, 0xf2, 0x35, 0xff, 0xd7, 0xca, 0x99, 0xde, 0x56, 0xc1, 0x91, 0xb4, 0xbd, 0x12, 0xce, 0x82,
- 0xa0, 0x43, 0x84, 0x96, 0x1d, 0x79, 0xa1, 0x9f, 0xce, 0x8e, 0x96, 0xeb, 0xd0, 0x82, 0x98, 0x0e,
- 0x11, 0x59, 0x20, 0x51, 0xab, 0xc5, 0x40, 0xff, 0xf5, 0x31, 0xad, 0x96, 0x83, 0xba, 0xc2, 0x80,
- 0xee, 0xc2, 0x41, 0x9a, 0xa2, 0x60, 0x44, 0xf4, 0xdc, 0x37, 0xcb, 0x99, 0xc2, 0x57, 0xaa, 0xc5,
- 0xa8, 0xa9, 0xf0, 0x13, 0xac, 0x8b, 0x4d, 0xa8, 0xef, 0x59, 0xc3, 0x5d, 0x62, 0x7e, 0xb7, 0x0e,
- 0x35, 0xca, 0x60, 0xfe, 0x7d, 0x19, 0xaa, 0x54, 0x38, 0x73, 0x50, 0x71, 0x6c, 0x83, 0xef, 0xba,
- 0x54, 0x1c, 0x1b, 0x19, 0xd0, 0xf4, 0xe8, 0x9c, 0x57, 0xee, 0x01, 0x45, 0x49, 0x34, 0x0f, 0xb3,
- 0xd6, 0x66, 0x48, 0xfc, 0xfb, 0xe2, 0x73, 0x83, 0x7d, 0xd6, 0xf2, 0xa8, 0x82, 0x88, 0xfd, 0x24,
- 0x11, 0x08, 0x33, 0x13, 0x7b, 0x44, 0xb4, 0xec, 0x68, 0xeb, 0x29, 0x22, 0x45, 0x47, 0xa1, 0x11,
- 0xec, 0x6e, 0xf4, 0xed, 0xc0, 0xa8, 0x9d, 0xa8, 0x9e, 0x6d, 0x63, 0x91, 0x42, 0x6f, 0xc3, 0xac,
- 0x4d, 0x46, 0xc4, 0xb5, 0x89, 0x3b, 0x70, 0x48, 0x60, 0xd4, 0xd9, 0x4e, 0xd6, 0xb3, 0x5d, 0xbe,
- 0x0b, 0xd6, 0x8d, 0x76, 0xc1, 0xba, 0xeb, 0x6c, 0x17, 0x0c, 0x6b, 0xc4, 0xe6, 0x67, 0xa1, 0x21,
- 0xba, 0x32, 0xd9, 0xc4, 0xb8, 0xb8, 0x8a, 0x56, 0x5c, 0x17, 0xea, 0x01, 0xed, 0x33, 0x51, 0x75,
- 0x23, 0xa3, 0xea, 0xac, 0x4f, 0x31, 0x27, 0x33, 0x37, 0xa1, 0x21, 0x54, 0x34, 0x59, 0x82, 0xd2,
- 0x0d, 0x95, 0x1f, 0xa5, 0x1b, 0xaa, 0x6a, 0xbd, 0xcc, 0x2f, 0xc3, 0xc1, 0xa4, 0xe6, 0x26, 0x0b,
- 0x5c, 0x84, 0xb6, 0x2f, 0x2d, 0xa3, 0x92, 0xd0, 0xde, 0x54, 0x91, 0x5d, 0x09, 0x84, 0x63, 0xb6,
- 0xdc, 0xe2, 0x1f, 0x40, 0x27, 0xa5, 0xdc, 0x1d, 0xa8, 0x3a, 0x36, 0xdf, 0x5a, 0x6c, 0x63, 0xfa,
- 0x93, 0x72, 0x3b, 0x01, 0xa5, 0x60, 0xc5, 0xb7, 0xb0, 0x48, 0xe5, 0xa2, 0x3e, 0x84, 0x19, 0x45,
- 0x67, 0xe3, 0xbe, 0x2f, 0x4f, 0xd4, 0xf7, 0x79, 0x32, 0x34, 0xbf, 0xd5, 0x80, 0xa6, 0xd8, 0x74,
- 0x32, 0x57, 0xa1, 0xc6, 0xb6, 0x00, 0x8f, 0x40, 0xdd, 0x71, 0x6d, 0xf2, 0x94, 0x61, 0xd7, 0x31,
- 0x4f, 0xa0, 0xd7, 0xa1, 0x29, 0x36, 0xa0, 0x44, 0x87, 0xe5, 0x6d, 0x67, 0x46, 0x64, 0xe6, 0xfb,
- 0xd0, 0x8c, 0xb6, 0x02, 0x8f, 0x41, 0x7b, 0xe4, 0x7b, 0x74, 0x58, 0xed, 0x47, 0x62, 0x88, 0x33,
- 0xd0, 0x1b, 0xd0, 0xb4, 0xc5, 0x66, 0x63, 0x45, 0x78, 0xc9, 0x1c, 0x95, 0x8d, 0xe8, 0xcc, 0xaf,
- 0x96, 0xa1, 0xc1, 0x77, 0x04, 0xcd, 0x3d, 0xa9, 0x56, 0x6f, 0x42, 0x63, 0xc0, 0xf2, 0x8c, 0xe4,
- 0x6e, 0xa0, 0x56, 0x43, 0xb1, 0xc5, 0x88, 0x05, 0x31, 0x65, 0x0b, 0xb8, 0x23, 0xab, 0x8c, 0x65,
- 0xe3, 0xb2, 0xc4, 0x82, 0xf8, 0xbf, 0xad, 0xdc, 0x3f, 0xaa, 0xc0, 0x01, 0x7d, 0xa3, 0xf1, 0x18,
- 0xb4, 0x07, 0x72, 0xeb, 0x52, 0xf4, 0xae, 0xcc, 0x40, 0xf7, 0x01, 0x06, 0x43, 0x87, 0xb8, 0x21,
- 0x0b, 0x75, 0x57, 0x32, 0x57, 0x50, 0x99, 0xfb, 0x8e, 0xdd, 0x25, 0xc9, 0x86, 0x15, 0x08, 0x74,
- 0x03, 0xea, 0xc1, 0xc0, 0x1b, 0x71, 0xbb, 0x9f, 0x53, 0x96, 0xd4, 0x7a, 0xb5, 0x17, 0x76, 0xc3,
- 0x6d, 0x3e, 0x4b, 0x5b, 0x18, 0x39, 0xeb, 0x94, 0x01, 0x73, 0x3e, 0xf3, 0x2b, 0x00, 0x31, 0x34,
- 0x3a, 0x21, 0x27, 0xc5, 0xab, 0xd6, 0x4e, 0x54, 0x7f, 0x35, 0x4b, 0xa1, 0x58, 0xb3, 0xc2, 0x6d,
- 0xe1, 0x67, 0xd5, 0x2c, 0x74, 0x0e, 0x0e, 0x05, 0xce, 0x96, 0x6b, 0x85, 0xbb, 0x3e, 0x79, 0x44,
- 0x7c, 0x67, 0xd3, 0x21, 0x36, 0xab, 0x5e, 0x0b, 0xa7, 0x3f, 0x98, 0x6f, 0xc0, 0xa1, 0xf4, 0x26,
- 0xea, 0xd8, 0x4e, 0x34, 0x7f, 0xb6, 0x0d, 0x0d, 0xbe, 0x3e, 0x36, 0xff, 0xbd, 0x22, 0xf5, 0xda,
- 0xfc, 0x93, 0x32, 0xd4, 0xf9, 0x3e, 0x61, 0xd2, 0xc3, 0xdc, 0x52, 0x75, 0xba, 0x9a, 0xb1, 0x78,
- 0xcc, 0xda, 0x37, 0xed, 0xde, 0x21, 0xfb, 0x8f, 0xe8, 0xb8, 0x23, 0x15, 0x3d, 0xd7, 0x1f, 0xdc,
- 0x86, 0x56, 0x44, 0x4c, 0xbd, 0xcb, 0x63, 0xb2, 0x2f, 0x0a, 0xa7, 0x3f, 0xd1, 0x39, 0x31, 0x7e,
- 0x49, 0x53, 0x4d, 0xda, 0x13, 0x2f, 0x45, 0x0c, 0x72, 0x9f, 0x85, 0x2a, 0x5d, 0x91, 0x26, 0x9b,
- 0x30, 0xbd, 0x59, 0xe6, 0xd6, 0x76, 0x09, 0xea, 0x7c, 0xaf, 0x36, 0x59, 0x06, 0x82, 0xda, 0x63,
- 0xb2, 0x1f, 0x79, 0x25, 0xf6, 0x3b, 0x17, 0xe4, 0x8f, 0xab, 0x30, 0xab, 0xee, 0x4f, 0x99, 0x2b,
- 0xb9, 0x43, 0x32, 0x1b, 0x64, 0xe3, 0x21, 0x59, 0x24, 0xa9, 0x67, 0x63, 0x58, 0x4c, 0x35, 0xda,
- 0x98, 0x27, 0xcc, 0x2e, 0x34, 0xc4, 0xb6, 0x5f, 0x12, 0x49, 0xd2, 0x57, 0x54, 0xfa, 0xdb, 0xd0,
- 0x92, 0xbb, 0x78, 0x1f, 0xb6, 0x6c, 0x1f, 0x5a, 0x72, 0xbb, 0xee, 0x08, 0xd4, 0x43, 0x2f, 0xb4,
- 0x86, 0x0c, 0xae, 0x8a, 0x79, 0x82, 0xea, 0xa5, 0x4b, 0x9e, 0x86, 0x4b, 0xd2, 0xf3, 0x56, 0x71,
- 0x9c, 0xc1, 0x1d, 0x2b, 0xd9, 0xe3, 0x5f, 0xab, 0xfc, 0xab, 0xcc, 0x88, 0xcb, 0xac, 0xa9, 0x65,
- 0xee, 0x43, 0x43, 0xec, 0xe1, 0xc9, 0xef, 0x65, 0xe5, 0x3b, 0x5a, 0x80, 0xfa, 0x16, 0xfd, 0x2e,
- 0xa4, 0xfe, 0x6a, 0xc2, 0xbe, 0xf9, 0xd2, 0x7c, 0xc9, 0x73, 0x43, 0xaa, 0xc6, 0x7a, 0x68, 0x12,
- 0x73, 0x4e, 0x2a, 0x42, 0x9f, 0x6f, 0xc8, 0x72, 0x23, 0x14, 0x29, 0xf3, 0x5b, 0x65, 0x68, 0xcb,
- 0x1d, 0x70, 0xf3, 0xfd, 0x3c, 0xe3, 0x59, 0x80, 0x03, 0xbe, 0xa0, 0xa2, 0x86, 0x1a, 0x99, 0xd0,
- 0xf3, 0x89, 0x9a, 0x60, 0x85, 0x06, 0xeb, 0x1c, 0xe6, 0x3b, 0xb9, 0x42, 0x9d, 0x87, 0xd9, 0x88,
- 0xf4, 0x4e, 0xac, 0x7a, 0x5a, 0x9e, 0x69, 0x4a, 0xee, 0xd4, 0xc8, 0x6d, 0x6e, 0xc2, 0xac, 0xba,
- 0x0f, 0x66, 0x3e, 0xca, 0xb6, 0x9e, 0x1b, 0xb4, 0x18, 0x65, 0xcf, 0xad, 0x92, 0x58, 0xec, 0x47,
- 0x4d, 0x88, 0x49, 0xb0, 0xc6, 0x60, 0x3e, 0x0b, 0x75, 0xbe, 0x3b, 0x9f, 0x40, 0x36, 0x7f, 0x6d,
- 0x00, 0x75, 0x26, 0x04, 0xf3, 0x22, 0x37, 0x80, 0x73, 0xd0, 0x60, 0x91, 0xa6, 0xe8, 0xec, 0xd2,
- 0x91, 0x2c, 0x89, 0x61, 0x41, 0x63, 0x2e, 0xc1, 0x8c, 0xb2, 0x2f, 0x4a, 0x35, 0x96, 0x7d, 0x90,
- 0x5a, 0x10, 0x25, 0x91, 0x09, 0x2d, 0x3a, 0x40, 0x0b, 0x9f, 0x4b, 0xdb, 0x2f, 0xd3, 0xe6, 0x29,
- 0x39, 0x5b, 0x34, 0xc5, 0x3e, 0x70, 0x5f, 0xf6, 0x92, 0x4c, 0x9b, 0x9f, 0x81, 0xb6, 0xdc, 0x3e,
- 0x45, 0xf7, 0x61, 0x56, 0x6c, 0x9f, 0xf2, 0xe8, 0x0f, 0x25, 0x9e, 0x2b, 0xd0, 0xae, 0x07, 0xe4,
- 0x69, 0xc8, 0x76, 0x60, 0xbb, 0x0f, 0xf6, 0x47, 0x04, 0x6b, 0x00, 0xe6, 0x37, 0xcf, 0xb2, 0x9e,
- 0x37, 0x47, 0xd0, 0x92, 0x7b, 0x46, 0x49, 0x29, 0x5c, 0xe1, 0xae, 0xb1, 0x52, 0xb8, 0xe1, 0xc9,
- 0xf9, 0xa9, 0x03, 0x66, 0x1e, 0xd4, 0x7c, 0x1e, 0xaa, 0x77, 0xc8, 0x3e, 0xb5, 0x10, 0xee, 0x48,
- 0x85, 0x85, 0x70, 0x87, 0xd9, 0x87, 0x86, 0xd8, 0xbb, 0x4d, 0x96, 0x77, 0x1e, 0x1a, 0x9b, 0x7c,
- 0x3b, 0xb8, 0xc0, 0x65, 0x0a, 0x32, 0xf3, 0x06, 0xcc, 0xa8, 0x3b, 0xb6, 0x49, 0xbc, 0x13, 0x30,
- 0x33, 0x50, 0xf6, 0x84, 0xb9, 0x18, 0xd4, 0x2c, 0x93, 0xe8, 0xea, 0x98, 0x42, 0x58, 0xc9, 0xd4,
- 0xc3, 0x97, 0x32, 0xbb, 0x7d, 0x8c, 0x36, 0xde, 0x81, 0x83, 0xc9, 0xad, 0xd9, 0x64, 0x49, 0x67,
- 0xe1, 0xe0, 0x46, 0x62, 0x23, 0x98, 0xfb, 0xc0, 0x64, 0xb6, 0xd9, 0x87, 0x3a, 0xdf, 0x3a, 0x4b,
- 0x42, 0xbc, 0x0e, 0x75, 0x8b, 0x6d, 0xcd, 0x55, 0xd8, 0xd4, 0xc2, 0xcc, 0xac, 0x25, 0x63, 0xc5,
- 0x9c, 0xd0, 0x74, 0xe0, 0x80, 0xbe, 0x1b, 0x97, 0x84, 0xec, 0xc1, 0x81, 0x3d, 0x6d, 0xd7, 0x8f,
- 0x43, 0xcf, 0x67, 0x42, 0x6b, 0x50, 0x58, 0x67, 0x34, 0xbf, 0xd6, 0x80, 0x1a, 0xdb, 0x4e, 0x4e,
- 0x16, 0x71, 0x19, 0x6a, 0x21, 0x79, 0x1a, 0xcd, 0x8b, 0xe7, 0xc7, 0xee, 0x4d, 0xf3, 0x98, 0x26,
- 0xa3, 0x47, 0x1f, 0xa7, 0x93, 0xf8, 0xfd, 0x61, 0xb4, 0x80, 0x3a, 0x39, 0x9e, 0x71, 0x9d, 0x92,
- 0x62, 0xce, 0x41, 0x59, 0x99, 0x2d, 0x88, 0xe3, 0x0f, 0x05, 0xac, 0xcc, 0x08, 0x31, 0xe7, 0x40,
- 0x37, 0xa0, 0x39, 0xd8, 0x26, 0x83, 0xc7, 0xc4, 0x16, 0xe7, 0x1e, 0x4e, 0x8f, 0x67, 0x5e, 0xe2,
- 0xc4, 0x38, 0xe2, 0xa2, 0x65, 0x0f, 0x98, 0x74, 0x1b, 0x93, 0x94, 0xcd, 0x24, 0x8e, 0x39, 0x07,
- 0x5a, 0x81, 0xb6, 0x33, 0xf0, 0xdc, 0x95, 0x1d, 0xef, 0x73, 0x8e, 0x38, 0xe0, 0xf0, 0xf2, 0x78,
- 0xf6, 0x7e, 0x44, 0x8e, 0x63, 0xce, 0x08, 0xa6, 0xbf, 0x43, 0x57, 0x8c, 0xad, 0x49, 0x61, 0x18,
- 0x39, 0x8e, 0x39, 0xcd, 0x63, 0x42, 0x9e, 0xd9, 0x46, 0x7e, 0x0b, 0xea, 0xac, 0xcb, 0xd1, 0x35,
- 0xf5, 0xf3, 0x9c, 0x52, 0x52, 0xae, 0xc7, 0x12, 0xa2, 0x92, 0x38, 0xac, 0xff, 0x75, 0x9c, 0x99,
- 0x49, 0x70, 0x84, 0xdc, 0x38, 0xce, 0x8b, 0xd0, 0x14, 0xa2, 0xd0, 0x2b, 0xdc, 0x8a, 0x08, 0x5e,
- 0x80, 0x3a, 0x37, 0xcc, 0xec, 0xf6, 0xbc, 0x04, 0x6d, 0xd9, 0x99, 0xe3, 0x49, 0x58, 0xef, 0xe4,
- 0x90, 0xfc, 0x4c, 0x05, 0xea, 0x7c, 0x5b, 0x3d, 0xed, 0x6a, 0x55, 0x2b, 0x38, 0x39, 0x7e, 0x97,
- 0x5e, 0x35, 0x83, 0x5b, 0x6c, 0x71, 0x48, 0xe7, 0xf2, 0xf2, 0xa8, 0xec, 0xd9, 0x02, 0xee, 0xb5,
- 0x88, 0x1e, 0xc7, 0xac, 0x05, 0xe2, 0xbc, 0x0f, 0x6d, 0xc9, 0x85, 0x16, 0x75, 0x91, 0x9e, 0x1b,
- 0x2b, 0x8a, 0x64, 0x91, 0x02, 0xf0, 0x97, 0xcb, 0x50, 0x5d, 0x76, 0xf6, 0x52, 0xfd, 0xf0, 0x56,
- 0x64, 0xd5, 0x45, 0xee, 0x60, 0xd9, 0xd9, 0xd3, 0x8c, 0xda, 0x5c, 0x89, 0x34, 0xee, 0x1d, 0xbd,
- 0x7a, 0x67, 0xc6, 0xcf, 0xc0, 0x62, 0x18, 0x5e, 0xb1, 0x5f, 0x68, 0x42, 0x8d, 0x9d, 0x58, 0xc9,
- 0xf2, 0x53, 0xfb, 0xa3, 0xe2, 0x8a, 0xb1, 0x98, 0x38, 0x1b, 0x70, 0x19, 0x3d, 0xf7, 0x53, 0x71,
- 0xa0, 0xe7, 0xe4, 0x78, 0x46, 0x2d, 0xee, 0x70, 0x19, 0x6a, 0x3b, 0xce, 0x0e, 0x11, 0x6e, 0xaa,
- 0xa0, 0xc8, 0x7b, 0xce, 0x0e, 0xc1, 0x8c, 0x9e, 0xf2, 0x6d, 0x5b, 0xc1, 0xb6, 0xf0, 0x50, 0x05,
- 0x7c, 0x3d, 0x2b, 0xd8, 0xc6, 0x8c, 0x9e, 0xf2, 0xb9, 0x74, 0x15, 0xd9, 0x98, 0x84, 0x8f, 0x2e,
- 0x2e, 0x31, 0xa3, 0xa7, 0x7c, 0x81, 0xf3, 0x05, 0x22, 0x7c, 0x52, 0x01, 0xdf, 0xba, 0xf3, 0x05,
- 0x82, 0x19, 0x7d, 0xec, 0xc2, 0x5b, 0x93, 0x75, 0x8d, 0xe2, 0xc2, 0x1f, 0xc0, 0x5c, 0xa8, 0xed,
- 0xbb, 0x8a, 0x63, 0x53, 0xe7, 0x0a, 0xe4, 0xa2, 0xf1, 0xe0, 0x04, 0x06, 0x35, 0x02, 0xb6, 0x66,
- 0xce, 0x36, 0x82, 0x17, 0xa0, 0xfe, 0x49, 0xc7, 0x0e, 0xb7, 0xf5, 0xcf, 0x75, 0xcd, 0xe5, 0x51,
- 0xb1, 0x4d, 0xe5, 0xf2, 0x54, 0xa9, 0x73, 0x9c, 0x65, 0xa8, 0x51, 0xf5, 0x99, 0x4e, 0x8f, 0x63,
- 0xad, 0xfb, 0x50, 0x0e, 0x58, 0xed, 0x68, 0x8e, 0x73, 0x0c, 0x6a, 0x54, 0x43, 0x72, 0xba, 0xe4,
- 0x18, 0xd4, 0xa8, 0xde, 0xe5, 0x7f, 0xa5, 0xd2, 0xd6, 0xbf, 0x56, 0xa3, 0xaf, 0x67, 0x60, 0x4e,
- 0x17, 0x47, 0x0e, 0xca, 0x1f, 0x36, 0xa1, 0xc6, 0x8e, 0x7f, 0x25, 0x2d, 0xf2, 0x13, 0x70, 0x80,
- 0xcb, 0x6f, 0x51, 0x4c, 0xc1, 0x2b, 0x99, 0xa7, 0x3f, 0xf5, 0x43, 0x65, 0x42, 0x05, 0x04, 0x0b,
- 0xd6, 0x11, 0x26, 0x9f, 0x54, 0x30, 0x28, 0x4d, 0x23, 0xdf, 0x91, 0x93, 0xd7, 0x5a, 0xc1, 0xd9,
- 0x43, 0xc6, 0xcb, 0xa7, 0xc0, 0xd1, 0x4c, 0x16, 0x2d, 0x42, 0x8b, 0x0e, 0xad, 0xb4, 0xbb, 0x84,
- 0xd9, 0x9e, 0x19, 0xcf, 0xdf, 0x17, 0xd4, 0x58, 0xf2, 0xd1, 0x81, 0x7d, 0x60, 0xf9, 0x36, 0xab,
- 0x95, 0xb0, 0xe1, 0x97, 0xc7, 0x83, 0x2c, 0x45, 0xe4, 0x38, 0xe6, 0x44, 0x77, 0x60, 0xc6, 0x26,
- 0x32, 0x4e, 0x20, 0x8c, 0xfa, 0x63, 0xe3, 0x81, 0x96, 0x63, 0x06, 0xac, 0x72, 0xd3, 0x3a, 0x45,
- 0x6b, 0xc3, 0xa0, 0x70, 0xb2, 0xc1, 0xa0, 0xe2, 0x33, 0xde, 0x31, 0xa7, 0x79, 0x1a, 0x0e, 0x68,
- 0x72, 0xfb, 0x48, 0x67, 0x1d, 0xaa, 0x2c, 0x39, 0xce, 0x15, 0xb9, 0x44, 0x79, 0x4d, 0x9f, 0x76,
- 0xe4, 0xae, 0x48, 0x04, 0xe3, 0x5d, 0x68, 0x45, 0x82, 0x41, 0x37, 0xf5, 0x3a, 0xbc, 0x52, 0x5c,
- 0x07, 0x29, 0x53, 0x81, 0xb6, 0x0a, 0x6d, 0x29, 0x21, 0xb4, 0xa0, 0xc3, 0xbd, 0x5a, 0x0c, 0x17,
- 0x4b, 0x57, 0xe0, 0x61, 0x98, 0x51, 0x04, 0x85, 0x96, 0x74, 0xc4, 0xd7, 0x8a, 0x11, 0x55, 0x31,
- 0xc7, 0xb3, 0x1e, 0x29, 0x31, 0x55, 0x2a, 0xd5, 0x58, 0x2a, 0xbf, 0xdb, 0x84, 0x96, 0x3c, 0x72,
- 0x99, 0xb1, 0xc6, 0xdc, 0xf5, 0x87, 0x85, 0x6b, 0xcc, 0x88, 0xbf, 0xfb, 0xd0, 0x1f, 0x62, 0xca,
- 0x41, 0x45, 0x1c, 0x3a, 0xa1, 0x34, 0xd5, 0x97, 0x8b, 0x59, 0x1f, 0x50, 0x72, 0xcc, 0xb9, 0xd0,
- 0x7d, 0x5d, 0xcb, 0x6b, 0x63, 0x8e, 0xe4, 0x68, 0x20, 0xb9, 0x9a, 0xde, 0x87, 0xb6, 0x43, 0xa7,
- 0x7e, 0xbd, 0x78, 0xe4, 0x7d, 0xb5, 0x18, 0xae, 0x1f, 0xb1, 0xe0, 0x98, 0x9b, 0xd6, 0x6d, 0xd3,
- 0xda, 0xa3, 0x76, 0xcd, 0xc0, 0x1a, 0x93, 0xd6, 0xed, 0x56, 0xcc, 0x84, 0x55, 0x04, 0x74, 0x55,
- 0xcc, 0x5d, 0x9a, 0x05, 0x9e, 0x25, 0xee, 0xaa, 0x78, 0xfe, 0xf2, 0x5e, 0x6a, 0xa4, 0xe5, 0x66,
- 0xfc, 0xfa, 0x04, 0x28, 0x63, 0x47, 0x5b, 0x2a, 0x41, 0x3e, 0x33, 0x6a, 0x4f, 0x2a, 0x41, 0x6d,
- 0x47, 0xec, 0x79, 0xa8, 0x3e, 0xf4, 0x87, 0xf9, 0x63, 0x35, 0x13, 0x77, 0xce, 0xe7, 0x93, 0xba,
- 0x25, 0xe4, 0x4f, 0xe8, 0xa5, 0x4c, 0x72, 0x71, 0x94, 0x4e, 0xcf, 0x21, 0xba, 0x26, 0x06, 0xf4,
- 0x37, 0x75, 0x7b, 0x7b, 0x31, 0x61, 0x6f, 0xd4, 0xc2, 0xd6, 0x7c, 0xc2, 0x4f, 0x9d, 0x29, 0x23,
- 0xf9, 0xa4, 0xe3, 0xe4, 0xed, 0x68, 0xfe, 0x31, 0x95, 0xa7, 0x48, 0xf6, 0x2d, 0xc7, 0xfa, 0x46,
- 0x19, 0x5a, 0xf2, 0x44, 0x6d, 0x3a, 0x3a, 0xdf, 0x72, 0x82, 0x1e, 0xb1, 0x6c, 0xe2, 0x0b, 0xbb,
- 0x7d, 0xa5, 0xf0, 0xa8, 0x6e, 0xb7, 0x2f, 0x38, 0xb0, 0xe4, 0x35, 0x4f, 0x40, 0x2b, 0xca, 0xcd,
- 0x59, 0x94, 0x7d, 0xbf, 0x02, 0x0d, 0x71, 0x16, 0x37, 0x59, 0x89, 0xeb, 0xd0, 0x18, 0x5a, 0xfb,
- 0xde, 0x6e, 0xb4, 0x64, 0x3a, 0x53, 0x70, 0xbc, 0xb7, 0x7b, 0x97, 0x51, 0x63, 0xc1, 0x85, 0xde,
- 0x86, 0xfa, 0xd0, 0xd9, 0x71, 0x42, 0xe1, 0x3e, 0x4e, 0x17, 0xb2, 0xb3, 0x53, 0x3b, 0x9c, 0x87,
- 0x16, 0xce, 0x8e, 0xe0, 0x45, 0x17, 0x28, 0x0a, 0x0b, 0x7f, 0xc4, 0xa8, 0xb1, 0xe0, 0x32, 0x6f,
- 0x43, 0x83, 0x57, 0x67, 0xba, 0x41, 0x42, 0x6f, 0x49, 0xac, 0xe9, 0xac, 0x6e, 0x39, 0xb3, 0xd2,
- 0xe3, 0xd0, 0xe0, 0x85, 0xe7, 0x68, 0xcd, 0xf7, 0x9e, 0x63, 0xeb, 0x9d, 0xa1, 0x79, 0x37, 0xde,
- 0x70, 0xfc, 0xf0, 0x7b, 0x19, 0xe6, 0x03, 0x38, 0xb8, 0x6c, 0x85, 0xd6, 0x86, 0x15, 0x10, 0x4c,
- 0x06, 0x9e, 0x6f, 0x67, 0xa2, 0xfa, 0xfc, 0x93, 0x88, 0x50, 0xe7, 0xa3, 0x0a, 0xba, 0x9f, 0x84,
- 0x0e, 0xff, 0xe7, 0x84, 0x0e, 0x7f, 0xaf, 0x96, 0x13, 0xcf, 0x9b, 0x24, 0x92, 0x41, 0x15, 0x2e,
- 0x15, 0xd0, 0xbb, 0xaa, 0xcf, 0xbd, 0x4f, 0x15, 0x70, 0x6a, 0x93, 0xef, 0xab, 0x7a, 0x44, 0xaf,
- 0x88, 0x57, 0x0b, 0xe9, 0xdd, 0x4c, 0x86, 0xf4, 0xce, 0x14, 0x70, 0xa7, 0x62, 0x7a, 0x57, 0xf5,
- 0x98, 0x5e, 0x51, 0xe9, 0x6a, 0x50, 0xef, 0xff, 0x58, 0x18, 0xed, 0x57, 0x72, 0xc2, 0x3e, 0x1f,
- 0xd7, 0xc3, 0x3e, 0x63, 0xb4, 0xe6, 0xc7, 0x15, 0xf7, 0xf9, 0xd5, 0x46, 0x4e, 0xdc, 0xe7, 0x8a,
- 0x16, 0xf7, 0x19, 0x53, 0xb3, 0x64, 0xe0, 0xe7, 0xaa, 0x1e, 0xf8, 0x39, 0x55, 0xc0, 0xa9, 0x45,
- 0x7e, 0xae, 0x68, 0x91, 0x9f, 0xa2, 0x42, 0x95, 0xd0, 0xcf, 0x15, 0x2d, 0xf4, 0x53, 0xc4, 0xa8,
- 0xc4, 0x7e, 0xae, 0x68, 0xb1, 0x9f, 0x22, 0x46, 0x25, 0xf8, 0x73, 0x45, 0x0b, 0xfe, 0x14, 0x31,
- 0x2a, 0xd1, 0x9f, 0xab, 0x7a, 0xf4, 0xa7, 0xb8, 0x7f, 0x14, 0xa1, 0xff, 0x24, 0x50, 0xf3, 0x5f,
- 0x18, 0xa8, 0xf9, 0xf9, 0x6a, 0x4e, 0x00, 0x06, 0x67, 0x07, 0x60, 0xce, 0xe5, 0x4b, 0xb2, 0x38,
- 0x02, 0x33, 0xf9, 0x28, 0x90, 0x0e, 0xc1, 0x5c, 0x4b, 0x84, 0x60, 0x4e, 0x17, 0x30, 0xeb, 0x31,
- 0x98, 0xff, 0x35, 0x41, 0x86, 0xdf, 0x6e, 0x8c, 0x59, 0x4f, 0xbf, 0xa5, 0xae, 0xa7, 0xc7, 0x8c,
- 0x64, 0xe9, 0x05, 0xf5, 0x75, 0x7d, 0x41, 0x7d, 0x76, 0x02, 0x5e, 0x6d, 0x45, 0xbd, 0x96, 0xb5,
- 0xa2, 0xee, 0x4e, 0x80, 0x92, 0xbb, 0xa4, 0xbe, 0x9d, 0x5e, 0x52, 0x9f, 0x9b, 0x00, 0x2f, 0x73,
- 0x4d, 0xbd, 0x96, 0xb5, 0xa6, 0x9e, 0xa4, 0x76, 0xb9, 0x8b, 0xea, 0xb7, 0xb5, 0x45, 0xf5, 0xcb,
- 0x93, 0x74, 0x57, 0x3c, 0x38, 0x7c, 0x2a, 0x67, 0x55, 0xfd, 0xc6, 0x24, 0x30, 0xe3, 0x83, 0xd8,
- 0x3f, 0x59, 0x17, 0xeb, 0xc5, 0xfc, 0xd6, 0x8b, 0xd0, 0x8a, 0x0e, 0xda, 0x98, 0x9f, 0x87, 0x66,
- 0x74, 0x01, 0x33, 0xe3, 0xa4, 0xae, 0x58, 0xd4, 0xf1, 0xd9, 0xb3, 0x48, 0xa1, 0xeb, 0x50, 0xa3,
- 0xbf, 0x84, 0x59, 0xbc, 0x32, 0xd9, 0x81, 0x1e, 0x5a, 0x08, 0x66, 0x7c, 0xe6, 0xbf, 0x1e, 0x01,
- 0x50, 0xee, 0xa5, 0x4d, 0x5a, 0xec, 0xbb, 0xd4, 0x99, 0x0d, 0x43, 0xe2, 0xb3, 0x83, 0x5c, 0x85,
- 0xf7, 0xb6, 0xe2, 0x12, 0xa8, 0xb6, 0x84, 0xc4, 0xc7, 0x82, 0x1d, 0xdd, 0x83, 0x56, 0x14, 0x48,
- 0x65, 0x47, 0x9e, 0xf3, 0x94, 0x2c, 0x0b, 0x2a, 0x0a, 0xed, 0x61, 0x09, 0x81, 0x16, 0xa0, 0x16,
- 0x78, 0x7e, 0x28, 0xce, 0x47, 0xbf, 0x36, 0x31, 0xd4, 0xba, 0xe7, 0x87, 0x98, 0xb1, 0xf2, 0xa6,
- 0x29, 0xd7, 0xfe, 0xa7, 0x69, 0x9a, 0xe6, 0xb1, 0xff, 0xa5, 0x2a, 0x7d, 0xe8, 0x92, 0xb0, 0x46,
- 0xae, 0x43, 0xe7, 0x27, 0x97, 0x92, 0x6a, 0x95, 0x48, 0x4c, 0x82, 0xb8, 0x24, 0xf8, 0xfc, 0xe6,
- 0x15, 0xe8, 0x0c, 0xbc, 0x3d, 0xe2, 0xe3, 0xf8, 0x88, 0x93, 0x38, 0x85, 0x96, 0xca, 0x47, 0x26,
- 0xb4, 0xb6, 0x1d, 0x9b, 0xf4, 0x07, 0xc2, 0xff, 0xb5, 0xb0, 0x4c, 0xa3, 0x3b, 0xd0, 0x62, 0x31,
- 0xf6, 0x28, 0xc2, 0x3f, 0x5d, 0x25, 0x79, 0xa8, 0x3f, 0x02, 0xa0, 0x05, 0xb1, 0xc2, 0x6f, 0x39,
- 0x21, 0xeb, 0xc3, 0x16, 0x96, 0x69, 0x5a, 0x61, 0x76, 0x8e, 0x4c, 0xad, 0x70, 0x93, 0x57, 0x38,
- 0x99, 0x8f, 0x2e, 0xc1, 0x33, 0x2c, 0x2f, 0xb1, 0xc4, 0xe4, 0xa1, 0xfa, 0x16, 0xce, 0xfe, 0xc8,
- 0xce, 0xcd, 0x59, 0x5b, 0xfc, 0x92, 0x0f, 0x0b, 0xde, 0xd5, 0x71, 0x9c, 0x81, 0xce, 0xc1, 0x21,
- 0x9b, 0x6c, 0x5a, 0xbb, 0xc3, 0xf0, 0x01, 0xd9, 0x19, 0x0d, 0xad, 0x90, 0xf4, 0x6d, 0xf6, 0xf2,
- 0x40, 0x1b, 0xa7, 0x3f, 0xa0, 0xd7, 0xe1, 0xb0, 0xc8, 0xe4, 0x66, 0x4c, 0xa5, 0xd1, 0xb7, 0xd9,
- 0x45, 0xfc, 0x36, 0xce, 0xfa, 0x64, 0x7e, 0xaf, 0x46, 0x85, 0xce, 0x54, 0xfb, 0x5d, 0xa8, 0x5a,
- 0xb6, 0x2d, 0x86, 0xcd, 0x8b, 0x53, 0x1a, 0x88, 0xb8, 0x39, 0x42, 0x11, 0xd0, 0x9a, 0x3c, 0x72,
- 0xc7, 0x07, 0xce, 0xcb, 0xd3, 0x62, 0xc9, 0x07, 0x51, 0x04, 0x0e, 0x45, 0xdc, 0xe5, 0x37, 0x29,
- 0xaa, 0x3f, 0x1a, 0xa2, 0xbc, 0x9e, 0x22, 0x70, 0xd0, 0x6d, 0xa8, 0xb1, 0x1a, 0xf2, 0x81, 0xf5,
- 0xd2, 0xb4, 0x78, 0xf7, 0x78, 0xfd, 0x18, 0x86, 0x39, 0xe0, 0x67, 0xdf, 0x94, 0x03, 0x97, 0x65,
- 0xfd, 0xc0, 0xe5, 0x22, 0xd4, 0x9d, 0x90, 0xec, 0xa4, 0xcf, 0xdf, 0x8e, 0x55, 0x55, 0xe1, 0x79,
- 0x38, 0xeb, 0xd8, 0x73, 0x80, 0xef, 0xe7, 0x5e, 0x67, 0xb8, 0x09, 0x35, 0xca, 0x9e, 0x9a, 0x4b,
- 0x4e, 0x52, 0x30, 0xe3, 0x34, 0x2f, 0x40, 0x8d, 0x36, 0x76, 0x4c, 0xeb, 0x44, 0x7d, 0x2a, 0xb2,
- 0x3e, 0x8b, 0x33, 0xd0, 0xf6, 0x46, 0xc4, 0x67, 0x86, 0x61, 0xfe, 0x73, 0x4d, 0x39, 0x14, 0xd7,
- 0x57, 0x75, 0xec, 0xcd, 0xa9, 0x3d, 0xa7, 0xaa, 0x65, 0x38, 0xa1, 0x65, 0x6f, 0x4d, 0x8f, 0x96,
- 0xd2, 0x33, 0x9c, 0xd0, 0xb3, 0x1f, 0x01, 0x33, 0xa5, 0x69, 0x77, 0x35, 0x4d, 0xbb, 0x3c, 0x3d,
- 0xa2, 0xa6, 0x6b, 0xa4, 0x48, 0xd7, 0x96, 0x75, 0x5d, 0xeb, 0x4e, 0x26, 0x72, 0x39, 0x34, 0x4d,
- 0xa0, 0x6d, 0x9f, 0xc9, 0xd5, 0xb6, 0x45, 0x4d, 0xdb, 0xa6, 0x2d, 0xfa, 0x23, 0xd2, 0xb7, 0xef,
- 0xd4, 0xa0, 0x46, 0x87, 0x47, 0xb4, 0xa2, 0xea, 0xda, 0x1b, 0x53, 0x0d, 0xad, 0xaa, 0x9e, 0xad,
- 0x26, 0xf4, 0xec, 0xd2, 0x74, 0x48, 0x29, 0x1d, 0x5b, 0x4d, 0xe8, 0xd8, 0x94, 0x78, 0x29, 0xfd,
- 0xea, 0x69, 0xfa, 0x75, 0x61, 0x3a, 0x34, 0x4d, 0xb7, 0xac, 0x22, 0xdd, 0xba, 0xa9, 0xeb, 0xd6,
- 0x84, 0xb3, 0x37, 0x36, 0x57, 0x99, 0x40, 0xaf, 0xde, 0xcb, 0xd5, 0xab, 0xeb, 0x9a, 0x5e, 0x4d,
- 0x53, 0xec, 0x47, 0xa4, 0x53, 0x97, 0xf8, 0xa4, 0x33, 0xff, 0x56, 0x5a, 0xd6, 0xa4, 0xd3, 0x7c,
- 0x13, 0xda, 0xf1, 0xc3, 0x1e, 0x19, 0xc7, 0xf3, 0x39, 0x59, 0x54, 0x6a, 0x94, 0x34, 0x2f, 0x42,
- 0x3b, 0x7e, 0xac, 0x23, 0xeb, 0x06, 0x1c, 0xfb, 0x28, 0x6f, 0x4f, 0xb1, 0x94, 0xb9, 0x02, 0x87,
- 0xd2, 0x4f, 0x09, 0x64, 0xc4, 0xe1, 0x95, 0xb3, 0xe5, 0xd1, 0xed, 0x15, 0x25, 0xcb, 0x7c, 0x02,
- 0x73, 0x89, 0xc7, 0x01, 0xa6, 0xc6, 0x40, 0x17, 0x95, 0x29, 0x72, 0x35, 0x71, 0xd5, 0x54, 0x3f,
- 0x2d, 0x1f, 0x4f, 0x84, 0xcd, 0x65, 0x98, 0x2b, 0xa8, 0xfc, 0x24, 0x87, 0xe5, 0x3f, 0x0b, 0x33,
- 0xe3, 0xea, 0xfe, 0x11, 0x1c, 0xe6, 0x0f, 0xa1, 0x93, 0x7a, 0xd8, 0x24, 0x59, 0xcc, 0x1a, 0xc0,
- 0x96, 0xa4, 0x11, 0x4a, 0xfb, 0xfa, 0x14, 0x57, 0x17, 0x18, 0x1f, 0x56, 0x30, 0xcc, 0xdf, 0x2c,
- 0xc3, 0xa1, 0xf4, 0xab, 0x26, 0x93, 0x2e, 0x7e, 0x0c, 0x68, 0x32, 0x2c, 0x79, 0xe3, 0x23, 0x4a,
- 0xa2, 0x7b, 0x30, 0x1b, 0x0c, 0x9d, 0x01, 0x59, 0xda, 0xb6, 0xdc, 0x2d, 0x12, 0x88, 0x15, 0x4d,
- 0xc1, 0xcb, 0x24, 0xeb, 0x31, 0x07, 0xd6, 0xd8, 0xcd, 0x27, 0x30, 0xa3, 0x7c, 0x44, 0xef, 0x40,
- 0xc5, 0x1b, 0xa5, 0xce, 0x35, 0xe6, 0x63, 0xde, 0x8f, 0xec, 0x0d, 0x57, 0xbc, 0x51, 0xda, 0x24,
- 0x55, 0xf3, 0xad, 0x6a, 0xe6, 0x6b, 0xde, 0x81, 0x43, 0xe9, 0x87, 0x43, 0x92, 0xdd, 0x73, 0x26,
- 0x15, 0x25, 0xe0, 0xdd, 0x94, 0x5c, 0xf2, 0x5f, 0x81, 0x83, 0xc9, 0xe7, 0x40, 0x32, 0x6e, 0xe3,
- 0xc4, 0x97, 0x9a, 0xa2, 0x70, 0xfd, 0xfc, 0xcf, 0x95, 0x61, 0x4e, 0x6f, 0x08, 0x3a, 0x0a, 0x48,
- 0xcf, 0x59, 0xf5, 0x5c, 0xd2, 0x29, 0xa1, 0x67, 0xe0, 0x90, 0x9e, 0xbf, 0x60, 0xdb, 0x9d, 0x72,
- 0x9a, 0x9c, 0xba, 0xad, 0x4e, 0x05, 0x19, 0x70, 0x24, 0xd1, 0x43, 0xcc, 0x89, 0x76, 0xaa, 0xe8,
- 0x39, 0x78, 0x26, 0xf9, 0x65, 0x34, 0xb4, 0x06, 0xa4, 0x53, 0x33, 0x7f, 0x58, 0x81, 0xda, 0xc3,
- 0x80, 0xf8, 0xe6, 0x3f, 0x56, 0xa2, 0x5b, 0x1a, 0x6f, 0x41, 0x8d, 0xbd, 0xd4, 0xa1, 0xdc, 0xa0,
- 0x2c, 0x27, 0x6e, 0x50, 0x6a, 0xb7, 0xf0, 0xe2, 0x1b, 0x94, 0x6f, 0x41, 0x8d, 0xbd, 0xcd, 0x31,
- 0x3d, 0xe7, 0xd7, 0xcb, 0xd0, 0x8e, 0xdf, 0xc9, 0x98, 0x9a, 0x5f, 0xbd, 0x15, 0x52, 0xd1, 0x6f,
- 0x85, 0xbc, 0x02, 0x75, 0x9f, 0xdd, 0xdf, 0xe0, 0x5e, 0x26, 0x79, 0xd7, 0x84, 0x15, 0x88, 0x39,
- 0x89, 0x49, 0x60, 0x46, 0x7d, 0x05, 0x64, 0xfa, 0x6a, 0x9c, 0x12, 0x4f, 0x80, 0xf5, 0xed, 0x60,
- 0xc1, 0xf7, 0xad, 0x7d, 0xa1, 0x98, 0x7a, 0xa6, 0x79, 0x0c, 0x6a, 0x6b, 0x8e, 0xbb, 0x95, 0x7d,
- 0x71, 0xd5, 0xfc, 0xfd, 0x32, 0x34, 0xc5, 0xe1, 0x5d, 0xf3, 0x0a, 0x54, 0x57, 0xc9, 0x13, 0x5a,
- 0x11, 0x71, 0x6c, 0x38, 0x55, 0x91, 0x7b, 0xac, 0x15, 0x82, 0x1e, 0x47, 0x64, 0xe6, 0x55, 0x39,
- 0x4c, 0x4e, 0xcf, 0xfb, 0x16, 0xd4, 0xd8, 0xe3, 0x1d, 0xd3, 0x73, 0xfe, 0x41, 0x0b, 0x1a, 0xfc,
- 0xf6, 0xa7, 0xf9, 0x3b, 0x2d, 0x68, 0xf0, 0x07, 0x3d, 0xd0, 0x75, 0x68, 0x06, 0xbb, 0x3b, 0x3b,
- 0x96, 0xbf, 0x6f, 0x64, 0x5f, 0xbc, 0xd7, 0xde, 0xff, 0xe8, 0xae, 0x73, 0x5a, 0x1c, 0x31, 0xa1,
- 0x37, 0xa1, 0x36, 0xb0, 0x36, 0x49, 0x6a, 0x3b, 0x37, 0x8b, 0x79, 0xc9, 0xda, 0x24, 0x98, 0x91,
- 0xa3, 0x9b, 0xd0, 0x12, 0x62, 0x09, 0x44, 0x3c, 0x67, 0x7c, 0xb9, 0x91, 0x30, 0x25, 0x97, 0x79,
- 0x1b, 0x9a, 0xa2, 0x32, 0xe8, 0x86, 0xbc, 0xfb, 0x9a, 0x8c, 0x3c, 0x67, 0x36, 0x41, 0xbe, 0xf4,
- 0x20, 0x6f, 0xc1, 0xfe, 0x59, 0x05, 0x6a, 0xb4, 0x72, 0x1f, 0x1a, 0x09, 0x1d, 0x07, 0x18, 0x5a,
- 0x41, 0xb8, 0xb6, 0x3b, 0x1c, 0x12, 0x5b, 0xdc, 0xb0, 0x53, 0x72, 0xd0, 0x59, 0x38, 0xc8, 0x53,
- 0xc1, 0xf6, 0xfa, 0xee, 0x60, 0x40, 0xe4, 0xcd, 0xd2, 0x64, 0x36, 0x5a, 0x80, 0x3a, 0x7b, 0x62,
- 0x52, 0xcc, 0x0a, 0x5f, 0x2d, 0xec, 0xd9, 0xee, 0x9a, 0xe3, 0x8a, 0xda, 0x70, 0x4e, 0xd3, 0x83,
- 0xb6, 0xcc, 0xa3, 0x46, 0x38, 0x72, 0x5c, 0xd7, 0x71, 0xb7, 0x84, 0x46, 0x47, 0x49, 0x3a, 0xe8,
- 0xd0, 0x9f, 0xa2, 0xbe, 0x75, 0x2c, 0x52, 0x34, 0x7f, 0xd3, 0x72, 0x86, 0xa2, 0x8a, 0x75, 0x2c,
- 0x52, 0x14, 0x69, 0x57, 0x3c, 0x83, 0x52, 0x63, 0x0d, 0x8c, 0x92, 0xe6, 0x07, 0x65, 0x79, 0x01,
- 0x3c, 0xeb, 0x72, 0x66, 0x2a, 0x96, 0x74, 0x4c, 0x0d, 0x68, 0xf3, 0x01, 0x41, 0x09, 0x51, 0x1f,
- 0x85, 0x86, 0xe7, 0x0e, 0x1d, 0x97, 0x88, 0xd8, 0x91, 0x48, 0x25, 0xfa, 0xb8, 0x9e, 0xea, 0x63,
- 0xf1, 0x7d, 0xc5, 0x76, 0x68, 0x15, 0x1b, 0xf1, 0x77, 0x9e, 0x83, 0xae, 0x41, 0xd3, 0x26, 0x7b,
- 0xce, 0x80, 0x04, 0x46, 0x93, 0xa9, 0xde, 0xc9, 0xb1, 0x7d, 0xbb, 0xcc, 0x68, 0x71, 0xc4, 0x63,
- 0x86, 0xd0, 0xe0, 0x59, 0xb2, 0x49, 0x65, 0xa5, 0x49, 0x71, 0xa5, 0x2b, 0x63, 0x2a, 0x5d, 0x2d,
- 0xa8, 0x74, 0x2d, 0x59, 0xe9, 0xf9, 0x2f, 0x01, 0xc4, 0xea, 0x86, 0x66, 0xa0, 0xf9, 0xd0, 0x7d,
- 0xec, 0x7a, 0x4f, 0xdc, 0x4e, 0x89, 0x26, 0xee, 0x6f, 0x6e, 0xd2, 0x52, 0x3a, 0x65, 0x9a, 0xa0,
- 0x74, 0x8e, 0xbb, 0xd5, 0xa9, 0x20, 0x80, 0x06, 0x4d, 0x10, 0xbb, 0x53, 0xa5, 0xbf, 0x6f, 0x31,
- 0xf9, 0x75, 0x6a, 0xe8, 0x59, 0x38, 0xdc, 0x77, 0x07, 0xde, 0xce, 0xc8, 0x0a, 0x9d, 0x8d, 0x21,
- 0x79, 0x44, 0xfc, 0xc0, 0xf1, 0xdc, 0x4e, 0x9d, 0x8e, 0x5e, 0xab, 0x24, 0x7c, 0xe2, 0xf9, 0x8f,
- 0x57, 0x09, 0xb1, 0xc5, 0xeb, 0x25, 0x9d, 0x86, 0xf9, 0x1f, 0x65, 0xbe, 0x1b, 0x6c, 0xde, 0x84,
- 0x59, 0xed, 0xbd, 0x1e, 0x23, 0x7e, 0x3d, 0x3c, 0xf1, 0x78, 0xf8, 0x51, 0x16, 0xaf, 0x25, 0xf1,
- 0x54, 0x86, 0xa7, 0xcc, 0x5b, 0x00, 0xca, 0x2b, 0x3d, 0xc7, 0x01, 0x36, 0xf6, 0x43, 0x12, 0xf0,
- 0x17, 0x7a, 0x28, 0x44, 0x0d, 0x2b, 0x39, 0x2a, 0x7e, 0x45, 0xc3, 0x37, 0x2f, 0x03, 0x28, 0x6f,
- 0xf4, 0x50, 0xbb, 0xa2, 0xa9, 0xc5, 0x24, 0x58, 0x32, 0xdb, 0xec, 0x8a, 0x16, 0x44, 0xaf, 0xf1,
- 0x44, 0x35, 0xe0, 0xd1, 0x3b, 0xb5, 0x06, 0x2c, 0xc7, 0x5c, 0x01, 0x88, 0x1f, 0xa4, 0x31, 0xaf,
- 0x48, 0xd7, 0xfd, 0x1a, 0xd4, 0x6c, 0x2b, 0xb4, 0x84, 0xd7, 0x7c, 0x2e, 0x31, 0x72, 0xc5, 0x2c,
- 0x98, 0x91, 0x99, 0xbf, 0x51, 0x86, 0x59, 0xf5, 0xf1, 0x1d, 0xf3, 0x5d, 0xa8, 0xb1, 0xd7, 0x7b,
- 0x6e, 0xc0, 0xac, 0xfa, 0xfa, 0x4e, 0xea, 0x95, 0x75, 0x8e, 0xa7, 0xb2, 0x62, 0x8d, 0xc1, 0xec,
- 0xcb, 0x2a, 0x7d, 0x68, 0xa8, 0xd7, 0xa1, 0x29, 0x1e, 0xf3, 0x31, 0x4f, 0x43, 0x3b, 0x7e, 0xbb,
- 0x87, 0xfa, 0x0e, 0x9e, 0x1f, 0x49, 0x59, 0x24, 0xcd, 0x7f, 0xaa, 0x42, 0x9d, 0x89, 0xd3, 0xfc,
- 0x6a, 0x45, 0xd5, 0x50, 0xf3, 0x87, 0xe5, 0xdc, 0xb5, 0xe0, 0x45, 0xed, 0xa9, 0x82, 0xb9, 0xd4,
- 0x9b, 0x55, 0xe2, 0xa9, 0x1e, 0xdd, 0xb1, 0x5e, 0x86, 0xa6, 0xcb, 0x35, 0x53, 0xbc, 0x14, 0x70,
- 0x2c, 0x93, 0x4b, 0x68, 0x2f, 0x8e, 0x88, 0xd1, 0x25, 0xa8, 0x13, 0xdf, 0xf7, 0x7c, 0x66, 0x52,
- 0x73, 0xa9, 0xd7, 0x9f, 0xe2, 0x67, 0x81, 0x56, 0x28, 0x15, 0xe6, 0xc4, 0xe8, 0x12, 0x3c, 0x13,
- 0x70, 0x2b, 0xe2, 0x73, 0xca, 0x40, 0xdc, 0xab, 0x16, 0xde, 0x26, 0xfb, 0xe3, 0xfc, 0x27, 0xa2,
- 0x01, 0x56, 0x31, 0xbc, 0x92, 0x6a, 0x91, 0x65, 0xd4, 0x86, 0x3a, 0x2b, 0xa8, 0x53, 0x51, 0xcd,
- 0xb6, 0x9a, 0x63, 0x78, 0xb5, 0xf9, 0x8b, 0xd0, 0x14, 0xf9, 0x94, 0x7e, 0x81, 0xd7, 0xbd, 0x53,
- 0x42, 0xb3, 0xd0, 0x5a, 0x27, 0xc3, 0xcd, 0x9e, 0x17, 0x84, 0x9d, 0x32, 0x3a, 0x00, 0x6d, 0x66,
- 0x0b, 0xf7, 0xdd, 0xe1, 0x7e, 0xa7, 0x32, 0xff, 0x1e, 0xb4, 0x65, 0x8b, 0x50, 0x0b, 0x6a, 0xab,
- 0xbb, 0xc3, 0x61, 0xa7, 0xc4, 0xa6, 0xa6, 0xa1, 0xe7, 0x47, 0x81, 0xe9, 0x95, 0xa7, 0x74, 0x9c,
- 0xe9, 0x94, 0xf3, 0xbc, 0x41, 0x05, 0x75, 0x60, 0x56, 0x14, 0xce, 0xeb, 0x5c, 0x35, 0xbf, 0x5b,
- 0x86, 0xb6, 0x7c, 0xef, 0x88, 0xce, 0x0b, 0x23, 0x19, 0xe7, 0xfb, 0x81, 0x2b, 0x09, 0x69, 0xe7,
- 0x3f, 0x9f, 0x94, 0x90, 0xf8, 0x19, 0x98, 0x13, 0x2e, 0x37, 0xea, 0x7c, 0xee, 0x35, 0x13, 0xb9,
- 0xf3, 0xb7, 0x65, 0xaf, 0x77, 0x98, 0x89, 0x2d, 0x79, 0xae, 0x4b, 0x06, 0x21, 0xeb, 0xfb, 0x83,
- 0x30, 0xb3, 0xea, 0x85, 0x6b, 0x5e, 0x10, 0xd0, 0x96, 0xf1, 0x9e, 0x8a, 0xbf, 0x57, 0xd0, 0x1c,
- 0x40, 0x74, 0xd6, 0x8c, 0x3a, 0x49, 0xf3, 0xd7, 0xcb, 0xd0, 0xe0, 0xaf, 0x30, 0x99, 0xbf, 0x54,
- 0x86, 0x86, 0x78, 0x79, 0xe9, 0x15, 0xe8, 0xf8, 0x1e, 0x05, 0x8e, 0x16, 0x14, 0xfd, 0x65, 0xd1,
- 0xca, 0x54, 0x3e, 0x5d, 0xe3, 0x7a, 0x8a, 0x56, 0x88, 0x29, 0x80, 0x96, 0x87, 0xae, 0x02, 0xf0,
- 0x97, 0x9d, 0x1e, 0xec, 0xcb, 0x87, 0x2f, 0x92, 0x47, 0xcc, 0xc4, 0x5b, 0x50, 0x6c, 0x33, 0x46,
- 0xa1, 0x9e, 0xff, 0x22, 0x1c, 0xc0, 0x24, 0x18, 0x79, 0x6e, 0x40, 0x7e, 0x5c, 0xff, 0x6d, 0x22,
- 0xf7, 0xff, 0x46, 0xcc, 0x7f, 0xa7, 0x0e, 0x75, 0x36, 0xbb, 0x34, 0xff, 0xbc, 0x2e, 0xe7, 0xc1,
- 0x29, 0xfb, 0xbe, 0xa0, 0x1e, 0xf4, 0x51, 0x0d, 0x55, 0x9b, 0x98, 0xea, 0x07, 0x7c, 0xde, 0x86,
- 0xd6, 0xc8, 0xf7, 0xb6, 0x7c, 0x3a, 0x9f, 0xad, 0x25, 0x5e, 0x5a, 0xd2, 0xd9, 0xd6, 0x04, 0x19,
- 0x96, 0x0c, 0xaa, 0xf2, 0xd5, 0x75, 0xe5, 0xbb, 0x09, 0x6d, 0xdb, 0xf7, 0x46, 0xec, 0x8a, 0xba,
- 0xd8, 0x5c, 0x3b, 0x91, 0x83, 0xbb, 0x1c, 0xd1, 0xf5, 0x4a, 0x38, 0x66, 0xa2, 0xea, 0xcb, 0x7b,
- 0x5f, 0xec, 0x6b, 0xbf, 0x90, 0xc3, 0xce, 0xe5, 0xd5, 0x2b, 0x61, 0x41, 0x4e, 0x19, 0xc9, 0x53,
- 0xc6, 0xd8, 0x1a, 0xcb, 0xb8, 0xf2, 0x34, 0x62, 0xe4, 0xe4, 0xe8, 0x1a, 0xb4, 0x02, 0x6b, 0x8f,
- 0xb0, 0xb7, 0xa5, 0xdb, 0x63, 0xbb, 0x62, 0x5d, 0x90, 0xf5, 0x4a, 0x58, 0xb2, 0xd0, 0x26, 0xef,
- 0x38, 0x5b, 0x7c, 0x25, 0x29, 0x1e, 0xb8, 0xce, 0x6b, 0xf2, 0xbd, 0x88, 0x8e, 0xbd, 0x46, 0x1e,
- 0x25, 0xe8, 0xca, 0x87, 0xbb, 0xcc, 0x19, 0xbe, 0x6d, 0xcc, 0x12, 0xe6, 0x0c, 0xb4, 0x65, 0x17,
- 0x99, 0x2d, 0x69, 0x26, 0x2d, 0x68, 0xf0, 0x16, 0x98, 0x00, 0xad, 0xa8, 0x42, 0x94, 0x58, 0x82,
- 0x9b, 0xab, 0xd0, 0x8a, 0x84, 0x96, 0xf3, 0x2c, 0x05, 0x82, 0x9a, 0xed, 0x89, 0x29, 0x53, 0x15,
- 0xb3, 0xdf, 0x54, 0xa8, 0xea, 0x6b, 0x56, 0x6d, 0xf9, 0x54, 0xd3, 0xfc, 0x42, 0x74, 0x5e, 0x89,
- 0xba, 0x36, 0xbe, 0x18, 0x9f, 0x81, 0x26, 0xde, 0x65, 0xb3, 0xd9, 0x4e, 0x99, 0x66, 0xd3, 0x25,
- 0x52, 0xa7, 0x42, 0xbd, 0xe4, 0x92, 0xe5, 0x0e, 0xc8, 0x90, 0xcd, 0x80, 0xa4, 0xef, 0xad, 0x2d,
- 0xb6, 0x25, 0xf8, 0xe2, 0xb1, 0xbf, 0xf8, 0xe0, 0x78, 0xf9, 0xdb, 0x1f, 0x1c, 0x2f, 0x7f, 0xff,
- 0x83, 0xe3, 0xe5, 0x5f, 0xfc, 0xc1, 0xf1, 0xd2, 0xb7, 0x7f, 0x70, 0xbc, 0xf4, 0x77, 0x3f, 0x38,
- 0x5e, 0x7a, 0xbf, 0x32, 0xda, 0xd8, 0x68, 0xb0, 0x33, 0x27, 0x17, 0xff, 0x33, 0x00, 0x00, 0xff,
- 0xff, 0x44, 0x23, 0x56, 0xe9, 0x44, 0x66, 0x00, 0x00,
+ // 6409 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5d, 0x59, 0x8c, 0x1c, 0xc7,
+ 0x79, 0x9e, 0xfb, 0xf8, 0x77, 0xb9, 0x1c, 0x16, 0x29, 0xaa, 0xd5, 0xa2, 0x28, 0x6a, 0x79, 0x88,
+ 0x96, 0xa8, 0xa1, 0x44, 0x52, 0xa4, 0x4c, 0x89, 0xc7, 0x5e, 0xd4, 0x0c, 0x8f, 0xe5, 0xba, 0x96,
+ 0xa4, 0x65, 0xd9, 0x08, 0xdc, 0x3b, 0x5d, 0xbb, 0xdb, 0xe6, 0x6c, 0xf7, 0xb8, 0xbb, 0x77, 0xc9,
+ 0xf5, 0x15, 0xc7, 0x47, 0x82, 0x00, 0x09, 0x92, 0x87, 0x20, 0x09, 0xf2, 0x12, 0x20, 0x88, 0x81,
+ 0x3c, 0x04, 0x41, 0x80, 0x20, 0x40, 0xf2, 0x92, 0x04, 0x08, 0x72, 0x27, 0x80, 0xfd, 0x96, 0x17,
+ 0xc7, 0x8e, 0xfc, 0x92, 0x97, 0x3c, 0x38, 0x01, 0x82, 0x3c, 0x06, 0x75, 0x74, 0x75, 0x55, 0x1f,
+ 0xd3, 0x33, 0x96, 0x9c, 0x03, 0xf1, 0xd3, 0x4e, 0x55, 0xfd, 0xdf, 0x57, 0xd7, 0x5f, 0x7f, 0x55,
+ 0xfd, 0x55, 0x5d, 0x0b, 0x47, 0x47, 0x1b, 0xe7, 0x47, 0xbe, 0x17, 0x7a, 0xc1, 0x79, 0xb2, 0x47,
+ 0xdc, 0x30, 0xe8, 0xb2, 0x10, 0x6a, 0x5a, 0xee, 0x7e, 0xb8, 0x3f, 0x22, 0xe6, 0xa9, 0xd1, 0xe3,
+ 0xad, 0xf3, 0x43, 0x67, 0xe3, 0xfc, 0x68, 0xe3, 0xfc, 0x8e, 0x67, 0x93, 0x61, 0x24, 0xce, 0x02,
+ 0x42, 0xdc, 0x3c, 0xb6, 0xe5, 0x79, 0x5b, 0x43, 0xc2, 0xd3, 0x36, 0x76, 0x37, 0xcf, 0x07, 0xa1,
+ 0xbf, 0x3b, 0x08, 0x79, 0xea, 0xfc, 0x1f, 0xfe, 0x65, 0x19, 0xea, 0x2b, 0x94, 0x1e, 0x5d, 0x80,
+ 0xd6, 0x0e, 0x09, 0x02, 0x6b, 0x8b, 0x04, 0x46, 0xf9, 0x44, 0xf5, 0xec, 0xcc, 0x85, 0xa3, 0x5d,
+ 0x91, 0x55, 0x97, 0x49, 0x74, 0xef, 0xf1, 0x64, 0x2c, 0xe5, 0xd0, 0x31, 0x68, 0x0f, 0x3c, 0x37,
+ 0x24, 0x4f, 0xc3, 0xbe, 0x6d, 0x54, 0x4e, 0x94, 0xcf, 0xb6, 0x71, 0x1c, 0x81, 0x2e, 0x41, 0xdb,
+ 0x71, 0x9d, 0xd0, 0xb1, 0x42, 0xcf, 0x37, 0xaa, 0x27, 0xca, 0x1a, 0x25, 0x2b, 0x64, 0x77, 0x61,
+ 0x30, 0xf0, 0x76, 0xdd, 0x10, 0xc7, 0x82, 0xc8, 0x80, 0x66, 0xe8, 0x5b, 0x03, 0xd2, 0xb7, 0x8d,
+ 0x1a, 0x63, 0x8c, 0x82, 0xe6, 0xb7, 0x2f, 0x42, 0x53, 0x94, 0x01, 0x3d, 0x07, 0xcd, 0x60, 0xc4,
+ 0xa5, 0xbe, 0x51, 0xe6, 0x62, 0x22, 0x8c, 0x6e, 0xc0, 0x8c, 0xc5, 0x69, 0xd7, 0xb7, 0xbd, 0x27,
+ 0x46, 0x99, 0x65, 0xfc, 0x7c, 0xa2, 0x2e, 0x22, 0xe3, 0x2e, 0x15, 0xe9, 0x95, 0xb0, 0x8a, 0x40,
+ 0x7d, 0x98, 0x13, 0xc1, 0x65, 0x12, 0x5a, 0xce, 0x30, 0x30, 0xfe, 0x86, 0x93, 0x1c, 0xcf, 0x21,
+ 0x11, 0x62, 0xbd, 0x12, 0x4e, 0x00, 0xd1, 0xa7, 0xe0, 0xb0, 0x88, 0x59, 0xf2, 0xdc, 0x4d, 0x67,
+ 0xeb, 0xe1, 0xc8, 0xb6, 0x42, 0x62, 0xfc, 0x2d, 0xe7, 0x3b, 0x95, 0xc3, 0xc7, 0x65, 0xbb, 0x5c,
+ 0xb8, 0x57, 0xc2, 0x59, 0x1c, 0xe8, 0x16, 0x1c, 0x10, 0xd1, 0x82, 0xf4, 0xef, 0x38, 0xe9, 0x0b,
+ 0x39, 0xa4, 0x92, 0x4d, 0x87, 0xa1, 0x4f, 0xc3, 0x11, 0x11, 0x71, 0xd7, 0x71, 0x1f, 0x2f, 0x6d,
+ 0x5b, 0xc3, 0x21, 0x71, 0xb7, 0x88, 0xf1, 0xf7, 0xe3, 0xcb, 0xa8, 0x09, 0xf7, 0x4a, 0x38, 0x93,
+ 0x04, 0x6d, 0x81, 0x91, 0x15, 0xdf, 0x73, 0x6c, 0x62, 0xfc, 0x03, 0xcf, 0xe0, 0xec, 0x44, 0x19,
+ 0x38, 0x36, 0xcd, 0x24, 0x97, 0x0c, 0xdd, 0x87, 0x8e, 0xb7, 0xf1, 0x39, 0x32, 0x88, 0x5a, 0x7e,
+ 0x9d, 0x84, 0x46, 0x87, 0xf1, 0xbf, 0x94, 0xe0, 0xbf, 0xcf, 0xc4, 0xa2, 0x3e, 0xeb, 0xae, 0x93,
+ 0xb0, 0x57, 0xc2, 0x29, 0x30, 0x7a, 0x08, 0x48, 0x8b, 0x5b, 0xd8, 0x21, 0xae, 0x6d, 0x5c, 0x60,
+ 0x94, 0x27, 0xc7, 0x53, 0x32, 0xd1, 0x5e, 0x09, 0x67, 0x10, 0xa4, 0x68, 0x1f, 0xba, 0x01, 0x09,
+ 0x8d, 0x8b, 0x93, 0xd0, 0x32, 0xd1, 0x14, 0x2d, 0x8b, 0xa5, 0x9d, 0xc8, 0x63, 0x31, 0x19, 0x5a,
+ 0xa1, 0xe3, 0xb9, 0xa2, 0xbc, 0x97, 0x18, 0xf1, 0xe9, 0x6c, 0x62, 0x29, 0x2b, 0x4b, 0x9c, 0x49,
+ 0x82, 0x7e, 0x0a, 0x9e, 0x49, 0xc4, 0x63, 0xb2, 0xe3, 0xed, 0x11, 0xe3, 0x4d, 0xc6, 0x7e, 0xa6,
+ 0x88, 0x9d, 0x4b, 0xf7, 0x4a, 0x38, 0x9b, 0x06, 0x2d, 0xc2, 0x6c, 0x94, 0xc0, 0x68, 0x2f, 0x33,
+ 0xda, 0x63, 0x79, 0xb4, 0x82, 0x4c, 0xc3, 0xd0, 0x41, 0xcf, 0xc3, 0x4b, 0x43, 0x2f, 0x20, 0xc6,
+ 0x42, 0xe6, 0xa0, 0x17, 0x14, 0x4c, 0x84, 0x0e, 0x7a, 0x05, 0xa1, 0x56, 0x32, 0x08, 0x7d, 0x67,
+ 0xc0, 0x0a, 0x48, 0xb5, 0xe8, 0xca, 0xf8, 0x4a, 0xc6, 0xc2, 0x42, 0x95, 0xb2, 0x69, 0x10, 0x86,
+ 0x83, 0xc1, 0xee, 0x46, 0x30, 0xf0, 0x9d, 0x11, 0x8d, 0x5b, 0xb0, 0x6d, 0xe3, 0x9d, 0x71, 0xcc,
+ 0xeb, 0x8a, 0x70, 0x77, 0xc1, 0xa6, 0xbd, 0x93, 0x24, 0x40, 0x9f, 0x06, 0xa4, 0x46, 0x89, 0xe6,
+ 0xbb, 0xc6, 0x68, 0x3f, 0x36, 0x01, 0xad, 0x6c, 0xcb, 0x0c, 0x1a, 0x64, 0xc1, 0x11, 0x35, 0x76,
+ 0xcd, 0x0b, 0x1c, 0xfa, 0xd7, 0xb8, 0xce, 0xe8, 0x5f, 0x9d, 0x80, 0x3e, 0x82, 0x50, 0xc5, 0xca,
+ 0xa2, 0x4a, 0x66, 0xb1, 0x44, 0x87, 0x36, 0xf1, 0x03, 0xe3, 0xc6, 0xc4, 0x59, 0x44, 0x90, 0x64,
+ 0x16, 0x51, 0x7c, 0xb2, 0x89, 0xde, 0xf5, 0xbd, 0xdd, 0x51, 0x60, 0xdc, 0x9c, 0xb8, 0x89, 0x38,
+ 0x20, 0xd9, 0x44, 0x3c, 0x16, 0x5d, 0x86, 0xd6, 0xc6, 0xd0, 0x1b, 0x3c, 0xa6, 0x9d, 0x59, 0x61,
+ 0x94, 0x46, 0x82, 0x72, 0x91, 0x26, 0x8b, 0xee, 0x93, 0xb2, 0x54, 0x59, 0xd9, 0xef, 0x65, 0x32,
+ 0x24, 0x21, 0x11, 0x53, 0xe3, 0xf3, 0x99, 0x50, 0x2e, 0x42, 0x95, 0x55, 0x41, 0xa0, 0x65, 0x98,
+ 0xd9, 0x74, 0x86, 0x24, 0x78, 0x38, 0x1a, 0x7a, 0x16, 0x9f, 0x27, 0x67, 0x2e, 0x9c, 0xc8, 0x24,
+ 0xb8, 0x15, 0xcb, 0x51, 0x16, 0x05, 0x86, 0xae, 0x43, 0x7b, 0xc7, 0xf2, 0x1f, 0x07, 0x7d, 0x77,
+ 0xd3, 0x33, 0xea, 0x99, 0x33, 0x1c, 0xe7, 0xb8, 0x17, 0x49, 0xf5, 0x4a, 0x38, 0x86, 0xd0, 0x79,
+ 0x92, 0x15, 0x6a, 0x9d, 0x84, 0xb7, 0x1c, 0x32, 0xb4, 0x03, 0xa3, 0xc1, 0x48, 0x5e, 0xcc, 0x24,
+ 0x59, 0x27, 0x61, 0x97, 0x8b, 0xd1, 0x79, 0x52, 0x07, 0xa2, 0xf7, 0xe0, 0x70, 0x14, 0xb3, 0xb4,
+ 0xed, 0x0c, 0x6d, 0x9f, 0xb8, 0x7d, 0x3b, 0x30, 0x9a, 0x99, 0x53, 0x50, 0xcc, 0xa7, 0xc8, 0xd2,
+ 0x69, 0x32, 0x83, 0x82, 0x5a, 0xc6, 0x28, 0x5a, 0x1d, 0x92, 0x46, 0x2b, 0xd3, 0x32, 0xc6, 0xd4,
+ 0xaa, 0x30, 0xd5, 0xae, 0x2c, 0x12, 0x64, 0xc3, 0xb3, 0x51, 0xfc, 0xa2, 0x35, 0x78, 0xbc, 0xe5,
+ 0x7b, 0xbb, 0xae, 0xbd, 0xe4, 0x0d, 0x3d, 0xdf, 0x68, 0x67, 0x4e, 0x6e, 0x31, 0x7f, 0x42, 0xbe,
+ 0x57, 0xc2, 0x79, 0x54, 0x68, 0x09, 0x66, 0xa3, 0xa4, 0x07, 0xe4, 0x69, 0x68, 0x40, 0xe6, 0x3c,
+ 0x1f, 0x53, 0x53, 0x21, 0x6a, 0x20, 0x55, 0x90, 0x4a, 0x42, 0x55, 0xc2, 0x98, 0x29, 0x20, 0xa1,
+ 0x42, 0x2a, 0x09, 0x0d, 0xab, 0x24, 0x74, 0x0a, 0x36, 0x0e, 0x14, 0x90, 0x50, 0x21, 0x95, 0x84,
+ 0x86, 0xe9, 0x54, 0x2d, 0x6b, 0xea, 0x79, 0x8f, 0xa9, 0x3e, 0x19, 0x73, 0x99, 0x53, 0xb5, 0xd2,
+ 0x5a, 0x42, 0x90, 0x4e, 0xd5, 0x49, 0x30, 0x5d, 0x09, 0x45, 0x71, 0x0b, 0x43, 0x67, 0xcb, 0x35,
+ 0x0e, 0x8e, 0xd1, 0x65, 0xca, 0xc6, 0xa4, 0xe8, 0x4a, 0x48, 0x83, 0xa1, 0x9b, 0x62, 0x58, 0xae,
+ 0x93, 0x70, 0xd9, 0xd9, 0x33, 0x0e, 0x65, 0x4e, 0x43, 0x31, 0xcb, 0xb2, 0xb3, 0x27, 0xc7, 0x25,
+ 0x87, 0xa8, 0x55, 0x8b, 0x26, 0x39, 0xe3, 0x99, 0x82, 0xaa, 0x45, 0x82, 0x6a, 0xd5, 0xa2, 0x38,
+ 0xb5, 0x6a, 0x77, 0xad, 0x90, 0x3c, 0x35, 0x9e, 0x2b, 0xa8, 0x1a, 0x93, 0x52, 0xab, 0xc6, 0x22,
+ 0xe8, 0xec, 0x16, 0x45, 0x3c, 0x22, 0x7e, 0xe8, 0x0c, 0xac, 0x21, 0x6f, 0xaa, 0x53, 0x99, 0x73,
+ 0x50, 0xcc, 0xa7, 0x49, 0xd3, 0xd9, 0x2d, 0x93, 0x46, 0xad, 0xf8, 0x03, 0x6b, 0x63, 0x48, 0xb0,
+ 0xf7, 0xc4, 0x38, 0x5d, 0x50, 0xf1, 0x48, 0x50, 0xad, 0x78, 0x14, 0xa7, 0xda, 0x96, 0x4f, 0x3a,
+ 0xf6, 0x16, 0x09, 0x8d, 0xb3, 0x05, 0xb6, 0x85, 0x8b, 0xa9, 0xb6, 0x85, 0xc7, 0x48, 0x0b, 0xb0,
+ 0x6c, 0x85, 0xd6, 0x9e, 0x43, 0x9e, 0x3c, 0x72, 0xc8, 0x13, 0x3a, 0xb1, 0x1f, 0x1e, 0x63, 0x01,
+ 0x22, 0xd9, 0xae, 0x10, 0x96, 0x16, 0x20, 0x41, 0x22, 0x2d, 0x80, 0x1a, 0x2f, 0xcc, 0xfa, 0x91,
+ 0x31, 0x16, 0x40, 0xe3, 0x97, 0x36, 0x3e, 0x8f, 0x0a, 0x59, 0x70, 0x34, 0x95, 0x74, 0xdf, 0xb7,
+ 0x89, 0x6f, 0xbc, 0xc0, 0x32, 0x79, 0xb9, 0x38, 0x13, 0x26, 0xde, 0x2b, 0xe1, 0x1c, 0xa2, 0x54,
+ 0x16, 0xeb, 0xde, 0xae, 0x3f, 0x20, 0xb4, 0x9d, 0x4e, 0x4e, 0x92, 0x85, 0x14, 0x4f, 0x65, 0x21,
+ 0x53, 0xd0, 0x1e, 0xbc, 0x20, 0x53, 0x68, 0xc6, 0x6c, 0x16, 0x65, 0xb9, 0x8b, 0x1d, 0xcc, 0x19,
+ 0x96, 0x53, 0x77, 0x7c, 0x4e, 0x49, 0x54, 0xaf, 0x84, 0xc7, 0xd3, 0xa2, 0x7d, 0x38, 0xae, 0x09,
+ 0xf0, 0x79, 0x5e, 0xcd, 0xf8, 0x65, 0x96, 0xf1, 0xf9, 0xf1, 0x19, 0xa7, 0x60, 0xbd, 0x12, 0x2e,
+ 0x20, 0x46, 0x23, 0x78, 0x5e, 0x6b, 0x8c, 0x68, 0x60, 0x0b, 0x15, 0xf9, 0x12, 0xcb, 0xf7, 0xdc,
+ 0xf8, 0x7c, 0x75, 0x4c, 0xaf, 0x84, 0xc7, 0x51, 0xd2, 0x1d, 0x57, 0x66, 0x32, 0xed, 0xc9, 0x2f,
+ 0x66, 0x2e, 0x7b, 0x72, 0xb2, 0xe3, 0x7d, 0x99, 0x4b, 0x96, 0xa9, 0xf9, 0xa2, 0x39, 0xbf, 0x3c,
+ 0xa9, 0xe6, 0xcb, 0x76, 0xcc, 0xa3, 0xd2, 0xfa, 0x8e, 0x26, 0x3d, 0xb0, 0xfc, 0x2d, 0x12, 0xf2,
+ 0x86, 0xee, 0xdb, 0xb4, 0x52, 0x5f, 0x99, 0xa4, 0xef, 0x52, 0x30, 0xad, 0xef, 0x32, 0x89, 0x51,
+ 0x00, 0xc7, 0x34, 0x89, 0x7e, 0xb0, 0xe4, 0x0d, 0x87, 0x64, 0x10, 0xb5, 0xe6, 0x4f, 0xb3, 0x8c,
+ 0x5f, 0x1b, 0x9f, 0x71, 0x02, 0xd4, 0x2b, 0xe1, 0xb1, 0xa4, 0xa9, 0xfa, 0xde, 0x1f, 0xda, 0x09,
+ 0x9d, 0x31, 0x26, 0xd2, 0xd5, 0x24, 0x2c, 0x55, 0xdf, 0x94, 0x44, 0x4a, 0x57, 0x15, 0x09, 0x5a,
+ 0xdd, 0x67, 0x27, 0xd1, 0x55, 0x1d, 0x93, 0xd2, 0x55, 0x3d, 0x99, 0xce, 0x6e, 0xbb, 0x01, 0xf1,
+ 0x19, 0xc7, 0x6d, 0xcf, 0x71, 0x8d, 0x17, 0x33, 0x67, 0xb7, 0x87, 0x01, 0xf1, 0x45, 0x46, 0x54,
+ 0x8a, 0xce, 0x6e, 0x1a, 0x4c, 0xe3, 0xb9, 0x4b, 0x36, 0x43, 0xe3, 0x44, 0x11, 0x0f, 0x95, 0xd2,
+ 0x78, 0x68, 0x04, 0x9d, 0x29, 0x64, 0xc4, 0x3a, 0xa1, 0xbd, 0x82, 0x2d, 0x77, 0x8b, 0x18, 0x2f,
+ 0x65, 0xce, 0x14, 0x0a, 0x9d, 0x22, 0x4c, 0x67, 0x8a, 0x2c, 0x12, 0xba, 0xf3, 0x97, 0xf1, 0x74,
+ 0x45, 0xc6, 0xa9, 0xe7, 0x33, 0x77, 0xfe, 0x0a, 0xb5, 0x14, 0xa5, 0x7b, 0x90, 0x34, 0x01, 0xfa,
+ 0x18, 0xd4, 0x46, 0x8e, 0xbb, 0x65, 0xd8, 0x8c, 0xe8, 0x70, 0x82, 0x68, 0xcd, 0x71, 0xb7, 0x7a,
+ 0x25, 0xcc, 0x44, 0xd0, 0x3b, 0x00, 0x23, 0xdf, 0x1b, 0x90, 0x20, 0x58, 0x25, 0x4f, 0x0c, 0xc2,
+ 0x00, 0x66, 0x12, 0xc0, 0x05, 0xba, 0xab, 0x84, 0xce, 0xcb, 0x8a, 0x3c, 0x5a, 0x81, 0x03, 0x22,
+ 0x24, 0x46, 0xf9, 0x66, 0xe6, 0xe2, 0x2f, 0x22, 0x88, 0xdd, 0x4d, 0x1a, 0x8a, 0xee, 0x7d, 0x44,
+ 0xc4, 0xb2, 0xe7, 0x12, 0x63, 0x2b, 0x73, 0xef, 0x13, 0x91, 0x50, 0x11, 0xba, 0xc6, 0x52, 0x10,
+ 0x68, 0x11, 0x66, 0xc3, 0x6d, 0x9f, 0x58, 0xf6, 0x7a, 0x68, 0x85, 0xbb, 0x81, 0xe1, 0x66, 0x2e,
+ 0xd3, 0x78, 0x62, 0xf7, 0x01, 0x93, 0xa4, 0x4b, 0x50, 0x15, 0x83, 0x56, 0xa1, 0x43, 0x37, 0x42,
+ 0x77, 0x9d, 0x1d, 0x27, 0xc4, 0xc4, 0x1a, 0x6c, 0x13, 0xdb, 0xf0, 0x32, 0x37, 0x51, 0x74, 0xd9,
+ 0xdb, 0x55, 0xe5, 0xe8, 0x6a, 0x25, 0x89, 0x45, 0x3d, 0x98, 0xa3, 0x71, 0xeb, 0x23, 0x6b, 0x40,
+ 0x1e, 0x06, 0xd6, 0x16, 0x31, 0x46, 0x99, 0x1a, 0xc8, 0xd8, 0x62, 0x29, 0xba, 0x58, 0xd1, 0x71,
+ 0x11, 0xd3, 0x5d, 0x6f, 0x60, 0x0d, 0x39, 0xd3, 0xe7, 0xf3, 0x99, 0x62, 0xa9, 0x88, 0x29, 0x8e,
+ 0xd1, 0xea, 0xc8, 0xdb, 0xde, 0x36, 0xf6, 0x0a, 0xea, 0x28, 0xe4, 0xb4, 0x3a, 0x8a, 0x38, 0xca,
+ 0xe7, 0x7a, 0xa1, 0xb3, 0xe9, 0x0c, 0xc4, 0xf8, 0x75, 0x6d, 0xc3, 0xcf, 0xe4, 0x5b, 0x55, 0xc4,
+ 0xba, 0xeb, 0xdc, 0xb3, 0x94, 0xc2, 0xa2, 0x07, 0x80, 0xd4, 0x38, 0xa1, 0x54, 0x01, 0x63, 0x9c,
+ 0x1f, 0xc7, 0x28, 0x35, 0x2b, 0x03, 0x4f, 0x4b, 0x39, 0xb2, 0xf6, 0xe9, 0xf6, 0x76, 0xd1, 0xf7,
+ 0x2c, 0x7b, 0x60, 0x05, 0xa1, 0x11, 0x66, 0x96, 0x72, 0x8d, 0x8b, 0x75, 0xa5, 0x1c, 0x2d, 0x65,
+ 0x12, 0x4b, 0xf9, 0x76, 0xc8, 0xce, 0x06, 0xf1, 0x83, 0x6d, 0x67, 0x24, 0xca, 0xb8, 0x9b, 0xc9,
+ 0x77, 0x4f, 0x8a, 0xc5, 0x25, 0x4c, 0x61, 0xe9, 0x42, 0x9c, 0xf9, 0xa9, 0xd7, 0xf7, 0xdd, 0x01,
+ 0x57, 0x46, 0x41, 0xfa, 0x24, 0x73, 0x21, 0xce, 0x34, 0xa3, 0x1b, 0x0b, 0xc7, 0xd4, 0xd9, 0x34,
+ 0xe8, 0x7d, 0x38, 0xc2, 0x12, 0x16, 0x76, 0x43, 0x8f, 0xaf, 0x7f, 0x17, 0x6c, 0x9b, 0xd8, 0xc6,
+ 0x17, 0x32, 0x77, 0xd2, 0x9c, 0x3e, 0x21, 0xcb, 0x7c, 0x29, 0x19, 0x1c, 0xe8, 0x0e, 0x1c, 0x1c,
+ 0x5d, 0x18, 0x69, 0xa5, 0x7e, 0x9a, 0xb9, 0x28, 0x5f, 0xbb, 0xb0, 0x96, 0x2c, 0x6e, 0x12, 0x49,
+ 0x87, 0xb1, 0xb3, 0x33, 0xf2, 0xfc, 0xf0, 0x96, 0xe3, 0x3a, 0xc1, 0xb6, 0xb1, 0x9f, 0x39, 0x8c,
+ 0xfb, 0x4c, 0xa4, 0xcb, 0x65, 0xe8, 0x30, 0x56, 0x31, 0xe8, 0x12, 0x34, 0x07, 0xdb, 0x16, 0x2d,
+ 0x9d, 0xf1, 0x55, 0xee, 0x4c, 0x7e, 0x36, 0x81, 0x5f, 0xda, 0xb6, 0x42, 0xe1, 0x7e, 0x89, 0x44,
+ 0xd1, 0x35, 0x00, 0xfa, 0x53, 0xd4, 0xe0, 0x67, 0xca, 0x99, 0x76, 0x90, 0x01, 0x65, 0xe9, 0x15,
+ 0x00, 0x7a, 0x0f, 0x0e, 0xc7, 0x21, 0x6a, 0x00, 0xb8, 0x3f, 0xe1, 0x6b, 0xe5, 0x4c, 0x4b, 0xae,
+ 0xf0, 0x48, 0xd9, 0x5e, 0x09, 0x67, 0x51, 0xd0, 0xe9, 0x47, 0x8b, 0x8e, 0x2c, 0xdc, 0xcf, 0x66,
+ 0x7b, 0xe2, 0x75, 0x6a, 0x21, 0x4c, 0x3b, 0x2f, 0x8b, 0x24, 0xaa, 0xb5, 0x58, 0x44, 0x7c, 0x7d,
+ 0x4c, 0xad, 0xe5, 0x82, 0x41, 0x01, 0xa0, 0xbb, 0x70, 0x90, 0x86, 0x28, 0x19, 0x11, 0x2d, 0xf7,
+ 0xcd, 0x72, 0x66, 0xe7, 0x2b, 0xc5, 0x62, 0xd2, 0xb4, 0xf3, 0x13, 0xd0, 0xc5, 0x26, 0xd4, 0xf7,
+ 0xac, 0xe1, 0x2e, 0x31, 0xbf, 0x5b, 0x87, 0x1a, 0x05, 0x98, 0xff, 0x54, 0x86, 0x2a, 0xed, 0x9c,
+ 0x39, 0xa8, 0x38, 0xb6, 0xc1, 0x4f, 0x74, 0x2a, 0x8e, 0x8d, 0x0c, 0x68, 0x7a, 0x74, 0x3d, 0x2d,
+ 0xcf, 0x97, 0xa2, 0x20, 0x9a, 0x87, 0x59, 0x6b, 0x33, 0x24, 0xfe, 0x7d, 0x91, 0xdc, 0x60, 0xc9,
+ 0x5a, 0x1c, 0x55, 0x10, 0x71, 0x56, 0x25, 0x9c, 0x6c, 0x66, 0xe2, 0xfc, 0x89, 0xe6, 0x1d, 0x1d,
+ 0x6b, 0x45, 0xa2, 0xe8, 0x28, 0x34, 0x82, 0xdd, 0x8d, 0xbe, 0x1d, 0x18, 0xb5, 0x13, 0xd5, 0xb3,
+ 0x6d, 0x2c, 0x42, 0xe8, 0x6d, 0x98, 0xb5, 0xc9, 0x88, 0xb8, 0x36, 0x71, 0x07, 0x0e, 0x09, 0x8c,
+ 0x3a, 0x3b, 0x25, 0x7b, 0xb6, 0xcb, 0x4f, 0xd8, 0xba, 0xd1, 0x09, 0x5b, 0x77, 0x9d, 0x9d, 0xb0,
+ 0x61, 0x4d, 0xd8, 0xfc, 0x2c, 0x34, 0x44, 0x53, 0x26, 0xab, 0x18, 0x67, 0x57, 0xd1, 0xb2, 0xeb,
+ 0x42, 0x3d, 0xa0, 0x6d, 0x26, 0x8a, 0x6e, 0x64, 0x14, 0x9d, 0xb5, 0x29, 0xe6, 0x62, 0xe6, 0x26,
+ 0x34, 0x84, 0x8a, 0x26, 0x73, 0x50, 0x9a, 0xa1, 0xf2, 0xa3, 0x34, 0x43, 0x55, 0x2d, 0x97, 0xf9,
+ 0x65, 0x38, 0x98, 0xd4, 0xdc, 0x64, 0x86, 0x8b, 0xd0, 0xf6, 0xe5, 0xc8, 0xa8, 0x24, 0xb4, 0x37,
+ 0x95, 0x65, 0x57, 0x12, 0xe1, 0x18, 0x96, 0x9b, 0xfd, 0x03, 0xe8, 0xa4, 0x94, 0xbb, 0x03, 0x55,
+ 0xc7, 0xe6, 0xc7, 0x96, 0x6d, 0x4c, 0x7f, 0x52, 0xb4, 0x13, 0x50, 0x09, 0x96, 0x7d, 0x0b, 0x8b,
+ 0x50, 0x2e, 0xeb, 0x43, 0x98, 0x51, 0x74, 0x36, 0x6e, 0xfb, 0xf2, 0x44, 0x6d, 0x9f, 0xd7, 0x87,
+ 0xe6, 0xb7, 0x1a, 0xd0, 0x14, 0x07, 0x5a, 0xe6, 0x2a, 0xd4, 0xd8, 0xf1, 0xe2, 0x11, 0xa8, 0x3b,
+ 0xae, 0x4d, 0x9e, 0x32, 0xee, 0x3a, 0xe6, 0x01, 0xf4, 0x3a, 0x34, 0xc5, 0xe1, 0x96, 0x68, 0xb0,
+ 0xbc, 0xa3, 0xd2, 0x48, 0xcc, 0x7c, 0x1f, 0x9a, 0xd1, 0x31, 0xe3, 0x31, 0x68, 0x8f, 0x7c, 0x8f,
+ 0x4e, 0xd9, 0xfd, 0xa8, 0x1b, 0xe2, 0x08, 0xf4, 0x06, 0x34, 0x6d, 0x71, 0x90, 0x59, 0x11, 0x56,
+ 0x32, 0x47, 0x65, 0x23, 0x39, 0xf3, 0xab, 0x65, 0x68, 0xf0, 0xd3, 0x46, 0x73, 0x4f, 0xaa, 0xd5,
+ 0x9b, 0xd0, 0x18, 0xb0, 0x38, 0x23, 0x79, 0xd2, 0xa8, 0x95, 0x50, 0x1c, 0x5f, 0x62, 0x21, 0x4c,
+ 0x61, 0x01, 0x37, 0x64, 0x95, 0xb1, 0x30, 0xde, 0x97, 0x58, 0x08, 0xff, 0x8f, 0xe5, 0xfb, 0xa7,
+ 0x15, 0x38, 0xa0, 0x1f, 0x62, 0x1e, 0x83, 0xf6, 0x40, 0x1e, 0x8b, 0x8a, 0xd6, 0x95, 0x11, 0xe8,
+ 0x3e, 0xc0, 0x60, 0xe8, 0x10, 0x37, 0x64, 0x6e, 0xf4, 0x4a, 0xe6, 0xee, 0x2c, 0xf3, 0x4c, 0xb3,
+ 0xbb, 0x24, 0x61, 0x58, 0xa1, 0x40, 0x37, 0xa0, 0x1e, 0x0c, 0xbc, 0x11, 0x1f, 0xf7, 0x73, 0xca,
+ 0x76, 0x5d, 0x2f, 0xf6, 0xc2, 0x6e, 0xb8, 0xcd, 0x57, 0x80, 0x0b, 0x23, 0x67, 0x9d, 0x02, 0x30,
+ 0xc7, 0x99, 0x5f, 0x01, 0x88, 0xa9, 0xd1, 0x09, 0xb9, 0xe0, 0x5e, 0xb5, 0x76, 0xa2, 0xf2, 0xab,
+ 0x51, 0x8a, 0xc4, 0x9a, 0x15, 0x6e, 0x0b, 0x3b, 0xab, 0x46, 0xa1, 0x73, 0x70, 0x28, 0x70, 0xb6,
+ 0x5c, 0x2b, 0xdc, 0xf5, 0xc9, 0x23, 0xe2, 0x3b, 0x9b, 0x0e, 0xb1, 0x59, 0xf1, 0x5a, 0x38, 0x9d,
+ 0x60, 0xbe, 0x01, 0x87, 0xd2, 0x07, 0xb4, 0x63, 0x1b, 0xd1, 0xfc, 0xf9, 0x36, 0x34, 0xf8, 0xde,
+ 0xdb, 0xfc, 0x8f, 0x8a, 0xd4, 0x6b, 0xf3, 0xcf, 0xcb, 0x50, 0xe7, 0x67, 0x90, 0x49, 0x0b, 0x73,
+ 0x4b, 0xd5, 0xe9, 0x6a, 0xc6, 0xc6, 0x34, 0xeb, 0x4c, 0xb6, 0x7b, 0x87, 0xec, 0x3f, 0xa2, 0xf3,
+ 0x8e, 0x54, 0xf4, 0x5c, 0x7b, 0x70, 0x1b, 0x5a, 0x91, 0x30, 0xb5, 0x2e, 0x8f, 0xc9, 0xbe, 0xc8,
+ 0x9c, 0xfe, 0x44, 0xe7, 0xc4, 0xfc, 0x25, 0x87, 0x6a, 0x72, 0x3c, 0xf1, 0x5c, 0xc4, 0x24, 0xf7,
+ 0x59, 0xa8, 0xd2, 0xdd, 0x6e, 0xb2, 0x0a, 0xd3, 0x0f, 0xcb, 0xdc, 0xd2, 0x2e, 0x41, 0x9d, 0x9f,
+ 0x03, 0x27, 0xf3, 0x40, 0x50, 0x7b, 0x4c, 0xf6, 0x23, 0xab, 0xc4, 0x7e, 0xe7, 0x92, 0xfc, 0x59,
+ 0x15, 0x66, 0xd5, 0xb3, 0x2f, 0x73, 0x25, 0x77, 0x4a, 0x66, 0x93, 0x6c, 0x3c, 0x25, 0x8b, 0x20,
+ 0xb5, 0x6c, 0x8c, 0x8b, 0xa9, 0x46, 0x1b, 0xf3, 0x80, 0xd9, 0x85, 0x86, 0x38, 0x52, 0x4c, 0x32,
+ 0x49, 0xf9, 0x8a, 0x2a, 0x7f, 0x1b, 0x5a, 0xf2, 0x84, 0xf0, 0xc3, 0xe6, 0xed, 0x43, 0x4b, 0x1e,
+ 0x05, 0x1e, 0x81, 0x7a, 0xe8, 0x85, 0xd6, 0x90, 0xd1, 0x55, 0x31, 0x0f, 0x50, 0xbd, 0x74, 0xc9,
+ 0xd3, 0x70, 0x49, 0x5a, 0xde, 0x2a, 0x8e, 0x23, 0xb8, 0x61, 0x25, 0x7b, 0x3c, 0xb5, 0xca, 0x53,
+ 0x65, 0x44, 0x9c, 0x67, 0x4d, 0xcd, 0x73, 0x1f, 0x1a, 0xe2, 0x7c, 0x50, 0xa6, 0x97, 0x95, 0x74,
+ 0xb4, 0x00, 0xf5, 0x2d, 0x9a, 0x2e, 0x7a, 0xfd, 0xd5, 0xc4, 0xf8, 0xe6, 0xdb, 0xfe, 0x25, 0xcf,
+ 0x0d, 0xa9, 0x1a, 0xeb, 0x6e, 0x4f, 0xcc, 0x91, 0xb4, 0x0b, 0x7d, 0x7e, 0xd8, 0xcb, 0x07, 0xa1,
+ 0x08, 0x99, 0xdf, 0x2a, 0x43, 0x5b, 0x9e, 0xae, 0x9b, 0xef, 0xe7, 0x0d, 0x9e, 0x05, 0x38, 0xe0,
+ 0x0b, 0x29, 0x3a, 0x50, 0xa3, 0x21, 0xf4, 0x7c, 0xa2, 0x24, 0x58, 0x91, 0xc1, 0x3a, 0xc2, 0x7c,
+ 0x27, 0xb7, 0x53, 0xe7, 0x61, 0x36, 0x12, 0xbd, 0x13, 0xab, 0x9e, 0x16, 0x67, 0x9a, 0x12, 0x9d,
+ 0x9a, 0xb9, 0xcd, 0x4d, 0x98, 0x55, 0xcf, 0xd8, 0xcc, 0x47, 0xd9, 0xa3, 0xe7, 0x06, 0xcd, 0x46,
+ 0x39, 0xcf, 0xab, 0x24, 0x1c, 0x09, 0x51, 0x15, 0x62, 0x11, 0xac, 0x01, 0xcc, 0x67, 0xa1, 0xce,
+ 0x4f, 0xfe, 0x13, 0xcc, 0xe6, 0x6f, 0x0c, 0xa0, 0xce, 0x3a, 0xc1, 0xbc, 0xc8, 0x07, 0xc0, 0x39,
+ 0x68, 0x30, 0x2f, 0x56, 0x74, 0x2f, 0xea, 0x48, 0x56, 0x8f, 0x61, 0x21, 0x63, 0x2e, 0xc1, 0x8c,
+ 0x72, 0xe6, 0x4a, 0x35, 0x96, 0x25, 0x48, 0x2d, 0x88, 0x82, 0xc8, 0x84, 0x16, 0x9d, 0xa0, 0x85,
+ 0xcd, 0xa5, 0xf5, 0x97, 0x61, 0xf3, 0x94, 0x5c, 0x2d, 0x9a, 0xe2, 0x8c, 0xb9, 0x2f, 0x5b, 0x49,
+ 0x86, 0xcd, 0xcf, 0x40, 0x5b, 0x1e, 0xcd, 0xa2, 0xfb, 0x30, 0x2b, 0x8e, 0x66, 0xb9, 0x67, 0x89,
+ 0x0a, 0xcf, 0x15, 0x68, 0xd7, 0x03, 0xf2, 0x34, 0x64, 0xa7, 0xbb, 0xdd, 0x07, 0xfb, 0x23, 0x82,
+ 0x35, 0x02, 0xf3, 0x9b, 0x67, 0x59, 0xcb, 0x9b, 0x23, 0x68, 0xc9, 0xf3, 0xa8, 0x64, 0x2f, 0x5c,
+ 0xe1, 0xa6, 0xb1, 0x52, 0x78, 0x98, 0xca, 0xf1, 0xd4, 0x00, 0x33, 0x0b, 0x6a, 0x3e, 0x0f, 0xd5,
+ 0x3b, 0x64, 0x9f, 0x8e, 0x10, 0x6e, 0x48, 0xc5, 0x08, 0xe1, 0x06, 0xb3, 0x0f, 0x0d, 0x71, 0x2e,
+ 0x9c, 0xcc, 0xef, 0x3c, 0x34, 0x36, 0xf9, 0x51, 0x73, 0x81, 0xc9, 0x14, 0x62, 0xe6, 0x0d, 0x98,
+ 0x51, 0x4f, 0x83, 0x93, 0x7c, 0x27, 0x60, 0x66, 0xa0, 0x9c, 0x37, 0xf3, 0x6e, 0x50, 0xa3, 0x4c,
+ 0xa2, 0xab, 0x63, 0x8a, 0x61, 0x25, 0x53, 0x0f, 0x5f, 0xca, 0x6c, 0xf6, 0x31, 0xda, 0x78, 0x07,
+ 0x0e, 0x26, 0x8f, 0x7d, 0x93, 0x39, 0x9d, 0x85, 0x83, 0x1b, 0x89, 0x43, 0x66, 0x6e, 0x03, 0x93,
+ 0xd1, 0x66, 0x1f, 0xea, 0xfc, 0x58, 0x2e, 0x49, 0xf1, 0x3a, 0xd4, 0x2d, 0x76, 0xec, 0x57, 0x61,
+ 0x4b, 0x0b, 0x33, 0xb3, 0x94, 0x0c, 0x8a, 0xb9, 0xa0, 0xe9, 0xc0, 0x01, 0xfd, 0xa4, 0x2f, 0x49,
+ 0xd9, 0x83, 0x03, 0x7b, 0xda, 0x89, 0x22, 0xa7, 0x9e, 0xcf, 0xa4, 0xd6, 0xa8, 0xb0, 0x0e, 0x34,
+ 0xbf, 0xd6, 0x80, 0x1a, 0x3b, 0xaa, 0x4e, 0x66, 0x71, 0x19, 0x6a, 0x21, 0x79, 0x1a, 0xad, 0x8b,
+ 0xe7, 0xc7, 0x9e, 0x7b, 0x73, 0x7f, 0x29, 0x93, 0x47, 0x1f, 0xa7, 0x8b, 0xf8, 0xfd, 0x61, 0xb4,
+ 0x81, 0x3a, 0x39, 0x1e, 0xb8, 0x4e, 0x45, 0x31, 0x47, 0x50, 0x28, 0x1b, 0x0b, 0xe2, 0x6a, 0x45,
+ 0x01, 0x94, 0x0d, 0x42, 0xcc, 0x11, 0xe8, 0x06, 0x34, 0x07, 0xdb, 0x64, 0xf0, 0x98, 0xd8, 0xe2,
+ 0x4e, 0xc5, 0xe9, 0xf1, 0xe0, 0x25, 0x2e, 0x8c, 0x23, 0x14, 0xcd, 0x7b, 0xc0, 0x7a, 0xb7, 0x31,
+ 0x49, 0xde, 0xac, 0xc7, 0x31, 0x47, 0xa0, 0x15, 0x68, 0x3b, 0x03, 0xcf, 0x5d, 0xd9, 0xf1, 0x3e,
+ 0xe7, 0x88, 0xcb, 0x13, 0x2f, 0x8f, 0x87, 0xf7, 0x23, 0x71, 0x1c, 0x23, 0x23, 0x9a, 0xfe, 0x0e,
+ 0xdd, 0x31, 0xb6, 0x26, 0xa5, 0x61, 0xe2, 0x38, 0x46, 0x9a, 0xc7, 0x44, 0x7f, 0x66, 0x0f, 0xf2,
+ 0x5b, 0x50, 0x67, 0x4d, 0x8e, 0xae, 0xa9, 0xc9, 0x73, 0x4a, 0x4e, 0xb9, 0x16, 0x4b, 0x74, 0x95,
+ 0xe4, 0x61, 0xed, 0xaf, 0xf3, 0xcc, 0x4c, 0xc2, 0x23, 0xfa, 0x8d, 0xf3, 0xbc, 0x08, 0x4d, 0xd1,
+ 0x15, 0x7a, 0x81, 0x5b, 0x91, 0xc0, 0x0b, 0x50, 0xe7, 0x03, 0x33, 0xbb, 0x3e, 0x2f, 0x41, 0x5b,
+ 0x36, 0xe6, 0x78, 0x11, 0xd6, 0x3a, 0x39, 0x22, 0x3f, 0x57, 0x81, 0x3a, 0x3f, 0xb2, 0x4f, 0x9b,
+ 0x5a, 0x75, 0x14, 0x9c, 0x1c, 0x7f, 0x03, 0x40, 0x1d, 0x06, 0xb7, 0xd8, 0xe6, 0x90, 0xae, 0xe5,
+ 0xe5, 0x35, 0xdc, 0xb3, 0x05, 0xe8, 0xb5, 0x48, 0x1e, 0xc7, 0xd0, 0x82, 0xee, 0xbc, 0x0f, 0x6d,
+ 0x89, 0x42, 0x8b, 0x7a, 0x97, 0x9e, 0x1b, 0xdb, 0x15, 0xc9, 0x2c, 0x05, 0xe1, 0xaf, 0x96, 0xa1,
+ 0xba, 0xec, 0xec, 0xa5, 0xda, 0xe1, 0xad, 0x68, 0x54, 0x17, 0x99, 0x83, 0x65, 0x67, 0x4f, 0x1b,
+ 0xd4, 0xe6, 0x4a, 0xa4, 0x71, 0xef, 0xe8, 0xc5, 0x3b, 0x33, 0x7e, 0x05, 0x16, 0xd3, 0xf0, 0x82,
+ 0xfd, 0x52, 0x13, 0x6a, 0xec, 0x36, 0x4c, 0x96, 0x9d, 0xda, 0x1f, 0x15, 0x17, 0x8c, 0xf9, 0xdb,
+ 0xd9, 0x84, 0xcb, 0xe4, 0xb9, 0x9d, 0x8a, 0x1d, 0x3d, 0x27, 0xc7, 0x03, 0x35, 0xbf, 0xc3, 0x65,
+ 0xa8, 0xed, 0x38, 0x3b, 0x44, 0x98, 0xa9, 0x82, 0x2c, 0xef, 0x39, 0x3b, 0x04, 0x33, 0x79, 0x8a,
+ 0xdb, 0xb6, 0x82, 0x6d, 0x61, 0xa1, 0x0a, 0x70, 0x3d, 0x2b, 0xd8, 0xc6, 0x4c, 0x9e, 0xe2, 0x5c,
+ 0xba, 0x8b, 0x6c, 0x4c, 0x82, 0xa3, 0x9b, 0x4b, 0xcc, 0xe4, 0x29, 0x2e, 0x70, 0xbe, 0x40, 0x84,
+ 0x4d, 0x2a, 0xc0, 0xad, 0x3b, 0x5f, 0x20, 0x98, 0xc9, 0xc7, 0x26, 0xbc, 0x35, 0x59, 0xd3, 0x28,
+ 0x26, 0xfc, 0x01, 0xcc, 0x85, 0xda, 0x99, 0xae, 0xb8, 0x92, 0x75, 0xae, 0xa0, 0x5f, 0x34, 0x0c,
+ 0x4e, 0x70, 0xd0, 0x41, 0xc0, 0xf6, 0xcc, 0xd9, 0x83, 0xe0, 0x05, 0xa8, 0x7f, 0xd2, 0xb1, 0xc3,
+ 0x6d, 0x3d, 0xb9, 0xae, 0x99, 0x3c, 0xda, 0x6d, 0x53, 0x99, 0x3c, 0xb5, 0xd7, 0x39, 0xcf, 0x32,
+ 0xd4, 0xa8, 0xfa, 0x4c, 0xa7, 0xc7, 0xb1, 0xd6, 0x7d, 0x28, 0x03, 0xac, 0x36, 0x34, 0xe7, 0x39,
+ 0x06, 0x35, 0xaa, 0x21, 0x39, 0x4d, 0x72, 0x0c, 0x6a, 0x54, 0xef, 0xf2, 0x53, 0x69, 0x6f, 0xeb,
+ 0xa9, 0xd5, 0x28, 0xf5, 0x0c, 0xcc, 0xe9, 0xdd, 0x91, 0xc3, 0xf2, 0x27, 0x4d, 0xa8, 0xb1, 0xab,
+ 0x65, 0xc9, 0x11, 0xf9, 0x09, 0x38, 0xc0, 0xfb, 0x6f, 0x51, 0x2c, 0xc1, 0x2b, 0x99, 0x37, 0x4b,
+ 0xf5, 0x0b, 0x6b, 0x42, 0x05, 0x04, 0x04, 0xeb, 0x0c, 0x93, 0x2f, 0x2a, 0x18, 0x95, 0xa6, 0x91,
+ 0xef, 0xc8, 0xc5, 0x6b, 0xad, 0xe0, 0x5e, 0x23, 0xc3, 0xf2, 0x25, 0x70, 0xb4, 0x92, 0x45, 0x8b,
+ 0xd0, 0xa2, 0x53, 0x2b, 0x6d, 0x2e, 0x31, 0x6c, 0xcf, 0x8c, 0xc7, 0xf7, 0x85, 0x34, 0x96, 0x38,
+ 0x3a, 0xb1, 0x0f, 0x2c, 0xdf, 0x66, 0xa5, 0x12, 0x63, 0xf8, 0xe5, 0xf1, 0x24, 0x4b, 0x91, 0x38,
+ 0x8e, 0x91, 0xe8, 0x0e, 0xcc, 0xd8, 0x44, 0xfa, 0x09, 0xc4, 0xa0, 0xfe, 0xd8, 0x78, 0xa2, 0xe5,
+ 0x18, 0x80, 0x55, 0x34, 0x2d, 0x53, 0xb4, 0x37, 0x0c, 0x0a, 0x17, 0x1b, 0x8c, 0x2a, 0xbe, 0x3f,
+ 0x1e, 0x23, 0xcd, 0xd3, 0x70, 0x40, 0xeb, 0xb7, 0x8f, 0x74, 0xd5, 0xa1, 0xf6, 0x25, 0xe7, 0xb9,
+ 0x22, 0xb7, 0x28, 0xaf, 0xe9, 0xcb, 0x8e, 0xdc, 0x1d, 0x89, 0x00, 0xde, 0x85, 0x56, 0xd4, 0x31,
+ 0xe8, 0xa6, 0x5e, 0x86, 0x57, 0x8a, 0xcb, 0x20, 0xfb, 0x54, 0xb0, 0xad, 0x42, 0x5b, 0xf6, 0x10,
+ 0x5a, 0xd0, 0xe9, 0x5e, 0x2d, 0xa6, 0x8b, 0x7b, 0x57, 0xf0, 0x61, 0x98, 0x51, 0x3a, 0x0a, 0x2d,
+ 0xe9, 0x8c, 0xaf, 0x15, 0x33, 0xaa, 0xdd, 0x1c, 0xaf, 0x7a, 0x64, 0x8f, 0xa9, 0xbd, 0x52, 0x8d,
+ 0x7b, 0xe5, 0xf7, 0x9b, 0xd0, 0x92, 0xd7, 0x39, 0x33, 0xf6, 0x98, 0xbb, 0xfe, 0xb0, 0x70, 0x8f,
+ 0x19, 0xe1, 0xbb, 0x0f, 0xfd, 0x21, 0xa6, 0x08, 0xda, 0xc5, 0xa1, 0x13, 0xca, 0xa1, 0xfa, 0x72,
+ 0x31, 0xf4, 0x01, 0x15, 0xc7, 0x1c, 0x85, 0xee, 0xeb, 0x5a, 0x5e, 0x1b, 0x73, 0xdd, 0x47, 0x23,
+ 0xc9, 0xd5, 0xf4, 0x3e, 0xb4, 0x1d, 0xba, 0xf4, 0xeb, 0xc5, 0x33, 0xef, 0xab, 0xc5, 0x74, 0xfd,
+ 0x08, 0x82, 0x63, 0x34, 0x2d, 0xdb, 0xa6, 0xb5, 0x47, 0xc7, 0x35, 0x23, 0x6b, 0x4c, 0x5a, 0xb6,
+ 0x5b, 0x31, 0x08, 0xab, 0x0c, 0xe8, 0xaa, 0x58, 0xbb, 0x34, 0x0b, 0x2c, 0x4b, 0xdc, 0x54, 0xf1,
+ 0xfa, 0xe5, 0xbd, 0xd4, 0x4c, 0xcb, 0x87, 0xf1, 0xeb, 0x13, 0xb0, 0x8c, 0x9d, 0x6d, 0x69, 0x0f,
+ 0xf2, 0x95, 0x51, 0x7b, 0xd2, 0x1e, 0xd4, 0x4e, 0xc4, 0x9e, 0x87, 0xea, 0x43, 0x7f, 0x98, 0x3f,
+ 0x57, 0xb3, 0xee, 0xce, 0x49, 0x3e, 0xa9, 0x8f, 0x84, 0xfc, 0x05, 0xbd, 0xec, 0x93, 0x5c, 0x1e,
+ 0xa5, 0xd1, 0x73, 0x84, 0xae, 0x89, 0x09, 0xfd, 0x4d, 0x7d, 0xbc, 0xbd, 0x98, 0x18, 0x6f, 0x74,
+ 0x84, 0xad, 0xf9, 0x84, 0xdf, 0x68, 0x53, 0x66, 0xf2, 0x49, 0xe7, 0xc9, 0xdb, 0xd1, 0xfa, 0x63,
+ 0x2a, 0x4b, 0x91, 0x6c, 0x5b, 0xce, 0xf5, 0x8d, 0x32, 0xb4, 0xe4, 0x6d, 0xdd, 0xb4, 0x77, 0xbe,
+ 0xe5, 0x04, 0x3d, 0x62, 0xd9, 0xc4, 0x17, 0xe3, 0xf6, 0x95, 0xc2, 0x6b, 0xc0, 0xdd, 0xbe, 0x40,
+ 0x60, 0x89, 0x35, 0x4f, 0x40, 0x2b, 0x8a, 0xcd, 0xd9, 0x94, 0x7d, 0xbf, 0x02, 0x0d, 0x71, 0xcf,
+ 0x37, 0x59, 0x88, 0xeb, 0xd0, 0x18, 0x5a, 0xfb, 0xde, 0x6e, 0xb4, 0x65, 0x3a, 0x53, 0x70, 0x75,
+ 0xb8, 0x7b, 0x97, 0x49, 0x63, 0x81, 0x42, 0x6f, 0x43, 0x7d, 0xe8, 0xec, 0x38, 0xa1, 0x30, 0x1f,
+ 0xa7, 0x0b, 0xe1, 0xec, 0x46, 0x10, 0xc7, 0xd0, 0xcc, 0xd9, 0xf5, 0xbe, 0xe8, 0xe3, 0x8c, 0xc2,
+ 0xcc, 0x1f, 0x31, 0x69, 0x2c, 0x50, 0xe6, 0x6d, 0x68, 0xf0, 0xe2, 0x4c, 0x37, 0x49, 0xe8, 0x35,
+ 0x89, 0x35, 0x9d, 0x95, 0x2d, 0x67, 0x55, 0x7a, 0x1c, 0x1a, 0x3c, 0xf3, 0x1c, 0xad, 0xf9, 0xde,
+ 0x73, 0x6c, 0xbf, 0x33, 0x34, 0xef, 0xc6, 0x07, 0x8e, 0x1f, 0xfe, 0x2c, 0xc3, 0x7c, 0x00, 0x07,
+ 0x97, 0xad, 0xd0, 0xda, 0xb0, 0x02, 0x82, 0xc9, 0xc0, 0xf3, 0xed, 0x4c, 0x56, 0x9f, 0x27, 0x09,
+ 0x0f, 0x75, 0x3e, 0xab, 0x90, 0xfb, 0x89, 0xeb, 0xf0, 0x7f, 0x8f, 0xeb, 0xf0, 0x0f, 0x6a, 0x39,
+ 0xfe, 0xbc, 0x49, 0x3c, 0x19, 0x54, 0xe1, 0x52, 0x0e, 0xbd, 0xab, 0xfa, 0xda, 0xfb, 0x54, 0x01,
+ 0x52, 0x5b, 0x7c, 0x5f, 0xd5, 0x3d, 0x7a, 0x45, 0x58, 0xcd, 0xa5, 0x77, 0x33, 0xe9, 0xd2, 0x3b,
+ 0x53, 0x80, 0x4e, 0xf9, 0xf4, 0xae, 0xea, 0x3e, 0xbd, 0xa2, 0xdc, 0x55, 0xa7, 0xde, 0xff, 0x33,
+ 0x37, 0xda, 0xaf, 0xe5, 0xb8, 0x7d, 0x3e, 0xae, 0xbb, 0x7d, 0xc6, 0x68, 0xcd, 0x8f, 0xcb, 0xef,
+ 0xf3, 0xeb, 0x8d, 0x1c, 0xbf, 0xcf, 0x15, 0xcd, 0xef, 0x33, 0xa6, 0x64, 0x49, 0xc7, 0xcf, 0x55,
+ 0xdd, 0xf1, 0x73, 0xaa, 0x00, 0xa9, 0x79, 0x7e, 0xae, 0x68, 0x9e, 0x9f, 0xa2, 0x4c, 0x15, 0xd7,
+ 0xcf, 0x15, 0xcd, 0xf5, 0x53, 0x04, 0x54, 0x7c, 0x3f, 0x57, 0x34, 0xdf, 0x4f, 0x11, 0x50, 0x71,
+ 0xfe, 0x5c, 0xd1, 0x9c, 0x3f, 0x45, 0x40, 0xc5, 0xfb, 0x73, 0x55, 0xf7, 0xfe, 0x14, 0xb7, 0x8f,
+ 0xd2, 0xe9, 0x3f, 0x71, 0xd4, 0xfc, 0x37, 0x3a, 0x6a, 0x7e, 0xb1, 0x9a, 0xe3, 0x80, 0xc1, 0xd9,
+ 0x0e, 0x98, 0x73, 0xf9, 0x3d, 0x59, 0xec, 0x81, 0x99, 0x7c, 0x16, 0x48, 0xbb, 0x60, 0xae, 0x25,
+ 0x5c, 0x30, 0xa7, 0x0b, 0xc0, 0xba, 0x0f, 0xe6, 0xff, 0x8c, 0x93, 0xe1, 0x77, 0x1b, 0x63, 0xf6,
+ 0xd3, 0x6f, 0xa9, 0xfb, 0xe9, 0x31, 0x33, 0x59, 0x7a, 0x43, 0x7d, 0x5d, 0xdf, 0x50, 0x9f, 0x9d,
+ 0x00, 0xab, 0xed, 0xa8, 0xd7, 0xb2, 0x76, 0xd4, 0xdd, 0x09, 0x58, 0x72, 0xb7, 0xd4, 0xb7, 0xd3,
+ 0x5b, 0xea, 0x73, 0x13, 0xf0, 0x65, 0xee, 0xa9, 0xd7, 0xb2, 0xf6, 0xd4, 0x93, 0x94, 0x2e, 0x77,
+ 0x53, 0xfd, 0xb6, 0xb6, 0xa9, 0x7e, 0x79, 0x92, 0xe6, 0x8a, 0x27, 0x87, 0x4f, 0xe5, 0xec, 0xaa,
+ 0xdf, 0x98, 0x84, 0x66, 0xbc, 0x13, 0xfb, 0x27, 0xfb, 0x62, 0x3d, 0x9b, 0xdf, 0x79, 0x11, 0x5a,
+ 0xd1, 0x45, 0x1b, 0xf3, 0xf3, 0xd0, 0x8c, 0x3e, 0xee, 0xcc, 0xb8, 0xa9, 0x2b, 0x36, 0x75, 0x7c,
+ 0xf5, 0x2c, 0x42, 0xe8, 0x3a, 0xd4, 0xe8, 0x2f, 0x31, 0x2c, 0x5e, 0x99, 0xec, 0x42, 0x0f, 0xcd,
+ 0x04, 0x33, 0x9c, 0xf9, 0xef, 0x47, 0x00, 0x94, 0x6f, 0xde, 0x26, 0xcd, 0xf6, 0x5d, 0x6a, 0xcc,
+ 0x86, 0x21, 0xf1, 0xd9, 0x45, 0xae, 0xc2, 0x6f, 0xc2, 0xe2, 0x1c, 0xa8, 0xb6, 0x84, 0xc4, 0xc7,
+ 0x02, 0x8e, 0xee, 0x41, 0x2b, 0x72, 0xa4, 0xb2, 0x2b, 0xcf, 0x79, 0x4a, 0x96, 0x45, 0x15, 0xb9,
+ 0xf6, 0xb0, 0xa4, 0x40, 0x0b, 0x50, 0x0b, 0x3c, 0x3f, 0x14, 0xf7, 0xa3, 0x5f, 0x9b, 0x98, 0x6a,
+ 0xdd, 0xf3, 0x43, 0xcc, 0xa0, 0xbc, 0x6a, 0xca, 0x93, 0x02, 0xd3, 0x54, 0x4d, 0xb3, 0xd8, 0xff,
+ 0x56, 0x95, 0x36, 0x74, 0x49, 0x8c, 0x46, 0xae, 0x43, 0xe7, 0x27, 0xef, 0x25, 0x75, 0x54, 0x22,
+ 0xb1, 0x08, 0xe2, 0x3d, 0xc1, 0xd7, 0x37, 0xaf, 0x40, 0x67, 0xe0, 0xed, 0x11, 0x1f, 0xc7, 0x57,
+ 0x9c, 0xc4, 0x2d, 0xb4, 0x54, 0x3c, 0x32, 0xa1, 0xb5, 0xed, 0xd8, 0xa4, 0x3f, 0x10, 0xf6, 0xaf,
+ 0x85, 0x65, 0x18, 0xdd, 0x81, 0x16, 0xf3, 0xb1, 0x47, 0x1e, 0xfe, 0xe9, 0x0a, 0xc9, 0x5d, 0xfd,
+ 0x11, 0x01, 0xcd, 0x88, 0x65, 0x7e, 0xcb, 0x09, 0x59, 0x1b, 0xb6, 0xb0, 0x0c, 0xd3, 0x02, 0xb3,
+ 0x7b, 0x64, 0x6a, 0x81, 0x9b, 0xbc, 0xc0, 0xc9, 0x78, 0x74, 0x09, 0x9e, 0x61, 0x71, 0x89, 0x2d,
+ 0x26, 0x77, 0xd5, 0xb7, 0x70, 0x76, 0x22, 0xbb, 0x37, 0x67, 0x6d, 0xf1, 0x0f, 0x88, 0x98, 0xf3,
+ 0xae, 0x8e, 0xe3, 0x08, 0x74, 0x0e, 0x0e, 0xd9, 0x64, 0xd3, 0xda, 0x1d, 0x86, 0x0f, 0xc8, 0xce,
+ 0x68, 0x68, 0x85, 0xa4, 0x6f, 0xb3, 0x57, 0x0d, 0xda, 0x38, 0x9d, 0x80, 0x5e, 0x87, 0xc3, 0x22,
+ 0x92, 0x0f, 0x63, 0xda, 0x1b, 0x7d, 0x9b, 0x7d, 0xe4, 0xdf, 0xc6, 0x59, 0x49, 0xe6, 0xf7, 0x6a,
+ 0xb4, 0xd3, 0x99, 0x6a, 0xbf, 0x0b, 0x55, 0xcb, 0xb6, 0xc5, 0xb4, 0x79, 0x71, 0xca, 0x01, 0x22,
+ 0xbe, 0x1c, 0xa1, 0x0c, 0x68, 0x4d, 0x5e, 0xb9, 0xe3, 0x13, 0xe7, 0xe5, 0x69, 0xb9, 0xe4, 0x63,
+ 0x2b, 0x82, 0x87, 0x32, 0xee, 0xf2, 0x2f, 0x29, 0xaa, 0x3f, 0x1a, 0xa3, 0xfc, 0x3c, 0x45, 0xf0,
+ 0xa0, 0xdb, 0x50, 0x63, 0x25, 0xe4, 0x13, 0xeb, 0xa5, 0x69, 0xf9, 0xee, 0xf1, 0xf2, 0x31, 0x0e,
+ 0x73, 0xc0, 0xef, 0xbe, 0x29, 0x17, 0x2e, 0xcb, 0xfa, 0x85, 0xcb, 0x45, 0xa8, 0x3b, 0x21, 0xd9,
+ 0x49, 0xdf, 0xbf, 0x1d, 0xab, 0xaa, 0xc2, 0xf2, 0x70, 0xe8, 0xd8, 0x7b, 0x80, 0xef, 0xe7, 0x7e,
+ 0xce, 0x70, 0x13, 0x6a, 0x14, 0x9e, 0x5a, 0x4b, 0x4e, 0x92, 0x31, 0x43, 0x9a, 0x17, 0xa0, 0x46,
+ 0x2b, 0x3b, 0xa6, 0x76, 0xa2, 0x3c, 0x15, 0x59, 0x9e, 0xc5, 0x19, 0x68, 0x7b, 0x23, 0xe2, 0xb3,
+ 0x81, 0x61, 0xfe, 0x6b, 0x4d, 0xb9, 0x14, 0xd7, 0x57, 0x75, 0xec, 0xcd, 0xa9, 0x2d, 0xa7, 0xaa,
+ 0x65, 0x38, 0xa1, 0x65, 0x6f, 0x4d, 0xcf, 0x96, 0xd2, 0x33, 0x9c, 0xd0, 0xb3, 0x1f, 0x81, 0x33,
+ 0xa5, 0x69, 0x77, 0x35, 0x4d, 0xbb, 0x3c, 0x3d, 0xa3, 0xa6, 0x6b, 0xa4, 0x48, 0xd7, 0x96, 0x75,
+ 0x5d, 0xeb, 0x4e, 0xd6, 0xe5, 0x72, 0x6a, 0x9a, 0x40, 0xdb, 0x3e, 0x93, 0xab, 0x6d, 0x8b, 0x9a,
+ 0xb6, 0x4d, 0x9b, 0xf5, 0x47, 0xa4, 0x6f, 0xdf, 0xa9, 0x41, 0x8d, 0x4e, 0x8f, 0x68, 0x45, 0xd5,
+ 0xb5, 0x37, 0xa6, 0x9a, 0x5a, 0x55, 0x3d, 0x5b, 0x4d, 0xe8, 0xd9, 0xa5, 0xe9, 0x98, 0x52, 0x3a,
+ 0xb6, 0x9a, 0xd0, 0xb1, 0x29, 0xf9, 0x52, 0xfa, 0xd5, 0xd3, 0xf4, 0xeb, 0xc2, 0x74, 0x6c, 0x9a,
+ 0x6e, 0x59, 0x45, 0xba, 0x75, 0x53, 0xd7, 0xad, 0x09, 0x57, 0x6f, 0x6c, 0xad, 0x32, 0x81, 0x5e,
+ 0xbd, 0x97, 0xab, 0x57, 0xd7, 0x35, 0xbd, 0x9a, 0x26, 0xdb, 0x8f, 0x48, 0xa7, 0x2e, 0xf1, 0x45,
+ 0x67, 0xfe, 0x57, 0x69, 0x59, 0x8b, 0x4e, 0xf3, 0x4d, 0x68, 0xc7, 0x8f, 0x86, 0x64, 0x5c, 0xcf,
+ 0xe7, 0x62, 0x51, 0xae, 0x51, 0xd0, 0xbc, 0x08, 0xed, 0xf8, 0x21, 0x90, 0xac, 0x2f, 0xe0, 0x58,
+ 0xa2, 0xfc, 0x7a, 0x8a, 0x85, 0xcc, 0x15, 0x38, 0x94, 0x7e, 0xa6, 0x20, 0xc3, 0x0f, 0xaf, 0xdc,
+ 0x2d, 0x8f, 0xbe, 0x5e, 0x51, 0xa2, 0xcc, 0x27, 0x30, 0x97, 0x78, 0x78, 0x60, 0x6a, 0x0e, 0x74,
+ 0x51, 0x59, 0x22, 0x57, 0x13, 0x9f, 0x9a, 0xea, 0xb7, 0xe5, 0xe3, 0x85, 0xb0, 0xb9, 0x0c, 0x73,
+ 0x05, 0x85, 0x9f, 0xe4, 0xb2, 0xfc, 0x67, 0x61, 0x66, 0x5c, 0xd9, 0x3f, 0x82, 0xcb, 0xfc, 0x21,
+ 0x74, 0x52, 0x8f, 0xa6, 0x24, 0xb3, 0x59, 0x03, 0xd8, 0x92, 0x32, 0x42, 0x69, 0x5f, 0x9f, 0xe2,
+ 0xd3, 0x05, 0x86, 0xc3, 0x0a, 0x87, 0xf9, 0xdb, 0x65, 0x38, 0x94, 0x7e, 0x31, 0x65, 0xd2, 0xcd,
+ 0x8f, 0x01, 0x4d, 0xc6, 0x25, 0xbf, 0xf8, 0x88, 0x82, 0xe8, 0x1e, 0xcc, 0x06, 0x43, 0x67, 0x40,
+ 0x96, 0xb6, 0x2d, 0x77, 0x8b, 0x04, 0x62, 0x47, 0x53, 0xf0, 0xea, 0xc9, 0x7a, 0x8c, 0xc0, 0x1a,
+ 0xdc, 0x7c, 0x02, 0x33, 0x4a, 0x22, 0x7a, 0x07, 0x2a, 0xde, 0x28, 0x75, 0xaf, 0x31, 0x9f, 0xf3,
+ 0x7e, 0x34, 0xde, 0x70, 0xc5, 0x1b, 0xa5, 0x87, 0xa4, 0x3a, 0x7c, 0xab, 0xda, 0xf0, 0x35, 0xef,
+ 0xc0, 0xa1, 0xf4, 0xa3, 0x24, 0xc9, 0xe6, 0x39, 0x93, 0xf2, 0x12, 0xf0, 0x66, 0x4a, 0x6e, 0xf9,
+ 0xaf, 0xc0, 0xc1, 0xe4, 0x53, 0x23, 0x19, 0x5f, 0xe3, 0xc4, 0x1f, 0x35, 0x45, 0xee, 0xfa, 0xf9,
+ 0x5f, 0x28, 0xc3, 0x9c, 0x5e, 0x11, 0x74, 0x14, 0x90, 0x1e, 0xb3, 0xea, 0xb9, 0xa4, 0x53, 0x42,
+ 0xcf, 0xc0, 0x21, 0x3d, 0x7e, 0xc1, 0xb6, 0x3b, 0xe5, 0xb4, 0x38, 0x35, 0x5b, 0x9d, 0x0a, 0x32,
+ 0xe0, 0x48, 0xa2, 0x85, 0x98, 0x11, 0xed, 0x54, 0xd1, 0x73, 0xf0, 0x4c, 0x32, 0x65, 0x34, 0xb4,
+ 0x06, 0xa4, 0x53, 0x33, 0x7f, 0x58, 0x81, 0xda, 0xc3, 0x80, 0xf8, 0xe6, 0xbf, 0x54, 0xa2, 0xaf,
+ 0x34, 0xde, 0x82, 0x1a, 0x7b, 0x05, 0x44, 0xf9, 0x82, 0xb2, 0x9c, 0xf8, 0x82, 0x52, 0xfb, 0x0a,
+ 0x2f, 0xfe, 0x82, 0xf2, 0x2d, 0xa8, 0xb1, 0x77, 0x3f, 0xa6, 0x47, 0x7e, 0xbd, 0x0c, 0xed, 0xf8,
+ 0x0d, 0x8e, 0xa9, 0xf1, 0xea, 0x57, 0x21, 0x15, 0xfd, 0xab, 0x90, 0x57, 0xa0, 0xee, 0xb3, 0xef,
+ 0x37, 0xb8, 0x95, 0x49, 0x7e, 0x6b, 0xc2, 0x32, 0xc4, 0x5c, 0xc4, 0x24, 0x30, 0xa3, 0xbe, 0x30,
+ 0x32, 0x7d, 0x31, 0x4e, 0x89, 0xe7, 0xc5, 0xfa, 0x76, 0xb0, 0xe0, 0xfb, 0xd6, 0xbe, 0x50, 0x4c,
+ 0x3d, 0xd2, 0x3c, 0x06, 0xb5, 0x35, 0xc7, 0xdd, 0xca, 0xfe, 0x70, 0xd5, 0xfc, 0xa3, 0x32, 0x34,
+ 0xc5, 0xe5, 0x5d, 0xf3, 0x0a, 0x54, 0x57, 0xc9, 0x13, 0x5a, 0x10, 0x71, 0x6d, 0x38, 0x55, 0x90,
+ 0x7b, 0xac, 0x16, 0x42, 0x1e, 0x47, 0x62, 0xe6, 0x55, 0x39, 0x4d, 0x4e, 0x8f, 0x7d, 0x0b, 0x6a,
+ 0xec, 0x61, 0x90, 0xe9, 0x91, 0x7f, 0xdc, 0x82, 0x06, 0xff, 0xfa, 0xd3, 0xfc, 0xbd, 0x16, 0x34,
+ 0xf8, 0x63, 0x21, 0xe8, 0x3a, 0x34, 0x83, 0xdd, 0x9d, 0x1d, 0xcb, 0xdf, 0x37, 0xb2, 0x3f, 0xbc,
+ 0xd7, 0xde, 0x16, 0xe9, 0xae, 0x73, 0x59, 0x1c, 0x81, 0xd0, 0x9b, 0x50, 0x1b, 0x58, 0x9b, 0x24,
+ 0x75, 0x9c, 0x9b, 0x05, 0x5e, 0xb2, 0x36, 0x09, 0x66, 0xe2, 0xe8, 0x26, 0xb4, 0x44, 0xb7, 0x04,
+ 0xc2, 0x9f, 0x33, 0x3e, 0xdf, 0xa8, 0x33, 0x25, 0xca, 0xbc, 0x0d, 0x4d, 0x51, 0x18, 0x74, 0x43,
+ 0x7e, 0xfb, 0x9a, 0xf4, 0x3c, 0x67, 0x56, 0x41, 0xbe, 0x22, 0x21, 0xbf, 0x82, 0xfd, 0x8b, 0x0a,
+ 0xd4, 0x68, 0xe1, 0x3e, 0x34, 0x13, 0x3a, 0x0e, 0x30, 0xb4, 0x82, 0x70, 0x6d, 0x77, 0x38, 0x24,
+ 0xb6, 0xf8, 0xc2, 0x4e, 0x89, 0x41, 0x67, 0xe1, 0x20, 0x0f, 0x05, 0xdb, 0xeb, 0xbb, 0x83, 0x01,
+ 0x91, 0x5f, 0x96, 0x26, 0xa3, 0xd1, 0x02, 0xd4, 0xd9, 0xf3, 0x95, 0x62, 0x55, 0xf8, 0x6a, 0x61,
+ 0xcb, 0x76, 0xd7, 0x1c, 0x57, 0x94, 0x86, 0x23, 0x4d, 0x0f, 0xda, 0x32, 0x8e, 0x0e, 0xc2, 0x91,
+ 0xe3, 0xba, 0x8e, 0xbb, 0x25, 0x34, 0x3a, 0x0a, 0xd2, 0x49, 0x87, 0xfe, 0x14, 0xe5, 0xad, 0x63,
+ 0x11, 0xa2, 0xf1, 0x9b, 0x96, 0x33, 0x14, 0x45, 0xac, 0x63, 0x11, 0xa2, 0x4c, 0xbb, 0xe2, 0x89,
+ 0x95, 0x1a, 0xab, 0x60, 0x14, 0x34, 0x3f, 0x28, 0xcb, 0x0f, 0xc0, 0xb3, 0x3e, 0xce, 0x4c, 0xf9,
+ 0x92, 0x8e, 0xa9, 0x0e, 0x6d, 0x3e, 0x21, 0x28, 0x2e, 0xea, 0xa3, 0xd0, 0xf0, 0xdc, 0xa1, 0xe3,
+ 0x12, 0xe1, 0x3b, 0x12, 0xa1, 0x44, 0x1b, 0xd7, 0x53, 0x6d, 0x2c, 0xd2, 0x57, 0x6c, 0x87, 0x16,
+ 0xb1, 0x11, 0xa7, 0xf3, 0x18, 0x74, 0x0d, 0x9a, 0x36, 0xd9, 0x73, 0x06, 0x24, 0x30, 0x9a, 0x4c,
+ 0xf5, 0x4e, 0x8e, 0x6d, 0xdb, 0x65, 0x26, 0x8b, 0x23, 0x8c, 0x19, 0x42, 0x83, 0x47, 0xc9, 0x2a,
+ 0x95, 0x95, 0x2a, 0xc5, 0x85, 0xae, 0x8c, 0x29, 0x74, 0xb5, 0xa0, 0xd0, 0xb5, 0x64, 0xa1, 0xe7,
+ 0xbf, 0x04, 0x10, 0xab, 0x1b, 0x9a, 0x81, 0xe6, 0x43, 0xf7, 0xb1, 0xeb, 0x3d, 0x71, 0x3b, 0x25,
+ 0x1a, 0xb8, 0xbf, 0xb9, 0x49, 0x73, 0xe9, 0x94, 0x69, 0x80, 0xca, 0x39, 0xee, 0x56, 0xa7, 0x82,
+ 0x00, 0x1a, 0x34, 0x40, 0xec, 0x4e, 0x95, 0xfe, 0xbe, 0xc5, 0xfa, 0xaf, 0x53, 0x43, 0xcf, 0xc2,
+ 0xe1, 0xbe, 0x3b, 0xf0, 0x76, 0x46, 0x56, 0xe8, 0x6c, 0x0c, 0xc9, 0x23, 0xe2, 0x07, 0x8e, 0xe7,
+ 0x76, 0xea, 0x74, 0xf6, 0x5a, 0x25, 0xe1, 0x13, 0xcf, 0x7f, 0xbc, 0x4a, 0x88, 0x2d, 0x5e, 0x2f,
+ 0xe9, 0x34, 0xcc, 0xff, 0x2c, 0xf3, 0xd3, 0x60, 0xf3, 0x26, 0xcc, 0x6a, 0x6f, 0x01, 0x19, 0xf1,
+ 0xcb, 0xe4, 0x89, 0x87, 0xc9, 0x8f, 0x32, 0x7f, 0x2d, 0x89, 0x97, 0x32, 0x3c, 0x64, 0xde, 0x02,
+ 0x50, 0x5e, 0x00, 0x3a, 0x0e, 0xb0, 0xb1, 0x1f, 0x92, 0x80, 0xbf, 0xfe, 0x43, 0x29, 0x6a, 0x58,
+ 0x89, 0x51, 0xf9, 0x2b, 0x1a, 0xbf, 0x79, 0x19, 0x40, 0x79, 0xff, 0x87, 0x8e, 0x2b, 0x1a, 0x5a,
+ 0x4c, 0x92, 0x25, 0xa3, 0xcd, 0xae, 0xa8, 0x41, 0xf4, 0xd2, 0x4f, 0x54, 0x02, 0xee, 0xbd, 0x53,
+ 0x4b, 0xc0, 0x62, 0xcc, 0x15, 0x80, 0xf8, 0xb1, 0x1b, 0xf3, 0x8a, 0x34, 0xdd, 0xaf, 0x41, 0xcd,
+ 0xb6, 0x42, 0x4b, 0x58, 0xcd, 0xe7, 0x12, 0x33, 0x57, 0x0c, 0xc1, 0x4c, 0xcc, 0xfc, 0xad, 0x32,
+ 0xcc, 0xaa, 0x0f, 0xfb, 0x98, 0xef, 0x42, 0x8d, 0xbd, 0x0c, 0x74, 0x03, 0x66, 0xd5, 0x97, 0x7d,
+ 0x52, 0x2f, 0xb8, 0x73, 0x3e, 0x15, 0x8a, 0x35, 0x80, 0xd9, 0x97, 0x45, 0xfa, 0xd0, 0x54, 0xaf,
+ 0x43, 0x53, 0x3c, 0x14, 0x64, 0x9e, 0x86, 0x76, 0xfc, 0x2e, 0x10, 0xb5, 0x1d, 0x3c, 0x3e, 0xea,
+ 0x65, 0x11, 0x34, 0xff, 0xb9, 0x06, 0x75, 0xd6, 0x9d, 0xe6, 0x57, 0x2b, 0xaa, 0x86, 0x9a, 0x3f,
+ 0x2c, 0xe7, 0xee, 0x05, 0x2f, 0x6a, 0x4f, 0x15, 0xcc, 0xa5, 0xde, 0xc3, 0x12, 0xcf, 0x00, 0xe9,
+ 0x86, 0xf5, 0x32, 0x34, 0x5d, 0xae, 0x99, 0xe2, 0xa5, 0x80, 0x63, 0x99, 0x28, 0xa1, 0xbd, 0x38,
+ 0x12, 0x46, 0x97, 0xa0, 0x4e, 0x7c, 0xdf, 0xf3, 0xd9, 0x90, 0x9a, 0x4b, 0xbd, 0x2c, 0x15, 0x3f,
+ 0x39, 0xb4, 0x42, 0xa5, 0x30, 0x17, 0x46, 0x97, 0xe0, 0x99, 0x80, 0x8f, 0x22, 0xbe, 0xa6, 0x0c,
+ 0xc4, 0x77, 0xd5, 0xc2, 0xda, 0x64, 0x27, 0x9a, 0x01, 0x1c, 0x4c, 0xbe, 0x22, 0x64, 0x42, 0x8b,
+ 0xaf, 0x4d, 0xe5, 0x00, 0x91, 0x61, 0xaa, 0x79, 0xfc, 0xf7, 0x6a, 0x6c, 0x17, 0x95, 0x18, 0xba,
+ 0x5e, 0x79, 0xc2, 0xa8, 0xa2, 0xe3, 0x64, 0x6e, 0x21, 0xf5, 0xc8, 0xf9, 0x4f, 0x44, 0xb3, 0xba,
+ 0x32, 0xda, 0x4b, 0xaa, 0x19, 0x28, 0xa3, 0x36, 0xd4, 0x59, 0xed, 0x3a, 0x15, 0xd5, 0x56, 0x54,
+ 0x73, 0x46, 0x7b, 0x6d, 0xfe, 0x22, 0x34, 0x45, 0x3c, 0x95, 0x5f, 0xe0, 0x0d, 0xd6, 0x29, 0xa1,
+ 0x59, 0x68, 0xad, 0x93, 0xe1, 0x66, 0xcf, 0x0b, 0xc2, 0x4e, 0x19, 0x1d, 0x80, 0x36, 0x1b, 0x80,
+ 0xf7, 0xdd, 0xe1, 0x7e, 0xa7, 0x32, 0xff, 0x1e, 0xb4, 0x65, 0x33, 0xa2, 0x16, 0xd4, 0x56, 0x77,
+ 0x87, 0xc3, 0x4e, 0x89, 0xad, 0x87, 0x43, 0xcf, 0x8f, 0xbc, 0xe1, 0x2b, 0x4f, 0xe9, 0xe4, 0xd6,
+ 0x29, 0xe7, 0x99, 0xa0, 0x0a, 0xea, 0xc0, 0xac, 0xc8, 0x9c, 0x97, 0xb9, 0x6a, 0x7e, 0xb7, 0x0c,
+ 0x6d, 0xf9, 0xc8, 0x12, 0x5d, 0x8c, 0x46, 0x8a, 0x95, 0x6f, 0x7c, 0xae, 0x24, 0x54, 0x2c, 0xff,
+ 0xcd, 0xa6, 0x84, 0x9a, 0x9d, 0x81, 0x39, 0x61, 0xe7, 0xa3, 0x1e, 0xe7, 0xa6, 0x3a, 0x11, 0x3b,
+ 0x7f, 0x5b, 0xb6, 0x7a, 0x87, 0x8d, 0xeb, 0x25, 0xcf, 0x75, 0xc9, 0x20, 0x64, 0x6d, 0x7f, 0x10,
+ 0x66, 0x56, 0xbd, 0x70, 0xcd, 0x0b, 0x02, 0x5a, 0x33, 0xde, 0x52, 0x71, 0x7a, 0x05, 0xcd, 0x01,
+ 0x44, 0x17, 0xdc, 0xa8, 0x65, 0x36, 0x7f, 0xb3, 0x0c, 0x0d, 0xfe, 0xf4, 0x93, 0xf9, 0x2b, 0x65,
+ 0x68, 0x88, 0xe7, 0x9e, 0x5e, 0x81, 0x8e, 0xef, 0x51, 0xe2, 0x68, 0x17, 0xd3, 0x5f, 0x16, 0xb5,
+ 0x4c, 0xc5, 0xd3, 0x8d, 0xb5, 0xa7, 0xa8, 0xa2, 0x58, 0x77, 0x68, 0x71, 0xe8, 0x2a, 0x00, 0x7f,
+ 0x4e, 0xea, 0xc1, 0xbe, 0x7c, 0x6d, 0x23, 0x79, 0xaf, 0x4d, 0x3c, 0x40, 0xc5, 0x4e, 0x80, 0x14,
+ 0xe9, 0xf9, 0x2f, 0xc2, 0x01, 0x4c, 0x82, 0x91, 0xe7, 0x06, 0xe4, 0xc7, 0xf5, 0xef, 0x33, 0x72,
+ 0xff, 0x11, 0xc6, 0xfc, 0x77, 0xea, 0x50, 0x67, 0x4b, 0x5a, 0xf3, 0xaf, 0xea, 0x72, 0xf1, 0x9d,
+ 0x32, 0x2a, 0x17, 0xd4, 0xdb, 0x45, 0xaa, 0x75, 0xd0, 0x56, 0xc3, 0xfa, 0xad, 0xa2, 0xb7, 0xa1,
+ 0x35, 0xf2, 0xbd, 0x2d, 0x9f, 0x2e, 0xa2, 0x6b, 0x89, 0xe7, 0x9d, 0x74, 0xd8, 0x9a, 0x10, 0xc3,
+ 0x12, 0xa0, 0x2a, 0x5f, 0x5d, 0x57, 0xbe, 0x9b, 0xd0, 0xb6, 0x7d, 0x6f, 0xc4, 0xbe, 0x8b, 0x17,
+ 0x27, 0x7a, 0x27, 0x72, 0x78, 0x97, 0x23, 0xb9, 0x5e, 0x09, 0xc7, 0x20, 0xaa, 0xbe, 0xbc, 0xf5,
+ 0xc5, 0x61, 0xfa, 0x0b, 0x39, 0x70, 0xde, 0x5f, 0xbd, 0x12, 0x16, 0xe2, 0x14, 0x48, 0x9e, 0x32,
+ 0x60, 0x6b, 0x2c, 0x70, 0xe5, 0x69, 0x04, 0xe4, 0xe2, 0xe8, 0x1a, 0xb4, 0x02, 0x6b, 0x8f, 0xb0,
+ 0xc7, 0xb2, 0xdb, 0x63, 0x9b, 0x62, 0x5d, 0x88, 0xf5, 0x4a, 0x58, 0x42, 0x68, 0x95, 0x77, 0x9c,
+ 0x2d, 0xbe, 0x7d, 0x15, 0x2f, 0x76, 0xe7, 0x55, 0xf9, 0x5e, 0x24, 0xc7, 0x9e, 0x57, 0x8f, 0x02,
+ 0x74, 0xbb, 0xc5, 0xed, 0xf4, 0x0c, 0x3f, 0xab, 0x66, 0x01, 0x73, 0x06, 0xda, 0xb2, 0x89, 0xcc,
+ 0x96, 0x1c, 0x26, 0x2d, 0x68, 0xf0, 0x1a, 0x98, 0x00, 0xad, 0xa8, 0x40, 0x54, 0x58, 0x92, 0x9b,
+ 0xab, 0xd0, 0x8a, 0x3a, 0x2d, 0xe7, 0x2d, 0x0c, 0x04, 0x35, 0xdb, 0x13, 0xeb, 0xb4, 0x2a, 0x66,
+ 0xbf, 0x69, 0xa7, 0xaa, 0x4f, 0x68, 0xb5, 0xe5, 0xfb, 0x50, 0xf3, 0x0b, 0xd1, 0x25, 0x29, 0x6a,
+ 0xda, 0xb8, 0x07, 0x60, 0x06, 0x9a, 0x78, 0x97, 0x2d, 0xa1, 0x3b, 0x65, 0x1a, 0x4d, 0xf7, 0x65,
+ 0x9d, 0x0a, 0xb5, 0x92, 0x4b, 0x96, 0x3b, 0x20, 0x43, 0xb6, 0xec, 0x92, 0xb6, 0xb7, 0xb6, 0xd8,
+ 0x96, 0xe4, 0x8b, 0xc7, 0xfe, 0xfa, 0x83, 0xe3, 0xe5, 0x6f, 0x7f, 0x70, 0xbc, 0xfc, 0xfd, 0x0f,
+ 0x8e, 0x97, 0x7f, 0xf9, 0x07, 0xc7, 0x4b, 0xdf, 0xfe, 0xc1, 0xf1, 0xd2, 0x3f, 0xfe, 0xe0, 0x78,
+ 0xe9, 0xfd, 0xca, 0x68, 0x63, 0xa3, 0xc1, 0x2e, 0xba, 0x5c, 0xfc, 0xaf, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x12, 0x2b, 0x47, 0xb9, 0x15, 0x67, 0x00, 0x00,
}
func (m *Event) Marshal() (dAtA []byte, err error) {
@@ -14409,6 +14487,29 @@ func (m *EventMessageValueOfImportFinish) MarshalToSizedBuffer(dAtA []byte) (int
}
return len(dAtA) - i, nil
}
+func (m *EventMessageValueOfSpaceAutoWidgetAdded) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *EventMessageValueOfSpaceAutoWidgetAdded) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ if m.SpaceAutoWidgetAdded != nil {
+ {
+ size, err := m.SpaceAutoWidgetAdded.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintEvents(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x7
+ i--
+ dAtA[i] = 0xd2
+ }
+ return len(dAtA) - i, nil
+}
func (m *EventMessageValueOfBlockDataviewRelationSet) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
@@ -16343,20 +16444,20 @@ func (m *EventBlockMarksInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
var l int
_ = l
if len(m.MarksInRange) > 0 {
- dAtA96 := make([]byte, len(m.MarksInRange)*10)
- var j95 int
+ dAtA97 := make([]byte, len(m.MarksInRange)*10)
+ var j96 int
for _, num := range m.MarksInRange {
for num >= 1<<7 {
- dAtA96[j95] = uint8(uint64(num)&0x7f | 0x80)
+ dAtA97[j96] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
- j95++
+ j96++
}
- dAtA96[j95] = uint8(num)
- j95++
+ dAtA97[j96] = uint8(num)
+ j96++
}
- i -= j95
- copy(dAtA[i:], dAtA96[:j95])
- i = encodeVarintEvents(dAtA, i, uint64(j95))
+ i -= j96
+ copy(dAtA[i:], dAtA97[:j96])
+ i = encodeVarintEvents(dAtA, i, uint64(j96))
i--
dAtA[i] = 0xa
}
@@ -22692,6 +22793,50 @@ func (m *EventSpaceSyncStatusUpdate) MarshalToSizedBuffer(dAtA []byte) (int, err
return len(dAtA) - i, nil
}
+func (m *EventSpaceAutoWidgetAdded) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *EventSpaceAutoWidgetAdded) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *EventSpaceAutoWidgetAdded) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.WidgetBlockId) > 0 {
+ i -= len(m.WidgetBlockId)
+ copy(dAtA[i:], m.WidgetBlockId)
+ i = encodeVarintEvents(dAtA, i, uint64(len(m.WidgetBlockId)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.TargetName) > 0 {
+ i -= len(m.TargetName)
+ copy(dAtA[i:], m.TargetName)
+ i = encodeVarintEvents(dAtA, i, uint64(len(m.TargetName)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.TargetId) > 0 {
+ i -= len(m.TargetId)
+ copy(dAtA[i:], m.TargetId)
+ i = encodeVarintEvents(dAtA, i, uint64(len(m.TargetId)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *EventP2PStatus) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -24008,6 +24153,18 @@ func (m *EventMessageValueOfImportFinish) Size() (n int) {
}
return n
}
+func (m *EventMessageValueOfSpaceAutoWidgetAdded) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.SpaceAutoWidgetAdded != nil {
+ l = m.SpaceAutoWidgetAdded.Size()
+ n += 2 + l + sovEvents(uint64(l))
+ }
+ return n
+}
func (m *EventMessageValueOfBlockDataviewRelationSet) Size() (n int) {
if m == nil {
return 0
@@ -27563,6 +27720,27 @@ func (m *EventSpaceSyncStatusUpdate) Size() (n int) {
return n
}
+func (m *EventSpaceAutoWidgetAdded) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.TargetId)
+ if l > 0 {
+ n += 1 + l + sovEvents(uint64(l))
+ }
+ l = len(m.TargetName)
+ if l > 0 {
+ n += 1 + l + sovEvents(uint64(l))
+ }
+ l = len(m.WidgetBlockId)
+ if l > 0 {
+ n += 1 + l + sovEvents(uint64(l))
+ }
+ return n
+}
+
func (m *EventP2PStatus) Size() (n int) {
if m == nil {
return 0
@@ -30160,6 +30338,41 @@ func (m *EventMessage) Unmarshal(dAtA []byte) error {
}
m.Value = &EventMessageValueOfImportFinish{v}
iNdEx = postIndex
+ case 122:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SpaceAutoWidgetAdded", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowEvents
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthEvents
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthEvents
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ v := &EventSpaceAutoWidgetAdded{}
+ if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ m.Value = &EventMessageValueOfSpaceAutoWidgetAdded{v}
+ iNdEx = postIndex
case 123:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field BlockDataviewRelationSet", wireType)
@@ -51996,6 +52209,152 @@ func (m *EventSpaceSyncStatusUpdate) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *EventSpaceAutoWidgetAdded) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowEvents
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: AutoWidgetAdded: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: AutoWidgetAdded: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TargetId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowEvents
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthEvents
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthEvents
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TargetId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TargetName", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowEvents
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthEvents
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthEvents
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TargetName = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field WidgetBlockId", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowEvents
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthEvents
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthEvents
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.WidgetBlockId = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipEvents(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthEvents
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *EventP2PStatus) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
diff --git a/pb/protos/events.proto b/pb/protos/events.proto
index 0b407d61e..ad930e121 100644
--- a/pb/protos/events.proto
+++ b/pb/protos/events.proto
@@ -108,6 +108,7 @@ message Event {
Membership.Update membershipUpdate = 117;
Space.SyncStatus.Update spaceSyncStatusUpdate = 119;
+ Space.AutoWidgetAdded spaceAutoWidgetAdded = 122;
P2PStatus.Update p2pStatusUpdate = 120;
@@ -1154,6 +1155,12 @@ message Event {
IncompatibleVersion = 2;
NetworkError = 3;
}
+
+ message AutoWidgetAdded {
+ string targetId = 1;
+ string targetName = 2; // pluralName (if exists) for types, fallback to name. Special cases for "bin" and "favorites"
+ string widgetBlockId = 3;
+ }
}
message P2PStatus {
message Update {
diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go
index 329c3b35c..67122633a 100644
--- a/pkg/lib/pb/model/models.pb.go
+++ b/pkg/lib/pb/model/models.pb.go
@@ -5166,9 +5166,10 @@ func (m *BlockContentTableRow) GetIsHeader() bool {
}
type BlockContentWidget struct {
- Layout BlockContentWidgetLayout `protobuf:"varint,1,opt,name=layout,proto3,enum=anytype.model.BlockContentWidgetLayout" json:"layout,omitempty"`
- Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
- ViewId string `protobuf:"bytes,3,opt,name=viewId,proto3" json:"viewId,omitempty"`
+ Layout BlockContentWidgetLayout `protobuf:"varint,1,opt,name=layout,proto3,enum=anytype.model.BlockContentWidgetLayout" json:"layout,omitempty"`
+ Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"`
+ ViewId string `protobuf:"bytes,3,opt,name=viewId,proto3" json:"viewId,omitempty"`
+ AutoAdded bool `protobuf:"varint,4,opt,name=autoAdded,proto3" json:"autoAdded,omitempty"`
}
func (m *BlockContentWidget) Reset() { *m = BlockContentWidget{} }
@@ -5225,6 +5226,13 @@ func (m *BlockContentWidget) GetViewId() string {
return ""
}
+func (m *BlockContentWidget) GetAutoAdded() bool {
+ if m != nil {
+ return m.AutoAdded
+ }
+ return false
+}
+
type BlockContentChat struct {
}
@@ -7356,7 +7364,6 @@ type Notification struct {
// *NotificationPayloadOfParticipantRemove
// *NotificationPayloadOfParticipantRequestDecline
// *NotificationPayloadOfParticipantPermissionsChange
- // *NotificationPayloadOfAutoTypeWidgetAdded
Payload IsNotificationPayload `protobuf_oneof:"payload"`
Space string `protobuf:"bytes,7,opt,name=space,proto3" json:"space,omitempty"`
AclHeadId string `protobuf:"bytes,14,opt,name=aclHeadId,proto3" json:"aclHeadId,omitempty"`
@@ -7431,9 +7438,6 @@ type NotificationPayloadOfParticipantRequestDecline struct {
type NotificationPayloadOfParticipantPermissionsChange struct {
ParticipantPermissionsChange *NotificationParticipantPermissionsChange `protobuf:"bytes,18,opt,name=participantPermissionsChange,proto3,oneof" json:"participantPermissionsChange,omitempty"`
}
-type NotificationPayloadOfAutoTypeWidgetAdded struct {
- AutoTypeWidgetAdded *NotificationAutoTypeWidgetAdded `protobuf:"bytes,19,opt,name=autoTypeWidgetAdded,proto3,oneof" json:"autoTypeWidgetAdded,omitempty"`
-}
func (*NotificationPayloadOfImport) IsNotificationPayload() {}
func (*NotificationPayloadOfExport) IsNotificationPayload() {}
@@ -7445,7 +7449,6 @@ func (*NotificationPayloadOfRequestToLeave) IsNotificationPayload()
func (*NotificationPayloadOfParticipantRemove) IsNotificationPayload() {}
func (*NotificationPayloadOfParticipantRequestDecline) IsNotificationPayload() {}
func (*NotificationPayloadOfParticipantPermissionsChange) IsNotificationPayload() {}
-func (*NotificationPayloadOfAutoTypeWidgetAdded) IsNotificationPayload() {}
func (m *Notification) GetPayload() IsNotificationPayload {
if m != nil {
@@ -7559,13 +7562,6 @@ func (m *Notification) GetParticipantPermissionsChange() *NotificationParticipan
return nil
}
-func (m *Notification) GetAutoTypeWidgetAdded() *NotificationAutoTypeWidgetAdded {
- if x, ok := m.GetPayload().(*NotificationPayloadOfAutoTypeWidgetAdded); ok {
- return x.AutoTypeWidgetAdded
- }
- return nil
-}
-
func (m *Notification) GetSpace() string {
if m != nil {
return m.Space
@@ -7593,7 +7589,6 @@ func (*Notification) XXX_OneofWrappers() []interface{} {
(*NotificationPayloadOfParticipantRemove)(nil),
(*NotificationPayloadOfParticipantRequestDecline)(nil),
(*NotificationPayloadOfParticipantPermissionsChange)(nil),
- (*NotificationPayloadOfAutoTypeWidgetAdded)(nil),
}
}
@@ -8249,66 +8244,6 @@ func (m *NotificationParticipantPermissionsChange) GetSpaceName() string {
return ""
}
-type NotificationAutoTypeWidgetAdded struct {
- SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
- TypePluralName string `protobuf:"bytes,2,opt,name=typePluralName,proto3" json:"typePluralName,omitempty"`
- WidgetBlockId string `protobuf:"bytes,3,opt,name=widgetBlockId,proto3" json:"widgetBlockId,omitempty"`
-}
-
-func (m *NotificationAutoTypeWidgetAdded) Reset() { *m = NotificationAutoTypeWidgetAdded{} }
-func (m *NotificationAutoTypeWidgetAdded) String() string { return proto.CompactTextString(m) }
-func (*NotificationAutoTypeWidgetAdded) ProtoMessage() {}
-func (*NotificationAutoTypeWidgetAdded) Descriptor() ([]byte, []int) {
- return fileDescriptor_98a910b73321e591, []int{21, 10}
-}
-func (m *NotificationAutoTypeWidgetAdded) XXX_Unmarshal(b []byte) error {
- return m.Unmarshal(b)
-}
-func (m *NotificationAutoTypeWidgetAdded) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- if deterministic {
- return xxx_messageInfo_NotificationAutoTypeWidgetAdded.Marshal(b, m, deterministic)
- } else {
- b = b[:cap(b)]
- n, err := m.MarshalToSizedBuffer(b)
- if err != nil {
- return nil, err
- }
- return b[:n], nil
- }
-}
-func (m *NotificationAutoTypeWidgetAdded) XXX_Merge(src proto.Message) {
- xxx_messageInfo_NotificationAutoTypeWidgetAdded.Merge(m, src)
-}
-func (m *NotificationAutoTypeWidgetAdded) XXX_Size() int {
- return m.Size()
-}
-func (m *NotificationAutoTypeWidgetAdded) XXX_DiscardUnknown() {
- xxx_messageInfo_NotificationAutoTypeWidgetAdded.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_NotificationAutoTypeWidgetAdded proto.InternalMessageInfo
-
-func (m *NotificationAutoTypeWidgetAdded) GetSpaceId() string {
- if m != nil {
- return m.SpaceId
- }
- return ""
-}
-
-func (m *NotificationAutoTypeWidgetAdded) GetTypePluralName() string {
- if m != nil {
- return m.TypePluralName
- }
- return ""
-}
-
-func (m *NotificationAutoTypeWidgetAdded) GetWidgetBlockId() string {
- if m != nil {
- return m.WidgetBlockId
- }
- return ""
-}
-
type Export struct {
}
@@ -9875,7 +9810,6 @@ func init() {
proto.RegisterType((*NotificationParticipantRemove)(nil), "anytype.model.Notification.ParticipantRemove")
proto.RegisterType((*NotificationParticipantRequestDecline)(nil), "anytype.model.Notification.ParticipantRequestDecline")
proto.RegisterType((*NotificationParticipantPermissionsChange)(nil), "anytype.model.Notification.ParticipantPermissionsChange")
- proto.RegisterType((*NotificationAutoTypeWidgetAdded)(nil), "anytype.model.Notification.AutoTypeWidgetAdded")
proto.RegisterType((*Export)(nil), "anytype.model.Export")
proto.RegisterType((*Import)(nil), "anytype.model.Import")
proto.RegisterType((*Invite)(nil), "anytype.model.Invite")
@@ -9903,588 +9837,585 @@ func init() {
}
var fileDescriptor_98a910b73321e591 = []byte{
- // 9288 bytes of a gzipped FileDescriptorProto
+ // 9237 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xc9,
- 0x91, 0x58, 0xf3, 0x4d, 0x06, 0xfb, 0x91, 0x9d, 0xf3, 0xa2, 0xa8, 0xb9, 0xf1, 0x88, 0x5a, 0xed,
- 0x8e, 0x46, 0xab, 0x9e, 0xdd, 0xd9, 0x5d, 0xed, 0x6a, 0xa5, 0x5d, 0x89, 0xcd, 0x66, 0x4f, 0x73,
- 0xa7, 0x5f, 0x2a, 0x72, 0x66, 0xb4, 0x8b, 0x3b, 0xb7, 0xab, 0x59, 0xd9, 0x64, 0xa9, 0x8b, 0x55,
- 0x54, 0x55, 0xb2, 0xa7, 0x5b, 0xf0, 0x19, 0xf2, 0xeb, 0xce, 0xf7, 0x27, 0x1b, 0x3e, 0xdb, 0x07,
- 0xc3, 0x38, 0xe9, 0xc3, 0x80, 0xe1, 0x3b, 0xc3, 0x5f, 0x82, 0x7d, 0xb6, 0x0f, 0xb8, 0x33, 0x60,
- 0xc0, 0x80, 0x7f, 0x64, 0x7f, 0xf9, 0xc3, 0x80, 0x8d, 0x15, 0xe0, 0x1f, 0xc3, 0x3e, 0x9c, 0x01,
- 0x03, 0x82, 0xe1, 0x0f, 0x23, 0x22, 0xb3, 0x5e, 0x24, 0xbb, 0x87, 0xb3, 0x77, 0x67, 0xf8, 0xab,
- 0x99, 0x51, 0x11, 0x91, 0xaf, 0xc8, 0xc8, 0x88, 0xc8, 0xc8, 0x6c, 0x78, 0x65, 0x7c, 0x3a, 0x78,
- 0xe0, 0xd8, 0xc7, 0x0f, 0xc6, 0xc7, 0x0f, 0x46, 0x9e, 0x25, 0x9c, 0x07, 0x63, 0xdf, 0x93, 0x5e,
- 0xa0, 0x0a, 0xc1, 0x06, 0x95, 0xf8, 0x8a, 0xe9, 0x5e, 0xc8, 0x8b, 0xb1, 0xd8, 0x20, 0x68, 0xfd,
- 0xf6, 0xc0, 0xf3, 0x06, 0x8e, 0x50, 0xa8, 0xc7, 0x93, 0x93, 0x07, 0x81, 0xf4, 0x27, 0x7d, 0xa9,
- 0x90, 0x1b, 0x3f, 0xcb, 0xc3, 0xcd, 0xee, 0xc8, 0xf4, 0xe5, 0xa6, 0xe3, 0xf5, 0x4f, 0xbb, 0xae,
- 0x39, 0x0e, 0x86, 0x9e, 0xdc, 0x34, 0x03, 0xc1, 0x5f, 0x87, 0xe2, 0x31, 0x02, 0x83, 0x5a, 0xe6,
- 0x6e, 0xee, 0x5e, 0xf5, 0xe1, 0xf5, 0x8d, 0x14, 0xe3, 0x0d, 0xa2, 0x30, 0x34, 0x0e, 0x7f, 0x13,
- 0x4a, 0x96, 0x90, 0xa6, 0xed, 0x04, 0xb5, 0xec, 0xdd, 0xcc, 0xbd, 0xea, 0xc3, 0x5b, 0x1b, 0xaa,
- 0xe2, 0x8d, 0xb0, 0xe2, 0x8d, 0x2e, 0x55, 0x6c, 0x84, 0x78, 0xfc, 0x5d, 0x28, 0x9f, 0xd8, 0x8e,
- 0x78, 0x2c, 0x2e, 0x82, 0x5a, 0xee, 0x4a, 0x9a, 0xcd, 0x6c, 0x2d, 0x63, 0x44, 0xc8, 0xbc, 0x05,
- 0xab, 0xe2, 0x5c, 0xfa, 0xa6, 0x21, 0x1c, 0x53, 0xda, 0x9e, 0x1b, 0xd4, 0xf2, 0xd4, 0xc2, 0x5b,
- 0x53, 0x2d, 0x0c, 0xbf, 0x13, 0xf9, 0x14, 0x09, 0xbf, 0x0b, 0x55, 0xef, 0xf8, 0x7b, 0xa2, 0x2f,
- 0x7b, 0x17, 0x63, 0x11, 0xd4, 0x0a, 0x77, 0x73, 0xf7, 0x2a, 0x46, 0x12, 0xc4, 0xbf, 0x0e, 0xd5,
- 0xbe, 0xe7, 0x38, 0xa2, 0xaf, 0xea, 0x28, 0x5e, 0xdd, 0xad, 0x24, 0x2e, 0x7f, 0x1b, 0x6e, 0xf8,
- 0x62, 0xe4, 0x9d, 0x09, 0xab, 0x15, 0x41, 0xa9, 0x9f, 0x65, 0xaa, 0x66, 0xfe, 0x47, 0xde, 0x84,
- 0x15, 0x5f, 0xb7, 0x6f, 0xd7, 0x76, 0x4f, 0x83, 0x5a, 0x89, 0xba, 0xf5, 0xf9, 0x4b, 0xba, 0x85,
- 0x38, 0x46, 0x9a, 0x82, 0x33, 0xc8, 0x9d, 0x8a, 0x8b, 0x5a, 0xe5, 0x6e, 0xe6, 0x5e, 0xc5, 0xc0,
- 0x9f, 0xfc, 0x7d, 0xa8, 0x79, 0xbe, 0x3d, 0xb0, 0x5d, 0xd3, 0x69, 0xf9, 0xc2, 0x94, 0xc2, 0xea,
- 0xd9, 0x23, 0x11, 0x48, 0x73, 0x34, 0xae, 0xc1, 0xdd, 0xcc, 0xbd, 0x9c, 0x71, 0xe9, 0x77, 0xfe,
- 0x96, 0x9a, 0xa1, 0x8e, 0x7b, 0xe2, 0xd5, 0xaa, 0xba, 0xfb, 0xe9, 0xb6, 0x6c, 0xeb, 0xcf, 0x46,
- 0x84, 0xd8, 0xf8, 0x45, 0x16, 0x8a, 0x5d, 0x61, 0xfa, 0xfd, 0x61, 0xfd, 0xd7, 0x33, 0x50, 0x34,
- 0x44, 0x30, 0x71, 0x24, 0xaf, 0x43, 0x59, 0x8d, 0x6d, 0xc7, 0xaa, 0x65, 0xa8, 0x75, 0x51, 0xf9,
- 0xb3, 0xc8, 0xce, 0x06, 0xe4, 0x47, 0x42, 0x9a, 0xb5, 0x1c, 0x8d, 0x50, 0x7d, 0xaa, 0x55, 0xaa,
- 0xfa, 0x8d, 0x3d, 0x21, 0x4d, 0x83, 0xf0, 0xea, 0x3f, 0xcf, 0x40, 0x1e, 0x8b, 0xfc, 0x36, 0x54,
- 0x86, 0xf6, 0x60, 0xe8, 0xd8, 0x83, 0xa1, 0xd4, 0x0d, 0x89, 0x01, 0xfc, 0x43, 0x58, 0x8b, 0x0a,
- 0x86, 0xe9, 0x0e, 0x04, 0xb6, 0x68, 0x9e, 0xf0, 0xd3, 0x47, 0x63, 0x1a, 0x99, 0xd7, 0xa0, 0x44,
- 0xeb, 0xa1, 0x63, 0x91, 0x44, 0x57, 0x8c, 0xb0, 0x88, 0xe2, 0x16, 0xce, 0xd4, 0x63, 0x71, 0x51,
- 0xcb, 0xd3, 0xd7, 0x24, 0x88, 0x37, 0x61, 0x2d, 0x2c, 0x6e, 0xe9, 0xd1, 0x28, 0x5c, 0x3d, 0x1a,
- 0xd3, 0xf8, 0x8d, 0x4f, 0x77, 0xa1, 0x40, 0xcb, 0x92, 0xaf, 0x42, 0xd6, 0x0e, 0x07, 0x3a, 0x6b,
- 0x5b, 0xfc, 0x01, 0x14, 0x4f, 0x6c, 0xe1, 0x58, 0x2f, 0x1c, 0x61, 0x8d, 0xc6, 0xdb, 0xb0, 0xec,
- 0x8b, 0x40, 0xfa, 0xb6, 0x96, 0x7e, 0xb5, 0x40, 0xbf, 0x30, 0x4f, 0x07, 0x6c, 0x18, 0x09, 0x44,
- 0x23, 0x45, 0x86, 0xdd, 0xee, 0x0f, 0x6d, 0xc7, 0xf2, 0x85, 0xdb, 0xb1, 0xd4, 0x3a, 0xad, 0x18,
- 0x49, 0x10, 0xbf, 0x07, 0x6b, 0xc7, 0x66, 0xff, 0x74, 0xe0, 0x7b, 0x13, 0x17, 0x17, 0x84, 0xe7,
- 0x53, 0xb7, 0x2b, 0xc6, 0x34, 0x98, 0xbf, 0x01, 0x05, 0xd3, 0xb1, 0x07, 0x2e, 0xad, 0xc4, 0xd5,
- 0x99, 0x49, 0x57, 0x6d, 0x69, 0x22, 0x86, 0xa1, 0x10, 0xf9, 0x0e, 0xac, 0x9c, 0x09, 0x5f, 0xda,
- 0x7d, 0xd3, 0x21, 0x78, 0xad, 0x44, 0x94, 0x8d, 0xb9, 0x94, 0x4f, 0x93, 0x98, 0x46, 0x9a, 0x90,
- 0x77, 0x00, 0x02, 0x54, 0x93, 0x34, 0x9d, 0x7a, 0x2d, 0xbc, 0x36, 0x97, 0x4d, 0xcb, 0x73, 0xa5,
- 0x70, 0xe5, 0x46, 0x37, 0x42, 0xdf, 0x59, 0x32, 0x12, 0xc4, 0xfc, 0x5d, 0xc8, 0x4b, 0x71, 0x2e,
- 0x6b, 0xab, 0x57, 0x8c, 0x68, 0xc8, 0xa4, 0x27, 0xce, 0xe5, 0xce, 0x92, 0x41, 0x04, 0x48, 0x88,
- 0x8b, 0xac, 0xb6, 0xb6, 0x00, 0x21, 0xae, 0x4b, 0x24, 0x44, 0x02, 0xfe, 0x01, 0x14, 0x1d, 0xf3,
- 0xc2, 0x9b, 0xc8, 0x1a, 0x23, 0xd2, 0x2f, 0x5e, 0x49, 0xba, 0x4b, 0xa8, 0x3b, 0x4b, 0x86, 0x26,
- 0xe2, 0x6f, 0x43, 0xce, 0xb2, 0xcf, 0x6a, 0xeb, 0x44, 0x7b, 0xf7, 0x4a, 0xda, 0x2d, 0xfb, 0x6c,
- 0x67, 0xc9, 0x40, 0x74, 0xde, 0x82, 0xf2, 0xb1, 0xe7, 0x9d, 0x8e, 0x4c, 0xff, 0xb4, 0xc6, 0x89,
- 0xf4, 0x4b, 0x57, 0x92, 0x6e, 0x6a, 0xe4, 0x9d, 0x25, 0x23, 0x22, 0xc4, 0x2e, 0xdb, 0x7d, 0xcf,
- 0xad, 0x5d, 0x5b, 0xa0, 0xcb, 0x9d, 0xbe, 0xe7, 0x62, 0x97, 0x91, 0x00, 0x09, 0x1d, 0xdb, 0x3d,
- 0xad, 0x5d, 0x5f, 0x80, 0x10, 0x35, 0x27, 0x12, 0x22, 0x01, 0x36, 0xdb, 0x32, 0xa5, 0x79, 0x66,
- 0x8b, 0xe7, 0xb5, 0x1b, 0x0b, 0x34, 0x7b, 0x4b, 0x23, 0x63, 0xb3, 0x43, 0x42, 0x64, 0x12, 0x2e,
- 0xcd, 0xda, 0xcd, 0x05, 0x98, 0x84, 0x1a, 0x1d, 0x99, 0x84, 0x84, 0xfc, 0xcf, 0xc3, 0xfa, 0x89,
- 0x30, 0xe5, 0xc4, 0x17, 0x56, 0xbc, 0xd1, 0xdd, 0x22, 0x6e, 0x1b, 0x57, 0xcf, 0xfd, 0x34, 0xd5,
- 0xce, 0x92, 0x31, 0xcb, 0x8a, 0xbf, 0x0f, 0x05, 0xc7, 0x94, 0xe2, 0xbc, 0x56, 0x23, 0x9e, 0x8d,
- 0x17, 0x08, 0x85, 0x14, 0xe7, 0x3b, 0x4b, 0x86, 0x22, 0xe1, 0xdf, 0x85, 0x35, 0x69, 0x1e, 0x3b,
- 0xe2, 0xe0, 0x44, 0x23, 0x04, 0xb5, 0xcf, 0x11, 0x97, 0xd7, 0xaf, 0x16, 0xe7, 0x34, 0xcd, 0xce,
- 0x92, 0x31, 0xcd, 0x06, 0x5b, 0x45, 0xa0, 0x5a, 0x7d, 0x81, 0x56, 0x11, 0x3f, 0x6c, 0x15, 0x91,
- 0xf0, 0x5d, 0xa8, 0xd2, 0x8f, 0x96, 0xe7, 0x4c, 0x46, 0x6e, 0xed, 0xf3, 0xc4, 0xe1, 0xde, 0x8b,
- 0x39, 0x28, 0xfc, 0x9d, 0x25, 0x23, 0x49, 0x8e, 0x93, 0x48, 0x45, 0xc3, 0x7b, 0x5e, 0xbb, 0xbd,
- 0xc0, 0x24, 0xf6, 0x34, 0x32, 0x4e, 0x62, 0x48, 0x88, 0x4b, 0xef, 0xb9, 0x6d, 0x0d, 0x84, 0xac,
- 0xfd, 0xd2, 0x02, 0x4b, 0xef, 0x19, 0xa1, 0xe2, 0xd2, 0x53, 0x44, 0x28, 0xc6, 0xfd, 0xa1, 0x29,
- 0x6b, 0x77, 0x16, 0x10, 0xe3, 0xd6, 0xd0, 0x24, 0x5d, 0x81, 0x04, 0xf5, 0x1f, 0xc0, 0x72, 0x52,
- 0x2b, 0x73, 0x0e, 0x79, 0x5f, 0x98, 0x6a, 0x47, 0x28, 0x1b, 0xf4, 0x1b, 0x61, 0xc2, 0xb2, 0x25,
- 0xed, 0x08, 0x65, 0x83, 0x7e, 0xf3, 0x9b, 0x50, 0x54, 0xb6, 0x09, 0x29, 0xfc, 0xb2, 0xa1, 0x4b,
- 0x88, 0x6b, 0xf9, 0xe6, 0x80, 0xf6, 0xad, 0xb2, 0x41, 0xbf, 0x11, 0xd7, 0xf2, 0xbd, 0xf1, 0x81,
- 0x4b, 0x0a, 0xbb, 0x6c, 0xe8, 0x52, 0xfd, 0xdf, 0x7c, 0x00, 0x25, 0xdd, 0xa8, 0xfa, 0x3f, 0xc8,
- 0x40, 0x51, 0x29, 0x14, 0xfe, 0x2d, 0x28, 0x04, 0xf2, 0xc2, 0x11, 0xd4, 0x86, 0xd5, 0x87, 0x5f,
- 0x5e, 0x40, 0x09, 0x6d, 0x74, 0x91, 0xc0, 0x50, 0x74, 0x0d, 0x03, 0x0a, 0x54, 0xe6, 0x25, 0xc8,
- 0x19, 0xde, 0x73, 0xb6, 0xc4, 0x01, 0x8a, 0x6a, 0xb2, 0x58, 0x06, 0x81, 0x5b, 0xf6, 0x19, 0xcb,
- 0x22, 0x70, 0x47, 0x98, 0x96, 0xf0, 0x59, 0x8e, 0xaf, 0x40, 0x25, 0x9c, 0x96, 0x80, 0xe5, 0x39,
- 0x83, 0xe5, 0xc4, 0x84, 0x07, 0xac, 0x50, 0xff, 0x9f, 0x79, 0xc8, 0xe3, 0xfa, 0xe7, 0xaf, 0xc0,
- 0x8a, 0x34, 0xfd, 0x81, 0x50, 0x86, 0x70, 0x64, 0xa4, 0xa4, 0x81, 0xfc, 0x83, 0xb0, 0x0f, 0x59,
- 0xea, 0xc3, 0x6b, 0x2f, 0xd4, 0x2b, 0xa9, 0x1e, 0x24, 0x76, 0xe1, 0xdc, 0x62, 0xbb, 0xf0, 0x36,
- 0x94, 0x51, 0x9d, 0x75, 0xed, 0x1f, 0x08, 0x1a, 0xfa, 0xd5, 0x87, 0xf7, 0x5f, 0x5c, 0x65, 0x47,
- 0x53, 0x18, 0x11, 0x2d, 0xef, 0x40, 0xa5, 0x6f, 0xfa, 0x16, 0x35, 0x86, 0x66, 0x6b, 0xf5, 0xe1,
- 0x57, 0x5e, 0xcc, 0xa8, 0x15, 0x92, 0x18, 0x31, 0x35, 0x3f, 0x80, 0xaa, 0x25, 0x82, 0xbe, 0x6f,
- 0x8f, 0x49, 0xbd, 0xa9, 0xbd, 0xf8, 0xab, 0x2f, 0x66, 0xb6, 0x15, 0x13, 0x19, 0x49, 0x0e, 0x68,
- 0x91, 0xf9, 0x91, 0x7e, 0x2b, 0x91, 0x81, 0x10, 0x03, 0x1a, 0xef, 0x42, 0x39, 0xec, 0x0f, 0x5f,
- 0x86, 0x32, 0xfe, 0xdd, 0xf7, 0x5c, 0xc1, 0x96, 0x70, 0x6e, 0xb1, 0xd4, 0x1d, 0x99, 0x8e, 0xc3,
- 0x32, 0x7c, 0x15, 0x00, 0x8b, 0x7b, 0xc2, 0xb2, 0x27, 0x23, 0x96, 0x6d, 0x7c, 0x23, 0x94, 0x96,
- 0x32, 0xe4, 0x0f, 0xcd, 0x01, 0x52, 0x2c, 0x43, 0x39, 0x54, 0xd7, 0x2c, 0x83, 0xf4, 0x5b, 0x66,
- 0x30, 0x3c, 0xf6, 0x4c, 0xdf, 0x62, 0x59, 0x5e, 0x85, 0x52, 0xd3, 0xef, 0x0f, 0xed, 0x33, 0xc1,
- 0x72, 0x8d, 0x07, 0x50, 0x4d, 0xb4, 0x17, 0x59, 0xe8, 0x4a, 0x2b, 0x50, 0x68, 0x5a, 0x96, 0xb0,
- 0x58, 0x06, 0x09, 0x74, 0x07, 0x59, 0xb6, 0xf1, 0x15, 0xa8, 0x44, 0xa3, 0x85, 0xe8, 0xb8, 0x71,
- 0xb3, 0x25, 0xfc, 0x85, 0x60, 0x96, 0x41, 0xa9, 0xec, 0xb8, 0x8e, 0xed, 0x0a, 0x96, 0xad, 0xff,
- 0x05, 0x12, 0x55, 0xfe, 0xcd, 0xf4, 0x82, 0x78, 0xf5, 0x45, 0x3b, 0x6b, 0x7a, 0x35, 0x7c, 0x3e,
- 0xd1, 0xbf, 0x5d, 0x9b, 0x1a, 0x57, 0x86, 0xfc, 0x96, 0x27, 0x03, 0x96, 0xa9, 0xff, 0xb7, 0x2c,
- 0x94, 0xc3, 0x0d, 0x15, 0x7d, 0x82, 0x89, 0xef, 0x68, 0x81, 0xc6, 0x9f, 0xfc, 0x3a, 0x14, 0xa4,
- 0x2d, 0xb5, 0x18, 0x57, 0x0c, 0x55, 0x40, 0x5b, 0x2d, 0x39, 0xb3, 0xca, 0x80, 0x9d, 0x9e, 0x2a,
- 0x7b, 0x64, 0x0e, 0xc4, 0x8e, 0x19, 0x0c, 0xb5, 0x09, 0x1b, 0x03, 0x90, 0xfe, 0xc4, 0x3c, 0x43,
- 0x99, 0xa3, 0xef, 0xca, 0x8a, 0x4b, 0x82, 0xf8, 0x5b, 0x90, 0xc7, 0x0e, 0x6a, 0xa1, 0xf9, 0x73,
- 0x53, 0x1d, 0x46, 0x31, 0x39, 0xf4, 0x05, 0x4e, 0xcf, 0x06, 0x7a, 0x60, 0x06, 0x21, 0xf3, 0x57,
- 0x61, 0x55, 0x2d, 0xc2, 0x83, 0xd0, 0x7f, 0x28, 0x11, 0xe7, 0x29, 0x28, 0x6f, 0xe2, 0x70, 0x9a,
- 0x52, 0xd4, 0xca, 0x0b, 0xc8, 0x77, 0x38, 0x38, 0x1b, 0x5d, 0x24, 0x31, 0x14, 0x65, 0xe3, 0x1d,
- 0x1c, 0x53, 0x53, 0x0a, 0x9c, 0xe6, 0xf6, 0x68, 0x2c, 0x2f, 0x94, 0xd0, 0x6c, 0x0b, 0xd9, 0x1f,
- 0xda, 0xee, 0x80, 0x65, 0xd4, 0x10, 0xe3, 0x24, 0x12, 0x8a, 0xef, 0x7b, 0x3e, 0xcb, 0xd5, 0xeb,
- 0x90, 0x47, 0x19, 0x45, 0x25, 0xe9, 0x9a, 0x23, 0xa1, 0x47, 0x9a, 0x7e, 0xd7, 0xaf, 0xc1, 0xfa,
- 0xcc, 0x7e, 0x5c, 0xff, 0xbd, 0xa2, 0x92, 0x10, 0xa4, 0x20, 0x5b, 0x50, 0x53, 0x90, 0x99, 0xf7,
- 0x52, 0x3a, 0x06, 0xb9, 0xa4, 0x75, 0xcc, 0x07, 0x50, 0xc0, 0x8e, 0x85, 0x2a, 0x66, 0x01, 0xf2,
- 0x3d, 0x44, 0x37, 0x14, 0x15, 0x7a, 0x30, 0xfd, 0xa1, 0xe8, 0x9f, 0x0a, 0x4b, 0xeb, 0xfa, 0xb0,
- 0x88, 0x42, 0xd3, 0x4f, 0x98, 0xe7, 0xaa, 0x40, 0x22, 0xd1, 0xf7, 0xdc, 0xf6, 0xc8, 0xfb, 0x9e,
- 0x4d, 0xf3, 0x8a, 0x22, 0x11, 0x02, 0xc2, 0xaf, 0x1d, 0x94, 0x11, 0x3d, 0x6d, 0x31, 0xa0, 0xde,
- 0x86, 0x02, 0xd5, 0x8d, 0x2b, 0x41, 0xb5, 0x59, 0x45, 0x1a, 0x5e, 0x5d, 0xac, 0xcd, 0xba, 0xc9,
- 0xf5, 0xdf, 0xcd, 0x42, 0x1e, 0xcb, 0xfc, 0x3e, 0x14, 0x7c, 0xf4, 0xc3, 0x68, 0x38, 0x2f, 0xf3,
- 0xd9, 0x14, 0x0a, 0xff, 0x96, 0x16, 0xc5, 0xec, 0x02, 0xc2, 0x12, 0xd5, 0x98, 0x14, 0xcb, 0xeb,
- 0x50, 0x18, 0x9b, 0xbe, 0x39, 0xd2, 0xeb, 0x44, 0x15, 0x1a, 0x3f, 0xce, 0x40, 0x1e, 0x91, 0xf8,
- 0x3a, 0xac, 0x74, 0xa5, 0x6f, 0x9f, 0x0a, 0x39, 0xf4, 0xbd, 0xc9, 0x60, 0xa8, 0x24, 0xe9, 0xb1,
- 0xb8, 0x50, 0xfa, 0x46, 0x29, 0x04, 0x69, 0x3a, 0x76, 0x9f, 0x65, 0x51, 0xaa, 0x36, 0x3d, 0xc7,
- 0x62, 0x39, 0xbe, 0x06, 0xd5, 0x27, 0xae, 0x25, 0xfc, 0xa0, 0xef, 0xf9, 0xc2, 0x62, 0x79, 0xbd,
- 0xba, 0x4f, 0x59, 0x81, 0xf6, 0x32, 0x71, 0x2e, 0xc9, 0x17, 0x62, 0x45, 0x7e, 0x0d, 0xd6, 0x36,
- 0xd3, 0x0e, 0x12, 0x2b, 0xa1, 0x4e, 0xda, 0x13, 0x2e, 0x0a, 0x19, 0x2b, 0x2b, 0x21, 0xf6, 0xbe,
- 0x67, 0xb3, 0x0a, 0x56, 0xa6, 0xd6, 0x09, 0x83, 0xc6, 0xbf, 0xca, 0x84, 0x9a, 0x63, 0x05, 0x2a,
- 0x87, 0xa6, 0x6f, 0x0e, 0x7c, 0x73, 0x8c, 0xed, 0xab, 0x42, 0x49, 0x6d, 0x9c, 0x6f, 0x2a, 0xed,
- 0xa6, 0x0a, 0x0f, 0x95, 0x6e, 0x54, 0x85, 0xb7, 0x58, 0x2e, 0x2e, 0xbc, 0xcd, 0xf2, 0x58, 0xc7,
- 0x77, 0x26, 0x9e, 0x14, 0xac, 0x40, 0xba, 0xce, 0xb3, 0x04, 0x2b, 0x22, 0xb0, 0x87, 0x1a, 0x85,
- 0x95, 0xb0, 0xcf, 0x2d, 0x94, 0x9f, 0x63, 0xef, 0x9c, 0x95, 0xb1, 0x19, 0x38, 0x8c, 0xc2, 0x62,
- 0x15, 0xfc, 0xb2, 0x3f, 0x19, 0x1d, 0x0b, 0xec, 0x26, 0xe0, 0x97, 0x9e, 0x37, 0x18, 0x38, 0x82,
- 0x55, 0x71, 0x0c, 0x12, 0xca, 0x97, 0x2d, 0x93, 0xa6, 0x35, 0x1d, 0xc7, 0x9b, 0x48, 0xb6, 0x52,
- 0xff, 0x45, 0x0e, 0xf2, 0xe8, 0xdd, 0xe0, 0xda, 0x19, 0xa2, 0x9e, 0xd1, 0x6b, 0x07, 0x7f, 0x47,
- 0x2b, 0x30, 0x1b, 0xaf, 0x40, 0xfe, 0xbe, 0x9e, 0xe9, 0xdc, 0x02, 0x5a, 0x16, 0x19, 0x27, 0x27,
- 0x99, 0x43, 0x7e, 0x64, 0x8f, 0x84, 0xd6, 0x75, 0xf4, 0x1b, 0x61, 0x01, 0xee, 0xc7, 0x05, 0x0a,
- 0x9e, 0xd0, 0x6f, 0x5c, 0x35, 0x26, 0x6e, 0x0b, 0x4d, 0x49, 0x6b, 0x20, 0x67, 0x84, 0xc5, 0x39,
- 0xda, 0xab, 0x32, 0x57, 0x7b, 0x7d, 0x10, 0x6a, 0xaf, 0xd2, 0x02, 0xab, 0x9e, 0x9a, 0x99, 0xd4,
- 0x5c, 0xb1, 0xd2, 0x28, 0x2f, 0x4e, 0x9e, 0xd8, 0x4c, 0xb6, 0xb4, 0xd4, 0xc6, 0x1b, 0x5d, 0x59,
- 0x8d, 0x32, 0xcb, 0xe0, 0x6c, 0xd2, 0x72, 0x55, 0x3a, 0xef, 0xa9, 0x6d, 0x09, 0x8f, 0xe5, 0x68,
- 0x23, 0x9c, 0x58, 0xb6, 0xc7, 0xf2, 0x68, 0x79, 0x1d, 0x6e, 0x6d, 0xb3, 0x42, 0xe3, 0xd5, 0xc4,
- 0x96, 0xd4, 0x9c, 0x48, 0x4f, 0xb1, 0x21, 0xf1, 0xcd, 0x28, 0x69, 0x3c, 0x16, 0x16, 0xcb, 0x36,
- 0xbe, 0x36, 0x47, 0xcd, 0xae, 0x40, 0xe5, 0xc9, 0xd8, 0xf1, 0x4c, 0xeb, 0x0a, 0x3d, 0xbb, 0x0c,
- 0x10, 0x7b, 0xd5, 0xf5, 0x5f, 0x34, 0xe2, 0xed, 0x1c, 0x6d, 0xd1, 0xc0, 0x9b, 0xf8, 0x7d, 0x41,
- 0x2a, 0xa4, 0x62, 0xe8, 0x12, 0xff, 0x36, 0x14, 0xf0, 0x7b, 0x18, 0xc6, 0xb9, 0xbf, 0x90, 0x2f,
- 0xb7, 0xf1, 0xd4, 0x16, 0xcf, 0x0d, 0x45, 0xc8, 0xef, 0x00, 0x98, 0x7d, 0x69, 0x9f, 0x09, 0x04,
- 0xea, 0xc5, 0x9e, 0x80, 0xf0, 0x77, 0x92, 0xe6, 0xcb, 0xd5, 0x71, 0xc8, 0x84, 0x5d, 0xc3, 0x0d,
- 0xa8, 0xe2, 0xd2, 0x1d, 0x1f, 0xf8, 0xb8, 0xda, 0x6b, 0xcb, 0x44, 0xf8, 0xc6, 0x62, 0xcd, 0x7b,
- 0x14, 0x11, 0x1a, 0x49, 0x26, 0xfc, 0x09, 0x2c, 0xab, 0x98, 0x9a, 0x66, 0xba, 0x42, 0x4c, 0xdf,
- 0x5c, 0x8c, 0xe9, 0x41, 0x4c, 0x69, 0xa4, 0xd8, 0xcc, 0x86, 0x25, 0x0b, 0x2f, 0x1d, 0x96, 0x7c,
- 0x15, 0x56, 0x7b, 0xe9, 0x55, 0xa0, 0xb6, 0x8a, 0x29, 0x28, 0x6f, 0xc0, 0xb2, 0x1d, 0xc4, 0x51,
- 0x51, 0x8a, 0x91, 0x94, 0x8d, 0x14, 0xac, 0xfe, 0xef, 0x8b, 0x90, 0xa7, 0x91, 0x9f, 0x8e, 0x71,
- 0xb5, 0x52, 0x2a, 0xfd, 0xc1, 0xe2, 0x53, 0x3d, 0xb5, 0xe2, 0x49, 0x83, 0xe4, 0x12, 0x1a, 0xe4,
- 0xdb, 0x50, 0x08, 0x3c, 0x5f, 0x86, 0xd3, 0xbb, 0xa0, 0x10, 0x75, 0x3d, 0x5f, 0x1a, 0x8a, 0x90,
- 0x6f, 0x43, 0xe9, 0xc4, 0x76, 0x24, 0x4e, 0x8a, 0x1a, 0xbc, 0xd7, 0x17, 0xe3, 0xb1, 0x4d, 0x44,
- 0x46, 0x48, 0xcc, 0x77, 0x93, 0xc2, 0x56, 0x24, 0x4e, 0x1b, 0x8b, 0x71, 0x9a, 0x27, 0x83, 0xf7,
- 0x81, 0xf5, 0xbd, 0x33, 0xe1, 0x1b, 0x89, 0xc0, 0xa4, 0xda, 0xa4, 0x67, 0xe0, 0xbc, 0x0e, 0xe5,
- 0xa1, 0x6d, 0x09, 0xb4, 0x73, 0x48, 0xc7, 0x94, 0x8d, 0xa8, 0xcc, 0x1f, 0x43, 0x99, 0xfc, 0x03,
- 0xd4, 0x8a, 0x95, 0x97, 0x1e, 0x7c, 0xe5, 0xaa, 0x84, 0x0c, 0xb0, 0x22, 0xaa, 0x7c, 0xdb, 0x96,
- 0x14, 0x9f, 0x2e, 0x1b, 0x51, 0x19, 0x1b, 0x4c, 0xf2, 0x9e, 0x6c, 0x70, 0x55, 0x35, 0x78, 0x1a,
- 0xce, 0xdf, 0x86, 0x1b, 0x04, 0x9b, 0xda, 0x24, 0x71, 0xa9, 0x21, 0xd3, 0xf9, 0x1f, 0xd1, 0x60,
- 0x19, 0x9b, 0x03, 0xb1, 0x6b, 0x8f, 0x6c, 0x59, 0x5b, 0xb9, 0x9b, 0xb9, 0x57, 0x30, 0x62, 0x00,
- 0x7f, 0x1d, 0xd6, 0x2d, 0x71, 0x62, 0x4e, 0x1c, 0xd9, 0x13, 0xa3, 0xb1, 0x63, 0x4a, 0xd1, 0xb1,
- 0x48, 0x46, 0x2b, 0xc6, 0xec, 0x07, 0xfe, 0x06, 0x5c, 0xd3, 0xc0, 0x83, 0xe8, 0x54, 0xa1, 0x63,
- 0x51, 0xf8, 0xae, 0x62, 0xcc, 0xfb, 0xd4, 0xd8, 0xd3, 0x6a, 0x18, 0x37, 0x50, 0xf4, 0x53, 0x43,
- 0x05, 0x1a, 0x48, 0xb5, 0x23, 0x3f, 0x32, 0x1d, 0x47, 0xf8, 0x17, 0xca, 0xc9, 0x7d, 0x6c, 0xba,
- 0xc7, 0xa6, 0xcb, 0x72, 0xb4, 0xc7, 0x9a, 0x8e, 0x70, 0x2d, 0xd3, 0x57, 0x3b, 0xf2, 0x23, 0xda,
- 0xd0, 0x0b, 0x8d, 0x7b, 0x90, 0xa7, 0x21, 0xad, 0x40, 0x41, 0x79, 0x49, 0xe4, 0x31, 0x6b, 0x0f,
- 0x89, 0x34, 0xf2, 0x2e, 0x2e, 0x3f, 0x96, 0xad, 0xff, 0xc3, 0x22, 0x94, 0xc3, 0xc1, 0x0b, 0xcf,
- 0x10, 0x32, 0xf1, 0x19, 0x02, 0x9a, 0x71, 0xc1, 0x53, 0x3b, 0xb0, 0x8f, 0xb5, 0x59, 0x5a, 0x36,
- 0x62, 0x00, 0x5a, 0x42, 0xcf, 0x6d, 0x4b, 0x0e, 0x69, 0xcd, 0x14, 0x0c, 0x55, 0xe0, 0xf7, 0x60,
- 0xcd, 0xc2, 0x71, 0x70, 0xfb, 0xce, 0xc4, 0x12, 0x3d, 0xdc, 0x45, 0x55, 0x98, 0x60, 0x1a, 0xcc,
- 0x3f, 0x06, 0x90, 0xf6, 0x48, 0x6c, 0x7b, 0xfe, 0xc8, 0x94, 0xda, 0x37, 0xf8, 0xfa, 0xcb, 0x49,
- 0xf5, 0x46, 0x2f, 0x62, 0x60, 0x24, 0x98, 0x21, 0x6b, 0xac, 0x4d, 0xb3, 0x2e, 0x7d, 0x26, 0xd6,
- 0x5b, 0x11, 0x03, 0x23, 0xc1, 0x8c, 0xf7, 0xa0, 0x74, 0xe2, 0xf9, 0xa3, 0x89, 0x63, 0xea, 0x3d,
- 0xf7, 0xfd, 0x97, 0xe4, 0xbb, 0xad, 0xa8, 0x49, 0xf7, 0x84, 0xac, 0xe2, 0x18, 0x77, 0x65, 0xc1,
- 0x18, 0x77, 0xe3, 0x97, 0x01, 0xe2, 0x16, 0xf2, 0x9b, 0xc0, 0xf7, 0x3c, 0x57, 0x0e, 0x9b, 0xc7,
- 0xc7, 0xfe, 0xa6, 0x38, 0xf1, 0x7c, 0xb1, 0x65, 0xe2, 0xf6, 0x7a, 0x03, 0xd6, 0x23, 0x78, 0xf3,
- 0x44, 0x0a, 0x1f, 0xc1, 0x24, 0x02, 0xdd, 0xa1, 0xe7, 0x4b, 0x65, 0xe3, 0xd1, 0xcf, 0x27, 0x5d,
- 0x96, 0xc3, 0x2d, 0xbd, 0xd3, 0x3d, 0x60, 0xf9, 0xc6, 0x3d, 0x80, 0x78, 0x68, 0xc9, 0x17, 0xa2,
- 0x5f, 0x6f, 0x3e, 0xd4, 0x9e, 0x11, 0x95, 0x1e, 0xbe, 0xcd, 0x32, 0x8d, 0x4f, 0x33, 0x50, 0x4d,
- 0x74, 0x29, 0xed, 0x33, 0xb7, 0xbc, 0x89, 0x2b, 0x95, 0x93, 0x4e, 0x3f, 0x9f, 0x9a, 0xce, 0x04,
- 0x37, 0xf7, 0x75, 0x58, 0xa1, 0xf2, 0x96, 0x1d, 0x48, 0xdb, 0xed, 0x4b, 0x96, 0x8b, 0x50, 0x94,
- 0x61, 0x90, 0x8f, 0x50, 0xf6, 0x3d, 0x0d, 0x2a, 0x70, 0x06, 0xcb, 0x87, 0xc2, 0xef, 0x8b, 0x10,
- 0x89, 0x8c, 0x61, 0x0d, 0x89, 0xd0, 0x94, 0x31, 0x6c, 0xca, 0x61, 0x77, 0x32, 0x62, 0x65, 0x34,
- 0x2a, 0xb1, 0xd0, 0x3c, 0x13, 0x3e, 0xda, 0x32, 0x15, 0xac, 0x07, 0x01, 0xb8, 0x1a, 0x4c, 0x97,
- 0x41, 0x88, 0xbd, 0x67, 0xbb, 0xac, 0x1a, 0x15, 0xcc, 0x73, 0xb6, 0x8c, 0xed, 0x27, 0xd7, 0x81,
- 0xad, 0xd4, 0xff, 0x6b, 0x0e, 0xf2, 0xa8, 0xd7, 0xd1, 0xd7, 0x4d, 0x2a, 0x21, 0xb5, 0x56, 0x92,
- 0xa0, 0xcf, 0xb6, 0x1b, 0x21, 0xef, 0xe4, 0x6e, 0xf4, 0x1e, 0x54, 0xfb, 0x93, 0x40, 0x7a, 0x23,
- 0xda, 0x8a, 0xf5, 0x69, 0xd7, 0xcd, 0x99, 0xa8, 0x11, 0x0d, 0xa7, 0x91, 0x44, 0xe5, 0xef, 0x40,
- 0xf1, 0x44, 0x49, 0xbd, 0x8a, 0x1b, 0xfd, 0xd2, 0x25, 0xbb, 0xb5, 0x96, 0x6c, 0x8d, 0x8c, 0xfd,
- 0xb2, 0x67, 0x56, 0x6c, 0x12, 0xa4, 0x77, 0xdd, 0x62, 0xb4, 0xeb, 0xfe, 0x32, 0xac, 0x0a, 0x1c,
- 0xf0, 0x43, 0xc7, 0xec, 0x8b, 0x91, 0x70, 0xc3, 0x65, 0xf6, 0xf6, 0x4b, 0xf4, 0x98, 0x66, 0x8c,
- 0xba, 0x3d, 0xc5, 0x0b, 0x35, 0x8f, 0xeb, 0xe1, 0xe6, 0x1f, 0x3a, 0xf6, 0x65, 0x23, 0x06, 0x34,
- 0xbe, 0xa4, 0xf5, 0x65, 0x09, 0x72, 0xcd, 0xa0, 0xaf, 0x23, 0x20, 0x22, 0xe8, 0x2b, 0xf7, 0xaa,
- 0x45, 0xc3, 0xc1, 0xb2, 0x8d, 0x37, 0xa1, 0x12, 0xd5, 0x80, 0xc2, 0xb3, 0xef, 0xc9, 0xee, 0x58,
- 0xf4, 0xed, 0x13, 0x5b, 0x58, 0x4a, 0x3e, 0xbb, 0xd2, 0xf4, 0xa5, 0x0a, 0x22, 0xb6, 0x5d, 0x8b,
- 0x65, 0xeb, 0xbf, 0x53, 0x86, 0xa2, 0xda, 0x7c, 0x75, 0x87, 0x2b, 0x51, 0x87, 0xbf, 0x03, 0x65,
- 0x6f, 0x2c, 0x7c, 0x53, 0x7a, 0xbe, 0x8e, 0xdc, 0xbc, 0xf3, 0x32, 0x9b, 0xf9, 0xc6, 0x81, 0x26,
- 0x36, 0x22, 0x36, 0xd3, 0xd2, 0x94, 0x9d, 0x95, 0xa6, 0xfb, 0xc0, 0xc2, 0x7d, 0xfb, 0xd0, 0x47,
- 0x3a, 0x79, 0xa1, 0xfd, 0xf0, 0x19, 0x38, 0xef, 0x41, 0xa5, 0xef, 0xb9, 0x96, 0x1d, 0x45, 0x71,
- 0x56, 0x1f, 0x7e, 0xed, 0xa5, 0x5a, 0xd8, 0x0a, 0xa9, 0x8d, 0x98, 0x11, 0x7f, 0x1d, 0x0a, 0x67,
- 0x28, 0x66, 0x24, 0x4f, 0x97, 0x0b, 0xa1, 0x42, 0xe2, 0x9f, 0x40, 0xf5, 0xfb, 0x13, 0xbb, 0x7f,
- 0x7a, 0x90, 0x8c, 0x12, 0xbe, 0xf7, 0x52, 0xad, 0xf8, 0x4e, 0x4c, 0x6f, 0x24, 0x99, 0x25, 0x44,
- 0xbb, 0xf4, 0x27, 0x10, 0xed, 0xf2, 0xac, 0x68, 0x1b, 0xb0, 0xe2, 0x8a, 0x40, 0x0a, 0x6b, 0x5b,
- 0xdb, 0x6a, 0xf0, 0x19, 0x6c, 0xb5, 0x34, 0x8b, 0xc6, 0x17, 0xa1, 0x1c, 0x4e, 0x38, 0x2f, 0x42,
- 0x76, 0x1f, 0x9d, 0xa2, 0x22, 0x64, 0x0f, 0x7c, 0x25, 0x6d, 0x4d, 0x94, 0xb6, 0xc6, 0x1f, 0x65,
- 0xa0, 0x12, 0x0d, 0x7a, 0x5a, 0x73, 0xb6, 0xbf, 0x3f, 0x31, 0x1d, 0x96, 0x21, 0x77, 0xd9, 0x93,
- 0xaa, 0x44, 0xca, 0xfa, 0x11, 0x1d, 0xd6, 0xfb, 0x2c, 0x47, 0x26, 0x82, 0x08, 0x02, 0x96, 0xe7,
- 0x1c, 0x56, 0x35, 0xf8, 0xc0, 0x57, 0xa8, 0x05, 0x54, 0x7c, 0xf8, 0x35, 0x04, 0x14, 0x95, 0x45,
- 0x71, 0x2a, 0x94, 0x82, 0xdc, 0xf7, 0x24, 0x15, 0xca, 0xd8, 0xa8, 0x8e, 0xcb, 0x2a, 0x58, 0xe7,
- 0xbe, 0x27, 0x3b, 0xa8, 0x12, 0x23, 0xf7, 0xac, 0x1a, 0x56, 0x4f, 0x25, 0xd2, 0x88, 0x4d, 0xc7,
- 0xe9, 0xb8, 0x6c, 0x45, 0x7f, 0x50, 0xa5, 0x55, 0xe4, 0xd8, 0x3e, 0x37, 0xfb, 0x48, 0xbe, 0x86,
- 0x1a, 0x16, 0x69, 0x74, 0x99, 0xe1, 0x92, 0x6c, 0x9f, 0xdb, 0x81, 0x0c, 0xd8, 0x7a, 0xe3, 0xdf,
- 0x65, 0xa0, 0x9a, 0x98, 0x60, 0x74, 0xff, 0x08, 0x11, 0xb7, 0x32, 0xe5, 0x0d, 0x7e, 0x8c, 0xc3,
- 0xe8, 0x5b, 0xe1, 0x36, 0xd5, 0xf3, 0xf0, 0x67, 0x16, 0xeb, 0xeb, 0x79, 0x23, 0xcf, 0xf7, 0xbd,
- 0xe7, 0xca, 0xf4, 0xd9, 0x35, 0x03, 0xf9, 0x4c, 0x88, 0x53, 0x96, 0xc7, 0xae, 0xb6, 0x26, 0xbe,
- 0x2f, 0x5c, 0x05, 0x28, 0x50, 0xe3, 0xc4, 0xb9, 0x2a, 0x15, 0x91, 0x29, 0x22, 0xd3, 0x3e, 0xc8,
- 0x4a, 0xa8, 0x08, 0x34, 0xb6, 0x82, 0x94, 0x11, 0x01, 0xd1, 0x55, 0xb1, 0x82, 0x9b, 0x8a, 0x8a,
- 0x50, 0x1c, 0x9c, 0x6c, 0x99, 0x17, 0x41, 0x73, 0xe0, 0x31, 0x98, 0x06, 0xee, 0x7b, 0xcf, 0x59,
- 0xb5, 0x3e, 0x01, 0x88, 0x7d, 0x32, 0xf4, 0x45, 0x51, 0x20, 0xa2, 0x33, 0x04, 0x5d, 0xe2, 0x07,
- 0x00, 0xf8, 0x8b, 0x30, 0x43, 0x87, 0xf4, 0x25, 0x0c, 0x65, 0xa2, 0x33, 0x12, 0x2c, 0xea, 0xbf,
- 0x0a, 0x95, 0xe8, 0x03, 0xaf, 0x41, 0x89, 0x4c, 0xda, 0xa8, 0xda, 0xb0, 0x88, 0xf6, 0x99, 0xed,
- 0x5a, 0xe2, 0x9c, 0xf4, 0x4a, 0xc1, 0x50, 0x05, 0x6c, 0xe5, 0xd0, 0xb6, 0x2c, 0xe1, 0x86, 0x27,
- 0x3d, 0xaa, 0x34, 0xef, 0x3c, 0x3e, 0x3f, 0xf7, 0x3c, 0xbe, 0xfe, 0x2b, 0x50, 0x4d, 0x38, 0x8d,
- 0x97, 0x76, 0x3b, 0xd1, 0xb0, 0x6c, 0xba, 0x61, 0xb7, 0xa1, 0x12, 0xe6, 0x80, 0x04, 0xb4, 0xb7,
- 0x55, 0x8c, 0x18, 0x50, 0xff, 0x67, 0x59, 0xb4, 0x64, 0xb1, 0x6b, 0xd3, 0x8e, 0xde, 0x36, 0x14,
- 0x03, 0x69, 0xca, 0x49, 0x98, 0xcc, 0xb0, 0xe0, 0x02, 0xed, 0x12, 0xcd, 0xce, 0x92, 0xa1, 0xa9,
- 0xf9, 0x07, 0x90, 0x93, 0xe6, 0x40, 0x07, 0x4a, 0xbf, 0xbc, 0x18, 0x93, 0x9e, 0x39, 0xd8, 0x59,
- 0x32, 0x90, 0x8e, 0xef, 0x42, 0xb9, 0xaf, 0x63, 0x5b, 0x5a, 0x29, 0x2e, 0xe8, 0x8b, 0x85, 0x11,
- 0xb1, 0x9d, 0x25, 0x23, 0xe2, 0xc0, 0xbf, 0x0d, 0x79, 0xb4, 0x2e, 0x75, 0xce, 0xc7, 0x82, 0x3e,
- 0x26, 0x2e, 0x97, 0x9d, 0x25, 0x83, 0x28, 0x37, 0x4b, 0x50, 0x20, 0x1d, 0x5c, 0xaf, 0x41, 0x51,
- 0xf5, 0x75, 0x7a, 0xe4, 0xea, 0xb7, 0x20, 0xd7, 0x33, 0x07, 0x68, 0xe1, 0xdb, 0x56, 0xa0, 0x43,
- 0x25, 0xf8, 0xb3, 0xfe, 0x4a, 0x1c, 0xa7, 0x4b, 0x86, 0x80, 0x33, 0xa9, 0x10, 0x70, 0xbd, 0x08,
- 0x79, 0xac, 0xb1, 0x7e, 0xfb, 0x2a, 0x6f, 0xa1, 0xfe, 0x8f, 0x73, 0xe8, 0x58, 0x48, 0x71, 0x3e,
- 0x37, 0xbc, 0xfd, 0x11, 0x54, 0xc6, 0xbe, 0xd7, 0x17, 0x41, 0xe0, 0xf9, 0xda, 0x38, 0x7a, 0xfd,
- 0xc5, 0x47, 0xcf, 0x1b, 0x87, 0x21, 0x8d, 0x11, 0x93, 0x37, 0xfe, 0x20, 0x0b, 0x95, 0xe8, 0x83,
- 0xf2, 0x67, 0xa4, 0x38, 0x57, 0xa1, 0xcc, 0x3d, 0xe1, 0x8f, 0x4c, 0xdb, 0x52, 0xda, 0xa3, 0x35,
- 0x34, 0x43, 0x23, 0xf7, 0x63, 0x6f, 0x22, 0x27, 0xc7, 0x42, 0x85, 0xb0, 0x9e, 0xda, 0x23, 0xe1,
- 0xb1, 0x3c, 0x1d, 0x1e, 0xa1, 0x60, 0xf7, 0x1d, 0x6f, 0x62, 0xb1, 0x02, 0x96, 0x1f, 0xd1, 0xf6,
- 0xb6, 0x67, 0x8e, 0x03, 0xa5, 0x33, 0xf7, 0x6c, 0xdf, 0x63, 0x25, 0x24, 0xda, 0xb6, 0x07, 0x23,
- 0x93, 0x95, 0x91, 0x59, 0xef, 0xb9, 0x2d, 0x51, 0x09, 0x57, 0xd0, 0x4c, 0x3d, 0x18, 0x0b, 0xb7,
- 0x2b, 0x7d, 0x21, 0xe4, 0x9e, 0x39, 0x56, 0x31, 0x4d, 0x43, 0x58, 0x96, 0x2d, 0x95, 0xfe, 0xdc,
- 0x36, 0xfb, 0xe2, 0xd8, 0xf3, 0x4e, 0xd9, 0x32, 0x2a, 0x9a, 0x8e, 0x1b, 0x48, 0x73, 0xe0, 0x9b,
- 0x23, 0xa5, 0x43, 0x7b, 0xc2, 0x11, 0x54, 0x5a, 0xa5, 0xba, 0x6d, 0x39, 0x9c, 0x1c, 0x3f, 0x42,
- 0xbf, 0x6f, 0x4d, 0x9d, 0x33, 0x59, 0x62, 0x2c, 0x50, 0x87, 0x2e, 0x43, 0x79, 0xd3, 0x76, 0xec,
- 0x63, 0xdb, 0xb1, 0xd9, 0x3a, 0xa2, 0xb6, 0xcf, 0xfb, 0xa6, 0x63, 0x5b, 0xbe, 0xf9, 0x9c, 0x71,
- 0x6c, 0xdc, 0x63, 0xdf, 0x3b, 0xb5, 0xd9, 0x35, 0x44, 0x24, 0x37, 0xf0, 0xcc, 0xfe, 0x01, 0xbb,
- 0x4e, 0x67, 0x65, 0xa7, 0x42, 0xf6, 0x87, 0x27, 0xe6, 0x31, 0xbb, 0x11, 0x87, 0xf4, 0x6e, 0xd6,
- 0xd7, 0x61, 0x6d, 0xea, 0x54, 0xbe, 0x5e, 0xd2, 0xde, 0x67, 0x7d, 0x05, 0xaa, 0x89, 0xe3, 0xd2,
- 0xfa, 0xab, 0x50, 0x0e, 0x0f, 0x53, 0xd1, 0x4b, 0xb7, 0x03, 0x15, 0x06, 0xd6, 0x42, 0x12, 0x95,
- 0xeb, 0xbf, 0x9f, 0x81, 0xa2, 0x3a, 0xc9, 0xe6, 0x9b, 0x51, 0xe6, 0x49, 0x66, 0x81, 0xd3, 0x4b,
- 0x45, 0xa4, 0xcf, 0x7e, 0xa3, 0xf4, 0x93, 0xeb, 0x50, 0x70, 0xc8, 0x1d, 0xd7, 0xea, 0x8b, 0x0a,
- 0x09, 0x6d, 0x93, 0x4b, 0x6a, 0x9b, 0x46, 0x33, 0x3a, 0x6f, 0x0e, 0x43, 0x8f, 0x64, 0x15, 0xf6,
- 0x7c, 0x21, 0x54, 0x58, 0x91, 0xbc, 0xe9, 0x2c, 0xed, 0x15, 0xde, 0x68, 0x6c, 0xf6, 0x25, 0x01,
- 0x68, 0x17, 0x45, 0x65, 0xca, 0xf2, 0x28, 0xe5, 0xad, 0xa1, 0x29, 0x1b, 0x27, 0x50, 0x3e, 0xf4,
- 0x82, 0xe9, 0x3d, 0xb9, 0x04, 0xb9, 0x9e, 0x37, 0x56, 0x16, 0xe6, 0xa6, 0x27, 0xc9, 0xc2, 0x54,
- 0x5b, 0xf0, 0x89, 0x54, 0x42, 0x65, 0xd8, 0x83, 0xa1, 0x54, 0x9e, 0x78, 0xc7, 0x75, 0x85, 0xcf,
- 0x0a, 0x38, 0x87, 0x86, 0x18, 0xa3, 0x55, 0xcb, 0x8a, 0x38, 0x6b, 0x04, 0xdf, 0xb6, 0xfd, 0x40,
- 0xb2, 0x52, 0xa3, 0x83, 0xbb, 0xa9, 0x3d, 0xa0, 0x4d, 0x90, 0x7e, 0x10, 0xab, 0x25, 0x6c, 0x22,
- 0x15, 0x5b, 0xc2, 0x45, 0x19, 0x23, 0xef, 0x49, 0xb9, 0x7e, 0x54, 0x41, 0x16, 0x77, 0x30, 0x2a,
- 0x7f, 0x34, 0x09, 0xa4, 0x7d, 0x72, 0xc1, 0x72, 0x8d, 0x67, 0xb0, 0x92, 0x4a, 0x63, 0xe2, 0xd7,
- 0x81, 0xa5, 0x00, 0xd8, 0xf4, 0x25, 0x7e, 0x0b, 0xae, 0xa5, 0xa0, 0x7b, 0xb6, 0x65, 0x51, 0xac,
- 0x77, 0xfa, 0x43, 0xd8, 0xc1, 0xcd, 0x0a, 0x94, 0xfa, 0x6a, 0x96, 0x1a, 0x87, 0xb0, 0x42, 0xd3,
- 0xb6, 0x27, 0xa4, 0x79, 0xe0, 0x3a, 0x17, 0x7f, 0xe2, 0x5c, 0xb3, 0xc6, 0x57, 0xb4, 0x83, 0x85,
- 0xfa, 0xe2, 0xc4, 0xf7, 0x46, 0xc4, 0xab, 0x60, 0xd0, 0x6f, 0xe4, 0x2e, 0x3d, 0x3d, 0xf7, 0x59,
- 0xe9, 0x35, 0x7e, 0x51, 0x81, 0x52, 0xb3, 0xdf, 0x47, 0x97, 0x70, 0xa6, 0xe6, 0x77, 0xa0, 0xd8,
- 0xf7, 0xdc, 0x13, 0x7b, 0xa0, 0xf5, 0xf1, 0xb4, 0x65, 0xa8, 0xe9, 0x50, 0xe0, 0x4e, 0xec, 0x81,
- 0xa1, 0x91, 0x91, 0x4c, 0xef, 0x27, 0x85, 0x2b, 0xc9, 0x94, 0x52, 0x8d, 0xb6, 0x8f, 0x07, 0x90,
- 0xb7, 0xdd, 0x13, 0x4f, 0x27, 0x86, 0x7e, 0xfe, 0x12, 0x22, 0xca, 0x8e, 0x24, 0xc4, 0xfa, 0x7f,
- 0xce, 0x40, 0x51, 0x55, 0xcd, 0x5f, 0x85, 0x55, 0xe1, 0xe2, 0x62, 0x0a, 0x55, 0xb9, 0x5e, 0x45,
- 0x53, 0x50, 0x34, 0x5a, 0x35, 0x44, 0x1c, 0x4f, 0x06, 0x3a, 0xf6, 0x92, 0x04, 0xf1, 0xf7, 0xe0,
- 0x96, 0x2a, 0x1e, 0xfa, 0xc2, 0x17, 0x8e, 0x30, 0x03, 0xd1, 0x1a, 0x9a, 0xae, 0x2b, 0x1c, 0xbd,
- 0xb1, 0x5f, 0xf6, 0x99, 0x37, 0x60, 0x59, 0x7d, 0xea, 0x8e, 0xcd, 0xbe, 0x08, 0xf4, 0x79, 0x5f,
- 0x0a, 0xc6, 0xbf, 0x0a, 0x05, 0xca, 0x9b, 0xad, 0x59, 0x57, 0x4f, 0xa5, 0xc2, 0xaa, 0x7b, 0xd1,
- 0xce, 0xd3, 0x04, 0x50, 0xc3, 0x84, 0x4e, 0x97, 0x5e, 0xfd, 0x5f, 0xb8, 0x72, 0x5c, 0xc9, 0xff,
- 0x4b, 0x10, 0x61, 0xfb, 0x2c, 0xe1, 0x08, 0x4a, 0x70, 0xc4, 0x9d, 0x31, 0x4b, 0x27, 0x2b, 0x29,
- 0x58, 0xfd, 0x3f, 0xe5, 0x21, 0x8f, 0x23, 0x8c, 0xc8, 0x43, 0x6f, 0x24, 0xa2, 0xf8, 0xb2, 0x32,
- 0x35, 0x52, 0x30, 0x34, 0x6d, 0x4c, 0x75, 0xc4, 0x1f, 0xa1, 0x29, 0xe5, 0x31, 0x0d, 0x46, 0xcc,
- 0xb1, 0xef, 0x9d, 0xd8, 0x4e, 0x8c, 0xa9, 0x8d, 0xa0, 0x29, 0x30, 0xff, 0x1a, 0xdc, 0x1c, 0x99,
- 0xfe, 0xa9, 0x90, 0xb4, 0xba, 0x9f, 0x79, 0xfe, 0x69, 0x80, 0x23, 0xd7, 0xb1, 0x74, 0x60, 0xf2,
- 0x92, 0xaf, 0xfc, 0x75, 0x58, 0x7f, 0x1e, 0x16, 0xa3, 0x3a, 0x54, 0x68, 0x70, 0xf6, 0x03, 0xaa,
- 0x5b, 0x4b, 0x9c, 0xd9, 0xc4, 0xb7, 0xac, 0xb2, 0x67, 0xc3, 0x32, 0x8a, 0x92, 0xa9, 0x06, 0xb2,
- 0xab, 0x6b, 0xd6, 0x27, 0x4c, 0x69, 0x28, 0x5a, 0x5b, 0x2a, 0xab, 0x28, 0xe8, 0x58, 0x14, 0x59,
- 0xad, 0x18, 0x31, 0x00, 0x05, 0x8d, 0xaa, 0x7c, 0xaa, 0x94, 0xea, 0x8a, 0x72, 0x41, 0x13, 0x20,
- 0xc4, 0x90, 0xa2, 0x3f, 0x0c, 0x2b, 0x51, 0x61, 0xcf, 0x24, 0x88, 0xdf, 0x01, 0x18, 0x98, 0x52,
- 0x3c, 0x37, 0x2f, 0x9e, 0xf8, 0x4e, 0x4d, 0xa8, 0xa3, 0x92, 0x18, 0x82, 0x4e, 0xac, 0xe3, 0xf5,
- 0x4d, 0xa7, 0x2b, 0x3d, 0xdf, 0x1c, 0x88, 0x43, 0x53, 0x0e, 0x6b, 0x03, 0xe5, 0xc4, 0x4e, 0xc3,
- 0xb1, 0xc7, 0xd2, 0x1e, 0x89, 0x4f, 0x3c, 0x57, 0xd4, 0x86, 0xaa, 0xc7, 0x61, 0x19, 0x5b, 0x62,
- 0xba, 0xa6, 0x73, 0x21, 0xed, 0x3e, 0xf6, 0xc5, 0x56, 0x2d, 0x49, 0x80, 0x28, 0x6c, 0x20, 0x24,
- 0x8e, 0x63, 0xc7, 0xaa, 0x7d, 0x4f, 0xf5, 0x35, 0x02, 0xe0, 0xec, 0x0a, 0x39, 0x14, 0xbe, 0x98,
- 0x8c, 0x9a, 0x96, 0xe5, 0x8b, 0x20, 0xa8, 0x9d, 0xaa, 0xd9, 0x9d, 0x02, 0xd7, 0xbf, 0x41, 0x07,
- 0x59, 0xc3, 0xc6, 0x5b, 0xb0, 0xb2, 0x8b, 0x2d, 0x6c, 0x8e, 0xed, 0x6e, 0xdf, 0x1b, 0x0b, 0x54,
- 0xe8, 0x14, 0x12, 0xa6, 0x00, 0x42, 0x15, 0x4a, 0x1f, 0x05, 0x9e, 0xdb, 0x3c, 0xec, 0xa8, 0x2d,
- 0x66, 0x7b, 0xe2, 0x38, 0x2c, 0xdb, 0x38, 0x00, 0x88, 0x25, 0x1b, 0xb7, 0x8b, 0x26, 0x9d, 0x1a,
- 0xb1, 0x25, 0x15, 0xae, 0x72, 0x2d, 0xdb, 0x1d, 0x6c, 0x69, 0x61, 0x66, 0x19, 0x04, 0x52, 0x18,
- 0x42, 0x58, 0x11, 0x90, 0x0c, 0x16, 0x2a, 0x09, 0x8b, 0xe5, 0x1a, 0xff, 0x27, 0x03, 0xd5, 0x44,
- 0x92, 0xc4, 0x9f, 0x62, 0x62, 0x07, 0x6e, 0xe7, 0x68, 0x10, 0xe0, 0xbc, 0x29, 0x41, 0x8f, 0xca,
- 0x38, 0xab, 0x3a, 0x87, 0x03, 0xbf, 0xaa, 0xa0, 0x43, 0x02, 0xf2, 0x99, 0x92, 0x3a, 0x1a, 0x0f,
- 0x75, 0xe4, 0xa6, 0x0a, 0xa5, 0x27, 0xee, 0xa9, 0xeb, 0x3d, 0x77, 0xd5, 0x3e, 0x4d, 0x99, 0x3a,
- 0xa9, 0x33, 0xc7, 0x30, 0x99, 0x26, 0xd7, 0xf8, 0x97, 0xf9, 0xa9, 0xa4, 0xb6, 0x36, 0x14, 0x95,
- 0xbb, 0x40, 0x96, 0xec, 0x6c, 0x16, 0x52, 0x12, 0x59, 0x9f, 0x6f, 0x25, 0x40, 0x86, 0x26, 0x46,
- 0x3b, 0x3e, 0x4a, 0xf9, 0xcc, 0xce, 0x3d, 0x87, 0x4b, 0x31, 0x0a, 0x75, 0x73, 0x2a, 0xeb, 0x39,
- 0xe2, 0x50, 0xff, 0xeb, 0x19, 0xb8, 0x3e, 0x0f, 0x25, 0x99, 0x1b, 0x9e, 0x49, 0xe7, 0x86, 0x77,
- 0xa7, 0x72, 0xad, 0xb3, 0xd4, 0x9b, 0x07, 0x2f, 0xd9, 0x88, 0x74, 0xe6, 0x75, 0xe3, 0xf7, 0x32,
- 0xb0, 0x3e, 0xd3, 0xe7, 0x84, 0x1d, 0x03, 0x50, 0x54, 0x92, 0xa5, 0x52, 0xa1, 0xa2, 0xe4, 0x14,
- 0x75, 0xb8, 0x40, 0x3b, 0x7c, 0xa0, 0x4e, 0xfb, 0x75, 0x76, 0xb9, 0x32, 0x93, 0x71, 0xd6, 0x70,
- 0x03, 0x19, 0x08, 0x15, 0x88, 0x55, 0xc6, 0x96, 0x86, 0x14, 0x95, 0x29, 0xab, 0x4e, 0x40, 0x58,
- 0x89, 0x52, 0xac, 0x26, 0x63, 0xc7, 0xee, 0x63, 0xb1, 0xcc, 0xeb, 0x70, 0x53, 0x5d, 0x31, 0xd0,
- 0x6e, 0xe3, 0x49, 0x6f, 0x68, 0xd3, 0xe2, 0x60, 0x15, 0xac, 0xe7, 0x70, 0x72, 0xec, 0xd8, 0xc1,
- 0x90, 0x41, 0xc3, 0x80, 0x6b, 0x73, 0x3a, 0x48, 0x4d, 0x7e, 0xaa, 0x9b, 0xbf, 0x0a, 0xb0, 0xf5,
- 0x34, 0x6c, 0x34, 0xcb, 0x70, 0x0e, 0xab, 0x5b, 0x4f, 0x93, 0xdc, 0xf5, 0xe2, 0x79, 0x8a, 0xda,
- 0x2b, 0x60, 0xb9, 0xc6, 0xaf, 0x65, 0xc2, 0x1c, 0x88, 0xfa, 0x5f, 0x84, 0x15, 0xd5, 0xe0, 0x43,
- 0xf3, 0xc2, 0xf1, 0x4c, 0x8b, 0xb7, 0x61, 0x35, 0x88, 0x2e, 0xc1, 0x24, 0x36, 0xac, 0x69, 0x43,
- 0xa0, 0x9b, 0x42, 0x32, 0xa6, 0x88, 0x42, 0x57, 0x28, 0x1b, 0x1f, 0x9c, 0x70, 0x72, 0xea, 0x4c,
- 0x5a, 0x72, 0xcb, 0xe4, 0xa6, 0x99, 0x8d, 0xaf, 0xc2, 0x7a, 0x37, 0x56, 0xee, 0xca, 0x66, 0x46,
- 0xe1, 0x50, 0x3b, 0xc3, 0x56, 0x28, 0x1c, 0xba, 0xd8, 0xf8, 0x27, 0x25, 0x80, 0xf8, 0x90, 0x68,
- 0xce, 0x9a, 0x9f, 0x97, 0xf3, 0x30, 0x73, 0x64, 0x9b, 0x7b, 0xe9, 0x23, 0xdb, 0xf7, 0x22, 0xd3,
- 0x5d, 0x05, 0x90, 0xa7, 0x13, 0xbf, 0xe3, 0x36, 0x4d, 0x1b, 0xec, 0xa9, 0x94, 0xa0, 0xc2, 0x74,
- 0x4a, 0xd0, 0xdd, 0xd9, 0xfc, 0xc1, 0x29, 0x65, 0x14, 0x47, 0x26, 0x4a, 0xa9, 0xc8, 0x44, 0x1d,
- 0xca, 0xbe, 0x30, 0x2d, 0xcf, 0x75, 0x2e, 0xc2, 0x93, 0xc1, 0xb0, 0xcc, 0xdf, 0x82, 0x82, 0xa4,
- 0x7b, 0x3c, 0x65, 0x5a, 0x3b, 0x2f, 0x98, 0x38, 0x85, 0x8b, 0x9a, 0xcd, 0x0e, 0x74, 0xd2, 0x9f,
- 0xda, 0x35, 0xcb, 0x46, 0x02, 0xc2, 0x37, 0x80, 0xdb, 0xe8, 0xa6, 0x39, 0x8e, 0xb0, 0x36, 0x2f,
- 0xb6, 0xd4, 0x81, 0x1d, 0xed, 0xeb, 0x65, 0x63, 0xce, 0x97, 0x70, 0xfe, 0x97, 0xe3, 0xf9, 0xa7,
- 0x26, 0x9f, 0xd9, 0x01, 0xf6, 0x74, 0x85, 0xcc, 0x97, 0xa8, 0x8c, 0x96, 0x43, 0xb8, 0x60, 0xd5,
- 0x58, 0x92, 0xf4, 0xc6, 0xa7, 0xde, 0x97, 0x7c, 0x0d, 0x87, 0x57, 0x85, 0x66, 0xd6, 0x88, 0x69,
- 0x0c, 0x20, 0x4d, 0xde, 0xf7, 0xdc, 0x7d, 0x94, 0x08, 0xa6, 0x35, 0xb9, 0x2e, 0x63, 0x7f, 0xc7,
- 0xce, 0xc4, 0x37, 0x1d, 0xfa, 0xba, 0xae, 0x34, 0x79, 0x0c, 0x69, 0xfc, 0xeb, 0x6c, 0xe4, 0x3c,
- 0x55, 0xa0, 0x70, 0x6c, 0x06, 0x76, 0x5f, 0xed, 0x6e, 0xda, 0xe8, 0x51, 0xbb, 0x9b, 0xf4, 0x2c,
- 0x8f, 0x65, 0xd1, 0x0f, 0x0a, 0x84, 0x3e, 0xb0, 0x89, 0x6f, 0x4d, 0xb1, 0x3c, 0xaa, 0x80, 0x50,
- 0x92, 0x54, 0x56, 0x10, 0x91, 0x52, 0xf8, 0xcd, 0x8a, 0xf2, 0x2d, 0xc9, 0x91, 0xa6, 0x2d, 0x86,
- 0x95, 0x11, 0xc7, 0xf5, 0xa4, 0x50, 0xc1, 0x47, 0x92, 0x7b, 0x06, 0xc8, 0x26, 0xbc, 0x06, 0xc0,
- 0xaa, 0xe8, 0x98, 0x84, 0x4c, 0x55, 0xc4, 0x30, 0x20, 0xb7, 0x6d, 0x19, 0xd7, 0x7d, 0xfa, 0x03,
- 0x5b, 0xc1, 0x16, 0xc5, 0x97, 0xb1, 0xd8, 0x2a, 0x72, 0x35, 0x29, 0x57, 0x65, 0x0d, 0x7f, 0x9e,
- 0x51, 0x06, 0x0b, 0xc3, 0x5a, 0x2d, 0xd4, 0x4b, 0xeb, 0xd8, 0xb2, 0xc8, 0xd0, 0x61, 0x1c, 0xfd,
- 0xae, 0xb1, 0x89, 0x4e, 0x90, 0x3d, 0x36, 0x5d, 0xc9, 0xae, 0x61, 0x57, 0xc7, 0xd6, 0x09, 0xbb,
- 0x8e, 0x24, 0xfd, 0xa1, 0x29, 0xd9, 0x0d, 0xc4, 0xc1, 0x5f, 0x5b, 0xc2, 0x47, 0x49, 0x61, 0x37,
- 0x11, 0x47, 0x9a, 0x03, 0x76, 0xab, 0xf1, 0x9b, 0x71, 0xc6, 0xf3, 0x1b, 0x91, 0x7b, 0xb2, 0xc8,
- 0xf2, 0x41, 0x07, 0x66, 0xde, 0x5a, 0x6e, 0xc3, 0xba, 0x2f, 0xbe, 0x3f, 0xb1, 0x53, 0xf7, 0x00,
- 0x72, 0x57, 0x27, 0x9a, 0xcc, 0x52, 0x34, 0xce, 0x60, 0x3d, 0x2c, 0x3c, 0xb3, 0xe5, 0x90, 0x22,
- 0x45, 0xfc, 0xad, 0xc4, 0x45, 0x85, 0xcc, 0xdc, 0x0b, 0x5e, 0x11, 0xcb, 0xf8, 0x62, 0x42, 0x74,
- 0x12, 0x90, 0x5d, 0xe0, 0x24, 0xa0, 0xf1, 0xbf, 0x93, 0x47, 0xcb, 0xca, 0x61, 0xb3, 0x22, 0x87,
- 0x6d, 0xf6, 0xa8, 0x39, 0x0e, 0xee, 0x67, 0x5f, 0x26, 0xb8, 0x3f, 0x2f, 0x6d, 0xe3, 0x7d, 0xf4,
- 0x1f, 0x68, 0x65, 0x3e, 0x5d, 0xe0, 0xe0, 0x22, 0x85, 0xcb, 0x37, 0xe9, 0xe0, 0xd8, 0xec, 0xaa,
- 0x9c, 0xa2, 0xc2, 0xdc, 0x6b, 0x43, 0xc9, 0x13, 0x62, 0x8d, 0x69, 0x24, 0xa8, 0x12, 0x7a, 0xac,
- 0x38, 0x4f, 0x8f, 0xa1, 0xef, 0xac, 0x35, 0x5c, 0x54, 0x56, 0xe7, 0x3c, 0xea, 0x77, 0xc8, 0x9e,
- 0xd6, 0x78, 0xd9, 0x98, 0x81, 0xa3, 0xb1, 0x37, 0x9a, 0x38, 0xd2, 0xd6, 0x47, 0x19, 0xaa, 0x30,
- 0x7d, 0xaf, 0xb1, 0x32, 0x7b, 0xaf, 0xf1, 0x43, 0x80, 0x40, 0xe0, 0xea, 0xd8, 0xb2, 0xfb, 0x52,
- 0x67, 0x1e, 0xdd, 0xb9, 0xac, 0x6f, 0xfa, 0x00, 0x26, 0x41, 0x81, 0xed, 0x1f, 0x99, 0xe7, 0x74,
- 0x28, 0xab, 0x53, 0x24, 0xa2, 0xf2, 0xb4, 0x76, 0x5f, 0x9d, 0xd5, 0xee, 0x6f, 0x41, 0x21, 0x40,
- 0x13, 0x9a, 0xae, 0xe6, 0x5c, 0x3e, 0xbf, 0x1b, 0x64, 0x67, 0x1b, 0x0a, 0x97, 0x42, 0x92, 0xa8,
- 0xff, 0x3c, 0x9f, 0x2e, 0xe5, 0x54, 0x8c, 0xb0, 0x98, 0xd2, 0xb0, 0x37, 0xd3, 0x1a, 0xb6, 0x6e,
- 0x41, 0x51, 0x1f, 0x2f, 0x4c, 0x07, 0x0a, 0xc2, 0xc0, 0x64, 0x36, 0x11, 0x98, 0x8c, 0xf2, 0x5b,
- 0x73, 0xc9, 0xfc, 0xd6, 0xa9, 0x7b, 0x7b, 0x85, 0x99, 0x7b, 0x7b, 0x8d, 0x4f, 0xa0, 0xa0, 0x7c,
- 0x02, 0x08, 0xcd, 0x51, 0x65, 0xca, 0x62, 0xa7, 0x58, 0x86, 0x5f, 0x07, 0x16, 0x08, 0xb2, 0x75,
- 0x44, 0xd7, 0x1c, 0x09, 0x52, 0x92, 0x59, 0x5e, 0x83, 0xeb, 0x0a, 0x37, 0x48, 0x7f, 0x21, 0x83,
- 0xcb, 0xb1, 0x8f, 0x7d, 0xd3, 0xbf, 0x60, 0xf9, 0xc6, 0x87, 0x74, 0xb8, 0x1f, 0x0a, 0x54, 0x35,
- 0xba, 0x27, 0xa9, 0xd4, 0xb2, 0xa5, 0xb5, 0x0f, 0xe5, 0x86, 0x68, 0x6f, 0x4f, 0x65, 0xcc, 0x91,
- 0x3b, 0x45, 0xf1, 0xa0, 0xe5, 0xe4, 0x1e, 0xff, 0xa7, 0xb6, 0xde, 0x1a, 0x9b, 0x09, 0x8b, 0x31,
- 0x9d, 0x02, 0x97, 0x59, 0x34, 0x05, 0xae, 0xf1, 0x18, 0xd6, 0x8c, 0xb4, 0x4e, 0xe7, 0xef, 0x41,
- 0xc9, 0x1b, 0x27, 0xf9, 0xbc, 0x48, 0x2e, 0x43, 0xf4, 0xc6, 0x4f, 0x33, 0xb0, 0xdc, 0x71, 0xa5,
- 0xf0, 0x5d, 0xd3, 0xd9, 0x76, 0xcc, 0x01, 0x7f, 0x37, 0xd4, 0x52, 0xf3, 0x63, 0x0f, 0x49, 0xdc,
- 0xb4, 0xc2, 0x72, 0x74, 0x18, 0x9d, 0xdf, 0x80, 0x75, 0x61, 0xd9, 0xd2, 0xf3, 0x95, 0x9d, 0x1c,
- 0x66, 0x2a, 0x5e, 0x07, 0xa6, 0xc0, 0x5d, 0x5a, 0x12, 0x3d, 0x35, 0xcd, 0x35, 0xb8, 0x9e, 0x82,
- 0x86, 0x46, 0x70, 0x96, 0xdf, 0x86, 0x5a, 0xbc, 0x1b, 0x6d, 0x79, 0xae, 0xec, 0xb8, 0x96, 0x38,
- 0x27, 0x23, 0x8b, 0xe5, 0x1a, 0xbf, 0x11, 0x99, 0x77, 0x4f, 0x75, 0x1e, 0xa3, 0xef, 0x79, 0xf1,
- 0x25, 0x59, 0x5d, 0x4a, 0x5c, 0xc6, 0xce, 0x2e, 0x70, 0x19, 0xfb, 0xc3, 0xf8, 0x42, 0xad, 0xda,
- 0x28, 0x5e, 0x99, 0xbb, 0xfb, 0x50, 0xfa, 0x95, 0xb6, 0xee, 0xbb, 0x22, 0x71, 0xbb, 0xf6, 0x4d,
- 0xed, 0xd2, 0xe5, 0x17, 0xb1, 0x82, 0x55, 0xa6, 0xc2, 0x3b, 0xd3, 0xb7, 0x38, 0x16, 0x4b, 0x83,
- 0x9c, 0x31, 0x54, 0xe1, 0xa5, 0x0d, 0xd5, 0x6f, 0x4d, 0x79, 0x4f, 0xe5, 0xb9, 0xe1, 0xb8, 0x2b,
- 0xee, 0xa8, 0x7e, 0x0b, 0x4a, 0x43, 0x3b, 0x90, 0x9e, 0xaf, 0xee, 0x4d, 0xcf, 0xde, 0xf3, 0x4a,
- 0x8c, 0xd6, 0x8e, 0x42, 0xa4, 0x9c, 0xb5, 0x90, 0x8a, 0x7f, 0x17, 0xd6, 0x69, 0xe0, 0x0f, 0x63,
- 0xab, 0x21, 0xa8, 0x55, 0xe7, 0xe6, 0x0a, 0x26, 0x58, 0x6d, 0x4e, 0x91, 0x18, 0xb3, 0x4c, 0xea,
- 0x03, 0x80, 0x78, 0x7e, 0x66, 0xb4, 0xd8, 0x67, 0xb8, 0x37, 0x7d, 0x13, 0x8a, 0xc1, 0xe4, 0x38,
- 0x3e, 0x6f, 0xd3, 0xa5, 0xfa, 0x39, 0xd4, 0x67, 0xac, 0x83, 0x43, 0xe1, 0xab, 0xe6, 0x5e, 0x79,
- 0x79, 0xfb, 0xc3, 0xe4, 0xc4, 0x2b, 0xe1, 0xbc, 0x7b, 0xc9, 0xec, 0x45, 0x9c, 0x13, 0x12, 0x50,
- 0x7f, 0x07, 0xaa, 0x89, 0x41, 0x45, 0xcd, 0x3c, 0x71, 0x2d, 0x2f, 0x0c, 0x01, 0xe3, 0x6f, 0x75,
- 0x79, 0xcd, 0x0a, 0x83, 0xc0, 0xf4, 0xbb, 0x6e, 0x00, 0x9b, 0x1e, 0xc0, 0x2b, 0x3c, 0xec, 0x57,
- 0x60, 0x25, 0x61, 0xd2, 0x45, 0xe1, 0xc1, 0x34, 0xb0, 0x71, 0x06, 0x9f, 0x4f, 0xb0, 0x3b, 0x14,
- 0xfe, 0xc8, 0x0e, 0x70, 0x23, 0x51, 0xce, 0x22, 0x99, 0xd6, 0x96, 0x70, 0xa5, 0x2d, 0x43, 0x0d,
- 0x1a, 0x95, 0xf9, 0x37, 0xa0, 0x30, 0x16, 0xfe, 0x28, 0xd0, 0x5a, 0x74, 0x5a, 0x82, 0xe6, 0xb2,
- 0x0d, 0x0c, 0x45, 0xd3, 0xf8, 0x47, 0x19, 0x28, 0xef, 0x09, 0x69, 0xa2, 0xed, 0xc0, 0xf7, 0xa6,
- 0x6a, 0x99, 0x3d, 0x23, 0x0e, 0x51, 0x37, 0xb4, 0xfb, 0xba, 0xd1, 0xd1, 0xf8, 0xba, 0xbc, 0xb3,
- 0x14, 0x37, 0xac, 0xbe, 0x09, 0x25, 0x0d, 0xae, 0xbf, 0x0b, 0x6b, 0x53, 0x98, 0x34, 0x2e, 0xca,
- 0xb6, 0xef, 0x5e, 0x8c, 0xc2, 0x44, 0xa6, 0x65, 0x23, 0x0d, 0xdc, 0xac, 0x40, 0x69, 0xac, 0x08,
- 0x1a, 0x7f, 0x70, 0x8b, 0xd2, 0x67, 0xec, 0x13, 0xf4, 0xe9, 0xe7, 0xed, 0xac, 0x77, 0x00, 0x68,
- 0x6b, 0x56, 0x49, 0x16, 0x2a, 0x64, 0x9b, 0x80, 0xf0, 0xf7, 0xa3, 0x58, 0x7b, 0x7e, 0xae, 0x51,
- 0x95, 0x64, 0x3e, 0x1d, 0x70, 0xaf, 0x41, 0xc9, 0x0e, 0x28, 0x0e, 0xa7, 0x13, 0x93, 0xc2, 0xa2,
- 0xfa, 0xd2, 0xf3, 0xcc, 0x40, 0xea, 0xa0, 0x77, 0x58, 0xe4, 0xdf, 0x84, 0xa2, 0x3d, 0x1a, 0x7b,
- 0xbe, 0xd4, 0x61, 0xfa, 0x2b, 0xeb, 0xeb, 0x10, 0xe6, 0xce, 0x92, 0xa1, 0x69, 0x90, 0x5a, 0x9c,
- 0x13, 0x75, 0xf9, 0xc5, 0xd4, 0xed, 0xf3, 0x90, 0x5a, 0xd1, 0xf0, 0xef, 0xc0, 0xca, 0x40, 0x65,
- 0x6c, 0x2a, 0xc6, 0x5a, 0xbd, 0x7c, 0xf9, 0x2a, 0x26, 0x8f, 0x92, 0x04, 0x3b, 0x4b, 0x46, 0x9a,
- 0x03, 0xb2, 0x44, 0xd3, 0x5e, 0x04, 0xb2, 0xe7, 0x7d, 0xe4, 0xd9, 0x2e, 0x39, 0xc2, 0x2f, 0x60,
- 0x69, 0x24, 0x09, 0x90, 0x65, 0x8a, 0x03, 0xff, 0x1a, 0xda, 0x42, 0x81, 0xd4, 0x97, 0xda, 0xef,
- 0x5e, 0xc5, 0xa9, 0x27, 0x02, 0x7d, 0x1d, 0x3d, 0x90, 0xfc, 0x1c, 0xea, 0x89, 0xe5, 0xa3, 0x2b,
- 0x69, 0x8e, 0xc7, 0xbe, 0x87, 0xde, 0xf4, 0x0a, 0x71, 0xfb, 0xda, 0x55, 0xdc, 0x0e, 0x2f, 0xa5,
- 0xde, 0x59, 0x32, 0xae, 0xe0, 0xcd, 0x7b, 0xe8, 0xf3, 0xe9, 0x2e, 0xec, 0x0a, 0xf3, 0x2c, 0xbc,
- 0x12, 0x7f, 0x7f, 0xa1, 0x51, 0x20, 0x8a, 0x9d, 0x25, 0x63, 0x8a, 0x07, 0xff, 0x15, 0x58, 0x4f,
- 0xd5, 0x49, 0xb7, 0x60, 0xd5, 0x85, 0xf9, 0xaf, 0x2e, 0xdc, 0x0d, 0x24, 0xda, 0x59, 0x32, 0x66,
- 0x39, 0xf1, 0x09, 0x7c, 0x6e, 0xb6, 0x4b, 0x5b, 0xa2, 0xef, 0xd8, 0xae, 0xd0, 0x77, 0xeb, 0xdf,
- 0x79, 0xb9, 0xd1, 0xd2, 0xc4, 0x3b, 0x4b, 0xc6, 0xe5, 0x9c, 0xf9, 0x5f, 0x82, 0xdb, 0xe3, 0xb9,
- 0xca, 0x47, 0x29, 0x35, 0x7d, 0x35, 0xff, 0xbd, 0x05, 0x6b, 0x9e, 0xa1, 0xdf, 0x59, 0x32, 0xae,
- 0xe4, 0xcf, 0xfb, 0x70, 0xcd, 0x9c, 0x48, 0x0f, 0x2d, 0x05, 0x75, 0xbc, 0x4b, 0xd7, 0x27, 0xf5,
- 0x85, 0xfe, 0x07, 0x57, 0x55, 0xdb, 0x9c, 0x25, 0xdb, 0x59, 0x32, 0xe6, 0x71, 0x43, 0xd3, 0x9d,
- 0x1c, 0x78, 0x9d, 0xbd, 0xae, 0x0a, 0xfc, 0x36, 0x54, 0xcc, 0xbe, 0xb3, 0x23, 0x4c, 0x2b, 0x3a,
- 0xae, 0x88, 0x01, 0xf5, 0xff, 0x9e, 0x81, 0xa2, 0x5e, 0x54, 0xb7, 0xa3, 0x94, 0x84, 0x68, 0xe7,
- 0x88, 0x01, 0xfc, 0x03, 0xa8, 0x08, 0xdf, 0xf7, 0xfc, 0x96, 0x67, 0x85, 0xd9, 0x9c, 0xd3, 0x41,
- 0x6e, 0xc5, 0x67, 0xa3, 0x1d, 0xa2, 0x19, 0x31, 0x05, 0x7f, 0x1f, 0x40, 0x29, 0x93, 0x5e, 0x7c,
- 0x09, 0xa9, 0x3e, 0x9f, 0x5e, 0x9d, 0x80, 0xc5, 0xd8, 0x71, 0x54, 0x30, 0x3c, 0x7e, 0x0a, 0x8b,
- 0x91, 0xbf, 0x5b, 0x48, 0xf8, 0xbb, 0xb7, 0x75, 0x18, 0x83, 0xa2, 0x3b, 0xfa, 0x2a, 0x5e, 0x04,
- 0xa8, 0xff, 0x61, 0x06, 0x8a, 0x4a, 0x43, 0xf1, 0xf6, 0x6c, 0x8f, 0x5e, 0x7b, 0xb1, 0x62, 0xdb,
- 0x98, 0xee, 0xd9, 0x37, 0x01, 0x94, 0xa2, 0x4b, 0xf4, 0xec, 0xf6, 0x14, 0x1f, 0x4d, 0x1a, 0xe6,
- 0x4f, 0xc7, 0xf8, 0x8d, 0x87, 0xea, 0xba, 0x18, 0x45, 0xa4, 0x9f, 0xec, 0xee, 0xb2, 0x25, 0xbe,
- 0x0e, 0x2b, 0x4f, 0xf6, 0x1f, 0xef, 0x1f, 0x3c, 0xdb, 0x3f, 0x6a, 0x1b, 0xc6, 0x81, 0xa1, 0x02,
- 0xd3, 0x9b, 0xcd, 0xad, 0xa3, 0xce, 0xfe, 0xe1, 0x93, 0x1e, 0xcb, 0xd6, 0xff, 0x79, 0x06, 0x56,
- 0x52, 0x0a, 0xf2, 0xcf, 0x76, 0xea, 0x12, 0xc3, 0x9f, 0x9b, 0x3f, 0xfc, 0xf9, 0xcb, 0x86, 0xbf,
- 0x30, 0x3d, 0xfc, 0xbf, 0x93, 0x81, 0x95, 0x94, 0x22, 0x4e, 0x72, 0xcf, 0xa4, 0xb9, 0x27, 0x0d,
- 0x8d, 0xec, 0x94, 0xa1, 0xd1, 0x80, 0xe5, 0xf0, 0xf7, 0x7e, 0x1c, 0xf0, 0x48, 0xc1, 0x92, 0x38,
- 0x74, 0x5f, 0x23, 0x9f, 0xc6, 0xa1, 0x3b, 0x1b, 0x57, 0xb7, 0x96, 0xee, 0xa7, 0x06, 0x74, 0x7d,
- 0xbf, 0x7e, 0xb9, 0x9a, 0xbe, 0xa2, 0x0b, 0x8f, 0xa0, 0x3a, 0x8e, 0x75, 0xc1, 0xcb, 0x59, 0x45,
- 0x49, 0xca, 0x17, 0xb4, 0xf3, 0x77, 0x33, 0xb0, 0x9a, 0x56, 0xec, 0xff, 0x5f, 0x0f, 0xeb, 0x3f,
- 0xcd, 0xc0, 0xfa, 0xcc, 0x76, 0x71, 0xa5, 0x5d, 0x39, 0xdd, 0xae, 0xec, 0x02, 0xed, 0xca, 0xcd,
- 0x69, 0xd7, 0xe5, 0x9a, 0xe4, 0xea, 0x16, 0x77, 0xe1, 0x73, 0x97, 0x6e, 0x3c, 0x57, 0x0c, 0x75,
- 0x8a, 0x69, 0x6e, 0x9a, 0xe9, 0x6f, 0x67, 0xe0, 0xf6, 0x55, 0x9b, 0xca, 0xff, 0x73, 0xb9, 0x9a,
- 0x69, 0xe1, 0xaf, 0xc2, 0xb5, 0x39, 0xdb, 0xcf, 0x15, 0xed, 0x7a, 0x15, 0x56, 0xb1, 0x01, 0x87,
- 0x71, 0x78, 0x3d, 0xab, 0xaf, 0x79, 0xa6, 0xa0, 0x68, 0x70, 0xab, 0x33, 0xf7, 0xcd, 0xd4, 0x33,
- 0x51, 0x69, 0x60, 0xe3, 0xdd, 0x28, 0x8d, 0xa2, 0x0a, 0x25, 0xfd, 0x2a, 0x97, 0x4e, 0x54, 0x1f,
- 0x7a, 0xcf, 0x5d, 0x15, 0x87, 0x37, 0x84, 0xa9, 0xdf, 0x2d, 0x30, 0xc4, 0xd8, 0xb1, 0xe9, 0x84,
- 0xf8, 0x16, 0x40, 0x93, 0xbc, 0xda, 0xf0, 0x1a, 0x51, 0x6b, 0xf7, 0xa0, 0xdb, 0x66, 0x4b, 0x49,
- 0x13, 0xfe, 0x93, 0x70, 0x1f, 0x68, 0x1c, 0x42, 0x31, 0xbe, 0xd8, 0xb1, 0x67, 0xfa, 0xa7, 0x96,
- 0x3a, 0x87, 0x5d, 0x86, 0xf2, 0xa1, 0x76, 0x20, 0x55, 0x55, 0x1f, 0x75, 0x0f, 0xf6, 0x55, 0xc8,
- 0x7f, 0xeb, 0xa0, 0xa7, 0xae, 0x87, 0x74, 0x9f, 0x3e, 0x52, 0x07, 0x82, 0x8f, 0x8c, 0xe6, 0xe1,
- 0xce, 0x11, 0x61, 0x14, 0x1a, 0xbf, 0x95, 0x0f, 0x37, 0xd5, 0x86, 0xa1, 0x4f, 0x78, 0x01, 0x8a,
- 0xb8, 0x99, 0x78, 0x9a, 0x71, 0x54, 0x0d, 0xa5, 0x34, 0xb7, 0xcf, 0x55, 0x14, 0x86, 0x65, 0x79,
- 0x11, 0xb2, 0x87, 0xc7, 0x2a, 0x0f, 0x6b, 0x47, 0x8e, 0x1c, 0x75, 0xaf, 0xb4, 0x77, 0x2e, 0x59,
- 0x01, 0x7f, 0xb4, 0x82, 0x33, 0x56, 0x6c, 0xfc, 0x8b, 0x1c, 0x54, 0x22, 0x4d, 0xfd, 0x32, 0x3b,
- 0x07, 0xe7, 0xb0, 0xda, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xe6, 0xae, 0x46, 0xc9, 0xf1, 0x6b, 0xb0,
- 0xb6, 0xdd, 0xd9, 0x6d, 0x1f, 0xed, 0x1e, 0x34, 0xb7, 0x34, 0xb0, 0xcc, 0x6f, 0x02, 0xef, 0xec,
- 0x1d, 0x1e, 0x18, 0xbd, 0xa3, 0x4e, 0xf7, 0xa8, 0xd5, 0xdc, 0x6f, 0xb5, 0x77, 0xdb, 0x5b, 0xac,
- 0xc8, 0x5f, 0x81, 0xbb, 0xfb, 0x07, 0xbd, 0xce, 0xc1, 0xfe, 0xd1, 0xfe, 0xc1, 0xd1, 0xc1, 0xe6,
- 0x47, 0xed, 0x56, 0xaf, 0x7b, 0xd4, 0xd9, 0x3f, 0x42, 0xae, 0x8f, 0x8c, 0x26, 0x7e, 0x61, 0x05,
- 0x7e, 0x17, 0x6e, 0x6b, 0xac, 0x6e, 0xdb, 0x78, 0xda, 0x36, 0x90, 0xc9, 0x93, 0xfd, 0xe6, 0xd3,
- 0x66, 0x67, 0xb7, 0xb9, 0xb9, 0xdb, 0x66, 0xcb, 0xfc, 0x0e, 0xd4, 0x35, 0x86, 0xd1, 0xec, 0xb5,
- 0x8f, 0x76, 0x3b, 0x7b, 0x9d, 0xde, 0x51, 0xfb, 0xbb, 0xad, 0x76, 0x7b, 0xab, 0xbd, 0xc5, 0x56,
- 0xf8, 0x97, 0xe1, 0x4b, 0xd4, 0x28, 0xdd, 0x88, 0x74, 0x65, 0x9f, 0x74, 0x0e, 0x8f, 0x9a, 0x46,
- 0x6b, 0xa7, 0xf3, 0xb4, 0xcd, 0x56, 0xf9, 0x6b, 0xf0, 0xc5, 0xcb, 0x51, 0xb7, 0x3a, 0x46, 0xbb,
- 0xd5, 0x3b, 0x30, 0x3e, 0x66, 0xeb, 0xfc, 0x97, 0xe0, 0x73, 0x3b, 0xbd, 0xbd, 0xdd, 0xa3, 0x67,
- 0xc6, 0xc1, 0xfe, 0xa3, 0x23, 0xfa, 0xd9, 0xed, 0x19, 0x4f, 0x5a, 0xbd, 0x27, 0x46, 0x9b, 0x01,
- 0xaf, 0xc3, 0xcd, 0xc3, 0xcd, 0xa3, 0xfd, 0x83, 0xde, 0x51, 0x73, 0xff, 0xe3, 0xcd, 0xdd, 0x83,
- 0xd6, 0xe3, 0xa3, 0xed, 0x03, 0x63, 0xaf, 0xd9, 0x63, 0x55, 0xfe, 0x15, 0x78, 0xad, 0xd5, 0x7d,
- 0xaa, 0x9b, 0x79, 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97,
- 0xfa, 0xdc, 0x8d, 0xdb, 0x5e, 0xe2, 0xb7, 0xa1, 0xd6, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0xb4,
- 0x3a, 0xed, 0xfd, 0xde, 0xd1, 0x61, 0xdb, 0xd8, 0xeb, 0x74, 0xbb, 0x88, 0xc6, 0x2a, 0x8d, 0x6f,
- 0x43, 0xb1, 0xe3, 0x9e, 0xd9, 0x92, 0x96, 0xb7, 0x16, 0x46, 0xed, 0x6f, 0x86, 0x45, 0x5a, 0x95,
- 0xf6, 0xc0, 0xa5, 0xf7, 0x12, 0x68, 0x05, 0x2d, 0x1b, 0x31, 0xa0, 0xf1, 0x87, 0x39, 0x58, 0x51,
- 0x2c, 0x42, 0xff, 0xf5, 0x1e, 0xac, 0xe9, 0x40, 0x70, 0x27, 0xad, 0x41, 0xa7, 0xc1, 0xf4, 0x10,
- 0x99, 0x02, 0x25, 0x56, 0x67, 0x12, 0xc4, 0x6f, 0x42, 0xd1, 0xec, 0x3b, 0xe8, 0x04, 0xab, 0xd3,
- 0x5a, 0x5d, 0xfa, 0xac, 0xaa, 0x13, 0xd5, 0xb2, 0x42, 0xec, 0x7b, 0x6e, 0x2b, 0xba, 0x32, 0x93,
- 0x82, 0xf1, 0x4f, 0xe0, 0x56, 0x54, 0x6e, 0xbb, 0x7d, 0xff, 0x62, 0x1c, 0xbd, 0x14, 0x58, 0x9a,
- 0x1b, 0x4a, 0xd9, 0xb6, 0x1d, 0x91, 0x42, 0x34, 0x2e, 0x63, 0xc0, 0x1f, 0x01, 0xd8, 0x34, 0x58,
- 0x64, 0x9e, 0xcd, 0xbf, 0x17, 0x9e, 0x1a, 0x4d, 0x5d, 0xd2, 0x56, 0x68, 0xf4, 0x1b, 0xf7, 0xa7,
- 0x01, 0xaa, 0xfd, 0xc7, 0xfa, 0x61, 0xc1, 0x65, 0x23, 0x2a, 0x37, 0x1e, 0x00, 0xc4, 0x54, 0x9c,
- 0xc1, 0x32, 0x9a, 0x36, 0xcd, 0x60, 0x4f, 0x8c, 0x8e, 0x85, 0xaf, 0x72, 0x18, 0x15, 0xe4, 0x11,
- 0x52, 0xb0, 0x4c, 0xe3, 0x8f, 0x32, 0x89, 0x28, 0x84, 0x8a, 0x32, 0x5c, 0xb9, 0x01, 0xce, 0x3b,
- 0x11, 0x43, 0x6f, 0x5f, 0x0f, 0xaa, 0xb6, 0xcb, 0x74, 0x91, 0x1f, 0x02, 0xb7, 0x67, 0x87, 0x32,
- 0xbf, 0xe0, 0x50, 0xce, 0xa1, 0x9d, 0x3e, 0xd0, 0x28, 0xcc, 0x1e, 0x68, 0xdc, 0x01, 0x18, 0x38,
- 0xde, 0xb1, 0x56, 0xfb, 0x45, 0x9d, 0xf5, 0x14, 0x41, 0x1a, 0x0e, 0x94, 0xc3, 0x57, 0x12, 0x51,
- 0xc6, 0xe8, 0x9d, 0xc4, 0x28, 0xbc, 0xab, 0x4a, 0x7c, 0x07, 0x56, 0x45, 0xba, 0xcd, 0xd9, 0x05,
- 0xdb, 0x3c, 0x45, 0xd7, 0xf8, 0x3a, 0xac, 0xcf, 0x20, 0xe1, 0x20, 0x8e, 0x4d, 0x19, 0x3d, 0x95,
- 0x80, 0xbf, 0x67, 0x93, 0x15, 0x1a, 0xff, 0x21, 0x0b, 0xcb, 0x7b, 0xa6, 0x6b, 0x9f, 0x88, 0x40,
- 0x86, 0xad, 0x0d, 0xfa, 0x43, 0x31, 0x32, 0xc3, 0xd6, 0xaa, 0x92, 0x8e, 0xf9, 0x64, 0x93, 0xa7,
- 0x29, 0x33, 0x87, 0x6f, 0xb8, 0x9a, 0x26, 0x72, 0x18, 0xdd, 0x1e, 0xd0, 0x25, 0x9c, 0x3b, 0xc7,
- 0xee, 0x0b, 0x37, 0x08, 0x57, 0x4c, 0x58, 0x8c, 0x73, 0x97, 0x8a, 0x57, 0xe4, 0x2e, 0x95, 0x66,
- 0xc7, 0xff, 0x2e, 0x54, 0x83, 0xbe, 0x2f, 0x84, 0x1b, 0x0c, 0x3d, 0x19, 0xbe, 0xb0, 0x99, 0x04,
- 0x51, 0x22, 0xa1, 0xf7, 0xdc, 0x45, 0x19, 0xdf, 0xb5, 0xdd, 0x53, 0x9d, 0x1f, 0x97, 0x82, 0xa1,
- 0x0c, 0x52, 0xc4, 0xcb, 0xfe, 0x81, 0xa0, 0x98, 0x4a, 0xc1, 0x88, 0xca, 0x14, 0xd3, 0x32, 0xa5,
- 0x18, 0x78, 0xbe, 0x2d, 0x54, 0x60, 0xb7, 0x62, 0x24, 0x20, 0x48, 0xeb, 0x98, 0xee, 0x60, 0x62,
- 0x0e, 0x84, 0x3e, 0xfc, 0x8f, 0xca, 0x8d, 0xff, 0x51, 0x00, 0x50, 0xab, 0x21, 0x18, 0xda, 0x63,
- 0x3a, 0x78, 0xb2, 0x75, 0xce, 0xf4, 0x8a, 0x41, 0xbf, 0xf9, 0x7b, 0xa9, 0xeb, 0x0c, 0xb3, 0x47,
- 0xc5, 0x31, 0xf9, 0x74, 0x40, 0x0c, 0x07, 0xc7, 0x94, 0x42, 0xa7, 0x8d, 0xd1, 0xf8, 0xe7, 0x8d,
- 0x24, 0x88, 0x12, 0x07, 0x4d, 0x29, 0xda, 0xae, 0xa5, 0x02, 0x6e, 0x79, 0x23, 0x2a, 0xd3, 0x85,
- 0xa8, 0x00, 0xcd, 0x1c, 0x43, 0xb8, 0xe2, 0x79, 0x74, 0xd7, 0x2f, 0x06, 0xf1, 0x3d, 0x58, 0x19,
- 0x9b, 0x17, 0x23, 0xe1, 0xca, 0x3d, 0x21, 0x87, 0x9e, 0xa5, 0x73, 0xbc, 0x5e, 0xbb, 0xbc, 0x81,
- 0x87, 0x49, 0x74, 0x23, 0x4d, 0x8d, 0x32, 0xe1, 0x06, 0xb4, 0x4a, 0xd4, 0x34, 0xea, 0x12, 0xdf,
- 0x04, 0x50, 0xbf, 0x12, 0x9a, 0x6a, 0x26, 0xd2, 0x66, 0x8e, 0x44, 0x20, 0xfc, 0x33, 0x5b, 0x69,
- 0x57, 0xa5, 0xa4, 0x62, 0x2a, 0xd4, 0xc5, 0x93, 0x40, 0xf8, 0xed, 0x91, 0x69, 0x3b, 0x7a, 0x82,
- 0x63, 0x00, 0x7f, 0x1b, 0x6e, 0x04, 0x93, 0x63, 0x94, 0x99, 0x63, 0xd1, 0xf3, 0xf6, 0xc5, 0xf3,
- 0xc0, 0x11, 0x52, 0x0a, 0x5f, 0xe7, 0x91, 0xcc, 0xff, 0xd8, 0x18, 0x44, 0x66, 0x18, 0xbd, 0xe6,
- 0x82, 0xbf, 0xe2, 0x64, 0xb5, 0x08, 0xa4, 0x33, 0xf9, 0x58, 0x06, 0xd5, 0x9f, 0x02, 0xe9, 0x44,
- 0xbf, 0x2c, 0xff, 0x12, 0x7c, 0x21, 0x85, 0x64, 0xa8, 0x63, 0xf9, 0x60, 0xdb, 0x76, 0x4d, 0xc7,
- 0xfe, 0x81, 0x4a, 0x92, 0xc8, 0x35, 0xc6, 0xb0, 0x92, 0x1a, 0x38, 0xba, 0x9c, 0x4a, 0xbf, 0x74,
- 0xb6, 0x13, 0x83, 0x65, 0x55, 0xee, 0x4a, 0xdf, 0xa6, 0xf3, 0xa6, 0x08, 0xd2, 0xc2, 0x75, 0xee,
- 0xb1, 0x2c, 0xbf, 0x0e, 0x4c, 0x41, 0x3a, 0xae, 0x39, 0x1e, 0x37, 0xc7, 0x63, 0x47, 0xb0, 0x1c,
- 0x5d, 0xfc, 0x8d, 0xa1, 0xea, 0x52, 0x03, 0xcb, 0x37, 0xbe, 0x0b, 0xb7, 0x68, 0x64, 0x9e, 0x0a,
- 0x3f, 0xf2, 0xf3, 0x75, 0x5f, 0x6f, 0xc0, 0xba, 0xfa, 0xb5, 0xef, 0x49, 0xf5, 0x99, 0x8c, 0x4f,
- 0x0e, 0xab, 0x0a, 0x8c, 0xb6, 0x57, 0x57, 0xd0, 0x75, 0xde, 0x08, 0x16, 0xe1, 0x65, 0x1b, 0x3f,
- 0x2d, 0x02, 0x8f, 0x05, 0xa2, 0x67, 0x0b, 0x7f, 0xcb, 0x94, 0x66, 0x22, 0x4e, 0xbc, 0x72, 0x69,
- 0xa6, 0xc3, 0x8b, 0xf3, 0x14, 0x6f, 0x42, 0xd1, 0x0e, 0xd0, 0x33, 0xd5, 0xc9, 0xca, 0xba, 0xc4,
- 0x77, 0x01, 0xc6, 0xc2, 0xb7, 0x3d, 0x8b, 0x24, 0xa8, 0x30, 0xf7, 0x56, 0xc9, 0x6c, 0xa3, 0x36,
- 0x0e, 0x23, 0x1a, 0x23, 0x41, 0x8f, 0xed, 0x50, 0x25, 0x95, 0x37, 0x50, 0xa4, 0x46, 0x27, 0x41,
- 0xfc, 0x0d, 0xb8, 0x36, 0xf6, 0xed, 0xbe, 0x50, 0xd3, 0xf1, 0x24, 0xb0, 0x5a, 0xf4, 0x06, 0x62,
- 0x89, 0x30, 0xe7, 0x7d, 0x42, 0x09, 0x34, 0x5d, 0xf2, 0xd7, 0x02, 0x3a, 0x29, 0xd7, 0x17, 0xe0,
- 0x55, 0x3a, 0xef, 0x8a, 0x31, 0xff, 0x23, 0xbf, 0x0f, 0x4c, 0x7f, 0xd8, 0xb3, 0xdd, 0x5d, 0xe1,
- 0x0e, 0xe4, 0x90, 0x84, 0x7b, 0xc5, 0x98, 0x81, 0x93, 0x06, 0x53, 0x2f, 0x4d, 0xa9, 0x53, 0xb4,
- 0x8a, 0x11, 0x95, 0xd5, 0xa3, 0x0a, 0x8e, 0xe7, 0x77, 0xa5, 0xaf, 0xf3, 0x92, 0xa3, 0x32, 0xda,
- 0x50, 0x01, 0xb5, 0xf5, 0xd0, 0xf7, 0xac, 0x09, 0x9d, 0xf1, 0x28, 0x25, 0x36, 0x0d, 0x8e, 0x31,
- 0xf7, 0x4c, 0x57, 0x27, 0x8b, 0xae, 0x24, 0x31, 0x23, 0x30, 0xb9, 0xa4, 0x5e, 0x10, 0x33, 0x5c,
- 0xd3, 0x2e, 0x69, 0x02, 0xa6, 0x71, 0x62, 0x56, 0x2c, 0xc2, 0x89, 0xf9, 0x50, 0xff, 0x2d, 0xdf,
- 0xb3, 0xad, 0x98, 0x97, 0xca, 0x5b, 0x9a, 0x81, 0x27, 0x70, 0x63, 0x9e, 0x3c, 0x85, 0x1b, 0xc1,
- 0x1b, 0x3f, 0xca, 0x00, 0xc4, 0x93, 0x8f, 0x22, 0x1f, 0x97, 0xe2, 0x25, 0x7e, 0x0b, 0xae, 0x25,
- 0xc1, 0x8e, 0x4e, 0xf8, 0x25, 0xb9, 0x8f, 0x3f, 0x6c, 0x99, 0x17, 0x01, 0xcb, 0xea, 0x2b, 0xe8,
- 0x1a, 0xf6, 0x4c, 0x08, 0xca, 0x9e, 0xbc, 0x0e, 0x2c, 0x06, 0xd2, 0xbd, 0xc2, 0x80, 0xe5, 0xd3,
- 0xa8, 0x1f, 0x0b, 0xd3, 0x0f, 0x58, 0xa1, 0xb1, 0x03, 0x45, 0x75, 0xd4, 0x37, 0xe7, 0x90, 0xfe,
- 0xe5, 0x32, 0x6e, 0xfe, 0x46, 0x06, 0x60, 0x4b, 0x65, 0x87, 0xe3, 0x2e, 0x3e, 0x27, 0xf7, 0x61,
- 0x9e, 0x45, 0x65, 0x5a, 0x16, 0x65, 0xd9, 0xe7, 0xa2, 0xf7, 0x8b, 0xb0, 0x88, 0x92, 0x63, 0x86,
- 0x19, 0x72, 0x6a, 0xcd, 0x45, 0x65, 0xb5, 0x81, 0xb4, 0x3c, 0xd7, 0x15, 0x7d, 0xdc, 0x7e, 0xa2,
- 0x0d, 0x24, 0x02, 0x35, 0x7e, 0x98, 0x85, 0x4a, 0x6b, 0x68, 0x4a, 0xf5, 0xdc, 0xcf, 0xb7, 0xa1,
- 0x3c, 0x12, 0x41, 0x60, 0x0e, 0x44, 0xa0, 0x8f, 0xb6, 0xa6, 0xcf, 0xa5, 0x23, 0xdc, 0x8d, 0x27,
- 0xae, 0x2f, 0x4c, 0x4b, 0xbd, 0x71, 0x14, 0x51, 0x29, 0x0e, 0xae, 0x8c, 0x7c, 0xff, 0x97, 0xe0,
- 0xe0, 0x46, 0x0f, 0x12, 0x5b, 0xc7, 0xf1, 0x0b, 0xd8, 0xaa, 0xb7, 0x49, 0x50, 0x7d, 0x0f, 0xaa,
- 0x09, 0x52, 0xf4, 0xd8, 0x3d, 0xc7, 0x12, 0x81, 0xba, 0xe5, 0x18, 0x3f, 0x0c, 0x99, 0x02, 0x52,
- 0x82, 0x0a, 0xae, 0x5c, 0xe1, 0xeb, 0x53, 0xca, 0xb0, 0xd8, 0xf8, 0x5f, 0x25, 0xa8, 0x62, 0xa3,
- 0xf6, 0x54, 0x1f, 0x66, 0xa6, 0xa3, 0x06, 0x25, 0x4f, 0x73, 0xd6, 0xd7, 0x23, 0xbd, 0x04, 0x4f,
- 0x9d, 0xf4, 0x92, 0x4b, 0x27, 0xbd, 0xdc, 0x86, 0x8a, 0x3a, 0x52, 0xb3, 0x9a, 0x4a, 0x13, 0xe6,
- 0x8c, 0x18, 0x80, 0xe6, 0xca, 0xc8, 0xb3, 0x48, 0x1f, 0x37, 0xd5, 0x99, 0x53, 0xce, 0x48, 0x40,
- 0x92, 0x8f, 0x55, 0x55, 0xd3, 0x8f, 0x55, 0x51, 0xf6, 0xd1, 0xd8, 0xb9, 0xe8, 0x79, 0xba, 0xb5,
- 0x1d, 0x2b, 0xbe, 0x65, 0x9e, 0x86, 0xf3, 0x16, 0x94, 0xf4, 0xb4, 0xe8, 0x93, 0xb5, 0x2f, 0xcf,
- 0x99, 0x09, 0x8d, 0xbe, 0xa1, 0xff, 0xea, 0x8b, 0x5e, 0x46, 0x48, 0xc9, 0x1f, 0x41, 0xd5, 0x94,
- 0xd2, 0xec, 0x0f, 0x47, 0x5a, 0x7f, 0xe6, 0xe6, 0x1c, 0xbf, 0x27, 0x19, 0x35, 0x23, 0x6c, 0x23,
- 0x49, 0xc9, 0x37, 0xa1, 0xe2, 0x0b, 0x33, 0x95, 0x01, 0xf0, 0xca, 0x15, 0x6c, 0x8c, 0x10, 0xd7,
- 0x88, 0xc9, 0xa2, 0x37, 0x52, 0x21, 0x7e, 0x23, 0xb5, 0xfe, 0x93, 0x0c, 0xac, 0xa6, 0x1b, 0xff,
- 0x67, 0xf1, 0x66, 0xdf, 0x37, 0xe3, 0x37, 0xfb, 0x3e, 0xc3, 0xfb, 0x77, 0xbf, 0x9d, 0x01, 0x88,
- 0xc7, 0x05, 0xf7, 0x48, 0xf5, 0xb6, 0x58, 0x68, 0xb5, 0xab, 0x12, 0xdf, 0x49, 0x3d, 0x48, 0xf1,
- 0xf6, 0x42, 0x83, 0x9c, 0xf8, 0x99, 0x48, 0xde, 0x7f, 0x00, 0xab, 0x69, 0x38, 0x5d, 0x7a, 0xe8,
- 0xec, 0xb6, 0x55, 0x8c, 0xaa, 0xb3, 0xd7, 0x7c, 0xd4, 0xd6, 0x97, 0xed, 0x3a, 0xfb, 0x8f, 0x59,
- 0xb6, 0xfe, 0xc7, 0x19, 0xa8, 0x44, 0x43, 0xce, 0xbf, 0x93, 0x9c, 0x2b, 0x95, 0xe6, 0xf3, 0xd6,
- 0x22, 0x73, 0x15, 0xff, 0x6a, 0xbb, 0xd2, 0xbf, 0x48, 0x4c, 0x5d, 0xdd, 0x83, 0xd5, 0xf4, 0xc7,
- 0x39, 0x4a, 0xf4, 0x51, 0x5a, 0x89, 0xbe, 0xb9, 0x50, 0x95, 0xa1, 0xab, 0xba, 0x6b, 0x07, 0x52,
- 0xeb, 0xd7, 0xf7, 0xb3, 0xef, 0x65, 0xea, 0x77, 0x61, 0x39, 0xf9, 0x69, 0xf6, 0x46, 0xed, 0xfd,
- 0x3f, 0xce, 0xc1, 0x6a, 0x3a, 0x53, 0x86, 0xee, 0xef, 0xa9, 0x2c, 0xad, 0x03, 0xc7, 0x4a, 0xdc,
- 0x77, 0x60, 0xe8, 0x26, 0x6b, 0x67, 0x98, 0x00, 0xeb, 0x14, 0x05, 0xf3, 0x46, 0x82, 0xdd, 0x4d,
- 0xbe, 0x4b, 0xfa, 0x06, 0x87, 0xf0, 0x66, 0x25, 0x1b, 0xf3, 0x8a, 0x7e, 0xa1, 0xed, 0x87, 0x59,
- 0xbe, 0x92, 0xc8, 0xba, 0xff, 0x31, 0x5a, 0x82, 0x6b, 0x9b, 0x13, 0xd7, 0x72, 0x84, 0x15, 0x41,
- 0x7f, 0x92, 0x84, 0x46, 0x69, 0xf3, 0x3f, 0xcc, 0xf3, 0x55, 0xa8, 0x74, 0x27, 0xc7, 0x3a, 0x65,
- 0xfe, 0x2f, 0xe7, 0xf9, 0x4d, 0x58, 0xd7, 0x58, 0x71, 0x86, 0x2a, 0xfb, 0x2b, 0xb8, 0x67, 0xad,
- 0x36, 0xd5, 0x78, 0xe9, 0x86, 0xb2, 0xbf, 0x9a, 0xc7, 0x26, 0xd0, 0x85, 0xfd, 0xbf, 0x46, 0x7c,
- 0xa2, 0xeb, 0x4d, 0xec, 0xd7, 0xf2, 0x7c, 0x0d, 0xa0, 0xdb, 0x8b, 0x2a, 0xfa, 0x8d, 0x3c, 0xaf,
- 0x42, 0xb1, 0xdb, 0x23, 0x6e, 0x3f, 0xca, 0xf3, 0x1b, 0xc0, 0xe2, 0xaf, 0x3a, 0x6f, 0xf7, 0x6f,
- 0xaa, 0xc6, 0x44, 0x89, 0xb8, 0x7f, 0x2b, 0x8f, 0xfd, 0x0a, 0x47, 0x99, 0xfd, 0xed, 0x3c, 0x67,
- 0x50, 0x4d, 0x84, 0x76, 0xd9, 0xdf, 0xc9, 0x73, 0x0e, 0x2b, 0x7b, 0x76, 0x10, 0xd8, 0xee, 0x40,
- 0xf7, 0xe0, 0xd7, 0xa9, 0xe6, 0xed, 0xe8, 0x86, 0x16, 0xfb, 0xcd, 0x3c, 0xbf, 0x05, 0x3c, 0x79,
- 0x9c, 0xa5, 0x3f, 0xfc, 0x5d, 0xa2, 0x56, 0xfb, 0x64, 0xa0, 0x61, 0x7f, 0x8f, 0xa8, 0x51, 0x12,
- 0x34, 0xe0, 0xb7, 0x68, 0x40, 0x5a, 0x71, 0xa6, 0xaf, 0x86, 0xff, 0x98, 0x88, 0xc3, 0xc9, 0x54,
- 0xb0, 0x9f, 0xe4, 0xef, 0xff, 0x94, 0x8e, 0x23, 0x92, 0x09, 0x73, 0x7c, 0x19, 0xca, 0x8e, 0xe7,
- 0x0e, 0xa4, 0x7a, 0x0f, 0x76, 0x05, 0x2a, 0xc1, 0xd0, 0xf3, 0x25, 0x15, 0xe9, 0x0a, 0xa9, 0x4b,
- 0x8f, 0x09, 0xa8, 0x4b, 0x17, 0xca, 0xab, 0x53, 0xf1, 0x55, 0x69, 0x0e, 0x58, 0x35, 0xca, 0x51,
- 0xce, 0x47, 0x79, 0xd4, 0xf4, 0xa8, 0x41, 0x78, 0x69, 0x9c, 0x15, 0x11, 0x75, 0xe2, 0x3b, 0x2a,
- 0x9f, 0x5a, 0xa0, 0x45, 0xaf, 0x1e, 0x7e, 0x1c, 0x0f, 0xd1, 0x71, 0xa8, 0x28, 0xa8, 0xf7, 0x3d,
- 0x5b, 0x5d, 0x47, 0xd6, 0xe9, 0x89, 0x16, 0xb6, 0x23, 0xca, 0xc0, 0x61, 0xe2, 0xfe, 0xdf, 0xcf,
- 0xc0, 0x72, 0x78, 0x95, 0xdf, 0x1e, 0xd8, 0xae, 0xca, 0xc8, 0x0e, 0x5f, 0xd9, 0xed, 0x3b, 0xf6,
- 0x38, 0x7c, 0xb5, 0x72, 0x0d, 0xaa, 0x96, 0x6f, 0x0e, 0x9a, 0xae, 0xb5, 0xe5, 0x7b, 0x63, 0xd5,
- 0x6c, 0x75, 0x60, 0xa9, 0x32, 0xc1, 0x9f, 0x8b, 0x63, 0x44, 0x1f, 0x0b, 0x9f, 0xe5, 0x29, 0xf5,
- 0x71, 0x68, 0xfa, 0xb6, 0x3b, 0x68, 0x9f, 0x4b, 0xe1, 0x06, 0x2a, 0x23, 0xbc, 0x0a, 0xa5, 0x49,
- 0x20, 0xfa, 0x66, 0x20, 0x58, 0x11, 0x0b, 0xc7, 0x13, 0xdb, 0x91, 0xb6, 0xab, 0x1e, 0x8b, 0x8c,
- 0x52, 0xbe, 0xcb, 0xd8, 0x33, 0x73, 0x6c, 0xb3, 0xca, 0xfd, 0xdf, 0xcf, 0x40, 0x95, 0xc4, 0x22,
- 0x8e, 0x89, 0xc7, 0x36, 0x5a, 0x15, 0x4a, 0xbb, 0xd1, 0xab, 0x81, 0x45, 0xc8, 0x1e, 0x9c, 0xaa,
- 0x98, 0xb8, 0x16, 0x0b, 0x75, 0x23, 0x57, 0x3d, 0x20, 0x98, 0xe7, 0x9f, 0x83, 0x1b, 0x86, 0x18,
- 0x79, 0x52, 0x3c, 0x33, 0x6d, 0x99, 0xbc, 0x7d, 0x55, 0x40, 0x77, 0x4e, 0x7d, 0x0a, 0xaf, 0x5b,
- 0x15, 0xc9, 0x9d, 0xc3, 0x6a, 0x43, 0x48, 0x09, 0x7b, 0x4f, 0x10, 0xed, 0xdf, 0x95, 0x23, 0x94,
- 0x8f, 0x3c, 0xdb, 0xc5, 0xda, 0xe8, 0x1e, 0x38, 0x41, 0xe8, 0x6c, 0x07, 0x41, 0x70, 0x7f, 0x1f,
- 0x6e, 0xce, 0x3f, 0x91, 0x50, 0x37, 0xc4, 0xe9, 0xa9, 0x6a, 0xba, 0x8f, 0xf3, 0xcc, 0xb7, 0xd5,
- 0x45, 0xdf, 0x0a, 0x14, 0x0e, 0x9e, 0xbb, 0x24, 0x16, 0xeb, 0xb0, 0xb2, 0xef, 0x25, 0x68, 0x58,
- 0xee, 0x7e, 0x3f, 0x75, 0x88, 0x14, 0x0f, 0x4a, 0xd8, 0x88, 0xa5, 0xc4, 0x5d, 0xb3, 0x8c, 0x3a,
- 0x1f, 0xa0, 0xff, 0x36, 0xa2, 0x5e, 0xcf, 0xd0, 0x87, 0x37, 0x96, 0x7a, 0x3d, 0x23, 0x6a, 0x66,
- 0x5e, 0x3d, 0x23, 0xe6, 0xf6, 0x85, 0x23, 0x2c, 0x56, 0xb8, 0xff, 0x1e, 0xac, 0xe9, 0xae, 0xf6,
- 0x45, 0x10, 0x84, 0x77, 0xb5, 0x0e, 0x7d, 0xfb, 0x4c, 0xbd, 0xd0, 0xb1, 0x0c, 0xe5, 0x43, 0xe1,
- 0x07, 0x9e, 0x4b, 0xaf, 0x93, 0x00, 0x14, 0xbb, 0x43, 0xd3, 0xc7, 0x3a, 0xee, 0x7f, 0x55, 0x0f,
- 0xd2, 0x93, 0xf3, 0x70, 0x6b, 0xc0, 0xf5, 0xa3, 0x1f, 0xe7, 0x31, 0xa5, 0xa9, 0xd1, 0xa5, 0x2f,
- 0xcc, 0x11, 0xcb, 0xde, 0x6f, 0x41, 0x85, 0xae, 0x7a, 0x3d, 0xb6, 0x5d, 0x0b, 0x3b, 0xbe, 0xa9,
- 0xaf, 0x1d, 0xd0, 0xab, 0x51, 0x67, 0x34, 0x1c, 0x65, 0xf5, 0xbe, 0x2e, 0xcb, 0xf2, 0x9b, 0xc0,
- 0x9b, 0x13, 0xe9, 0x8d, 0x4c, 0xba, 0xa2, 0xec, 0x5c, 0xa8, 0xb7, 0x98, 0x73, 0xf7, 0xbf, 0x05,
- 0x5c, 0xc5, 0xd8, 0x2c, 0x71, 0x6e, 0xbb, 0x83, 0xe8, 0xf5, 0x03, 0xa0, 0xa7, 0x4c, 0x2c, 0x71,
- 0x1e, 0xde, 0xd3, 0x0b, 0x0b, 0xe1, 0x83, 0x2a, 0xdb, 0xde, 0xc4, 0xc5, 0x46, 0x3f, 0x85, 0xeb,
- 0x4a, 0xc4, 0xb0, 0x17, 0x74, 0xff, 0xf5, 0x52, 0xc7, 0x5f, 0xdd, 0xd3, 0x93, 0x93, 0x20, 0xc2,
- 0x65, 0x19, 0x6c, 0x58, 0xe4, 0x34, 0xc7, 0xf0, 0xec, 0xfd, 0x06, 0x5c, 0x9b, 0x13, 0xb9, 0x20,
- 0xa5, 0xae, 0xfc, 0x37, 0xb6, 0x74, 0xff, 0x43, 0x58, 0x57, 0x6a, 0x68, 0x5f, 0xdd, 0x50, 0x0c,
- 0x87, 0xed, 0x59, 0x67, 0xbb, 0xa3, 0x46, 0xba, 0xd5, 0xde, 0xdd, 0x7d, 0xb2, 0xdb, 0x34, 0x58,
- 0x86, 0xe4, 0xe1, 0xa0, 0x77, 0xd4, 0x3a, 0xd8, 0xdf, 0x6f, 0xb7, 0x7a, 0xed, 0x2d, 0x96, 0xdd,
- 0xbc, 0xff, 0x6f, 0x3f, 0xbd, 0x93, 0xf9, 0xd9, 0xa7, 0x77, 0x32, 0xff, 0xe5, 0xd3, 0x3b, 0x99,
- 0x1f, 0xfd, 0xfc, 0xce, 0xd2, 0xcf, 0x7e, 0x7e, 0x67, 0xe9, 0x3f, 0xfe, 0xfc, 0xce, 0xd2, 0x27,
- 0x6c, 0xfa, 0x1f, 0x06, 0x1d, 0x17, 0xc9, 0x65, 0x78, 0xeb, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
- 0x90, 0x26, 0xce, 0x54, 0x4b, 0x68, 0x00, 0x00,
+ 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x1a, 0x8d, 0x47, 0xd4, 0x6a,
+ 0x77, 0x34, 0x5a, 0xf5, 0xec, 0xce, 0xee, 0x6a, 0x57, 0x2b, 0xed, 0x4a, 0xec, 0x6e, 0xf6, 0x34,
+ 0x77, 0xfa, 0xa5, 0x22, 0x67, 0x46, 0xbb, 0xb8, 0x73, 0xbb, 0x9a, 0x95, 0x4d, 0x96, 0xba, 0x58,
+ 0x45, 0x55, 0x25, 0x7b, 0xba, 0x05, 0xdb, 0x90, 0x5f, 0x77, 0xbe, 0x3f, 0xd9, 0xf0, 0xd9, 0x3e,
+ 0x18, 0xc6, 0x49, 0x1f, 0x06, 0x0c, 0xdf, 0x19, 0xfe, 0x12, 0xec, 0xf3, 0x03, 0xf0, 0xf9, 0xcb,
+ 0x80, 0x7f, 0x64, 0x7f, 0x19, 0xf0, 0x01, 0x36, 0xb4, 0x80, 0x7f, 0x0c, 0xfb, 0x70, 0x06, 0x0c,
+ 0x08, 0x86, 0x3f, 0x8c, 0x88, 0xcc, 0x7a, 0x91, 0xec, 0x1e, 0xce, 0xde, 0x9d, 0xe1, 0xaf, 0x66,
+ 0x44, 0x45, 0x44, 0xe5, 0x23, 0x32, 0x32, 0x22, 0x32, 0xb2, 0x1a, 0x5e, 0x19, 0x9f, 0x0e, 0x1e,
+ 0x38, 0xf6, 0xf1, 0x83, 0xf1, 0xf1, 0x83, 0x91, 0x67, 0x09, 0xe7, 0xc1, 0xd8, 0xf7, 0xa4, 0x17,
+ 0x28, 0x20, 0x58, 0x27, 0x88, 0xd7, 0x4c, 0xf7, 0x42, 0x5e, 0x8c, 0xc5, 0x3a, 0x61, 0x1b, 0xb7,
+ 0x07, 0x9e, 0x37, 0x70, 0x84, 0x22, 0x3d, 0x9e, 0x9c, 0x3c, 0x08, 0xa4, 0x3f, 0xe9, 0x4b, 0x45,
+ 0xdc, 0xfc, 0x79, 0x1e, 0x6e, 0x76, 0x47, 0xa6, 0x2f, 0x37, 0x1c, 0xaf, 0x7f, 0xda, 0x75, 0xcd,
+ 0x71, 0x30, 0xf4, 0xe4, 0x86, 0x19, 0x08, 0xfe, 0x3a, 0x14, 0x8f, 0x11, 0x19, 0xd4, 0x33, 0x77,
+ 0x73, 0xf7, 0xaa, 0x0f, 0xaf, 0xaf, 0xa7, 0x04, 0xaf, 0x13, 0x87, 0xa1, 0x69, 0xf8, 0x9b, 0x50,
+ 0xb2, 0x84, 0x34, 0x6d, 0x27, 0xa8, 0x67, 0xef, 0x66, 0xee, 0x55, 0x1f, 0xde, 0x5a, 0x57, 0x2f,
+ 0x5e, 0x0f, 0x5f, 0xbc, 0xde, 0xa5, 0x17, 0x1b, 0x21, 0x1d, 0x7f, 0x17, 0xca, 0x27, 0xb6, 0x23,
+ 0x1e, 0x8b, 0x8b, 0xa0, 0x9e, 0xbb, 0x92, 0x67, 0x23, 0x5b, 0xcf, 0x18, 0x11, 0x31, 0xdf, 0x84,
+ 0x15, 0x71, 0x2e, 0x7d, 0xd3, 0x10, 0x8e, 0x29, 0x6d, 0xcf, 0x0d, 0xea, 0x79, 0x6a, 0xe1, 0xad,
+ 0xa9, 0x16, 0x86, 0xcf, 0x89, 0x7d, 0x8a, 0x85, 0xdf, 0x85, 0xaa, 0x77, 0xfc, 0x7d, 0xd1, 0x97,
+ 0xbd, 0x8b, 0xb1, 0x08, 0xea, 0x85, 0xbb, 0xb9, 0x7b, 0x15, 0x23, 0x89, 0xe2, 0xdf, 0x80, 0x6a,
+ 0xdf, 0x73, 0x1c, 0xd1, 0x57, 0xef, 0x28, 0x5e, 0xdd, 0xad, 0x24, 0x2d, 0x7f, 0x1b, 0x6e, 0xf8,
+ 0x62, 0xe4, 0x9d, 0x09, 0x6b, 0x33, 0xc2, 0x52, 0x3f, 0xcb, 0xf4, 0x9a, 0xf9, 0x0f, 0x79, 0x0b,
+ 0x6a, 0xbe, 0x6e, 0xdf, 0xae, 0xed, 0x9e, 0x06, 0xf5, 0x12, 0x75, 0xeb, 0xf3, 0x97, 0x74, 0x0b,
+ 0x69, 0x8c, 0x34, 0x07, 0x67, 0x90, 0x3b, 0x15, 0x17, 0xf5, 0xca, 0xdd, 0xcc, 0xbd, 0x8a, 0x81,
+ 0x3f, 0xf9, 0xfb, 0x50, 0xf7, 0x7c, 0x7b, 0x60, 0xbb, 0xa6, 0xb3, 0xe9, 0x0b, 0x53, 0x0a, 0xab,
+ 0x67, 0x8f, 0x44, 0x20, 0xcd, 0xd1, 0xb8, 0x0e, 0x77, 0x33, 0xf7, 0x72, 0xc6, 0xa5, 0xcf, 0xf9,
+ 0x5b, 0x6a, 0x86, 0x3a, 0xee, 0x89, 0x57, 0xaf, 0xea, 0xee, 0xa7, 0xdb, 0xb2, 0xad, 0x1f, 0x1b,
+ 0x11, 0x61, 0xf3, 0x97, 0x59, 0x28, 0x76, 0x85, 0xe9, 0xf7, 0x87, 0x8d, 0x5f, 0xcf, 0x40, 0xd1,
+ 0x10, 0xc1, 0xc4, 0x91, 0xbc, 0x01, 0x65, 0x35, 0xb6, 0x1d, 0xab, 0x9e, 0xa1, 0xd6, 0x45, 0xf0,
+ 0x67, 0xd1, 0x9d, 0x75, 0xc8, 0x8f, 0x84, 0x34, 0xeb, 0x39, 0x1a, 0xa1, 0xc6, 0x54, 0xab, 0xd4,
+ 0xeb, 0xd7, 0xf7, 0x84, 0x34, 0x0d, 0xa2, 0x6b, 0x7c, 0x9a, 0x81, 0x3c, 0x82, 0xfc, 0x36, 0x54,
+ 0x86, 0xf6, 0x60, 0xe8, 0xd8, 0x83, 0xa1, 0xd4, 0x0d, 0x89, 0x11, 0xfc, 0x43, 0x58, 0x8d, 0x00,
+ 0xc3, 0x74, 0x07, 0x02, 0x5b, 0x34, 0x4f, 0xf9, 0xe9, 0xa1, 0x31, 0x4d, 0xcc, 0xeb, 0x50, 0xa2,
+ 0xf5, 0xd0, 0xb1, 0x48, 0xa3, 0x2b, 0x46, 0x08, 0xa2, 0xba, 0x85, 0x33, 0xf5, 0x58, 0x5c, 0xd4,
+ 0xf3, 0xf4, 0x34, 0x89, 0xe2, 0x2d, 0x58, 0x0d, 0xc1, 0x2d, 0x3d, 0x1a, 0x85, 0xab, 0x47, 0x63,
+ 0x9a, 0xbe, 0xf9, 0xa3, 0x3d, 0x28, 0xd0, 0xb2, 0xe4, 0x2b, 0x90, 0xb5, 0xc3, 0x81, 0xce, 0xda,
+ 0x16, 0x7f, 0x00, 0xc5, 0x13, 0x5b, 0x38, 0xd6, 0x0b, 0x47, 0x58, 0x93, 0xf1, 0x36, 0x2c, 0xfb,
+ 0x22, 0x90, 0xbe, 0xad, 0xb5, 0x5f, 0x2d, 0xd0, 0x2f, 0xce, 0xb3, 0x01, 0xeb, 0x46, 0x82, 0xd0,
+ 0x48, 0xb1, 0x61, 0xb7, 0xfb, 0x43, 0xdb, 0xb1, 0x7c, 0xe1, 0x76, 0x2c, 0xb5, 0x4e, 0x2b, 0x46,
+ 0x12, 0xc5, 0xef, 0xc1, 0xea, 0xb1, 0xd9, 0x3f, 0x1d, 0xf8, 0xde, 0xc4, 0xc5, 0x05, 0xe1, 0xf9,
+ 0xd4, 0xed, 0x8a, 0x31, 0x8d, 0xe6, 0x6f, 0x40, 0xc1, 0x74, 0xec, 0x81, 0x4b, 0x2b, 0x71, 0x65,
+ 0x66, 0xd2, 0x55, 0x5b, 0x5a, 0x48, 0x61, 0x28, 0x42, 0xbe, 0x03, 0xb5, 0x33, 0xe1, 0x4b, 0xbb,
+ 0x6f, 0x3a, 0x84, 0xaf, 0x97, 0x88, 0xb3, 0x39, 0x97, 0xf3, 0x69, 0x92, 0xd2, 0x48, 0x33, 0xf2,
+ 0x0e, 0x40, 0x80, 0x66, 0x92, 0xa6, 0x53, 0xaf, 0x85, 0xd7, 0xe6, 0x8a, 0xd9, 0xf4, 0x5c, 0x29,
+ 0x5c, 0xb9, 0xde, 0x8d, 0xc8, 0x77, 0x96, 0x8c, 0x04, 0x33, 0x7f, 0x17, 0xf2, 0x52, 0x9c, 0xcb,
+ 0xfa, 0xca, 0x15, 0x23, 0x1a, 0x0a, 0xe9, 0x89, 0x73, 0xb9, 0xb3, 0x64, 0x10, 0x03, 0x32, 0xe2,
+ 0x22, 0xab, 0xaf, 0x2e, 0xc0, 0x88, 0xeb, 0x12, 0x19, 0x91, 0x81, 0x7f, 0x00, 0x45, 0xc7, 0xbc,
+ 0xf0, 0x26, 0xb2, 0xce, 0x88, 0xf5, 0x4b, 0x57, 0xb2, 0xee, 0x12, 0xe9, 0xce, 0x92, 0xa1, 0x99,
+ 0xf8, 0xdb, 0x90, 0xb3, 0xec, 0xb3, 0xfa, 0x1a, 0xf1, 0xde, 0xbd, 0x92, 0x77, 0xcb, 0x3e, 0xdb,
+ 0x59, 0x32, 0x90, 0x9c, 0x6f, 0x42, 0xf9, 0xd8, 0xf3, 0x4e, 0x47, 0xa6, 0x7f, 0x5a, 0xe7, 0xc4,
+ 0xfa, 0xe5, 0x2b, 0x59, 0x37, 0x34, 0xf1, 0xce, 0x92, 0x11, 0x31, 0x62, 0x97, 0xed, 0xbe, 0xe7,
+ 0xd6, 0xaf, 0x2d, 0xd0, 0xe5, 0x4e, 0xdf, 0x73, 0xb1, 0xcb, 0xc8, 0x80, 0x8c, 0x8e, 0xed, 0x9e,
+ 0xd6, 0xaf, 0x2f, 0xc0, 0x88, 0x96, 0x13, 0x19, 0x91, 0x01, 0x9b, 0x6d, 0x99, 0xd2, 0x3c, 0xb3,
+ 0xc5, 0xf3, 0xfa, 0x8d, 0x05, 0x9a, 0xbd, 0xa5, 0x89, 0xb1, 0xd9, 0x21, 0x23, 0x0a, 0x09, 0x97,
+ 0x66, 0xfd, 0xe6, 0x02, 0x42, 0x42, 0x8b, 0x8e, 0x42, 0x42, 0x46, 0xfe, 0x67, 0x61, 0xed, 0x44,
+ 0x98, 0x72, 0xe2, 0x0b, 0x2b, 0xde, 0xe8, 0x6e, 0x91, 0xb4, 0xf5, 0xab, 0xe7, 0x7e, 0x9a, 0x6b,
+ 0x67, 0xc9, 0x98, 0x15, 0xc5, 0xdf, 0x87, 0x82, 0x63, 0x4a, 0x71, 0x5e, 0xaf, 0x93, 0xcc, 0xe6,
+ 0x0b, 0x94, 0x42, 0x8a, 0xf3, 0x9d, 0x25, 0x43, 0xb1, 0xf0, 0xef, 0xc1, 0xaa, 0x34, 0x8f, 0x1d,
+ 0x71, 0x70, 0xa2, 0x09, 0x82, 0xfa, 0xe7, 0x48, 0xca, 0xeb, 0x57, 0xab, 0x73, 0x9a, 0x67, 0x67,
+ 0xc9, 0x98, 0x16, 0x83, 0xad, 0x22, 0x54, 0xbd, 0xb1, 0x40, 0xab, 0x48, 0x1e, 0xb6, 0x8a, 0x58,
+ 0xf8, 0x2e, 0x54, 0xe9, 0xc7, 0xa6, 0xe7, 0x4c, 0x46, 0x6e, 0xfd, 0xf3, 0x24, 0xe1, 0xde, 0x8b,
+ 0x25, 0x28, 0xfa, 0x9d, 0x25, 0x23, 0xc9, 0x8e, 0x93, 0x48, 0xa0, 0xe1, 0x3d, 0xaf, 0xdf, 0x5e,
+ 0x60, 0x12, 0x7b, 0x9a, 0x18, 0x27, 0x31, 0x64, 0xc4, 0xa5, 0xf7, 0xdc, 0xb6, 0x06, 0x42, 0xd6,
+ 0xbf, 0xb0, 0xc0, 0xd2, 0x7b, 0x46, 0xa4, 0xb8, 0xf4, 0x14, 0x13, 0xaa, 0x71, 0x7f, 0x68, 0xca,
+ 0xfa, 0x9d, 0x05, 0xd4, 0x78, 0x73, 0x68, 0x92, 0xad, 0x40, 0x86, 0xc6, 0x0f, 0x61, 0x39, 0x69,
+ 0x95, 0x39, 0x87, 0xbc, 0x2f, 0x4c, 0xb5, 0x23, 0x94, 0x0d, 0xfa, 0x8d, 0x38, 0x61, 0xd9, 0x92,
+ 0x76, 0x84, 0xb2, 0x41, 0xbf, 0xf9, 0x4d, 0x28, 0x2a, 0xdf, 0x84, 0x0c, 0x7e, 0xd9, 0xd0, 0x10,
+ 0xd2, 0x5a, 0xbe, 0x39, 0xa0, 0x7d, 0xab, 0x6c, 0xd0, 0x6f, 0xa4, 0xb5, 0x7c, 0x6f, 0x7c, 0xe0,
+ 0x92, 0xc1, 0x2e, 0x1b, 0x1a, 0x6a, 0x7c, 0xfa, 0x01, 0x94, 0x74, 0xa3, 0x1a, 0x7f, 0x3f, 0x03,
+ 0x45, 0x65, 0x50, 0xf8, 0xb7, 0xa1, 0x10, 0xc8, 0x0b, 0x47, 0x50, 0x1b, 0x56, 0x1e, 0x7e, 0x65,
+ 0x01, 0x23, 0xb4, 0xde, 0x45, 0x06, 0x43, 0xf1, 0x35, 0x0d, 0x28, 0x10, 0xcc, 0x4b, 0x90, 0x33,
+ 0xbc, 0xe7, 0x6c, 0x89, 0x03, 0x14, 0xd5, 0x64, 0xb1, 0x0c, 0x22, 0xb7, 0xec, 0x33, 0x96, 0x45,
+ 0xe4, 0x8e, 0x30, 0x2d, 0xe1, 0xb3, 0x1c, 0xaf, 0x41, 0x25, 0x9c, 0x96, 0x80, 0xe5, 0x39, 0x83,
+ 0xe5, 0xc4, 0x84, 0x07, 0xac, 0xd0, 0xf8, 0x9f, 0x79, 0xc8, 0xe3, 0xfa, 0xe7, 0xaf, 0x40, 0x4d,
+ 0x9a, 0xfe, 0x40, 0x28, 0x47, 0x38, 0x72, 0x52, 0xd2, 0x48, 0xfe, 0x41, 0xd8, 0x87, 0x2c, 0xf5,
+ 0xe1, 0xb5, 0x17, 0xda, 0x95, 0x54, 0x0f, 0x12, 0xbb, 0x70, 0x6e, 0xb1, 0x5d, 0x78, 0x1b, 0xca,
+ 0x68, 0xce, 0xba, 0xf6, 0x0f, 0x05, 0x0d, 0xfd, 0xca, 0xc3, 0xfb, 0x2f, 0x7e, 0x65, 0x47, 0x73,
+ 0x18, 0x11, 0x2f, 0xef, 0x40, 0xa5, 0x6f, 0xfa, 0x16, 0x35, 0x86, 0x66, 0x6b, 0xe5, 0xe1, 0x57,
+ 0x5f, 0x2c, 0x68, 0x33, 0x64, 0x31, 0x62, 0x6e, 0x7e, 0x00, 0x55, 0x4b, 0x04, 0x7d, 0xdf, 0x1e,
+ 0x93, 0x79, 0x53, 0x7b, 0xf1, 0xd7, 0x5e, 0x2c, 0x6c, 0x2b, 0x66, 0x32, 0x92, 0x12, 0xd0, 0x23,
+ 0xf3, 0x23, 0xfb, 0x56, 0x22, 0x07, 0x21, 0x46, 0x34, 0xdf, 0x85, 0x72, 0xd8, 0x1f, 0xbe, 0x0c,
+ 0x65, 0xfc, 0xbb, 0xef, 0xb9, 0x82, 0x2d, 0xe1, 0xdc, 0x22, 0xd4, 0x1d, 0x99, 0x8e, 0xc3, 0x32,
+ 0x7c, 0x05, 0x00, 0xc1, 0x3d, 0x61, 0xd9, 0x93, 0x11, 0xcb, 0x36, 0xbf, 0x19, 0x6a, 0x4b, 0x19,
+ 0xf2, 0x87, 0xe6, 0x00, 0x39, 0x96, 0xa1, 0x1c, 0x9a, 0x6b, 0x96, 0x41, 0xfe, 0x2d, 0x33, 0x18,
+ 0x1e, 0x7b, 0xa6, 0x6f, 0xb1, 0x2c, 0xaf, 0x42, 0xa9, 0xe5, 0xf7, 0x87, 0xf6, 0x99, 0x60, 0xb9,
+ 0xe6, 0x03, 0xa8, 0x26, 0xda, 0x8b, 0x22, 0xf4, 0x4b, 0x2b, 0x50, 0x68, 0x59, 0x96, 0xb0, 0x58,
+ 0x06, 0x19, 0x74, 0x07, 0x59, 0xb6, 0xf9, 0x55, 0xa8, 0x44, 0xa3, 0x85, 0xe4, 0xb8, 0x71, 0xb3,
+ 0x25, 0xfc, 0x85, 0x68, 0x96, 0x41, 0xad, 0xec, 0xb8, 0x8e, 0xed, 0x0a, 0x96, 0x6d, 0xfc, 0x39,
+ 0x52, 0x55, 0xfe, 0xad, 0xf4, 0x82, 0x78, 0xf5, 0x45, 0x3b, 0x6b, 0x7a, 0x35, 0x7c, 0x3e, 0xd1,
+ 0xbf, 0x5d, 0x9b, 0x1a, 0x57, 0x86, 0xfc, 0x96, 0x27, 0x03, 0x96, 0x69, 0xfc, 0xb7, 0x2c, 0x94,
+ 0xc3, 0x0d, 0x15, 0x63, 0x82, 0x89, 0xef, 0x68, 0x85, 0xc6, 0x9f, 0xfc, 0x3a, 0x14, 0xa4, 0x2d,
+ 0xb5, 0x1a, 0x57, 0x0c, 0x05, 0xa0, 0xaf, 0x96, 0x9c, 0x59, 0xe5, 0xc0, 0x4e, 0x4f, 0x95, 0x3d,
+ 0x32, 0x07, 0x62, 0xc7, 0x0c, 0x86, 0xda, 0x85, 0x8d, 0x11, 0xc8, 0x7f, 0x62, 0x9e, 0xa1, 0xce,
+ 0xd1, 0x73, 0xe5, 0xc5, 0x25, 0x51, 0xfc, 0x2d, 0xc8, 0x63, 0x07, 0xb5, 0xd2, 0xfc, 0x99, 0xa9,
+ 0x0e, 0xa3, 0x9a, 0x1c, 0xfa, 0x02, 0xa7, 0x67, 0x1d, 0x23, 0x30, 0x83, 0x88, 0xf9, 0xab, 0xb0,
+ 0xa2, 0x16, 0xe1, 0x41, 0x18, 0x3f, 0x94, 0x48, 0xf2, 0x14, 0x96, 0xb7, 0x70, 0x38, 0x4d, 0x29,
+ 0xea, 0xe5, 0x05, 0xf4, 0x3b, 0x1c, 0x9c, 0xf5, 0x2e, 0xb2, 0x18, 0x8a, 0xb3, 0xf9, 0x0e, 0x8e,
+ 0xa9, 0x29, 0x05, 0x4e, 0x73, 0x7b, 0x34, 0x96, 0x17, 0x4a, 0x69, 0xb6, 0x85, 0xec, 0x0f, 0x6d,
+ 0x77, 0xc0, 0x32, 0x6a, 0x88, 0x71, 0x12, 0x89, 0xc4, 0xf7, 0x3d, 0x9f, 0xe5, 0x1a, 0x0d, 0xc8,
+ 0xa3, 0x8e, 0xa2, 0x91, 0x74, 0xcd, 0x91, 0xd0, 0x23, 0x4d, 0xbf, 0x1b, 0xd7, 0x60, 0x6d, 0x66,
+ 0x3f, 0x6e, 0xfc, 0x5e, 0x51, 0x69, 0x08, 0x72, 0x90, 0x2f, 0xa8, 0x39, 0xc8, 0xcd, 0x7b, 0x29,
+ 0x1b, 0x83, 0x52, 0xd2, 0x36, 0xe6, 0x03, 0x28, 0x60, 0xc7, 0x42, 0x13, 0xb3, 0x00, 0xfb, 0x1e,
+ 0x92, 0x1b, 0x8a, 0x0b, 0x23, 0x98, 0xfe, 0x50, 0xf4, 0x4f, 0x85, 0xa5, 0x6d, 0x7d, 0x08, 0xa2,
+ 0xd2, 0xf4, 0x13, 0xee, 0xb9, 0x02, 0x48, 0x25, 0xfa, 0x9e, 0xdb, 0x1e, 0x79, 0xdf, 0xb7, 0x69,
+ 0x5e, 0x51, 0x25, 0x42, 0x44, 0xf8, 0xb4, 0x83, 0x3a, 0xa2, 0xa7, 0x2d, 0x46, 0x34, 0xda, 0x50,
+ 0xa0, 0x77, 0xe3, 0x4a, 0x50, 0x6d, 0x56, 0x99, 0x86, 0x57, 0x17, 0x6b, 0xb3, 0x6e, 0x72, 0xe3,
+ 0x77, 0xb3, 0x90, 0x47, 0x98, 0xdf, 0x87, 0x82, 0x8f, 0x71, 0x18, 0x0d, 0xe7, 0x65, 0x31, 0x9b,
+ 0x22, 0xe1, 0xdf, 0xd6, 0xaa, 0x98, 0x5d, 0x40, 0x59, 0xa2, 0x37, 0x26, 0xd5, 0xf2, 0x3a, 0x14,
+ 0xc6, 0xa6, 0x6f, 0x8e, 0xf4, 0x3a, 0x51, 0x40, 0xf3, 0x27, 0x19, 0xc8, 0x23, 0x11, 0x5f, 0x83,
+ 0x5a, 0x57, 0xfa, 0xf6, 0xa9, 0x90, 0x43, 0xdf, 0x9b, 0x0c, 0x86, 0x4a, 0x93, 0x1e, 0x8b, 0x0b,
+ 0x65, 0x6f, 0x94, 0x41, 0x90, 0xa6, 0x63, 0xf7, 0x59, 0x16, 0xb5, 0x6a, 0xc3, 0x73, 0x2c, 0x96,
+ 0xe3, 0xab, 0x50, 0x7d, 0xe2, 0x5a, 0xc2, 0x0f, 0xfa, 0x9e, 0x2f, 0x2c, 0x96, 0xd7, 0xab, 0xfb,
+ 0x94, 0x15, 0x68, 0x2f, 0x13, 0xe7, 0x92, 0x62, 0x21, 0x56, 0xe4, 0xd7, 0x60, 0x75, 0x23, 0x1d,
+ 0x20, 0xb1, 0x12, 0xda, 0xa4, 0x3d, 0xe1, 0xa2, 0x92, 0xb1, 0xb2, 0x52, 0x62, 0xef, 0xfb, 0x36,
+ 0xab, 0xe0, 0xcb, 0xd4, 0x3a, 0x61, 0xd0, 0xfc, 0x97, 0x99, 0xd0, 0x72, 0xd4, 0xa0, 0x72, 0x68,
+ 0xfa, 0xe6, 0xc0, 0x37, 0xc7, 0xd8, 0xbe, 0x2a, 0x94, 0xd4, 0xc6, 0xf9, 0xa6, 0xb2, 0x6e, 0x0a,
+ 0x78, 0xa8, 0x6c, 0xa3, 0x02, 0xde, 0x62, 0xb9, 0x18, 0x78, 0x9b, 0xe5, 0xf1, 0x1d, 0xdf, 0x9d,
+ 0x78, 0x52, 0xb0, 0x02, 0xd9, 0x3a, 0xcf, 0x12, 0xac, 0x88, 0xc8, 0x1e, 0x5a, 0x14, 0x56, 0xc2,
+ 0x3e, 0x6f, 0xa2, 0xfe, 0x1c, 0x7b, 0xe7, 0xac, 0x8c, 0xcd, 0xc0, 0x61, 0x14, 0x16, 0xab, 0xe0,
+ 0x93, 0xfd, 0xc9, 0xe8, 0x58, 0x60, 0x37, 0x01, 0x9f, 0xf4, 0xbc, 0xc1, 0xc0, 0x11, 0xac, 0x8a,
+ 0x63, 0x90, 0x30, 0xbe, 0x6c, 0x99, 0x2c, 0xad, 0xe9, 0x38, 0xde, 0x44, 0xb2, 0x5a, 0xe3, 0x97,
+ 0x39, 0xc8, 0x63, 0x74, 0x83, 0x6b, 0x67, 0x88, 0x76, 0x46, 0xaf, 0x1d, 0xfc, 0x1d, 0xad, 0xc0,
+ 0x6c, 0xbc, 0x02, 0xf9, 0xfb, 0x7a, 0xa6, 0x73, 0x0b, 0x58, 0x59, 0x14, 0x9c, 0x9c, 0x64, 0x0e,
+ 0xf9, 0x91, 0x3d, 0x12, 0xda, 0xd6, 0xd1, 0x6f, 0xc4, 0x05, 0xb8, 0x1f, 0x17, 0x28, 0x79, 0x42,
+ 0xbf, 0x71, 0xd5, 0x98, 0xb8, 0x2d, 0xb4, 0x24, 0xad, 0x81, 0x9c, 0x11, 0x82, 0x73, 0xac, 0x57,
+ 0x65, 0xae, 0xf5, 0xfa, 0x20, 0xb4, 0x5e, 0xa5, 0x05, 0x56, 0x3d, 0x35, 0x33, 0x69, 0xb9, 0x62,
+ 0xa3, 0x51, 0x5e, 0x9c, 0x3d, 0xb1, 0x99, 0x6c, 0x69, 0xad, 0x8d, 0x37, 0xba, 0xb2, 0x1a, 0x65,
+ 0x96, 0xc1, 0xd9, 0xa4, 0xe5, 0xaa, 0x6c, 0xde, 0x53, 0xdb, 0x12, 0x1e, 0xcb, 0xd1, 0x46, 0x38,
+ 0xb1, 0x6c, 0x8f, 0xe5, 0xd1, 0xf3, 0x3a, 0xdc, 0xda, 0x66, 0x85, 0xe6, 0xab, 0x89, 0x2d, 0xa9,
+ 0x35, 0x91, 0x9e, 0x12, 0x43, 0xea, 0x9b, 0x51, 0xda, 0x78, 0x2c, 0x2c, 0x96, 0x6d, 0x7e, 0x7d,
+ 0x8e, 0x99, 0xad, 0x41, 0xe5, 0xc9, 0xd8, 0xf1, 0x4c, 0xeb, 0x0a, 0x3b, 0xbb, 0x0c, 0x10, 0x47,
+ 0xd5, 0x8d, 0x5f, 0x36, 0xe3, 0xed, 0x1c, 0x7d, 0xd1, 0xc0, 0x9b, 0xf8, 0x7d, 0x41, 0x26, 0xa4,
+ 0x62, 0x68, 0x88, 0x7f, 0x07, 0x0a, 0xf8, 0x3c, 0x4c, 0xe3, 0xdc, 0x5f, 0x28, 0x96, 0x5b, 0x7f,
+ 0x6a, 0x8b, 0xe7, 0x86, 0x62, 0xe4, 0x77, 0x00, 0xcc, 0xbe, 0xb4, 0xcf, 0x04, 0x22, 0xf5, 0x62,
+ 0x4f, 0x60, 0xf8, 0x3b, 0x49, 0xf7, 0xe5, 0xea, 0x3c, 0x64, 0xc2, 0xaf, 0xe1, 0x06, 0x54, 0x71,
+ 0xe9, 0x8e, 0x0f, 0x7c, 0x5c, 0xed, 0xf5, 0x65, 0x62, 0x7c, 0x63, 0xb1, 0xe6, 0x3d, 0x8a, 0x18,
+ 0x8d, 0xa4, 0x10, 0xfe, 0x04, 0x96, 0x55, 0x4e, 0x4d, 0x0b, 0xad, 0x91, 0xd0, 0x37, 0x17, 0x13,
+ 0x7a, 0x10, 0x73, 0x1a, 0x29, 0x31, 0xb3, 0x69, 0xc9, 0xc2, 0x4b, 0xa7, 0x25, 0x5f, 0x85, 0x95,
+ 0x5e, 0x7a, 0x15, 0xa8, 0xad, 0x62, 0x0a, 0xcb, 0x9b, 0xb0, 0x6c, 0x07, 0x71, 0x56, 0x94, 0x72,
+ 0x24, 0x65, 0x23, 0x85, 0x6b, 0xfc, 0xfb, 0x22, 0xe4, 0x69, 0xe4, 0xa7, 0x73, 0x5c, 0x9b, 0x29,
+ 0x93, 0xfe, 0x60, 0xf1, 0xa9, 0x9e, 0x5a, 0xf1, 0x64, 0x41, 0x72, 0x09, 0x0b, 0xf2, 0x1d, 0x28,
+ 0x04, 0x9e, 0x2f, 0xc3, 0xe9, 0x5d, 0x50, 0x89, 0xba, 0x9e, 0x2f, 0x0d, 0xc5, 0xc8, 0xb7, 0xa1,
+ 0x74, 0x62, 0x3b, 0x12, 0x27, 0x45, 0x0d, 0xde, 0xeb, 0x8b, 0xc9, 0xd8, 0x26, 0x26, 0x23, 0x64,
+ 0xe6, 0xbb, 0x49, 0x65, 0x2b, 0x92, 0xa4, 0xf5, 0xc5, 0x24, 0xcd, 0xd3, 0xc1, 0xfb, 0xc0, 0xfa,
+ 0xde, 0x99, 0xf0, 0x8d, 0x44, 0x62, 0x52, 0x6d, 0xd2, 0x33, 0x78, 0xde, 0x80, 0xf2, 0xd0, 0xb6,
+ 0x04, 0xfa, 0x39, 0x64, 0x63, 0xca, 0x46, 0x04, 0xf3, 0xc7, 0x50, 0xa6, 0xf8, 0x00, 0xad, 0x62,
+ 0xe5, 0xa5, 0x07, 0x5f, 0x85, 0x2a, 0xa1, 0x00, 0x7c, 0x11, 0xbd, 0x7c, 0xdb, 0x96, 0x94, 0x9f,
+ 0x2e, 0x1b, 0x11, 0x8c, 0x0d, 0x26, 0x7d, 0x4f, 0x36, 0xb8, 0xaa, 0x1a, 0x3c, 0x8d, 0xe7, 0x6f,
+ 0xc3, 0x0d, 0xc2, 0x4d, 0x6d, 0x92, 0xb8, 0xd4, 0x50, 0xe8, 0xfc, 0x87, 0xe8, 0xb0, 0x8c, 0xcd,
+ 0x81, 0xd8, 0xb5, 0x47, 0xb6, 0xac, 0xd7, 0xee, 0x66, 0xee, 0x15, 0x8c, 0x18, 0xc1, 0x5f, 0x87,
+ 0x35, 0x4b, 0x9c, 0x98, 0x13, 0x47, 0xf6, 0xc4, 0x68, 0xec, 0x98, 0x52, 0x74, 0x2c, 0xd2, 0xd1,
+ 0x8a, 0x31, 0xfb, 0x80, 0xbf, 0x01, 0xd7, 0x34, 0xf2, 0x20, 0x3a, 0x55, 0xe8, 0x58, 0x94, 0xbe,
+ 0xab, 0x18, 0xf3, 0x1e, 0x35, 0xf7, 0xb4, 0x19, 0xc6, 0x0d, 0x14, 0xe3, 0xd4, 0xd0, 0x80, 0x06,
+ 0x52, 0xed, 0xc8, 0x8f, 0x4c, 0xc7, 0x11, 0xfe, 0x85, 0x0a, 0x72, 0x1f, 0x9b, 0xee, 0xb1, 0xe9,
+ 0xb2, 0x1c, 0xed, 0xb1, 0xa6, 0x23, 0x5c, 0xcb, 0xf4, 0xd5, 0x8e, 0xfc, 0x88, 0x36, 0xf4, 0x42,
+ 0xf3, 0x1e, 0xe4, 0x69, 0x48, 0x2b, 0x50, 0x50, 0x51, 0x12, 0x45, 0xcc, 0x3a, 0x42, 0x22, 0x8b,
+ 0xbc, 0x8b, 0xcb, 0x8f, 0x65, 0x1b, 0xff, 0xa0, 0x08, 0xe5, 0x70, 0xf0, 0xc2, 0x33, 0x84, 0x4c,
+ 0x7c, 0x86, 0x80, 0x6e, 0x5c, 0xf0, 0xd4, 0x0e, 0xec, 0x63, 0xed, 0x96, 0x96, 0x8d, 0x18, 0x81,
+ 0x9e, 0xd0, 0x73, 0xdb, 0x92, 0x43, 0x5a, 0x33, 0x05, 0x43, 0x01, 0xfc, 0x1e, 0xac, 0x5a, 0x38,
+ 0x0e, 0x6e, 0xdf, 0x99, 0x58, 0xa2, 0x87, 0xbb, 0xa8, 0x4a, 0x13, 0x4c, 0xa3, 0xf9, 0xc7, 0x00,
+ 0xd2, 0x1e, 0x89, 0x6d, 0xcf, 0x1f, 0x99, 0x52, 0xc7, 0x06, 0xdf, 0x78, 0x39, 0xad, 0x5e, 0xef,
+ 0x45, 0x02, 0x8c, 0x84, 0x30, 0x14, 0x8d, 0x6f, 0xd3, 0xa2, 0x4b, 0x9f, 0x49, 0xf4, 0x56, 0x24,
+ 0xc0, 0x48, 0x08, 0xe3, 0x3d, 0x28, 0x9d, 0x78, 0xfe, 0x68, 0xe2, 0x98, 0x7a, 0xcf, 0x7d, 0xff,
+ 0x25, 0xe5, 0x6e, 0x2b, 0x6e, 0xb2, 0x3d, 0xa1, 0xa8, 0x38, 0xc7, 0x5d, 0x59, 0x30, 0xc7, 0xdd,
+ 0xfc, 0x15, 0x80, 0xb8, 0x85, 0xfc, 0x26, 0xf0, 0x3d, 0xcf, 0x95, 0xc3, 0xd6, 0xf1, 0xb1, 0xbf,
+ 0x21, 0x4e, 0x3c, 0x5f, 0x6c, 0x99, 0xb8, 0xbd, 0xde, 0x80, 0xb5, 0x08, 0xdf, 0x3a, 0x91, 0xc2,
+ 0x47, 0x34, 0xa9, 0x40, 0x77, 0xe8, 0xf9, 0x52, 0xf9, 0x78, 0xf4, 0xf3, 0x49, 0x97, 0xe5, 0x70,
+ 0x4b, 0xef, 0x74, 0x0f, 0x58, 0xbe, 0x79, 0x0f, 0x20, 0x1e, 0x5a, 0x8a, 0x85, 0xe8, 0xd7, 0x9b,
+ 0x0f, 0x75, 0x64, 0x44, 0xd0, 0xc3, 0xb7, 0x59, 0xa6, 0xf9, 0x8b, 0x0c, 0x54, 0x13, 0x5d, 0x4a,
+ 0xc7, 0xcc, 0x9b, 0xde, 0xc4, 0x95, 0x2a, 0x48, 0xa7, 0x9f, 0x4f, 0x4d, 0x67, 0x82, 0x9b, 0xfb,
+ 0x1a, 0xd4, 0x08, 0xde, 0xb2, 0x03, 0x69, 0xbb, 0x7d, 0xc9, 0x72, 0x11, 0x89, 0x72, 0x0c, 0xf2,
+ 0x11, 0xc9, 0xbe, 0xa7, 0x51, 0x05, 0xce, 0x60, 0xf9, 0x50, 0xf8, 0x7d, 0x11, 0x12, 0x91, 0x33,
+ 0xac, 0x31, 0x11, 0x99, 0x72, 0x86, 0x4d, 0x39, 0xec, 0x4e, 0x46, 0xac, 0x8c, 0x4e, 0x25, 0x02,
+ 0xad, 0x33, 0xe1, 0xa3, 0x2f, 0x53, 0xc1, 0xf7, 0x20, 0x02, 0x57, 0x83, 0xe9, 0x32, 0x08, 0xa9,
+ 0xf7, 0x6c, 0x97, 0x55, 0x23, 0xc0, 0x3c, 0x67, 0xcb, 0xd8, 0x7e, 0x0a, 0x1d, 0x58, 0xad, 0xf1,
+ 0x5f, 0x73, 0x90, 0x47, 0xbb, 0x8e, 0xb1, 0x6e, 0xd2, 0x08, 0xa9, 0xb5, 0x92, 0x44, 0x7d, 0xb6,
+ 0xdd, 0x08, 0x65, 0x27, 0x77, 0xa3, 0xf7, 0xa0, 0xda, 0x9f, 0x04, 0xd2, 0x1b, 0xd1, 0x56, 0xac,
+ 0x4f, 0xbb, 0x6e, 0xce, 0x64, 0x8d, 0x68, 0x38, 0x8d, 0x24, 0x29, 0x7f, 0x07, 0x8a, 0x27, 0x4a,
+ 0xeb, 0x55, 0xde, 0xe8, 0x0b, 0x97, 0xec, 0xd6, 0x5a, 0xb3, 0x35, 0x31, 0xf6, 0xcb, 0x9e, 0x59,
+ 0xb1, 0x49, 0x94, 0xde, 0x75, 0x8b, 0xd1, 0xae, 0xfb, 0x2b, 0xb0, 0x22, 0x70, 0xc0, 0x0f, 0x1d,
+ 0xb3, 0x2f, 0x46, 0xc2, 0x0d, 0x97, 0xd9, 0xdb, 0x2f, 0xd1, 0x63, 0x9a, 0x31, 0xea, 0xf6, 0x94,
+ 0x2c, 0xb4, 0x3c, 0xae, 0x87, 0x9b, 0x7f, 0x18, 0xd8, 0x97, 0x8d, 0x18, 0xd1, 0xfc, 0xb2, 0xb6,
+ 0x97, 0x25, 0xc8, 0xb5, 0x82, 0xbe, 0xce, 0x80, 0x88, 0xa0, 0xaf, 0xc2, 0xab, 0x4d, 0x1a, 0x0e,
+ 0x96, 0x6d, 0xbe, 0x09, 0x95, 0xe8, 0x0d, 0xa8, 0x3c, 0xfb, 0x9e, 0xec, 0x8e, 0x45, 0xdf, 0x3e,
+ 0xb1, 0x85, 0xa5, 0xf4, 0xb3, 0x2b, 0x4d, 0x5f, 0xaa, 0x24, 0x62, 0xdb, 0xb5, 0x58, 0xb6, 0xf1,
+ 0x3b, 0x65, 0x28, 0xaa, 0xcd, 0x57, 0x77, 0xb8, 0x12, 0x75, 0xf8, 0xbb, 0x50, 0xf6, 0xc6, 0xc2,
+ 0x37, 0xa5, 0xe7, 0xeb, 0xcc, 0xcd, 0x3b, 0x2f, 0xb3, 0x99, 0xaf, 0x1f, 0x68, 0x66, 0x23, 0x12,
+ 0x33, 0xad, 0x4d, 0xd9, 0x59, 0x6d, 0xba, 0x0f, 0x2c, 0xdc, 0xb7, 0x0f, 0x7d, 0xe4, 0x93, 0x17,
+ 0x3a, 0x0e, 0x9f, 0xc1, 0xf3, 0x1e, 0x54, 0xfa, 0x9e, 0x6b, 0xd9, 0x51, 0x16, 0x67, 0xe5, 0xe1,
+ 0xd7, 0x5f, 0xaa, 0x85, 0x9b, 0x21, 0xb7, 0x11, 0x0b, 0xe2, 0xaf, 0x43, 0xe1, 0x0c, 0xd5, 0x8c,
+ 0xf4, 0xe9, 0x72, 0x25, 0x54, 0x44, 0xfc, 0x13, 0xa8, 0xfe, 0x60, 0x62, 0xf7, 0x4f, 0x0f, 0x92,
+ 0x59, 0xc2, 0xf7, 0x5e, 0xaa, 0x15, 0xdf, 0x8d, 0xf9, 0x8d, 0xa4, 0xb0, 0x84, 0x6a, 0x97, 0xfe,
+ 0x18, 0xaa, 0x5d, 0x9e, 0x55, 0x6d, 0x03, 0x6a, 0xae, 0x08, 0xa4, 0xb0, 0xb6, 0xb5, 0xaf, 0x06,
+ 0x9f, 0xc1, 0x57, 0x4b, 0x8b, 0x68, 0x7e, 0x09, 0xca, 0xe1, 0x84, 0xf3, 0x22, 0x64, 0xf7, 0x31,
+ 0x28, 0x2a, 0x42, 0xf6, 0xc0, 0x57, 0xda, 0xd6, 0x42, 0x6d, 0x6b, 0xfe, 0x61, 0x06, 0x2a, 0xd1,
+ 0xa0, 0xa7, 0x2d, 0x67, 0xfb, 0x07, 0x13, 0xd3, 0x61, 0x19, 0x0a, 0x97, 0x3d, 0xa9, 0x20, 0x32,
+ 0xd6, 0x8f, 0xe8, 0xb0, 0xde, 0x67, 0x39, 0x72, 0x11, 0x44, 0x10, 0xb0, 0x3c, 0xe7, 0xb0, 0xa2,
+ 0xd1, 0x07, 0xbe, 0x22, 0x2d, 0xa0, 0xe1, 0xc3, 0xa7, 0x21, 0xa2, 0xa8, 0x3c, 0x8a, 0x53, 0xa1,
+ 0x0c, 0xe4, 0xbe, 0x27, 0x09, 0x28, 0x63, 0xa3, 0x3a, 0x2e, 0xab, 0xe0, 0x3b, 0xf7, 0x3d, 0xd9,
+ 0x41, 0x93, 0x18, 0x85, 0x67, 0xd5, 0xf0, 0xf5, 0x04, 0x91, 0x45, 0x6c, 0x39, 0x4e, 0xc7, 0x65,
+ 0x35, 0xfd, 0x40, 0x41, 0x2b, 0x28, 0xb1, 0x7d, 0x6e, 0xf6, 0x91, 0x7d, 0x15, 0x2d, 0x2c, 0xf2,
+ 0x68, 0x98, 0xe1, 0x92, 0x6c, 0x9f, 0xdb, 0x81, 0x0c, 0xd8, 0x5a, 0xf3, 0xdf, 0x65, 0xa0, 0x9a,
+ 0x98, 0x60, 0x0c, 0xff, 0x88, 0x10, 0xb7, 0x32, 0x15, 0x0d, 0x7e, 0x8c, 0xc3, 0xe8, 0x5b, 0xe1,
+ 0x36, 0xd5, 0xf3, 0xf0, 0x67, 0x16, 0xdf, 0xd7, 0xf3, 0x46, 0x9e, 0xef, 0x7b, 0xcf, 0x95, 0xeb,
+ 0xb3, 0x6b, 0x06, 0xf2, 0x99, 0x10, 0xa7, 0x2c, 0x8f, 0x5d, 0xdd, 0x9c, 0xf8, 0xbe, 0x70, 0x15,
+ 0xa2, 0x40, 0x8d, 0x13, 0xe7, 0x0a, 0x2a, 0xa2, 0x50, 0x24, 0xa6, 0x7d, 0x90, 0x95, 0xd0, 0x10,
+ 0x68, 0x6a, 0x85, 0x29, 0x23, 0x01, 0x92, 0x2b, 0xb0, 0x82, 0x9b, 0x8a, 0xca, 0x50, 0x1c, 0x9c,
+ 0x6c, 0x99, 0x17, 0x41, 0x6b, 0xe0, 0x31, 0x98, 0x46, 0xee, 0x7b, 0xcf, 0x59, 0xb5, 0x31, 0x01,
+ 0x88, 0x63, 0x32, 0x8c, 0x45, 0x51, 0x21, 0xa2, 0x33, 0x04, 0x0d, 0xf1, 0x03, 0x00, 0xfc, 0x45,
+ 0x94, 0x61, 0x40, 0xfa, 0x12, 0x8e, 0x32, 0xf1, 0x19, 0x09, 0x11, 0x8d, 0xbf, 0x00, 0x95, 0xe8,
+ 0x01, 0xaf, 0x43, 0x89, 0x5c, 0xda, 0xe8, 0xb5, 0x21, 0x88, 0xfe, 0x99, 0xed, 0x5a, 0xe2, 0x9c,
+ 0xec, 0x4a, 0xc1, 0x50, 0x00, 0xb6, 0x72, 0x68, 0x5b, 0x96, 0x70, 0xc3, 0x93, 0x1e, 0x05, 0xcd,
+ 0x3b, 0x8f, 0xcf, 0xcf, 0x3d, 0x8f, 0x6f, 0xfc, 0x2a, 0x54, 0x13, 0x41, 0xe3, 0xa5, 0xdd, 0x4e,
+ 0x34, 0x2c, 0x9b, 0x6e, 0xd8, 0x6d, 0xa8, 0x84, 0x35, 0x20, 0x01, 0xed, 0x6d, 0x15, 0x23, 0x46,
+ 0x34, 0xfe, 0x69, 0x16, 0x3d, 0x59, 0xec, 0xda, 0x74, 0xa0, 0xb7, 0x0d, 0xc5, 0x40, 0x9a, 0x72,
+ 0x12, 0x16, 0x33, 0x2c, 0xb8, 0x40, 0xbb, 0xc4, 0xb3, 0xb3, 0x64, 0x68, 0x6e, 0xfe, 0x01, 0xe4,
+ 0xa4, 0x39, 0xd0, 0x89, 0xd2, 0xaf, 0x2c, 0x26, 0xa4, 0x67, 0x0e, 0x76, 0x96, 0x0c, 0xe4, 0xe3,
+ 0xbb, 0x50, 0xee, 0xeb, 0xdc, 0x96, 0x36, 0x8a, 0x0b, 0xc6, 0x62, 0x61, 0x46, 0x6c, 0x67, 0xc9,
+ 0x88, 0x24, 0xf0, 0xef, 0x40, 0x1e, 0xbd, 0x4b, 0x5d, 0xf3, 0xb1, 0x60, 0x8c, 0x89, 0xcb, 0x65,
+ 0x67, 0xc9, 0x20, 0xce, 0x8d, 0x12, 0x14, 0xc8, 0x06, 0x37, 0xea, 0x50, 0x54, 0x7d, 0x9d, 0x1e,
+ 0xb9, 0xc6, 0x2d, 0xc8, 0xf5, 0xcc, 0x01, 0x7a, 0xf8, 0xb6, 0x15, 0xe8, 0x54, 0x09, 0xfe, 0x6c,
+ 0xbc, 0x12, 0xe7, 0xe9, 0x92, 0x29, 0xe0, 0x4c, 0x2a, 0x05, 0xdc, 0x28, 0x42, 0x1e, 0xdf, 0xd8,
+ 0xb8, 0x7d, 0x55, 0xb4, 0xd0, 0xf8, 0x47, 0x39, 0x0c, 0x2c, 0xa4, 0x38, 0x9f, 0x9b, 0xde, 0xfe,
+ 0x08, 0x2a, 0x63, 0xdf, 0xeb, 0x8b, 0x20, 0xf0, 0x7c, 0xed, 0x1c, 0xbd, 0xfe, 0xe2, 0xa3, 0xe7,
+ 0xf5, 0xc3, 0x90, 0xc7, 0x88, 0xd9, 0x9b, 0xff, 0x3a, 0x0b, 0x95, 0xe8, 0x81, 0x8a, 0x67, 0xa4,
+ 0x38, 0x57, 0xa9, 0xcc, 0x3d, 0xe1, 0x8f, 0x4c, 0xdb, 0x52, 0xd6, 0x63, 0x73, 0x68, 0x86, 0x4e,
+ 0xee, 0xc7, 0xde, 0x44, 0x4e, 0x8e, 0x85, 0x4a, 0x61, 0x3d, 0xb5, 0x47, 0xc2, 0x63, 0x79, 0x3a,
+ 0x3c, 0x42, 0xc5, 0xee, 0x3b, 0xde, 0xc4, 0x62, 0x05, 0x84, 0x1f, 0xd1, 0xf6, 0xb6, 0x67, 0x8e,
+ 0x03, 0x65, 0x33, 0xf7, 0x6c, 0xdf, 0x63, 0x25, 0x64, 0xda, 0xb6, 0x07, 0x23, 0x93, 0x95, 0x51,
+ 0x58, 0xef, 0xb9, 0x2d, 0xd1, 0x08, 0x57, 0xd0, 0x4d, 0x3d, 0x18, 0x0b, 0xb7, 0x2b, 0x7d, 0x21,
+ 0xe4, 0x9e, 0x39, 0x56, 0x39, 0x4d, 0x43, 0x58, 0x96, 0x2d, 0x95, 0xfd, 0xdc, 0x36, 0xfb, 0xe2,
+ 0xd8, 0xf3, 0x4e, 0xd9, 0x32, 0x1a, 0x9a, 0x8e, 0x1b, 0x48, 0x73, 0xe0, 0x9b, 0x23, 0x65, 0x43,
+ 0x7b, 0xc2, 0x11, 0x04, 0xad, 0xd0, 0xbb, 0x6d, 0x39, 0x9c, 0x1c, 0x3f, 0xc2, 0xb8, 0x6f, 0x55,
+ 0x9d, 0x33, 0x59, 0x62, 0x2c, 0xd0, 0x86, 0x2e, 0x43, 0x79, 0xc3, 0x76, 0xec, 0x63, 0xdb, 0xb1,
+ 0xd9, 0x1a, 0x92, 0xb6, 0xcf, 0xfb, 0xa6, 0x63, 0x5b, 0xbe, 0xf9, 0x9c, 0x71, 0x6c, 0xdc, 0x63,
+ 0xdf, 0x3b, 0xb5, 0xd9, 0x35, 0x24, 0xa4, 0x30, 0xf0, 0xcc, 0xfe, 0x21, 0xbb, 0x4e, 0x67, 0x65,
+ 0xa7, 0x42, 0xf6, 0x87, 0x27, 0xe6, 0x31, 0xbb, 0x11, 0xa7, 0xf4, 0x6e, 0x36, 0xd6, 0x60, 0x75,
+ 0xea, 0x54, 0xbe, 0x51, 0xd2, 0xd1, 0x67, 0xa3, 0x06, 0xd5, 0xc4, 0x71, 0x69, 0xe3, 0x55, 0x28,
+ 0x87, 0x87, 0xa9, 0x18, 0xa5, 0xdb, 0x81, 0x4a, 0x03, 0x6b, 0x25, 0x89, 0xe0, 0xc6, 0x7f, 0xca,
+ 0x40, 0x51, 0x9d, 0x64, 0xf3, 0x8d, 0xa8, 0xf2, 0x24, 0xb3, 0xc0, 0xe9, 0xa5, 0x62, 0xd2, 0x67,
+ 0xbf, 0x51, 0xf9, 0xc9, 0x75, 0x28, 0x38, 0x14, 0x8e, 0x6b, 0xf3, 0x45, 0x40, 0xc2, 0xda, 0xe4,
+ 0x52, 0xd6, 0xe6, 0x36, 0x54, 0xcc, 0x89, 0xf4, 0xe8, 0x90, 0x4e, 0x9f, 0x60, 0xc4, 0x88, 0x66,
+ 0x2b, 0x3a, 0x8d, 0x0e, 0x13, 0x93, 0xe4, 0x33, 0xf6, 0x7c, 0x21, 0x54, 0xd2, 0x91, 0x62, 0xed,
+ 0x2c, 0xed, 0x24, 0xde, 0x68, 0x6c, 0xf6, 0x25, 0x21, 0x68, 0x8f, 0x45, 0x53, 0xcb, 0xf2, 0xb8,
+ 0x06, 0x36, 0x87, 0xa6, 0x6c, 0x9e, 0x40, 0xf9, 0xd0, 0x0b, 0xa6, 0x77, 0xec, 0x12, 0xe4, 0x7a,
+ 0xde, 0x58, 0xf9, 0x9f, 0x1b, 0x9e, 0x24, 0xff, 0x53, 0x6d, 0xd0, 0x27, 0x52, 0xa9, 0x9c, 0x61,
+ 0x0f, 0x86, 0x52, 0xc5, 0xe9, 0x1d, 0xd7, 0x15, 0x3e, 0x2b, 0xe0, 0x0c, 0x1b, 0x62, 0x8c, 0x3e,
+ 0x2f, 0x2b, 0xe2, 0x9c, 0x12, 0x7e, 0xdb, 0xf6, 0x03, 0xc9, 0x4a, 0xcd, 0x0e, 0xee, 0xb5, 0xf6,
+ 0x80, 0xb6, 0x48, 0xfa, 0x41, 0xa2, 0x96, 0xb0, 0x89, 0x04, 0x6e, 0x0a, 0x17, 0x35, 0x90, 0x62,
+ 0x2b, 0x15, 0x18, 0xd2, 0x0b, 0xb2, 0xb8, 0xbf, 0x11, 0xfc, 0xd1, 0x24, 0x90, 0xf6, 0xc9, 0x05,
+ 0xcb, 0x35, 0x9f, 0x41, 0x2d, 0x55, 0xe4, 0xc4, 0xaf, 0x03, 0x4b, 0x21, 0xb0, 0xe9, 0x4b, 0xfc,
+ 0x16, 0x5c, 0x4b, 0x61, 0xf7, 0x6c, 0xcb, 0xa2, 0x4c, 0xf0, 0xf4, 0x83, 0xb0, 0x83, 0x1b, 0x15,
+ 0x28, 0xf5, 0xd5, 0x1c, 0x36, 0x0f, 0xa1, 0x46, 0x93, 0xba, 0x27, 0xa4, 0x79, 0xe0, 0x3a, 0x17,
+ 0x7f, 0xec, 0x4a, 0xb4, 0xe6, 0x57, 0x75, 0xf8, 0x85, 0xd6, 0xe4, 0xc4, 0xf7, 0x46, 0x24, 0xab,
+ 0x60, 0xd0, 0x6f, 0x94, 0x2e, 0x3d, 0xad, 0x19, 0x59, 0xe9, 0x35, 0x7f, 0x59, 0x81, 0x52, 0xab,
+ 0xdf, 0xc7, 0x80, 0x71, 0xe6, 0xcd, 0xef, 0x40, 0xb1, 0xef, 0xb9, 0x27, 0xf6, 0x40, 0x5b, 0xeb,
+ 0x69, 0xbf, 0x51, 0xf3, 0xa1, 0x3a, 0x9e, 0xd8, 0x03, 0x43, 0x13, 0x23, 0x9b, 0xde, 0x6d, 0x0a,
+ 0x57, 0xb2, 0x29, 0x93, 0x1b, 0x6d, 0x2e, 0x0f, 0x20, 0x6f, 0xbb, 0x27, 0x9e, 0x2e, 0x1b, 0xfd,
+ 0xfc, 0x25, 0x4c, 0x54, 0x3b, 0x49, 0x84, 0x8d, 0xff, 0x9c, 0x81, 0xa2, 0x7a, 0x35, 0x7f, 0x15,
+ 0x56, 0x84, 0x8b, 0x4b, 0x2d, 0x34, 0xf4, 0x7a, 0x8d, 0x4d, 0x61, 0xd1, 0xa5, 0xd5, 0x18, 0x71,
+ 0x3c, 0x19, 0xe8, 0xcc, 0x4c, 0x12, 0xc5, 0xdf, 0x83, 0x5b, 0x0a, 0x3c, 0xf4, 0x85, 0x2f, 0x1c,
+ 0x61, 0x06, 0x62, 0x73, 0x68, 0xba, 0xae, 0x70, 0xf4, 0xb6, 0x7f, 0xd9, 0x63, 0xde, 0x84, 0x65,
+ 0xf5, 0xa8, 0x3b, 0x36, 0xfb, 0x22, 0xd0, 0x6b, 0x29, 0x85, 0xe3, 0x5f, 0x83, 0x02, 0x55, 0xd5,
+ 0xd6, 0xad, 0xab, 0xa7, 0x52, 0x51, 0x35, 0xbc, 0x68, 0x5f, 0x6a, 0x01, 0xa8, 0x61, 0xc2, 0x90,
+ 0x4c, 0xdb, 0x86, 0x2f, 0x5e, 0x39, 0xae, 0x14, 0x1d, 0x26, 0x98, 0xb0, 0x7d, 0x96, 0x70, 0x04,
+ 0x95, 0x3f, 0xe2, 0xbe, 0x99, 0xa5, 0x73, 0x97, 0x14, 0xae, 0xf1, 0x07, 0x79, 0xc8, 0xe3, 0x08,
+ 0x23, 0xf1, 0xd0, 0x1b, 0x89, 0x28, 0xfb, 0xac, 0x1c, 0x91, 0x14, 0x0e, 0x1d, 0x1f, 0x53, 0x15,
+ 0x00, 0x44, 0x64, 0xca, 0xb4, 0x4c, 0xa3, 0x91, 0x72, 0xec, 0x7b, 0x27, 0xb6, 0x13, 0x53, 0x6a,
+ 0x17, 0x69, 0x0a, 0xcd, 0xbf, 0x0e, 0x37, 0x47, 0xa6, 0x7f, 0x2a, 0x24, 0xad, 0xee, 0x67, 0x9e,
+ 0x7f, 0x1a, 0xe0, 0xc8, 0x75, 0x2c, 0x9d, 0xb6, 0xbc, 0xe4, 0x29, 0x7f, 0x1d, 0xd6, 0x9e, 0x87,
+ 0x60, 0xf4, 0x0e, 0x95, 0x38, 0x9c, 0x7d, 0x80, 0xc6, 0xd8, 0x12, 0x67, 0x36, 0xc9, 0x2d, 0xab,
+ 0xda, 0xda, 0x10, 0x46, 0x55, 0x32, 0xd5, 0x40, 0x76, 0xf5, 0x9b, 0xf5, 0xf9, 0x53, 0x1a, 0x8b,
+ 0x76, 0x53, 0xd5, 0x1c, 0x05, 0x1d, 0x8b, 0xf2, 0xae, 0x15, 0x23, 0x46, 0xa0, 0xa2, 0xd1, 0x2b,
+ 0x9f, 0x2a, 0x93, 0x5b, 0x53, 0x01, 0x6a, 0x02, 0x85, 0x14, 0x52, 0xf4, 0x87, 0xe1, 0x4b, 0x54,
+ 0x52, 0x34, 0x89, 0xe2, 0x77, 0x00, 0x06, 0xa6, 0x14, 0xcf, 0xcd, 0x8b, 0x27, 0xbe, 0x53, 0x17,
+ 0xea, 0x20, 0x25, 0xc6, 0x60, 0x88, 0xeb, 0x78, 0x7d, 0xd3, 0xe9, 0x4a, 0xcf, 0x37, 0x07, 0xe2,
+ 0xd0, 0x94, 0xc3, 0xfa, 0x40, 0x85, 0xb8, 0xd3, 0x78, 0xec, 0xb1, 0xb4, 0x47, 0xe2, 0x13, 0xcf,
+ 0x15, 0xf5, 0xa1, 0xea, 0x71, 0x08, 0x63, 0x4b, 0x4c, 0xd7, 0x74, 0x2e, 0xa4, 0xdd, 0xc7, 0xbe,
+ 0xd8, 0xaa, 0x25, 0x09, 0x14, 0x25, 0x15, 0x84, 0xc4, 0x71, 0xec, 0x58, 0xf5, 0xef, 0xab, 0xbe,
+ 0x46, 0x08, 0x9c, 0x5d, 0x21, 0x87, 0xc2, 0x17, 0x93, 0x51, 0xcb, 0xb2, 0x7c, 0x11, 0x04, 0xf5,
+ 0x53, 0x35, 0xbb, 0x53, 0xe8, 0xc6, 0x37, 0xe9, 0x98, 0x6b, 0xd8, 0x7c, 0x0b, 0x6a, 0xbb, 0xd8,
+ 0xc2, 0xd6, 0xd8, 0xee, 0xf6, 0xbd, 0xb1, 0x40, 0x83, 0x4e, 0x09, 0x63, 0x4a, 0x2f, 0x54, 0xa1,
+ 0xf4, 0x51, 0xe0, 0xb9, 0xad, 0xc3, 0x8e, 0xda, 0x62, 0xb6, 0x27, 0x8e, 0xc3, 0xb2, 0xcd, 0x03,
+ 0x80, 0x58, 0xb3, 0x71, 0xbb, 0x68, 0xd1, 0x99, 0x12, 0x5b, 0x52, 0xc9, 0x2c, 0xd7, 0xb2, 0xdd,
+ 0xc1, 0x96, 0x56, 0x66, 0x96, 0x41, 0x24, 0x25, 0x29, 0x84, 0x15, 0x21, 0xc9, 0x9d, 0x21, 0x48,
+ 0x58, 0x2c, 0xd7, 0xfc, 0x3f, 0x19, 0xa8, 0x26, 0x4a, 0x28, 0xfe, 0x04, 0xcb, 0x3e, 0x70, 0xb3,
+ 0x47, 0x77, 0x01, 0xe7, 0x4d, 0x29, 0x7a, 0x04, 0xe3, 0xac, 0xea, 0x0a, 0x0f, 0x7c, 0xaa, 0x52,
+ 0x12, 0x09, 0xcc, 0x67, 0x2a, 0xf9, 0x68, 0x3e, 0xd4, 0x79, 0x9d, 0x2a, 0x94, 0x9e, 0xb8, 0xa7,
+ 0xae, 0xf7, 0xdc, 0x55, 0xfb, 0x34, 0xd5, 0xf1, 0xa4, 0x4e, 0x24, 0xc3, 0x52, 0x9b, 0x5c, 0xf3,
+ 0x5f, 0xe4, 0xa7, 0x4a, 0xde, 0xda, 0x50, 0x54, 0xc1, 0x04, 0xf9, 0xb9, 0xb3, 0x35, 0x4a, 0x49,
+ 0x62, 0x7d, 0xfa, 0x95, 0x40, 0x19, 0x9a, 0x19, 0xbd, 0xfc, 0xa8, 0x20, 0x34, 0x3b, 0xf7, 0x94,
+ 0x2e, 0x25, 0x28, 0xb4, 0xcd, 0xa9, 0x9a, 0xe8, 0x48, 0x42, 0xe3, 0xaf, 0x65, 0xe0, 0xfa, 0x3c,
+ 0x92, 0x64, 0xe5, 0x78, 0x26, 0x5d, 0x39, 0xde, 0x9d, 0xaa, 0xc4, 0xce, 0x52, 0x6f, 0x1e, 0xbc,
+ 0x64, 0x23, 0xd2, 0x75, 0xd9, 0xcd, 0xdf, 0xcb, 0xc0, 0xda, 0x4c, 0x9f, 0x13, 0x7e, 0x0c, 0x40,
+ 0x51, 0x69, 0x96, 0x2a, 0x94, 0x8a, 0x4a, 0x57, 0xd4, 0xd1, 0x03, 0xed, 0xf0, 0x81, 0xaa, 0x05,
+ 0xd0, 0xb5, 0xe7, 0xca, 0x89, 0xc6, 0x59, 0xc3, 0x0d, 0x64, 0x20, 0x54, 0x9a, 0x56, 0x39, 0x5b,
+ 0x1a, 0x53, 0x54, 0x8e, 0xae, 0x3a, 0x1f, 0x61, 0x25, 0x2a, 0xc0, 0x9a, 0x8c, 0x1d, 0xbb, 0x8f,
+ 0x60, 0x99, 0x37, 0xe0, 0xa6, 0xba, 0x80, 0xa0, 0x83, 0xca, 0x93, 0xde, 0xd0, 0xa6, 0xc5, 0xc1,
+ 0x2a, 0xf8, 0x9e, 0xc3, 0xc9, 0xb1, 0x63, 0x07, 0x43, 0x06, 0x4d, 0x03, 0xae, 0xcd, 0xe9, 0x20,
+ 0x35, 0xf9, 0xa9, 0x6e, 0xfe, 0x0a, 0xc0, 0xd6, 0xd3, 0xb0, 0xd1, 0x2c, 0xc3, 0x39, 0xac, 0x6c,
+ 0x3d, 0x4d, 0x4a, 0xd7, 0x8b, 0xe7, 0x29, 0x5a, 0xaf, 0x80, 0xe5, 0x9a, 0xbf, 0x96, 0x09, 0x2b,
+ 0x24, 0x1a, 0x7f, 0x1e, 0x6a, 0xaa, 0xc1, 0x87, 0xe6, 0x85, 0xe3, 0x99, 0x16, 0x6f, 0xc3, 0x4a,
+ 0x10, 0x5d, 0x91, 0x49, 0x6c, 0x58, 0xd3, 0x8e, 0x40, 0x37, 0x45, 0x64, 0x4c, 0x31, 0x85, 0x81,
+ 0x52, 0x36, 0x3e, 0x56, 0xe1, 0x14, 0xf2, 0x99, 0xb4, 0xe4, 0x96, 0x29, 0x88, 0x33, 0x9b, 0x5f,
+ 0x83, 0xb5, 0x6e, 0x6c, 0xdc, 0x95, 0x47, 0x8d, 0xca, 0xa1, 0x76, 0x86, 0xad, 0x50, 0x39, 0x34,
+ 0xd8, 0xfc, 0xc7, 0x25, 0x80, 0xf8, 0x08, 0x69, 0xce, 0x9a, 0x9f, 0x57, 0x11, 0x31, 0x73, 0xa0,
+ 0x9b, 0x7b, 0xe9, 0x03, 0xdd, 0xf7, 0x22, 0xc7, 0x5e, 0xa5, 0x97, 0xa7, 0xcb, 0xc2, 0xe3, 0x36,
+ 0x4d, 0xbb, 0xf3, 0xa9, 0x82, 0xa1, 0xc2, 0x74, 0xc1, 0xd0, 0xdd, 0xd9, 0xea, 0xc2, 0x29, 0x63,
+ 0x14, 0xe7, 0x2d, 0x4a, 0xa9, 0xbc, 0x45, 0x03, 0xca, 0xbe, 0x30, 0x2d, 0xcf, 0x75, 0x2e, 0xc2,
+ 0x73, 0xc3, 0x10, 0xe6, 0x6f, 0x41, 0x41, 0xd2, 0x2d, 0x9f, 0x32, 0xad, 0x9d, 0x17, 0x4c, 0x9c,
+ 0xa2, 0x45, 0xcb, 0x66, 0x07, 0xba, 0x24, 0x50, 0xed, 0x9a, 0x65, 0x23, 0x81, 0xe1, 0xeb, 0xc0,
+ 0x6d, 0x0c, 0xe2, 0x1c, 0x47, 0x58, 0x1b, 0x17, 0x5b, 0xea, 0x38, 0x8f, 0xf6, 0xf5, 0xb2, 0x31,
+ 0xe7, 0x49, 0x38, 0xff, 0xcb, 0xf1, 0xfc, 0x53, 0x93, 0xcf, 0xec, 0x00, 0x7b, 0x5a, 0x23, 0xf7,
+ 0x25, 0x82, 0xd1, 0x73, 0x08, 0x17, 0xac, 0x1a, 0x4b, 0xd2, 0xde, 0xf8, 0x4c, 0xfc, 0x92, 0xa7,
+ 0xe1, 0xf0, 0xaa, 0xc4, 0xcd, 0x2a, 0x09, 0x8d, 0x11, 0x64, 0xc9, 0xfb, 0x9e, 0xbb, 0x8f, 0x1a,
+ 0xc1, 0xb4, 0x25, 0xd7, 0x30, 0xf6, 0x77, 0xec, 0x4c, 0x7c, 0xd3, 0xa1, 0xa7, 0x6b, 0xca, 0x92,
+ 0xc7, 0x98, 0xe6, 0xbf, 0xc9, 0x46, 0xc1, 0x53, 0x05, 0x0a, 0xc7, 0x66, 0x60, 0xf7, 0xd5, 0xee,
+ 0xa6, 0x9d, 0x1e, 0xb5, 0xbb, 0x49, 0xcf, 0xf2, 0x58, 0x16, 0xe3, 0xa0, 0x40, 0xe8, 0xe3, 0x9c,
+ 0xf8, 0x4e, 0x15, 0xcb, 0xa3, 0x09, 0x08, 0x35, 0x49, 0xd5, 0x0c, 0x11, 0x2b, 0x25, 0xe7, 0xac,
+ 0xa8, 0x1a, 0x93, 0xc2, 0x6c, 0xda, 0x62, 0x58, 0x19, 0x69, 0x5c, 0x4f, 0x0a, 0x95, 0x9a, 0x24,
+ 0xbd, 0x67, 0x80, 0x62, 0xc2, 0x4b, 0x02, 0xac, 0x8a, 0x81, 0x49, 0x28, 0x54, 0xe5, 0x13, 0x03,
+ 0x0a, 0xdb, 0x96, 0x71, 0xdd, 0xa7, 0x1f, 0xb0, 0x1a, 0xb6, 0x28, 0xbe, 0xaa, 0xc5, 0x56, 0x50,
+ 0xaa, 0x49, 0x95, 0x2c, 0xab, 0xf8, 0xf3, 0x8c, 0xea, 0x5b, 0x18, 0xbe, 0xd5, 0x42, 0xbb, 0xb4,
+ 0x86, 0x2d, 0x8b, 0x1c, 0x1d, 0xc6, 0x31, 0xee, 0x1a, 0x9b, 0x18, 0x04, 0xd9, 0x63, 0xd3, 0x95,
+ 0xec, 0x1a, 0x76, 0x75, 0x6c, 0x9d, 0xb0, 0xeb, 0xc8, 0xd2, 0x1f, 0x9a, 0x92, 0xdd, 0x40, 0x1a,
+ 0xfc, 0xb5, 0x25, 0x7c, 0xd4, 0x14, 0x76, 0x13, 0x69, 0xa4, 0x39, 0x60, 0xb7, 0x9a, 0xbf, 0x19,
+ 0xd7, 0x43, 0xbf, 0x11, 0x85, 0x27, 0x8b, 0x2c, 0x1f, 0x0c, 0x60, 0xe6, 0xad, 0xe5, 0x36, 0xac,
+ 0xf9, 0xe2, 0x07, 0x13, 0x3b, 0x75, 0x4b, 0x20, 0x77, 0x75, 0x19, 0xca, 0x2c, 0x47, 0xf3, 0x0c,
+ 0xd6, 0x42, 0xe0, 0x99, 0x2d, 0x87, 0x94, 0x47, 0xe2, 0x6f, 0x25, 0xae, 0x31, 0x64, 0xe6, 0x5e,
+ 0xff, 0x8a, 0x44, 0xc6, 0xd7, 0x16, 0xa2, 0x73, 0x82, 0xec, 0x02, 0xe7, 0x04, 0xcd, 0xff, 0x9d,
+ 0x3c, 0x78, 0x56, 0x01, 0x9b, 0x15, 0x05, 0x6c, 0xb3, 0x07, 0xd1, 0x71, 0xea, 0x3f, 0xfb, 0x32,
+ 0xa9, 0xff, 0x79, 0x45, 0x1d, 0xef, 0x63, 0xfc, 0x40, 0x2b, 0xf3, 0xe9, 0x02, 0xc7, 0x1a, 0x29,
+ 0x5a, 0xbe, 0x41, 0xc7, 0xca, 0x66, 0x57, 0x55, 0x1c, 0x15, 0xe6, 0x5e, 0x2a, 0x4a, 0x9e, 0x1f,
+ 0x6b, 0x4a, 0x23, 0xc1, 0x95, 0xb0, 0x63, 0xc5, 0x79, 0x76, 0x0c, 0x63, 0x67, 0x6d, 0xe1, 0x22,
+ 0x58, 0x9d, 0x02, 0xa9, 0xdf, 0xa1, 0x78, 0x5a, 0xe3, 0x65, 0x63, 0x06, 0x8f, 0xce, 0xde, 0x68,
+ 0xe2, 0x48, 0x5b, 0x1f, 0x74, 0x28, 0x60, 0xfa, 0xd6, 0x63, 0x65, 0xf6, 0xd6, 0xe3, 0x87, 0x00,
+ 0x81, 0xc0, 0xd5, 0xb1, 0x65, 0xf7, 0xa5, 0xae, 0x4b, 0xba, 0x73, 0x59, 0xdf, 0xf4, 0xf1, 0x4c,
+ 0x82, 0x03, 0xdb, 0x3f, 0x32, 0xcf, 0xe9, 0xc8, 0x56, 0x17, 0x50, 0x44, 0xf0, 0xb4, 0x75, 0x5f,
+ 0x99, 0xb5, 0xee, 0x6f, 0x41, 0x21, 0x40, 0x17, 0x9a, 0x2e, 0xee, 0x5c, 0x3e, 0xbf, 0xeb, 0xe4,
+ 0x67, 0x1b, 0x8a, 0x96, 0x12, 0x96, 0x68, 0xff, 0x3c, 0x9f, 0xae, 0xec, 0x54, 0x8c, 0x10, 0x4c,
+ 0x59, 0xd8, 0x9b, 0x69, 0x0b, 0xdb, 0xb0, 0xa0, 0xa8, 0x0f, 0x1f, 0xa6, 0x13, 0x05, 0x61, 0xda,
+ 0x32, 0x9b, 0x48, 0x5b, 0x46, 0xd5, 0xaf, 0xb9, 0x64, 0xf5, 0xeb, 0xd4, 0xad, 0xbe, 0xc2, 0xcc,
+ 0xad, 0xbe, 0xe6, 0x27, 0x50, 0x50, 0x31, 0x01, 0x84, 0xee, 0xa8, 0x72, 0x65, 0xb1, 0x53, 0x2c,
+ 0xc3, 0xaf, 0x03, 0x0b, 0x04, 0xf9, 0x3a, 0xa2, 0x6b, 0x8e, 0x04, 0x19, 0xc9, 0x2c, 0xaf, 0xc3,
+ 0x75, 0x45, 0x1b, 0xa4, 0x9f, 0x90, 0xc3, 0xe5, 0xd8, 0xc7, 0xbe, 0xe9, 0x5f, 0xb0, 0x7c, 0xf3,
+ 0x43, 0x3a, 0xfa, 0x0f, 0x15, 0xaa, 0x1a, 0xdd, 0xa2, 0x54, 0x66, 0xd9, 0xd2, 0xd6, 0x87, 0x2a,
+ 0x47, 0x74, 0xb4, 0xa7, 0xea, 0xe9, 0x28, 0x9c, 0xa2, 0x7c, 0xd0, 0x72, 0x72, 0x8f, 0xff, 0x13,
+ 0x5b, 0x6f, 0xcd, 0x8d, 0x84, 0xc7, 0x98, 0x2e, 0x90, 0xcb, 0x2c, 0x5a, 0x20, 0xd7, 0x7c, 0x0c,
+ 0xab, 0x46, 0xda, 0xa6, 0xf3, 0xf7, 0xa0, 0xe4, 0x8d, 0x93, 0x72, 0x5e, 0xa4, 0x97, 0x21, 0x79,
+ 0xf3, 0x67, 0x19, 0x58, 0xee, 0xb8, 0x52, 0xf8, 0xae, 0xe9, 0x6c, 0x3b, 0xe6, 0x80, 0xbf, 0x1b,
+ 0x5a, 0xa9, 0xf9, 0xb9, 0x87, 0x24, 0x6d, 0xda, 0x60, 0x39, 0x3a, 0xc9, 0xce, 0x6f, 0xc0, 0x9a,
+ 0xb0, 0x6c, 0xe9, 0xf9, 0xca, 0x4f, 0x0e, 0xeb, 0x18, 0xaf, 0x03, 0x53, 0xe8, 0x2e, 0x2d, 0x89,
+ 0x9e, 0x9a, 0xe6, 0x3a, 0x5c, 0x4f, 0x61, 0x43, 0x27, 0x38, 0xcb, 0x6f, 0x43, 0x3d, 0xde, 0x8d,
+ 0xb6, 0x3c, 0x57, 0x76, 0x5c, 0x4b, 0x9c, 0x93, 0x93, 0xc5, 0x72, 0xcd, 0xdf, 0x88, 0xdc, 0xbb,
+ 0xa7, 0xba, 0xca, 0xd1, 0xf7, 0xbc, 0xf8, 0x0a, 0xad, 0x86, 0x12, 0x57, 0xb5, 0xb3, 0x0b, 0x5c,
+ 0xd5, 0xfe, 0x30, 0xbe, 0x6e, 0xab, 0x36, 0x8a, 0x57, 0xe6, 0xee, 0x3e, 0x54, 0x9c, 0xa5, 0xbd,
+ 0xfb, 0xae, 0x48, 0xdc, 0xbd, 0x7d, 0x53, 0x87, 0x74, 0xf9, 0x45, 0xbc, 0x60, 0x55, 0xc7, 0xf0,
+ 0xce, 0xf4, 0x1d, 0x8f, 0xc5, 0x8a, 0x24, 0x67, 0x1c, 0x55, 0x78, 0x69, 0x47, 0xf5, 0xdb, 0x53,
+ 0xd1, 0x53, 0x79, 0x6e, 0x3a, 0xee, 0x8a, 0x1b, 0xac, 0xdf, 0x86, 0xd2, 0xd0, 0x0e, 0xa4, 0xe7,
+ 0xab, 0x5b, 0xd5, 0xb3, 0xb7, 0xc0, 0x12, 0xa3, 0xb5, 0xa3, 0x08, 0xa9, 0xa2, 0x2d, 0xe4, 0xe2,
+ 0xdf, 0x83, 0x35, 0x1a, 0xf8, 0xc3, 0xd8, 0x6b, 0x08, 0xea, 0xd5, 0xb9, 0x95, 0x84, 0x09, 0x51,
+ 0x1b, 0x53, 0x2c, 0xc6, 0xac, 0x90, 0xc6, 0x00, 0x20, 0x9e, 0x9f, 0x19, 0x2b, 0xf6, 0x19, 0x6e,
+ 0x55, 0xdf, 0x84, 0x62, 0x30, 0x39, 0x8e, 0x4f, 0xe3, 0x34, 0xd4, 0x38, 0x87, 0xc6, 0x8c, 0x77,
+ 0x70, 0x28, 0x7c, 0xd5, 0xdc, 0x2b, 0xaf, 0x76, 0x7f, 0x98, 0x9c, 0x78, 0xa5, 0x9c, 0x77, 0x2f,
+ 0x99, 0xbd, 0x48, 0x72, 0x42, 0x03, 0x1a, 0xef, 0x40, 0x35, 0x31, 0xa8, 0x68, 0x99, 0x27, 0xae,
+ 0xe5, 0x85, 0x29, 0x60, 0xfc, 0xad, 0xae, 0xb6, 0x59, 0x61, 0x12, 0x98, 0x7e, 0x37, 0x0c, 0x60,
+ 0xd3, 0x03, 0x78, 0x45, 0x84, 0xfd, 0x0a, 0xd4, 0x12, 0x2e, 0x5d, 0x94, 0x1e, 0x4c, 0x23, 0x9b,
+ 0x67, 0xf0, 0xf9, 0x84, 0xb8, 0x43, 0xe1, 0x8f, 0xec, 0x00, 0x37, 0x12, 0x15, 0x2c, 0x92, 0x6b,
+ 0x6d, 0x09, 0x57, 0xda, 0x32, 0xb4, 0xa0, 0x11, 0xcc, 0xbf, 0x09, 0x85, 0xb1, 0xf0, 0x47, 0x81,
+ 0xb6, 0xa2, 0xd3, 0x1a, 0x34, 0x57, 0x6c, 0x60, 0x28, 0x9e, 0xe6, 0x3f, 0xcc, 0x40, 0x79, 0x4f,
+ 0x48, 0x13, 0x7d, 0x07, 0xbe, 0x37, 0xf5, 0x96, 0xd9, 0x13, 0xe4, 0x90, 0x74, 0x5d, 0x87, 0xaf,
+ 0xeb, 0x1d, 0x4d, 0xaf, 0xe1, 0x9d, 0xa5, 0xb8, 0x61, 0x8d, 0x0d, 0x28, 0x69, 0x74, 0xe3, 0x5d,
+ 0x58, 0x9d, 0xa2, 0xa4, 0x71, 0x51, 0xbe, 0x7d, 0xf7, 0x62, 0x14, 0x96, 0x39, 0x2d, 0x1b, 0x69,
+ 0xe4, 0x46, 0x05, 0x4a, 0x63, 0xc5, 0xd0, 0xfc, 0x83, 0x1b, 0x54, 0x5c, 0x63, 0x9f, 0x60, 0x4c,
+ 0x3f, 0x6f, 0x67, 0xbd, 0x03, 0x40, 0x5b, 0xb3, 0x2a, 0xc1, 0x50, 0x29, 0xdb, 0x04, 0x86, 0xbf,
+ 0x1f, 0xe5, 0xda, 0xf3, 0x73, 0x9d, 0xaa, 0xa4, 0xf0, 0xe9, 0x84, 0x7b, 0x1d, 0x4a, 0x76, 0x40,
+ 0x79, 0x38, 0x5d, 0xb6, 0x14, 0x82, 0xea, 0x49, 0xcf, 0x33, 0x03, 0xa9, 0x93, 0xde, 0x21, 0xc8,
+ 0xbf, 0x05, 0x45, 0x7b, 0x34, 0xf6, 0x7c, 0xa9, 0xd3, 0xf4, 0x57, 0xbe, 0xaf, 0x43, 0x94, 0x3b,
+ 0x4b, 0x86, 0xe6, 0x41, 0x6e, 0x71, 0x4e, 0xdc, 0xe5, 0x17, 0x73, 0xb7, 0xcf, 0x43, 0x6e, 0xc5,
+ 0xc3, 0xbf, 0x0b, 0xb5, 0x81, 0xaa, 0xe7, 0x54, 0x82, 0xb5, 0x79, 0xf9, 0xca, 0x55, 0x42, 0x1e,
+ 0x25, 0x19, 0x76, 0x96, 0x8c, 0xb4, 0x04, 0x14, 0x89, 0xae, 0xbd, 0x08, 0x64, 0xcf, 0xfb, 0xc8,
+ 0xb3, 0x5d, 0x0a, 0x84, 0x5f, 0x20, 0xd2, 0x48, 0x32, 0xa0, 0xc8, 0x94, 0x04, 0xfe, 0x75, 0xf4,
+ 0x85, 0x02, 0xa9, 0xaf, 0xbc, 0xdf, 0xbd, 0x4a, 0x52, 0x4f, 0x04, 0xfa, 0xb2, 0x7a, 0x20, 0xf9,
+ 0x39, 0x34, 0x12, 0xcb, 0x47, 0xbf, 0xa4, 0x35, 0x1e, 0xfb, 0x1e, 0x46, 0xd3, 0x35, 0x92, 0xf6,
+ 0xf5, 0xab, 0xa4, 0x1d, 0x5e, 0xca, 0xbd, 0xb3, 0x64, 0x5c, 0x21, 0x9b, 0xf7, 0x30, 0xe6, 0xd3,
+ 0x5d, 0xd8, 0x15, 0xe6, 0x59, 0x78, 0x61, 0xfe, 0xfe, 0x42, 0xa3, 0x40, 0x1c, 0x3b, 0x4b, 0xc6,
+ 0x94, 0x0c, 0xfe, 0xab, 0xb0, 0x96, 0x7a, 0x27, 0xdd, 0x91, 0x55, 0xd7, 0xe9, 0xbf, 0xb6, 0x70,
+ 0x37, 0x90, 0x69, 0x67, 0xc9, 0x98, 0x95, 0xc4, 0x27, 0xf0, 0xb9, 0xd9, 0x2e, 0x6d, 0x89, 0xbe,
+ 0x63, 0xbb, 0x42, 0xdf, 0xbc, 0x7f, 0xe7, 0xe5, 0x46, 0x4b, 0x33, 0xef, 0x2c, 0x19, 0x97, 0x4b,
+ 0xe6, 0x7f, 0x11, 0x6e, 0x8f, 0xe7, 0x1a, 0x1f, 0x65, 0xd4, 0xf4, 0xc5, 0xfd, 0xf7, 0x16, 0x7c,
+ 0xf3, 0x0c, 0xff, 0xce, 0x92, 0x71, 0xa5, 0x7c, 0xf4, 0xaa, 0x29, 0xb6, 0xd6, 0x65, 0xe7, 0x0a,
+ 0xa0, 0x33, 0xdc, 0xbe, 0xb3, 0x23, 0x4c, 0x2b, 0x3a, 0x49, 0x88, 0x11, 0x8d, 0xff, 0x9e, 0x81,
+ 0xa2, 0xd6, 0xf7, 0xdb, 0x51, 0x2d, 0x41, 0x64, 0xd4, 0x63, 0x04, 0xff, 0x00, 0x2a, 0xc2, 0xf7,
+ 0x3d, 0x7f, 0xd3, 0xb3, 0xc2, 0x32, 0xcc, 0xe9, 0xfc, 0xb3, 0x92, 0xb3, 0xde, 0x0e, 0xc9, 0x8c,
+ 0x98, 0x83, 0xbf, 0x0f, 0xa0, 0xd6, 0x79, 0x2f, 0xbe, 0x3d, 0xd4, 0x98, 0xcf, 0xaf, 0x0e, 0xa7,
+ 0x62, 0xea, 0x38, 0x61, 0x17, 0x9e, 0x0c, 0x85, 0x60, 0x14, 0x8a, 0x16, 0x12, 0xa1, 0xe8, 0x6d,
+ 0x9d, 0x61, 0xa0, 0xc4, 0x8b, 0xbe, 0x43, 0x17, 0x21, 0x1a, 0xbf, 0x9f, 0x81, 0xa2, 0x32, 0x1e,
+ 0xbc, 0x3d, 0xdb, 0xa3, 0xd7, 0x5e, 0x6c, 0x73, 0xd6, 0xa7, 0x7b, 0xf6, 0x2d, 0x00, 0x65, 0x83,
+ 0x12, 0x3d, 0xbb, 0x3d, 0x25, 0x47, 0xb3, 0x86, 0x85, 0xcf, 0x31, 0x7d, 0xf3, 0xa1, 0xba, 0xe7,
+ 0x45, 0xc9, 0xe2, 0x27, 0xbb, 0xbb, 0x6c, 0x89, 0xaf, 0x41, 0xed, 0xc9, 0xfe, 0xe3, 0xfd, 0x83,
+ 0x67, 0xfb, 0x47, 0x6d, 0xc3, 0x38, 0x30, 0x54, 0xce, 0x78, 0xa3, 0xb5, 0x75, 0xd4, 0xd9, 0x3f,
+ 0x7c, 0xd2, 0x63, 0xd9, 0xc6, 0x3f, 0xcb, 0x40, 0x2d, 0x65, 0xbb, 0xfe, 0x74, 0xa7, 0x2e, 0x31,
+ 0xfc, 0xb9, 0xf9, 0xc3, 0x9f, 0xbf, 0x6c, 0xf8, 0x0b, 0xd3, 0xc3, 0xff, 0x3b, 0x19, 0xa8, 0xa5,
+ 0x6c, 0x64, 0x52, 0x7a, 0x26, 0x2d, 0x3d, 0xe9, 0x03, 0x64, 0xa7, 0x7c, 0x80, 0x26, 0x2c, 0x87,
+ 0xbf, 0xf7, 0xe3, 0x5c, 0x44, 0x0a, 0x97, 0xa4, 0xa1, 0x8b, 0x16, 0xf9, 0x34, 0x0d, 0x5d, 0xb6,
+ 0xb8, 0xba, 0xb5, 0x74, 0xb1, 0x34, 0xa0, 0x7b, 0xf7, 0x8d, 0xcb, 0x2d, 0xe8, 0x15, 0x5d, 0x78,
+ 0x04, 0xd5, 0x71, 0xbc, 0x4c, 0x5f, 0xce, 0x61, 0x49, 0x72, 0xbe, 0xa0, 0x9d, 0xbf, 0x9b, 0x81,
+ 0x95, 0xb4, 0xcd, 0xfd, 0xff, 0x7a, 0x58, 0xff, 0x49, 0x06, 0xd6, 0x66, 0x2c, 0xf9, 0x95, 0x2e,
+ 0xdf, 0x74, 0xbb, 0xb2, 0x0b, 0xb4, 0x2b, 0x37, 0xa7, 0x5d, 0x97, 0x5b, 0x92, 0xab, 0x5b, 0xdc,
+ 0x85, 0xcf, 0x5d, 0xba, 0x27, 0x5c, 0x31, 0xd4, 0x29, 0xa1, 0xb9, 0x69, 0xa1, 0xbf, 0x9d, 0x81,
+ 0xdb, 0x57, 0xd9, 0xfb, 0xff, 0xe7, 0x7a, 0x35, 0xdd, 0xc2, 0xe6, 0xbb, 0x51, 0x89, 0x41, 0x15,
+ 0x4a, 0xfa, 0x7b, 0x56, 0xba, 0xc4, 0x7b, 0xe8, 0x3d, 0x77, 0x55, 0x8e, 0xda, 0x10, 0xa6, 0xbe,
+ 0xf1, 0x6f, 0x88, 0xb1, 0x63, 0xd3, 0xe9, 0xe9, 0x2d, 0x80, 0x16, 0x45, 0x7c, 0xe1, 0x05, 0x9c,
+ 0xcd, 0xdd, 0x83, 0x6e, 0x9b, 0x2d, 0x25, 0xdd, 0xdb, 0x4f, 0x42, 0x43, 0xdc, 0x3c, 0x84, 0x62,
+ 0x7c, 0x25, 0x62, 0xcf, 0xf4, 0x4f, 0x2d, 0x75, 0x46, 0xb9, 0x0c, 0xe5, 0x43, 0x1d, 0x5c, 0xa9,
+ 0x57, 0x7d, 0xd4, 0x3d, 0xd8, 0x57, 0xe9, 0xf0, 0xad, 0x83, 0x9e, 0xba, 0x58, 0xd1, 0x7d, 0xfa,
+ 0x48, 0x1d, 0x96, 0x3d, 0x32, 0x5a, 0x87, 0x3b, 0x47, 0x44, 0x51, 0x68, 0xfe, 0x56, 0x3e, 0xdc,
+ 0xd5, 0x9a, 0x86, 0x3e, 0xfd, 0x04, 0x28, 0xa2, 0x35, 0xf7, 0xb4, 0xe0, 0xe8, 0x35, 0x54, 0x0c,
+ 0xdc, 0x3e, 0x57, 0x19, 0x0a, 0x96, 0xe5, 0x45, 0xc8, 0x1e, 0x1e, 0xab, 0x1a, 0xa5, 0x1d, 0x39,
+ 0x72, 0xd4, 0x8d, 0xcc, 0xde, 0xb9, 0x64, 0x05, 0xfc, 0xb1, 0x19, 0x9c, 0xb1, 0x62, 0xf3, 0x9f,
+ 0xe7, 0xa0, 0x12, 0x99, 0xca, 0x97, 0x31, 0xdd, 0x9c, 0xc3, 0x4a, 0x67, 0xbf, 0xd7, 0x36, 0xf6,
+ 0x5b, 0xbb, 0x9a, 0x24, 0xc7, 0xaf, 0xc1, 0xea, 0x76, 0x67, 0xb7, 0x7d, 0xb4, 0x7b, 0xd0, 0xda,
+ 0xd2, 0xc8, 0x32, 0xbf, 0x09, 0xbc, 0xb3, 0x77, 0x78, 0x60, 0xf4, 0x8e, 0x3a, 0xdd, 0xa3, 0xcd,
+ 0xd6, 0xfe, 0x66, 0x7b, 0xb7, 0xbd, 0xc5, 0x8a, 0xfc, 0x15, 0xb8, 0xbb, 0x7f, 0xd0, 0xeb, 0x1c,
+ 0xec, 0x1f, 0xed, 0x1f, 0x1c, 0x1d, 0x6c, 0x7c, 0xd4, 0xde, 0xec, 0x75, 0x8f, 0x3a, 0xfb, 0x47,
+ 0x28, 0xf5, 0x91, 0xd1, 0xc2, 0x27, 0xac, 0xc0, 0xef, 0xc2, 0x6d, 0x4d, 0xd5, 0x6d, 0x1b, 0x4f,
+ 0xdb, 0x06, 0x0a, 0x79, 0xb2, 0xdf, 0x7a, 0xda, 0xea, 0xec, 0xb6, 0x36, 0x76, 0xdb, 0x6c, 0x99,
+ 0xdf, 0x81, 0x86, 0xa6, 0x30, 0x5a, 0xbd, 0xf6, 0xd1, 0x6e, 0x67, 0xaf, 0xd3, 0x3b, 0x6a, 0x7f,
+ 0x6f, 0xb3, 0xdd, 0xde, 0x6a, 0x6f, 0xb1, 0x1a, 0xff, 0x0a, 0x7c, 0x99, 0x1a, 0xa5, 0x1b, 0x91,
+ 0x7e, 0xd9, 0x27, 0x9d, 0xc3, 0xa3, 0x96, 0xb1, 0xb9, 0xd3, 0x79, 0xda, 0x66, 0x2b, 0xfc, 0x35,
+ 0xf8, 0xd2, 0xe5, 0xa4, 0x5b, 0x1d, 0xa3, 0xbd, 0xd9, 0x3b, 0x30, 0x3e, 0x66, 0x6b, 0xfc, 0x0b,
+ 0xf0, 0xb9, 0x9d, 0xde, 0xde, 0xee, 0xd1, 0x33, 0xe3, 0x60, 0xff, 0xd1, 0x11, 0xfd, 0xec, 0xf6,
+ 0x8c, 0x27, 0x9b, 0xbd, 0x27, 0x46, 0x9b, 0x01, 0x6f, 0xc0, 0xcd, 0xc3, 0x8d, 0xa3, 0xfd, 0x83,
+ 0xde, 0x51, 0x6b, 0xff, 0xe3, 0x8d, 0xdd, 0x83, 0xcd, 0xc7, 0x47, 0xdb, 0x07, 0xc6, 0x5e, 0xab,
+ 0xc7, 0xaa, 0xfc, 0xab, 0xf0, 0xda, 0x66, 0xf7, 0xa9, 0x6e, 0xe6, 0xc1, 0xf6, 0x91, 0x71, 0xf0,
+ 0xac, 0x7b, 0x74, 0x60, 0x1c, 0x19, 0xed, 0x5d, 0xea, 0x73, 0x37, 0x6e, 0x7b, 0x89, 0xdf, 0x86,
+ 0x7a, 0x67, 0xbf, 0xfb, 0x64, 0x7b, 0xbb, 0xb3, 0xd9, 0x69, 0xef, 0xf7, 0x8e, 0x0e, 0xdb, 0xc6,
+ 0x5e, 0xa7, 0xdb, 0x45, 0x32, 0x56, 0x69, 0x7e, 0x07, 0x8a, 0x1d, 0xf7, 0xcc, 0x96, 0xb4, 0xbe,
+ 0xb4, 0x32, 0xea, 0x58, 0x2c, 0x04, 0x69, 0x59, 0xd8, 0x03, 0x97, 0xbe, 0x34, 0x40, 0xab, 0x6b,
+ 0xd9, 0x88, 0x11, 0xcd, 0xdf, 0xcf, 0x41, 0x4d, 0x89, 0x08, 0x63, 0xbb, 0x7b, 0xb0, 0xaa, 0x93,
+ 0xa4, 0x9d, 0xb4, 0x09, 0x9b, 0x46, 0xd3, 0x27, 0xbc, 0x14, 0x2a, 0x61, 0xc8, 0x92, 0x28, 0x7e,
+ 0x13, 0x8a, 0x66, 0xdf, 0xc1, 0x00, 0x51, 0x9d, 0x64, 0x6a, 0xe8, 0xb3, 0xda, 0x2e, 0xb4, 0x8b,
+ 0x8a, 0xb0, 0xef, 0xb9, 0x9b, 0xd1, 0x65, 0x93, 0x14, 0x8e, 0x7f, 0x02, 0xb7, 0x22, 0xb8, 0xed,
+ 0xf6, 0xfd, 0x8b, 0x71, 0xf4, 0x8d, 0xbd, 0xd2, 0xdc, 0x34, 0xc3, 0xb6, 0xed, 0x88, 0x14, 0xa1,
+ 0x71, 0x99, 0x00, 0xfe, 0x08, 0xc0, 0xa6, 0xc1, 0x22, 0xff, 0x68, 0xfe, 0x8d, 0xea, 0xd4, 0x68,
+ 0x6a, 0x48, 0xbb, 0x81, 0xd1, 0x6f, 0xdc, 0x20, 0x06, 0x68, 0x77, 0x1f, 0xeb, 0x4f, 0xf2, 0x2d,
+ 0x1b, 0x11, 0xdc, 0x7c, 0x00, 0x10, 0x73, 0x71, 0x06, 0xcb, 0xe8, 0x5b, 0xb4, 0x82, 0x3d, 0x31,
+ 0x3a, 0x16, 0xbe, 0xaa, 0xef, 0x53, 0x98, 0x47, 0xc8, 0xc1, 0x32, 0xcd, 0x3f, 0xcc, 0x24, 0x22,
+ 0x74, 0x15, 0x81, 0x5f, 0xb9, 0x03, 0xcd, 0x3b, 0x2d, 0xc2, 0x48, 0x58, 0x0f, 0xaa, 0x76, 0x8c,
+ 0x34, 0xc8, 0x0f, 0x81, 0xdb, 0xb3, 0x43, 0x99, 0x5f, 0x70, 0x28, 0xe7, 0xf0, 0x4e, 0x27, 0xfb,
+ 0x0b, 0xb3, 0xc9, 0xfe, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0x27, 0x8e, 0x45, 0x5d, 0x11, 0x14,
+ 0x61, 0x9a, 0x0e, 0x94, 0xc3, 0xef, 0x0b, 0xa2, 0x8e, 0xd1, 0x17, 0x06, 0xa3, 0xd4, 0xa7, 0x82,
+ 0xf8, 0x0e, 0xac, 0x88, 0x74, 0x9b, 0xb3, 0x0b, 0xb6, 0x79, 0x8a, 0xaf, 0xf9, 0x0d, 0x58, 0x9b,
+ 0x21, 0xc2, 0x41, 0x1c, 0x9b, 0x32, 0xfa, 0xc8, 0x00, 0xfe, 0x9e, 0x3d, 0xc8, 0x6f, 0xfe, 0x87,
+ 0x2c, 0x2c, 0xef, 0x99, 0xae, 0x7d, 0x22, 0x02, 0x19, 0xb6, 0x36, 0xe8, 0x0f, 0xc5, 0xc8, 0x0c,
+ 0x5b, 0xab, 0x20, 0x9d, 0x0f, 0xc9, 0x26, 0x4f, 0x1a, 0x66, 0x0e, 0xa6, 0x70, 0x35, 0x4d, 0xe4,
+ 0x30, 0xaa, 0xbb, 0xd7, 0x10, 0xce, 0x9d, 0x63, 0xf7, 0x85, 0x1b, 0x84, 0x2b, 0x26, 0x04, 0xe3,
+ 0xba, 0x9e, 0xe2, 0x15, 0x75, 0x3d, 0xa5, 0xd9, 0xf1, 0xbf, 0x0b, 0xd5, 0xa0, 0xef, 0x0b, 0xe1,
+ 0x06, 0x43, 0x4f, 0x86, 0xdf, 0xa6, 0x4c, 0xa2, 0xa8, 0xc8, 0xce, 0x7b, 0xee, 0xa2, 0x8e, 0xef,
+ 0xda, 0xee, 0xa9, 0xae, 0x1d, 0x4b, 0xe1, 0x50, 0x07, 0x29, 0x1b, 0x64, 0xff, 0x50, 0x50, 0xbe,
+ 0xa1, 0x60, 0x44, 0x30, 0xe5, 0x7b, 0x4c, 0x29, 0x06, 0x9e, 0x6f, 0x0b, 0x95, 0xf4, 0xac, 0x18,
+ 0x09, 0x0c, 0xf2, 0x3a, 0xa6, 0x3b, 0x98, 0x98, 0x03, 0xa1, 0x0f, 0xc6, 0x23, 0xb8, 0xf9, 0x3f,
+ 0x0a, 0x00, 0x6a, 0x35, 0x04, 0x43, 0x7b, 0x4c, 0x87, 0x32, 0xb6, 0xae, 0x36, 0xae, 0x19, 0xf4,
+ 0x9b, 0xbf, 0x97, 0xba, 0x08, 0x30, 0x7b, 0x8c, 0x1a, 0xb3, 0x4f, 0x27, 0x8b, 0x70, 0x70, 0x4c,
+ 0x29, 0x74, 0x49, 0x15, 0x8d, 0x7f, 0xde, 0x48, 0xa2, 0xa8, 0xa8, 0xce, 0x94, 0xa2, 0xed, 0x5a,
+ 0x2a, 0x19, 0x95, 0x37, 0x22, 0x98, 0xae, 0x12, 0x05, 0xad, 0x89, 0xf4, 0x0c, 0xe1, 0x8a, 0xe7,
+ 0xd1, 0x2d, 0xb9, 0x18, 0xc5, 0xf7, 0xa0, 0x36, 0x36, 0x2f, 0x46, 0xc2, 0x95, 0x7b, 0x42, 0x0e,
+ 0x3d, 0x4b, 0xd7, 0x3f, 0xbd, 0x76, 0x79, 0x03, 0x0f, 0x93, 0xe4, 0x46, 0x9a, 0x1b, 0x75, 0xc2,
+ 0x0d, 0x68, 0x95, 0xa8, 0x69, 0xd4, 0x10, 0xdf, 0x00, 0x50, 0xbf, 0x12, 0x96, 0x6a, 0x26, 0x0b,
+ 0x65, 0x8e, 0x44, 0x20, 0xfc, 0x33, 0x5b, 0x59, 0x57, 0x65, 0xa4, 0x62, 0x2e, 0xb4, 0xc5, 0x93,
+ 0x40, 0xf8, 0xed, 0x91, 0x69, 0x3b, 0x7a, 0x82, 0x63, 0x04, 0x7f, 0x1b, 0x6e, 0x04, 0x93, 0x63,
+ 0xd4, 0x99, 0x63, 0xd1, 0xf3, 0xf6, 0xc5, 0xf3, 0xc0, 0x11, 0x52, 0x0a, 0x5f, 0xd7, 0x58, 0xcc,
+ 0x7f, 0xd8, 0x1c, 0x44, 0x6e, 0x18, 0x7d, 0x07, 0x05, 0x7f, 0xc5, 0x85, 0x5c, 0x11, 0x4a, 0x57,
+ 0xb9, 0xb1, 0x0c, 0x9a, 0x3f, 0x85, 0xd2, 0x45, 0x70, 0x59, 0xfe, 0x65, 0xf8, 0x62, 0x8a, 0xc8,
+ 0x50, 0x47, 0xd6, 0xc1, 0xb6, 0xed, 0x9a, 0x8e, 0xfd, 0x43, 0x55, 0x40, 0x90, 0x6b, 0x8e, 0xa1,
+ 0x96, 0x1a, 0x38, 0xba, 0xd6, 0x49, 0xbf, 0x74, 0x25, 0x10, 0x83, 0x65, 0x05, 0x77, 0xa5, 0x6f,
+ 0xd3, 0x59, 0x4c, 0x84, 0xd9, 0xc4, 0x75, 0xee, 0xb1, 0x2c, 0xbf, 0x0e, 0x4c, 0x61, 0x3a, 0xae,
+ 0x39, 0x1e, 0xb7, 0xc6, 0x63, 0x47, 0xb0, 0x1c, 0x5d, 0x99, 0x8d, 0xb1, 0xea, 0x3a, 0x00, 0xcb,
+ 0x37, 0xbf, 0x07, 0xb7, 0x68, 0x64, 0x9e, 0x0a, 0x3f, 0x0a, 0xb4, 0x75, 0x5f, 0x6f, 0xc0, 0x9a,
+ 0xfa, 0xb5, 0xef, 0x49, 0xf5, 0x98, 0x9c, 0x4f, 0x0e, 0x2b, 0x0a, 0x8d, 0xbe, 0x57, 0x57, 0xd0,
+ 0x45, 0xd8, 0x08, 0x17, 0xd1, 0x65, 0x9b, 0x3f, 0x2b, 0x02, 0x8f, 0x15, 0xa2, 0x67, 0x0b, 0x7f,
+ 0xcb, 0x94, 0x66, 0x22, 0x87, 0x5a, 0xbb, 0xb4, 0x0a, 0xe0, 0xc5, 0x35, 0x7c, 0x37, 0xa1, 0x68,
+ 0x07, 0x18, 0x1a, 0xea, 0x42, 0x5e, 0x0d, 0xf1, 0x5d, 0x80, 0xb1, 0xf0, 0x6d, 0xcf, 0x22, 0x0d,
+ 0x2a, 0xcc, 0xbd, 0x8f, 0x31, 0xdb, 0xa8, 0xf5, 0xc3, 0x88, 0xc7, 0x48, 0xf0, 0x63, 0x3b, 0x14,
+ 0xa4, 0xce, 0xd4, 0x8b, 0xd4, 0xe8, 0x24, 0x8a, 0xbf, 0x01, 0xd7, 0xc6, 0xbe, 0xdd, 0x17, 0x6a,
+ 0x3a, 0x9e, 0x04, 0xd6, 0x26, 0x7d, 0x3d, 0xb0, 0x44, 0x94, 0xf3, 0x1e, 0xa1, 0x06, 0x9a, 0x2e,
+ 0x05, 0x4c, 0x01, 0x9d, 0x22, 0xeb, 0xab, 0xe3, 0xaa, 0xd4, 0xb5, 0x66, 0xcc, 0x7f, 0xc8, 0xef,
+ 0x03, 0xd3, 0x0f, 0xf6, 0x6c, 0x77, 0x57, 0xb8, 0x03, 0x39, 0x24, 0xe5, 0xae, 0x19, 0x33, 0x78,
+ 0xb2, 0x60, 0xea, 0x1b, 0x4d, 0xea, 0x84, 0xa9, 0x62, 0x44, 0xb0, 0xfa, 0x1c, 0x81, 0xe3, 0xf9,
+ 0x5d, 0xe9, 0xeb, 0x9a, 0xdd, 0x08, 0x46, 0x1f, 0x2a, 0xa0, 0xb6, 0x1e, 0xfa, 0x9e, 0x35, 0xa1,
+ 0xf3, 0x0f, 0x65, 0xc4, 0xa6, 0xd1, 0x31, 0xe5, 0x9e, 0xe9, 0xea, 0x42, 0xca, 0x5a, 0x92, 0x32,
+ 0x42, 0x53, 0x4c, 0xe8, 0x05, 0xb1, 0xc0, 0x55, 0x1d, 0x13, 0x26, 0x70, 0x9a, 0x26, 0x16, 0xc5,
+ 0x22, 0x9a, 0x58, 0x0e, 0xf5, 0xdf, 0xf2, 0x3d, 0xdb, 0x8a, 0x65, 0xa9, 0x9a, 0x9e, 0x19, 0x7c,
+ 0x82, 0x36, 0x96, 0xc9, 0x53, 0xb4, 0x11, 0xbe, 0xf9, 0xe3, 0x0c, 0x40, 0x3c, 0xf9, 0xa8, 0xf2,
+ 0x31, 0x14, 0x2f, 0xf1, 0x5b, 0x70, 0x2d, 0x89, 0x76, 0x74, 0x31, 0x2c, 0xe9, 0x7d, 0xfc, 0x60,
+ 0xcb, 0xbc, 0x08, 0x58, 0x56, 0x5f, 0xde, 0xd6, 0xb8, 0x67, 0x42, 0x50, 0x65, 0xe1, 0x75, 0x60,
+ 0x31, 0x92, 0x6e, 0xe4, 0x05, 0x2c, 0x9f, 0x26, 0xfd, 0x58, 0x98, 0x7e, 0xc0, 0x0a, 0xcd, 0x1d,
+ 0x28, 0xaa, 0x63, 0xb0, 0x39, 0x07, 0xd8, 0x2f, 0x57, 0x8d, 0xf2, 0xd7, 0x33, 0x00, 0x5b, 0xaa,
+ 0x72, 0x1a, 0x77, 0xf1, 0x39, 0x75, 0x01, 0xf3, 0x3c, 0x2a, 0xd3, 0xb2, 0xa8, 0x02, 0x3d, 0x17,
+ 0x7d, 0xf9, 0x07, 0x41, 0xd4, 0x1c, 0x33, 0xac, 0x1e, 0x53, 0x6b, 0x2e, 0x82, 0xd5, 0x06, 0xb2,
+ 0xe9, 0xb9, 0xae, 0xe8, 0xe3, 0xf6, 0x13, 0x6d, 0x20, 0x11, 0xaa, 0xf9, 0xa3, 0x2c, 0x54, 0x36,
+ 0x87, 0xa6, 0x54, 0x1f, 0xca, 0xf9, 0x0e, 0x94, 0x47, 0x22, 0x08, 0xcc, 0x81, 0x08, 0xf4, 0xb1,
+ 0xcf, 0xf4, 0x99, 0x6d, 0x44, 0xbb, 0xfe, 0xc4, 0xf5, 0x85, 0x69, 0xa9, 0xaf, 0x03, 0x45, 0x5c,
+ 0x4a, 0x82, 0x2b, 0xa3, 0xe0, 0xfb, 0x25, 0x24, 0xb8, 0xd1, 0xa7, 0x7c, 0xad, 0xe3, 0xf8, 0xdb,
+ 0xd1, 0xaa, 0xb7, 0x49, 0x54, 0x63, 0x0f, 0xaa, 0x09, 0x56, 0xfe, 0x0a, 0xd4, 0x3c, 0xc7, 0x12,
+ 0x81, 0xba, 0x1f, 0x18, 0x7f, 0x52, 0x31, 0x85, 0xa4, 0xe2, 0x0d, 0x5c, 0xb9, 0xc2, 0xd7, 0x27,
+ 0x78, 0x21, 0xd8, 0xfc, 0x5f, 0x25, 0xa8, 0x62, 0xa3, 0xf6, 0x54, 0x1f, 0x66, 0xa6, 0xa3, 0x0e,
+ 0x25, 0x4f, 0x4b, 0xd6, 0x17, 0x0b, 0xbd, 0x84, 0x4c, 0x5d, 0x10, 0x92, 0x4b, 0x17, 0x84, 0xdc,
+ 0x86, 0x8a, 0x3a, 0x6e, 0xb2, 0x5a, 0xca, 0x12, 0xe6, 0x8c, 0x18, 0x81, 0xee, 0xca, 0xc8, 0xb3,
+ 0xc8, 0x1e, 0xb7, 0xd4, 0x79, 0x4c, 0xce, 0x48, 0x60, 0x92, 0x9f, 0x79, 0xaa, 0xa6, 0x3f, 0xf3,
+ 0x44, 0x95, 0x39, 0x63, 0xe7, 0xa2, 0xe7, 0xe9, 0xd6, 0x76, 0xac, 0xf8, 0x7e, 0x76, 0x1a, 0xcf,
+ 0x37, 0xa1, 0xa4, 0xa7, 0x45, 0x9f, 0x3a, 0x7d, 0x65, 0xce, 0x4c, 0x68, 0xf2, 0x75, 0xfd, 0x57,
+ 0x5f, 0x91, 0x32, 0x42, 0x4e, 0xfe, 0x08, 0xaa, 0xa6, 0x94, 0x66, 0x7f, 0x38, 0xd2, 0xf6, 0x33,
+ 0x37, 0xe7, 0x68, 0x3a, 0x29, 0xa8, 0x15, 0x51, 0x1b, 0x49, 0x4e, 0xbe, 0x01, 0x15, 0x5f, 0x98,
+ 0xa9, 0xd3, 0xf1, 0x57, 0xae, 0x10, 0x63, 0x84, 0xb4, 0x46, 0xcc, 0x16, 0x7d, 0x5d, 0x14, 0xe2,
+ 0xaf, 0x8b, 0x36, 0x7e, 0x9a, 0x81, 0x95, 0x74, 0xe3, 0xff, 0x34, 0xbe, 0x76, 0xf7, 0xad, 0xf8,
+ 0x6b, 0x77, 0x9f, 0xe1, 0xcb, 0x71, 0xbf, 0x9d, 0x01, 0x88, 0xc7, 0x05, 0xf7, 0x48, 0xf5, 0x55,
+ 0xae, 0xd0, 0x6b, 0x57, 0x10, 0xdf, 0x49, 0x7d, 0xca, 0xe1, 0xed, 0x85, 0x06, 0x39, 0xf1, 0x33,
+ 0x51, 0xd8, 0xfe, 0x00, 0x56, 0xd2, 0x78, 0xba, 0x10, 0xd0, 0xd9, 0x6d, 0xab, 0x1c, 0x55, 0x67,
+ 0xaf, 0xf5, 0xa8, 0xad, 0x2f, 0xa2, 0x75, 0xf6, 0x1f, 0xb3, 0x6c, 0xe3, 0x8f, 0x32, 0x50, 0x89,
+ 0x86, 0x9c, 0x7f, 0x37, 0x39, 0x57, 0xaa, 0x04, 0xe6, 0xad, 0x45, 0xe6, 0x2a, 0xfe, 0xd5, 0x76,
+ 0xa5, 0x7f, 0x91, 0x98, 0xba, 0x86, 0x07, 0x2b, 0xe9, 0x87, 0x73, 0x8c, 0xe8, 0xa3, 0xb4, 0x11,
+ 0x7d, 0x73, 0xa1, 0x57, 0x86, 0xa1, 0xea, 0xae, 0x1d, 0x48, 0x6d, 0x5f, 0xdf, 0xcf, 0xbe, 0x97,
+ 0x69, 0xdc, 0x85, 0xe5, 0xe4, 0xa3, 0xd9, 0xbb, 0xa8, 0xf7, 0xff, 0x28, 0x07, 0x2b, 0xe9, 0x2a,
+ 0x12, 0xba, 0xdb, 0xa6, 0x2a, 0x98, 0x0e, 0x1c, 0x2b, 0x71, 0x17, 0x80, 0x61, 0x98, 0xac, 0x83,
+ 0x61, 0x42, 0xac, 0x51, 0x16, 0xcc, 0x1b, 0x09, 0x76, 0x37, 0xf9, 0x45, 0xcf, 0x37, 0x38, 0x84,
+ 0x77, 0x12, 0xd9, 0x98, 0x57, 0xf4, 0xb7, 0xcd, 0x7e, 0x94, 0xe5, 0xb5, 0x44, 0x45, 0xfa, 0x4f,
+ 0xd0, 0x13, 0x5c, 0xdd, 0x98, 0xb8, 0x96, 0x23, 0xac, 0x08, 0xfb, 0xd3, 0x24, 0x36, 0x2a, 0x29,
+ 0xff, 0x51, 0x9e, 0xaf, 0x40, 0xa5, 0x3b, 0x39, 0xd6, 0xe5, 0xe4, 0x7f, 0x29, 0xcf, 0x6f, 0xc2,
+ 0x9a, 0xa6, 0x8a, 0xab, 0x37, 0xd9, 0x5f, 0xc6, 0x3d, 0x6b, 0xa5, 0xa5, 0xc6, 0x4b, 0x37, 0x94,
+ 0xfd, 0x95, 0x3c, 0x36, 0x81, 0xae, 0xba, 0xff, 0x55, 0x92, 0x13, 0x5d, 0xfd, 0x61, 0xbf, 0x96,
+ 0xe7, 0xab, 0x00, 0xdd, 0x5e, 0xf4, 0xa2, 0xdf, 0xc8, 0xf3, 0x2a, 0x14, 0xbb, 0x3d, 0x92, 0xf6,
+ 0xe3, 0x3c, 0xbf, 0x01, 0x2c, 0x7e, 0xaa, 0x6b, 0x5a, 0xff, 0x86, 0x6a, 0x4c, 0x54, 0xa4, 0xfa,
+ 0x37, 0xf3, 0xd8, 0xaf, 0x70, 0x94, 0xd9, 0xdf, 0xca, 0x73, 0x06, 0xd5, 0x44, 0x6e, 0x95, 0xfd,
+ 0xed, 0x3c, 0xe7, 0x50, 0xdb, 0xb3, 0x83, 0xc0, 0x76, 0x07, 0xba, 0x07, 0xbf, 0x4e, 0x6f, 0xde,
+ 0x8e, 0x6e, 0x2f, 0xb1, 0xdf, 0xcc, 0xf3, 0x5b, 0xc0, 0x93, 0xe7, 0x49, 0xfa, 0xc1, 0xdf, 0x21,
+ 0x6e, 0xb5, 0x4f, 0x06, 0x1a, 0xf7, 0x77, 0x89, 0x1b, 0x35, 0x41, 0x23, 0x7e, 0x8b, 0x06, 0x64,
+ 0x33, 0xae, 0x82, 0xd5, 0xf8, 0x9f, 0x10, 0x73, 0x38, 0x99, 0x0a, 0xf7, 0xd3, 0xfc, 0xfd, 0x9f,
+ 0xd1, 0x79, 0x40, 0xb2, 0x98, 0x8c, 0x2f, 0x43, 0xd9, 0xf1, 0xdc, 0x81, 0x54, 0x5f, 0x52, 0xad,
+ 0x41, 0x25, 0x18, 0x7a, 0xbe, 0x24, 0x90, 0xae, 0x57, 0xba, 0x74, 0x0d, 0x5f, 0x5d, 0x48, 0x50,
+ 0x51, 0x9d, 0xca, 0xaf, 0x4a, 0x73, 0xc0, 0xaa, 0x51, 0xfd, 0x6e, 0x3e, 0xaa, 0x31, 0xa6, 0xcf,
+ 0x01, 0x84, 0xd7, 0xad, 0x59, 0x11, 0x49, 0x27, 0xbe, 0xa3, 0x6a, 0x8d, 0x05, 0x7a, 0xf4, 0xea,
+ 0x93, 0x89, 0xe3, 0x21, 0x06, 0x0e, 0x15, 0x85, 0xf5, 0xbe, 0x6f, 0xab, 0x8b, 0xbc, 0xba, 0x74,
+ 0xcf, 0xc2, 0x76, 0x44, 0xd5, 0x29, 0x4c, 0xdc, 0xff, 0x7b, 0x19, 0x58, 0x0e, 0x2f, 0xc1, 0xdb,
+ 0x03, 0xdb, 0x55, 0xd5, 0xca, 0xe1, 0xf7, 0x69, 0xfb, 0x8e, 0x3d, 0x0e, 0xbf, 0xf7, 0xb8, 0x0a,
+ 0x55, 0xcb, 0x37, 0x07, 0x2d, 0xd7, 0xda, 0xf2, 0xbd, 0xb1, 0x6a, 0xb6, 0x3a, 0x31, 0x54, 0x55,
+ 0xd2, 0xcf, 0xc5, 0x31, 0x92, 0x8f, 0x85, 0xcf, 0xf2, 0x54, 0x16, 0x38, 0x34, 0x7d, 0xdb, 0x1d,
+ 0xb4, 0xcf, 0xa5, 0x70, 0x03, 0x55, 0x2d, 0x5d, 0x85, 0xd2, 0x24, 0x10, 0x7d, 0x33, 0x10, 0xac,
+ 0x88, 0xc0, 0xf1, 0xc4, 0x76, 0xa4, 0xed, 0xaa, 0xcf, 0x2c, 0x46, 0xe5, 0xd0, 0x65, 0xec, 0x99,
+ 0x39, 0xb6, 0x59, 0xe5, 0xfe, 0xbf, 0xca, 0x40, 0x95, 0xd4, 0x22, 0xce, 0x89, 0xc7, 0x3e, 0x5a,
+ 0x15, 0x4a, 0xbb, 0xd1, 0xf7, 0xf6, 0x8a, 0x90, 0x3d, 0x38, 0x55, 0x39, 0x71, 0xad, 0x16, 0xea,
+ 0xb6, 0xaa, 0xfa, 0xf4, 0x5e, 0x9e, 0x7f, 0x0e, 0x6e, 0x18, 0x62, 0xe4, 0x49, 0xf1, 0xcc, 0xb4,
+ 0x65, 0xf2, 0x66, 0x52, 0x01, 0xc3, 0x39, 0xf5, 0x28, 0xbc, 0x8a, 0x54, 0xa4, 0x70, 0x0e, 0x5f,
+ 0x1b, 0x62, 0x4a, 0xd8, 0x7b, 0xc2, 0xe8, 0xf8, 0xae, 0x1c, 0x91, 0x7c, 0xe4, 0xd9, 0x2e, 0xbe,
+ 0x8d, 0x6e, 0x50, 0x13, 0x86, 0x0e, 0x57, 0x10, 0x05, 0xf7, 0xf7, 0xe1, 0xe6, 0xfc, 0x23, 0x01,
+ 0x75, 0xb7, 0x9a, 0x3e, 0xf2, 0x4c, 0x77, 0x55, 0x9e, 0xf9, 0xb6, 0xba, 0x04, 0x5b, 0x81, 0xc2,
+ 0xc1, 0x73, 0x97, 0xd4, 0x62, 0x0d, 0x6a, 0xfb, 0x5e, 0x82, 0x87, 0xe5, 0xee, 0xf7, 0x53, 0xa7,
+ 0x38, 0xf1, 0xa0, 0x84, 0x8d, 0x58, 0x4a, 0xdc, 0xc3, 0xca, 0xa8, 0xf3, 0x01, 0xfa, 0x3f, 0x1d,
+ 0xea, 0xbb, 0x13, 0xfa, 0xf4, 0xc4, 0x52, 0xdf, 0x9d, 0x88, 0x9a, 0x99, 0x57, 0x1f, 0xe0, 0x72,
+ 0xfb, 0xc2, 0x11, 0x16, 0x2b, 0xdc, 0x7f, 0x0f, 0x56, 0x75, 0x57, 0xfb, 0x22, 0x08, 0xc2, 0x7b,
+ 0x4c, 0x87, 0xbe, 0x7d, 0xa6, 0xbe, 0x6d, 0xb1, 0x0c, 0xe5, 0x43, 0xe1, 0x07, 0x9e, 0x4b, 0xdf,
+ 0xf5, 0x00, 0x28, 0x76, 0x87, 0xa6, 0x8f, 0xef, 0xb8, 0xff, 0x35, 0x3d, 0x48, 0x4f, 0xce, 0xc3,
+ 0xad, 0x01, 0xd7, 0x8f, 0xfe, 0xac, 0x8d, 0x29, 0x4d, 0x4d, 0x2e, 0x7d, 0x61, 0x8e, 0x58, 0xf6,
+ 0xfe, 0x26, 0x54, 0xe8, 0x1a, 0xd4, 0x63, 0xdb, 0xb5, 0xb0, 0xe3, 0x1b, 0xba, 0x24, 0x9f, 0xbe,
+ 0xb7, 0x74, 0x46, 0xc3, 0x51, 0x56, 0x5f, 0xa6, 0x65, 0x59, 0x7e, 0x13, 0x78, 0x6b, 0x22, 0xbd,
+ 0x91, 0x49, 0xd7, 0x77, 0x9d, 0x0b, 0xf5, 0x15, 0xe3, 0xdc, 0xfd, 0x6f, 0x03, 0x57, 0x39, 0x36,
+ 0x4b, 0x9c, 0xdb, 0xee, 0x20, 0xfa, 0x6e, 0x00, 0xd0, 0x47, 0x40, 0x2c, 0x71, 0x1e, 0xde, 0x61,
+ 0x0b, 0x81, 0xf0, 0x53, 0x24, 0xdb, 0xde, 0xc4, 0xc5, 0x46, 0x3f, 0x85, 0xeb, 0x4a, 0xc5, 0xb0,
+ 0x17, 0x74, 0x37, 0xf4, 0xd2, 0xc0, 0x5f, 0xdd, 0x61, 0x93, 0x93, 0x20, 0xa2, 0x65, 0x19, 0x6c,
+ 0x58, 0x14, 0x34, 0xc7, 0xf8, 0xec, 0xfd, 0x26, 0x5c, 0x9b, 0x93, 0xb9, 0x20, 0xa3, 0xae, 0xe2,
+ 0x37, 0xb6, 0x74, 0xff, 0x43, 0x58, 0x53, 0x66, 0x68, 0x5f, 0xdd, 0xde, 0x0b, 0x87, 0xed, 0x59,
+ 0x67, 0xbb, 0xa3, 0x46, 0x7a, 0xb3, 0xbd, 0xbb, 0xfb, 0x64, 0xb7, 0x65, 0xb0, 0x0c, 0xe9, 0xc3,
+ 0x41, 0xef, 0x68, 0xf3, 0x60, 0x7f, 0xbf, 0xbd, 0xd9, 0x6b, 0x6f, 0xb1, 0xec, 0xc6, 0xfd, 0x7f,
+ 0xfb, 0x8b, 0x3b, 0x99, 0x9f, 0xff, 0xe2, 0x4e, 0xe6, 0xbf, 0xfc, 0xe2, 0x4e, 0xe6, 0xc7, 0x9f,
+ 0xde, 0x59, 0xfa, 0xf9, 0xa7, 0x77, 0x96, 0xfe, 0xe3, 0xa7, 0x77, 0x96, 0x3e, 0x61, 0xd3, 0xff,
+ 0x6a, 0xe7, 0xb8, 0x48, 0x21, 0xc3, 0x5b, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x19, 0xb6, 0xd3,
+ 0x38, 0x85, 0x67, 0x00, 0x00,
}
func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) {
@@ -12997,6 +12928,16 @@ func (m *BlockContentWidget) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ if m.AutoAdded {
+ i--
+ if m.AutoAdded {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x20
+ }
if len(m.ViewId) > 0 {
i -= len(m.ViewId)
copy(dAtA[i:], m.ViewId)
@@ -15079,29 +15020,6 @@ func (m *NotificationPayloadOfParticipantPermissionsChange) MarshalToSizedBuffer
}
return len(dAtA) - i, nil
}
-func (m *NotificationPayloadOfAutoTypeWidgetAdded) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *NotificationPayloadOfAutoTypeWidgetAdded) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- if m.AutoTypeWidgetAdded != nil {
- {
- size, err := m.AutoTypeWidgetAdded.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintModels(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1
- i--
- dAtA[i] = 0x9a
- }
- return len(dAtA) - i, nil
-}
func (m *NotificationImport) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -15570,50 +15488,6 @@ func (m *NotificationParticipantPermissionsChange) MarshalToSizedBuffer(dAtA []b
return len(dAtA) - i, nil
}
-func (m *NotificationAutoTypeWidgetAdded) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
-}
-
-func (m *NotificationAutoTypeWidgetAdded) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *NotificationAutoTypeWidgetAdded) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if len(m.WidgetBlockId) > 0 {
- i -= len(m.WidgetBlockId)
- copy(dAtA[i:], m.WidgetBlockId)
- i = encodeVarintModels(dAtA, i, uint64(len(m.WidgetBlockId)))
- i--
- dAtA[i] = 0x1a
- }
- if len(m.TypePluralName) > 0 {
- i -= len(m.TypePluralName)
- copy(dAtA[i:], m.TypePluralName)
- i = encodeVarintModels(dAtA, i, uint64(len(m.TypePluralName)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.SpaceId) > 0 {
- i -= len(m.SpaceId)
- copy(dAtA[i:], m.SpaceId)
- i = encodeVarintModels(dAtA, i, uint64(len(m.SpaceId)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
func (m *Export) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -17917,6 +17791,9 @@ func (m *BlockContentWidget) Size() (n int) {
if l > 0 {
n += 1 + l + sovModels(uint64(l))
}
+ if m.AutoAdded {
+ n += 2
+ }
return n
}
@@ -18838,18 +18715,6 @@ func (m *NotificationPayloadOfParticipantPermissionsChange) Size() (n int) {
}
return n
}
-func (m *NotificationPayloadOfAutoTypeWidgetAdded) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.AutoTypeWidgetAdded != nil {
- l = m.AutoTypeWidgetAdded.Size()
- n += 2 + l + sovModels(uint64(l))
- }
- return n
-}
func (m *NotificationImport) Size() (n int) {
if m == nil {
return 0
@@ -19077,27 +18942,6 @@ func (m *NotificationParticipantPermissionsChange) Size() (n int) {
return n
}
-func (m *NotificationAutoTypeWidgetAdded) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.SpaceId)
- if l > 0 {
- n += 1 + l + sovModels(uint64(l))
- }
- l = len(m.TypePluralName)
- if l > 0 {
- n += 1 + l + sovModels(uint64(l))
- }
- l = len(m.WidgetBlockId)
- if l > 0 {
- n += 1 + l + sovModels(uint64(l))
- }
- return n
-}
-
func (m *Export) Size() (n int) {
if m == nil {
return 0
@@ -26116,6 +25960,26 @@ func (m *BlockContentWidget) Unmarshal(dAtA []byte) error {
}
m.ViewId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AutoAdded", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowModels
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.AutoAdded = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipModels(dAtA[iNdEx:])
@@ -31727,41 +31591,6 @@ func (m *Notification) Unmarshal(dAtA []byte) error {
}
m.Payload = &NotificationPayloadOfParticipantPermissionsChange{v}
iNdEx = postIndex
- case 19:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AutoTypeWidgetAdded", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowModels
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthModels
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthModels
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- v := &NotificationAutoTypeWidgetAdded{}
- if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- m.Payload = &NotificationPayloadOfAutoTypeWidgetAdded{v}
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipModels(dAtA[iNdEx:])
@@ -33344,152 +33173,6 @@ func (m *NotificationParticipantPermissionsChange) Unmarshal(dAtA []byte) error
}
return nil
}
-func (m *NotificationAutoTypeWidgetAdded) Unmarshal(dAtA []byte) error {
- l := len(dAtA)
- iNdEx := 0
- for iNdEx < l {
- preIndex := iNdEx
- var wire uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowModels
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- wire |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- fieldNum := int32(wire >> 3)
- wireType := int(wire & 0x7)
- if wireType == 4 {
- return fmt.Errorf("proto: AutoTypeWidgetAdded: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: AutoTypeWidgetAdded: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field SpaceId", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowModels
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthModels
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthModels
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.SpaceId = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TypePluralName", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowModels
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthModels
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthModels
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.TypePluralName = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field WidgetBlockId", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowModels
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthModels
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthModels
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.WidgetBlockId = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- default:
- iNdEx = preIndex
- skippy, err := skipModels(dAtA[iNdEx:])
- if err != nil {
- return err
- }
- if (skippy < 0) || (iNdEx+skippy) < 0 {
- return ErrInvalidLengthModels
- }
- if (iNdEx + skippy) > l {
- return io.ErrUnexpectedEOF
- }
- iNdEx += skippy
- }
- }
-
- if iNdEx > l {
- return io.ErrUnexpectedEOF
- }
- return nil
-}
func (m *Export) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto
index 080995757..d27fca58d 100644
--- a/pkg/lib/pb/model/protos/models.proto
+++ b/pkg/lib/pb/model/protos/models.proto
@@ -593,6 +593,7 @@ message Block {
Layout layout = 1;
int32 limit = 2;
string viewId = 3;
+ bool autoAdded = 4;
enum Layout {
Link = 0;
@@ -1055,7 +1056,6 @@ message Notification {
ParticipantRemove participantRemove = 16;
ParticipantRequestDecline participantRequestDecline = 17;
ParticipantPermissionsChange participantPermissionsChange = 18;
- AutoTypeWidgetAdded autoTypeWidgetAdded = 19;
}
string space = 7;
string aclHeadId = 14;
@@ -1140,12 +1140,6 @@ message Notification {
enum ActionType {
CLOSE = 0;
}
-
- message AutoTypeWidgetAdded {
- string spaceId = 1;
- string typePluralName = 2; // fallback to singular if missing
- string widgetBlockId = 3;
- }
}
message Export {
diff --git a/util/builtinobjects/builtinobjects.go b/util/builtinobjects/builtinobjects.go
index da7661a8f..c366295fe 100644
--- a/util/builtinobjects/builtinobjects.go
+++ b/util/builtinobjects/builtinobjects.go
@@ -405,7 +405,7 @@ func (b *builtinObjects) createWidgets(ctx session.Context, spaceId string, useC
}
if err = cache.DoStateCtx(b.objectGetter, ctx, widgetObjectID, func(s *state.State, w widget.Widget) error {
for _, targetId := range widgetTargetsToCreate {
- if err := w.AddAutoWidget(s, targetId, "", addr.ObjectTypeAllViewId, model.BlockContentWidget_View); err != nil {
+ if err := w.AddAutoWidget(s, targetId, "", addr.ObjectTypeAllViewId, model.BlockContentWidget_View, ""); err != nil {
log.Errorf("failed to create widget block for type '%s': %v", targetId, err)
}
}
From ad48949f80c541fc8ec4b111a6b6daa35603743a Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Fri, 28 Mar 2025 17:38:41 +0100
Subject: [PATCH 109/132] GO-5303 fox
---
core/block/editor/widget/widget.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/block/editor/widget/widget.go b/core/block/editor/widget/widget.go
index 252320577..5bae98a46 100644
--- a/core/block/editor/widget/widget.go
+++ b/core/block/editor/widget/widget.go
@@ -21,7 +21,7 @@ const (
DefaultWidgetCollection = "collection"
DefaultWidgetBin = "bin"
DefaultWidgetRecentOpen = "recentOpen"
- autoWidgetBlockIdPrefix = "auto_" // in case blockId is specifically provided to avoid bad tree merges
+ autoWidgetBlockSuffix = "-wrapper" // in case blockId is specifically provided to avoid bad tree merges
)
type Widget interface {
@@ -177,8 +177,8 @@ func (w *widget) createBlock(s *state.State, req *pb.RpcBlockCreateWidgetRequest
}
var wrapperBlockId string
- if b.Model().Id != "" {
- wrapperBlockId = autoWidgetBlockIdPrefix + b.Model().Id
+ if b.Model().Id != "" && isAutoAdded {
+ wrapperBlockId = b.Model().Id + autoWidgetBlockSuffix
}
wrapper := simple.New(&model.Block{
From ea62935ac5e1b7abf772a1060f23ec7c68476494 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Fri, 28 Mar 2025 17:40:04 +0100
Subject: [PATCH 110/132] GO-5303 remove notification model changes
---
docs/proto.md | 1 -
pkg/lib/pb/model/models.pb.go | 1198 +++++++++++++-------------
pkg/lib/pb/model/protos/models.proto | 1 -
3 files changed, 578 insertions(+), 622 deletions(-)
diff --git a/docs/proto.md b/docs/proto.md
index d985af57e..32db412ba 100644
--- a/docs/proto.md
+++ b/docs/proto.md
@@ -31119,7 +31119,6 @@ Used to decode block meta only, without the content itself
| createTime | [int64](#int64) | | |
| status | [Notification.Status](#anytype-model-Notification-Status) | | |
| isLocal | [bool](#bool) | | |
-| isToast | [bool](#bool) | | means it should automatically hide after some time if client window is active |
| import | [Notification.Import](#anytype-model-Notification-Import) | | |
| export | [Notification.Export](#anytype-model-Notification-Export) | | |
| galleryImport | [Notification.GalleryImport](#anytype-model-Notification-GalleryImport) | | |
diff --git a/pkg/lib/pb/model/models.pb.go b/pkg/lib/pb/model/models.pb.go
index 67122633a..546fd6ea9 100644
--- a/pkg/lib/pb/model/models.pb.go
+++ b/pkg/lib/pb/model/models.pb.go
@@ -7351,7 +7351,6 @@ type Notification struct {
CreateTime int64 `protobuf:"varint,2,opt,name=createTime,proto3" json:"createTime,omitempty"`
Status NotificationStatus `protobuf:"varint,4,opt,name=status,proto3,enum=anytype.model.NotificationStatus" json:"status,omitempty"`
IsLocal bool `protobuf:"varint,5,opt,name=isLocal,proto3" json:"isLocal,omitempty"`
- IsToast bool `protobuf:"varint,3,opt,name=isToast,proto3" json:"isToast,omitempty"`
// Types that are valid to be assigned to Payload:
//
// *NotificationPayloadOfImport
@@ -7485,13 +7484,6 @@ func (m *Notification) GetIsLocal() bool {
return false
}
-func (m *Notification) GetIsToast() bool {
- if m != nil {
- return m.IsToast
- }
- return false
-}
-
func (m *Notification) GetImport() *NotificationImport {
if x, ok := m.GetPayload().(*NotificationPayloadOfImport); ok {
return x.Import
@@ -9837,585 +9829,584 @@ func init() {
}
var fileDescriptor_98a910b73321e591 = []byte{
- // 9237 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x8c, 0x23, 0xc9,
- 0x91, 0x58, 0xf3, 0x4d, 0x06, 0x9b, 0xdd, 0xd9, 0x39, 0x2f, 0x8a, 0x1a, 0x8d, 0x47, 0xd4, 0x6a,
- 0x77, 0x34, 0x5a, 0xf5, 0xec, 0xce, 0xee, 0x6a, 0x57, 0x2b, 0xed, 0x4a, 0xec, 0x6e, 0xf6, 0x34,
- 0x77, 0xfa, 0xa5, 0x22, 0x67, 0x46, 0xbb, 0xb8, 0x73, 0xbb, 0x9a, 0x95, 0x4d, 0x96, 0xba, 0x58,
- 0x45, 0x55, 0x25, 0x7b, 0xba, 0x05, 0xdb, 0x90, 0x5f, 0x77, 0xbe, 0x3f, 0xd9, 0xf0, 0xd9, 0x3e,
- 0x18, 0xc6, 0x49, 0x1f, 0x06, 0x0c, 0xdf, 0x19, 0xfe, 0x12, 0xec, 0xf3, 0x03, 0xf0, 0xf9, 0xcb,
- 0x80, 0x7f, 0x64, 0x7f, 0x19, 0xf0, 0x01, 0x36, 0xb4, 0x80, 0x7f, 0x0c, 0xfb, 0x70, 0x06, 0x0c,
- 0x08, 0x86, 0x3f, 0x8c, 0x88, 0xcc, 0x7a, 0x91, 0xec, 0x1e, 0xce, 0xde, 0x9d, 0xe1, 0xaf, 0x66,
- 0x44, 0x45, 0x44, 0xe5, 0x23, 0x32, 0x32, 0x22, 0x32, 0xb2, 0x1a, 0x5e, 0x19, 0x9f, 0x0e, 0x1e,
- 0x38, 0xf6, 0xf1, 0x83, 0xf1, 0xf1, 0x83, 0x91, 0x67, 0x09, 0xe7, 0xc1, 0xd8, 0xf7, 0xa4, 0x17,
- 0x28, 0x20, 0x58, 0x27, 0x88, 0xd7, 0x4c, 0xf7, 0x42, 0x5e, 0x8c, 0xc5, 0x3a, 0x61, 0x1b, 0xb7,
- 0x07, 0x9e, 0x37, 0x70, 0x84, 0x22, 0x3d, 0x9e, 0x9c, 0x3c, 0x08, 0xa4, 0x3f, 0xe9, 0x4b, 0x45,
- 0xdc, 0xfc, 0x79, 0x1e, 0x6e, 0x76, 0x47, 0xa6, 0x2f, 0x37, 0x1c, 0xaf, 0x7f, 0xda, 0x75, 0xcd,
- 0x71, 0x30, 0xf4, 0xe4, 0x86, 0x19, 0x08, 0xfe, 0x3a, 0x14, 0x8f, 0x11, 0x19, 0xd4, 0x33, 0x77,
- 0x73, 0xf7, 0xaa, 0x0f, 0xaf, 0xaf, 0xa7, 0x04, 0xaf, 0x13, 0x87, 0xa1, 0x69, 0xf8, 0x9b, 0x50,
- 0xb2, 0x84, 0x34, 0x6d, 0x27, 0xa8, 0x67, 0xef, 0x66, 0xee, 0x55, 0x1f, 0xde, 0x5a, 0x57, 0x2f,
- 0x5e, 0x0f, 0x5f, 0xbc, 0xde, 0xa5, 0x17, 0x1b, 0x21, 0x1d, 0x7f, 0x17, 0xca, 0x27, 0xb6, 0x23,
- 0x1e, 0x8b, 0x8b, 0xa0, 0x9e, 0xbb, 0x92, 0x67, 0x23, 0x5b, 0xcf, 0x18, 0x11, 0x31, 0xdf, 0x84,
- 0x15, 0x71, 0x2e, 0x7d, 0xd3, 0x10, 0x8e, 0x29, 0x6d, 0xcf, 0x0d, 0xea, 0x79, 0x6a, 0xe1, 0xad,
- 0xa9, 0x16, 0x86, 0xcf, 0x89, 0x7d, 0x8a, 0x85, 0xdf, 0x85, 0xaa, 0x77, 0xfc, 0x7d, 0xd1, 0x97,
- 0xbd, 0x8b, 0xb1, 0x08, 0xea, 0x85, 0xbb, 0xb9, 0x7b, 0x15, 0x23, 0x89, 0xe2, 0xdf, 0x80, 0x6a,
- 0xdf, 0x73, 0x1c, 0xd1, 0x57, 0xef, 0x28, 0x5e, 0xdd, 0xad, 0x24, 0x2d, 0x7f, 0x1b, 0x6e, 0xf8,
- 0x62, 0xe4, 0x9d, 0x09, 0x6b, 0x33, 0xc2, 0x52, 0x3f, 0xcb, 0xf4, 0x9a, 0xf9, 0x0f, 0x79, 0x0b,
- 0x6a, 0xbe, 0x6e, 0xdf, 0xae, 0xed, 0x9e, 0x06, 0xf5, 0x12, 0x75, 0xeb, 0xf3, 0x97, 0x74, 0x0b,
- 0x69, 0x8c, 0x34, 0x07, 0x67, 0x90, 0x3b, 0x15, 0x17, 0xf5, 0xca, 0xdd, 0xcc, 0xbd, 0x8a, 0x81,
- 0x3f, 0xf9, 0xfb, 0x50, 0xf7, 0x7c, 0x7b, 0x60, 0xbb, 0xa6, 0xb3, 0xe9, 0x0b, 0x53, 0x0a, 0xab,
- 0x67, 0x8f, 0x44, 0x20, 0xcd, 0xd1, 0xb8, 0x0e, 0x77, 0x33, 0xf7, 0x72, 0xc6, 0xa5, 0xcf, 0xf9,
- 0x5b, 0x6a, 0x86, 0x3a, 0xee, 0x89, 0x57, 0xaf, 0xea, 0xee, 0xa7, 0xdb, 0xb2, 0xad, 0x1f, 0x1b,
- 0x11, 0x61, 0xf3, 0x97, 0x59, 0x28, 0x76, 0x85, 0xe9, 0xf7, 0x87, 0x8d, 0x5f, 0xcf, 0x40, 0xd1,
- 0x10, 0xc1, 0xc4, 0x91, 0xbc, 0x01, 0x65, 0x35, 0xb6, 0x1d, 0xab, 0x9e, 0xa1, 0xd6, 0x45, 0xf0,
- 0x67, 0xd1, 0x9d, 0x75, 0xc8, 0x8f, 0x84, 0x34, 0xeb, 0x39, 0x1a, 0xa1, 0xc6, 0x54, 0xab, 0xd4,
- 0xeb, 0xd7, 0xf7, 0x84, 0x34, 0x0d, 0xa2, 0x6b, 0x7c, 0x9a, 0x81, 0x3c, 0x82, 0xfc, 0x36, 0x54,
- 0x86, 0xf6, 0x60, 0xe8, 0xd8, 0x83, 0xa1, 0xd4, 0x0d, 0x89, 0x11, 0xfc, 0x43, 0x58, 0x8d, 0x00,
- 0xc3, 0x74, 0x07, 0x02, 0x5b, 0x34, 0x4f, 0xf9, 0xe9, 0xa1, 0x31, 0x4d, 0xcc, 0xeb, 0x50, 0xa2,
- 0xf5, 0xd0, 0xb1, 0x48, 0xa3, 0x2b, 0x46, 0x08, 0xa2, 0xba, 0x85, 0x33, 0xf5, 0x58, 0x5c, 0xd4,
- 0xf3, 0xf4, 0x34, 0x89, 0xe2, 0x2d, 0x58, 0x0d, 0xc1, 0x2d, 0x3d, 0x1a, 0x85, 0xab, 0x47, 0x63,
- 0x9a, 0xbe, 0xf9, 0xa3, 0x3d, 0x28, 0xd0, 0xb2, 0xe4, 0x2b, 0x90, 0xb5, 0xc3, 0x81, 0xce, 0xda,
- 0x16, 0x7f, 0x00, 0xc5, 0x13, 0x5b, 0x38, 0xd6, 0x0b, 0x47, 0x58, 0x93, 0xf1, 0x36, 0x2c, 0xfb,
- 0x22, 0x90, 0xbe, 0xad, 0xb5, 0x5f, 0x2d, 0xd0, 0x2f, 0xce, 0xb3, 0x01, 0xeb, 0x46, 0x82, 0xd0,
- 0x48, 0xb1, 0x61, 0xb7, 0xfb, 0x43, 0xdb, 0xb1, 0x7c, 0xe1, 0x76, 0x2c, 0xb5, 0x4e, 0x2b, 0x46,
- 0x12, 0xc5, 0xef, 0xc1, 0xea, 0xb1, 0xd9, 0x3f, 0x1d, 0xf8, 0xde, 0xc4, 0xc5, 0x05, 0xe1, 0xf9,
- 0xd4, 0xed, 0x8a, 0x31, 0x8d, 0xe6, 0x6f, 0x40, 0xc1, 0x74, 0xec, 0x81, 0x4b, 0x2b, 0x71, 0x65,
- 0x66, 0xd2, 0x55, 0x5b, 0x5a, 0x48, 0x61, 0x28, 0x42, 0xbe, 0x03, 0xb5, 0x33, 0xe1, 0x4b, 0xbb,
- 0x6f, 0x3a, 0x84, 0xaf, 0x97, 0x88, 0xb3, 0x39, 0x97, 0xf3, 0x69, 0x92, 0xd2, 0x48, 0x33, 0xf2,
- 0x0e, 0x40, 0x80, 0x66, 0x92, 0xa6, 0x53, 0xaf, 0x85, 0xd7, 0xe6, 0x8a, 0xd9, 0xf4, 0x5c, 0x29,
- 0x5c, 0xb9, 0xde, 0x8d, 0xc8, 0x77, 0x96, 0x8c, 0x04, 0x33, 0x7f, 0x17, 0xf2, 0x52, 0x9c, 0xcb,
- 0xfa, 0xca, 0x15, 0x23, 0x1a, 0x0a, 0xe9, 0x89, 0x73, 0xb9, 0xb3, 0x64, 0x10, 0x03, 0x32, 0xe2,
- 0x22, 0xab, 0xaf, 0x2e, 0xc0, 0x88, 0xeb, 0x12, 0x19, 0x91, 0x81, 0x7f, 0x00, 0x45, 0xc7, 0xbc,
- 0xf0, 0x26, 0xb2, 0xce, 0x88, 0xf5, 0x4b, 0x57, 0xb2, 0xee, 0x12, 0xe9, 0xce, 0x92, 0xa1, 0x99,
- 0xf8, 0xdb, 0x90, 0xb3, 0xec, 0xb3, 0xfa, 0x1a, 0xf1, 0xde, 0xbd, 0x92, 0x77, 0xcb, 0x3e, 0xdb,
- 0x59, 0x32, 0x90, 0x9c, 0x6f, 0x42, 0xf9, 0xd8, 0xf3, 0x4e, 0x47, 0xa6, 0x7f, 0x5a, 0xe7, 0xc4,
- 0xfa, 0xe5, 0x2b, 0x59, 0x37, 0x34, 0xf1, 0xce, 0x92, 0x11, 0x31, 0x62, 0x97, 0xed, 0xbe, 0xe7,
- 0xd6, 0xaf, 0x2d, 0xd0, 0xe5, 0x4e, 0xdf, 0x73, 0xb1, 0xcb, 0xc8, 0x80, 0x8c, 0x8e, 0xed, 0x9e,
- 0xd6, 0xaf, 0x2f, 0xc0, 0x88, 0x96, 0x13, 0x19, 0x91, 0x01, 0x9b, 0x6d, 0x99, 0xd2, 0x3c, 0xb3,
- 0xc5, 0xf3, 0xfa, 0x8d, 0x05, 0x9a, 0xbd, 0xa5, 0x89, 0xb1, 0xd9, 0x21, 0x23, 0x0a, 0x09, 0x97,
- 0x66, 0xfd, 0xe6, 0x02, 0x42, 0x42, 0x8b, 0x8e, 0x42, 0x42, 0x46, 0xfe, 0x67, 0x61, 0xed, 0x44,
- 0x98, 0x72, 0xe2, 0x0b, 0x2b, 0xde, 0xe8, 0x6e, 0x91, 0xb4, 0xf5, 0xab, 0xe7, 0x7e, 0x9a, 0x6b,
- 0x67, 0xc9, 0x98, 0x15, 0xc5, 0xdf, 0x87, 0x82, 0x63, 0x4a, 0x71, 0x5e, 0xaf, 0x93, 0xcc, 0xe6,
- 0x0b, 0x94, 0x42, 0x8a, 0xf3, 0x9d, 0x25, 0x43, 0xb1, 0xf0, 0xef, 0xc1, 0xaa, 0x34, 0x8f, 0x1d,
- 0x71, 0x70, 0xa2, 0x09, 0x82, 0xfa, 0xe7, 0x48, 0xca, 0xeb, 0x57, 0xab, 0x73, 0x9a, 0x67, 0x67,
- 0xc9, 0x98, 0x16, 0x83, 0xad, 0x22, 0x54, 0xbd, 0xb1, 0x40, 0xab, 0x48, 0x1e, 0xb6, 0x8a, 0x58,
- 0xf8, 0x2e, 0x54, 0xe9, 0xc7, 0xa6, 0xe7, 0x4c, 0x46, 0x6e, 0xfd, 0xf3, 0x24, 0xe1, 0xde, 0x8b,
- 0x25, 0x28, 0xfa, 0x9d, 0x25, 0x23, 0xc9, 0x8e, 0x93, 0x48, 0xa0, 0xe1, 0x3d, 0xaf, 0xdf, 0x5e,
- 0x60, 0x12, 0x7b, 0x9a, 0x18, 0x27, 0x31, 0x64, 0xc4, 0xa5, 0xf7, 0xdc, 0xb6, 0x06, 0x42, 0xd6,
- 0xbf, 0xb0, 0xc0, 0xd2, 0x7b, 0x46, 0xa4, 0xb8, 0xf4, 0x14, 0x13, 0xaa, 0x71, 0x7f, 0x68, 0xca,
- 0xfa, 0x9d, 0x05, 0xd4, 0x78, 0x73, 0x68, 0x92, 0xad, 0x40, 0x86, 0xc6, 0x0f, 0x61, 0x39, 0x69,
- 0x95, 0x39, 0x87, 0xbc, 0x2f, 0x4c, 0xb5, 0x23, 0x94, 0x0d, 0xfa, 0x8d, 0x38, 0x61, 0xd9, 0x92,
- 0x76, 0x84, 0xb2, 0x41, 0xbf, 0xf9, 0x4d, 0x28, 0x2a, 0xdf, 0x84, 0x0c, 0x7e, 0xd9, 0xd0, 0x10,
- 0xd2, 0x5a, 0xbe, 0x39, 0xa0, 0x7d, 0xab, 0x6c, 0xd0, 0x6f, 0xa4, 0xb5, 0x7c, 0x6f, 0x7c, 0xe0,
- 0x92, 0xc1, 0x2e, 0x1b, 0x1a, 0x6a, 0x7c, 0xfa, 0x01, 0x94, 0x74, 0xa3, 0x1a, 0x7f, 0x3f, 0x03,
- 0x45, 0x65, 0x50, 0xf8, 0xb7, 0xa1, 0x10, 0xc8, 0x0b, 0x47, 0x50, 0x1b, 0x56, 0x1e, 0x7e, 0x65,
- 0x01, 0x23, 0xb4, 0xde, 0x45, 0x06, 0x43, 0xf1, 0x35, 0x0d, 0x28, 0x10, 0xcc, 0x4b, 0x90, 0x33,
- 0xbc, 0xe7, 0x6c, 0x89, 0x03, 0x14, 0xd5, 0x64, 0xb1, 0x0c, 0x22, 0xb7, 0xec, 0x33, 0x96, 0x45,
- 0xe4, 0x8e, 0x30, 0x2d, 0xe1, 0xb3, 0x1c, 0xaf, 0x41, 0x25, 0x9c, 0x96, 0x80, 0xe5, 0x39, 0x83,
- 0xe5, 0xc4, 0x84, 0x07, 0xac, 0xd0, 0xf8, 0x9f, 0x79, 0xc8, 0xe3, 0xfa, 0xe7, 0xaf, 0x40, 0x4d,
- 0x9a, 0xfe, 0x40, 0x28, 0x47, 0x38, 0x72, 0x52, 0xd2, 0x48, 0xfe, 0x41, 0xd8, 0x87, 0x2c, 0xf5,
- 0xe1, 0xb5, 0x17, 0xda, 0x95, 0x54, 0x0f, 0x12, 0xbb, 0x70, 0x6e, 0xb1, 0x5d, 0x78, 0x1b, 0xca,
- 0x68, 0xce, 0xba, 0xf6, 0x0f, 0x05, 0x0d, 0xfd, 0xca, 0xc3, 0xfb, 0x2f, 0x7e, 0x65, 0x47, 0x73,
- 0x18, 0x11, 0x2f, 0xef, 0x40, 0xa5, 0x6f, 0xfa, 0x16, 0x35, 0x86, 0x66, 0x6b, 0xe5, 0xe1, 0x57,
- 0x5f, 0x2c, 0x68, 0x33, 0x64, 0x31, 0x62, 0x6e, 0x7e, 0x00, 0x55, 0x4b, 0x04, 0x7d, 0xdf, 0x1e,
- 0x93, 0x79, 0x53, 0x7b, 0xf1, 0xd7, 0x5e, 0x2c, 0x6c, 0x2b, 0x66, 0x32, 0x92, 0x12, 0xd0, 0x23,
- 0xf3, 0x23, 0xfb, 0x56, 0x22, 0x07, 0x21, 0x46, 0x34, 0xdf, 0x85, 0x72, 0xd8, 0x1f, 0xbe, 0x0c,
- 0x65, 0xfc, 0xbb, 0xef, 0xb9, 0x82, 0x2d, 0xe1, 0xdc, 0x22, 0xd4, 0x1d, 0x99, 0x8e, 0xc3, 0x32,
- 0x7c, 0x05, 0x00, 0xc1, 0x3d, 0x61, 0xd9, 0x93, 0x11, 0xcb, 0x36, 0xbf, 0x19, 0x6a, 0x4b, 0x19,
- 0xf2, 0x87, 0xe6, 0x00, 0x39, 0x96, 0xa1, 0x1c, 0x9a, 0x6b, 0x96, 0x41, 0xfe, 0x2d, 0x33, 0x18,
- 0x1e, 0x7b, 0xa6, 0x6f, 0xb1, 0x2c, 0xaf, 0x42, 0xa9, 0xe5, 0xf7, 0x87, 0xf6, 0x99, 0x60, 0xb9,
- 0xe6, 0x03, 0xa8, 0x26, 0xda, 0x8b, 0x22, 0xf4, 0x4b, 0x2b, 0x50, 0x68, 0x59, 0x96, 0xb0, 0x58,
- 0x06, 0x19, 0x74, 0x07, 0x59, 0xb6, 0xf9, 0x55, 0xa8, 0x44, 0xa3, 0x85, 0xe4, 0xb8, 0x71, 0xb3,
- 0x25, 0xfc, 0x85, 0x68, 0x96, 0x41, 0xad, 0xec, 0xb8, 0x8e, 0xed, 0x0a, 0x96, 0x6d, 0xfc, 0x39,
- 0x52, 0x55, 0xfe, 0xad, 0xf4, 0x82, 0x78, 0xf5, 0x45, 0x3b, 0x6b, 0x7a, 0x35, 0x7c, 0x3e, 0xd1,
- 0xbf, 0x5d, 0x9b, 0x1a, 0x57, 0x86, 0xfc, 0x96, 0x27, 0x03, 0x96, 0x69, 0xfc, 0xb7, 0x2c, 0x94,
- 0xc3, 0x0d, 0x15, 0x63, 0x82, 0x89, 0xef, 0x68, 0x85, 0xc6, 0x9f, 0xfc, 0x3a, 0x14, 0xa4, 0x2d,
- 0xb5, 0x1a, 0x57, 0x0c, 0x05, 0xa0, 0xaf, 0x96, 0x9c, 0x59, 0xe5, 0xc0, 0x4e, 0x4f, 0x95, 0x3d,
- 0x32, 0x07, 0x62, 0xc7, 0x0c, 0x86, 0xda, 0x85, 0x8d, 0x11, 0xc8, 0x7f, 0x62, 0x9e, 0xa1, 0xce,
- 0xd1, 0x73, 0xe5, 0xc5, 0x25, 0x51, 0xfc, 0x2d, 0xc8, 0x63, 0x07, 0xb5, 0xd2, 0xfc, 0x99, 0xa9,
- 0x0e, 0xa3, 0x9a, 0x1c, 0xfa, 0x02, 0xa7, 0x67, 0x1d, 0x23, 0x30, 0x83, 0x88, 0xf9, 0xab, 0xb0,
- 0xa2, 0x16, 0xe1, 0x41, 0x18, 0x3f, 0x94, 0x48, 0xf2, 0x14, 0x96, 0xb7, 0x70, 0x38, 0x4d, 0x29,
- 0xea, 0xe5, 0x05, 0xf4, 0x3b, 0x1c, 0x9c, 0xf5, 0x2e, 0xb2, 0x18, 0x8a, 0xb3, 0xf9, 0x0e, 0x8e,
- 0xa9, 0x29, 0x05, 0x4e, 0x73, 0x7b, 0x34, 0x96, 0x17, 0x4a, 0x69, 0xb6, 0x85, 0xec, 0x0f, 0x6d,
- 0x77, 0xc0, 0x32, 0x6a, 0x88, 0x71, 0x12, 0x89, 0xc4, 0xf7, 0x3d, 0x9f, 0xe5, 0x1a, 0x0d, 0xc8,
- 0xa3, 0x8e, 0xa2, 0x91, 0x74, 0xcd, 0x91, 0xd0, 0x23, 0x4d, 0xbf, 0x1b, 0xd7, 0x60, 0x6d, 0x66,
- 0x3f, 0x6e, 0xfc, 0x5e, 0x51, 0x69, 0x08, 0x72, 0x90, 0x2f, 0xa8, 0x39, 0xc8, 0xcd, 0x7b, 0x29,
- 0x1b, 0x83, 0x52, 0xd2, 0x36, 0xe6, 0x03, 0x28, 0x60, 0xc7, 0x42, 0x13, 0xb3, 0x00, 0xfb, 0x1e,
- 0x92, 0x1b, 0x8a, 0x0b, 0x23, 0x98, 0xfe, 0x50, 0xf4, 0x4f, 0x85, 0xa5, 0x6d, 0x7d, 0x08, 0xa2,
- 0xd2, 0xf4, 0x13, 0xee, 0xb9, 0x02, 0x48, 0x25, 0xfa, 0x9e, 0xdb, 0x1e, 0x79, 0xdf, 0xb7, 0x69,
- 0x5e, 0x51, 0x25, 0x42, 0x44, 0xf8, 0xb4, 0x83, 0x3a, 0xa2, 0xa7, 0x2d, 0x46, 0x34, 0xda, 0x50,
- 0xa0, 0x77, 0xe3, 0x4a, 0x50, 0x6d, 0x56, 0x99, 0x86, 0x57, 0x17, 0x6b, 0xb3, 0x6e, 0x72, 0xe3,
- 0x77, 0xb3, 0x90, 0x47, 0x98, 0xdf, 0x87, 0x82, 0x8f, 0x71, 0x18, 0x0d, 0xe7, 0x65, 0x31, 0x9b,
- 0x22, 0xe1, 0xdf, 0xd6, 0xaa, 0x98, 0x5d, 0x40, 0x59, 0xa2, 0x37, 0x26, 0xd5, 0xf2, 0x3a, 0x14,
- 0xc6, 0xa6, 0x6f, 0x8e, 0xf4, 0x3a, 0x51, 0x40, 0xf3, 0x27, 0x19, 0xc8, 0x23, 0x11, 0x5f, 0x83,
- 0x5a, 0x57, 0xfa, 0xf6, 0xa9, 0x90, 0x43, 0xdf, 0x9b, 0x0c, 0x86, 0x4a, 0x93, 0x1e, 0x8b, 0x0b,
- 0x65, 0x6f, 0x94, 0x41, 0x90, 0xa6, 0x63, 0xf7, 0x59, 0x16, 0xb5, 0x6a, 0xc3, 0x73, 0x2c, 0x96,
- 0xe3, 0xab, 0x50, 0x7d, 0xe2, 0x5a, 0xc2, 0x0f, 0xfa, 0x9e, 0x2f, 0x2c, 0x96, 0xd7, 0xab, 0xfb,
- 0x94, 0x15, 0x68, 0x2f, 0x13, 0xe7, 0x92, 0x62, 0x21, 0x56, 0xe4, 0xd7, 0x60, 0x75, 0x23, 0x1d,
- 0x20, 0xb1, 0x12, 0xda, 0xa4, 0x3d, 0xe1, 0xa2, 0x92, 0xb1, 0xb2, 0x52, 0x62, 0xef, 0xfb, 0x36,
- 0xab, 0xe0, 0xcb, 0xd4, 0x3a, 0x61, 0xd0, 0xfc, 0x97, 0x99, 0xd0, 0x72, 0xd4, 0xa0, 0x72, 0x68,
- 0xfa, 0xe6, 0xc0, 0x37, 0xc7, 0xd8, 0xbe, 0x2a, 0x94, 0xd4, 0xc6, 0xf9, 0xa6, 0xb2, 0x6e, 0x0a,
- 0x78, 0xa8, 0x6c, 0xa3, 0x02, 0xde, 0x62, 0xb9, 0x18, 0x78, 0x9b, 0xe5, 0xf1, 0x1d, 0xdf, 0x9d,
- 0x78, 0x52, 0xb0, 0x02, 0xd9, 0x3a, 0xcf, 0x12, 0xac, 0x88, 0xc8, 0x1e, 0x5a, 0x14, 0x56, 0xc2,
- 0x3e, 0x6f, 0xa2, 0xfe, 0x1c, 0x7b, 0xe7, 0xac, 0x8c, 0xcd, 0xc0, 0x61, 0x14, 0x16, 0xab, 0xe0,
- 0x93, 0xfd, 0xc9, 0xe8, 0x58, 0x60, 0x37, 0x01, 0x9f, 0xf4, 0xbc, 0xc1, 0xc0, 0x11, 0xac, 0x8a,
- 0x63, 0x90, 0x30, 0xbe, 0x6c, 0x99, 0x2c, 0xad, 0xe9, 0x38, 0xde, 0x44, 0xb2, 0x5a, 0xe3, 0x97,
- 0x39, 0xc8, 0x63, 0x74, 0x83, 0x6b, 0x67, 0x88, 0x76, 0x46, 0xaf, 0x1d, 0xfc, 0x1d, 0xad, 0xc0,
- 0x6c, 0xbc, 0x02, 0xf9, 0xfb, 0x7a, 0xa6, 0x73, 0x0b, 0x58, 0x59, 0x14, 0x9c, 0x9c, 0x64, 0x0e,
- 0xf9, 0x91, 0x3d, 0x12, 0xda, 0xd6, 0xd1, 0x6f, 0xc4, 0x05, 0xb8, 0x1f, 0x17, 0x28, 0x79, 0x42,
- 0xbf, 0x71, 0xd5, 0x98, 0xb8, 0x2d, 0xb4, 0x24, 0xad, 0x81, 0x9c, 0x11, 0x82, 0x73, 0xac, 0x57,
- 0x65, 0xae, 0xf5, 0xfa, 0x20, 0xb4, 0x5e, 0xa5, 0x05, 0x56, 0x3d, 0x35, 0x33, 0x69, 0xb9, 0x62,
- 0xa3, 0x51, 0x5e, 0x9c, 0x3d, 0xb1, 0x99, 0x6c, 0x69, 0xad, 0x8d, 0x37, 0xba, 0xb2, 0x1a, 0x65,
- 0x96, 0xc1, 0xd9, 0xa4, 0xe5, 0xaa, 0x6c, 0xde, 0x53, 0xdb, 0x12, 0x1e, 0xcb, 0xd1, 0x46, 0x38,
- 0xb1, 0x6c, 0x8f, 0xe5, 0xd1, 0xf3, 0x3a, 0xdc, 0xda, 0x66, 0x85, 0xe6, 0xab, 0x89, 0x2d, 0xa9,
- 0x35, 0x91, 0x9e, 0x12, 0x43, 0xea, 0x9b, 0x51, 0xda, 0x78, 0x2c, 0x2c, 0x96, 0x6d, 0x7e, 0x7d,
- 0x8e, 0x99, 0xad, 0x41, 0xe5, 0xc9, 0xd8, 0xf1, 0x4c, 0xeb, 0x0a, 0x3b, 0xbb, 0x0c, 0x10, 0x47,
- 0xd5, 0x8d, 0x5f, 0x36, 0xe3, 0xed, 0x1c, 0x7d, 0xd1, 0xc0, 0x9b, 0xf8, 0x7d, 0x41, 0x26, 0xa4,
- 0x62, 0x68, 0x88, 0x7f, 0x07, 0x0a, 0xf8, 0x3c, 0x4c, 0xe3, 0xdc, 0x5f, 0x28, 0x96, 0x5b, 0x7f,
- 0x6a, 0x8b, 0xe7, 0x86, 0x62, 0xe4, 0x77, 0x00, 0xcc, 0xbe, 0xb4, 0xcf, 0x04, 0x22, 0xf5, 0x62,
- 0x4f, 0x60, 0xf8, 0x3b, 0x49, 0xf7, 0xe5, 0xea, 0x3c, 0x64, 0xc2, 0xaf, 0xe1, 0x06, 0x54, 0x71,
- 0xe9, 0x8e, 0x0f, 0x7c, 0x5c, 0xed, 0xf5, 0x65, 0x62, 0x7c, 0x63, 0xb1, 0xe6, 0x3d, 0x8a, 0x18,
- 0x8d, 0xa4, 0x10, 0xfe, 0x04, 0x96, 0x55, 0x4e, 0x4d, 0x0b, 0xad, 0x91, 0xd0, 0x37, 0x17, 0x13,
- 0x7a, 0x10, 0x73, 0x1a, 0x29, 0x31, 0xb3, 0x69, 0xc9, 0xc2, 0x4b, 0xa7, 0x25, 0x5f, 0x85, 0x95,
- 0x5e, 0x7a, 0x15, 0xa8, 0xad, 0x62, 0x0a, 0xcb, 0x9b, 0xb0, 0x6c, 0x07, 0x71, 0x56, 0x94, 0x72,
- 0x24, 0x65, 0x23, 0x85, 0x6b, 0xfc, 0xfb, 0x22, 0xe4, 0x69, 0xe4, 0xa7, 0x73, 0x5c, 0x9b, 0x29,
- 0x93, 0xfe, 0x60, 0xf1, 0xa9, 0x9e, 0x5a, 0xf1, 0x64, 0x41, 0x72, 0x09, 0x0b, 0xf2, 0x1d, 0x28,
- 0x04, 0x9e, 0x2f, 0xc3, 0xe9, 0x5d, 0x50, 0x89, 0xba, 0x9e, 0x2f, 0x0d, 0xc5, 0xc8, 0xb7, 0xa1,
- 0x74, 0x62, 0x3b, 0x12, 0x27, 0x45, 0x0d, 0xde, 0xeb, 0x8b, 0xc9, 0xd8, 0x26, 0x26, 0x23, 0x64,
- 0xe6, 0xbb, 0x49, 0x65, 0x2b, 0x92, 0xa4, 0xf5, 0xc5, 0x24, 0xcd, 0xd3, 0xc1, 0xfb, 0xc0, 0xfa,
- 0xde, 0x99, 0xf0, 0x8d, 0x44, 0x62, 0x52, 0x6d, 0xd2, 0x33, 0x78, 0xde, 0x80, 0xf2, 0xd0, 0xb6,
- 0x04, 0xfa, 0x39, 0x64, 0x63, 0xca, 0x46, 0x04, 0xf3, 0xc7, 0x50, 0xa6, 0xf8, 0x00, 0xad, 0x62,
- 0xe5, 0xa5, 0x07, 0x5f, 0x85, 0x2a, 0xa1, 0x00, 0x7c, 0x11, 0xbd, 0x7c, 0xdb, 0x96, 0x94, 0x9f,
- 0x2e, 0x1b, 0x11, 0x8c, 0x0d, 0x26, 0x7d, 0x4f, 0x36, 0xb8, 0xaa, 0x1a, 0x3c, 0x8d, 0xe7, 0x6f,
- 0xc3, 0x0d, 0xc2, 0x4d, 0x6d, 0x92, 0xb8, 0xd4, 0x50, 0xe8, 0xfc, 0x87, 0xe8, 0xb0, 0x8c, 0xcd,
- 0x81, 0xd8, 0xb5, 0x47, 0xb6, 0xac, 0xd7, 0xee, 0x66, 0xee, 0x15, 0x8c, 0x18, 0xc1, 0x5f, 0x87,
- 0x35, 0x4b, 0x9c, 0x98, 0x13, 0x47, 0xf6, 0xc4, 0x68, 0xec, 0x98, 0x52, 0x74, 0x2c, 0xd2, 0xd1,
- 0x8a, 0x31, 0xfb, 0x80, 0xbf, 0x01, 0xd7, 0x34, 0xf2, 0x20, 0x3a, 0x55, 0xe8, 0x58, 0x94, 0xbe,
- 0xab, 0x18, 0xf3, 0x1e, 0x35, 0xf7, 0xb4, 0x19, 0xc6, 0x0d, 0x14, 0xe3, 0xd4, 0xd0, 0x80, 0x06,
- 0x52, 0xed, 0xc8, 0x8f, 0x4c, 0xc7, 0x11, 0xfe, 0x85, 0x0a, 0x72, 0x1f, 0x9b, 0xee, 0xb1, 0xe9,
- 0xb2, 0x1c, 0xed, 0xb1, 0xa6, 0x23, 0x5c, 0xcb, 0xf4, 0xd5, 0x8e, 0xfc, 0x88, 0x36, 0xf4, 0x42,
- 0xf3, 0x1e, 0xe4, 0x69, 0x48, 0x2b, 0x50, 0x50, 0x51, 0x12, 0x45, 0xcc, 0x3a, 0x42, 0x22, 0x8b,
- 0xbc, 0x8b, 0xcb, 0x8f, 0x65, 0x1b, 0xff, 0xa0, 0x08, 0xe5, 0x70, 0xf0, 0xc2, 0x33, 0x84, 0x4c,
- 0x7c, 0x86, 0x80, 0x6e, 0x5c, 0xf0, 0xd4, 0x0e, 0xec, 0x63, 0xed, 0x96, 0x96, 0x8d, 0x18, 0x81,
- 0x9e, 0xd0, 0x73, 0xdb, 0x92, 0x43, 0x5a, 0x33, 0x05, 0x43, 0x01, 0xfc, 0x1e, 0xac, 0x5a, 0x38,
- 0x0e, 0x6e, 0xdf, 0x99, 0x58, 0xa2, 0x87, 0xbb, 0xa8, 0x4a, 0x13, 0x4c, 0xa3, 0xf9, 0xc7, 0x00,
- 0xd2, 0x1e, 0x89, 0x6d, 0xcf, 0x1f, 0x99, 0x52, 0xc7, 0x06, 0xdf, 0x78, 0x39, 0xad, 0x5e, 0xef,
- 0x45, 0x02, 0x8c, 0x84, 0x30, 0x14, 0x8d, 0x6f, 0xd3, 0xa2, 0x4b, 0x9f, 0x49, 0xf4, 0x56, 0x24,
- 0xc0, 0x48, 0x08, 0xe3, 0x3d, 0x28, 0x9d, 0x78, 0xfe, 0x68, 0xe2, 0x98, 0x7a, 0xcf, 0x7d, 0xff,
- 0x25, 0xe5, 0x6e, 0x2b, 0x6e, 0xb2, 0x3d, 0xa1, 0xa8, 0x38, 0xc7, 0x5d, 0x59, 0x30, 0xc7, 0xdd,
- 0xfc, 0x15, 0x80, 0xb8, 0x85, 0xfc, 0x26, 0xf0, 0x3d, 0xcf, 0x95, 0xc3, 0xd6, 0xf1, 0xb1, 0xbf,
- 0x21, 0x4e, 0x3c, 0x5f, 0x6c, 0x99, 0xb8, 0xbd, 0xde, 0x80, 0xb5, 0x08, 0xdf, 0x3a, 0x91, 0xc2,
- 0x47, 0x34, 0xa9, 0x40, 0x77, 0xe8, 0xf9, 0x52, 0xf9, 0x78, 0xf4, 0xf3, 0x49, 0x97, 0xe5, 0x70,
- 0x4b, 0xef, 0x74, 0x0f, 0x58, 0xbe, 0x79, 0x0f, 0x20, 0x1e, 0x5a, 0x8a, 0x85, 0xe8, 0xd7, 0x9b,
- 0x0f, 0x75, 0x64, 0x44, 0xd0, 0xc3, 0xb7, 0x59, 0xa6, 0xf9, 0x8b, 0x0c, 0x54, 0x13, 0x5d, 0x4a,
- 0xc7, 0xcc, 0x9b, 0xde, 0xc4, 0x95, 0x2a, 0x48, 0xa7, 0x9f, 0x4f, 0x4d, 0x67, 0x82, 0x9b, 0xfb,
- 0x1a, 0xd4, 0x08, 0xde, 0xb2, 0x03, 0x69, 0xbb, 0x7d, 0xc9, 0x72, 0x11, 0x89, 0x72, 0x0c, 0xf2,
- 0x11, 0xc9, 0xbe, 0xa7, 0x51, 0x05, 0xce, 0x60, 0xf9, 0x50, 0xf8, 0x7d, 0x11, 0x12, 0x91, 0x33,
- 0xac, 0x31, 0x11, 0x99, 0x72, 0x86, 0x4d, 0x39, 0xec, 0x4e, 0x46, 0xac, 0x8c, 0x4e, 0x25, 0x02,
- 0xad, 0x33, 0xe1, 0xa3, 0x2f, 0x53, 0xc1, 0xf7, 0x20, 0x02, 0x57, 0x83, 0xe9, 0x32, 0x08, 0xa9,
- 0xf7, 0x6c, 0x97, 0x55, 0x23, 0xc0, 0x3c, 0x67, 0xcb, 0xd8, 0x7e, 0x0a, 0x1d, 0x58, 0xad, 0xf1,
- 0x5f, 0x73, 0x90, 0x47, 0xbb, 0x8e, 0xb1, 0x6e, 0xd2, 0x08, 0xa9, 0xb5, 0x92, 0x44, 0x7d, 0xb6,
- 0xdd, 0x08, 0x65, 0x27, 0x77, 0xa3, 0xf7, 0xa0, 0xda, 0x9f, 0x04, 0xd2, 0x1b, 0xd1, 0x56, 0xac,
- 0x4f, 0xbb, 0x6e, 0xce, 0x64, 0x8d, 0x68, 0x38, 0x8d, 0x24, 0x29, 0x7f, 0x07, 0x8a, 0x27, 0x4a,
- 0xeb, 0x55, 0xde, 0xe8, 0x0b, 0x97, 0xec, 0xd6, 0x5a, 0xb3, 0x35, 0x31, 0xf6, 0xcb, 0x9e, 0x59,
- 0xb1, 0x49, 0x94, 0xde, 0x75, 0x8b, 0xd1, 0xae, 0xfb, 0x2b, 0xb0, 0x22, 0x70, 0xc0, 0x0f, 0x1d,
- 0xb3, 0x2f, 0x46, 0xc2, 0x0d, 0x97, 0xd9, 0xdb, 0x2f, 0xd1, 0x63, 0x9a, 0x31, 0xea, 0xf6, 0x94,
- 0x2c, 0xb4, 0x3c, 0xae, 0x87, 0x9b, 0x7f, 0x18, 0xd8, 0x97, 0x8d, 0x18, 0xd1, 0xfc, 0xb2, 0xb6,
- 0x97, 0x25, 0xc8, 0xb5, 0x82, 0xbe, 0xce, 0x80, 0x88, 0xa0, 0xaf, 0xc2, 0xab, 0x4d, 0x1a, 0x0e,
- 0x96, 0x6d, 0xbe, 0x09, 0x95, 0xe8, 0x0d, 0xa8, 0x3c, 0xfb, 0x9e, 0xec, 0x8e, 0x45, 0xdf, 0x3e,
- 0xb1, 0x85, 0xa5, 0xf4, 0xb3, 0x2b, 0x4d, 0x5f, 0xaa, 0x24, 0x62, 0xdb, 0xb5, 0x58, 0xb6, 0xf1,
- 0x3b, 0x65, 0x28, 0xaa, 0xcd, 0x57, 0x77, 0xb8, 0x12, 0x75, 0xf8, 0xbb, 0x50, 0xf6, 0xc6, 0xc2,
- 0x37, 0xa5, 0xe7, 0xeb, 0xcc, 0xcd, 0x3b, 0x2f, 0xb3, 0x99, 0xaf, 0x1f, 0x68, 0x66, 0x23, 0x12,
- 0x33, 0xad, 0x4d, 0xd9, 0x59, 0x6d, 0xba, 0x0f, 0x2c, 0xdc, 0xb7, 0x0f, 0x7d, 0xe4, 0x93, 0x17,
- 0x3a, 0x0e, 0x9f, 0xc1, 0xf3, 0x1e, 0x54, 0xfa, 0x9e, 0x6b, 0xd9, 0x51, 0x16, 0x67, 0xe5, 0xe1,
- 0xd7, 0x5f, 0xaa, 0x85, 0x9b, 0x21, 0xb7, 0x11, 0x0b, 0xe2, 0xaf, 0x43, 0xe1, 0x0c, 0xd5, 0x8c,
- 0xf4, 0xe9, 0x72, 0x25, 0x54, 0x44, 0xfc, 0x13, 0xa8, 0xfe, 0x60, 0x62, 0xf7, 0x4f, 0x0f, 0x92,
- 0x59, 0xc2, 0xf7, 0x5e, 0xaa, 0x15, 0xdf, 0x8d, 0xf9, 0x8d, 0xa4, 0xb0, 0x84, 0x6a, 0x97, 0xfe,
- 0x18, 0xaa, 0x5d, 0x9e, 0x55, 0x6d, 0x03, 0x6a, 0xae, 0x08, 0xa4, 0xb0, 0xb6, 0xb5, 0xaf, 0x06,
- 0x9f, 0xc1, 0x57, 0x4b, 0x8b, 0x68, 0x7e, 0x09, 0xca, 0xe1, 0x84, 0xf3, 0x22, 0x64, 0xf7, 0x31,
- 0x28, 0x2a, 0x42, 0xf6, 0xc0, 0x57, 0xda, 0xd6, 0x42, 0x6d, 0x6b, 0xfe, 0x61, 0x06, 0x2a, 0xd1,
- 0xa0, 0xa7, 0x2d, 0x67, 0xfb, 0x07, 0x13, 0xd3, 0x61, 0x19, 0x0a, 0x97, 0x3d, 0xa9, 0x20, 0x32,
- 0xd6, 0x8f, 0xe8, 0xb0, 0xde, 0x67, 0x39, 0x72, 0x11, 0x44, 0x10, 0xb0, 0x3c, 0xe7, 0xb0, 0xa2,
- 0xd1, 0x07, 0xbe, 0x22, 0x2d, 0xa0, 0xe1, 0xc3, 0xa7, 0x21, 0xa2, 0xa8, 0x3c, 0x8a, 0x53, 0xa1,
- 0x0c, 0xe4, 0xbe, 0x27, 0x09, 0x28, 0x63, 0xa3, 0x3a, 0x2e, 0xab, 0xe0, 0x3b, 0xf7, 0x3d, 0xd9,
- 0x41, 0x93, 0x18, 0x85, 0x67, 0xd5, 0xf0, 0xf5, 0x04, 0x91, 0x45, 0x6c, 0x39, 0x4e, 0xc7, 0x65,
- 0x35, 0xfd, 0x40, 0x41, 0x2b, 0x28, 0xb1, 0x7d, 0x6e, 0xf6, 0x91, 0x7d, 0x15, 0x2d, 0x2c, 0xf2,
- 0x68, 0x98, 0xe1, 0x92, 0x6c, 0x9f, 0xdb, 0x81, 0x0c, 0xd8, 0x5a, 0xf3, 0xdf, 0x65, 0xa0, 0x9a,
- 0x98, 0x60, 0x0c, 0xff, 0x88, 0x10, 0xb7, 0x32, 0x15, 0x0d, 0x7e, 0x8c, 0xc3, 0xe8, 0x5b, 0xe1,
- 0x36, 0xd5, 0xf3, 0xf0, 0x67, 0x16, 0xdf, 0xd7, 0xf3, 0x46, 0x9e, 0xef, 0x7b, 0xcf, 0x95, 0xeb,
- 0xb3, 0x6b, 0x06, 0xf2, 0x99, 0x10, 0xa7, 0x2c, 0x8f, 0x5d, 0xdd, 0x9c, 0xf8, 0xbe, 0x70, 0x15,
- 0xa2, 0x40, 0x8d, 0x13, 0xe7, 0x0a, 0x2a, 0xa2, 0x50, 0x24, 0xa6, 0x7d, 0x90, 0x95, 0xd0, 0x10,
- 0x68, 0x6a, 0x85, 0x29, 0x23, 0x01, 0x92, 0x2b, 0xb0, 0x82, 0x9b, 0x8a, 0xca, 0x50, 0x1c, 0x9c,
- 0x6c, 0x99, 0x17, 0x41, 0x6b, 0xe0, 0x31, 0x98, 0x46, 0xee, 0x7b, 0xcf, 0x59, 0xb5, 0x31, 0x01,
- 0x88, 0x63, 0x32, 0x8c, 0x45, 0x51, 0x21, 0xa2, 0x33, 0x04, 0x0d, 0xf1, 0x03, 0x00, 0xfc, 0x45,
- 0x94, 0x61, 0x40, 0xfa, 0x12, 0x8e, 0x32, 0xf1, 0x19, 0x09, 0x11, 0x8d, 0xbf, 0x00, 0x95, 0xe8,
- 0x01, 0xaf, 0x43, 0x89, 0x5c, 0xda, 0xe8, 0xb5, 0x21, 0x88, 0xfe, 0x99, 0xed, 0x5a, 0xe2, 0x9c,
- 0xec, 0x4a, 0xc1, 0x50, 0x00, 0xb6, 0x72, 0x68, 0x5b, 0x96, 0x70, 0xc3, 0x93, 0x1e, 0x05, 0xcd,
- 0x3b, 0x8f, 0xcf, 0xcf, 0x3d, 0x8f, 0x6f, 0xfc, 0x2a, 0x54, 0x13, 0x41, 0xe3, 0xa5, 0xdd, 0x4e,
- 0x34, 0x2c, 0x9b, 0x6e, 0xd8, 0x6d, 0xa8, 0x84, 0x35, 0x20, 0x01, 0xed, 0x6d, 0x15, 0x23, 0x46,
- 0x34, 0xfe, 0x69, 0x16, 0x3d, 0x59, 0xec, 0xda, 0x74, 0xa0, 0xb7, 0x0d, 0xc5, 0x40, 0x9a, 0x72,
- 0x12, 0x16, 0x33, 0x2c, 0xb8, 0x40, 0xbb, 0xc4, 0xb3, 0xb3, 0x64, 0x68, 0x6e, 0xfe, 0x01, 0xe4,
- 0xa4, 0x39, 0xd0, 0x89, 0xd2, 0xaf, 0x2c, 0x26, 0xa4, 0x67, 0x0e, 0x76, 0x96, 0x0c, 0xe4, 0xe3,
- 0xbb, 0x50, 0xee, 0xeb, 0xdc, 0x96, 0x36, 0x8a, 0x0b, 0xc6, 0x62, 0x61, 0x46, 0x6c, 0x67, 0xc9,
- 0x88, 0x24, 0xf0, 0xef, 0x40, 0x1e, 0xbd, 0x4b, 0x5d, 0xf3, 0xb1, 0x60, 0x8c, 0x89, 0xcb, 0x65,
- 0x67, 0xc9, 0x20, 0xce, 0x8d, 0x12, 0x14, 0xc8, 0x06, 0x37, 0xea, 0x50, 0x54, 0x7d, 0x9d, 0x1e,
- 0xb9, 0xc6, 0x2d, 0xc8, 0xf5, 0xcc, 0x01, 0x7a, 0xf8, 0xb6, 0x15, 0xe8, 0x54, 0x09, 0xfe, 0x6c,
- 0xbc, 0x12, 0xe7, 0xe9, 0x92, 0x29, 0xe0, 0x4c, 0x2a, 0x05, 0xdc, 0x28, 0x42, 0x1e, 0xdf, 0xd8,
- 0xb8, 0x7d, 0x55, 0xb4, 0xd0, 0xf8, 0x47, 0x39, 0x0c, 0x2c, 0xa4, 0x38, 0x9f, 0x9b, 0xde, 0xfe,
- 0x08, 0x2a, 0x63, 0xdf, 0xeb, 0x8b, 0x20, 0xf0, 0x7c, 0xed, 0x1c, 0xbd, 0xfe, 0xe2, 0xa3, 0xe7,
- 0xf5, 0xc3, 0x90, 0xc7, 0x88, 0xd9, 0x9b, 0xff, 0x3a, 0x0b, 0x95, 0xe8, 0x81, 0x8a, 0x67, 0xa4,
- 0x38, 0x57, 0xa9, 0xcc, 0x3d, 0xe1, 0x8f, 0x4c, 0xdb, 0x52, 0xd6, 0x63, 0x73, 0x68, 0x86, 0x4e,
- 0xee, 0xc7, 0xde, 0x44, 0x4e, 0x8e, 0x85, 0x4a, 0x61, 0x3d, 0xb5, 0x47, 0xc2, 0x63, 0x79, 0x3a,
- 0x3c, 0x42, 0xc5, 0xee, 0x3b, 0xde, 0xc4, 0x62, 0x05, 0x84, 0x1f, 0xd1, 0xf6, 0xb6, 0x67, 0x8e,
- 0x03, 0x65, 0x33, 0xf7, 0x6c, 0xdf, 0x63, 0x25, 0x64, 0xda, 0xb6, 0x07, 0x23, 0x93, 0x95, 0x51,
- 0x58, 0xef, 0xb9, 0x2d, 0xd1, 0x08, 0x57, 0xd0, 0x4d, 0x3d, 0x18, 0x0b, 0xb7, 0x2b, 0x7d, 0x21,
- 0xe4, 0x9e, 0x39, 0x56, 0x39, 0x4d, 0x43, 0x58, 0x96, 0x2d, 0x95, 0xfd, 0xdc, 0x36, 0xfb, 0xe2,
- 0xd8, 0xf3, 0x4e, 0xd9, 0x32, 0x1a, 0x9a, 0x8e, 0x1b, 0x48, 0x73, 0xe0, 0x9b, 0x23, 0x65, 0x43,
- 0x7b, 0xc2, 0x11, 0x04, 0xad, 0xd0, 0xbb, 0x6d, 0x39, 0x9c, 0x1c, 0x3f, 0xc2, 0xb8, 0x6f, 0x55,
- 0x9d, 0x33, 0x59, 0x62, 0x2c, 0xd0, 0x86, 0x2e, 0x43, 0x79, 0xc3, 0x76, 0xec, 0x63, 0xdb, 0xb1,
- 0xd9, 0x1a, 0x92, 0xb6, 0xcf, 0xfb, 0xa6, 0x63, 0x5b, 0xbe, 0xf9, 0x9c, 0x71, 0x6c, 0xdc, 0x63,
- 0xdf, 0x3b, 0xb5, 0xd9, 0x35, 0x24, 0xa4, 0x30, 0xf0, 0xcc, 0xfe, 0x21, 0xbb, 0x4e, 0x67, 0x65,
- 0xa7, 0x42, 0xf6, 0x87, 0x27, 0xe6, 0x31, 0xbb, 0x11, 0xa7, 0xf4, 0x6e, 0x36, 0xd6, 0x60, 0x75,
- 0xea, 0x54, 0xbe, 0x51, 0xd2, 0xd1, 0x67, 0xa3, 0x06, 0xd5, 0xc4, 0x71, 0x69, 0xe3, 0x55, 0x28,
- 0x87, 0x87, 0xa9, 0x18, 0xa5, 0xdb, 0x81, 0x4a, 0x03, 0x6b, 0x25, 0x89, 0xe0, 0xc6, 0x7f, 0xca,
- 0x40, 0x51, 0x9d, 0x64, 0xf3, 0x8d, 0xa8, 0xf2, 0x24, 0xb3, 0xc0, 0xe9, 0xa5, 0x62, 0xd2, 0x67,
- 0xbf, 0x51, 0xf9, 0xc9, 0x75, 0x28, 0x38, 0x14, 0x8e, 0x6b, 0xf3, 0x45, 0x40, 0xc2, 0xda, 0xe4,
- 0x52, 0xd6, 0xe6, 0x36, 0x54, 0xcc, 0x89, 0xf4, 0xe8, 0x90, 0x4e, 0x9f, 0x60, 0xc4, 0x88, 0x66,
- 0x2b, 0x3a, 0x8d, 0x0e, 0x13, 0x93, 0xe4, 0x33, 0xf6, 0x7c, 0x21, 0x54, 0xd2, 0x91, 0x62, 0xed,
- 0x2c, 0xed, 0x24, 0xde, 0x68, 0x6c, 0xf6, 0x25, 0x21, 0x68, 0x8f, 0x45, 0x53, 0xcb, 0xf2, 0xb8,
- 0x06, 0x36, 0x87, 0xa6, 0x6c, 0x9e, 0x40, 0xf9, 0xd0, 0x0b, 0xa6, 0x77, 0xec, 0x12, 0xe4, 0x7a,
- 0xde, 0x58, 0xf9, 0x9f, 0x1b, 0x9e, 0x24, 0xff, 0x53, 0x6d, 0xd0, 0x27, 0x52, 0xa9, 0x9c, 0x61,
- 0x0f, 0x86, 0x52, 0xc5, 0xe9, 0x1d, 0xd7, 0x15, 0x3e, 0x2b, 0xe0, 0x0c, 0x1b, 0x62, 0x8c, 0x3e,
- 0x2f, 0x2b, 0xe2, 0x9c, 0x12, 0x7e, 0xdb, 0xf6, 0x03, 0xc9, 0x4a, 0xcd, 0x0e, 0xee, 0xb5, 0xf6,
- 0x80, 0xb6, 0x48, 0xfa, 0x41, 0xa2, 0x96, 0xb0, 0x89, 0x04, 0x6e, 0x0a, 0x17, 0x35, 0x90, 0x62,
- 0x2b, 0x15, 0x18, 0xd2, 0x0b, 0xb2, 0xb8, 0xbf, 0x11, 0xfc, 0xd1, 0x24, 0x90, 0xf6, 0xc9, 0x05,
- 0xcb, 0x35, 0x9f, 0x41, 0x2d, 0x55, 0xe4, 0xc4, 0xaf, 0x03, 0x4b, 0x21, 0xb0, 0xe9, 0x4b, 0xfc,
- 0x16, 0x5c, 0x4b, 0x61, 0xf7, 0x6c, 0xcb, 0xa2, 0x4c, 0xf0, 0xf4, 0x83, 0xb0, 0x83, 0x1b, 0x15,
- 0x28, 0xf5, 0xd5, 0x1c, 0x36, 0x0f, 0xa1, 0x46, 0x93, 0xba, 0x27, 0xa4, 0x79, 0xe0, 0x3a, 0x17,
- 0x7f, 0xec, 0x4a, 0xb4, 0xe6, 0x57, 0x75, 0xf8, 0x85, 0xd6, 0xe4, 0xc4, 0xf7, 0x46, 0x24, 0xab,
- 0x60, 0xd0, 0x6f, 0x94, 0x2e, 0x3d, 0xad, 0x19, 0x59, 0xe9, 0x35, 0x7f, 0x59, 0x81, 0x52, 0xab,
- 0xdf, 0xc7, 0x80, 0x71, 0xe6, 0xcd, 0xef, 0x40, 0xb1, 0xef, 0xb9, 0x27, 0xf6, 0x40, 0x5b, 0xeb,
- 0x69, 0xbf, 0x51, 0xf3, 0xa1, 0x3a, 0x9e, 0xd8, 0x03, 0x43, 0x13, 0x23, 0x9b, 0xde, 0x6d, 0x0a,
- 0x57, 0xb2, 0x29, 0x93, 0x1b, 0x6d, 0x2e, 0x0f, 0x20, 0x6f, 0xbb, 0x27, 0x9e, 0x2e, 0x1b, 0xfd,
- 0xfc, 0x25, 0x4c, 0x54, 0x3b, 0x49, 0x84, 0x8d, 0xff, 0x9c, 0x81, 0xa2, 0x7a, 0x35, 0x7f, 0x15,
- 0x56, 0x84, 0x8b, 0x4b, 0x2d, 0x34, 0xf4, 0x7a, 0x8d, 0x4d, 0x61, 0xd1, 0xa5, 0xd5, 0x18, 0x71,
- 0x3c, 0x19, 0xe8, 0xcc, 0x4c, 0x12, 0xc5, 0xdf, 0x83, 0x5b, 0x0a, 0x3c, 0xf4, 0x85, 0x2f, 0x1c,
- 0x61, 0x06, 0x62, 0x73, 0x68, 0xba, 0xae, 0x70, 0xf4, 0xb6, 0x7f, 0xd9, 0x63, 0xde, 0x84, 0x65,
- 0xf5, 0xa8, 0x3b, 0x36, 0xfb, 0x22, 0xd0, 0x6b, 0x29, 0x85, 0xe3, 0x5f, 0x83, 0x02, 0x55, 0xd5,
- 0xd6, 0xad, 0xab, 0xa7, 0x52, 0x51, 0x35, 0xbc, 0x68, 0x5f, 0x6a, 0x01, 0xa8, 0x61, 0xc2, 0x90,
- 0x4c, 0xdb, 0x86, 0x2f, 0x5e, 0x39, 0xae, 0x14, 0x1d, 0x26, 0x98, 0xb0, 0x7d, 0x96, 0x70, 0x04,
- 0x95, 0x3f, 0xe2, 0xbe, 0x99, 0xa5, 0x73, 0x97, 0x14, 0xae, 0xf1, 0x07, 0x79, 0xc8, 0xe3, 0x08,
- 0x23, 0xf1, 0xd0, 0x1b, 0x89, 0x28, 0xfb, 0xac, 0x1c, 0x91, 0x14, 0x0e, 0x1d, 0x1f, 0x53, 0x15,
- 0x00, 0x44, 0x64, 0xca, 0xb4, 0x4c, 0xa3, 0x91, 0x72, 0xec, 0x7b, 0x27, 0xb6, 0x13, 0x53, 0x6a,
- 0x17, 0x69, 0x0a, 0xcd, 0xbf, 0x0e, 0x37, 0x47, 0xa6, 0x7f, 0x2a, 0x24, 0xad, 0xee, 0x67, 0x9e,
- 0x7f, 0x1a, 0xe0, 0xc8, 0x75, 0x2c, 0x9d, 0xb6, 0xbc, 0xe4, 0x29, 0x7f, 0x1d, 0xd6, 0x9e, 0x87,
- 0x60, 0xf4, 0x0e, 0x95, 0x38, 0x9c, 0x7d, 0x80, 0xc6, 0xd8, 0x12, 0x67, 0x36, 0xc9, 0x2d, 0xab,
- 0xda, 0xda, 0x10, 0x46, 0x55, 0x32, 0xd5, 0x40, 0x76, 0xf5, 0x9b, 0xf5, 0xf9, 0x53, 0x1a, 0x8b,
- 0x76, 0x53, 0xd5, 0x1c, 0x05, 0x1d, 0x8b, 0xf2, 0xae, 0x15, 0x23, 0x46, 0xa0, 0xa2, 0xd1, 0x2b,
- 0x9f, 0x2a, 0x93, 0x5b, 0x53, 0x01, 0x6a, 0x02, 0x85, 0x14, 0x52, 0xf4, 0x87, 0xe1, 0x4b, 0x54,
- 0x52, 0x34, 0x89, 0xe2, 0x77, 0x00, 0x06, 0xa6, 0x14, 0xcf, 0xcd, 0x8b, 0x27, 0xbe, 0x53, 0x17,
- 0xea, 0x20, 0x25, 0xc6, 0x60, 0x88, 0xeb, 0x78, 0x7d, 0xd3, 0xe9, 0x4a, 0xcf, 0x37, 0x07, 0xe2,
- 0xd0, 0x94, 0xc3, 0xfa, 0x40, 0x85, 0xb8, 0xd3, 0x78, 0xec, 0xb1, 0xb4, 0x47, 0xe2, 0x13, 0xcf,
- 0x15, 0xf5, 0xa1, 0xea, 0x71, 0x08, 0x63, 0x4b, 0x4c, 0xd7, 0x74, 0x2e, 0xa4, 0xdd, 0xc7, 0xbe,
- 0xd8, 0xaa, 0x25, 0x09, 0x14, 0x25, 0x15, 0x84, 0xc4, 0x71, 0xec, 0x58, 0xf5, 0xef, 0xab, 0xbe,
- 0x46, 0x08, 0x9c, 0x5d, 0x21, 0x87, 0xc2, 0x17, 0x93, 0x51, 0xcb, 0xb2, 0x7c, 0x11, 0x04, 0xf5,
- 0x53, 0x35, 0xbb, 0x53, 0xe8, 0xc6, 0x37, 0xe9, 0x98, 0x6b, 0xd8, 0x7c, 0x0b, 0x6a, 0xbb, 0xd8,
- 0xc2, 0xd6, 0xd8, 0xee, 0xf6, 0xbd, 0xb1, 0x40, 0x83, 0x4e, 0x09, 0x63, 0x4a, 0x2f, 0x54, 0xa1,
- 0xf4, 0x51, 0xe0, 0xb9, 0xad, 0xc3, 0x8e, 0xda, 0x62, 0xb6, 0x27, 0x8e, 0xc3, 0xb2, 0xcd, 0x03,
- 0x80, 0x58, 0xb3, 0x71, 0xbb, 0x68, 0xd1, 0x99, 0x12, 0x5b, 0x52, 0xc9, 0x2c, 0xd7, 0xb2, 0xdd,
- 0xc1, 0x96, 0x56, 0x66, 0x96, 0x41, 0x24, 0x25, 0x29, 0x84, 0x15, 0x21, 0xc9, 0x9d, 0x21, 0x48,
- 0x58, 0x2c, 0xd7, 0xfc, 0x3f, 0x19, 0xa8, 0x26, 0x4a, 0x28, 0xfe, 0x04, 0xcb, 0x3e, 0x70, 0xb3,
- 0x47, 0x77, 0x01, 0xe7, 0x4d, 0x29, 0x7a, 0x04, 0xe3, 0xac, 0xea, 0x0a, 0x0f, 0x7c, 0xaa, 0x52,
- 0x12, 0x09, 0xcc, 0x67, 0x2a, 0xf9, 0x68, 0x3e, 0xd4, 0x79, 0x9d, 0x2a, 0x94, 0x9e, 0xb8, 0xa7,
- 0xae, 0xf7, 0xdc, 0x55, 0xfb, 0x34, 0xd5, 0xf1, 0xa4, 0x4e, 0x24, 0xc3, 0x52, 0x9b, 0x5c, 0xf3,
- 0x5f, 0xe4, 0xa7, 0x4a, 0xde, 0xda, 0x50, 0x54, 0xc1, 0x04, 0xf9, 0xb9, 0xb3, 0x35, 0x4a, 0x49,
- 0x62, 0x7d, 0xfa, 0x95, 0x40, 0x19, 0x9a, 0x19, 0xbd, 0xfc, 0xa8, 0x20, 0x34, 0x3b, 0xf7, 0x94,
- 0x2e, 0x25, 0x28, 0xb4, 0xcd, 0xa9, 0x9a, 0xe8, 0x48, 0x42, 0xe3, 0xaf, 0x65, 0xe0, 0xfa, 0x3c,
- 0x92, 0x64, 0xe5, 0x78, 0x26, 0x5d, 0x39, 0xde, 0x9d, 0xaa, 0xc4, 0xce, 0x52, 0x6f, 0x1e, 0xbc,
- 0x64, 0x23, 0xd2, 0x75, 0xd9, 0xcd, 0xdf, 0xcb, 0xc0, 0xda, 0x4c, 0x9f, 0x13, 0x7e, 0x0c, 0x40,
- 0x51, 0x69, 0x96, 0x2a, 0x94, 0x8a, 0x4a, 0x57, 0xd4, 0xd1, 0x03, 0xed, 0xf0, 0x81, 0xaa, 0x05,
- 0xd0, 0xb5, 0xe7, 0xca, 0x89, 0xc6, 0x59, 0xc3, 0x0d, 0x64, 0x20, 0x54, 0x9a, 0x56, 0x39, 0x5b,
- 0x1a, 0x53, 0x54, 0x8e, 0xae, 0x3a, 0x1f, 0x61, 0x25, 0x2a, 0xc0, 0x9a, 0x8c, 0x1d, 0xbb, 0x8f,
- 0x60, 0x99, 0x37, 0xe0, 0xa6, 0xba, 0x80, 0xa0, 0x83, 0xca, 0x93, 0xde, 0xd0, 0xa6, 0xc5, 0xc1,
- 0x2a, 0xf8, 0x9e, 0xc3, 0xc9, 0xb1, 0x63, 0x07, 0x43, 0x06, 0x4d, 0x03, 0xae, 0xcd, 0xe9, 0x20,
- 0x35, 0xf9, 0xa9, 0x6e, 0xfe, 0x0a, 0xc0, 0xd6, 0xd3, 0xb0, 0xd1, 0x2c, 0xc3, 0x39, 0xac, 0x6c,
- 0x3d, 0x4d, 0x4a, 0xd7, 0x8b, 0xe7, 0x29, 0x5a, 0xaf, 0x80, 0xe5, 0x9a, 0xbf, 0x96, 0x09, 0x2b,
- 0x24, 0x1a, 0x7f, 0x1e, 0x6a, 0xaa, 0xc1, 0x87, 0xe6, 0x85, 0xe3, 0x99, 0x16, 0x6f, 0xc3, 0x4a,
- 0x10, 0x5d, 0x91, 0x49, 0x6c, 0x58, 0xd3, 0x8e, 0x40, 0x37, 0x45, 0x64, 0x4c, 0x31, 0x85, 0x81,
- 0x52, 0x36, 0x3e, 0x56, 0xe1, 0x14, 0xf2, 0x99, 0xb4, 0xe4, 0x96, 0x29, 0x88, 0x33, 0x9b, 0x5f,
- 0x83, 0xb5, 0x6e, 0x6c, 0xdc, 0x95, 0x47, 0x8d, 0xca, 0xa1, 0x76, 0x86, 0xad, 0x50, 0x39, 0x34,
- 0xd8, 0xfc, 0xc7, 0x25, 0x80, 0xf8, 0x08, 0x69, 0xce, 0x9a, 0x9f, 0x57, 0x11, 0x31, 0x73, 0xa0,
- 0x9b, 0x7b, 0xe9, 0x03, 0xdd, 0xf7, 0x22, 0xc7, 0x5e, 0xa5, 0x97, 0xa7, 0xcb, 0xc2, 0xe3, 0x36,
- 0x4d, 0xbb, 0xf3, 0xa9, 0x82, 0xa1, 0xc2, 0x74, 0xc1, 0xd0, 0xdd, 0xd9, 0xea, 0xc2, 0x29, 0x63,
- 0x14, 0xe7, 0x2d, 0x4a, 0xa9, 0xbc, 0x45, 0x03, 0xca, 0xbe, 0x30, 0x2d, 0xcf, 0x75, 0x2e, 0xc2,
- 0x73, 0xc3, 0x10, 0xe6, 0x6f, 0x41, 0x41, 0xd2, 0x2d, 0x9f, 0x32, 0xad, 0x9d, 0x17, 0x4c, 0x9c,
- 0xa2, 0x45, 0xcb, 0x66, 0x07, 0xba, 0x24, 0x50, 0xed, 0x9a, 0x65, 0x23, 0x81, 0xe1, 0xeb, 0xc0,
- 0x6d, 0x0c, 0xe2, 0x1c, 0x47, 0x58, 0x1b, 0x17, 0x5b, 0xea, 0x38, 0x8f, 0xf6, 0xf5, 0xb2, 0x31,
- 0xe7, 0x49, 0x38, 0xff, 0xcb, 0xf1, 0xfc, 0x53, 0x93, 0xcf, 0xec, 0x00, 0x7b, 0x5a, 0x23, 0xf7,
- 0x25, 0x82, 0xd1, 0x73, 0x08, 0x17, 0xac, 0x1a, 0x4b, 0xd2, 0xde, 0xf8, 0x4c, 0xfc, 0x92, 0xa7,
- 0xe1, 0xf0, 0xaa, 0xc4, 0xcd, 0x2a, 0x09, 0x8d, 0x11, 0x64, 0xc9, 0xfb, 0x9e, 0xbb, 0x8f, 0x1a,
- 0xc1, 0xb4, 0x25, 0xd7, 0x30, 0xf6, 0x77, 0xec, 0x4c, 0x7c, 0xd3, 0xa1, 0xa7, 0x6b, 0xca, 0x92,
- 0xc7, 0x98, 0xe6, 0xbf, 0xc9, 0x46, 0xc1, 0x53, 0x05, 0x0a, 0xc7, 0x66, 0x60, 0xf7, 0xd5, 0xee,
- 0xa6, 0x9d, 0x1e, 0xb5, 0xbb, 0x49, 0xcf, 0xf2, 0x58, 0x16, 0xe3, 0xa0, 0x40, 0xe8, 0xe3, 0x9c,
- 0xf8, 0x4e, 0x15, 0xcb, 0xa3, 0x09, 0x08, 0x35, 0x49, 0xd5, 0x0c, 0x11, 0x2b, 0x25, 0xe7, 0xac,
- 0xa8, 0x1a, 0x93, 0xc2, 0x6c, 0xda, 0x62, 0x58, 0x19, 0x69, 0x5c, 0x4f, 0x0a, 0x95, 0x9a, 0x24,
- 0xbd, 0x67, 0x80, 0x62, 0xc2, 0x4b, 0x02, 0xac, 0x8a, 0x81, 0x49, 0x28, 0x54, 0xe5, 0x13, 0x03,
- 0x0a, 0xdb, 0x96, 0x71, 0xdd, 0xa7, 0x1f, 0xb0, 0x1a, 0xb6, 0x28, 0xbe, 0xaa, 0xc5, 0x56, 0x50,
- 0xaa, 0x49, 0x95, 0x2c, 0xab, 0xf8, 0xf3, 0x8c, 0xea, 0x5b, 0x18, 0xbe, 0xd5, 0x42, 0xbb, 0xb4,
- 0x86, 0x2d, 0x8b, 0x1c, 0x1d, 0xc6, 0x31, 0xee, 0x1a, 0x9b, 0x18, 0x04, 0xd9, 0x63, 0xd3, 0x95,
- 0xec, 0x1a, 0x76, 0x75, 0x6c, 0x9d, 0xb0, 0xeb, 0xc8, 0xd2, 0x1f, 0x9a, 0x92, 0xdd, 0x40, 0x1a,
- 0xfc, 0xb5, 0x25, 0x7c, 0xd4, 0x14, 0x76, 0x13, 0x69, 0xa4, 0x39, 0x60, 0xb7, 0x9a, 0xbf, 0x19,
- 0xd7, 0x43, 0xbf, 0x11, 0x85, 0x27, 0x8b, 0x2c, 0x1f, 0x0c, 0x60, 0xe6, 0xad, 0xe5, 0x36, 0xac,
- 0xf9, 0xe2, 0x07, 0x13, 0x3b, 0x75, 0x4b, 0x20, 0x77, 0x75, 0x19, 0xca, 0x2c, 0x47, 0xf3, 0x0c,
- 0xd6, 0x42, 0xe0, 0x99, 0x2d, 0x87, 0x94, 0x47, 0xe2, 0x6f, 0x25, 0xae, 0x31, 0x64, 0xe6, 0x5e,
- 0xff, 0x8a, 0x44, 0xc6, 0xd7, 0x16, 0xa2, 0x73, 0x82, 0xec, 0x02, 0xe7, 0x04, 0xcd, 0xff, 0x9d,
- 0x3c, 0x78, 0x56, 0x01, 0x9b, 0x15, 0x05, 0x6c, 0xb3, 0x07, 0xd1, 0x71, 0xea, 0x3f, 0xfb, 0x32,
- 0xa9, 0xff, 0x79, 0x45, 0x1d, 0xef, 0x63, 0xfc, 0x40, 0x2b, 0xf3, 0xe9, 0x02, 0xc7, 0x1a, 0x29,
- 0x5a, 0xbe, 0x41, 0xc7, 0xca, 0x66, 0x57, 0x55, 0x1c, 0x15, 0xe6, 0x5e, 0x2a, 0x4a, 0x9e, 0x1f,
- 0x6b, 0x4a, 0x23, 0xc1, 0x95, 0xb0, 0x63, 0xc5, 0x79, 0x76, 0x0c, 0x63, 0x67, 0x6d, 0xe1, 0x22,
- 0x58, 0x9d, 0x02, 0xa9, 0xdf, 0xa1, 0x78, 0x5a, 0xe3, 0x65, 0x63, 0x06, 0x8f, 0xce, 0xde, 0x68,
- 0xe2, 0x48, 0x5b, 0x1f, 0x74, 0x28, 0x60, 0xfa, 0xd6, 0x63, 0x65, 0xf6, 0xd6, 0xe3, 0x87, 0x00,
- 0x81, 0xc0, 0xd5, 0xb1, 0x65, 0xf7, 0xa5, 0xae, 0x4b, 0xba, 0x73, 0x59, 0xdf, 0xf4, 0xf1, 0x4c,
- 0x82, 0x03, 0xdb, 0x3f, 0x32, 0xcf, 0xe9, 0xc8, 0x56, 0x17, 0x50, 0x44, 0xf0, 0xb4, 0x75, 0x5f,
- 0x99, 0xb5, 0xee, 0x6f, 0x41, 0x21, 0x40, 0x17, 0x9a, 0x2e, 0xee, 0x5c, 0x3e, 0xbf, 0xeb, 0xe4,
- 0x67, 0x1b, 0x8a, 0x96, 0x12, 0x96, 0x68, 0xff, 0x3c, 0x9f, 0xae, 0xec, 0x54, 0x8c, 0x10, 0x4c,
- 0x59, 0xd8, 0x9b, 0x69, 0x0b, 0xdb, 0xb0, 0xa0, 0xa8, 0x0f, 0x1f, 0xa6, 0x13, 0x05, 0x61, 0xda,
- 0x32, 0x9b, 0x48, 0x5b, 0x46, 0xd5, 0xaf, 0xb9, 0x64, 0xf5, 0xeb, 0xd4, 0xad, 0xbe, 0xc2, 0xcc,
- 0xad, 0xbe, 0xe6, 0x27, 0x50, 0x50, 0x31, 0x01, 0x84, 0xee, 0xa8, 0x72, 0x65, 0xb1, 0x53, 0x2c,
- 0xc3, 0xaf, 0x03, 0x0b, 0x04, 0xf9, 0x3a, 0xa2, 0x6b, 0x8e, 0x04, 0x19, 0xc9, 0x2c, 0xaf, 0xc3,
- 0x75, 0x45, 0x1b, 0xa4, 0x9f, 0x90, 0xc3, 0xe5, 0xd8, 0xc7, 0xbe, 0xe9, 0x5f, 0xb0, 0x7c, 0xf3,
- 0x43, 0x3a, 0xfa, 0x0f, 0x15, 0xaa, 0x1a, 0xdd, 0xa2, 0x54, 0x66, 0xd9, 0xd2, 0xd6, 0x87, 0x2a,
- 0x47, 0x74, 0xb4, 0xa7, 0xea, 0xe9, 0x28, 0x9c, 0xa2, 0x7c, 0xd0, 0x72, 0x72, 0x8f, 0xff, 0x13,
- 0x5b, 0x6f, 0xcd, 0x8d, 0x84, 0xc7, 0x98, 0x2e, 0x90, 0xcb, 0x2c, 0x5a, 0x20, 0xd7, 0x7c, 0x0c,
- 0xab, 0x46, 0xda, 0xa6, 0xf3, 0xf7, 0xa0, 0xe4, 0x8d, 0x93, 0x72, 0x5e, 0xa4, 0x97, 0x21, 0x79,
- 0xf3, 0x67, 0x19, 0x58, 0xee, 0xb8, 0x52, 0xf8, 0xae, 0xe9, 0x6c, 0x3b, 0xe6, 0x80, 0xbf, 0x1b,
- 0x5a, 0xa9, 0xf9, 0xb9, 0x87, 0x24, 0x6d, 0xda, 0x60, 0x39, 0x3a, 0xc9, 0xce, 0x6f, 0xc0, 0x9a,
- 0xb0, 0x6c, 0xe9, 0xf9, 0xca, 0x4f, 0x0e, 0xeb, 0x18, 0xaf, 0x03, 0x53, 0xe8, 0x2e, 0x2d, 0x89,
- 0x9e, 0x9a, 0xe6, 0x3a, 0x5c, 0x4f, 0x61, 0x43, 0x27, 0x38, 0xcb, 0x6f, 0x43, 0x3d, 0xde, 0x8d,
- 0xb6, 0x3c, 0x57, 0x76, 0x5c, 0x4b, 0x9c, 0x93, 0x93, 0xc5, 0x72, 0xcd, 0xdf, 0x88, 0xdc, 0xbb,
- 0xa7, 0xba, 0xca, 0xd1, 0xf7, 0xbc, 0xf8, 0x0a, 0xad, 0x86, 0x12, 0x57, 0xb5, 0xb3, 0x0b, 0x5c,
- 0xd5, 0xfe, 0x30, 0xbe, 0x6e, 0xab, 0x36, 0x8a, 0x57, 0xe6, 0xee, 0x3e, 0x54, 0x9c, 0xa5, 0xbd,
- 0xfb, 0xae, 0x48, 0xdc, 0xbd, 0x7d, 0x53, 0x87, 0x74, 0xf9, 0x45, 0xbc, 0x60, 0x55, 0xc7, 0xf0,
- 0xce, 0xf4, 0x1d, 0x8f, 0xc5, 0x8a, 0x24, 0x67, 0x1c, 0x55, 0x78, 0x69, 0x47, 0xf5, 0xdb, 0x53,
- 0xd1, 0x53, 0x79, 0x6e, 0x3a, 0xee, 0x8a, 0x1b, 0xac, 0xdf, 0x86, 0xd2, 0xd0, 0x0e, 0xa4, 0xe7,
- 0xab, 0x5b, 0xd5, 0xb3, 0xb7, 0xc0, 0x12, 0xa3, 0xb5, 0xa3, 0x08, 0xa9, 0xa2, 0x2d, 0xe4, 0xe2,
- 0xdf, 0x83, 0x35, 0x1a, 0xf8, 0xc3, 0xd8, 0x6b, 0x08, 0xea, 0xd5, 0xb9, 0x95, 0x84, 0x09, 0x51,
- 0x1b, 0x53, 0x2c, 0xc6, 0xac, 0x90, 0xc6, 0x00, 0x20, 0x9e, 0x9f, 0x19, 0x2b, 0xf6, 0x19, 0x6e,
- 0x55, 0xdf, 0x84, 0x62, 0x30, 0x39, 0x8e, 0x4f, 0xe3, 0x34, 0xd4, 0x38, 0x87, 0xc6, 0x8c, 0x77,
- 0x70, 0x28, 0x7c, 0xd5, 0xdc, 0x2b, 0xaf, 0x76, 0x7f, 0x98, 0x9c, 0x78, 0xa5, 0x9c, 0x77, 0x2f,
- 0x99, 0xbd, 0x48, 0x72, 0x42, 0x03, 0x1a, 0xef, 0x40, 0x35, 0x31, 0xa8, 0x68, 0x99, 0x27, 0xae,
- 0xe5, 0x85, 0x29, 0x60, 0xfc, 0xad, 0xae, 0xb6, 0x59, 0x61, 0x12, 0x98, 0x7e, 0x37, 0x0c, 0x60,
- 0xd3, 0x03, 0x78, 0x45, 0x84, 0xfd, 0x0a, 0xd4, 0x12, 0x2e, 0x5d, 0x94, 0x1e, 0x4c, 0x23, 0x9b,
- 0x67, 0xf0, 0xf9, 0x84, 0xb8, 0x43, 0xe1, 0x8f, 0xec, 0x00, 0x37, 0x12, 0x15, 0x2c, 0x92, 0x6b,
- 0x6d, 0x09, 0x57, 0xda, 0x32, 0xb4, 0xa0, 0x11, 0xcc, 0xbf, 0x09, 0x85, 0xb1, 0xf0, 0x47, 0x81,
- 0xb6, 0xa2, 0xd3, 0x1a, 0x34, 0x57, 0x6c, 0x60, 0x28, 0x9e, 0xe6, 0x3f, 0xcc, 0x40, 0x79, 0x4f,
- 0x48, 0x13, 0x7d, 0x07, 0xbe, 0x37, 0xf5, 0x96, 0xd9, 0x13, 0xe4, 0x90, 0x74, 0x5d, 0x87, 0xaf,
- 0xeb, 0x1d, 0x4d, 0xaf, 0xe1, 0x9d, 0xa5, 0xb8, 0x61, 0x8d, 0x0d, 0x28, 0x69, 0x74, 0xe3, 0x5d,
- 0x58, 0x9d, 0xa2, 0xa4, 0x71, 0x51, 0xbe, 0x7d, 0xf7, 0x62, 0x14, 0x96, 0x39, 0x2d, 0x1b, 0x69,
- 0xe4, 0x46, 0x05, 0x4a, 0x63, 0xc5, 0xd0, 0xfc, 0x83, 0x1b, 0x54, 0x5c, 0x63, 0x9f, 0x60, 0x4c,
- 0x3f, 0x6f, 0x67, 0xbd, 0x03, 0x40, 0x5b, 0xb3, 0x2a, 0xc1, 0x50, 0x29, 0xdb, 0x04, 0x86, 0xbf,
- 0x1f, 0xe5, 0xda, 0xf3, 0x73, 0x9d, 0xaa, 0xa4, 0xf0, 0xe9, 0x84, 0x7b, 0x1d, 0x4a, 0x76, 0x40,
- 0x79, 0x38, 0x5d, 0xb6, 0x14, 0x82, 0xea, 0x49, 0xcf, 0x33, 0x03, 0xa9, 0x93, 0xde, 0x21, 0xc8,
- 0xbf, 0x05, 0x45, 0x7b, 0x34, 0xf6, 0x7c, 0xa9, 0xd3, 0xf4, 0x57, 0xbe, 0xaf, 0x43, 0x94, 0x3b,
- 0x4b, 0x86, 0xe6, 0x41, 0x6e, 0x71, 0x4e, 0xdc, 0xe5, 0x17, 0x73, 0xb7, 0xcf, 0x43, 0x6e, 0xc5,
- 0xc3, 0xbf, 0x0b, 0xb5, 0x81, 0xaa, 0xe7, 0x54, 0x82, 0xb5, 0x79, 0xf9, 0xca, 0x55, 0x42, 0x1e,
- 0x25, 0x19, 0x76, 0x96, 0x8c, 0xb4, 0x04, 0x14, 0x89, 0xae, 0xbd, 0x08, 0x64, 0xcf, 0xfb, 0xc8,
- 0xb3, 0x5d, 0x0a, 0x84, 0x5f, 0x20, 0xd2, 0x48, 0x32, 0xa0, 0xc8, 0x94, 0x04, 0xfe, 0x75, 0xf4,
- 0x85, 0x02, 0xa9, 0xaf, 0xbc, 0xdf, 0xbd, 0x4a, 0x52, 0x4f, 0x04, 0xfa, 0xb2, 0x7a, 0x20, 0xf9,
- 0x39, 0x34, 0x12, 0xcb, 0x47, 0xbf, 0xa4, 0x35, 0x1e, 0xfb, 0x1e, 0x46, 0xd3, 0x35, 0x92, 0xf6,
- 0xf5, 0xab, 0xa4, 0x1d, 0x5e, 0xca, 0xbd, 0xb3, 0x64, 0x5c, 0x21, 0x9b, 0xf7, 0x30, 0xe6, 0xd3,
- 0x5d, 0xd8, 0x15, 0xe6, 0x59, 0x78, 0x61, 0xfe, 0xfe, 0x42, 0xa3, 0x40, 0x1c, 0x3b, 0x4b, 0xc6,
- 0x94, 0x0c, 0xfe, 0xab, 0xb0, 0x96, 0x7a, 0x27, 0xdd, 0x91, 0x55, 0xd7, 0xe9, 0xbf, 0xb6, 0x70,
- 0x37, 0x90, 0x69, 0x67, 0xc9, 0x98, 0x95, 0xc4, 0x27, 0xf0, 0xb9, 0xd9, 0x2e, 0x6d, 0x89, 0xbe,
- 0x63, 0xbb, 0x42, 0xdf, 0xbc, 0x7f, 0xe7, 0xe5, 0x46, 0x4b, 0x33, 0xef, 0x2c, 0x19, 0x97, 0x4b,
- 0xe6, 0x7f, 0x11, 0x6e, 0x8f, 0xe7, 0x1a, 0x1f, 0x65, 0xd4, 0xf4, 0xc5, 0xfd, 0xf7, 0x16, 0x7c,
- 0xf3, 0x0c, 0xff, 0xce, 0x92, 0x71, 0xa5, 0x7c, 0xf4, 0xaa, 0x29, 0xb6, 0xd6, 0x65, 0xe7, 0x0a,
- 0xa0, 0x33, 0xdc, 0xbe, 0xb3, 0x23, 0x4c, 0x2b, 0x3a, 0x49, 0x88, 0x11, 0x8d, 0xff, 0x9e, 0x81,
- 0xa2, 0xd6, 0xf7, 0xdb, 0x51, 0x2d, 0x41, 0x64, 0xd4, 0x63, 0x04, 0xff, 0x00, 0x2a, 0xc2, 0xf7,
- 0x3d, 0x7f, 0xd3, 0xb3, 0xc2, 0x32, 0xcc, 0xe9, 0xfc, 0xb3, 0x92, 0xb3, 0xde, 0x0e, 0xc9, 0x8c,
- 0x98, 0x83, 0xbf, 0x0f, 0xa0, 0xd6, 0x79, 0x2f, 0xbe, 0x3d, 0xd4, 0x98, 0xcf, 0xaf, 0x0e, 0xa7,
- 0x62, 0xea, 0x38, 0x61, 0x17, 0x9e, 0x0c, 0x85, 0x60, 0x14, 0x8a, 0x16, 0x12, 0xa1, 0xe8, 0x6d,
- 0x9d, 0x61, 0xa0, 0xc4, 0x8b, 0xbe, 0x43, 0x17, 0x21, 0x1a, 0xbf, 0x9f, 0x81, 0xa2, 0x32, 0x1e,
- 0xbc, 0x3d, 0xdb, 0xa3, 0xd7, 0x5e, 0x6c, 0x73, 0xd6, 0xa7, 0x7b, 0xf6, 0x2d, 0x00, 0x65, 0x83,
- 0x12, 0x3d, 0xbb, 0x3d, 0x25, 0x47, 0xb3, 0x86, 0x85, 0xcf, 0x31, 0x7d, 0xf3, 0xa1, 0xba, 0xe7,
- 0x45, 0xc9, 0xe2, 0x27, 0xbb, 0xbb, 0x6c, 0x89, 0xaf, 0x41, 0xed, 0xc9, 0xfe, 0xe3, 0xfd, 0x83,
- 0x67, 0xfb, 0x47, 0x6d, 0xc3, 0x38, 0x30, 0x54, 0xce, 0x78, 0xa3, 0xb5, 0x75, 0xd4, 0xd9, 0x3f,
- 0x7c, 0xd2, 0x63, 0xd9, 0xc6, 0x3f, 0xcb, 0x40, 0x2d, 0x65, 0xbb, 0xfe, 0x74, 0xa7, 0x2e, 0x31,
- 0xfc, 0xb9, 0xf9, 0xc3, 0x9f, 0xbf, 0x6c, 0xf8, 0x0b, 0xd3, 0xc3, 0xff, 0x3b, 0x19, 0xa8, 0xa5,
- 0x6c, 0x64, 0x52, 0x7a, 0x26, 0x2d, 0x3d, 0xe9, 0x03, 0x64, 0xa7, 0x7c, 0x80, 0x26, 0x2c, 0x87,
- 0xbf, 0xf7, 0xe3, 0x5c, 0x44, 0x0a, 0x97, 0xa4, 0xa1, 0x8b, 0x16, 0xf9, 0x34, 0x0d, 0x5d, 0xb6,
- 0xb8, 0xba, 0xb5, 0x74, 0xb1, 0x34, 0xa0, 0x7b, 0xf7, 0x8d, 0xcb, 0x2d, 0xe8, 0x15, 0x5d, 0x78,
- 0x04, 0xd5, 0x71, 0xbc, 0x4c, 0x5f, 0xce, 0x61, 0x49, 0x72, 0xbe, 0xa0, 0x9d, 0xbf, 0x9b, 0x81,
- 0x95, 0xb4, 0xcd, 0xfd, 0xff, 0x7a, 0x58, 0xff, 0x49, 0x06, 0xd6, 0x66, 0x2c, 0xf9, 0x95, 0x2e,
- 0xdf, 0x74, 0xbb, 0xb2, 0x0b, 0xb4, 0x2b, 0x37, 0xa7, 0x5d, 0x97, 0x5b, 0x92, 0xab, 0x5b, 0xdc,
- 0x85, 0xcf, 0x5d, 0xba, 0x27, 0x5c, 0x31, 0xd4, 0x29, 0xa1, 0xb9, 0x69, 0xa1, 0xbf, 0x9d, 0x81,
- 0xdb, 0x57, 0xd9, 0xfb, 0xff, 0xe7, 0x7a, 0x35, 0xdd, 0xc2, 0xe6, 0xbb, 0x51, 0x89, 0x41, 0x15,
- 0x4a, 0xfa, 0x7b, 0x56, 0xba, 0xc4, 0x7b, 0xe8, 0x3d, 0x77, 0x55, 0x8e, 0xda, 0x10, 0xa6, 0xbe,
- 0xf1, 0x6f, 0x88, 0xb1, 0x63, 0xd3, 0xe9, 0xe9, 0x2d, 0x80, 0x16, 0x45, 0x7c, 0xe1, 0x05, 0x9c,
- 0xcd, 0xdd, 0x83, 0x6e, 0x9b, 0x2d, 0x25, 0xdd, 0xdb, 0x4f, 0x42, 0x43, 0xdc, 0x3c, 0x84, 0x62,
- 0x7c, 0x25, 0x62, 0xcf, 0xf4, 0x4f, 0x2d, 0x75, 0x46, 0xb9, 0x0c, 0xe5, 0x43, 0x1d, 0x5c, 0xa9,
- 0x57, 0x7d, 0xd4, 0x3d, 0xd8, 0x57, 0xe9, 0xf0, 0xad, 0x83, 0x9e, 0xba, 0x58, 0xd1, 0x7d, 0xfa,
- 0x48, 0x1d, 0x96, 0x3d, 0x32, 0x5a, 0x87, 0x3b, 0x47, 0x44, 0x51, 0x68, 0xfe, 0x56, 0x3e, 0xdc,
- 0xd5, 0x9a, 0x86, 0x3e, 0xfd, 0x04, 0x28, 0xa2, 0x35, 0xf7, 0xb4, 0xe0, 0xe8, 0x35, 0x54, 0x0c,
- 0xdc, 0x3e, 0x57, 0x19, 0x0a, 0x96, 0xe5, 0x45, 0xc8, 0x1e, 0x1e, 0xab, 0x1a, 0xa5, 0x1d, 0x39,
- 0x72, 0xd4, 0x8d, 0xcc, 0xde, 0xb9, 0x64, 0x05, 0xfc, 0xb1, 0x19, 0x9c, 0xb1, 0x62, 0xf3, 0x9f,
- 0xe7, 0xa0, 0x12, 0x99, 0xca, 0x97, 0x31, 0xdd, 0x9c, 0xc3, 0x4a, 0x67, 0xbf, 0xd7, 0x36, 0xf6,
- 0x5b, 0xbb, 0x9a, 0x24, 0xc7, 0xaf, 0xc1, 0xea, 0x76, 0x67, 0xb7, 0x7d, 0xb4, 0x7b, 0xd0, 0xda,
- 0xd2, 0xc8, 0x32, 0xbf, 0x09, 0xbc, 0xb3, 0x77, 0x78, 0x60, 0xf4, 0x8e, 0x3a, 0xdd, 0xa3, 0xcd,
- 0xd6, 0xfe, 0x66, 0x7b, 0xb7, 0xbd, 0xc5, 0x8a, 0xfc, 0x15, 0xb8, 0xbb, 0x7f, 0xd0, 0xeb, 0x1c,
- 0xec, 0x1f, 0xed, 0x1f, 0x1c, 0x1d, 0x6c, 0x7c, 0xd4, 0xde, 0xec, 0x75, 0x8f, 0x3a, 0xfb, 0x47,
- 0x28, 0xf5, 0x91, 0xd1, 0xc2, 0x27, 0xac, 0xc0, 0xef, 0xc2, 0x6d, 0x4d, 0xd5, 0x6d, 0x1b, 0x4f,
- 0xdb, 0x06, 0x0a, 0x79, 0xb2, 0xdf, 0x7a, 0xda, 0xea, 0xec, 0xb6, 0x36, 0x76, 0xdb, 0x6c, 0x99,
- 0xdf, 0x81, 0x86, 0xa6, 0x30, 0x5a, 0xbd, 0xf6, 0xd1, 0x6e, 0x67, 0xaf, 0xd3, 0x3b, 0x6a, 0x7f,
- 0x6f, 0xb3, 0xdd, 0xde, 0x6a, 0x6f, 0xb1, 0x1a, 0xff, 0x0a, 0x7c, 0x99, 0x1a, 0xa5, 0x1b, 0x91,
- 0x7e, 0xd9, 0x27, 0x9d, 0xc3, 0xa3, 0x96, 0xb1, 0xb9, 0xd3, 0x79, 0xda, 0x66, 0x2b, 0xfc, 0x35,
- 0xf8, 0xd2, 0xe5, 0xa4, 0x5b, 0x1d, 0xa3, 0xbd, 0xd9, 0x3b, 0x30, 0x3e, 0x66, 0x6b, 0xfc, 0x0b,
- 0xf0, 0xb9, 0x9d, 0xde, 0xde, 0xee, 0xd1, 0x33, 0xe3, 0x60, 0xff, 0xd1, 0x11, 0xfd, 0xec, 0xf6,
- 0x8c, 0x27, 0x9b, 0xbd, 0x27, 0x46, 0x9b, 0x01, 0x6f, 0xc0, 0xcd, 0xc3, 0x8d, 0xa3, 0xfd, 0x83,
- 0xde, 0x51, 0x6b, 0xff, 0xe3, 0x8d, 0xdd, 0x83, 0xcd, 0xc7, 0x47, 0xdb, 0x07, 0xc6, 0x5e, 0xab,
- 0xc7, 0xaa, 0xfc, 0xab, 0xf0, 0xda, 0x66, 0xf7, 0xa9, 0x6e, 0xe6, 0xc1, 0xf6, 0x91, 0x71, 0xf0,
- 0xac, 0x7b, 0x74, 0x60, 0x1c, 0x19, 0xed, 0x5d, 0xea, 0x73, 0x37, 0x6e, 0x7b, 0x89, 0xdf, 0x86,
- 0x7a, 0x67, 0xbf, 0xfb, 0x64, 0x7b, 0xbb, 0xb3, 0xd9, 0x69, 0xef, 0xf7, 0x8e, 0x0e, 0xdb, 0xc6,
- 0x5e, 0xa7, 0xdb, 0x45, 0x32, 0x56, 0x69, 0x7e, 0x07, 0x8a, 0x1d, 0xf7, 0xcc, 0x96, 0xb4, 0xbe,
- 0xb4, 0x32, 0xea, 0x58, 0x2c, 0x04, 0x69, 0x59, 0xd8, 0x03, 0x97, 0xbe, 0x34, 0x40, 0xab, 0x6b,
- 0xd9, 0x88, 0x11, 0xcd, 0xdf, 0xcf, 0x41, 0x4d, 0x89, 0x08, 0x63, 0xbb, 0x7b, 0xb0, 0xaa, 0x93,
- 0xa4, 0x9d, 0xb4, 0x09, 0x9b, 0x46, 0xd3, 0x27, 0xbc, 0x14, 0x2a, 0x61, 0xc8, 0x92, 0x28, 0x7e,
- 0x13, 0x8a, 0x66, 0xdf, 0xc1, 0x00, 0x51, 0x9d, 0x64, 0x6a, 0xe8, 0xb3, 0xda, 0x2e, 0xb4, 0x8b,
- 0x8a, 0xb0, 0xef, 0xb9, 0x9b, 0xd1, 0x65, 0x93, 0x14, 0x8e, 0x7f, 0x02, 0xb7, 0x22, 0xb8, 0xed,
- 0xf6, 0xfd, 0x8b, 0x71, 0xf4, 0x8d, 0xbd, 0xd2, 0xdc, 0x34, 0xc3, 0xb6, 0xed, 0x88, 0x14, 0xa1,
- 0x71, 0x99, 0x00, 0xfe, 0x08, 0xc0, 0xa6, 0xc1, 0x22, 0xff, 0x68, 0xfe, 0x8d, 0xea, 0xd4, 0x68,
- 0x6a, 0x48, 0xbb, 0x81, 0xd1, 0x6f, 0xdc, 0x20, 0x06, 0x68, 0x77, 0x1f, 0xeb, 0x4f, 0xf2, 0x2d,
- 0x1b, 0x11, 0xdc, 0x7c, 0x00, 0x10, 0x73, 0x71, 0x06, 0xcb, 0xe8, 0x5b, 0xb4, 0x82, 0x3d, 0x31,
- 0x3a, 0x16, 0xbe, 0xaa, 0xef, 0x53, 0x98, 0x47, 0xc8, 0xc1, 0x32, 0xcd, 0x3f, 0xcc, 0x24, 0x22,
- 0x74, 0x15, 0x81, 0x5f, 0xb9, 0x03, 0xcd, 0x3b, 0x2d, 0xc2, 0x48, 0x58, 0x0f, 0xaa, 0x76, 0x8c,
- 0x34, 0xc8, 0x0f, 0x81, 0xdb, 0xb3, 0x43, 0x99, 0x5f, 0x70, 0x28, 0xe7, 0xf0, 0x4e, 0x27, 0xfb,
- 0x0b, 0xb3, 0xc9, 0xfe, 0x3b, 0x00, 0x03, 0xc7, 0x3b, 0xd6, 0x27, 0x8e, 0x45, 0x5d, 0x11, 0x14,
- 0x61, 0x9a, 0x0e, 0x94, 0xc3, 0xef, 0x0b, 0xa2, 0x8e, 0xd1, 0x17, 0x06, 0xa3, 0xd4, 0xa7, 0x82,
- 0xf8, 0x0e, 0xac, 0x88, 0x74, 0x9b, 0xb3, 0x0b, 0xb6, 0x79, 0x8a, 0xaf, 0xf9, 0x0d, 0x58, 0x9b,
- 0x21, 0xc2, 0x41, 0x1c, 0x9b, 0x32, 0xfa, 0xc8, 0x00, 0xfe, 0x9e, 0x3d, 0xc8, 0x6f, 0xfe, 0x87,
- 0x2c, 0x2c, 0xef, 0x99, 0xae, 0x7d, 0x22, 0x02, 0x19, 0xb6, 0x36, 0xe8, 0x0f, 0xc5, 0xc8, 0x0c,
- 0x5b, 0xab, 0x20, 0x9d, 0x0f, 0xc9, 0x26, 0x4f, 0x1a, 0x66, 0x0e, 0xa6, 0x70, 0x35, 0x4d, 0xe4,
- 0x30, 0xaa, 0xbb, 0xd7, 0x10, 0xce, 0x9d, 0x63, 0xf7, 0x85, 0x1b, 0x84, 0x2b, 0x26, 0x04, 0xe3,
- 0xba, 0x9e, 0xe2, 0x15, 0x75, 0x3d, 0xa5, 0xd9, 0xf1, 0xbf, 0x0b, 0xd5, 0xa0, 0xef, 0x0b, 0xe1,
- 0x06, 0x43, 0x4f, 0x86, 0xdf, 0xa6, 0x4c, 0xa2, 0xa8, 0xc8, 0xce, 0x7b, 0xee, 0xa2, 0x8e, 0xef,
- 0xda, 0xee, 0xa9, 0xae, 0x1d, 0x4b, 0xe1, 0x50, 0x07, 0x29, 0x1b, 0x64, 0xff, 0x50, 0x50, 0xbe,
- 0xa1, 0x60, 0x44, 0x30, 0xe5, 0x7b, 0x4c, 0x29, 0x06, 0x9e, 0x6f, 0x0b, 0x95, 0xf4, 0xac, 0x18,
- 0x09, 0x0c, 0xf2, 0x3a, 0xa6, 0x3b, 0x98, 0x98, 0x03, 0xa1, 0x0f, 0xc6, 0x23, 0xb8, 0xf9, 0x3f,
- 0x0a, 0x00, 0x6a, 0x35, 0x04, 0x43, 0x7b, 0x4c, 0x87, 0x32, 0xb6, 0xae, 0x36, 0xae, 0x19, 0xf4,
- 0x9b, 0xbf, 0x97, 0xba, 0x08, 0x30, 0x7b, 0x8c, 0x1a, 0xb3, 0x4f, 0x27, 0x8b, 0x70, 0x70, 0x4c,
- 0x29, 0x74, 0x49, 0x15, 0x8d, 0x7f, 0xde, 0x48, 0xa2, 0xa8, 0xa8, 0xce, 0x94, 0xa2, 0xed, 0x5a,
- 0x2a, 0x19, 0x95, 0x37, 0x22, 0x98, 0xae, 0x12, 0x05, 0xad, 0x89, 0xf4, 0x0c, 0xe1, 0x8a, 0xe7,
- 0xd1, 0x2d, 0xb9, 0x18, 0xc5, 0xf7, 0xa0, 0x36, 0x36, 0x2f, 0x46, 0xc2, 0x95, 0x7b, 0x42, 0x0e,
- 0x3d, 0x4b, 0xd7, 0x3f, 0xbd, 0x76, 0x79, 0x03, 0x0f, 0x93, 0xe4, 0x46, 0x9a, 0x1b, 0x75, 0xc2,
- 0x0d, 0x68, 0x95, 0xa8, 0x69, 0xd4, 0x10, 0xdf, 0x00, 0x50, 0xbf, 0x12, 0x96, 0x6a, 0x26, 0x0b,
- 0x65, 0x8e, 0x44, 0x20, 0xfc, 0x33, 0x5b, 0x59, 0x57, 0x65, 0xa4, 0x62, 0x2e, 0xb4, 0xc5, 0x93,
- 0x40, 0xf8, 0xed, 0x91, 0x69, 0x3b, 0x7a, 0x82, 0x63, 0x04, 0x7f, 0x1b, 0x6e, 0x04, 0x93, 0x63,
- 0xd4, 0x99, 0x63, 0xd1, 0xf3, 0xf6, 0xc5, 0xf3, 0xc0, 0x11, 0x52, 0x0a, 0x5f, 0xd7, 0x58, 0xcc,
- 0x7f, 0xd8, 0x1c, 0x44, 0x6e, 0x18, 0x7d, 0x07, 0x05, 0x7f, 0xc5, 0x85, 0x5c, 0x11, 0x4a, 0x57,
- 0xb9, 0xb1, 0x0c, 0x9a, 0x3f, 0x85, 0xd2, 0x45, 0x70, 0x59, 0xfe, 0x65, 0xf8, 0x62, 0x8a, 0xc8,
- 0x50, 0x47, 0xd6, 0xc1, 0xb6, 0xed, 0x9a, 0x8e, 0xfd, 0x43, 0x55, 0x40, 0x90, 0x6b, 0x8e, 0xa1,
- 0x96, 0x1a, 0x38, 0xba, 0xd6, 0x49, 0xbf, 0x74, 0x25, 0x10, 0x83, 0x65, 0x05, 0x77, 0xa5, 0x6f,
- 0xd3, 0x59, 0x4c, 0x84, 0xd9, 0xc4, 0x75, 0xee, 0xb1, 0x2c, 0xbf, 0x0e, 0x4c, 0x61, 0x3a, 0xae,
- 0x39, 0x1e, 0xb7, 0xc6, 0x63, 0x47, 0xb0, 0x1c, 0x5d, 0x99, 0x8d, 0xb1, 0xea, 0x3a, 0x00, 0xcb,
- 0x37, 0xbf, 0x07, 0xb7, 0x68, 0x64, 0x9e, 0x0a, 0x3f, 0x0a, 0xb4, 0x75, 0x5f, 0x6f, 0xc0, 0x9a,
- 0xfa, 0xb5, 0xef, 0x49, 0xf5, 0x98, 0x9c, 0x4f, 0x0e, 0x2b, 0x0a, 0x8d, 0xbe, 0x57, 0x57, 0xd0,
- 0x45, 0xd8, 0x08, 0x17, 0xd1, 0x65, 0x9b, 0x3f, 0x2b, 0x02, 0x8f, 0x15, 0xa2, 0x67, 0x0b, 0x7f,
- 0xcb, 0x94, 0x66, 0x22, 0x87, 0x5a, 0xbb, 0xb4, 0x0a, 0xe0, 0xc5, 0x35, 0x7c, 0x37, 0xa1, 0x68,
- 0x07, 0x18, 0x1a, 0xea, 0x42, 0x5e, 0x0d, 0xf1, 0x5d, 0x80, 0xb1, 0xf0, 0x6d, 0xcf, 0x22, 0x0d,
- 0x2a, 0xcc, 0xbd, 0x8f, 0x31, 0xdb, 0xa8, 0xf5, 0xc3, 0x88, 0xc7, 0x48, 0xf0, 0x63, 0x3b, 0x14,
- 0xa4, 0xce, 0xd4, 0x8b, 0xd4, 0xe8, 0x24, 0x8a, 0xbf, 0x01, 0xd7, 0xc6, 0xbe, 0xdd, 0x17, 0x6a,
- 0x3a, 0x9e, 0x04, 0xd6, 0x26, 0x7d, 0x3d, 0xb0, 0x44, 0x94, 0xf3, 0x1e, 0xa1, 0x06, 0x9a, 0x2e,
- 0x05, 0x4c, 0x01, 0x9d, 0x22, 0xeb, 0xab, 0xe3, 0xaa, 0xd4, 0xb5, 0x66, 0xcc, 0x7f, 0xc8, 0xef,
- 0x03, 0xd3, 0x0f, 0xf6, 0x6c, 0x77, 0x57, 0xb8, 0x03, 0x39, 0x24, 0xe5, 0xae, 0x19, 0x33, 0x78,
- 0xb2, 0x60, 0xea, 0x1b, 0x4d, 0xea, 0x84, 0xa9, 0x62, 0x44, 0xb0, 0xfa, 0x1c, 0x81, 0xe3, 0xf9,
- 0x5d, 0xe9, 0xeb, 0x9a, 0xdd, 0x08, 0x46, 0x1f, 0x2a, 0xa0, 0xb6, 0x1e, 0xfa, 0x9e, 0x35, 0xa1,
- 0xf3, 0x0f, 0x65, 0xc4, 0xa6, 0xd1, 0x31, 0xe5, 0x9e, 0xe9, 0xea, 0x42, 0xca, 0x5a, 0x92, 0x32,
- 0x42, 0x53, 0x4c, 0xe8, 0x05, 0xb1, 0xc0, 0x55, 0x1d, 0x13, 0x26, 0x70, 0x9a, 0x26, 0x16, 0xc5,
- 0x22, 0x9a, 0x58, 0x0e, 0xf5, 0xdf, 0xf2, 0x3d, 0xdb, 0x8a, 0x65, 0xa9, 0x9a, 0x9e, 0x19, 0x7c,
- 0x82, 0x36, 0x96, 0xc9, 0x53, 0xb4, 0x11, 0xbe, 0xf9, 0xe3, 0x0c, 0x40, 0x3c, 0xf9, 0xa8, 0xf2,
- 0x31, 0x14, 0x2f, 0xf1, 0x5b, 0x70, 0x2d, 0x89, 0x76, 0x74, 0x31, 0x2c, 0xe9, 0x7d, 0xfc, 0x60,
- 0xcb, 0xbc, 0x08, 0x58, 0x56, 0x5f, 0xde, 0xd6, 0xb8, 0x67, 0x42, 0x50, 0x65, 0xe1, 0x75, 0x60,
- 0x31, 0x92, 0x6e, 0xe4, 0x05, 0x2c, 0x9f, 0x26, 0xfd, 0x58, 0x98, 0x7e, 0xc0, 0x0a, 0xcd, 0x1d,
- 0x28, 0xaa, 0x63, 0xb0, 0x39, 0x07, 0xd8, 0x2f, 0x57, 0x8d, 0xf2, 0xd7, 0x33, 0x00, 0x5b, 0xaa,
- 0x72, 0x1a, 0x77, 0xf1, 0x39, 0x75, 0x01, 0xf3, 0x3c, 0x2a, 0xd3, 0xb2, 0xa8, 0x02, 0x3d, 0x17,
- 0x7d, 0xf9, 0x07, 0x41, 0xd4, 0x1c, 0x33, 0xac, 0x1e, 0x53, 0x6b, 0x2e, 0x82, 0xd5, 0x06, 0xb2,
- 0xe9, 0xb9, 0xae, 0xe8, 0xe3, 0xf6, 0x13, 0x6d, 0x20, 0x11, 0xaa, 0xf9, 0xa3, 0x2c, 0x54, 0x36,
- 0x87, 0xa6, 0x54, 0x1f, 0xca, 0xf9, 0x0e, 0x94, 0x47, 0x22, 0x08, 0xcc, 0x81, 0x08, 0xf4, 0xb1,
- 0xcf, 0xf4, 0x99, 0x6d, 0x44, 0xbb, 0xfe, 0xc4, 0xf5, 0x85, 0x69, 0xa9, 0xaf, 0x03, 0x45, 0x5c,
- 0x4a, 0x82, 0x2b, 0xa3, 0xe0, 0xfb, 0x25, 0x24, 0xb8, 0xd1, 0xa7, 0x7c, 0xad, 0xe3, 0xf8, 0xdb,
- 0xd1, 0xaa, 0xb7, 0x49, 0x54, 0x63, 0x0f, 0xaa, 0x09, 0x56, 0xfe, 0x0a, 0xd4, 0x3c, 0xc7, 0x12,
- 0x81, 0xba, 0x1f, 0x18, 0x7f, 0x52, 0x31, 0x85, 0xa4, 0xe2, 0x0d, 0x5c, 0xb9, 0xc2, 0xd7, 0x27,
- 0x78, 0x21, 0xd8, 0xfc, 0x5f, 0x25, 0xa8, 0x62, 0xa3, 0xf6, 0x54, 0x1f, 0x66, 0xa6, 0xa3, 0x0e,
- 0x25, 0x4f, 0x4b, 0xd6, 0x17, 0x0b, 0xbd, 0x84, 0x4c, 0x5d, 0x10, 0x92, 0x4b, 0x17, 0x84, 0xdc,
- 0x86, 0x8a, 0x3a, 0x6e, 0xb2, 0x5a, 0xca, 0x12, 0xe6, 0x8c, 0x18, 0x81, 0xee, 0xca, 0xc8, 0xb3,
- 0xc8, 0x1e, 0xb7, 0xd4, 0x79, 0x4c, 0xce, 0x48, 0x60, 0x92, 0x9f, 0x79, 0xaa, 0xa6, 0x3f, 0xf3,
- 0x44, 0x95, 0x39, 0x63, 0xe7, 0xa2, 0xe7, 0xe9, 0xd6, 0x76, 0xac, 0xf8, 0x7e, 0x76, 0x1a, 0xcf,
- 0x37, 0xa1, 0xa4, 0xa7, 0x45, 0x9f, 0x3a, 0x7d, 0x65, 0xce, 0x4c, 0x68, 0xf2, 0x75, 0xfd, 0x57,
- 0x5f, 0x91, 0x32, 0x42, 0x4e, 0xfe, 0x08, 0xaa, 0xa6, 0x94, 0x66, 0x7f, 0x38, 0xd2, 0xf6, 0x33,
- 0x37, 0xe7, 0x68, 0x3a, 0x29, 0xa8, 0x15, 0x51, 0x1b, 0x49, 0x4e, 0xbe, 0x01, 0x15, 0x5f, 0x98,
- 0xa9, 0xd3, 0xf1, 0x57, 0xae, 0x10, 0x63, 0x84, 0xb4, 0x46, 0xcc, 0x16, 0x7d, 0x5d, 0x14, 0xe2,
- 0xaf, 0x8b, 0x36, 0x7e, 0x9a, 0x81, 0x95, 0x74, 0xe3, 0xff, 0x34, 0xbe, 0x76, 0xf7, 0xad, 0xf8,
- 0x6b, 0x77, 0x9f, 0xe1, 0xcb, 0x71, 0xbf, 0x9d, 0x01, 0x88, 0xc7, 0x05, 0xf7, 0x48, 0xf5, 0x55,
- 0xae, 0xd0, 0x6b, 0x57, 0x10, 0xdf, 0x49, 0x7d, 0xca, 0xe1, 0xed, 0x85, 0x06, 0x39, 0xf1, 0x33,
- 0x51, 0xd8, 0xfe, 0x00, 0x56, 0xd2, 0x78, 0xba, 0x10, 0xd0, 0xd9, 0x6d, 0xab, 0x1c, 0x55, 0x67,
- 0xaf, 0xf5, 0xa8, 0xad, 0x2f, 0xa2, 0x75, 0xf6, 0x1f, 0xb3, 0x6c, 0xe3, 0x8f, 0x32, 0x50, 0x89,
- 0x86, 0x9c, 0x7f, 0x37, 0x39, 0x57, 0xaa, 0x04, 0xe6, 0xad, 0x45, 0xe6, 0x2a, 0xfe, 0xd5, 0x76,
- 0xa5, 0x7f, 0x91, 0x98, 0xba, 0x86, 0x07, 0x2b, 0xe9, 0x87, 0x73, 0x8c, 0xe8, 0xa3, 0xb4, 0x11,
- 0x7d, 0x73, 0xa1, 0x57, 0x86, 0xa1, 0xea, 0xae, 0x1d, 0x48, 0x6d, 0x5f, 0xdf, 0xcf, 0xbe, 0x97,
- 0x69, 0xdc, 0x85, 0xe5, 0xe4, 0xa3, 0xd9, 0xbb, 0xa8, 0xf7, 0xff, 0x28, 0x07, 0x2b, 0xe9, 0x2a,
- 0x12, 0xba, 0xdb, 0xa6, 0x2a, 0x98, 0x0e, 0x1c, 0x2b, 0x71, 0x17, 0x80, 0x61, 0x98, 0xac, 0x83,
- 0x61, 0x42, 0xac, 0x51, 0x16, 0xcc, 0x1b, 0x09, 0x76, 0x37, 0xf9, 0x45, 0xcf, 0x37, 0x38, 0x84,
- 0x77, 0x12, 0xd9, 0x98, 0x57, 0xf4, 0xb7, 0xcd, 0x7e, 0x94, 0xe5, 0xb5, 0x44, 0x45, 0xfa, 0x4f,
- 0xd0, 0x13, 0x5c, 0xdd, 0x98, 0xb8, 0x96, 0x23, 0xac, 0x08, 0xfb, 0xd3, 0x24, 0x36, 0x2a, 0x29,
- 0xff, 0x51, 0x9e, 0xaf, 0x40, 0xa5, 0x3b, 0x39, 0xd6, 0xe5, 0xe4, 0x7f, 0x29, 0xcf, 0x6f, 0xc2,
- 0x9a, 0xa6, 0x8a, 0xab, 0x37, 0xd9, 0x5f, 0xc6, 0x3d, 0x6b, 0xa5, 0xa5, 0xc6, 0x4b, 0x37, 0x94,
- 0xfd, 0x95, 0x3c, 0x36, 0x81, 0xae, 0xba, 0xff, 0x55, 0x92, 0x13, 0x5d, 0xfd, 0x61, 0xbf, 0x96,
- 0xe7, 0xab, 0x00, 0xdd, 0x5e, 0xf4, 0xa2, 0xdf, 0xc8, 0xf3, 0x2a, 0x14, 0xbb, 0x3d, 0x92, 0xf6,
- 0xe3, 0x3c, 0xbf, 0x01, 0x2c, 0x7e, 0xaa, 0x6b, 0x5a, 0xff, 0x86, 0x6a, 0x4c, 0x54, 0xa4, 0xfa,
- 0x37, 0xf3, 0xd8, 0xaf, 0x70, 0x94, 0xd9, 0xdf, 0xca, 0x73, 0x06, 0xd5, 0x44, 0x6e, 0x95, 0xfd,
- 0xed, 0x3c, 0xe7, 0x50, 0xdb, 0xb3, 0x83, 0xc0, 0x76, 0x07, 0xba, 0x07, 0xbf, 0x4e, 0x6f, 0xde,
- 0x8e, 0x6e, 0x2f, 0xb1, 0xdf, 0xcc, 0xf3, 0x5b, 0xc0, 0x93, 0xe7, 0x49, 0xfa, 0xc1, 0xdf, 0x21,
- 0x6e, 0xb5, 0x4f, 0x06, 0x1a, 0xf7, 0x77, 0x89, 0x1b, 0x35, 0x41, 0x23, 0x7e, 0x8b, 0x06, 0x64,
- 0x33, 0xae, 0x82, 0xd5, 0xf8, 0x9f, 0x10, 0x73, 0x38, 0x99, 0x0a, 0xf7, 0xd3, 0xfc, 0xfd, 0x9f,
- 0xd1, 0x79, 0x40, 0xb2, 0x98, 0x8c, 0x2f, 0x43, 0xd9, 0xf1, 0xdc, 0x81, 0x54, 0x5f, 0x52, 0xad,
- 0x41, 0x25, 0x18, 0x7a, 0xbe, 0x24, 0x90, 0xae, 0x57, 0xba, 0x74, 0x0d, 0x5f, 0x5d, 0x48, 0x50,
- 0x51, 0x9d, 0xca, 0xaf, 0x4a, 0x73, 0xc0, 0xaa, 0x51, 0xfd, 0x6e, 0x3e, 0xaa, 0x31, 0xa6, 0xcf,
- 0x01, 0x84, 0xd7, 0xad, 0x59, 0x11, 0x49, 0x27, 0xbe, 0xa3, 0x6a, 0x8d, 0x05, 0x7a, 0xf4, 0xea,
- 0x93, 0x89, 0xe3, 0x21, 0x06, 0x0e, 0x15, 0x85, 0xf5, 0xbe, 0x6f, 0xab, 0x8b, 0xbc, 0xba, 0x74,
- 0xcf, 0xc2, 0x76, 0x44, 0xd5, 0x29, 0x4c, 0xdc, 0xff, 0x7b, 0x19, 0x58, 0x0e, 0x2f, 0xc1, 0xdb,
- 0x03, 0xdb, 0x55, 0xd5, 0xca, 0xe1, 0xf7, 0x69, 0xfb, 0x8e, 0x3d, 0x0e, 0xbf, 0xf7, 0xb8, 0x0a,
- 0x55, 0xcb, 0x37, 0x07, 0x2d, 0xd7, 0xda, 0xf2, 0xbd, 0xb1, 0x6a, 0xb6, 0x3a, 0x31, 0x54, 0x55,
- 0xd2, 0xcf, 0xc5, 0x31, 0x92, 0x8f, 0x85, 0xcf, 0xf2, 0x54, 0x16, 0x38, 0x34, 0x7d, 0xdb, 0x1d,
- 0xb4, 0xcf, 0xa5, 0x70, 0x03, 0x55, 0x2d, 0x5d, 0x85, 0xd2, 0x24, 0x10, 0x7d, 0x33, 0x10, 0xac,
- 0x88, 0xc0, 0xf1, 0xc4, 0x76, 0xa4, 0xed, 0xaa, 0xcf, 0x2c, 0x46, 0xe5, 0xd0, 0x65, 0xec, 0x99,
- 0x39, 0xb6, 0x59, 0xe5, 0xfe, 0xbf, 0xca, 0x40, 0x95, 0xd4, 0x22, 0xce, 0x89, 0xc7, 0x3e, 0x5a,
- 0x15, 0x4a, 0xbb, 0xd1, 0xf7, 0xf6, 0x8a, 0x90, 0x3d, 0x38, 0x55, 0x39, 0x71, 0xad, 0x16, 0xea,
- 0xb6, 0xaa, 0xfa, 0xf4, 0x5e, 0x9e, 0x7f, 0x0e, 0x6e, 0x18, 0x62, 0xe4, 0x49, 0xf1, 0xcc, 0xb4,
- 0x65, 0xf2, 0x66, 0x52, 0x01, 0xc3, 0x39, 0xf5, 0x28, 0xbc, 0x8a, 0x54, 0xa4, 0x70, 0x0e, 0x5f,
- 0x1b, 0x62, 0x4a, 0xd8, 0x7b, 0xc2, 0xe8, 0xf8, 0xae, 0x1c, 0x91, 0x7c, 0xe4, 0xd9, 0x2e, 0xbe,
- 0x8d, 0x6e, 0x50, 0x13, 0x86, 0x0e, 0x57, 0x10, 0x05, 0xf7, 0xf7, 0xe1, 0xe6, 0xfc, 0x23, 0x01,
- 0x75, 0xb7, 0x9a, 0x3e, 0xf2, 0x4c, 0x77, 0x55, 0x9e, 0xf9, 0xb6, 0xba, 0x04, 0x5b, 0x81, 0xc2,
- 0xc1, 0x73, 0x97, 0xd4, 0x62, 0x0d, 0x6a, 0xfb, 0x5e, 0x82, 0x87, 0xe5, 0xee, 0xf7, 0x53, 0xa7,
- 0x38, 0xf1, 0xa0, 0x84, 0x8d, 0x58, 0x4a, 0xdc, 0xc3, 0xca, 0xa8, 0xf3, 0x01, 0xfa, 0x3f, 0x1d,
- 0xea, 0xbb, 0x13, 0xfa, 0xf4, 0xc4, 0x52, 0xdf, 0x9d, 0x88, 0x9a, 0x99, 0x57, 0x1f, 0xe0, 0x72,
- 0xfb, 0xc2, 0x11, 0x16, 0x2b, 0xdc, 0x7f, 0x0f, 0x56, 0x75, 0x57, 0xfb, 0x22, 0x08, 0xc2, 0x7b,
- 0x4c, 0x87, 0xbe, 0x7d, 0xa6, 0xbe, 0x6d, 0xb1, 0x0c, 0xe5, 0x43, 0xe1, 0x07, 0x9e, 0x4b, 0xdf,
- 0xf5, 0x00, 0x28, 0x76, 0x87, 0xa6, 0x8f, 0xef, 0xb8, 0xff, 0x35, 0x3d, 0x48, 0x4f, 0xce, 0xc3,
- 0xad, 0x01, 0xd7, 0x8f, 0xfe, 0xac, 0x8d, 0x29, 0x4d, 0x4d, 0x2e, 0x7d, 0x61, 0x8e, 0x58, 0xf6,
- 0xfe, 0x26, 0x54, 0xe8, 0x1a, 0xd4, 0x63, 0xdb, 0xb5, 0xb0, 0xe3, 0x1b, 0xba, 0x24, 0x9f, 0xbe,
- 0xb7, 0x74, 0x46, 0xc3, 0x51, 0x56, 0x5f, 0xa6, 0x65, 0x59, 0x7e, 0x13, 0x78, 0x6b, 0x22, 0xbd,
- 0x91, 0x49, 0xd7, 0x77, 0x9d, 0x0b, 0xf5, 0x15, 0xe3, 0xdc, 0xfd, 0x6f, 0x03, 0x57, 0x39, 0x36,
- 0x4b, 0x9c, 0xdb, 0xee, 0x20, 0xfa, 0x6e, 0x00, 0xd0, 0x47, 0x40, 0x2c, 0x71, 0x1e, 0xde, 0x61,
- 0x0b, 0x81, 0xf0, 0x53, 0x24, 0xdb, 0xde, 0xc4, 0xc5, 0x46, 0x3f, 0x85, 0xeb, 0x4a, 0xc5, 0xb0,
- 0x17, 0x74, 0x37, 0xf4, 0xd2, 0xc0, 0x5f, 0xdd, 0x61, 0x93, 0x93, 0x20, 0xa2, 0x65, 0x19, 0x6c,
- 0x58, 0x14, 0x34, 0xc7, 0xf8, 0xec, 0xfd, 0x26, 0x5c, 0x9b, 0x93, 0xb9, 0x20, 0xa3, 0xae, 0xe2,
- 0x37, 0xb6, 0x74, 0xff, 0x43, 0x58, 0x53, 0x66, 0x68, 0x5f, 0xdd, 0xde, 0x0b, 0x87, 0xed, 0x59,
- 0x67, 0xbb, 0xa3, 0x46, 0x7a, 0xb3, 0xbd, 0xbb, 0xfb, 0x64, 0xb7, 0x65, 0xb0, 0x0c, 0xe9, 0xc3,
- 0x41, 0xef, 0x68, 0xf3, 0x60, 0x7f, 0xbf, 0xbd, 0xd9, 0x6b, 0x6f, 0xb1, 0xec, 0xc6, 0xfd, 0x7f,
- 0xfb, 0x8b, 0x3b, 0x99, 0x9f, 0xff, 0xe2, 0x4e, 0xe6, 0xbf, 0xfc, 0xe2, 0x4e, 0xe6, 0xc7, 0x9f,
- 0xde, 0x59, 0xfa, 0xf9, 0xa7, 0x77, 0x96, 0xfe, 0xe3, 0xa7, 0x77, 0x96, 0x3e, 0x61, 0xd3, 0xff,
- 0x6a, 0xe7, 0xb8, 0x48, 0x21, 0xc3, 0x5b, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x19, 0xb6, 0xd3,
- 0x38, 0x85, 0x67, 0x00, 0x00,
+ // 9225 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x7d, 0x5b, 0x6c, 0x23, 0xd9,
+ 0x95, 0x98, 0xf8, 0x26, 0x0f, 0x45, 0xe9, 0xea, 0xf6, 0x8b, 0xa6, 0xdb, 0x9d, 0x36, 0x3d, 0x9e,
+ 0x69, 0xb7, 0xc7, 0xea, 0x99, 0x9e, 0x19, 0xcf, 0x78, 0xec, 0x19, 0x9b, 0x92, 0xa8, 0x16, 0xa7,
+ 0xf5, 0x72, 0x91, 0xdd, 0xed, 0x19, 0xec, 0x46, 0x29, 0xb1, 0xae, 0xc8, 0xb2, 0x8a, 0x55, 0x74,
+ 0xd5, 0xa5, 0x5a, 0x32, 0x92, 0xc0, 0x79, 0xed, 0x66, 0xff, 0x9c, 0x20, 0x9b, 0x64, 0x11, 0x04,
+ 0x6b, 0x7f, 0x04, 0x08, 0xb2, 0x1b, 0xe4, 0xcb, 0x48, 0x36, 0x0f, 0x20, 0xbb, 0x5f, 0x01, 0xf2,
+ 0xe3, 0xe4, 0x2b, 0x40, 0x02, 0x24, 0xf0, 0x00, 0xf9, 0x09, 0x92, 0xc5, 0x06, 0x08, 0x60, 0x04,
+ 0xf9, 0x08, 0xce, 0xb9, 0xb7, 0x5e, 0x24, 0xa5, 0x66, 0xcf, 0xee, 0x06, 0xf9, 0x12, 0xef, 0xa9,
+ 0x73, 0x4e, 0xdd, 0xc7, 0xb9, 0xe7, 0x9e, 0xd7, 0x2d, 0xc1, 0x2b, 0xe3, 0xd3, 0xc1, 0x03, 0xc7,
+ 0x3e, 0x7e, 0x30, 0x3e, 0x7e, 0x30, 0xf2, 0x2c, 0xe1, 0x3c, 0x18, 0xfb, 0x9e, 0xf4, 0x02, 0xd5,
+ 0x08, 0xd6, 0xa9, 0xc5, 0x6b, 0xa6, 0x7b, 0x21, 0x2f, 0xc6, 0x62, 0x9d, 0xa0, 0x8d, 0xdb, 0x03,
+ 0xcf, 0x1b, 0x38, 0x42, 0xa1, 0x1e, 0x4f, 0x4e, 0x1e, 0x04, 0xd2, 0x9f, 0xf4, 0xa5, 0x42, 0x6e,
+ 0xfe, 0x3c, 0x0f, 0x37, 0xbb, 0x23, 0xd3, 0x97, 0x1b, 0x8e, 0xd7, 0x3f, 0xed, 0xba, 0xe6, 0x38,
+ 0x18, 0x7a, 0x72, 0xc3, 0x0c, 0x04, 0x7f, 0x1d, 0x8a, 0xc7, 0x08, 0x0c, 0xea, 0x99, 0xbb, 0xb9,
+ 0x7b, 0xd5, 0x87, 0xd7, 0xd7, 0x53, 0x8c, 0xd7, 0x89, 0xc2, 0xd0, 0x38, 0xfc, 0x4d, 0x28, 0x59,
+ 0x42, 0x9a, 0xb6, 0x13, 0xd4, 0xb3, 0x77, 0x33, 0xf7, 0xaa, 0x0f, 0x6f, 0xad, 0xab, 0x17, 0xaf,
+ 0x87, 0x2f, 0x5e, 0xef, 0xd2, 0x8b, 0x8d, 0x10, 0x8f, 0xbf, 0x0b, 0xe5, 0x13, 0xdb, 0x11, 0x8f,
+ 0xc5, 0x45, 0x50, 0xcf, 0x5d, 0x49, 0xb3, 0x91, 0xad, 0x67, 0x8c, 0x08, 0x99, 0x6f, 0xc2, 0x8a,
+ 0x38, 0x97, 0xbe, 0x69, 0x08, 0xc7, 0x94, 0xb6, 0xe7, 0x06, 0xf5, 0x3c, 0xf5, 0xf0, 0xd6, 0x54,
+ 0x0f, 0xc3, 0xe7, 0x44, 0x3e, 0x45, 0xc2, 0xef, 0x42, 0xd5, 0x3b, 0xfe, 0xbe, 0xe8, 0xcb, 0xde,
+ 0xc5, 0x58, 0x04, 0xf5, 0xc2, 0xdd, 0xdc, 0xbd, 0x8a, 0x91, 0x04, 0xf1, 0x6f, 0x40, 0xb5, 0xef,
+ 0x39, 0x8e, 0xe8, 0xab, 0x77, 0x14, 0xaf, 0x1e, 0x56, 0x12, 0x97, 0xbf, 0x0d, 0x37, 0x7c, 0x31,
+ 0xf2, 0xce, 0x84, 0xb5, 0x19, 0x41, 0x69, 0x9c, 0x65, 0x7a, 0xcd, 0xfc, 0x87, 0xbc, 0x05, 0x35,
+ 0x5f, 0xf7, 0x6f, 0xd7, 0x76, 0x4f, 0x83, 0x7a, 0x89, 0x86, 0xf5, 0xf9, 0x4b, 0x86, 0x85, 0x38,
+ 0x46, 0x9a, 0x82, 0x33, 0xc8, 0x9d, 0x8a, 0x8b, 0x7a, 0xe5, 0x6e, 0xe6, 0x5e, 0xc5, 0xc0, 0x9f,
+ 0xfc, 0x7d, 0xa8, 0x7b, 0xbe, 0x3d, 0xb0, 0x5d, 0xd3, 0xd9, 0xf4, 0x85, 0x29, 0x85, 0xd5, 0xb3,
+ 0x47, 0x22, 0x90, 0xe6, 0x68, 0x5c, 0x87, 0xbb, 0x99, 0x7b, 0x39, 0xe3, 0xd2, 0xe7, 0xfc, 0x2d,
+ 0xb5, 0x42, 0x1d, 0xf7, 0xc4, 0xab, 0x57, 0xf5, 0xf0, 0xd3, 0x7d, 0xd9, 0xd6, 0x8f, 0x8d, 0x08,
+ 0xb1, 0xf9, 0xcb, 0x2c, 0x14, 0xbb, 0xc2, 0xf4, 0xfb, 0xc3, 0xc6, 0xaf, 0x67, 0xa0, 0x68, 0x88,
+ 0x60, 0xe2, 0x48, 0xde, 0x80, 0xb2, 0x9a, 0xdb, 0x8e, 0x55, 0xcf, 0x50, 0xef, 0xa2, 0xf6, 0x67,
+ 0x91, 0x9d, 0x75, 0xc8, 0x8f, 0x84, 0x34, 0xeb, 0x39, 0x9a, 0xa1, 0xc6, 0x54, 0xaf, 0xd4, 0xeb,
+ 0xd7, 0xf7, 0x84, 0x34, 0x0d, 0xc2, 0x6b, 0x7c, 0x9a, 0x81, 0x3c, 0x36, 0xf9, 0x6d, 0xa8, 0x0c,
+ 0xed, 0xc1, 0xd0, 0xb1, 0x07, 0x43, 0xa9, 0x3b, 0x12, 0x03, 0xf8, 0x87, 0xb0, 0x1a, 0x35, 0x0c,
+ 0xd3, 0x1d, 0x08, 0xec, 0xd1, 0x3c, 0xe1, 0xa7, 0x87, 0xc6, 0x34, 0x32, 0xaf, 0x43, 0x89, 0xf6,
+ 0x43, 0xc7, 0x22, 0x89, 0xae, 0x18, 0x61, 0x13, 0xc5, 0x2d, 0x5c, 0xa9, 0xc7, 0xe2, 0xa2, 0x9e,
+ 0xa7, 0xa7, 0x49, 0x10, 0x6f, 0xc1, 0x6a, 0xd8, 0xdc, 0xd2, 0xb3, 0x51, 0xb8, 0x7a, 0x36, 0xa6,
+ 0xf1, 0x9b, 0x3f, 0xda, 0x83, 0x02, 0x6d, 0x4b, 0xbe, 0x02, 0x59, 0x3b, 0x9c, 0xe8, 0xac, 0x6d,
+ 0xf1, 0x07, 0x50, 0x3c, 0xb1, 0x85, 0x63, 0xbd, 0x70, 0x86, 0x35, 0x1a, 0x6f, 0xc3, 0xb2, 0x2f,
+ 0x02, 0xe9, 0xdb, 0x5a, 0xfa, 0xd5, 0x06, 0xfd, 0xe2, 0x3c, 0x1d, 0xb0, 0x6e, 0x24, 0x10, 0x8d,
+ 0x14, 0x19, 0x0e, 0xbb, 0x3f, 0xb4, 0x1d, 0xcb, 0x17, 0x6e, 0xc7, 0x52, 0xfb, 0xb4, 0x62, 0x24,
+ 0x41, 0xfc, 0x1e, 0xac, 0x1e, 0x9b, 0xfd, 0xd3, 0x81, 0xef, 0x4d, 0x5c, 0xdc, 0x10, 0x9e, 0x4f,
+ 0xc3, 0xae, 0x18, 0xd3, 0x60, 0xfe, 0x06, 0x14, 0x4c, 0xc7, 0x1e, 0xb8, 0xb4, 0x13, 0x57, 0x66,
+ 0x16, 0x5d, 0xf5, 0xa5, 0x85, 0x18, 0x86, 0x42, 0xe4, 0x3b, 0x50, 0x3b, 0x13, 0xbe, 0xb4, 0xfb,
+ 0xa6, 0x43, 0xf0, 0x7a, 0x89, 0x28, 0x9b, 0x73, 0x29, 0x9f, 0x26, 0x31, 0x8d, 0x34, 0x21, 0xef,
+ 0x00, 0x04, 0xa8, 0x26, 0x69, 0x39, 0xf5, 0x5e, 0x78, 0x6d, 0x2e, 0x9b, 0x4d, 0xcf, 0x95, 0xc2,
+ 0x95, 0xeb, 0xdd, 0x08, 0x7d, 0x67, 0xc9, 0x48, 0x10, 0xf3, 0x77, 0x21, 0x2f, 0xc5, 0xb9, 0xac,
+ 0xaf, 0x5c, 0x31, 0xa3, 0x21, 0x93, 0x9e, 0x38, 0x97, 0x3b, 0x4b, 0x06, 0x11, 0x20, 0x21, 0x6e,
+ 0xb2, 0xfa, 0xea, 0x02, 0x84, 0xb8, 0x2f, 0x91, 0x10, 0x09, 0xf8, 0x07, 0x50, 0x74, 0xcc, 0x0b,
+ 0x6f, 0x22, 0xeb, 0x8c, 0x48, 0xbf, 0x74, 0x25, 0xe9, 0x2e, 0xa1, 0xee, 0x2c, 0x19, 0x9a, 0x88,
+ 0xbf, 0x0d, 0x39, 0xcb, 0x3e, 0xab, 0xaf, 0x11, 0xed, 0xdd, 0x2b, 0x69, 0xb7, 0xec, 0xb3, 0x9d,
+ 0x25, 0x03, 0xd1, 0xf9, 0x26, 0x94, 0x8f, 0x3d, 0xef, 0x74, 0x64, 0xfa, 0xa7, 0x75, 0x4e, 0xa4,
+ 0x5f, 0xbe, 0x92, 0x74, 0x43, 0x23, 0xef, 0x2c, 0x19, 0x11, 0x21, 0x0e, 0xd9, 0xee, 0x7b, 0x6e,
+ 0xfd, 0xda, 0x02, 0x43, 0xee, 0xf4, 0x3d, 0x17, 0x87, 0x8c, 0x04, 0x48, 0xe8, 0xd8, 0xee, 0x69,
+ 0xfd, 0xfa, 0x02, 0x84, 0xa8, 0x39, 0x91, 0x10, 0x09, 0xb0, 0xdb, 0x96, 0x29, 0xcd, 0x33, 0x5b,
+ 0x3c, 0xaf, 0xdf, 0x58, 0xa0, 0xdb, 0x5b, 0x1a, 0x19, 0xbb, 0x1d, 0x12, 0x22, 0x93, 0x70, 0x6b,
+ 0xd6, 0x6f, 0x2e, 0xc0, 0x24, 0xd4, 0xe8, 0xc8, 0x24, 0x24, 0xe4, 0x7f, 0x16, 0xd6, 0x4e, 0x84,
+ 0x29, 0x27, 0xbe, 0xb0, 0xe2, 0x83, 0xee, 0x16, 0x71, 0x5b, 0xbf, 0x7a, 0xed, 0xa7, 0xa9, 0x76,
+ 0x96, 0x8c, 0x59, 0x56, 0xfc, 0x7d, 0x28, 0x38, 0xa6, 0x14, 0xe7, 0xf5, 0x3a, 0xf1, 0x6c, 0xbe,
+ 0x40, 0x28, 0xa4, 0x38, 0xdf, 0x59, 0x32, 0x14, 0x09, 0xff, 0x1e, 0xac, 0x4a, 0xf3, 0xd8, 0x11,
+ 0x07, 0x27, 0x1a, 0x21, 0xa8, 0x7f, 0x8e, 0xb8, 0xbc, 0x7e, 0xb5, 0x38, 0xa7, 0x69, 0x76, 0x96,
+ 0x8c, 0x69, 0x36, 0xd8, 0x2b, 0x02, 0xd5, 0x1b, 0x0b, 0xf4, 0x8a, 0xf8, 0x61, 0xaf, 0x88, 0x84,
+ 0xef, 0x42, 0x95, 0x7e, 0x6c, 0x7a, 0xce, 0x64, 0xe4, 0xd6, 0x3f, 0x4f, 0x1c, 0xee, 0xbd, 0x98,
+ 0x83, 0xc2, 0xdf, 0x59, 0x32, 0x92, 0xe4, 0xb8, 0x88, 0xd4, 0x34, 0xbc, 0xe7, 0xf5, 0xdb, 0x0b,
+ 0x2c, 0x62, 0x4f, 0x23, 0xe3, 0x22, 0x86, 0x84, 0xb8, 0xf5, 0x9e, 0xdb, 0xd6, 0x40, 0xc8, 0xfa,
+ 0x17, 0x16, 0xd8, 0x7a, 0xcf, 0x08, 0x15, 0xb7, 0x9e, 0x22, 0x42, 0x31, 0xee, 0x0f, 0x4d, 0x59,
+ 0xbf, 0xb3, 0x80, 0x18, 0x6f, 0x0e, 0x4d, 0xd2, 0x15, 0x48, 0xd0, 0xf8, 0x21, 0x2c, 0x27, 0xb5,
+ 0x32, 0xe7, 0x90, 0xf7, 0x85, 0xa9, 0x4e, 0x84, 0xb2, 0x41, 0xbf, 0x11, 0x26, 0x2c, 0x5b, 0xd2,
+ 0x89, 0x50, 0x36, 0xe8, 0x37, 0xbf, 0x09, 0x45, 0x65, 0x9b, 0x90, 0xc2, 0x2f, 0x1b, 0xba, 0x85,
+ 0xb8, 0x96, 0x6f, 0x0e, 0xe8, 0xdc, 0x2a, 0x1b, 0xf4, 0x1b, 0x71, 0x2d, 0xdf, 0x1b, 0x1f, 0xb8,
+ 0xa4, 0xb0, 0xcb, 0x86, 0x6e, 0x35, 0x3e, 0xfd, 0x00, 0x4a, 0xba, 0x53, 0x8d, 0xbf, 0x9f, 0x81,
+ 0xa2, 0x52, 0x28, 0xfc, 0xdb, 0x50, 0x08, 0xe4, 0x85, 0x23, 0xa8, 0x0f, 0x2b, 0x0f, 0xbf, 0xb2,
+ 0x80, 0x12, 0x5a, 0xef, 0x22, 0x81, 0xa1, 0xe8, 0x9a, 0x06, 0x14, 0xa8, 0xcd, 0x4b, 0x90, 0x33,
+ 0xbc, 0xe7, 0x6c, 0x89, 0x03, 0x14, 0xd5, 0x62, 0xb1, 0x0c, 0x02, 0xb7, 0xec, 0x33, 0x96, 0x45,
+ 0xe0, 0x8e, 0x30, 0x2d, 0xe1, 0xb3, 0x1c, 0xaf, 0x41, 0x25, 0x5c, 0x96, 0x80, 0xe5, 0x39, 0x83,
+ 0xe5, 0xc4, 0x82, 0x07, 0xac, 0xd0, 0xf8, 0x9f, 0x79, 0xc8, 0xe3, 0xfe, 0xe7, 0xaf, 0x40, 0x4d,
+ 0x9a, 0xfe, 0x40, 0x28, 0x43, 0x38, 0x32, 0x52, 0xd2, 0x40, 0xfe, 0x41, 0x38, 0x86, 0x2c, 0x8d,
+ 0xe1, 0xb5, 0x17, 0xea, 0x95, 0xd4, 0x08, 0x12, 0xa7, 0x70, 0x6e, 0xb1, 0x53, 0x78, 0x1b, 0xca,
+ 0xa8, 0xce, 0xba, 0xf6, 0x0f, 0x05, 0x4d, 0xfd, 0xca, 0xc3, 0xfb, 0x2f, 0x7e, 0x65, 0x47, 0x53,
+ 0x18, 0x11, 0x2d, 0xef, 0x40, 0xa5, 0x6f, 0xfa, 0x16, 0x75, 0x86, 0x56, 0x6b, 0xe5, 0xe1, 0x57,
+ 0x5f, 0xcc, 0x68, 0x33, 0x24, 0x31, 0x62, 0x6a, 0x7e, 0x00, 0x55, 0x4b, 0x04, 0x7d, 0xdf, 0x1e,
+ 0x93, 0x7a, 0x53, 0x67, 0xf1, 0xd7, 0x5e, 0xcc, 0x6c, 0x2b, 0x26, 0x32, 0x92, 0x1c, 0xd0, 0x22,
+ 0xf3, 0x23, 0xfd, 0x56, 0x22, 0x03, 0x21, 0x06, 0x34, 0xdf, 0x85, 0x72, 0x38, 0x1e, 0xbe, 0x0c,
+ 0x65, 0xfc, 0xbb, 0xef, 0xb9, 0x82, 0x2d, 0xe1, 0xda, 0x62, 0xab, 0x3b, 0x32, 0x1d, 0x87, 0x65,
+ 0xf8, 0x0a, 0x00, 0x36, 0xf7, 0x84, 0x65, 0x4f, 0x46, 0x2c, 0xdb, 0xfc, 0x66, 0x28, 0x2d, 0x65,
+ 0xc8, 0x1f, 0x9a, 0x03, 0xa4, 0x58, 0x86, 0x72, 0xa8, 0xae, 0x59, 0x06, 0xe9, 0xb7, 0xcc, 0x60,
+ 0x78, 0xec, 0x99, 0xbe, 0xc5, 0xb2, 0xbc, 0x0a, 0xa5, 0x96, 0xdf, 0x1f, 0xda, 0x67, 0x82, 0xe5,
+ 0x9a, 0x0f, 0xa0, 0x9a, 0xe8, 0x2f, 0xb2, 0xd0, 0x2f, 0xad, 0x40, 0xa1, 0x65, 0x59, 0xc2, 0x62,
+ 0x19, 0x24, 0xd0, 0x03, 0x64, 0xd9, 0xe6, 0x57, 0xa1, 0x12, 0xcd, 0x16, 0xa2, 0xe3, 0xc1, 0xcd,
+ 0x96, 0xf0, 0x17, 0x82, 0x59, 0x06, 0xa5, 0xb2, 0xe3, 0x3a, 0xb6, 0x2b, 0x58, 0xb6, 0xf1, 0xe7,
+ 0x48, 0x54, 0xf9, 0xb7, 0xd2, 0x1b, 0xe2, 0xd5, 0x17, 0x9d, 0xac, 0xe9, 0xdd, 0xf0, 0xf9, 0xc4,
+ 0xf8, 0x76, 0x6d, 0xea, 0x5c, 0x19, 0xf2, 0x5b, 0x9e, 0x0c, 0x58, 0xa6, 0xf1, 0xdf, 0xb2, 0x50,
+ 0x0e, 0x0f, 0x54, 0xf4, 0x09, 0x26, 0xbe, 0xa3, 0x05, 0x1a, 0x7f, 0xf2, 0xeb, 0x50, 0x90, 0xb6,
+ 0xd4, 0x62, 0x5c, 0x31, 0x54, 0x03, 0x6d, 0xb5, 0xe4, 0xca, 0x2a, 0x03, 0x76, 0x7a, 0xa9, 0xec,
+ 0x91, 0x39, 0x10, 0x3b, 0x66, 0x30, 0xd4, 0x26, 0x6c, 0x0c, 0x40, 0xfa, 0x13, 0xf3, 0x0c, 0x65,
+ 0x8e, 0x9e, 0x2b, 0x2b, 0x2e, 0x09, 0xe2, 0x6f, 0x41, 0x1e, 0x07, 0xa8, 0x85, 0xe6, 0xcf, 0x4c,
+ 0x0d, 0x18, 0xc5, 0xe4, 0xd0, 0x17, 0xb8, 0x3c, 0xeb, 0xe8, 0x81, 0x19, 0x84, 0xcc, 0x5f, 0x85,
+ 0x15, 0xb5, 0x09, 0x0f, 0x42, 0xff, 0xa1, 0x44, 0x9c, 0xa7, 0xa0, 0xbc, 0x85, 0xd3, 0x69, 0x4a,
+ 0x51, 0x2f, 0x2f, 0x20, 0xdf, 0xe1, 0xe4, 0xac, 0x77, 0x91, 0xc4, 0x50, 0x94, 0xcd, 0x77, 0x70,
+ 0x4e, 0x4d, 0x29, 0x70, 0x99, 0xdb, 0xa3, 0xb1, 0xbc, 0x50, 0x42, 0xb3, 0x2d, 0x64, 0x7f, 0x68,
+ 0xbb, 0x03, 0x96, 0x51, 0x53, 0x8c, 0x8b, 0x48, 0x28, 0xbe, 0xef, 0xf9, 0x2c, 0xd7, 0x68, 0x40,
+ 0x1e, 0x65, 0x14, 0x95, 0xa4, 0x6b, 0x8e, 0x84, 0x9e, 0x69, 0xfa, 0xdd, 0xb8, 0x06, 0x6b, 0x33,
+ 0xe7, 0x71, 0xe3, 0xf7, 0x8a, 0x4a, 0x42, 0x90, 0x82, 0x6c, 0x41, 0x4d, 0x41, 0x66, 0xde, 0x4b,
+ 0xe9, 0x18, 0xe4, 0x92, 0xd6, 0x31, 0x1f, 0x40, 0x01, 0x07, 0x16, 0xaa, 0x98, 0x05, 0xc8, 0xf7,
+ 0x10, 0xdd, 0x50, 0x54, 0xe8, 0xc1, 0xf4, 0x87, 0xa2, 0x7f, 0x2a, 0x2c, 0xad, 0xeb, 0xc3, 0x26,
+ 0x0a, 0x4d, 0x3f, 0x61, 0x9e, 0xab, 0x06, 0x89, 0x44, 0xdf, 0x73, 0xdb, 0x23, 0xef, 0xfb, 0x36,
+ 0xad, 0x2b, 0x8a, 0x44, 0x08, 0x08, 0x9f, 0x76, 0x50, 0x46, 0xf4, 0xb2, 0xc5, 0x80, 0x46, 0x1b,
+ 0x0a, 0xf4, 0x6e, 0xdc, 0x09, 0xaa, 0xcf, 0x2a, 0xd2, 0xf0, 0xea, 0x62, 0x7d, 0xd6, 0x5d, 0x6e,
+ 0xfc, 0x6e, 0x16, 0xf2, 0xd8, 0xe6, 0xf7, 0xa1, 0xe0, 0xa3, 0x1f, 0x46, 0xd3, 0x79, 0x99, 0xcf,
+ 0xa6, 0x50, 0xf8, 0xb7, 0xb5, 0x28, 0x66, 0x17, 0x10, 0x96, 0xe8, 0x8d, 0x49, 0xb1, 0xbc, 0x0e,
+ 0x85, 0xb1, 0xe9, 0x9b, 0x23, 0xbd, 0x4f, 0x54, 0xa3, 0xf9, 0x93, 0x0c, 0xe4, 0x11, 0x89, 0xaf,
+ 0x41, 0xad, 0x2b, 0x7d, 0xfb, 0x54, 0xc8, 0xa1, 0xef, 0x4d, 0x06, 0x43, 0x25, 0x49, 0x8f, 0xc5,
+ 0x85, 0xd2, 0x37, 0x4a, 0x21, 0x48, 0xd3, 0xb1, 0xfb, 0x2c, 0x8b, 0x52, 0xb5, 0xe1, 0x39, 0x16,
+ 0xcb, 0xf1, 0x55, 0xa8, 0x3e, 0x71, 0x2d, 0xe1, 0x07, 0x7d, 0xcf, 0x17, 0x16, 0xcb, 0xeb, 0xdd,
+ 0x7d, 0xca, 0x0a, 0x74, 0x96, 0x89, 0x73, 0x49, 0xbe, 0x10, 0x2b, 0xf2, 0x6b, 0xb0, 0xba, 0x91,
+ 0x76, 0x90, 0x58, 0x09, 0x75, 0xd2, 0x9e, 0x70, 0x51, 0xc8, 0x58, 0x59, 0x09, 0xb1, 0xf7, 0x7d,
+ 0x9b, 0x55, 0xf0, 0x65, 0x6a, 0x9f, 0x30, 0x68, 0xfe, 0xcb, 0x4c, 0xa8, 0x39, 0x6a, 0x50, 0x39,
+ 0x34, 0x7d, 0x73, 0xe0, 0x9b, 0x63, 0xec, 0x5f, 0x15, 0x4a, 0xea, 0xe0, 0x7c, 0x53, 0x69, 0x37,
+ 0xd5, 0x78, 0xa8, 0x74, 0xa3, 0x6a, 0xbc, 0xc5, 0x72, 0x71, 0xe3, 0x6d, 0x96, 0xc7, 0x77, 0x7c,
+ 0x77, 0xe2, 0x49, 0xc1, 0x0a, 0xa4, 0xeb, 0x3c, 0x4b, 0xb0, 0x22, 0x02, 0x7b, 0xa8, 0x51, 0x58,
+ 0x09, 0xc7, 0xbc, 0x89, 0xf2, 0x73, 0xec, 0x9d, 0xb3, 0x32, 0x76, 0x03, 0xa7, 0x51, 0x58, 0xac,
+ 0x82, 0x4f, 0xf6, 0x27, 0xa3, 0x63, 0x81, 0xc3, 0x04, 0x7c, 0xd2, 0xf3, 0x06, 0x03, 0x47, 0xb0,
+ 0x2a, 0xce, 0x41, 0x42, 0xf9, 0xb2, 0x65, 0xd2, 0xb4, 0xa6, 0xe3, 0x78, 0x13, 0xc9, 0x6a, 0x8d,
+ 0x5f, 0xe6, 0x20, 0x8f, 0xde, 0x0d, 0xee, 0x9d, 0x21, 0xea, 0x19, 0xbd, 0x77, 0xf0, 0x77, 0xb4,
+ 0x03, 0xb3, 0xf1, 0x0e, 0xe4, 0xef, 0xeb, 0x95, 0xce, 0x2d, 0xa0, 0x65, 0x91, 0x71, 0x72, 0x91,
+ 0x39, 0xe4, 0x47, 0xf6, 0x48, 0x68, 0x5d, 0x47, 0xbf, 0x11, 0x16, 0xe0, 0x79, 0x5c, 0xa0, 0xe0,
+ 0x09, 0xfd, 0xc6, 0x5d, 0x63, 0xe2, 0xb1, 0xd0, 0x92, 0xb4, 0x07, 0x72, 0x46, 0xd8, 0x9c, 0xa3,
+ 0xbd, 0x2a, 0x73, 0xb5, 0xd7, 0x07, 0xa1, 0xf6, 0x2a, 0x2d, 0xb0, 0xeb, 0xa9, 0x9b, 0x49, 0xcd,
+ 0x15, 0x2b, 0x8d, 0xf2, 0xe2, 0xe4, 0x89, 0xc3, 0x64, 0x4b, 0x4b, 0x6d, 0x7c, 0xd0, 0x95, 0xd5,
+ 0x2c, 0xb3, 0x0c, 0xae, 0x26, 0x6d, 0x57, 0xa5, 0xf3, 0x9e, 0xda, 0x96, 0xf0, 0x58, 0x8e, 0x0e,
+ 0xc2, 0x89, 0x65, 0x7b, 0x2c, 0x8f, 0x96, 0xd7, 0xe1, 0xd6, 0x36, 0x2b, 0x34, 0x5f, 0x4d, 0x1c,
+ 0x49, 0xad, 0x89, 0xf4, 0x14, 0x1b, 0x12, 0xdf, 0x8c, 0x92, 0xc6, 0x63, 0x61, 0xb1, 0x6c, 0xf3,
+ 0xeb, 0x73, 0xd4, 0x6c, 0x0d, 0x2a, 0x4f, 0xc6, 0x8e, 0x67, 0x5a, 0x57, 0xe8, 0xd9, 0x65, 0x80,
+ 0xd8, 0xab, 0x6e, 0xfc, 0xb2, 0x19, 0x1f, 0xe7, 0x68, 0x8b, 0x06, 0xde, 0xc4, 0xef, 0x0b, 0x52,
+ 0x21, 0x15, 0x43, 0xb7, 0xf8, 0x77, 0xa0, 0x80, 0xcf, 0xc3, 0x30, 0xce, 0xfd, 0x85, 0x7c, 0xb9,
+ 0xf5, 0xa7, 0xb6, 0x78, 0x6e, 0x28, 0x42, 0x7e, 0x07, 0xc0, 0xec, 0x4b, 0xfb, 0x4c, 0x20, 0x50,
+ 0x6f, 0xf6, 0x04, 0x84, 0xbf, 0x93, 0x34, 0x5f, 0xae, 0x8e, 0x43, 0x26, 0xec, 0x1a, 0x6e, 0x40,
+ 0x15, 0xb7, 0xee, 0xf8, 0xc0, 0xc7, 0xdd, 0x5e, 0x5f, 0x26, 0xc2, 0x37, 0x16, 0xeb, 0xde, 0xa3,
+ 0x88, 0xd0, 0x48, 0x32, 0xe1, 0x4f, 0x60, 0x59, 0xc5, 0xd4, 0x34, 0xd3, 0x1a, 0x31, 0x7d, 0x73,
+ 0x31, 0xa6, 0x07, 0x31, 0xa5, 0x91, 0x62, 0x33, 0x1b, 0x96, 0x2c, 0xbc, 0x74, 0x58, 0xf2, 0x55,
+ 0x58, 0xe9, 0xa5, 0x77, 0x81, 0x3a, 0x2a, 0xa6, 0xa0, 0xbc, 0x09, 0xcb, 0x76, 0x10, 0x47, 0x45,
+ 0x29, 0x46, 0x52, 0x36, 0x52, 0xb0, 0xc6, 0xbf, 0x2b, 0x42, 0x9e, 0x66, 0x7e, 0x3a, 0xc6, 0xb5,
+ 0x99, 0x52, 0xe9, 0x0f, 0x16, 0x5f, 0xea, 0xa9, 0x1d, 0x4f, 0x1a, 0x24, 0x97, 0xd0, 0x20, 0xdf,
+ 0x81, 0x42, 0xe0, 0xf9, 0x32, 0x5c, 0xde, 0x05, 0x85, 0xa8, 0xeb, 0xf9, 0xd2, 0x50, 0x84, 0x7c,
+ 0x1b, 0x4a, 0x27, 0xb6, 0x23, 0x71, 0x51, 0xd4, 0xe4, 0xbd, 0xbe, 0x18, 0x8f, 0x6d, 0x22, 0x32,
+ 0x42, 0x62, 0xbe, 0x9b, 0x14, 0xb6, 0x22, 0x71, 0x5a, 0x5f, 0x8c, 0xd3, 0x3c, 0x19, 0xbc, 0x0f,
+ 0xac, 0xef, 0x9d, 0x09, 0xdf, 0x48, 0x04, 0x26, 0xd5, 0x21, 0x3d, 0x03, 0xe7, 0x0d, 0x28, 0x0f,
+ 0x6d, 0x4b, 0xa0, 0x9d, 0x43, 0x3a, 0xa6, 0x6c, 0x44, 0x6d, 0xfe, 0x18, 0xca, 0xe4, 0x1f, 0xa0,
+ 0x56, 0xac, 0xbc, 0xf4, 0xe4, 0x2b, 0x57, 0x25, 0x64, 0x80, 0x2f, 0xa2, 0x97, 0x6f, 0xdb, 0x92,
+ 0xe2, 0xd3, 0x65, 0x23, 0x6a, 0x63, 0x87, 0x49, 0xde, 0x93, 0x1d, 0xae, 0xaa, 0x0e, 0x4f, 0xc3,
+ 0xf9, 0xdb, 0x70, 0x83, 0x60, 0x53, 0x87, 0x24, 0x6e, 0x35, 0x64, 0x3a, 0xff, 0x21, 0x1a, 0x2c,
+ 0x63, 0x73, 0x20, 0x76, 0xed, 0x91, 0x2d, 0xeb, 0xb5, 0xbb, 0x99, 0x7b, 0x05, 0x23, 0x06, 0xf0,
+ 0xd7, 0x61, 0xcd, 0x12, 0x27, 0xe6, 0xc4, 0x91, 0x3d, 0x31, 0x1a, 0x3b, 0xa6, 0x14, 0x1d, 0x8b,
+ 0x64, 0xb4, 0x62, 0xcc, 0x3e, 0xe0, 0x6f, 0xc0, 0x35, 0x0d, 0x3c, 0x88, 0xb2, 0x0a, 0x1d, 0x8b,
+ 0xc2, 0x77, 0x15, 0x63, 0xde, 0xa3, 0xe6, 0x9e, 0x56, 0xc3, 0x78, 0x80, 0xa2, 0x9f, 0x1a, 0x2a,
+ 0xd0, 0x40, 0xaa, 0x13, 0xf9, 0x91, 0xe9, 0x38, 0xc2, 0xbf, 0x50, 0x4e, 0xee, 0x63, 0xd3, 0x3d,
+ 0x36, 0x5d, 0x96, 0xa3, 0x33, 0xd6, 0x74, 0x84, 0x6b, 0x99, 0xbe, 0x3a, 0x91, 0x1f, 0xd1, 0x81,
+ 0x5e, 0x68, 0xde, 0x83, 0x3c, 0x4d, 0x69, 0x05, 0x0a, 0xca, 0x4b, 0x22, 0x8f, 0x59, 0x7b, 0x48,
+ 0xa4, 0x91, 0x77, 0x71, 0xfb, 0xb1, 0x6c, 0xe3, 0x1f, 0x14, 0xa1, 0x1c, 0x4e, 0x5e, 0x98, 0x43,
+ 0xc8, 0xc4, 0x39, 0x04, 0x34, 0xe3, 0x82, 0xa7, 0x76, 0x60, 0x1f, 0x6b, 0xb3, 0xb4, 0x6c, 0xc4,
+ 0x00, 0xb4, 0x84, 0x9e, 0xdb, 0x96, 0x1c, 0xd2, 0x9e, 0x29, 0x18, 0xaa, 0xc1, 0xef, 0xc1, 0xaa,
+ 0x85, 0xf3, 0xe0, 0xf6, 0x9d, 0x89, 0x25, 0x7a, 0x78, 0x8a, 0xaa, 0x30, 0xc1, 0x34, 0x98, 0x7f,
+ 0x0c, 0x20, 0xed, 0x91, 0xd8, 0xf6, 0xfc, 0x91, 0x29, 0xb5, 0x6f, 0xf0, 0x8d, 0x97, 0x93, 0xea,
+ 0xf5, 0x5e, 0xc4, 0xc0, 0x48, 0x30, 0x43, 0xd6, 0xf8, 0x36, 0xcd, 0xba, 0xf4, 0x99, 0x58, 0x6f,
+ 0x45, 0x0c, 0x8c, 0x04, 0x33, 0xde, 0x83, 0xd2, 0x89, 0xe7, 0x8f, 0x26, 0x8e, 0xa9, 0xcf, 0xdc,
+ 0xf7, 0x5f, 0x92, 0xef, 0xb6, 0xa2, 0x26, 0xdd, 0x13, 0xb2, 0x8a, 0x63, 0xdc, 0x95, 0x05, 0x63,
+ 0xdc, 0xcd, 0x5f, 0x01, 0x88, 0x7b, 0xc8, 0x6f, 0x02, 0xdf, 0xf3, 0x5c, 0x39, 0x6c, 0x1d, 0x1f,
+ 0xfb, 0x1b, 0xe2, 0xc4, 0xf3, 0xc5, 0x96, 0x89, 0xc7, 0xeb, 0x0d, 0x58, 0x8b, 0xe0, 0xad, 0x13,
+ 0x29, 0x7c, 0x04, 0x93, 0x08, 0x74, 0x87, 0x9e, 0x2f, 0x95, 0x8d, 0x47, 0x3f, 0x9f, 0x74, 0x59,
+ 0x0e, 0x8f, 0xf4, 0x4e, 0xf7, 0x80, 0xe5, 0x9b, 0xf7, 0x00, 0xe2, 0xa9, 0x25, 0x5f, 0x88, 0x7e,
+ 0xbd, 0xf9, 0x50, 0x7b, 0x46, 0xd4, 0x7a, 0xf8, 0x36, 0xcb, 0x34, 0x7f, 0x91, 0x81, 0x6a, 0x62,
+ 0x48, 0x69, 0x9f, 0x79, 0xd3, 0x9b, 0xb8, 0x52, 0x39, 0xe9, 0xf4, 0xf3, 0xa9, 0xe9, 0x4c, 0xf0,
+ 0x70, 0x5f, 0x83, 0x1a, 0xb5, 0xb7, 0xec, 0x40, 0xda, 0x6e, 0x5f, 0xb2, 0x5c, 0x84, 0xa2, 0x0c,
+ 0x83, 0x7c, 0x84, 0xb2, 0xef, 0x69, 0x50, 0x81, 0x33, 0x58, 0x3e, 0x14, 0x7e, 0x5f, 0x84, 0x48,
+ 0x64, 0x0c, 0x6b, 0x48, 0x84, 0xa6, 0x8c, 0x61, 0x53, 0x0e, 0xbb, 0x93, 0x11, 0x2b, 0xa3, 0x51,
+ 0x89, 0x8d, 0xd6, 0x99, 0xf0, 0xd1, 0x96, 0xa9, 0xe0, 0x7b, 0x10, 0x80, 0xbb, 0xc1, 0x74, 0x19,
+ 0x84, 0xd8, 0x7b, 0xb6, 0xcb, 0xaa, 0x51, 0xc3, 0x3c, 0x67, 0xcb, 0xd8, 0x7f, 0x72, 0x1d, 0x58,
+ 0xad, 0xf1, 0x5f, 0x73, 0x90, 0x47, 0xbd, 0x8e, 0xbe, 0x6e, 0x52, 0x09, 0xa9, 0xbd, 0x92, 0x04,
+ 0x7d, 0xb6, 0xd3, 0x08, 0x79, 0x27, 0x4f, 0xa3, 0xf7, 0xa0, 0xda, 0x9f, 0x04, 0xd2, 0x1b, 0xd1,
+ 0x51, 0xac, 0xb3, 0x5d, 0x37, 0x67, 0xa2, 0x46, 0x34, 0x9d, 0x46, 0x12, 0x95, 0xbf, 0x03, 0xc5,
+ 0x13, 0x25, 0xf5, 0x2a, 0x6e, 0xf4, 0x85, 0x4b, 0x4e, 0x6b, 0x2d, 0xd9, 0x1a, 0x19, 0xc7, 0x65,
+ 0xcf, 0xec, 0xd8, 0x24, 0x48, 0x9f, 0xba, 0xc5, 0xe8, 0xd4, 0xfd, 0x15, 0x58, 0x11, 0x38, 0xe1,
+ 0x87, 0x8e, 0xd9, 0x17, 0x23, 0xe1, 0x86, 0xdb, 0xec, 0xed, 0x97, 0x18, 0x31, 0xad, 0x18, 0x0d,
+ 0x7b, 0x8a, 0x17, 0x6a, 0x1e, 0xd7, 0xc3, 0xc3, 0x3f, 0x74, 0xec, 0xcb, 0x46, 0x0c, 0x68, 0x7e,
+ 0x59, 0xeb, 0xcb, 0x12, 0xe4, 0x5a, 0x41, 0x5f, 0x47, 0x40, 0x44, 0xd0, 0x57, 0xee, 0xd5, 0x26,
+ 0x4d, 0x07, 0xcb, 0x36, 0xdf, 0x84, 0x4a, 0xf4, 0x06, 0x14, 0x9e, 0x7d, 0x4f, 0x76, 0xc7, 0xa2,
+ 0x6f, 0x9f, 0xd8, 0xc2, 0x52, 0xf2, 0xd9, 0x95, 0xa6, 0x2f, 0x55, 0x10, 0xb1, 0xed, 0x5a, 0x2c,
+ 0xdb, 0xf8, 0x9d, 0x32, 0x14, 0xd5, 0xe1, 0xab, 0x07, 0x5c, 0x89, 0x06, 0xfc, 0x5d, 0x28, 0x7b,
+ 0x63, 0xe1, 0x9b, 0xd2, 0xf3, 0x75, 0xe4, 0xe6, 0x9d, 0x97, 0x39, 0xcc, 0xd7, 0x0f, 0x34, 0xb1,
+ 0x11, 0xb1, 0x99, 0x96, 0xa6, 0xec, 0xac, 0x34, 0xdd, 0x07, 0x16, 0x9e, 0xdb, 0x87, 0x3e, 0xd2,
+ 0xc9, 0x0b, 0xed, 0x87, 0xcf, 0xc0, 0x79, 0x0f, 0x2a, 0x7d, 0xcf, 0xb5, 0xec, 0x28, 0x8a, 0xb3,
+ 0xf2, 0xf0, 0xeb, 0x2f, 0xd5, 0xc3, 0xcd, 0x90, 0xda, 0x88, 0x19, 0xf1, 0xd7, 0xa1, 0x70, 0x86,
+ 0x62, 0x46, 0xf2, 0x74, 0xb9, 0x10, 0x2a, 0x24, 0xfe, 0x09, 0x54, 0x7f, 0x30, 0xb1, 0xfb, 0xa7,
+ 0x07, 0xc9, 0x28, 0xe1, 0x7b, 0x2f, 0xd5, 0x8b, 0xef, 0xc6, 0xf4, 0x46, 0x92, 0x59, 0x42, 0xb4,
+ 0x4b, 0x7f, 0x0c, 0xd1, 0x2e, 0xcf, 0x8a, 0xb6, 0x01, 0x35, 0x57, 0x04, 0x52, 0x58, 0xdb, 0xda,
+ 0x56, 0x83, 0xcf, 0x60, 0xab, 0xa5, 0x59, 0x34, 0xbf, 0x04, 0xe5, 0x70, 0xc1, 0x79, 0x11, 0xb2,
+ 0xfb, 0xe8, 0x14, 0x15, 0x21, 0x7b, 0xe0, 0x2b, 0x69, 0x6b, 0xa1, 0xb4, 0x35, 0xff, 0x30, 0x03,
+ 0x95, 0x68, 0xd2, 0xd3, 0x9a, 0xb3, 0xfd, 0x83, 0x89, 0xe9, 0xb0, 0x0c, 0xb9, 0xcb, 0x9e, 0x54,
+ 0x2d, 0x52, 0xd6, 0x8f, 0x28, 0x59, 0xef, 0xb3, 0x1c, 0x99, 0x08, 0x22, 0x08, 0x58, 0x9e, 0x73,
+ 0x58, 0xd1, 0xe0, 0x03, 0x5f, 0xa1, 0x16, 0x50, 0xf1, 0xe1, 0xd3, 0x10, 0x50, 0x54, 0x16, 0xc5,
+ 0xa9, 0x50, 0x0a, 0x72, 0xdf, 0x93, 0xd4, 0x28, 0x63, 0xa7, 0x3a, 0x2e, 0xab, 0xe0, 0x3b, 0xf7,
+ 0x3d, 0xd9, 0x41, 0x95, 0x18, 0xb9, 0x67, 0xd5, 0xf0, 0xf5, 0xd4, 0x22, 0x8d, 0xd8, 0x72, 0x9c,
+ 0x8e, 0xcb, 0x6a, 0xfa, 0x81, 0x6a, 0xad, 0x20, 0xc7, 0xf6, 0xb9, 0xd9, 0x47, 0xf2, 0x55, 0xd4,
+ 0xb0, 0x48, 0xa3, 0xdb, 0x0c, 0xb7, 0x64, 0xfb, 0xdc, 0x0e, 0x64, 0xc0, 0xd6, 0x9a, 0xff, 0x36,
+ 0x03, 0xd5, 0xc4, 0x02, 0xa3, 0xfb, 0x47, 0x88, 0x78, 0x94, 0x29, 0x6f, 0xf0, 0x63, 0x9c, 0x46,
+ 0xdf, 0x0a, 0x8f, 0xa9, 0x9e, 0x87, 0x3f, 0xb3, 0xf8, 0xbe, 0x9e, 0x37, 0xf2, 0x7c, 0xdf, 0x7b,
+ 0xae, 0x4c, 0x9f, 0x5d, 0x33, 0x90, 0xcf, 0x84, 0x38, 0x65, 0x79, 0x1c, 0xea, 0xe6, 0xc4, 0xf7,
+ 0x85, 0xab, 0x00, 0x05, 0xea, 0x9c, 0x38, 0x57, 0xad, 0x22, 0x32, 0x45, 0x64, 0x3a, 0x07, 0x59,
+ 0x09, 0x15, 0x81, 0xc6, 0x56, 0x90, 0x32, 0x22, 0x20, 0xba, 0x6a, 0x56, 0xf0, 0x50, 0x51, 0x11,
+ 0x8a, 0x83, 0x93, 0x2d, 0xf3, 0x22, 0x68, 0x0d, 0x3c, 0x06, 0xd3, 0xc0, 0x7d, 0xef, 0x39, 0xab,
+ 0x36, 0x26, 0x00, 0xb1, 0x4f, 0x86, 0xbe, 0x28, 0x0a, 0x44, 0x94, 0x43, 0xd0, 0x2d, 0x7e, 0x00,
+ 0x80, 0xbf, 0x08, 0x33, 0x74, 0x48, 0x5f, 0xc2, 0x50, 0x26, 0x3a, 0x23, 0xc1, 0xa2, 0xf1, 0x17,
+ 0xa0, 0x12, 0x3d, 0xe0, 0x75, 0x28, 0x91, 0x49, 0x1b, 0xbd, 0x36, 0x6c, 0xa2, 0x7d, 0x66, 0xbb,
+ 0x96, 0x38, 0x27, 0xbd, 0x52, 0x30, 0x54, 0x03, 0x7b, 0x39, 0xb4, 0x2d, 0x4b, 0xb8, 0x61, 0xa6,
+ 0x47, 0xb5, 0xe6, 0xe5, 0xe3, 0xf3, 0x73, 0xf3, 0xf1, 0x8d, 0x5f, 0x85, 0x6a, 0xc2, 0x69, 0xbc,
+ 0x74, 0xd8, 0x89, 0x8e, 0x65, 0xd3, 0x1d, 0xbb, 0x0d, 0x95, 0xb0, 0x06, 0x24, 0xa0, 0xb3, 0xad,
+ 0x62, 0xc4, 0x80, 0xc6, 0x3f, 0xcd, 0xa2, 0x25, 0x8b, 0x43, 0x9b, 0x76, 0xf4, 0xb6, 0xa1, 0x18,
+ 0x48, 0x53, 0x4e, 0xc2, 0x62, 0x86, 0x05, 0x37, 0x68, 0x97, 0x68, 0x76, 0x96, 0x0c, 0x4d, 0xcd,
+ 0x3f, 0x80, 0x9c, 0x34, 0x07, 0x3a, 0x50, 0xfa, 0x95, 0xc5, 0x98, 0xf4, 0xcc, 0xc1, 0xce, 0x92,
+ 0x81, 0x74, 0x7c, 0x17, 0xca, 0x7d, 0x1d, 0xdb, 0xd2, 0x4a, 0x71, 0x41, 0x5f, 0x2c, 0x8c, 0x88,
+ 0xed, 0x2c, 0x19, 0x11, 0x07, 0xfe, 0x1d, 0xc8, 0xa3, 0x75, 0xa9, 0x6b, 0x3e, 0x16, 0xf4, 0x31,
+ 0x71, 0xbb, 0xec, 0x2c, 0x19, 0x44, 0xb9, 0x51, 0x82, 0x02, 0xe9, 0xe0, 0x46, 0x1d, 0x8a, 0x6a,
+ 0xac, 0xd3, 0x33, 0xd7, 0xb8, 0x05, 0xb9, 0x9e, 0x39, 0x40, 0x0b, 0xdf, 0xb6, 0x02, 0x1d, 0x2a,
+ 0xc1, 0x9f, 0x8d, 0x57, 0xe2, 0x38, 0x5d, 0x32, 0x04, 0x9c, 0x49, 0x85, 0x80, 0x1b, 0x45, 0xc8,
+ 0xe3, 0x1b, 0x1b, 0xb7, 0xaf, 0xf2, 0x16, 0x1a, 0xff, 0x28, 0x87, 0x8e, 0x85, 0x14, 0xe7, 0x73,
+ 0xc3, 0xdb, 0x1f, 0x41, 0x65, 0xec, 0x7b, 0x7d, 0x11, 0x04, 0x9e, 0xaf, 0x8d, 0xa3, 0xd7, 0x5f,
+ 0x9c, 0x7a, 0x5e, 0x3f, 0x0c, 0x69, 0x8c, 0x98, 0xbc, 0xf9, 0xaf, 0xb3, 0x50, 0x89, 0x1e, 0x28,
+ 0x7f, 0x46, 0x8a, 0x73, 0x15, 0xca, 0xdc, 0x13, 0xfe, 0xc8, 0xb4, 0x2d, 0xa5, 0x3d, 0x36, 0x87,
+ 0x66, 0x68, 0xe4, 0x7e, 0xec, 0x4d, 0xe4, 0xe4, 0x58, 0xa8, 0x10, 0xd6, 0x53, 0x7b, 0x24, 0x3c,
+ 0x96, 0xa7, 0xe4, 0x11, 0x0a, 0x76, 0xdf, 0xf1, 0x26, 0x16, 0x2b, 0x60, 0xfb, 0x11, 0x1d, 0x6f,
+ 0x7b, 0xe6, 0x38, 0x50, 0x3a, 0x73, 0xcf, 0xf6, 0x3d, 0x56, 0x42, 0xa2, 0x6d, 0x7b, 0x30, 0x32,
+ 0x59, 0x19, 0x99, 0xf5, 0x9e, 0xdb, 0x12, 0x95, 0x70, 0x05, 0xcd, 0xd4, 0x83, 0xb1, 0x70, 0xbb,
+ 0xd2, 0x17, 0x42, 0xee, 0x99, 0x63, 0x15, 0xd3, 0x34, 0x84, 0x65, 0xd9, 0x52, 0xe9, 0xcf, 0x6d,
+ 0xb3, 0x2f, 0x8e, 0x3d, 0xef, 0x94, 0x2d, 0xa3, 0xa2, 0xe9, 0xb8, 0x81, 0x34, 0x07, 0xbe, 0x39,
+ 0x52, 0x3a, 0xb4, 0x27, 0x1c, 0x41, 0xad, 0x15, 0x7a, 0xb7, 0x2d, 0x87, 0x93, 0xe3, 0x47, 0xe8,
+ 0xf7, 0xad, 0xaa, 0x3c, 0x93, 0x25, 0xc6, 0x02, 0x75, 0xe8, 0x32, 0x94, 0x37, 0x6c, 0xc7, 0x3e,
+ 0xb6, 0x1d, 0x9b, 0xad, 0x21, 0x6a, 0xfb, 0xbc, 0x6f, 0x3a, 0xb6, 0xe5, 0x9b, 0xcf, 0x19, 0xc7,
+ 0xce, 0x3d, 0xf6, 0xbd, 0x53, 0x9b, 0x5d, 0x43, 0x44, 0x72, 0x03, 0xcf, 0xec, 0x1f, 0xb2, 0xeb,
+ 0x94, 0x2b, 0x3b, 0x15, 0xb2, 0x3f, 0x3c, 0x31, 0x8f, 0xd9, 0x8d, 0x38, 0xa4, 0x77, 0xb3, 0xb1,
+ 0x06, 0xab, 0x53, 0x59, 0xf9, 0x46, 0x49, 0x7b, 0x9f, 0x8d, 0x1a, 0x54, 0x13, 0xe9, 0xd2, 0xc6,
+ 0xab, 0x50, 0x0e, 0x93, 0xa9, 0xe8, 0xa5, 0xdb, 0x81, 0x0a, 0x03, 0x6b, 0x21, 0x89, 0xda, 0x8d,
+ 0xff, 0x98, 0x81, 0xa2, 0xca, 0x64, 0xf3, 0x8d, 0xa8, 0xf2, 0x24, 0xb3, 0x40, 0xf6, 0x52, 0x11,
+ 0xe9, 0xdc, 0x6f, 0x54, 0x7e, 0x72, 0x1d, 0x0a, 0x0e, 0xb9, 0xe3, 0x5a, 0x7d, 0x51, 0x23, 0xa1,
+ 0x6d, 0x72, 0x29, 0x6d, 0x73, 0x1b, 0x2a, 0xe6, 0x44, 0x7a, 0x94, 0xa4, 0xd3, 0x19, 0x8c, 0x18,
+ 0xd0, 0x6c, 0x45, 0xd9, 0xe8, 0x30, 0x30, 0x49, 0x36, 0x63, 0xcf, 0x17, 0x42, 0x05, 0x1d, 0xc9,
+ 0xd7, 0xce, 0xd2, 0x49, 0xe2, 0x8d, 0xc6, 0x66, 0x5f, 0x12, 0x80, 0xce, 0x58, 0x54, 0xb5, 0x2c,
+ 0x8f, 0x7b, 0x60, 0x73, 0x68, 0xca, 0xe6, 0x09, 0x94, 0x0f, 0xbd, 0x60, 0xfa, 0xc4, 0x2e, 0x41,
+ 0xae, 0xe7, 0x8d, 0x95, 0xfd, 0xb9, 0xe1, 0x49, 0xb2, 0x3f, 0xd5, 0x01, 0x7d, 0x22, 0x95, 0xc8,
+ 0x19, 0xf6, 0x60, 0x28, 0x95, 0x9f, 0xde, 0x71, 0x5d, 0xe1, 0xb3, 0x02, 0xae, 0xb0, 0x21, 0xc6,
+ 0x68, 0xf3, 0xb2, 0x22, 0xae, 0x29, 0xc1, 0xb7, 0x6d, 0x3f, 0x90, 0xac, 0xd4, 0xec, 0xe0, 0x59,
+ 0x6b, 0x0f, 0xe8, 0x88, 0xa4, 0x1f, 0xc4, 0x6a, 0x09, 0xbb, 0x48, 0xcd, 0x4d, 0xe1, 0xa2, 0x04,
+ 0x92, 0x6f, 0xa5, 0x1c, 0x43, 0x7a, 0x41, 0x16, 0xcf, 0x37, 0x6a, 0x7f, 0x34, 0x09, 0xa4, 0x7d,
+ 0x72, 0xc1, 0x72, 0xcd, 0x67, 0x50, 0x4b, 0x15, 0x39, 0xf1, 0xeb, 0xc0, 0x52, 0x00, 0xec, 0xfa,
+ 0x12, 0xbf, 0x05, 0xd7, 0x52, 0xd0, 0x3d, 0xdb, 0xb2, 0x28, 0x12, 0x3c, 0xfd, 0x20, 0x1c, 0xe0,
+ 0x46, 0x05, 0x4a, 0x7d, 0xb5, 0x86, 0xcd, 0x43, 0xa8, 0xd1, 0xa2, 0xee, 0x09, 0x69, 0x1e, 0xb8,
+ 0xce, 0xc5, 0x1f, 0xbb, 0x12, 0xad, 0xf9, 0x55, 0xed, 0x7e, 0xa1, 0x36, 0x39, 0xf1, 0xbd, 0x11,
+ 0xf1, 0x2a, 0x18, 0xf4, 0x1b, 0xb9, 0x4b, 0x4f, 0x4b, 0x46, 0x56, 0x7a, 0xcd, 0x5f, 0x56, 0xa0,
+ 0xd4, 0xea, 0xf7, 0xd1, 0x61, 0x9c, 0x79, 0xf3, 0x3b, 0x50, 0xec, 0x7b, 0xee, 0x89, 0x3d, 0xd0,
+ 0xda, 0x7a, 0xda, 0x6e, 0xd4, 0x74, 0x28, 0x8e, 0x27, 0xf6, 0xc0, 0xd0, 0xc8, 0x48, 0xa6, 0x4f,
+ 0x9b, 0xc2, 0x95, 0x64, 0x4a, 0xe5, 0x46, 0x87, 0xcb, 0x03, 0xc8, 0xdb, 0xee, 0x89, 0xa7, 0xcb,
+ 0x46, 0x3f, 0x7f, 0x09, 0x11, 0xd5, 0x4e, 0x12, 0x62, 0xe3, 0x3f, 0x67, 0xa0, 0xa8, 0x5e, 0xcd,
+ 0x5f, 0x85, 0x15, 0xe1, 0xe2, 0x56, 0x0b, 0x15, 0xbd, 0xde, 0x63, 0x53, 0x50, 0x34, 0x69, 0x35,
+ 0x44, 0x1c, 0x4f, 0x06, 0x3a, 0x32, 0x93, 0x04, 0xf1, 0xf7, 0xe0, 0x96, 0x6a, 0x1e, 0xfa, 0xc2,
+ 0x17, 0x8e, 0x30, 0x03, 0xb1, 0x39, 0x34, 0x5d, 0x57, 0x38, 0xfa, 0xd8, 0xbf, 0xec, 0x31, 0x6f,
+ 0xc2, 0xb2, 0x7a, 0xd4, 0x1d, 0x9b, 0x7d, 0x11, 0xe8, 0xbd, 0x94, 0x82, 0xf1, 0xaf, 0x41, 0x81,
+ 0xaa, 0x6a, 0xeb, 0xd6, 0xd5, 0x4b, 0xa9, 0xb0, 0x1a, 0x5e, 0x74, 0x2e, 0xb5, 0x00, 0xd4, 0x34,
+ 0xa1, 0x4b, 0xa6, 0x75, 0xc3, 0x17, 0xaf, 0x9c, 0x57, 0xf2, 0x0e, 0x13, 0x44, 0xd8, 0x3f, 0x4b,
+ 0x38, 0x82, 0xca, 0x1f, 0xf1, 0xdc, 0xcc, 0x52, 0xde, 0x25, 0x05, 0x6b, 0xfc, 0xa7, 0x3c, 0xe4,
+ 0x71, 0x86, 0x11, 0x79, 0xe8, 0x8d, 0x44, 0x14, 0x7d, 0x56, 0x86, 0x48, 0x0a, 0x86, 0x86, 0x8f,
+ 0xa9, 0x0a, 0x00, 0x22, 0x34, 0xa5, 0x5a, 0xa6, 0xc1, 0x88, 0x39, 0xf6, 0xbd, 0x13, 0xdb, 0x89,
+ 0x31, 0xb5, 0x89, 0x34, 0x05, 0xe6, 0x5f, 0x87, 0x9b, 0x23, 0xd3, 0x3f, 0x15, 0x92, 0x76, 0xf7,
+ 0x33, 0xcf, 0x3f, 0x0d, 0x70, 0xe6, 0x3a, 0x96, 0x0e, 0x5b, 0x5e, 0xf2, 0x94, 0xbf, 0x0e, 0x6b,
+ 0xcf, 0xc3, 0x66, 0xf4, 0x0e, 0x15, 0x38, 0x9c, 0x7d, 0x80, 0xca, 0xd8, 0x12, 0x67, 0x36, 0xf1,
+ 0x2d, 0xab, 0xda, 0xda, 0xb0, 0x8d, 0xa2, 0x64, 0xaa, 0x89, 0xec, 0xea, 0x37, 0xeb, 0xfc, 0x53,
+ 0x1a, 0x8a, 0x7a, 0x53, 0xd5, 0x1c, 0x05, 0x1d, 0x8b, 0xe2, 0xae, 0x15, 0x23, 0x06, 0xa0, 0xa0,
+ 0xd1, 0x2b, 0x9f, 0x2a, 0x95, 0x5b, 0x53, 0x0e, 0x6a, 0x02, 0x84, 0x18, 0x52, 0xf4, 0x87, 0xe1,
+ 0x4b, 0x54, 0x50, 0x34, 0x09, 0xe2, 0x77, 0x00, 0x06, 0xa6, 0x14, 0xcf, 0xcd, 0x8b, 0x27, 0xbe,
+ 0x53, 0x17, 0x2a, 0x91, 0x12, 0x43, 0xd0, 0xc5, 0x75, 0xbc, 0xbe, 0xe9, 0x74, 0xa5, 0xe7, 0x9b,
+ 0x03, 0x71, 0x68, 0xca, 0x61, 0x7d, 0xa0, 0x5c, 0xdc, 0x69, 0x38, 0x8e, 0x58, 0xda, 0x23, 0xf1,
+ 0x89, 0xe7, 0x8a, 0xfa, 0x50, 0x8d, 0x38, 0x6c, 0x63, 0x4f, 0x4c, 0xd7, 0x74, 0x2e, 0xa4, 0xdd,
+ 0xc7, 0xb1, 0xd8, 0xaa, 0x27, 0x09, 0x10, 0x05, 0x15, 0x84, 0xc4, 0x79, 0xec, 0x58, 0xf5, 0xef,
+ 0xab, 0xb1, 0x46, 0x00, 0x5c, 0x5d, 0x21, 0x87, 0xc2, 0x17, 0x93, 0x51, 0xcb, 0xb2, 0x7c, 0x11,
+ 0x04, 0xf5, 0x53, 0xb5, 0xba, 0x53, 0xe0, 0xc6, 0x37, 0x29, 0xcd, 0x35, 0x6c, 0xbe, 0x05, 0xb5,
+ 0x5d, 0xec, 0x61, 0x6b, 0x6c, 0x77, 0xfb, 0xde, 0x58, 0xa0, 0x42, 0xa7, 0x80, 0x31, 0x85, 0x17,
+ 0xaa, 0x50, 0xfa, 0x28, 0xf0, 0xdc, 0xd6, 0x61, 0x47, 0x1d, 0x31, 0xdb, 0x13, 0xc7, 0x61, 0xd9,
+ 0xe6, 0x01, 0x40, 0x2c, 0xd9, 0x78, 0x5c, 0xb4, 0x28, 0xa7, 0xc4, 0x96, 0x54, 0x30, 0xcb, 0xb5,
+ 0x6c, 0x77, 0xb0, 0xa5, 0x85, 0x99, 0x65, 0x10, 0x48, 0x41, 0x0a, 0x61, 0x45, 0x40, 0x32, 0x67,
+ 0xa8, 0x25, 0x2c, 0x96, 0x6b, 0xfe, 0x9f, 0x0c, 0x54, 0x13, 0x25, 0x14, 0x7f, 0x82, 0x65, 0x1f,
+ 0x78, 0xd8, 0xa3, 0xb9, 0x80, 0xeb, 0xa6, 0x04, 0x3d, 0x6a, 0xe3, 0xaa, 0xea, 0x0a, 0x0f, 0x7c,
+ 0xaa, 0x42, 0x12, 0x09, 0xc8, 0x67, 0x2a, 0xf9, 0x68, 0x3e, 0xd4, 0x71, 0x9d, 0x2a, 0x94, 0x9e,
+ 0xb8, 0xa7, 0xae, 0xf7, 0xdc, 0x55, 0xe7, 0x34, 0xd5, 0xf1, 0xa4, 0x32, 0x92, 0x61, 0xa9, 0x4d,
+ 0xae, 0xf9, 0x2f, 0xf2, 0x53, 0x25, 0x6f, 0x6d, 0x28, 0x2a, 0x67, 0x82, 0xec, 0xdc, 0xd9, 0x1a,
+ 0xa5, 0x24, 0xb2, 0xce, 0x7e, 0x25, 0x40, 0x86, 0x26, 0x46, 0x2b, 0x3f, 0x2a, 0x08, 0xcd, 0xce,
+ 0xcd, 0xd2, 0xa5, 0x18, 0x85, 0xba, 0x39, 0x55, 0x13, 0x1d, 0x71, 0x68, 0xfc, 0xb5, 0x0c, 0x5c,
+ 0x9f, 0x87, 0x92, 0xac, 0x1c, 0xcf, 0xa4, 0x2b, 0xc7, 0xbb, 0x53, 0x95, 0xd8, 0x59, 0x1a, 0xcd,
+ 0x83, 0x97, 0xec, 0x44, 0xba, 0x2e, 0xbb, 0xf9, 0x7b, 0x19, 0x58, 0x9b, 0x19, 0x73, 0xc2, 0x8e,
+ 0x01, 0x28, 0x2a, 0xc9, 0x52, 0x85, 0x52, 0x51, 0xe9, 0x8a, 0x4a, 0x3d, 0xd0, 0x09, 0x1f, 0xa8,
+ 0x5a, 0x00, 0x5d, 0x7b, 0xae, 0x8c, 0x68, 0x5c, 0x35, 0x3c, 0x40, 0x06, 0x42, 0x85, 0x69, 0x95,
+ 0xb1, 0xa5, 0x21, 0x45, 0x65, 0xe8, 0xaa, 0xfc, 0x08, 0x2b, 0x51, 0x01, 0xd6, 0x64, 0xec, 0xd8,
+ 0x7d, 0x6c, 0x96, 0x79, 0x03, 0x6e, 0xaa, 0x0b, 0x08, 0xda, 0xa9, 0x3c, 0xe9, 0x0d, 0x6d, 0xda,
+ 0x1c, 0xac, 0x82, 0xef, 0x39, 0x9c, 0x1c, 0x3b, 0x76, 0x30, 0x64, 0xd0, 0x34, 0xe0, 0xda, 0x9c,
+ 0x01, 0x52, 0x97, 0x9f, 0xea, 0xee, 0xaf, 0x00, 0x6c, 0x3d, 0x0d, 0x3b, 0xcd, 0x32, 0x9c, 0xc3,
+ 0xca, 0xd6, 0xd3, 0x24, 0x77, 0xbd, 0x79, 0x9e, 0xa2, 0xf6, 0x0a, 0x58, 0xae, 0xf9, 0x6b, 0x99,
+ 0xb0, 0x42, 0xa2, 0xf1, 0xe7, 0xa1, 0xa6, 0x3a, 0x7c, 0x68, 0x5e, 0x38, 0x9e, 0x69, 0xf1, 0x36,
+ 0xac, 0x04, 0xd1, 0x15, 0x99, 0xc4, 0x81, 0x35, 0x6d, 0x08, 0x74, 0x53, 0x48, 0xc6, 0x14, 0x51,
+ 0xe8, 0x28, 0x65, 0xe3, 0xb4, 0x0a, 0x27, 0x97, 0xcf, 0xa4, 0x2d, 0xb7, 0x4c, 0x4e, 0x9c, 0xd9,
+ 0xfc, 0x1a, 0xac, 0x75, 0x63, 0xe5, 0xae, 0x2c, 0x6a, 0x14, 0x0e, 0x75, 0x32, 0x6c, 0x85, 0xc2,
+ 0xa1, 0x9b, 0xcd, 0x7f, 0x5c, 0x02, 0x88, 0x53, 0x48, 0x73, 0xf6, 0xfc, 0xbc, 0x8a, 0x88, 0x99,
+ 0x84, 0x6e, 0xee, 0xa5, 0x13, 0xba, 0xef, 0x45, 0x86, 0xbd, 0x0a, 0x2f, 0x4f, 0x97, 0x85, 0xc7,
+ 0x7d, 0x9a, 0x36, 0xe7, 0x53, 0x05, 0x43, 0x85, 0xe9, 0x82, 0xa1, 0xbb, 0xb3, 0xd5, 0x85, 0x53,
+ 0xca, 0x28, 0x8e, 0x5b, 0x94, 0x52, 0x71, 0x8b, 0x06, 0x94, 0x7d, 0x61, 0x5a, 0x9e, 0xeb, 0x5c,
+ 0x84, 0x79, 0xc3, 0xb0, 0xcd, 0xdf, 0x82, 0x82, 0xa4, 0x5b, 0x3e, 0x65, 0xda, 0x3b, 0x2f, 0x58,
+ 0x38, 0x85, 0x8b, 0x9a, 0xcd, 0x0e, 0x74, 0x49, 0xa0, 0x3a, 0x35, 0xcb, 0x46, 0x02, 0xc2, 0xd7,
+ 0x81, 0xdb, 0xe8, 0xc4, 0x39, 0x8e, 0xb0, 0x36, 0x2e, 0xb6, 0x54, 0x3a, 0x8f, 0xce, 0xf5, 0xb2,
+ 0x31, 0xe7, 0x49, 0xb8, 0xfe, 0xcb, 0xf1, 0xfa, 0x53, 0x97, 0xcf, 0xec, 0x00, 0x47, 0x5a, 0x23,
+ 0xf3, 0x25, 0x6a, 0xa3, 0xe5, 0x10, 0x6e, 0x58, 0x35, 0x97, 0x24, 0xbd, 0x71, 0x4e, 0xfc, 0x92,
+ 0xa7, 0xe1, 0xf4, 0xaa, 0xc0, 0xcd, 0x2a, 0x31, 0x8d, 0x01, 0xa4, 0xc9, 0xfb, 0x9e, 0xbb, 0x8f,
+ 0x12, 0xc1, 0xb4, 0x26, 0xd7, 0x6d, 0x1c, 0xef, 0xd8, 0x99, 0xf8, 0xa6, 0x43, 0x4f, 0xd7, 0x94,
+ 0x26, 0x8f, 0x21, 0xcd, 0x3f, 0xc8, 0x46, 0xce, 0x53, 0x05, 0x0a, 0xc7, 0x66, 0x60, 0xf7, 0xd5,
+ 0xe9, 0xa6, 0x8d, 0x1e, 0x75, 0xba, 0x49, 0xcf, 0xf2, 0x58, 0x16, 0xfd, 0xa0, 0x40, 0xe8, 0x74,
+ 0x4e, 0x7c, 0xa7, 0x8a, 0xe5, 0x51, 0x05, 0x84, 0x92, 0xa4, 0x6a, 0x86, 0x88, 0x94, 0x82, 0x73,
+ 0x56, 0x54, 0x8d, 0x49, 0x6e, 0x36, 0x1d, 0x31, 0xac, 0x8c, 0x38, 0xae, 0x27, 0x85, 0x0a, 0x4d,
+ 0x92, 0xdc, 0x33, 0x40, 0x36, 0xe1, 0x25, 0x01, 0x56, 0x45, 0xc7, 0x24, 0x64, 0xaa, 0xe2, 0x89,
+ 0x01, 0xb9, 0x6d, 0xcb, 0xb8, 0xef, 0xd3, 0x0f, 0x58, 0x0d, 0x7b, 0x14, 0x5f, 0xd5, 0x62, 0x2b,
+ 0xc8, 0xd5, 0xa4, 0x4a, 0x96, 0x55, 0xfc, 0x79, 0x46, 0xf5, 0x2d, 0x0c, 0xdf, 0x6a, 0xa1, 0x5e,
+ 0x5a, 0xc3, 0x9e, 0x45, 0x86, 0x0e, 0xe3, 0xe8, 0x77, 0x8d, 0x4d, 0x74, 0x82, 0xec, 0xb1, 0xe9,
+ 0x4a, 0x76, 0x0d, 0x87, 0x3a, 0xb6, 0x4e, 0xd8, 0x75, 0x24, 0xe9, 0x0f, 0x4d, 0xc9, 0x6e, 0x20,
+ 0x0e, 0xfe, 0xda, 0x12, 0x3e, 0x4a, 0x0a, 0xbb, 0x89, 0x38, 0xd2, 0x1c, 0xb0, 0x5b, 0xcd, 0xdf,
+ 0x8c, 0xeb, 0xa1, 0xdf, 0x88, 0xdc, 0x93, 0x45, 0xb6, 0x0f, 0x3a, 0x30, 0xf3, 0xf6, 0x72, 0x1b,
+ 0xd6, 0x7c, 0xf1, 0x83, 0x89, 0x9d, 0xba, 0x25, 0x90, 0xbb, 0xba, 0x0c, 0x65, 0x96, 0xa2, 0x79,
+ 0x06, 0x6b, 0x61, 0xe3, 0x99, 0x2d, 0x87, 0x14, 0x47, 0xe2, 0x6f, 0x25, 0xae, 0x31, 0x64, 0xe6,
+ 0x5e, 0xff, 0x8a, 0x58, 0xc6, 0xd7, 0x16, 0xa2, 0x3c, 0x41, 0x76, 0x81, 0x3c, 0x41, 0xf3, 0x7f,
+ 0x27, 0x13, 0xcf, 0xca, 0x61, 0xb3, 0x22, 0x87, 0x6d, 0x36, 0x11, 0x1d, 0x87, 0xfe, 0xb3, 0x2f,
+ 0x13, 0xfa, 0x9f, 0x57, 0xd4, 0xf1, 0x3e, 0xfa, 0x0f, 0xb4, 0x33, 0x9f, 0x2e, 0x90, 0xd6, 0x48,
+ 0xe1, 0xf2, 0x0d, 0x4a, 0x2b, 0x9b, 0x5d, 0x55, 0x71, 0x54, 0x98, 0x7b, 0xa9, 0x28, 0x99, 0x3f,
+ 0xd6, 0x98, 0x46, 0x82, 0x2a, 0xa1, 0xc7, 0x8a, 0xf3, 0xf4, 0x18, 0xfa, 0xce, 0x5a, 0xc3, 0x45,
+ 0x6d, 0x95, 0x05, 0x52, 0xbf, 0x43, 0xf6, 0xb4, 0xc7, 0xcb, 0xc6, 0x0c, 0x1c, 0x8d, 0xbd, 0xd1,
+ 0xc4, 0x91, 0xb6, 0x4e, 0x74, 0xa8, 0xc6, 0xf4, 0xad, 0xc7, 0xca, 0xec, 0xad, 0xc7, 0x0f, 0x01,
+ 0x02, 0x81, 0xbb, 0x63, 0xcb, 0xee, 0x4b, 0x5d, 0x97, 0x74, 0xe7, 0xb2, 0xb1, 0xe9, 0xf4, 0x4c,
+ 0x82, 0x02, 0xfb, 0x3f, 0x32, 0xcf, 0x29, 0x65, 0xab, 0x0b, 0x28, 0xa2, 0xf6, 0xb4, 0x76, 0x5f,
+ 0x99, 0xd5, 0xee, 0x6f, 0x41, 0x21, 0x40, 0x13, 0x9a, 0x2e, 0xee, 0x5c, 0xbe, 0xbe, 0xeb, 0x64,
+ 0x67, 0x1b, 0x0a, 0x97, 0x02, 0x96, 0xa8, 0xff, 0x3c, 0x9f, 0xae, 0xec, 0x54, 0x8c, 0xb0, 0x99,
+ 0xd2, 0xb0, 0x37, 0xd3, 0x1a, 0xb6, 0x61, 0x41, 0x51, 0x27, 0x1f, 0xa6, 0x03, 0x05, 0x61, 0xd8,
+ 0x32, 0x9b, 0x08, 0x5b, 0x46, 0xd5, 0xaf, 0xb9, 0x64, 0xf5, 0xeb, 0xd4, 0xad, 0xbe, 0xc2, 0xcc,
+ 0xad, 0xbe, 0xe6, 0x27, 0x50, 0x50, 0x3e, 0x01, 0x84, 0xe6, 0xa8, 0x32, 0x65, 0x71, 0x50, 0x2c,
+ 0xc3, 0xaf, 0x03, 0x0b, 0x04, 0xd9, 0x3a, 0xa2, 0x6b, 0x8e, 0x04, 0x29, 0xc9, 0x2c, 0xaf, 0xc3,
+ 0x75, 0x85, 0x1b, 0xa4, 0x9f, 0x90, 0xc1, 0xe5, 0xd8, 0xc7, 0xbe, 0xe9, 0x5f, 0xb0, 0x7c, 0xf3,
+ 0x43, 0x4a, 0xfd, 0x87, 0x02, 0x55, 0x8d, 0x6e, 0x51, 0x2a, 0xb5, 0x6c, 0x69, 0xed, 0x43, 0x95,
+ 0x23, 0xda, 0xdb, 0x53, 0xf5, 0x74, 0xe4, 0x4e, 0x51, 0x3c, 0x68, 0x39, 0x79, 0xc6, 0xff, 0x89,
+ 0xed, 0xb7, 0xe6, 0x46, 0xc2, 0x62, 0x4c, 0x17, 0xc8, 0x65, 0x16, 0x2d, 0x90, 0x6b, 0x3e, 0x86,
+ 0x55, 0x23, 0xad, 0xd3, 0xf9, 0x7b, 0x50, 0xf2, 0xc6, 0x49, 0x3e, 0x2f, 0x92, 0xcb, 0x10, 0xbd,
+ 0xf9, 0xb3, 0x0c, 0x2c, 0x77, 0x5c, 0x29, 0x7c, 0xd7, 0x74, 0xb6, 0x1d, 0x73, 0xc0, 0xdf, 0x0d,
+ 0xb5, 0xd4, 0xfc, 0xd8, 0x43, 0x12, 0x37, 0xad, 0xb0, 0x1c, 0x1d, 0x64, 0xe7, 0x37, 0x60, 0x4d,
+ 0x58, 0xb6, 0xf4, 0x7c, 0x65, 0x27, 0x87, 0x75, 0x8c, 0xd7, 0x81, 0x29, 0x70, 0x97, 0xb6, 0x44,
+ 0x4f, 0x2d, 0x73, 0x1d, 0xae, 0xa7, 0xa0, 0xa1, 0x11, 0x9c, 0xe5, 0xb7, 0xa1, 0x1e, 0x9f, 0x46,
+ 0x5b, 0x9e, 0x2b, 0x3b, 0xae, 0x25, 0xce, 0xc9, 0xc8, 0x62, 0xb9, 0xe6, 0x6f, 0x44, 0xe6, 0xdd,
+ 0x53, 0x5d, 0xe5, 0xe8, 0x7b, 0x5e, 0x7c, 0x85, 0x56, 0xb7, 0x12, 0x57, 0xb5, 0xb3, 0x0b, 0x5c,
+ 0xd5, 0xfe, 0x30, 0xbe, 0x6e, 0xab, 0x0e, 0x8a, 0x57, 0xe6, 0x9e, 0x3e, 0x54, 0x9c, 0xa5, 0xad,
+ 0xfb, 0xae, 0x48, 0xdc, 0xbd, 0x7d, 0x53, 0xbb, 0x74, 0xf9, 0x45, 0xac, 0x60, 0x55, 0xc7, 0xf0,
+ 0xce, 0xf4, 0x1d, 0x8f, 0xc5, 0x8a, 0x24, 0x67, 0x0c, 0x55, 0x78, 0x69, 0x43, 0xf5, 0xdb, 0x53,
+ 0xde, 0x53, 0x79, 0x6e, 0x38, 0xee, 0x8a, 0x1b, 0xac, 0xdf, 0x86, 0xd2, 0xd0, 0x0e, 0xa4, 0xe7,
+ 0xab, 0x5b, 0xd5, 0xb3, 0xb7, 0xc0, 0x12, 0xb3, 0xb5, 0xa3, 0x10, 0xa9, 0xa2, 0x2d, 0xa4, 0xe2,
+ 0xdf, 0x83, 0x35, 0x9a, 0xf8, 0xc3, 0xd8, 0x6a, 0x08, 0xea, 0xd5, 0xb9, 0x95, 0x84, 0x09, 0x56,
+ 0x1b, 0x53, 0x24, 0xc6, 0x2c, 0x93, 0xc6, 0x00, 0x20, 0x5e, 0x9f, 0x19, 0x2d, 0xf6, 0x19, 0x6e,
+ 0x55, 0xdf, 0x84, 0x62, 0x30, 0x39, 0x8e, 0xb3, 0x71, 0xba, 0xd5, 0x38, 0x87, 0xc6, 0x8c, 0x75,
+ 0x70, 0x28, 0x7c, 0xd5, 0xdd, 0x2b, 0xaf, 0x76, 0x7f, 0x98, 0x5c, 0x78, 0x25, 0x9c, 0x77, 0x2f,
+ 0x59, 0xbd, 0x88, 0x73, 0x42, 0x02, 0x1a, 0xef, 0x40, 0x35, 0x31, 0xa9, 0xa8, 0x99, 0x27, 0xae,
+ 0xe5, 0x85, 0x21, 0x60, 0xfc, 0xad, 0xae, 0xb6, 0x59, 0x61, 0x10, 0x98, 0x7e, 0x37, 0x0c, 0x60,
+ 0xd3, 0x13, 0x78, 0x85, 0x87, 0xfd, 0x0a, 0xd4, 0x12, 0x26, 0x5d, 0x14, 0x1e, 0x4c, 0x03, 0x9b,
+ 0x67, 0xf0, 0xf9, 0x04, 0xbb, 0x43, 0xe1, 0x8f, 0xec, 0x00, 0x0f, 0x12, 0xe5, 0x2c, 0x92, 0x69,
+ 0x6d, 0x09, 0x57, 0xda, 0x32, 0xd4, 0xa0, 0x51, 0x9b, 0x7f, 0x13, 0x0a, 0x63, 0xe1, 0x8f, 0x02,
+ 0xad, 0x45, 0xa7, 0x25, 0x68, 0x2e, 0xdb, 0xc0, 0x50, 0x34, 0xcd, 0x7f, 0x98, 0x81, 0xf2, 0x9e,
+ 0x90, 0x26, 0xda, 0x0e, 0x7c, 0x6f, 0xea, 0x2d, 0xb3, 0x19, 0xe4, 0x10, 0x75, 0x5d, 0xbb, 0xaf,
+ 0xeb, 0x1d, 0x8d, 0xaf, 0xdb, 0x3b, 0x4b, 0x71, 0xc7, 0x1a, 0x1b, 0x50, 0xd2, 0xe0, 0xc6, 0xbb,
+ 0xb0, 0x3a, 0x85, 0x49, 0xf3, 0xa2, 0x6c, 0xfb, 0xee, 0xc5, 0x28, 0x2c, 0x73, 0x5a, 0x36, 0xd2,
+ 0xc0, 0x8d, 0x0a, 0x94, 0xc6, 0x8a, 0xa0, 0xf9, 0x07, 0x37, 0xa8, 0xb8, 0xc6, 0x3e, 0x41, 0x9f,
+ 0x7e, 0xde, 0xc9, 0x7a, 0x07, 0x80, 0x8e, 0x66, 0x55, 0x82, 0xa1, 0x42, 0xb6, 0x09, 0x08, 0x7f,
+ 0x3f, 0x8a, 0xb5, 0xe7, 0xe7, 0x1a, 0x55, 0x49, 0xe6, 0xd3, 0x01, 0xf7, 0x3a, 0x94, 0xec, 0x80,
+ 0xe2, 0x70, 0xba, 0x6c, 0x29, 0x6c, 0xf2, 0x6f, 0x41, 0xd1, 0x1e, 0x8d, 0x3d, 0x5f, 0xea, 0x60,
+ 0xfc, 0x95, 0x5c, 0x3b, 0x84, 0xb9, 0xb3, 0x64, 0x68, 0x1a, 0xa4, 0x16, 0xe7, 0x44, 0x5d, 0x7e,
+ 0x31, 0x75, 0xfb, 0x3c, 0xa4, 0x56, 0x34, 0xfc, 0xbb, 0x50, 0x1b, 0xa8, 0xaa, 0x4d, 0xc5, 0x58,
+ 0x2b, 0x91, 0xaf, 0x5c, 0xc5, 0xe4, 0x51, 0x92, 0x60, 0x67, 0xc9, 0x48, 0x73, 0x40, 0x96, 0x68,
+ 0xc0, 0x8b, 0x40, 0xf6, 0xbc, 0x8f, 0x3c, 0xdb, 0x25, 0x77, 0xf7, 0x05, 0x2c, 0x8d, 0x24, 0x01,
+ 0xb2, 0x4c, 0x71, 0xe0, 0x5f, 0x47, 0x8b, 0x27, 0x90, 0xfa, 0x62, 0xfb, 0xdd, 0xab, 0x38, 0xf5,
+ 0x44, 0xa0, 0xaf, 0xa4, 0x07, 0x92, 0x9f, 0x43, 0x23, 0xb1, 0x49, 0xf4, 0x4b, 0x5a, 0xe3, 0xb1,
+ 0xef, 0xa1, 0xcf, 0x5c, 0x23, 0x6e, 0x5f, 0xbf, 0x8a, 0xdb, 0xe1, 0xa5, 0xd4, 0x3b, 0x4b, 0xc6,
+ 0x15, 0xbc, 0x79, 0x0f, 0x3d, 0x3b, 0x3d, 0x84, 0x5d, 0x61, 0x9e, 0x85, 0xd7, 0xe2, 0xef, 0x2f,
+ 0x34, 0x0b, 0x44, 0xb1, 0xb3, 0x64, 0x4c, 0xf1, 0xe0, 0xbf, 0x0a, 0x6b, 0xa9, 0x77, 0xd2, 0x4d,
+ 0x58, 0x75, 0x69, 0xfe, 0x6b, 0x0b, 0x0f, 0x03, 0x89, 0x76, 0x96, 0x8c, 0x59, 0x4e, 0x7c, 0x02,
+ 0x9f, 0x9b, 0x1d, 0xd2, 0x96, 0xe8, 0x3b, 0xb6, 0x2b, 0xf4, 0xfd, 0xfa, 0x77, 0x5e, 0x6e, 0xb6,
+ 0x34, 0xf1, 0xce, 0x92, 0x71, 0x39, 0x67, 0xfe, 0x17, 0xe1, 0xf6, 0x78, 0xae, 0x8a, 0x51, 0xaa,
+ 0x4b, 0x5f, 0xcf, 0x7f, 0x6f, 0xc1, 0x37, 0xcf, 0xd0, 0xef, 0x2c, 0x19, 0x57, 0xf2, 0x47, 0xdb,
+ 0x99, 0x3c, 0x68, 0x5d, 0x5c, 0xae, 0x1a, 0x94, 0xa9, 0xed, 0x3b, 0x3b, 0xc2, 0xb4, 0xa2, 0x7c,
+ 0x41, 0x0c, 0x68, 0xfc, 0xf7, 0x0c, 0x14, 0xb5, 0xbc, 0xdf, 0x8e, 0x2a, 0x06, 0x22, 0xd5, 0x1d,
+ 0x03, 0xf8, 0x07, 0x50, 0x11, 0xbe, 0xef, 0xf9, 0x9b, 0x9e, 0x15, 0x16, 0x5b, 0x4e, 0x47, 0x99,
+ 0x15, 0x9f, 0xf5, 0x76, 0x88, 0x66, 0xc4, 0x14, 0xfc, 0x7d, 0x00, 0xb5, 0xcf, 0x7b, 0xf1, 0x1d,
+ 0xa1, 0xc6, 0x7c, 0x7a, 0x95, 0x82, 0x8a, 0xb1, 0xe3, 0xb0, 0x5c, 0x98, 0xff, 0x09, 0x9b, 0x91,
+ 0xc3, 0x59, 0x48, 0x38, 0x9c, 0xb7, 0x75, 0x1c, 0x81, 0xc2, 0x2b, 0xfa, 0xa6, 0x5c, 0x04, 0x68,
+ 0xfc, 0x7e, 0x06, 0x8a, 0x4a, 0x79, 0xf0, 0xf6, 0xec, 0x88, 0x5e, 0x7b, 0xb1, 0xce, 0x59, 0x9f,
+ 0x1e, 0xd9, 0xb7, 0x00, 0x94, 0x0e, 0x4a, 0x8c, 0xec, 0xf6, 0x14, 0x1f, 0x4d, 0x1a, 0x96, 0x37,
+ 0xc7, 0xf8, 0xcd, 0x87, 0xea, 0x36, 0x17, 0x85, 0x84, 0x9f, 0xec, 0xee, 0xb2, 0x25, 0xbe, 0x06,
+ 0xb5, 0x27, 0xfb, 0x8f, 0xf7, 0x0f, 0x9e, 0xed, 0x1f, 0xb5, 0x0d, 0xe3, 0xc0, 0x50, 0x91, 0xe1,
+ 0x8d, 0xd6, 0xd6, 0x51, 0x67, 0xff, 0xf0, 0x49, 0x8f, 0x65, 0x1b, 0xff, 0x2c, 0x03, 0xb5, 0x94,
+ 0xee, 0xfa, 0xd3, 0x5d, 0xba, 0xc4, 0xf4, 0xe7, 0xe6, 0x4f, 0x7f, 0xfe, 0xb2, 0xe9, 0x2f, 0x4c,
+ 0x4f, 0xff, 0xef, 0x64, 0xa0, 0x96, 0xd2, 0x91, 0x49, 0xee, 0x99, 0x34, 0xf7, 0xe4, 0x49, 0x9f,
+ 0x9d, 0x3a, 0xe9, 0x9b, 0xb0, 0x1c, 0xfe, 0xde, 0x8f, 0x23, 0x0e, 0x29, 0x58, 0x12, 0x87, 0xae,
+ 0x53, 0xe4, 0xd3, 0x38, 0x74, 0xa5, 0xe2, 0xea, 0xde, 0xd2, 0xf5, 0xd1, 0x80, 0x6e, 0xd7, 0x37,
+ 0x2e, 0xd7, 0xa0, 0x57, 0x0c, 0xe1, 0x11, 0x54, 0xc7, 0xf1, 0x36, 0x7d, 0x39, 0xb3, 0x24, 0x49,
+ 0xf9, 0x82, 0x7e, 0xfe, 0x6e, 0x06, 0x56, 0xd2, 0x3a, 0xf7, 0xff, 0xeb, 0x69, 0xfd, 0x27, 0x19,
+ 0x58, 0x9b, 0xd1, 0xe4, 0x57, 0x1a, 0x76, 0xd3, 0xfd, 0xca, 0x2e, 0xd0, 0xaf, 0xdc, 0x9c, 0x7e,
+ 0x5d, 0xae, 0x49, 0xae, 0xee, 0x71, 0x17, 0x3e, 0x77, 0xe9, 0x99, 0x70, 0xc5, 0x54, 0xa7, 0x98,
+ 0xe6, 0xa6, 0x99, 0xfe, 0x76, 0x06, 0x6e, 0x5f, 0xa5, 0xef, 0xff, 0x9f, 0xcb, 0xd5, 0x74, 0x0f,
+ 0x9b, 0xef, 0x46, 0x85, 0x04, 0x55, 0x28, 0xe9, 0xaf, 0x56, 0xe9, 0x42, 0xee, 0xa1, 0xf7, 0xdc,
+ 0x55, 0x91, 0x68, 0x43, 0x98, 0xfa, 0x5e, 0xbf, 0x21, 0xc6, 0x8e, 0x4d, 0x39, 0xd2, 0x5b, 0x00,
+ 0x2d, 0xf2, 0xeb, 0xc2, 0x6b, 0x36, 0x9b, 0xbb, 0x07, 0xdd, 0x36, 0x5b, 0x4a, 0x1a, 0xb1, 0x9f,
+ 0x84, 0x8a, 0xb8, 0x79, 0x08, 0xc5, 0xf8, 0xe2, 0xc3, 0x9e, 0xe9, 0x9f, 0x5a, 0x2a, 0x13, 0xb9,
+ 0x0c, 0xe5, 0x43, 0xed, 0x42, 0xa9, 0x57, 0x7d, 0xd4, 0x3d, 0xd8, 0x57, 0x41, 0xef, 0xad, 0x83,
+ 0x9e, 0xba, 0x3e, 0xd1, 0x7d, 0xfa, 0x48, 0xa5, 0xc4, 0x1e, 0x19, 0xad, 0xc3, 0x9d, 0x23, 0xc2,
+ 0x28, 0x34, 0x7f, 0x2b, 0x1f, 0x9e, 0x6a, 0x4d, 0x43, 0xe7, 0x38, 0x01, 0x8a, 0xa8, 0xcd, 0x3d,
+ 0xcd, 0x38, 0x7a, 0x0d, 0x95, 0xfc, 0xb6, 0xcf, 0x55, 0x1c, 0x82, 0x65, 0x79, 0x11, 0xb2, 0x87,
+ 0xc7, 0xaa, 0x12, 0x69, 0x47, 0x8e, 0x1c, 0x75, 0xef, 0xb2, 0x77, 0x2e, 0x59, 0x01, 0x7f, 0x6c,
+ 0x06, 0x67, 0xac, 0xd8, 0xfc, 0xe7, 0x39, 0xa8, 0x44, 0xaa, 0xf2, 0x65, 0x54, 0x37, 0xe7, 0xb0,
+ 0xd2, 0xd9, 0xef, 0xb5, 0x8d, 0xfd, 0xd6, 0xae, 0x46, 0xc9, 0xf1, 0x6b, 0xb0, 0xba, 0xdd, 0xd9,
+ 0x6d, 0x1f, 0xed, 0x1e, 0xb4, 0xb6, 0x34, 0xb0, 0xcc, 0x6f, 0x02, 0xef, 0xec, 0x1d, 0x1e, 0x18,
+ 0xbd, 0xa3, 0x4e, 0xf7, 0x68, 0xb3, 0xb5, 0xbf, 0xd9, 0xde, 0x6d, 0x6f, 0xb1, 0x22, 0x7f, 0x05,
+ 0xee, 0xee, 0x1f, 0xf4, 0x3a, 0x07, 0xfb, 0x47, 0xfb, 0x07, 0x47, 0x07, 0x1b, 0x1f, 0xb5, 0x37,
+ 0x7b, 0xdd, 0xa3, 0xce, 0xfe, 0x11, 0x72, 0x7d, 0x64, 0xb4, 0xf0, 0x09, 0x2b, 0xf0, 0xbb, 0x70,
+ 0x5b, 0x63, 0x75, 0xdb, 0xc6, 0xd3, 0xb6, 0x81, 0x4c, 0x9e, 0xec, 0xb7, 0x9e, 0xb6, 0x3a, 0xbb,
+ 0xad, 0x8d, 0xdd, 0x36, 0x5b, 0xe6, 0x77, 0xa0, 0xa1, 0x31, 0x8c, 0x56, 0xaf, 0x7d, 0xb4, 0xdb,
+ 0xd9, 0xeb, 0xf4, 0x8e, 0xda, 0xdf, 0xdb, 0x6c, 0xb7, 0xb7, 0xda, 0x5b, 0xac, 0xc6, 0xbf, 0x02,
+ 0x5f, 0xa6, 0x4e, 0xe9, 0x4e, 0xa4, 0x5f, 0xf6, 0x49, 0xe7, 0xf0, 0xa8, 0x65, 0x6c, 0xee, 0x74,
+ 0x9e, 0xb6, 0xd9, 0x0a, 0x7f, 0x0d, 0xbe, 0x74, 0x39, 0xea, 0x56, 0xc7, 0x68, 0x6f, 0xf6, 0x0e,
+ 0x8c, 0x8f, 0xd9, 0x1a, 0xff, 0x02, 0x7c, 0x6e, 0xa7, 0xb7, 0xb7, 0x7b, 0xf4, 0xcc, 0x38, 0xd8,
+ 0x7f, 0x74, 0x44, 0x3f, 0xbb, 0x3d, 0xe3, 0xc9, 0x66, 0xef, 0x89, 0xd1, 0x66, 0xc0, 0x1b, 0x70,
+ 0xf3, 0x70, 0xe3, 0x68, 0xff, 0xa0, 0x77, 0xd4, 0xda, 0xff, 0x78, 0x63, 0xf7, 0x60, 0xf3, 0xf1,
+ 0xd1, 0xf6, 0x81, 0xb1, 0xd7, 0xea, 0xb1, 0x2a, 0xff, 0x2a, 0xbc, 0xb6, 0xd9, 0x7d, 0xaa, 0xbb,
+ 0x79, 0xb0, 0x7d, 0x64, 0x1c, 0x3c, 0xeb, 0x1e, 0x1d, 0x18, 0x47, 0x46, 0x7b, 0x97, 0xc6, 0xdc,
+ 0x8d, 0xfb, 0x5e, 0xe2, 0xb7, 0xa1, 0xde, 0xd9, 0xef, 0x3e, 0xd9, 0xde, 0xee, 0x6c, 0x76, 0xda,
+ 0xfb, 0xbd, 0xa3, 0xc3, 0xb6, 0xb1, 0xd7, 0xe9, 0x76, 0x11, 0x8d, 0x55, 0x9a, 0xdf, 0x81, 0x62,
+ 0xc7, 0x3d, 0xb3, 0x25, 0xed, 0x2f, 0x2d, 0x8c, 0xda, 0xe3, 0x0a, 0x9b, 0xb4, 0x2d, 0xec, 0x81,
+ 0x4b, 0xdf, 0x13, 0xa0, 0xdd, 0xb5, 0x6c, 0xc4, 0x80, 0xe6, 0xef, 0xe7, 0xa0, 0xa6, 0x58, 0x84,
+ 0x1e, 0xdc, 0x3d, 0x58, 0xd5, 0xa1, 0xd0, 0x4e, 0x5a, 0x85, 0x4d, 0x83, 0xe9, 0x43, 0x5d, 0x0a,
+ 0x94, 0x50, 0x64, 0x49, 0x10, 0xbf, 0x09, 0x45, 0xb3, 0xef, 0xa0, 0x1b, 0xa8, 0xf2, 0x95, 0xba,
+ 0xf5, 0x59, 0x75, 0x17, 0xea, 0x45, 0x85, 0xd8, 0xf7, 0xdc, 0xcd, 0xe8, 0x4a, 0x49, 0x0a, 0xc6,
+ 0x3f, 0x81, 0x5b, 0x51, 0xbb, 0xed, 0xf6, 0xfd, 0x8b, 0x71, 0xf4, 0x25, 0xbd, 0xd2, 0xdc, 0x60,
+ 0xc2, 0xb6, 0xed, 0x88, 0x14, 0xa2, 0x71, 0x19, 0x03, 0xfe, 0x08, 0xc0, 0xa6, 0xc9, 0x22, 0xfb,
+ 0x68, 0xfe, 0xbd, 0xe9, 0xd4, 0x6c, 0xea, 0x96, 0x36, 0x03, 0xa3, 0xdf, 0x78, 0x40, 0x0c, 0x50,
+ 0xef, 0x3e, 0xd6, 0x1f, 0xde, 0x5b, 0x36, 0xa2, 0x76, 0xf3, 0x01, 0x40, 0x4c, 0xc5, 0x19, 0x2c,
+ 0xa3, 0x6d, 0xd1, 0x0a, 0xf6, 0xc4, 0xe8, 0x58, 0xf8, 0xaa, 0x8a, 0x4f, 0x41, 0x1e, 0x21, 0x05,
+ 0xcb, 0x34, 0xff, 0x30, 0x93, 0xf0, 0xc3, 0x95, 0x9f, 0x7d, 0xe5, 0x09, 0x34, 0x2f, 0x27, 0x84,
+ 0x9e, 0xb0, 0x9e, 0x54, 0x6d, 0x18, 0xe9, 0x26, 0x3f, 0x04, 0x6e, 0xcf, 0x4e, 0x65, 0x7e, 0xc1,
+ 0xa9, 0x9c, 0x43, 0x3b, 0x1d, 0xd2, 0x2f, 0xcc, 0x86, 0xf4, 0xef, 0x00, 0x0c, 0x1c, 0xef, 0x58,
+ 0xe7, 0x15, 0x8b, 0xba, 0xee, 0x27, 0x82, 0x34, 0x1d, 0x28, 0x87, 0x5f, 0x11, 0x44, 0x19, 0xa3,
+ 0xef, 0x08, 0x46, 0x01, 0x4e, 0xd5, 0xe2, 0x3b, 0xb0, 0x22, 0xd2, 0x7d, 0xce, 0x2e, 0xd8, 0xe7,
+ 0x29, 0xba, 0xe6, 0x37, 0x60, 0x6d, 0x06, 0x09, 0x27, 0x71, 0x6c, 0xca, 0xe8, 0x53, 0x02, 0xf8,
+ 0x7b, 0x36, 0x5d, 0xdf, 0xfc, 0xf7, 0x59, 0x58, 0xde, 0x33, 0x5d, 0xfb, 0x44, 0x04, 0x32, 0xec,
+ 0x6d, 0xd0, 0x1f, 0x8a, 0x91, 0x19, 0xf6, 0x56, 0xb5, 0x74, 0xd4, 0x23, 0x9b, 0xcc, 0x27, 0xcc,
+ 0xa4, 0x9f, 0x70, 0x37, 0x4d, 0xe4, 0x30, 0xaa, 0xae, 0xd7, 0x2d, 0x5c, 0x3b, 0xc7, 0xee, 0x0b,
+ 0x37, 0x08, 0x77, 0x4c, 0xd8, 0x8c, 0xab, 0x77, 0x8a, 0x57, 0x54, 0xef, 0x94, 0x66, 0xe7, 0xff,
+ 0x2e, 0x54, 0x83, 0xbe, 0x2f, 0x84, 0x1b, 0x0c, 0x3d, 0x19, 0x7e, 0x81, 0x32, 0x09, 0xa2, 0x52,
+ 0x3a, 0xef, 0xb9, 0x8b, 0x32, 0xbe, 0x6b, 0xbb, 0xa7, 0xba, 0x42, 0x2c, 0x05, 0x43, 0x19, 0xa4,
+ 0x98, 0x8f, 0xfd, 0x43, 0x41, 0xf1, 0x86, 0x82, 0x11, 0xb5, 0x29, 0xaa, 0x63, 0x4a, 0x31, 0xf0,
+ 0x7c, 0x5b, 0xa8, 0xd0, 0x66, 0xc5, 0x48, 0x40, 0x90, 0xd6, 0x31, 0xdd, 0xc1, 0xc4, 0x1c, 0x08,
+ 0x9d, 0xfe, 0x8e, 0xda, 0xcd, 0xff, 0x51, 0x00, 0x50, 0xbb, 0x21, 0x18, 0xda, 0x63, 0x4a, 0xbd,
+ 0xd8, 0xba, 0xa6, 0xb8, 0x66, 0xd0, 0x6f, 0xfe, 0x5e, 0xaa, 0xdc, 0x7f, 0x36, 0x59, 0x1a, 0x93,
+ 0x4f, 0x87, 0x84, 0x70, 0x72, 0x4c, 0x29, 0x74, 0xe1, 0x14, 0xcd, 0x7f, 0xde, 0x48, 0x82, 0xa8,
+ 0x74, 0xce, 0x94, 0xa2, 0xed, 0x5a, 0x2a, 0xe4, 0x94, 0x37, 0xa2, 0x36, 0x5d, 0x18, 0x0a, 0x5a,
+ 0x13, 0xe9, 0x19, 0xc2, 0x15, 0xcf, 0xa3, 0xbb, 0x70, 0x31, 0x88, 0xef, 0x41, 0x6d, 0x6c, 0x5e,
+ 0x8c, 0x84, 0x2b, 0xf7, 0x84, 0x1c, 0x7a, 0x96, 0xae, 0x72, 0x7a, 0xed, 0xf2, 0x0e, 0x1e, 0x26,
+ 0xd1, 0x8d, 0x34, 0x35, 0xca, 0x84, 0x1b, 0xd0, 0x2e, 0x51, 0xcb, 0xa8, 0x5b, 0x7c, 0x03, 0x40,
+ 0xfd, 0x4a, 0x68, 0xaa, 0x99, 0x28, 0x94, 0x39, 0x12, 0x81, 0xf0, 0xcf, 0x6c, 0xa5, 0x5d, 0x95,
+ 0x92, 0x8a, 0xa9, 0x50, 0x17, 0x4f, 0x02, 0xe1, 0xb7, 0x47, 0xa6, 0xed, 0xe8, 0x05, 0x8e, 0x01,
+ 0xfc, 0x6d, 0xb8, 0x11, 0x4c, 0x8e, 0x51, 0x66, 0x8e, 0x45, 0xcf, 0xdb, 0x17, 0xcf, 0x03, 0x47,
+ 0x48, 0x29, 0x7c, 0x5d, 0x49, 0x31, 0xff, 0x61, 0x73, 0x10, 0x99, 0x61, 0xf4, 0xb5, 0x13, 0xfc,
+ 0x15, 0x97, 0x6b, 0x45, 0x20, 0x5d, 0xcb, 0xc6, 0x32, 0xa8, 0xfe, 0x14, 0x48, 0x97, 0xba, 0x65,
+ 0xf9, 0x97, 0xe1, 0x8b, 0x29, 0x24, 0x43, 0x25, 0xa6, 0x83, 0x6d, 0xdb, 0x35, 0x1d, 0xfb, 0x87,
+ 0xaa, 0x4c, 0x20, 0xd7, 0x1c, 0x43, 0x2d, 0x35, 0x71, 0x74, 0x79, 0x93, 0x7e, 0xe9, 0x7a, 0x1f,
+ 0x06, 0xcb, 0xaa, 0xdd, 0x95, 0xbe, 0x4d, 0x19, 0x97, 0x08, 0xb2, 0x89, 0xfb, 0xdc, 0x63, 0x59,
+ 0x7e, 0x1d, 0x98, 0x82, 0x74, 0x5c, 0x73, 0x3c, 0x6e, 0x8d, 0xc7, 0x8e, 0x60, 0x39, 0xba, 0x18,
+ 0x1b, 0x43, 0x55, 0xd1, 0x3f, 0xcb, 0x37, 0xbf, 0x07, 0xb7, 0x68, 0x66, 0x9e, 0x0a, 0x3f, 0x72,
+ 0xb4, 0xf5, 0x58, 0x6f, 0xc0, 0x9a, 0xfa, 0xb5, 0xef, 0x49, 0xf5, 0x98, 0x8c, 0x4f, 0x0e, 0x2b,
+ 0x0a, 0x8c, 0xb6, 0x57, 0x57, 0xd0, 0x75, 0xd7, 0x08, 0x16, 0xe1, 0x65, 0x9b, 0x3f, 0x2b, 0x02,
+ 0x8f, 0x05, 0xa2, 0x67, 0x0b, 0x7f, 0xcb, 0x94, 0x66, 0x22, 0x52, 0x5a, 0xbb, 0x34, 0xd7, 0xff,
+ 0xe2, 0x4a, 0xbd, 0x9b, 0x50, 0xb4, 0x03, 0x74, 0x0d, 0x75, 0xb9, 0xae, 0x6e, 0xf1, 0x5d, 0x80,
+ 0xb1, 0xf0, 0x6d, 0xcf, 0x22, 0x09, 0x2a, 0xcc, 0xbd, 0x75, 0x31, 0xdb, 0xa9, 0xf5, 0xc3, 0x88,
+ 0xc6, 0x48, 0xd0, 0x63, 0x3f, 0x54, 0x4b, 0x65, 0xce, 0x8b, 0xd4, 0xe9, 0x24, 0x88, 0xbf, 0x01,
+ 0xd7, 0xc6, 0xbe, 0xdd, 0x17, 0x6a, 0x39, 0x9e, 0x04, 0xd6, 0x26, 0x7d, 0x23, 0xb0, 0x44, 0x98,
+ 0xf3, 0x1e, 0xa1, 0x04, 0x9a, 0x2e, 0x39, 0x4c, 0x01, 0xe5, 0x8a, 0xf5, 0x05, 0x71, 0x55, 0xd0,
+ 0x5a, 0x33, 0xe6, 0x3f, 0xe4, 0xf7, 0x81, 0xe9, 0x07, 0x7b, 0xb6, 0xbb, 0x2b, 0xdc, 0x81, 0x1c,
+ 0x92, 0x70, 0xd7, 0x8c, 0x19, 0x38, 0x69, 0x30, 0xf5, 0x25, 0x26, 0x95, 0x47, 0xaa, 0x18, 0x51,
+ 0x5b, 0x7d, 0x74, 0xc0, 0xf1, 0xfc, 0xae, 0xf4, 0x75, 0x65, 0x6e, 0xd4, 0x46, 0x1b, 0x2a, 0xa0,
+ 0xbe, 0x1e, 0xfa, 0x9e, 0x35, 0xa1, 0x2c, 0x87, 0x52, 0x62, 0xd3, 0xe0, 0x18, 0x73, 0xcf, 0x74,
+ 0x75, 0xb9, 0x64, 0x2d, 0x89, 0x19, 0x81, 0xc9, 0x27, 0xf4, 0x82, 0x98, 0xe1, 0xaa, 0xf6, 0x09,
+ 0x13, 0x30, 0x8d, 0x13, 0xb3, 0x62, 0x11, 0x4e, 0xcc, 0x87, 0xc6, 0x6f, 0xf9, 0x9e, 0x6d, 0xc5,
+ 0xbc, 0x54, 0xe5, 0xce, 0x0c, 0x3c, 0x81, 0x1b, 0xf3, 0xe4, 0x29, 0xdc, 0x08, 0xde, 0xfc, 0x71,
+ 0x06, 0x20, 0x5e, 0x7c, 0x14, 0xf9, 0xb8, 0x15, 0x6f, 0xf1, 0x5b, 0x70, 0x2d, 0x09, 0x76, 0x74,
+ 0xc9, 0x2b, 0xc9, 0x7d, 0xfc, 0x60, 0xcb, 0xbc, 0x08, 0x58, 0x56, 0x5f, 0xd1, 0xd6, 0xb0, 0x67,
+ 0x42, 0x50, 0xfd, 0xe0, 0x75, 0x60, 0x31, 0x90, 0xee, 0xdd, 0x05, 0x2c, 0x9f, 0x46, 0xfd, 0x58,
+ 0x98, 0x7e, 0xc0, 0x0a, 0xcd, 0x1d, 0x28, 0xaa, 0x64, 0xd7, 0x9c, 0x34, 0xf5, 0xcb, 0xd5, 0x9c,
+ 0xfc, 0xf5, 0x0c, 0xc0, 0x96, 0xaa, 0x8f, 0xc6, 0x53, 0x7c, 0x4e, 0xf6, 0x7f, 0x9e, 0x45, 0x65,
+ 0x5a, 0x16, 0xd5, 0x99, 0xe7, 0xa2, 0xef, 0xfb, 0x60, 0x13, 0x25, 0xc7, 0x0c, 0x6b, 0xc4, 0xd4,
+ 0x9e, 0x8b, 0xda, 0xea, 0x00, 0xd9, 0xf4, 0x5c, 0x57, 0xf4, 0xf1, 0xf8, 0x89, 0x0e, 0x90, 0x08,
+ 0xd4, 0xfc, 0x51, 0x16, 0x2a, 0x9b, 0x43, 0x53, 0xaa, 0xcf, 0xe1, 0x7c, 0x07, 0xca, 0x23, 0x11,
+ 0x04, 0xe6, 0x40, 0x04, 0x3a, 0xb9, 0x33, 0x9d, 0x99, 0x8d, 0x70, 0xd7, 0x9f, 0xb8, 0xbe, 0x30,
+ 0x2d, 0xf5, 0x0d, 0xa0, 0x88, 0x4a, 0x71, 0x70, 0x65, 0xe4, 0x7c, 0xbf, 0x04, 0x07, 0x37, 0xfa,
+ 0x60, 0xaf, 0x75, 0x1c, 0x7f, 0x21, 0x5a, 0x8d, 0x36, 0x09, 0x6a, 0xec, 0x41, 0x35, 0x41, 0xca,
+ 0x5f, 0x81, 0x9a, 0xe7, 0x58, 0x22, 0x50, 0xb7, 0x00, 0xe3, 0x0f, 0x27, 0xa6, 0x80, 0x54, 0xa2,
+ 0x81, 0x3b, 0x57, 0xf8, 0x3a, 0x4f, 0x17, 0x36, 0x9b, 0xff, 0xab, 0x04, 0x55, 0xec, 0xd4, 0x9e,
+ 0x1a, 0xc3, 0xcc, 0x72, 0xd4, 0xa1, 0xe4, 0x69, 0xce, 0xfa, 0xfa, 0xa0, 0x97, 0xe0, 0xa9, 0xcb,
+ 0x3e, 0x72, 0xe9, 0xb2, 0x8f, 0xdb, 0x50, 0x51, 0x49, 0x25, 0xab, 0xa5, 0x34, 0x61, 0xce, 0x88,
+ 0x01, 0x68, 0xae, 0x8c, 0x3c, 0x8b, 0xf4, 0x71, 0x4b, 0xe5, 0x63, 0x72, 0x46, 0x02, 0x92, 0xfc,
+ 0x98, 0x53, 0x35, 0xfd, 0x31, 0x27, 0xaa, 0xbf, 0x19, 0x3b, 0x17, 0x3d, 0x4f, 0xf7, 0xb6, 0x63,
+ 0xc5, 0xb7, 0xb0, 0xd3, 0x70, 0xbe, 0x09, 0x25, 0xbd, 0x2c, 0x3a, 0xeb, 0xf4, 0x95, 0x39, 0x2b,
+ 0xa1, 0xd1, 0xd7, 0xf5, 0x5f, 0x7d, 0x11, 0xca, 0x08, 0x29, 0xf9, 0x23, 0xa8, 0x9a, 0x52, 0x9a,
+ 0xfd, 0xe1, 0x48, 0xeb, 0xcf, 0xdc, 0x9c, 0x04, 0x74, 0x92, 0x51, 0x2b, 0xc2, 0x36, 0x92, 0x94,
+ 0x7c, 0x03, 0x2a, 0xbe, 0x30, 0x53, 0x39, 0xf0, 0x57, 0xae, 0x60, 0x63, 0x84, 0xb8, 0x46, 0x4c,
+ 0x16, 0x7d, 0x43, 0x14, 0xe2, 0x6f, 0x88, 0x36, 0x7e, 0x9a, 0x81, 0x95, 0x74, 0xe7, 0xff, 0x34,
+ 0xbe, 0x69, 0xf7, 0xad, 0xf8, 0x9b, 0x76, 0x9f, 0xe1, 0xfb, 0x70, 0xbf, 0x9d, 0x01, 0x88, 0xe7,
+ 0x05, 0xcf, 0x48, 0xf5, 0xed, 0xad, 0xd0, 0x6a, 0x57, 0x2d, 0xbe, 0x93, 0xfa, 0x60, 0xc3, 0xdb,
+ 0x0b, 0x4d, 0x72, 0xe2, 0x67, 0xa2, 0x7c, 0xfd, 0x01, 0xac, 0xa4, 0xe1, 0x54, 0xf6, 0xdf, 0xd9,
+ 0x6d, 0xab, 0x18, 0x55, 0x67, 0xaf, 0xf5, 0xa8, 0xad, 0xaf, 0x9b, 0x75, 0xf6, 0x1f, 0xb3, 0x6c,
+ 0xe3, 0x8f, 0x32, 0x50, 0x89, 0xa6, 0x9c, 0x7f, 0x37, 0xb9, 0x56, 0xaa, 0xd0, 0xe5, 0xad, 0x45,
+ 0xd6, 0x2a, 0xfe, 0xd5, 0x76, 0xa5, 0x7f, 0x91, 0x58, 0xba, 0x86, 0x07, 0x2b, 0xe9, 0x87, 0x73,
+ 0x94, 0xe8, 0xa3, 0xb4, 0x12, 0x7d, 0x73, 0xa1, 0x57, 0x86, 0xae, 0xea, 0xae, 0x1d, 0x48, 0xad,
+ 0x5f, 0xdf, 0xcf, 0xbe, 0x97, 0x69, 0xdc, 0x85, 0xe5, 0xe4, 0xa3, 0xd9, 0x1b, 0xa7, 0xf7, 0xff,
+ 0x28, 0x07, 0x2b, 0xe9, 0x5a, 0x11, 0xba, 0xc1, 0xa6, 0xea, 0x94, 0x0e, 0x1c, 0x2b, 0x51, 0xf1,
+ 0xcf, 0xd0, 0x4d, 0xd6, 0xce, 0x30, 0x01, 0xd6, 0x28, 0x0a, 0xe6, 0x8d, 0x04, 0xbb, 0x9b, 0xfc,
+ 0x6e, 0xe7, 0x1b, 0x1c, 0xc2, 0x9b, 0x87, 0x6c, 0xcc, 0x2b, 0xfa, 0x0b, 0x66, 0x3f, 0xca, 0xf2,
+ 0x5a, 0xa2, 0xee, 0xfc, 0x27, 0x68, 0x09, 0xae, 0x6e, 0x4c, 0x5c, 0xcb, 0x11, 0x56, 0x04, 0xfd,
+ 0x69, 0x12, 0x1a, 0x15, 0x8e, 0xff, 0x28, 0xcf, 0x57, 0xa0, 0xd2, 0x9d, 0x1c, 0xeb, 0xa2, 0xf1,
+ 0xbf, 0x94, 0xe7, 0x37, 0x61, 0x4d, 0x63, 0xc5, 0x35, 0x9a, 0xec, 0x2f, 0xe3, 0x99, 0xb5, 0xd2,
+ 0x52, 0xf3, 0xa5, 0x3b, 0xca, 0xfe, 0x4a, 0x1e, 0xbb, 0x40, 0x17, 0xda, 0xff, 0x2a, 0xf1, 0x89,
+ 0x2e, 0xf8, 0xb0, 0x5f, 0xcb, 0xf3, 0x55, 0x80, 0x6e, 0x2f, 0x7a, 0xd1, 0x6f, 0xe4, 0x79, 0x15,
+ 0x8a, 0xdd, 0x1e, 0x71, 0xfb, 0x71, 0x9e, 0xdf, 0x00, 0x16, 0x3f, 0xd5, 0x95, 0xab, 0x7f, 0x43,
+ 0x75, 0x26, 0x2a, 0x45, 0xfd, 0x9b, 0x79, 0x1c, 0x57, 0x38, 0xcb, 0xec, 0x6f, 0xe5, 0x39, 0x83,
+ 0x6a, 0x22, 0xb6, 0xca, 0xfe, 0x76, 0x9e, 0x73, 0xa8, 0xed, 0xd9, 0x41, 0x60, 0xbb, 0x03, 0x3d,
+ 0x82, 0x5f, 0xa7, 0x37, 0x6f, 0x47, 0x77, 0x94, 0xd8, 0x6f, 0xe6, 0xf9, 0x2d, 0xe0, 0xc9, 0x7c,
+ 0x92, 0x7e, 0xf0, 0x77, 0x88, 0x5a, 0x9d, 0x93, 0x81, 0x86, 0xfd, 0x5d, 0xa2, 0x46, 0x49, 0xd0,
+ 0x80, 0xdf, 0xa2, 0x09, 0xd9, 0x8c, 0x6b, 0x5d, 0x35, 0xfc, 0x27, 0x44, 0x1c, 0x2e, 0xa6, 0x82,
+ 0xfd, 0x34, 0x7f, 0xff, 0x67, 0x94, 0x0f, 0x48, 0x96, 0x8c, 0xf1, 0x65, 0x28, 0x3b, 0x9e, 0x3b,
+ 0x90, 0xea, 0x7b, 0xa9, 0x35, 0xa8, 0x04, 0x43, 0xcf, 0x97, 0xd4, 0xa4, 0x4b, 0x94, 0x2e, 0x5d,
+ 0xb6, 0x57, 0xd7, 0x0e, 0x94, 0x57, 0xa7, 0xe2, 0xab, 0xd2, 0x1c, 0xb0, 0x6a, 0x54, 0xa5, 0x9b,
+ 0x8f, 0x2a, 0x89, 0xe9, 0xd2, 0x7f, 0x78, 0xa9, 0x9a, 0x15, 0x11, 0x75, 0xe2, 0x3b, 0xaa, 0xa2,
+ 0x58, 0xa0, 0x45, 0xaf, 0x3e, 0x8c, 0x38, 0x1e, 0xa2, 0xe3, 0x50, 0x51, 0x50, 0xef, 0xfb, 0xb6,
+ 0xba, 0xae, 0xab, 0x0b, 0xf4, 0x2c, 0xec, 0x47, 0x54, 0x83, 0xc2, 0xc4, 0xfd, 0xbf, 0x97, 0x81,
+ 0xe5, 0xf0, 0xaa, 0xbb, 0x3d, 0xb0, 0x5d, 0x55, 0x93, 0x1c, 0x7e, 0x85, 0xb6, 0xef, 0xd8, 0xe3,
+ 0xf0, 0xab, 0x8e, 0xab, 0x50, 0xb5, 0x7c, 0x73, 0xd0, 0x72, 0xad, 0x2d, 0xdf, 0x1b, 0xab, 0x6e,
+ 0xab, 0x8c, 0xa1, 0xaa, 0x85, 0x7e, 0x2e, 0x8e, 0x11, 0x7d, 0x2c, 0x7c, 0x96, 0xa7, 0xe2, 0xbf,
+ 0xa1, 0xe9, 0xdb, 0xee, 0xa0, 0x7d, 0x2e, 0x85, 0x1b, 0xa8, 0x9a, 0xe8, 0x2a, 0x94, 0x26, 0x81,
+ 0xe8, 0x9b, 0x81, 0x60, 0x45, 0x6c, 0x1c, 0x4f, 0x6c, 0x47, 0xda, 0xae, 0xfa, 0x98, 0x62, 0x54,
+ 0xf4, 0x5c, 0xc6, 0x91, 0x99, 0x63, 0x9b, 0x55, 0xee, 0xff, 0xab, 0x0c, 0x54, 0x49, 0x2c, 0xe2,
+ 0x98, 0x78, 0x6c, 0xa3, 0x55, 0xa1, 0xb4, 0x1b, 0x7d, 0x55, 0xaf, 0x08, 0xd9, 0x83, 0x53, 0x15,
+ 0x13, 0xd7, 0x62, 0xa1, 0xee, 0xa4, 0xaa, 0x0f, 0xec, 0xe5, 0xf9, 0xe7, 0xe0, 0x86, 0x21, 0x46,
+ 0x9e, 0x14, 0xcf, 0x4c, 0x5b, 0x26, 0xef, 0x1f, 0x15, 0xd0, 0x9d, 0x53, 0x8f, 0xc2, 0x0b, 0x47,
+ 0x45, 0x72, 0xe7, 0xf0, 0xb5, 0x21, 0xa4, 0x84, 0xa3, 0x27, 0x88, 0xf6, 0xef, 0xca, 0x11, 0xca,
+ 0x47, 0x9e, 0xed, 0xe2, 0xdb, 0xe8, 0x9e, 0x34, 0x41, 0x28, 0xb9, 0x82, 0x20, 0xb8, 0xbf, 0x0f,
+ 0x37, 0xe7, 0xa7, 0x04, 0xd4, 0x0d, 0x6a, 0xfa, 0x94, 0x33, 0xdd, 0x48, 0x79, 0xe6, 0xdb, 0xea,
+ 0xaa, 0x6b, 0x05, 0x0a, 0x07, 0xcf, 0x5d, 0x12, 0x8b, 0x35, 0xa8, 0xed, 0x7b, 0x09, 0x1a, 0x96,
+ 0xbb, 0xdf, 0x4f, 0x65, 0x71, 0xe2, 0x49, 0x09, 0x3b, 0xb1, 0x94, 0xb8, 0x6d, 0x95, 0x51, 0xf9,
+ 0x01, 0xfa, 0x6f, 0x1c, 0xea, 0xeb, 0x12, 0x3a, 0x7b, 0x62, 0xa9, 0xaf, 0x4b, 0x44, 0xdd, 0xcc,
+ 0xab, 0xcf, 0x6c, 0xb9, 0x7d, 0xe1, 0x08, 0x8b, 0x15, 0xee, 0xbf, 0x07, 0xab, 0x7a, 0xa8, 0x7d,
+ 0x11, 0x04, 0xe1, 0x6d, 0xa5, 0x43, 0xdf, 0x3e, 0x53, 0x5f, 0xb0, 0x58, 0x86, 0xf2, 0xa1, 0xf0,
+ 0x03, 0xcf, 0xa5, 0xaf, 0x77, 0x00, 0x14, 0xbb, 0x43, 0xd3, 0xc7, 0x77, 0xdc, 0xff, 0x9a, 0x9e,
+ 0xa4, 0x27, 0xe7, 0xe1, 0xd1, 0x80, 0xfb, 0x47, 0x7f, 0xbc, 0xc6, 0x94, 0xa6, 0x46, 0x97, 0xbe,
+ 0x30, 0x47, 0x2c, 0x7b, 0x7f, 0x13, 0x2a, 0x74, 0xd9, 0xe9, 0xb1, 0xed, 0x5a, 0x38, 0xf0, 0x0d,
+ 0x5d, 0x78, 0x4f, 0x5f, 0x55, 0x3a, 0xa3, 0xe9, 0x28, 0xab, 0xef, 0xcf, 0xb2, 0x2c, 0xbf, 0x09,
+ 0xbc, 0x35, 0x91, 0xde, 0xc8, 0xa4, 0x4b, 0xba, 0xce, 0x85, 0xfa, 0x56, 0x71, 0xee, 0xfe, 0xb7,
+ 0x81, 0xab, 0x18, 0x9b, 0x25, 0xce, 0x6d, 0x77, 0x10, 0x7d, 0x1d, 0x00, 0xe8, 0x53, 0x1f, 0x96,
+ 0x38, 0x0f, 0x6f, 0xaa, 0x85, 0x8d, 0xf0, 0x83, 0x23, 0xdb, 0xde, 0xc4, 0xc5, 0x4e, 0x3f, 0x85,
+ 0xeb, 0x4a, 0xc4, 0x70, 0x14, 0x74, 0x03, 0xf4, 0x52, 0xc7, 0x5f, 0xdd, 0x54, 0x93, 0x93, 0x20,
+ 0xc2, 0x65, 0x19, 0xec, 0x58, 0xe4, 0x34, 0xc7, 0xf0, 0xec, 0xfd, 0x26, 0x5c, 0x9b, 0x13, 0xb9,
+ 0x20, 0xa5, 0xae, 0xfc, 0x37, 0xb6, 0x74, 0xff, 0x43, 0x58, 0x53, 0x6a, 0x68, 0x5f, 0xdd, 0xd1,
+ 0x0b, 0xa7, 0xed, 0x59, 0x67, 0xbb, 0xa3, 0x66, 0x7a, 0xb3, 0xbd, 0xbb, 0xfb, 0x64, 0xb7, 0x65,
+ 0xb0, 0x0c, 0xc9, 0xc3, 0x41, 0xef, 0x68, 0xf3, 0x60, 0x7f, 0xbf, 0xbd, 0xd9, 0x6b, 0x6f, 0xb1,
+ 0xec, 0xc6, 0xfd, 0x7f, 0xf3, 0x8b, 0x3b, 0x99, 0x9f, 0xff, 0xe2, 0x4e, 0xe6, 0xbf, 0xfc, 0xe2,
+ 0x4e, 0xe6, 0xc7, 0x9f, 0xde, 0x59, 0xfa, 0xf9, 0xa7, 0x77, 0x96, 0xfe, 0xc3, 0xa7, 0x77, 0x96,
+ 0x3e, 0x61, 0xd3, 0xff, 0x50, 0xe7, 0xb8, 0x48, 0x2e, 0xc3, 0x5b, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0xff, 0xd3, 0x7d, 0x59, 0x78, 0x6b, 0x67, 0x00, 0x00,
}
func (m *SmartBlockSnapshotBase) Marshal() (dAtA []byte, err error) {
@@ -14779,16 +14770,6 @@ func (m *Notification) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x20
}
- if m.IsToast {
- i--
- if m.IsToast {
- dAtA[i] = 1
- } else {
- dAtA[i] = 0
- }
- i--
- dAtA[i] = 0x18
- }
if m.CreateTime != 0 {
i = encodeVarintModels(dAtA, i, uint64(m.CreateTime))
i--
@@ -18572,9 +18553,6 @@ func (m *Notification) Size() (n int) {
if m.CreateTime != 0 {
n += 1 + sovModels(uint64(m.CreateTime))
}
- if m.IsToast {
- n += 2
- }
if m.Status != 0 {
n += 1 + sovModels(uint64(m.Status))
}
@@ -31118,26 +31096,6 @@ func (m *Notification) Unmarshal(dAtA []byte) error {
break
}
}
- case 3:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IsToast", wireType)
- }
- var v int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowModels
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- v |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- m.IsToast = bool(v != 0)
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
diff --git a/pkg/lib/pb/model/protos/models.proto b/pkg/lib/pb/model/protos/models.proto
index d27fca58d..407078ed8 100644
--- a/pkg/lib/pb/model/protos/models.proto
+++ b/pkg/lib/pb/model/protos/models.proto
@@ -1044,7 +1044,6 @@ message Notification {
int64 createTime = 2;
Status status = 4;
bool isLocal = 5;
- bool isToast = 3; // means it should automatically hide after some time if client window is active
oneof payload {
Import import = 6;
Export export = 8;
From 6a866bee46a273cca9113b522ea9f0c3593b1b47 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Fri, 28 Mar 2025 17:44:20 +0100
Subject: [PATCH 111/132] GO-5303 do not send event if name is empty
---
core/block/editor/widget/widget.go | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/core/block/editor/widget/widget.go b/core/block/editor/widget/widget.go
index 5bae98a46..e8d003cc9 100644
--- a/core/block/editor/widget/widget.go
+++ b/core/block/editor/widget/widget.go
@@ -145,14 +145,16 @@ func (w *widget) AddAutoWidget(st *state.State, targetId, widgetBlockId, viewId
return err
}
- msg := event.NewMessage(w.SpaceID(), &pb.EventMessageValueOfSpaceAutoWidgetAdded{
- SpaceAutoWidgetAdded: &pb.EventSpaceAutoWidgetAdded{
- TargetId: targetId,
- TargetName: eventName,
- WidgetBlockId: widgetBlockId,
- },
- })
- w.SendEvent([]*pb.EventMessage{msg})
+ if eventName != "" {
+ msg := event.NewMessage(w.SpaceID(), &pb.EventMessageValueOfSpaceAutoWidgetAdded{
+ SpaceAutoWidgetAdded: &pb.EventSpaceAutoWidgetAdded{
+ TargetId: targetId,
+ TargetName: eventName,
+ WidgetBlockId: widgetBlockId,
+ },
+ })
+ w.SendEvent([]*pb.EventMessage{msg})
+ }
return nil
}
From fd3c7baf226acd7f793bfea1cc053afa5ce8d162 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Fri, 28 Mar 2025 18:02:22 +0100
Subject: [PATCH 112/132] GO-5362 add relation autoWidgetDisabled for widget
object
---
core/block/detailservice/set_details.go | 3 +++
core/block/editor/archive.go | 3 +++
core/block/editor/widget/widget.go | 4 ++++
core/block/widget.go | 3 +++
pkg/lib/bundle/relation.gen.go | 16 +++++++++++++++-
pkg/lib/bundle/relations.json | 9 +++++++++
6 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/core/block/detailservice/set_details.go b/core/block/detailservice/set_details.go
index d1b38a66f..b456b3954 100644
--- a/core/block/detailservice/set_details.go
+++ b/core/block/detailservice/set_details.go
@@ -267,6 +267,9 @@ func (s *service) createFavoriteWidget(spc clientspace.Space) error {
if err != nil {
return fmt.Errorf("get widget details: %w", err)
}
+ if widgetDetails.GetBool(bundle.RelationKeyAutoWidgetDisabled) {
+ return nil
+ }
targetIds := widgetDetails.GetStringList(bundle.RelationKeyAutoWidgetTargets)
if slices.Contains(targetIds, widget.DefaultWidgetFavorite) {
return nil
diff --git a/core/block/editor/archive.go b/core/block/editor/archive.go
index 2806d8b20..7820d402a 100644
--- a/core/block/editor/archive.go
+++ b/core/block/editor/archive.go
@@ -90,6 +90,9 @@ func (p *Archive) autoInstallBinWidget() error {
if err != nil {
return err
}
+ if widgetDetails.GetBool(bundle.RelationKeyAutoWidgetDisabled) {
+ return nil
+ }
keys := widgetDetails.Get(bundle.RelationKeyAutoWidgetTargets).StringList()
if slices.Contains(keys, widget.DefaultWidgetBin) {
// cache to avoid unnecessary objectstore requests
diff --git a/core/block/editor/widget/widget.go b/core/block/editor/widget/widget.go
index e8d003cc9..86047cc69 100644
--- a/core/block/editor/widget/widget.go
+++ b/core/block/editor/widget/widget.go
@@ -74,6 +74,10 @@ func NewWidget(sb smartblock.SmartBlock) Widget {
}
func (w *widget) AddAutoWidget(st *state.State, targetId, widgetBlockId, viewId string, layout model.BlockContentWidgetLayout, eventName string) error {
+ isDisabled := st.Details().Get(bundle.RelationKeyAutoWidgetDisabled).Bool()
+ if isDisabled {
+ return nil
+ }
targets := st.Details().Get(bundle.RelationKeyAutoWidgetTargets).StringList()
if slices.Contains(targets, targetId) {
return nil
diff --git a/core/block/widget.go b/core/block/widget.go
index 3f3e70b14..e07a28b6a 100644
--- a/core/block/widget.go
+++ b/core/block/widget.go
@@ -98,6 +98,9 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
spaceIndex := s.objectStore.SpaceIndex(space.Id())
widgetDetails, err := s.objectStore.SpaceIndex(space.Id()).GetDetails(widgetObjectId)
if err == nil {
+ if widgetDetails.GetBool(bundle.RelationKeyAutoWidgetDisabled) {
+ return nil
+ }
keys := widgetDetails.Get(bundle.RelationKeyAutoWidgetTargets).StringList()
if slices.Contains(keys, typeId) {
// widget was created before
diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go
index 999d31147..f3b0e482b 100644
--- a/pkg/lib/bundle/relation.gen.go
+++ b/pkg/lib/bundle/relation.gen.go
@@ -9,7 +9,7 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
-const RelationChecksum = "e8392d6bf8efab6b707d68bc3922e4284a18a68370828e3ec6b18e0267b84bea"
+const RelationChecksum = "6388e7cd19fabdc6953ebc6d1f2cd0208054d488b3fe538b7e013b38d7311108"
const (
RelationKeyTag domain.RelationKey = "tag"
RelationKeyCamera domain.RelationKey = "camera"
@@ -158,6 +158,7 @@ const (
RelationKeyDefaultViewType domain.RelationKey = "defaultViewType"
RelationKeyDefaultTypeId domain.RelationKey = "defaultTypeId"
RelationKeyAutoWidgetTargets domain.RelationKey = "autoWidgetTargets"
+ RelationKeyAutoWidgetDisabled domain.RelationKey = "autoWidgetDisabled"
RelationKeyPluralName domain.RelationKey = "pluralName"
)
@@ -282,6 +283,19 @@ var (
Revision: 1,
Scope: model.Relation_type,
},
+ RelationKeyAutoWidgetDisabled: {
+
+ DataSource: model.Relation_details,
+ Description: "",
+ Format: model.RelationFormat_bool,
+ Hidden: true,
+ Id: "_brautoWidgetDisabled",
+ Key: "autoWidgetDisabled",
+ Name: "Auto Widget disabled",
+ ReadOnly: false,
+ ReadOnlyRelation: true,
+ Scope: model.Relation_type,
+ },
RelationKeyAutoWidgetTargets: {
DataSource: model.Relation_details,
diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json
index 3e3bc2a44..a73c38167 100644
--- a/pkg/lib/bundle/relations.json
+++ b/pkg/lib/bundle/relations.json
@@ -1517,6 +1517,15 @@
"readonly": false,
"source": "details"
},
+ {
+ "format": "bool",
+ "hidden": true,
+ "key": "autoWidgetDisabled",
+ "maxCount": 0,
+ "name": "Auto Widget disabled",
+ "readonly": false,
+ "source": "details"
+ },
{
"description": "Name of Object type in plural form",
"format": "longtext",
From ef913f47b352ca6fc6c8026b6d8055cf72fcdde9 Mon Sep 17 00:00:00 2001
From: Mikhail
Date: Fri, 28 Mar 2025 18:19:25 +0100
Subject: [PATCH 113/132] GO-3338 remove log (#2274)
---
core/event/event_grpc.go | 2 +-
core/files/fileobject/fileindex.go | 3 +++
core/files/files.go | 7 +++++--
core/filestorage/filesync/upload.go | 1 -
go.mod | 2 --
5 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/core/event/event_grpc.go b/core/event/event_grpc.go
index 9fd445c8f..7e14b658d 100644
--- a/core/event/event_grpc.go
+++ b/core/event/event_grpc.go
@@ -75,7 +75,7 @@ func (es *GrpcSender) sendEvent(server SessionServer, event *pb.Event) {
if s, ok := status.FromError(err); ok && s.Code() == codes.Unavailable {
es.shutdownCh <- server.Token
}
- if strings.Contains(err.Error(), "rpc error: code = Unavailable desc = transport is closing") {
+ if strings.Contains(err.Error(), "transport is closing") {
log.Errorf("failed to send event: %v", err)
}
}
diff --git a/core/files/fileobject/fileindex.go b/core/files/fileobject/fileindex.go
index 4b8b5dfbc..a97690832 100644
--- a/core/files/fileobject/fileindex.go
+++ b/core/files/fileobject/fileindex.go
@@ -210,6 +210,9 @@ func logIndexLoop(err error) {
if errors.Is(err, rpcstore.ErrNoConnectionToAnyFileClient) {
return
}
+ if errors.Is(err, files.FailedProtoUnmarshallError) {
+ return
+ }
log.Errorf("index loop: %v", err)
}
diff --git a/core/files/files.go b/core/files/files.go
index d0d113926..4e72d5f02 100644
--- a/core/files/files.go
+++ b/core/files/files.go
@@ -42,7 +42,10 @@ const (
CName = "files"
)
-var log = logging.Logger("anytype-files")
+var (
+ log = logging.Logger("anytype-files")
+ FailedProtoUnmarshallError = errors.New("failed proto unmarshall")
+)
var _ Service = (*service)(nil)
@@ -306,7 +309,7 @@ func (s *service) fileInfoFromPath(ctx context.Context, spaceId string, fileId d
}
err = proto.Unmarshal(b, &file)
if err != nil || file.Hash == "" {
- return nil, fmt.Errorf("failed to unmarshal not-encrypted file info: %w", err)
+ return nil, fmt.Errorf("failed to unmarshal not-encrypted file info: %w", FailedProtoUnmarshallError)
}
}
diff --git a/core/filestorage/filesync/upload.go b/core/filestorage/filesync/upload.go
index c89fb637b..0a73c9a9c 100644
--- a/core/filestorage/filesync/upload.go
+++ b/core/filestorage/filesync/upload.go
@@ -349,7 +349,6 @@ func (s *fileSync) uploadFile(ctx context.Context, spaceID string, fileId domain
if err != nil {
log.Warn("delete limit reached error logged", zap.String("fileId", fileId.String()), zap.Error(err))
}
- log.Warn("done upload", zap.String("fileId", fileId.String()), zap.Int("bytesToUpload", blocksAvailability.bytesToUpload), zap.Int("bytesUploaded", totalBytesUploaded))
return nil
}
diff --git a/go.mod b/go.mod
index 1c5cc2ed2..90c579cb2 100644
--- a/go.mod
+++ b/go.mod
@@ -2,8 +2,6 @@ module github.com/anyproto/anytype-heart
go 1.23.2
-toolchain go1.24.1
-
require (
github.com/JohannesKaufmann/html-to-markdown v1.4.0
github.com/PuerkitoBio/goquery v1.10.2
From ff3fe5f9045f99a045230b1a85aef5fa7a15482c Mon Sep 17 00:00:00 2001
From: AnastasiaShemyakinskaya
Date: Fri, 28 Mar 2025 19:40:30 +0100
Subject: [PATCH 114/132] GO-5320: create widget after import finish
Signed-off-by: AnastasiaShemyakinskaya
---
core/block/import/common/collection.go | 98 +------------------
.../import/common/workerpool/workerpool.go | 16 ---
core/block/import/csv/converter.go | 5 +-
core/block/import/csv/converter_test.go | 48 ++++-----
core/block/import/html/converter.go | 5 +-
core/block/import/html/converter_test.go | 6 +-
core/block/import/importer.go | 30 +++++-
core/block/import/markdown/import.go | 7 +-
core/block/import/markdown/import_test.go | 19 +---
.../import/notion/api/database/database.go | 12 +--
.../notion/api/database/database_test.go | 18 ++--
core/block/import/notion/converter.go | 6 +-
core/block/import/pb/converter_test.go | 6 +-
core/block/import/pb/gallery.go | 61 +++++++++---
core/block/import/pb/gallery_test.go | 48 ++-------
core/block/import/pb/space.go | 5 +-
core/block/import/pb/space_test.go | 27 +----
core/block/import/txt/converter.go | 5 +-
core/block/import/txt/converter_test.go | 6 +-
19 files changed, 142 insertions(+), 286 deletions(-)
diff --git a/core/block/import/common/collection.go b/core/block/import/common/collection.go
index c4bd53a49..d61bf20e6 100644
--- a/core/block/import/common/collection.go
+++ b/core/block/import/common/collection.go
@@ -4,7 +4,6 @@ import (
"fmt"
"time"
- "github.com/globalsign/mgo/bson"
"github.com/google/uuid"
"github.com/anyproto/anytype-heart/core/block/collection"
@@ -18,14 +17,11 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
-const rootWidget = "rootWidget"
-
type ImportCollectionSetting struct {
collectionName string
targetObjects []string
icon string
needToAddDate, shouldBeFavorite, shouldAddRelations bool
- widgetSnapshot *Snapshot
}
type ImportCollectionOption func(*ImportCollectionSetting)
@@ -74,12 +70,6 @@ func WithRelations() ImportCollectionOption {
}
}
-func WithWidgetSnapshot(snapshot *Snapshot) ImportCollectionOption {
- return func(s *ImportCollectionSetting) {
- s.widgetSnapshot = snapshot
- }
-}
-
type ImportCollection struct {
service *collection.Service
}
@@ -88,7 +78,7 @@ func NewImportCollection(service *collection.Service) *ImportCollection {
return &ImportCollection{service: service}
}
-func (r *ImportCollection) MakeImportCollection(req *ImportCollectionSetting) (*Snapshot, *Snapshot, error) {
+func (r *ImportCollection) MakeImportCollection(req *ImportCollectionSetting) (*Snapshot, error) {
if req.needToAddDate {
importDate := time.Now().Format(time.RFC3339)
req.collectionName = fmt.Sprintf("%s %s", req.collectionName, importDate)
@@ -98,100 +88,20 @@ func (r *ImportCollection) MakeImportCollection(req *ImportCollectionSetting) (*
Value: model.InternalFlag_collectionDontIndexLinks,
}})
if err != nil {
- return nil, nil, err
+ return nil, err
}
if req.shouldAddRelations {
err = r.addRelations(st)
if err != nil {
- return nil, nil, err
+ return nil, err
}
}
detailsStruct = st.CombinedDetails().Merge(detailsStruct)
st.UpdateStoreSlice(template.CollectionStoreKey, req.targetObjects)
- rootCollectionSnapshot := r.getRootCollectionSnapshot(req.collectionName, st, detailsStruct)
- widgetSnapshot := r.makeWidgetSnapshot(req, rootCollectionSnapshot)
- return rootCollectionSnapshot, widgetSnapshot, nil
-}
-
-func (r *ImportCollection) makeWidgetSnapshot(req *ImportCollectionSetting, rootSnapshot *Snapshot) *Snapshot {
- if req.widgetSnapshot == nil {
- return r.buildNewWidgetSnapshot(rootSnapshot.Id)
- }
- return r.enhanceExistingSnapshot(req.widgetSnapshot, rootSnapshot.Id)
-}
-
-func (r *ImportCollection) buildNewWidgetSnapshot(targetID string) *Snapshot {
- linkBlock := r.createLinkBlock(targetID)
- widgetBlock := r.createWidgetBlock(linkBlock.Id)
- rootBlock := r.createSmartBlock(widgetBlock.Id)
-
- return &Snapshot{
- Id: rootBlock.Id,
- FileName: rootWidget,
- Snapshot: &SnapshotModel{
- SbType: sb.SmartBlockTypeWidget,
- Data: &StateSnapshot{
- Blocks: []*model.Block{rootBlock, widgetBlock, linkBlock},
- Details: r.defaultWidgetDetails(),
- ObjectTypes: []string{bundle.TypeKeyDashboard.String()},
- },
- },
- }
-}
-
-func (r *ImportCollection) enhanceExistingSnapshot(snapshot *Snapshot, targetID string) *Snapshot {
- linkBlock := r.createLinkBlock(targetID)
- widgetBlock := r.createWidgetBlock(linkBlock.Id)
-
- for _, block := range snapshot.Snapshot.Data.Blocks {
- if block.GetSmartblock() != nil {
- block.ChildrenIds = append(block.ChildrenIds, widgetBlock.Id)
- }
- }
-
- snapshot.Snapshot.Data.Blocks = append(snapshot.Snapshot.Data.Blocks, linkBlock, widgetBlock)
- return snapshot
-}
-
-func (r *ImportCollection) createLinkBlock(targetID string) *model.Block {
- return &model.Block{
- Id: bson.NewObjectId().Hex(),
- Content: &model.BlockContentOfLink{
- Link: &model.BlockContentLink{
- TargetBlockId: targetID,
- },
- },
- }
-}
-
-func (r *ImportCollection) createWidgetBlock(childID string) *model.Block {
- return &model.Block{
- Id: bson.NewObjectId().Hex(),
- ChildrenIds: []string{childID},
- Content: &model.BlockContentOfWidget{
- Widget: &model.BlockContentWidget{
- Layout: model.BlockContentWidget_CompactList,
- },
- },
- }
-}
-
-func (r *ImportCollection) createSmartBlock(childID string) *model.Block {
- return &model.Block{
- Id: uuid.New().String(),
- ChildrenIds: []string{childID},
- Content: &model.BlockContentOfSmartblock{Smartblock: &model.BlockContentSmartblock{}},
- }
-}
-
-func (r *ImportCollection) defaultWidgetDetails() *domain.Details {
- return domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{
- bundle.RelationKeyLayout: domain.Int64(model.ObjectType_dashboard),
- bundle.RelationKeyIsHidden: domain.Bool(true),
- })
+ return r.getRootCollectionSnapshot(req.collectionName, st, detailsStruct), nil
}
func (r *ImportCollection) getRootCollectionSnapshot(
diff --git a/core/block/import/common/workerpool/workerpool.go b/core/block/import/common/workerpool/workerpool.go
index 9eea0d891..3238acc63 100644
--- a/core/block/import/common/workerpool/workerpool.go
+++ b/core/block/import/common/workerpool/workerpool.go
@@ -13,7 +13,6 @@ type WorkerPool struct {
tasks chan ITask
results chan interface{}
quit chan struct{}
- finalizer ITask
}
func NewPool(numWorkers int) *WorkerPool {
@@ -35,10 +34,6 @@ func (p *WorkerPool) AddWork(t ITask) bool {
return false
}
-func (p *WorkerPool) SetFinalizer(t ITask) {
- p.finalizer = t
-}
-
func (p *WorkerPool) Start(data interface{}) {
wg := &sync.WaitGroup{}
for i := 0; i < p.numWorkers; i++ {
@@ -48,7 +43,6 @@ func (p *WorkerPool) Start(data interface{}) {
}(i)
}
wg.Wait()
- p.finalize(data)
p.CloseResult()
}
@@ -78,13 +72,3 @@ func (p *WorkerPool) CloseResult() {
func (p *WorkerPool) CloseTask() {
close(p.tasks)
}
-
-func (p *WorkerPool) finalize(data interface{}) {
- if p.finalizer != nil {
- select {
- case <-p.quit:
- return
- case p.results <- p.finalizer.Execute(data):
- }
- }
-}
diff --git a/core/block/import/csv/converter.go b/core/block/import/csv/converter.go
index c9f68ba08..82dfe18ed 100644
--- a/core/block/import/csv/converter.go
+++ b/core/block/import/csv/converter.go
@@ -73,7 +73,7 @@ func (c *CSV) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
common.WithAddDate(),
common.WithRelations(),
)
- rootCol, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
+ rootCol, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
if req.Mode == pb.RpcObjectImportRequest_ALL_OR_NOTHING {
@@ -85,9 +85,6 @@ func (c *CSV) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
result.snapshots = append(result.snapshots, rootCol)
rootCollectionID = rootCol.Id
}
- if widgetSnapshot != nil {
- result.snapshots = append(result.snapshots, widgetSnapshot)
- }
progress.SetTotal(int64(len(result.snapshots)))
if allErrors.IsEmpty() {
return &common.Response{Snapshots: result.snapshots, RootCollectionID: rootCollectionID}, nil
diff --git a/core/block/import/csv/converter_test.go b/core/block/import/csv/converter_test.go
index 07792616a..b5bb86307 100644
--- a/core/block/import/csv/converter_test.go
+++ b/core/block/import/csv/converter_test.go
@@ -34,7 +34,7 @@ func TestCsv_GetSnapshotsEmptyFile(t *testing.T) {
}, p)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 3) // test + root collection + root collection widget
+ assert.Len(t, sn.Snapshots, 2) // test + root collection
assert.Contains(t, sn.Snapshots[0].FileName, "test.csv")
assert.Len(t, pbtypes.GetStringList(sn.Snapshots[0].Snapshot.Data.Collections, template.CollectionStoreKey), 0)
assert.NotEmpty(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes) // empty collection
@@ -63,31 +63,21 @@ func TestCsv_GetSnapshots(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 7) // Journal.csv + root collection + 2 objects in Journal.csv + 2 relations (Created, Tags)
+ assert.Len(t, sn.Snapshots, 6) // Journal.csv + root collection + 2 objects in Journal.csv + 2 relations (Created, Tags)
assert.Contains(t, sn.Snapshots[0].FileName, "Journal.csv")
assert.Len(t, pbtypes.GetStringList(sn.Snapshots[0].Snapshot.Data.Collections, template.CollectionStoreKey), 2) // 2 objects
- var found, foundWidget bool
- var rootCollectionId string
+ var found bool
for _, snapshot := range sn.Snapshots {
if strings.Contains(snapshot.FileName, rootCollectionName) {
found = true
- rootCollectionId = snapshot.Id
assert.NotEmpty(t, snapshot.Snapshot.Data.ObjectTypes)
assert.Equal(t, snapshot.Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
assert.Len(t, pbtypes.GetStringList(snapshot.Snapshot.Data.Collections, template.CollectionStoreKey), 1) // only Journal.csv collection
}
- if snapshot.Snapshot.SbType == sb.SmartBlockTypeWidget {
- foundWidget = true
- assert.Len(t, snapshot.Snapshot.Data.Blocks, 3)
- assert.NotNil(t, snapshot.Snapshot.Data.Blocks[1].GetWidget())
- assert.NotNil(t, snapshot.Snapshot.Data.Blocks[2].GetLink())
- assert.Equal(t, rootCollectionId, snapshot.Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
- }
}
assert.True(t, found)
- assert.True(t, foundWidget)
}
func TestCsv_GetSnapshotsTable(t *testing.T) {
@@ -107,7 +97,7 @@ func TestCsv_GetSnapshotsTable(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 3) // 1 page with table + root collection + root collection widget
+ assert.Len(t, sn.Snapshots, 2) // 1 page with table + root collection
assert.Contains(t, sn.Snapshots[0].FileName, "Journal.csv")
var found bool
@@ -137,7 +127,7 @@ func TestCsv_GetSnapshotsTableUseFirstColumnForRelationsOn(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 3) // 1 page with table + root collection + root collection widget
+ assert.Len(t, sn.Snapshots, 2) // 1 page with table + root collection
assert.Contains(t, sn.Snapshots[0].FileName, "Journal.csv")
var rowsID []string
@@ -177,7 +167,7 @@ func TestCsv_GetSnapshotsSemiColon(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 17) // 8 objects + root collection + semicolon collection + 5 relations + root collection widget
+ assert.Len(t, sn.Snapshots, 16) // 8 objects + root collection + semicolon collection + 5 relations
assert.Contains(t, sn.Snapshots[0].FileName, "semicolon.csv")
assert.Len(t, pbtypes.GetStringList(sn.Snapshots[0].Snapshot.Data.Collections, template.CollectionStoreKey), 8)
assert.Equal(t, sn.Snapshots[0].Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
@@ -202,7 +192,7 @@ func TestCsv_GetSnapshotsTranspose(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 5) // 2 object + root collection + transpose collection + 1 relations + root collection widget
+ assert.Len(t, sn.Snapshots, 4) // 2 object + root collection + transpose collection + 1 relations
for _, snapshot := range sn.Snapshots {
if snapshot.Snapshot.SbType == sb.SmartBlockTypeRelation {
@@ -246,7 +236,7 @@ func TestCsv_GetSnapshotsTranspose(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 5)
+ assert.Len(t, sn.Snapshots, 4)
for _, snapshot := range sn.Snapshots {
if snapshot.Snapshot.SbType == sb.SmartBlockTypeRelation {
@@ -275,7 +265,7 @@ func TestCsv_GetSnapshotsTransposeUseFirstRowForRelationsOff(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 6) // 2 object + root collection + transpose collection + 1 relations + root collection widget
+ assert.Len(t, sn.Snapshots, 5) // 2 object + root collection + transpose collection + 1 relations
for _, snapshot := range sn.Snapshots {
if snapshot.Snapshot.SbType == sb.SmartBlockTypeRelation {
@@ -302,7 +292,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOn(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 7) // Journal.csv collection, root collection + 2 objects in Journal.csv + 2 relations (Created, Tags) + root collection widget
+ assert.Len(t, sn.Snapshots, 6) // Journal.csv collection, root collection + 2 objects in Journal.csv + 2 relations (Created, Tags)
var rowsObjects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
@@ -313,7 +303,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOn(t *testing.T) {
}
}
- assert.Len(t, rowsObjects, 3)
+ assert.Len(t, rowsObjects, 2)
want := [][]string{
{"Hawaii Vacation", "July 13, 2022 8:54 AM", "Special Event"},
@@ -348,7 +338,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOff(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 8) // Journal.csv collection, root collection + 3 objects in Journal.csv + 2 relations (Created, Tags) + root collection widget
+ assert.Len(t, sn.Snapshots, 7) // Journal.csv collection, root collection + 3 objects in Journal.csv + 2 relations (Created, Tags)
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
@@ -359,7 +349,7 @@ func TestCsv_GetSnapshotsUseFirstColumnForRelationsOff(t *testing.T) {
}
}
- assert.Len(t, objects, 4) // first row is also an object
+ assert.Len(t, objects, 3) // first row is also an object
want := [][]string{
{"Name", "Created", "Tags"},
@@ -524,7 +514,7 @@ func TestCsv_GetSnapshots1000RowsFile(t *testing.T) {
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -550,7 +540,7 @@ func TestCsv_GetSnapshots1000RowsFile(t *testing.T) {
objects = []*common.Snapshot{}
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -673,7 +663,7 @@ func TestCsv_GetSnapshots10Relations(t *testing.T) {
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -704,7 +694,7 @@ func TestCsv_GetSnapshots10Relations(t *testing.T) {
objects = []*common.Snapshot{}
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
@@ -748,7 +738,7 @@ func TestCsv_GetSnapshotsTableModeDifferentColumnsNumber(t *testing.T) {
objects = append(objects, snapshot)
}
}
- assert.Len(t, objects, 2)
+ assert.Len(t, objects, 1)
assert.Equal(t, objects[0].Snapshot.Data.Details.GetString(bundle.RelationKeyName), "differentcolumnnumber")
numberOfCSVColumns := lo.CountBy(objects[0].Snapshot.Data.Blocks, func(item *model.Block) bool { return item.GetTableColumn() != nil })
assert.Equal(t, 5, numberOfCSVColumns)
@@ -781,7 +771,7 @@ func TestCsv_GetSnapshotsTableModeDifferentColumnsNumber(t *testing.T) {
var objects []*common.Snapshot
for _, snapshot := range sn.Snapshots {
// only objects created from rows
- if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation && snapshot.Snapshot.SbType != sb.SmartBlockTypeWidget &&
+ if snapshot.Snapshot.SbType != sb.SmartBlockTypeRelation &&
!lo.Contains(snapshot.Snapshot.Data.ObjectTypes, bundle.TypeKeyCollection.String()) {
objects = append(objects, snapshot)
}
diff --git a/core/block/import/html/converter.go b/core/block/import/html/converter.go
index 846d8bf7c..f40f26c2f 100644
--- a/core/block/import/html/converter.go
+++ b/core/block/import/html/converter.go
@@ -72,7 +72,7 @@ func (h *HTML) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
common.WithAddDate(),
common.WithRelations(),
)
- rootCollectionSnapshot, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
+ rootCollectionSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
if allErrors.ShouldAbortImport(len(path), req.Type) {
@@ -84,9 +84,6 @@ func (h *HTML) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
snapshots = append(snapshots, rootCollectionSnapshot)
rootCollectionID = rootCollectionSnapshot.Id
}
- if widgetSnapshot != nil {
- snapshots = append(snapshots, widgetSnapshot)
- }
progress.SetTotal(int64(numberOfStages * len(snapshots)))
if allErrors.IsEmpty() {
return &common.Response{Snapshots: snapshots, RootCollectionID: rootCollectionID}, nil
diff --git a/core/block/import/html/converter_test.go b/core/block/import/html/converter_test.go
index ad560993e..3198db518 100644
--- a/core/block/import/html/converter_test.go
+++ b/core/block/import/html/converter_test.go
@@ -44,7 +44,7 @@ func TestHTML_GetSnapshots(t *testing.T) {
)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 3)
+ assert.Len(t, sn.Snapshots, 2)
assert.Contains(t, sn.Snapshots[0].FileName, "test.html")
assert.NotEmpty(t, sn.Snapshots[0].Snapshot.Data.Details.GetString("name"))
assert.Equal(t, sn.Snapshots[0].Snapshot.Data.Details.GetString("name"), "test")
@@ -53,10 +53,6 @@ func TestHTML_GetSnapshots(t *testing.T) {
assert.NotEmpty(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes)
assert.Equal(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
- assert.Len(t, sn.Snapshots[2].Snapshot.Data.Blocks, 3)
- assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[1].GetWidget())
- assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink())
- assert.Equal(t, sn.Snapshots[1].Id, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
assert.NotEmpty(t, err)
assert.True(t, errors.Is(err.GetResultError(model.Import_Html), common.ErrFileImportNoObjectsInDirectory))
})
diff --git a/core/block/import/importer.go b/core/block/import/importer.go
index 3ae7874ad..b131de4f1 100644
--- a/core/block/import/importer.go
+++ b/core/block/import/importer.go
@@ -42,7 +42,6 @@ import (
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/core"
- "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/filestore"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore"
@@ -71,6 +70,7 @@ type Import struct {
importCtx context.Context
importCtxCancel context.CancelFunc
+ spaceService space.Service
}
func New() Importer {
@@ -83,6 +83,7 @@ func (i *Import) Init(a *app.App) (err error) {
i.s = app.MustComponent[*block.Service](a)
accountService := app.MustComponent[account.Service](a)
spaceService := app.MustComponent[space.Service](a)
+ i.spaceService = spaceService
col := app.MustComponent[*collection.Service](a)
i.tempDirProvider = app.MustComponent[core.TempDirProvider](a)
converters := []common.Converter{
@@ -181,10 +182,33 @@ func (i *Import) importObjects(ctx context.Context, importRequest *ImportRequest
func (i *Import) onImportFinish(res *ImportResponse, req *ImportRequest, importId string) {
i.finishImportProcess(res.Err, req)
i.sendFileEvents(res.Err)
+ if res.RootCollectionId != "" {
+ i.addRootCollectionWidget(res, req)
+ }
i.recordEvent(&metrics.ImportFinishedEvent{ID: importId, ImportType: req.Type.String()})
i.sendImportFinishEventToClient(res.RootCollectionId, req.IsSync, res.ObjectsCount, req.Type)
}
+func (i *Import) addRootCollectionWidget(res *ImportResponse, req *ImportRequest) {
+ spc, err := i.spaceService.Get(i.importCtx, req.SpaceId)
+ if err != nil {
+ log.Errorf("failed to create widget from root collection, error: %s", err.Error())
+ } else {
+ _, err = i.s.CreateWidgetBlock(nil, &pb.RpcBlockCreateWidgetRequest{
+ ContextId: spc.DerivedIDs().Widgets,
+ WidgetLayout: model.BlockContentWidget_CompactList,
+ Block: &model.Block{
+ Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{
+ TargetBlockId: res.RootCollectionId,
+ }},
+ },
+ })
+ if err != nil {
+ log.Errorf("failed to create widget from root collection, error: %s", err.Error())
+ }
+ }
+}
+
func (i *Import) sendFileEvents(returnedErr error) {
if returnedErr == nil {
i.fileSync.SendImportEvents()
@@ -493,10 +517,6 @@ func (i *Import) extractInternalKey(snapshot *common.Snapshot, oldIDToNew map[st
func (i *Import) addWork(res *common.Response, pool *workerpool.WorkerPool) {
for _, snapshot := range res.Snapshots {
t := creator.NewTask(snapshot, i.oc)
- if snapshot.Snapshot.SbType == smartblock.SmartBlockTypeWidget {
- pool.SetFinalizer(t)
- continue
- }
stop := pool.AddWork(t)
if stop {
break
diff --git a/core/block/import/markdown/import.go b/core/block/import/markdown/import.go
index 0ccb27eb4..71b7e411e 100644
--- a/core/block/import/markdown/import.go
+++ b/core/block/import/markdown/import.go
@@ -108,7 +108,7 @@ func (m *Markdown) createRootCollection(allSnapshots []*common.Snapshot, allRoot
common.WithAddDate(),
common.WithRelations(),
)
- rootCol, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
+ rootCol, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, "", err
}
@@ -118,9 +118,6 @@ func (m *Markdown) createRootCollection(allSnapshots []*common.Snapshot, allRoot
allSnapshots = append(allSnapshots, rootCol)
rootCollectionID = rootCol.Id
}
- if widgetSnapshot != nil {
- allSnapshots = append(allSnapshots, widgetSnapshot)
- }
return allSnapshots, rootCollectionID, nil
}
@@ -436,7 +433,7 @@ func (m *Markdown) addCollectionSnapshot(fileName string, file *FileInfo, snapsh
common.WithCollectionName(file.Title),
common.WithTargetObjects(file.CollectionsObjectsIds),
)
- csvCollection, _, err := c.MakeImportCollection(settings)
+ csvCollection, err := c.MakeImportCollection(settings)
if err != nil {
return nil, err
}
diff --git a/core/block/import/markdown/import_test.go b/core/block/import/markdown/import_test.go
index 386273b56..9cafe0409 100644
--- a/core/block/import/markdown/import_test.go
+++ b/core/block/import/markdown/import_test.go
@@ -14,7 +14,6 @@ import (
"github.com/anyproto/anytype-heart/core/block/import/common/test"
"github.com/anyproto/anytype-heart/core/block/process"
"github.com/anyproto/anytype-heart/pb"
- "github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/tests/blockbuilder"
)
@@ -38,10 +37,10 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 4)
+ assert.Len(t, sn.Snapshots, 3)
var (
- found, foundWidget bool
- subPageId string
+ found bool
+ subPageId string
)
for _, snapshot := range sn.Snapshots {
if snapshot.FileName == filepath.Join(testDirectory, "test_database", "test.md") {
@@ -55,18 +54,10 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
assert.NotEmpty(t, snapshot.Snapshot.Data.Collections.Fields["objects"])
assert.Len(t, snapshot.Snapshot.Data.Collections.Fields["objects"].GetListValue().GetValues(), 1)
assert.Equal(t, subPageId, snapshot.Snapshot.Data.Collections.Fields["objects"].GetListValue().GetValues()[0].GetStringValue())
- }
- if snapshot.Snapshot.SbType == smartblock.SmartBlockTypeWidget {
- foundWidget = true
- assert.Len(t, snapshot.Snapshot.Data.Blocks, 3)
- assert.NotNil(t, snapshot.Snapshot.Data.Blocks[1].GetWidget())
- assert.NotNil(t, snapshot.Snapshot.Data.Blocks[2].GetLink())
- assert.NotEmpty(t, snapshot.Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
break
}
}
assert.True(t, found)
- assert.True(t, foundWidget)
})
t.Run("no object error", func(t *testing.T) {
// given
@@ -107,7 +98,7 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 8)
+ assert.Len(t, sn.Snapshots, 7)
fileNameToObjectId := make(map[string]string, len(sn.Snapshots))
for _, snapshot := range sn.Snapshots {
@@ -188,7 +179,7 @@ func TestMarkdown_GetSnapshots(t *testing.T) {
// then
assert.Nil(t, ce)
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 5)
+ assert.Len(t, sn.Snapshots, 4)
fileNameToObjectId := make(map[string]string, len(sn.Snapshots))
for _, snapshot := range sn.Snapshots {
fileNameToObjectId[snapshot.FileName] = snapshot.Id
diff --git a/core/block/import/notion/api/database/database.go b/core/block/import/notion/api/database/database.go
index 0acf026bf..264242387 100644
--- a/core/block/import/notion/api/database/database.go
+++ b/core/block/import/notion/api/database/database.go
@@ -345,11 +345,9 @@ func (ds *Service) AddPagesToCollections(databaseSnapshots []*common.Snapshot, p
}
}
-func (ds *Service) AddObjectsToNotionCollection(
- notionContext *api.NotionImportContext,
+func (ds *Service) AddObjectsToNotionCollection(notionContext *api.NotionImportContext,
notionDB []Database,
- notionPages []page.Page,
-) (*common.Snapshot, *common.Snapshot, error) {
+ notionPages []page.Page) (*common.Snapshot, error) {
allObjects := ds.filterObjects(notionContext, notionDB, notionPages)
rootCollection := common.NewImportCollection(ds.collectionService)
@@ -359,11 +357,11 @@ func (ds *Service) AddObjectsToNotionCollection(
common.WithAddDate(),
common.WithRelations(),
)
- rootCol, widget, err := rootCollection.MakeImportCollection(settings)
+ rootCol, err := rootCollection.MakeImportCollection(settings)
if err != nil {
- return nil, nil, err
+ return nil, err
}
- return rootCol, widget, nil
+ return rootCol, nil
}
func (ds *Service) filterObjects(notionContext *api.NotionImportContext,
diff --git a/core/block/import/notion/api/database/database_test.go b/core/block/import/notion/api/database/database_test.go
index ead10e9dd..53090238c 100644
--- a/core/block/import/notion/api/database/database_test.go
+++ b/core/block/import/notion/api/database/database_test.go
@@ -41,7 +41,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -83,7 +83,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -119,7 +119,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -166,7 +166,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
// then
assert.Nil(t, err)
@@ -205,7 +205,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
// then
assert.Nil(t, err)
@@ -251,7 +251,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, notionPages)
// then
assert.Nil(t, err)
@@ -287,7 +287,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, nil)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, notionDB, nil)
// then
assert.Nil(t, err)
@@ -329,7 +329,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
@@ -368,7 +368,7 @@ func TestService_AddObjectsToNotionCollection(t *testing.T) {
}
// when
- collection, _, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
+ collection, err := service.AddObjectsToNotionCollection(notionImportContext, nil, notionPages)
// then
assert.Nil(t, err)
diff --git a/core/block/import/notion/converter.go b/core/block/import/notion/converter.go
index ae58034ba..f16ecf1d9 100644
--- a/core/block/import/notion/converter.go
+++ b/core/block/import/notion/converter.go
@@ -116,7 +116,7 @@ func (n *Notion) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportReques
n.dbService.AddPagesToCollections(dbs, pages, db, notionImportContext.NotionPageIdsToAnytype, notionImportContext.NotionDatabaseIdsToAnytype)
- rootCollectionSnapshot, widgetSnapshot, err := n.dbService.AddObjectsToNotionCollection(notionImportContext, db, pages)
+ rootCollectionSnapshot, err := n.dbService.AddObjectsToNotionCollection(notionImportContext, db, pages)
if err != nil {
ce.Add(err)
if ce.ShouldAbortImport(0, req.Type) {
@@ -132,10 +132,6 @@ func (n *Notion) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportReques
allSnapshots = append(allSnapshots, pgs...)
allSnapshots = append(allSnapshots, dbs...)
- if widgetSnapshot != nil {
- allSnapshots = append(allSnapshots, widgetSnapshot)
- }
-
if !ce.IsEmpty() {
return &common.Response{Snapshots: allSnapshots, RootCollectionID: rootCollectionID}, ce
}
diff --git a/core/block/import/pb/converter_test.go b/core/block/import/pb/converter_test.go
index d9b8c62c2..59040cbc3 100644
--- a/core/block/import/pb/converter_test.go
+++ b/core/block/import/pb/converter_test.go
@@ -50,7 +50,7 @@ func Test_GetSnapshotsSuccess(t *testing.T) {
}, process.NewNoOp())
assert.Nil(t, ce)
- assert.Len(t, res.Snapshots, 3)
+ assert.Len(t, res.Snapshots, 2)
assert.Contains(t, res.Snapshots[1].FileName, rootCollectionName)
assert.NotEmpty(t, res.Snapshots[1].Snapshot.Data.ObjectTypes)
@@ -159,7 +159,7 @@ func Test_GetSnapshotsFailedToGetSnapshotForTwoFiles(t *testing.T) {
assert.NotNil(t, ce)
assert.NotNil(t, res.Snapshots)
- assert.Len(t, res.Snapshots, 3)
+ assert.Len(t, res.Snapshots, 2)
assert.False(t, ce.IsEmpty())
}
@@ -215,7 +215,7 @@ func Test_GetSnapshotsSkipFileWithoutExtension(t *testing.T) {
assert.Nil(t, ce)
assert.NotNil(t, res.Snapshots)
- assert.Len(t, res.Snapshots, 3)
+ assert.Len(t, res.Snapshots, 2)
assert.Equal(t, res.Snapshots[0].FileName, "bafyreig5sd7mlmhindapjuvzc4gnetdbszztb755sa7nflojkljmu56mmi.pb")
assert.Contains(t, res.Snapshots[1].FileName, rootCollectionName)
diff --git a/core/block/import/pb/gallery.go b/core/block/import/pb/gallery.go
index 17f4a5e72..e82fe3bf2 100644
--- a/core/block/import/pb/gallery.go
+++ b/core/block/import/pb/gallery.go
@@ -1,6 +1,8 @@
package pb
import (
+ "github.com/globalsign/mgo/bson"
+
"github.com/anyproto/anytype-heart/core/block/collection"
"github.com/anyproto/anytype-heart/core/block/editor/state"
widgets "github.com/anyproto/anytype-heart/core/block/editor/widget"
@@ -10,6 +12,7 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/core/smartblock"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
+ "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
const widgetCollectionPattern = "'s Widgets"
@@ -28,7 +31,7 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
params *pb.RpcObjectImportRequestPbParams,
workspaceSnapshot *common.Snapshot,
isNewSpace bool,
-) (resultSnapshots []*common.Snapshot, err error) {
+) (collectionsSnapshots []*common.Snapshot, err error) {
if isNewSpace {
return nil, nil
}
@@ -36,10 +39,7 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
if widget != nil {
widgetObjects = g.getObjectsFromWidgets(widget)
}
- var (
- icon string
- widgetSnapshot *common.Snapshot
- )
+ var icon string
if workspaceSnapshot != nil { // we use space icon for import collection
icon = workspaceSnapshot.Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage)
}
@@ -49,7 +49,7 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
}
rootCollection := common.NewImportCollection(g.service)
if len(widgetObjects) > 0 {
- resultSnapshots, widgetSnapshot, err = g.getWidgetsCollection(collectionName, rootCollection, widgetObjects, icon, resultSnapshots)
+ collectionsSnapshots, err = g.getWidgetsCollection(collectionName, rootCollection, widgetObjects, icon, widget, collectionsSnapshots)
if err != nil {
return nil, err
}
@@ -60,17 +60,22 @@ func (g *GalleryImport) ProvideCollection(snapshots []*common.Snapshot,
common.WithTargetObjects(objectsIDs),
common.WithIcon(icon),
common.WithRelations(),
- common.WithWidgetSnapshot(widgetSnapshot),
)
- objectsCollection, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
+ objectsCollection, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, err
}
- resultSnapshots = append(resultSnapshots, objectsCollection, widgetSnapshot)
- return resultSnapshots, nil
+ collectionsSnapshots = append(collectionsSnapshots, objectsCollection)
+ return collectionsSnapshots, err
}
-func (g *GalleryImport) getWidgetsCollection(collectionName string, rootCollection *common.ImportCollection, widgetObjects []string, icon string, collectionsSnapshots []*common.Snapshot) ([]*common.Snapshot, *common.Snapshot, error) {
+func (g *GalleryImport) getWidgetsCollection(collectionName string,
+ rootCollection *common.ImportCollection,
+ widgetObjects []string,
+ icon string,
+ widget *common.Snapshot,
+ collectionsSnapshots []*common.Snapshot,
+) ([]*common.Snapshot, error) {
widgetCollectionName := collectionName + widgetCollectionPattern
settings := common.NewImportCollectionSetting(
common.WithCollectionName(widgetCollectionName),
@@ -78,14 +83,17 @@ func (g *GalleryImport) getWidgetsCollection(collectionName string, rootCollecti
common.WithIcon(icon),
common.WithRelations(),
)
- widgetsCollectionSnapshot, widget, err := rootCollection.MakeImportCollection(settings)
+ widgetsCollectionSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
- return nil, nil, err
+ return nil, err
+ }
+ if widgetsCollectionSnapshot != nil && widget != nil {
+ g.addCollectionWidget(widget, widgetsCollectionSnapshot.Id)
}
if widgetsCollectionSnapshot != nil {
collectionsSnapshots = append(collectionsSnapshots, widgetsCollectionSnapshot)
}
- return collectionsSnapshots, widget, nil
+ return collectionsSnapshots, nil
}
func (g *GalleryImport) getObjectsFromWidgets(widgetSnapshot *common.Snapshot) []string {
@@ -109,6 +117,31 @@ func (g *GalleryImport) getObjectsFromWidgets(widgetSnapshot *common.Snapshot) [
return objectsInWidget
}
+func (g *GalleryImport) addCollectionWidget(widgetSnapshot *common.Snapshot, collectionID string) {
+ id := bson.NewObjectId().Hex()
+ // create widget for import collection
+ linkBlock := &model.Block{
+ Id: id,
+ Content: &model.BlockContentOfLink{
+ Link: &model.BlockContentLink{
+ TargetBlockId: collectionID,
+ },
+ },
+ }
+ widgetID := bson.NewObjectId().Hex()
+ widgetBlock := &model.Block{
+ Id: widgetID,
+ ChildrenIds: []string{id},
+ Content: &model.BlockContentOfWidget{Widget: &model.BlockContentWidget{
+ Layout: model.BlockContentWidget_CompactList,
+ Limit: 0,
+ ViewId: "",
+ }},
+ }
+ // for widget object we only add import collection, other widgets should be erased
+ widgetSnapshot.Snapshot.Data.Blocks = []*model.Block{widgetBlock, linkBlock}
+}
+
func (g *GalleryImport) getObjectsIDs(snapshots []*common.Snapshot) []string {
var resultIDs []string
for _, snapshot := range snapshots {
diff --git a/core/block/import/pb/gallery_test.go b/core/block/import/pb/gallery_test.go
index 57835df8e..140390ca6 100644
--- a/core/block/import/pb/gallery_test.go
+++ b/core/block/import/pb/gallery_test.go
@@ -28,7 +28,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
t.Run("CollectionTitle parameter is empty - collection with default name", func(t *testing.T) {
@@ -41,7 +41,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.Equal(t, rootCollectionName, collection[0].FileName)
})
t.Run("CollectionTitle parameter is equal 'test' - collection with name test", func(t *testing.T) {
@@ -54,7 +54,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.Equal(t, "test", collection[0].FileName)
})
t.Run("widget with sets - only objects root collection as we ignore default sets and not create widgets collection", func(t *testing.T) {
@@ -135,7 +135,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
t.Run("default sets and objects in widget - root collection with objects from widget and object root collection are created", func(t *testing.T) {
@@ -206,7 +206,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 3)
+ assert.Len(t, collection, 2)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 1)
@@ -241,7 +241,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
@@ -255,7 +255,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.Empty(t, collection[0].Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage))
})
t.Run("workspace without icon - root collection without icon", func(t *testing.T) {
@@ -278,7 +278,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.Empty(t, collection[0].Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage))
})
t.Run("workspace with icon - root collection with icon", func(t *testing.T) {
@@ -303,7 +303,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.Equal(t, "icon", collection[0].Snapshot.Data.Details.GetString(bundle.RelationKeyIconImage))
})
t.Run("if import in new space - not create anything", func(t *testing.T) {
@@ -349,35 +349,7 @@ func TestGalleryImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
assert.NotContains(t, widgetCollectionPattern, collection[0].FileName)
})
- t.Run("widget with collection", func(t *testing.T) {
- // given
- p := GalleryImport{}
- params := &pb.RpcObjectImportRequestPbParams{NoCollection: false}
-
- // object with widget
- widgetSnapshot := &common.Snapshot{
- Id: "widgetID",
- Snapshot: &common.SnapshotModel{
- SbType: smartblock.SmartBlockTypeWidget,
- Data: &common.StateSnapshot{
- Blocks: []*model.Block{},
- },
- },
- }
-
- // when
- collection, err := p.ProvideCollection(nil, widgetSnapshot, nil, params, nil, false)
-
- // then
- assert.Nil(t, err)
- assert.Len(t, collection, 2)
- assert.Equal(t, smartblock.SmartBlockTypeWidget, collection[1].Snapshot.SbType)
- assert.Len(t, collection[1].Snapshot.Data.Blocks, 3)
- assert.NotNil(t, collection[1].Snapshot.Data.Blocks[1].GetWidget())
- assert.NotNil(t, collection[1].Snapshot.Data.Blocks[2].GetLink())
- assert.Equal(t, collection[0].Id, collection[1].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
- })
}
diff --git a/core/block/import/pb/space.go b/core/block/import/pb/space.go
index b62d7edc9..6a967e62a 100644
--- a/core/block/import/pb/space.go
+++ b/core/block/import/pb/space.go
@@ -61,13 +61,12 @@ func (s *SpaceImport) ProvideCollection(snapshots []*common.Snapshot,
common.WithTargetObjects(rootObjects),
common.WithRelations(),
common.WithAddDate(),
- common.WithWidgetSnapshot(widgetSnapshot),
)
- rootCollectionSnapshot, widgetSnapshot, err := rootCollection.MakeImportCollection(settings)
+ rootCollectionSnapshot, err := rootCollection.MakeImportCollection(settings)
if err != nil {
return nil, err
}
- return []*common.Snapshot{rootCollectionSnapshot, widgetSnapshot}, nil
+ return []*common.Snapshot{rootCollectionSnapshot}, nil
}
func (s *SpaceImport) objectShouldBeSkipped(item *common.Snapshot) bool {
diff --git a/core/block/import/pb/space_test.go b/core/block/import/pb/space_test.go
index f12b561ae..119fa6cbe 100644
--- a/core/block/import/pb/space_test.go
+++ b/core/block/import/pb/space_test.go
@@ -27,7 +27,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 0)
@@ -82,7 +82,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 3)
@@ -172,7 +172,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 1)
@@ -261,7 +261,7 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Len(t, objectsInCollection, 1)
@@ -365,26 +365,9 @@ func TestSpaceImport_ProvideCollection(t *testing.T) {
// then
assert.Nil(t, err)
assert.NotNil(t, collection)
- assert.Len(t, collection, 2)
+ assert.Len(t, collection, 1)
rootCollectionState := state.NewDocFromSnapshot("", collection[0].Snapshot.ToProto()).(*state.State)
objectsInCollection := rootCollectionState.GetStoreSlice(template.CollectionStoreKey)
assert.Equal(t, []string{"newObjectInWidget", "id1", "spaceDashboardId"}, objectsInCollection)
})
- t.Run("widget with collection", func(t *testing.T) {
- // given
- p := SpaceImport{}
- params := &pb.RpcObjectImportRequestPbParams{NoCollection: false}
-
- // when
- collection, err := p.ProvideCollection(nil, nil, nil, params, nil, false)
-
- // then
- assert.Nil(t, err)
- assert.Len(t, collection, 2)
- assert.Equal(t, smartblock2.SmartBlockTypeWidget, collection[1].Snapshot.SbType)
- assert.Len(t, collection[1].Snapshot.Data.Blocks, 3)
- assert.NotNil(t, collection[1].Snapshot.Data.Blocks[1].GetWidget())
- assert.NotNil(t, collection[1].Snapshot.Data.Blocks[2].GetLink())
- assert.Equal(t, collection[0].Id, collection[1].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
- })
}
diff --git a/core/block/import/txt/converter.go b/core/block/import/txt/converter.go
index 07c16dc71..2282c2c4b 100644
--- a/core/block/import/txt/converter.go
+++ b/core/block/import/txt/converter.go
@@ -62,7 +62,7 @@ func (t *TXT) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
common.WithRelations(),
common.WithAddDate(),
)
- rootCol, widget, err := rootCollection.MakeImportCollection(settings)
+ rootCol, err := rootCollection.MakeImportCollection(settings)
if err != nil {
allErrors.Add(err)
if allErrors.ShouldAbortImport(len(paths), req.Type) {
@@ -74,9 +74,6 @@ func (t *TXT) GetSnapshots(ctx context.Context, req *pb.RpcObjectImportRequest,
snapshots = append(snapshots, rootCol)
rootCollectionID = rootCol.Id
}
- if widget != nil {
- snapshots = append(snapshots, widget)
- }
progress.SetTotal(int64(numberOfStages * len(snapshots)))
if allErrors.IsEmpty() {
return &common.Response{Snapshots: snapshots, RootCollectionID: rootCollectionID}, nil
diff --git a/core/block/import/txt/converter_test.go b/core/block/import/txt/converter_test.go
index 4929647e6..10deca90e 100644
--- a/core/block/import/txt/converter_test.go
+++ b/core/block/import/txt/converter_test.go
@@ -31,7 +31,7 @@ func TestTXT_GetSnapshots(t *testing.T) {
assert.NotNil(t, err)
assert.True(t, errors.Is(err.GetResultError(model.Import_Txt), common.ErrFileImportNoObjectsInDirectory))
assert.NotNil(t, sn)
- assert.Len(t, sn.Snapshots, 3)
+ assert.Len(t, sn.Snapshots, 2)
assert.Contains(t, sn.Snapshots[0].FileName, "test.txt")
assert.Equal(t, sn.Snapshots[0].Snapshot.Data.Details.GetString("name"), "test")
@@ -39,10 +39,6 @@ func TestTXT_GetSnapshots(t *testing.T) {
assert.NotEmpty(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes)
assert.Equal(t, sn.Snapshots[1].Snapshot.Data.ObjectTypes[0], bundle.TypeKeyCollection.String())
- assert.Len(t, sn.Snapshots[2].Snapshot.Data.Blocks, 3)
- assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[1].GetWidget())
- assert.NotNil(t, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink())
- assert.Equal(t, sn.Snapshots[1].Id, sn.Snapshots[2].Snapshot.Data.Blocks[2].GetLink().GetTargetBlockId())
var (
found bool
text string
From 48498427cb0eabaea5b8431fe2afaaaa4aa441fb Mon Sep 17 00:00:00 2001
From: Anastasia Shemyakinskaya
<36507473+anastasiashemyakinskaya@users.noreply.github.com>
Date: Mon, 31 Mar 2025 11:09:59 +0200
Subject: [PATCH 115/132] GO-5365: return joinSpace param
Signed-off-by: AnastasiaShemyakinskaya
---
core/publish.go | 2 +-
core/publish/service.go | 49 +-
core/publish/service_test.go | 29 +-
docs/proto.md | 2 +-
pb/commands.pb.go | 2713 +++++++++++++++++-----------------
pb/protos/commands.proto | 2 +-
6 files changed, 1401 insertions(+), 1396 deletions(-)
diff --git a/core/publish.go b/core/publish.go
index 97184d531..e5863df81 100644
--- a/core/publish.go
+++ b/core/publish.go
@@ -9,7 +9,7 @@ import (
func (mw *Middleware) PublishingCreate(ctx context.Context, req *pb.RpcPublishingCreateRequest) *pb.RpcPublishingCreateResponse {
publishService := mustService[publish.Service](mw)
- res, err := publishService.Publish(ctx, req.SpaceId, req.ObjectId, req.Uri, req.IncludeSpaceInfo)
+ res, err := publishService.Publish(ctx, req.SpaceId, req.ObjectId, req.Uri, req.JoinSpace)
code := mapErrorCode(err,
errToCode(nil, pb.RpcPublishingCreateResponseError_NULL),
errToCode(publish.ErrLimitExceeded, pb.RpcPublishingCreateResponseError_LIMIT_EXCEEDED),
diff --git a/core/publish/service.go b/core/publish/service.go
index 25f03bfff..2b2d1c441 100644
--- a/core/publish/service.go
+++ b/core/publish/service.go
@@ -154,8 +154,13 @@ func (s *service) exportToDir(ctx context.Context, spaceId, pageId string, inclu
return
}
-func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, uri, globalName string, includeSpaceInfo bool) (err error) {
- dirEntries, exportPath, err := s.exportToDir(ctx, spaceId, pageId, includeSpaceInfo)
+func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, uri, globalName string, joinSpace bool) (err error) {
+ spc, err := s.spaceService.Get(ctx, spaceId)
+ if err != nil {
+ return err
+ }
+ includeInviteLinkAndSpaceInfo := joinSpace && !spc.IsPersonal()
+ dirEntries, exportPath, err := s.exportToDir(ctx, spaceId, pageId, includeInviteLinkAndSpaceInfo)
if err != nil {
return err
}
@@ -177,12 +182,7 @@ func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, u
return err
}
- spc, err := s.spaceService.Get(ctx, spaceId)
- if err != nil {
- return err
- }
-
- err = s.applyInviteLink(ctx, spc, &uberSnapshot, includeSpaceInfo)
+ err = s.applyInviteLink(ctx, spaceId, &uberSnapshot, includeInviteLinkAndSpaceInfo)
if err != nil {
return err
}
@@ -190,7 +190,7 @@ func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, u
return err
}
- version, err := s.evaluateDocumentVersion(ctx, spc, pageId, includeSpaceInfo)
+ version, err := s.evaluateDocumentVersion(ctx, spc, pageId, joinSpace)
if err != nil {
return err
}
@@ -210,12 +210,18 @@ func (s *service) publishToPublishServer(ctx context.Context, spaceId, pageId, u
return nil
}
-func (s *service) applyInviteLink(ctx context.Context, spc clientspace.Space, snapshot *PublishingUberSnapshot, includeSpaceInfo bool) error {
- inviteLink, err := s.extractInviteLink(ctx, spc.Id(), includeSpaceInfo, spc.IsPersonal())
+func (s *service) applyInviteLink(ctx context.Context, spaceId string, snapshot *PublishingUberSnapshot, includeInviteLink bool) error {
+ if !includeInviteLink {
+ return nil
+ }
+ inviteInfo, err := s.inviteService.GetCurrent(ctx, spaceId)
+ if err != nil && errors.Is(err, inviteservice.ErrInviteNotExists) {
+ return nil
+ }
if err != nil {
return err
}
- snapshot.Meta.InviteLink = inviteLink
+ snapshot.Meta.InviteLink = fmt.Sprintf(inviteLinkUrlTemplate, inviteInfo.InviteFileCid, inviteInfo.InviteFileKey)
return nil
}
@@ -366,21 +372,6 @@ func (s *service) publishToServer(ctx context.Context, spaceId, pageId, uri, ver
return nil
}
-func (s *service) extractInviteLink(ctx context.Context, spaceId string, joinSpace, isPersonal bool) (string, error) {
- var inviteLink string
- if joinSpace && !isPersonal {
- inviteInfo, err := s.inviteService.GetCurrent(ctx, spaceId)
- if err != nil && errors.Is(err, inviteservice.ErrInviteNotExists) {
- return "", nil
- }
- if err != nil {
- return "", err
- }
- inviteLink = fmt.Sprintf(inviteLinkUrlTemplate, inviteInfo.InviteFileCid, inviteInfo.InviteFileKey)
- }
- return inviteLink, nil
-}
-
func (s *service) evaluateDocumentVersion(ctx context.Context, spc clientspace.Space, pageId string, joinSpace bool) (string, error) {
treeStorage, err := spc.Storage().TreeStorage(ctx, pageId)
if err != nil {
@@ -406,11 +397,11 @@ func (s *service) getPublishLimit(globalName string) (int64, error) {
return defaultLimit, nil
}
-func (s *service) Publish(ctx context.Context, spaceId, pageId, uri string, includeSpaceInfo bool) (res PublishResult, err error) {
+func (s *service) Publish(ctx context.Context, spaceId, pageId, uri string, joinSpace bool) (res PublishResult, err error) {
identity, _, details := s.identityService.GetMyProfileDetails(ctx)
globalName := details.GetString(bundle.RelationKeyGlobalName)
- err = s.publishToPublishServer(ctx, spaceId, pageId, uri, globalName, includeSpaceInfo)
+ err = s.publishToPublishServer(ctx, spaceId, pageId, uri, globalName, joinSpace)
if err != nil {
log.Error("Failed to publish", zap.Error(err))
diff --git a/core/publish/service_test.go b/core/publish/service_test.go
index 2b063eee9..6f12dcfec 100644
--- a/core/publish/service_test.go
+++ b/core/publish/service_test.go
@@ -161,7 +161,7 @@ func TestPublish(t *testing.T) {
identityService := mock_identity.NewMockService(t)
identityService.EXPECT().GetMyProfileDetails(context.Background()).Return("identity", nil, domain.NewDetailsFromMap(map[domain.RelationKey]domain.Value{}))
- exp := prepareExporter(t, objectTypeId, spaceService, includeSpaceInfo)
+ exp := prepareExporter(t, objectTypeId, spaceService, false)
svc := &service{
spaceService: spaceService,
@@ -372,7 +372,7 @@ func TestPublish(t *testing.T) {
expectedErr: fmt.Errorf("internal error"),
}
- exp := prepareExporter(t, objectTypeId, spaceService, includeSpaceInfo)
+ exp := prepareExporter(t, objectTypeId, spaceService, false)
svc := &service{
spaceService: spaceService,
@@ -394,7 +394,14 @@ func TestPublish(t *testing.T) {
})
t.Run("limit error for members", func(t *testing.T) {
// given
+ isPersonal := false
+ includeSpaceInfo := true
+
spaceService := mock_space.NewMockService(t)
+ space := mock_clientspace.NewMockSpace(t)
+ space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Workspace: workspaceId})
+ space.EXPECT().IsPersonal().Return(isPersonal)
+ spaceService.EXPECT().Get(context.Background(), spaceId).Return(space, nil)
expectedUri := "test"
testFile := "test"
@@ -424,7 +431,7 @@ func TestPublish(t *testing.T) {
}
// when
- publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, true)
+ publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, includeSpaceInfo)
// then
assert.Error(t, err)
@@ -433,7 +440,14 @@ func TestPublish(t *testing.T) {
})
t.Run("default limit error", func(t *testing.T) {
// given
+ isPersonal := false
+ includeSpaceInfo := true
+
spaceService := mock_space.NewMockService(t)
+ space := mock_clientspace.NewMockSpace(t)
+ space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Workspace: workspaceId})
+ space.EXPECT().IsPersonal().Return(isPersonal)
+ spaceService.EXPECT().Get(context.Background(), spaceId).Return(space, nil)
expectedUri := "test"
testFile := "test"
@@ -460,7 +474,7 @@ func TestPublish(t *testing.T) {
}
// when
- publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, true)
+ publish, err := svc.Publish(context.Background(), spaceId, objectId, expectedUri, includeSpaceInfo)
// then
assert.Error(t, err)
@@ -679,17 +693,18 @@ func prepareSpaceService(t *testing.T, isPersonal bool, includeSpaceInfo bool) (
spaceService := mock_space.NewMockService(t)
space := mock_clientspace.NewMockSpace(t)
ctrl := gomock.NewController(t)
- space.EXPECT().IsPersonal().Return(isPersonal)
- space.EXPECT().Id().Return(spaceId)
st := mock_anystorage.NewMockClientSpaceStorage(t)
mockSt := mock_objecttree.NewMockStorage(ctrl)
st.EXPECT().TreeStorage(mock.Anything, mock.Anything).Return(mockSt, nil)
mockSt.EXPECT().Heads(gomock.Any()).Return([]string{"heads"}, nil)
space.EXPECT().Storage().Return(st)
- if includeSpaceInfo {
+ if includeSpaceInfo && !isPersonal {
space.EXPECT().DerivedIDs().Return(threads.DerivedSmartblockIds{Workspace: workspaceId})
}
+ if includeSpaceInfo {
+ space.EXPECT().IsPersonal().Return(isPersonal)
+ }
spaceService.EXPECT().Get(context.Background(), spaceId).Return(space, nil)
return spaceService, nil
}
diff --git a/docs/proto.md b/docs/proto.md
index cdfd5cade..ee2bff86f 100644
--- a/docs/proto.md
+++ b/docs/proto.md
@@ -19049,7 +19049,7 @@ Available undo/redo operations
| spaceId | [string](#string) | | |
| objectId | [string](#string) | | |
| uri | [string](#string) | | |
-| includeSpaceInfo | [bool](#bool) | | |
+| joinSpace | [bool](#bool) | | |
diff --git a/pb/commands.pb.go b/pb/commands.pb.go
index 0cc49b22a..8a508f9c7 100644
--- a/pb/commands.pb.go
+++ b/pb/commands.pb.go
@@ -20410,10 +20410,10 @@ func (m *RpcPublishingCreate) XXX_DiscardUnknown() {
var xxx_messageInfo_RpcPublishingCreate proto.InternalMessageInfo
type RpcPublishingCreateRequest struct {
- SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
- ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
- Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
- IncludeSpaceInfo bool `protobuf:"varint,4,opt,name=includeSpaceInfo,proto3" json:"includeSpaceInfo,omitempty"`
+ SpaceId string `protobuf:"bytes,1,opt,name=spaceId,proto3" json:"spaceId,omitempty"`
+ ObjectId string `protobuf:"bytes,2,opt,name=objectId,proto3" json:"objectId,omitempty"`
+ Uri string `protobuf:"bytes,3,opt,name=uri,proto3" json:"uri,omitempty"`
+ JoinSpace bool `protobuf:"varint,4,opt,name=joinSpace,proto3" json:"joinSpace,omitempty"`
}
func (m *RpcPublishingCreateRequest) Reset() { *m = RpcPublishingCreateRequest{} }
@@ -20470,9 +20470,9 @@ func (m *RpcPublishingCreateRequest) GetUri() string {
return ""
}
-func (m *RpcPublishingCreateRequest) GetIncludeSpaceInfo() bool {
+func (m *RpcPublishingCreateRequest) GetJoinSpace() bool {
if m != nil {
- return m.IncludeSpaceInfo
+ return m.JoinSpace
}
return false
}
@@ -76308,1352 +76308,1351 @@ func init() {
func init() { proto.RegisterFile("pb/protos/commands.proto", fileDescriptor_8261c968b2e6f45c) }
var fileDescriptor_8261c968b2e6f45c = []byte{
- // 21513 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xfd, 0x7b, 0x9c, 0x24, 0x49,
- 0x59, 0x37, 0x8a, 0x4f, 0x65, 0x56, 0x55, 0x77, 0x47, 0x5f, 0x26, 0x27, 0x77, 0x76, 0x98, 0x4d,
- 0x96, 0xd9, 0x75, 0x76, 0x59, 0xd6, 0x65, 0xe9, 0x5d, 0x16, 0x44, 0x76, 0xd9, 0x65, 0xa9, 0xae,
- 0xca, 0xee, 0xae, 0xdd, 0xea, 0xaa, 0x26, 0xab, 0x7a, 0x86, 0xf1, 0x7d, 0xfd, 0xb5, 0x39, 0x55,
- 0xd1, 0xdd, 0xb9, 0x53, 0x9d, 0x59, 0x64, 0x66, 0xcf, 0x6c, 0xf3, 0xfb, 0x78, 0x5e, 0x11, 0x57,
- 0x40, 0x44, 0x44, 0x45, 0x45, 0xe4, 0xb6, 0x08, 0x08, 0xc8, 0xfd, 0xf6, 0x82, 0x02, 0xca, 0x45,
- 0x10, 0x11, 0x51, 0xbc, 0x00, 0xca, 0x11, 0xef, 0xf8, 0x1e, 0x3d, 0xbe, 0x78, 0x14, 0x44, 0x45,
- 0xcf, 0x27, 0x2e, 0x99, 0x19, 0x51, 0x5d, 0x99, 0x15, 0x59, 0x5d, 0x59, 0xbd, 0xe8, 0xf9, 0xab,
- 0x2a, 0x23, 0x23, 0x9f, 0x78, 0xe2, 0xf9, 0x3e, 0x11, 0xf1, 0x44, 0xc4, 0x13, 0x4f, 0x80, 0xd3,
- 0xbd, 0x8b, 0xb7, 0xf5, 0x5c, 0xc7, 0x77, 0xbc, 0xdb, 0xda, 0xce, 0xee, 0xae, 0x69, 0x77, 0xbc,
- 0x45, 0xfc, 0xac, 0x4e, 0x99, 0xf6, 0xbe, 0xbf, 0xdf, 0x83, 0xda, 0x8d, 0xbd, 0x4b, 0xdb, 0xb7,
- 0x75, 0xad, 0x8b, 0xb7, 0xf5, 0x2e, 0xde, 0xb6, 0xeb, 0x74, 0x60, 0x37, 0xf8, 0x00, 0x3f, 0xd0,
- 0xec, 0xda, 0xcd, 0x71, 0xb9, 0xba, 0x4e, 0xdb, 0xec, 0x7a, 0xbe, 0xe3, 0x42, 0x9a, 0xf3, 0x54,
- 0x54, 0x24, 0xbc, 0x0c, 0x6d, 0x3f, 0xa0, 0x70, 0xed, 0xb6, 0xe3, 0x6c, 0x77, 0x21, 0x79, 0x77,
- 0x71, 0x6f, 0xeb, 0x36, 0xcf, 0x77, 0xf7, 0xda, 0x3e, 0x7d, 0x7b, 0x7d, 0xff, 0xdb, 0x0e, 0xf4,
- 0xda, 0xae, 0xd5, 0xf3, 0x1d, 0x97, 0xe4, 0x38, 0xfb, 0xb5, 0xdf, 0x9b, 0x06, 0xb2, 0xd1, 0x6b,
- 0x6b, 0x5f, 0x9f, 0x02, 0x72, 0xa9, 0xd7, 0xd3, 0x3e, 0x21, 0x01, 0xb0, 0x02, 0xfd, 0x73, 0xd0,
- 0xf5, 0x2c, 0xc7, 0xd6, 0x8e, 0x83, 0x29, 0x03, 0x3e, 0x7b, 0x0f, 0x7a, 0xfe, 0x5d, 0xf9, 0x17,
- 0xfc, 0x95, 0x9c, 0xd3, 0x5e, 0x2f, 0x81, 0x69, 0x03, 0x7a, 0x3d, 0xc7, 0xf6, 0xa0, 0xfa, 0x0c,
- 0x50, 0x80, 0xae, 0xeb, 0xb8, 0xa7, 0x73, 0xd7, 0xe7, 0x6e, 0x9e, 0xbd, 0xe3, 0x96, 0x45, 0x5a,
- 0xfd, 0x45, 0xa3, 0xd7, 0x5e, 0x2c, 0xf5, 0x7a, 0x8b, 0x11, 0xa5, 0xc5, 0xe0, 0xa3, 0x45, 0x1d,
- 0x7d, 0x61, 0x90, 0x0f, 0xd5, 0xd3, 0x60, 0xea, 0x32, 0xc9, 0x70, 0x5a, 0xba, 0x3e, 0x77, 0xf3,
- 0x8c, 0x11, 0x3c, 0xa2, 0x37, 0x1d, 0xe8, 0x9b, 0x56, 0xd7, 0x3b, 0x2d, 0x93, 0x37, 0xf4, 0x51,
- 0x7b, 0x38, 0x07, 0x0a, 0x98, 0x88, 0x5a, 0x06, 0xf9, 0xb6, 0xd3, 0x81, 0xb8, 0xf8, 0x85, 0x3b,
- 0x6e, 0x13, 0x2f, 0x7e, 0xb1, 0xec, 0x74, 0xa0, 0x81, 0x3f, 0x56, 0xaf, 0x07, 0xb3, 0x81, 0x58,
- 0x22, 0x36, 0xd8, 0xa4, 0xb3, 0x77, 0x80, 0x3c, 0xca, 0xaf, 0x4e, 0x83, 0x7c, 0x7d, 0xa3, 0x56,
- 0x53, 0x8e, 0xa9, 0x27, 0xc0, 0xfc, 0x46, 0xfd, 0xfe, 0x7a, 0xe3, 0x7c, 0x7d, 0x53, 0x37, 0x8c,
- 0x86, 0xa1, 0xe4, 0xd4, 0x79, 0x30, 0xb3, 0x54, 0xaa, 0x6c, 0x56, 0xeb, 0xeb, 0x1b, 0x2d, 0x45,
- 0xd2, 0x5e, 0x25, 0x83, 0x85, 0x26, 0xf4, 0x2b, 0xf0, 0xb2, 0xd5, 0x86, 0x4d, 0xdf, 0xf4, 0xa1,
- 0xf6, 0x92, 0x5c, 0x28, 0x4c, 0x75, 0x03, 0x15, 0x1a, 0xbe, 0xa2, 0x15, 0x78, 0xd2, 0x81, 0x0a,
- 0xf0, 0x14, 0x16, 0xe9, 0xd7, 0x8b, 0x4c, 0x9a, 0xc1, 0xd2, 0x39, 0xfb, 0x04, 0x30, 0xcb, 0xbc,
- 0x53, 0x17, 0x00, 0x58, 0x2a, 0x95, 0xef, 0x5f, 0x31, 0x1a, 0x1b, 0xf5, 0x8a, 0x72, 0x0c, 0x3d,
- 0x2f, 0x37, 0x0c, 0x9d, 0x3e, 0xe7, 0xb4, 0x6f, 0xe6, 0x18, 0x30, 0x2b, 0x3c, 0x98, 0x8b, 0xc3,
- 0x99, 0x19, 0x00, 0xa8, 0xf6, 0x86, 0x10, 0x9c, 0x15, 0x0e, 0x9c, 0x27, 0xa5, 0x23, 0x97, 0x3d,
- 0x40, 0x0f, 0x49, 0x60, 0xba, 0xb9, 0xb3, 0xe7, 0x77, 0x9c, 0x2b, 0xb6, 0x36, 0x13, 0x22, 0xa3,
- 0xfd, 0x1d, 0x2b, 0x93, 0xa7, 0xf3, 0x32, 0xb9, 0xf9, 0x60, 0x25, 0x28, 0x85, 0x18, 0x69, 0xbc,
- 0x26, 0x94, 0x46, 0x89, 0x93, 0xc6, 0x13, 0x44, 0x09, 0x65, 0x2f, 0x87, 0x2f, 0xdc, 0x0d, 0x0a,
- 0xcd, 0x9e, 0xd9, 0x86, 0xda, 0x67, 0x64, 0x30, 0x57, 0x83, 0xe6, 0x65, 0x58, 0xea, 0xf5, 0x5c,
- 0xe7, 0x32, 0xd4, 0xca, 0x91, 0xbe, 0x9e, 0x06, 0x53, 0x1e, 0xca, 0x54, 0xed, 0xe0, 0x1a, 0xcc,
- 0x18, 0xc1, 0xa3, 0x7a, 0x06, 0x00, 0xab, 0x03, 0x6d, 0xdf, 0xf2, 0x2d, 0xe8, 0x9d, 0x96, 0xae,
- 0x97, 0x6f, 0x9e, 0x31, 0x98, 0x14, 0xed, 0xeb, 0x92, 0xa8, 0x8e, 0x61, 0x2e, 0x16, 0x59, 0x0e,
- 0x62, 0xa4, 0xfa, 0x3a, 0x49, 0x44, 0xc7, 0x86, 0x92, 0x4b, 0x27, 0xdb, 0xb7, 0xe5, 0xd2, 0x0b,
- 0x17, 0xe5, 0xa8, 0x37, 0x36, 0x9b, 0x1b, 0xe5, 0xd5, 0xcd, 0xe6, 0x7a, 0xa9, 0xac, 0x2b, 0x50,
- 0x3d, 0x09, 0x14, 0xfc, 0x77, 0xb3, 0xda, 0xdc, 0xac, 0xe8, 0x35, 0xbd, 0xa5, 0x57, 0x94, 0x2d,
- 0x55, 0x05, 0x0b, 0x86, 0xfe, 0xcc, 0x0d, 0xbd, 0xd9, 0xda, 0x5c, 0x2e, 0x55, 0x6b, 0x7a, 0x45,
- 0xd9, 0x46, 0x1f, 0xd7, 0xaa, 0x6b, 0xd5, 0xd6, 0xa6, 0xa1, 0x97, 0xca, 0xab, 0x7a, 0x45, 0xd9,
- 0x51, 0x1f, 0x05, 0xae, 0xaa, 0x37, 0x36, 0x4b, 0xeb, 0xeb, 0x46, 0xe3, 0x9c, 0xbe, 0x49, 0xbf,
- 0x68, 0x2a, 0x16, 0x29, 0xa8, 0xb5, 0xd9, 0x5c, 0x2d, 0x19, 0x7a, 0x69, 0xa9, 0xa6, 0x2b, 0x0f,
- 0x68, 0xcf, 0x93, 0xc1, 0xfc, 0x9a, 0x79, 0x09, 0x36, 0x77, 0x4c, 0x17, 0x9a, 0x17, 0xbb, 0x50,
- 0xbb, 0x41, 0x00, 0x4f, 0xed, 0x33, 0x2c, 0x5e, 0x3a, 0x8f, 0xd7, 0x6d, 0x03, 0x04, 0xcc, 0x15,
- 0x11, 0x03, 0xd8, 0x3f, 0x87, 0xcd, 0x60, 0x95, 0x03, 0xec, 0xc9, 0x29, 0xe9, 0xa5, 0x43, 0xec,
- 0x07, 0x1f, 0x01, 0x88, 0x69, 0x5f, 0xcc, 0x83, 0x85, 0xaa, 0x7d, 0xd9, 0xf2, 0xe1, 0x0a, 0xb4,
- 0xa1, 0x8b, 0xc6, 0x81, 0x57, 0xe5, 0x44, 0xda, 0x55, 0x0b, 0x00, 0x0b, 0x7f, 0xd7, 0xda, 0xef,
- 0x41, 0x5c, 0xbd, 0xc1, 0xf2, 0xe2, 0x89, 0x87, 0x43, 0x44, 0x35, 0xfc, 0xd6, 0x60, 0xe8, 0x9c,
- 0xbd, 0x01, 0x80, 0xe8, 0x8d, 0x0a, 0x40, 0x71, 0x0d, 0xee, 0x5e, 0x84, 0xae, 0x72, 0x4c, 0x9d,
- 0x01, 0x85, 0x15, 0xf4, 0xa5, 0x92, 0xd3, 0x5e, 0x2f, 0x33, 0x2a, 0xb0, 0xcc, 0xab, 0xc0, 0xed,
- 0x22, 0x2c, 0x0c, 0x1a, 0xe9, 0xaf, 0x05, 0x33, 0x84, 0x8f, 0xb2, 0xd5, 0xa1, 0x68, 0x45, 0x09,
- 0xea, 0x8d, 0x60, 0x9e, 0x3c, 0x2c, 0x5b, 0x5d, 0x78, 0x3f, 0xdc, 0xa7, 0x63, 0x3e, 0x9f, 0xa8,
- 0xfd, 0x68, 0xd8, 0xf0, 0xab, 0x9c, 0x1e, 0x7d, 0x57, 0x5a, 0xa6, 0xd2, 0x29, 0xd2, 0xcb, 0x1e,
- 0x09, 0x4d, 0xff, 0x40, 0x0b, 0xb7, 0xb4, 0x6f, 0x49, 0x60, 0xb6, 0xe9, 0x3b, 0x3d, 0xd4, 0x5c,
- 0x2c, 0x7b, 0x5b, 0xac, 0x7d, 0x7f, 0x8a, 0x6d, 0xdf, 0x65, 0x1e, 0xdc, 0x27, 0x0c, 0x90, 0x23,
- 0x53, 0x40, 0x4c, 0xeb, 0xfe, 0x7a, 0xd8, 0xba, 0x97, 0x39, 0x54, 0xee, 0x48, 0x45, 0xed, 0xdb,
- 0xb0, 0x6d, 0xbf, 0x4c, 0x06, 0x4a, 0xa0, 0x66, 0x7e, 0x79, 0xcf, 0x75, 0xa1, 0xed, 0x8b, 0x81,
- 0xf0, 0x47, 0x2c, 0x08, 0xab, 0x3c, 0x08, 0x77, 0x24, 0x28, 0x73, 0x50, 0x4a, 0x86, 0x6d, 0xec,
- 0x57, 0x43, 0x34, 0xef, 0xe7, 0xd0, 0xfc, 0xee, 0xf4, 0x6c, 0xa5, 0x83, 0x74, 0x75, 0x04, 0x44,
- 0x4f, 0x02, 0x05, 0x8d, 0x87, 0xe5, 0x56, 0xf5, 0x9c, 0xbe, 0x59, 0xad, 0x9f, 0xab, 0xb6, 0x74,
- 0x05, 0x6a, 0x2f, 0x95, 0xa3, 0x3e, 0xd7, 0xc7, 0x9d, 0x9a, 0x18, 0x2a, 0x5f, 0x94, 0x46, 0xeb,
- 0xf7, 0x48, 0x19, 0x13, 0xc1, 0x44, 0xbc, 0xdf, 0x1b, 0xc8, 0x54, 0x3a, 0x44, 0xee, 0x1b, 0x01,
- 0x91, 0x53, 0x40, 0xad, 0xd6, 0xcf, 0x95, 0x6a, 0xd5, 0x0a, 0x69, 0x63, 0x9b, 0xad, 0x0b, 0xeb,
- 0x08, 0x93, 0x9f, 0x94, 0xc1, 0x1c, 0x61, 0xcd, 0x80, 0x97, 0x9d, 0x4b, 0x82, 0xc6, 0xc8, 0x97,
- 0x53, 0x1a, 0x8f, 0x6c, 0x09, 0x31, 0xbd, 0xd5, 0x8f, 0xa4, 0x30, 0x1e, 0x13, 0xc8, 0x3d, 0x92,
- 0x46, 0x90, 0x03, 0x5d, 0xd3, 0xf6, 0x80, 0x1e, 0x6c, 0xe0, 0x08, 0xf2, 0xb1, 0x7c, 0x60, 0x0f,
- 0x9c, 0xb3, 0xe0, 0x15, 0x6d, 0x2d, 0xc2, 0x84, 0x53, 0xdb, 0xdc, 0x50, 0xb5, 0x95, 0x06, 0xa9,
- 0xed, 0x5f, 0xb2, 0x76, 0xc4, 0x12, 0x8f, 0xde, 0xad, 0xb1, 0xe2, 0x46, 0x9c, 0xc4, 0xaf, 0x16,
- 0x04, 0x8a, 0x22, 0xf1, 0xd6, 0xd2, 0xb5, 0x60, 0x06, 0xff, 0xad, 0x9b, 0xbb, 0x90, 0xb6, 0xa1,
- 0x28, 0x41, 0x3d, 0x0b, 0xe6, 0x48, 0xc6, 0xb6, 0x63, 0xa3, 0xfa, 0xe4, 0x71, 0x06, 0x2e, 0x0d,
- 0x81, 0xd8, 0x76, 0xa1, 0xe9, 0x3b, 0x2e, 0xa6, 0x51, 0x20, 0x20, 0x32, 0x49, 0xea, 0xad, 0xe0,
- 0x84, 0xe5, 0xe1, 0x56, 0xb5, 0xe1, 0x41, 0x97, 0x30, 0x7b, 0xba, 0x78, 0x7d, 0xee, 0xe6, 0x69,
- 0xe3, 0xe0, 0x0b, 0xed, 0xab, 0x61, 0x9b, 0xd5, 0x39, 0x3d, 0x7b, 0x62, 0x9a, 0x8a, 0xa7, 0xd3,
- 0xb2, 0xcb, 0xa3, 0xf5, 0xa0, 0xa4, 0xdf, 0xdc, 0x44, 0xba, 0xb1, 0x8c, 0x17, 0x06, 0x20, 0x6d,
- 0xc5, 0x28, 0x15, 0xe5, 0x2d, 0x37, 0xea, 0x2d, 0xbd, 0xde, 0x52, 0xb6, 0x06, 0xea, 0xdf, 0xb6,
- 0xf6, 0xba, 0x3c, 0xc8, 0xdf, 0xe7, 0x58, 0xb6, 0xf6, 0x50, 0x8e, 0x53, 0x20, 0x1b, 0xfa, 0x57,
- 0x1c, 0xf7, 0x52, 0xd8, 0xac, 0xa3, 0x84, 0x64, 0x24, 0x23, 0xc5, 0x93, 0x87, 0x2a, 0x5e, 0x7e,
- 0x90, 0xe2, 0xfd, 0x04, 0xab, 0x78, 0x77, 0xf3, 0x8a, 0x77, 0xd3, 0x00, 0xf9, 0x23, 0xe6, 0x63,
- 0xba, 0x8b, 0x4f, 0x86, 0xdd, 0xc5, 0xbd, 0x1c, 0x8c, 0x8f, 0x17, 0x23, 0x93, 0x0e, 0xc0, 0x2f,
- 0x65, 0xda, 0x4d, 0x0c, 0x82, 0x7a, 0x3b, 0x06, 0xea, 0x9d, 0x01, 0x3d, 0x88, 0x75, 0xb0, 0xa3,
- 0x79, 0xe0, 0x60, 0xa7, 0x72, 0x49, 0xbd, 0x1a, 0x9c, 0xa8, 0x54, 0x97, 0x97, 0x75, 0x43, 0xaf,
- 0xb7, 0x36, 0xeb, 0x7a, 0xeb, 0x7c, 0xc3, 0xb8, 0x5f, 0xe9, 0x6a, 0x0f, 0xcb, 0x00, 0x20, 0x09,
- 0x95, 0x4d, 0xbb, 0x0d, 0xbb, 0x62, 0xfd, 0xff, 0xff, 0x2d, 0xa5, 0xeb, 0x41, 0x22, 0xfa, 0x31,
- 0x70, 0xbe, 0x52, 0x12, 0x6f, 0x95, 0xb1, 0xc4, 0xd2, 0x81, 0xfa, 0xe6, 0x47, 0xc2, 0xec, 0xe1,
- 0x2a, 0x70, 0x3c, 0xa0, 0x47, 0xb3, 0x0f, 0x5e, 0x34, 0x78, 0x7b, 0x1e, 0x2c, 0x50, 0x58, 0x82,
- 0x55, 0xa0, 0x17, 0x08, 0x4d, 0x57, 0x35, 0x30, 0x4d, 0x17, 0x7d, 0x82, 0xc1, 0x20, 0x7c, 0x56,
- 0x57, 0xc0, 0x6c, 0x0f, 0xba, 0xbb, 0x96, 0xe7, 0x59, 0x8e, 0x4d, 0x96, 0x73, 0x17, 0xee, 0x78,
- 0x6c, 0x28, 0x71, 0xbc, 0xf2, 0xbd, 0xb8, 0x6e, 0xba, 0xbe, 0xd5, 0xb6, 0x7a, 0xa6, 0xed, 0xaf,
- 0x47, 0x99, 0x0d, 0xf6, 0x4b, 0x64, 0xd8, 0xa5, 0x32, 0xd0, 0xf8, 0x9a, 0xc4, 0xa8, 0xc4, 0xaf,
- 0xa4, 0x98, 0x54, 0x26, 0x12, 0x4c, 0xa7, 0x16, 0x9f, 0xc8, 0x54, 0x2d, 0x06, 0xe0, 0xbd, 0xad,
- 0x5e, 0x03, 0xae, 0xae, 0xd6, 0xcb, 0x0d, 0xc3, 0xd0, 0xcb, 0xad, 0xcd, 0x75, 0xdd, 0x58, 0xab,
- 0x36, 0x9b, 0xd5, 0x46, 0xbd, 0x79, 0x98, 0xd6, 0xae, 0x7d, 0x5a, 0x0e, 0x35, 0xa6, 0x02, 0xdb,
- 0x5d, 0xcb, 0x86, 0xda, 0xbd, 0x87, 0x54, 0x18, 0x7e, 0xcd, 0x50, 0x1c, 0x67, 0x5a, 0x7e, 0x0c,
- 0xce, 0xaf, 0x4d, 0x8f, 0xf3, 0x60, 0x82, 0xff, 0x89, 0x9b, 0xff, 0x97, 0x65, 0x70, 0x82, 0x69,
- 0x88, 0x06, 0xdc, 0x1d, 0xdb, 0x3a, 0xf0, 0x0f, 0xb2, 0x6d, 0xb7, 0xca, 0x63, 0x3a, 0xc8, 0xf6,
- 0x3e, 0xc0, 0x46, 0x0c, 0xac, 0x6f, 0x0e, 0x61, 0xad, 0x71, 0xb0, 0x3e, 0x75, 0x04, 0x9a, 0xe9,
- 0x90, 0x7d, 0x47, 0xa6, 0xc8, 0x5e, 0x03, 0xae, 0x5e, 0x2f, 0x19, 0xad, 0x6a, 0xb9, 0xba, 0x5e,
- 0x42, 0xe3, 0x28, 0x33, 0x64, 0xc7, 0x18, 0xf7, 0x3c, 0xe8, 0x03, 0xf1, 0xfd, 0x48, 0x1e, 0x5c,
- 0x3b, 0xb8, 0xa3, 0x2d, 0xef, 0x98, 0xf6, 0x36, 0xd4, 0x2c, 0x11, 0xa8, 0x2b, 0x60, 0xaa, 0x8d,
- 0xb3, 0x13, 0x9c, 0xd9, 0x8d, 0xbf, 0x84, 0xbe, 0x9c, 0x94, 0x60, 0x04, 0x9f, 0x6a, 0xef, 0x66,
- 0x15, 0xa2, 0xc5, 0x2b, 0xc4, 0xd3, 0x93, 0xc1, 0x3b, 0xc0, 0x77, 0x8c, 0x6e, 0x7c, 0x2e, 0xd4,
- 0x8d, 0xf3, 0x9c, 0x6e, 0x94, 0x0f, 0x47, 0x3e, 0x9d, 0x9a, 0xfc, 0xe6, 0x23, 0xa1, 0x03, 0x88,
- 0xd5, 0x26, 0x2b, 0x7e, 0x54, 0x18, 0xd8, 0xdd, 0xbf, 0x5a, 0x06, 0xc5, 0x0a, 0xec, 0x42, 0x5f,
- 0x70, 0x06, 0xff, 0xf7, 0x92, 0xe8, 0x76, 0x1a, 0x81, 0x81, 0xd0, 0x8e, 0x5f, 0x4b, 0xf1, 0xad,
- 0x5d, 0xe8, 0xf9, 0xe6, 0x6e, 0x0f, 0x8b, 0x5a, 0x36, 0xa2, 0x04, 0xed, 0x87, 0x24, 0x91, 0xcd,
- 0xb6, 0x84, 0x62, 0xfe, 0x73, 0xac, 0x0a, 0x7f, 0x5e, 0x02, 0xd3, 0x4d, 0xe8, 0x37, 0xdc, 0x0e,
- 0x74, 0xb5, 0x66, 0x84, 0xd1, 0xf5, 0x60, 0x16, 0x83, 0x82, 0xa6, 0x99, 0x21, 0x4e, 0x6c, 0x92,
- 0x7a, 0x13, 0x58, 0x08, 0x1f, 0xf1, 0xe7, 0xb4, 0x1b, 0xef, 0x4b, 0xd5, 0xbe, 0x96, 0x13, 0xf5,
- 0x01, 0xa0, 0x8b, 0xbe, 0x94, 0x9b, 0x98, 0x56, 0x2a, 0xb6, 0x9f, 0x9f, 0x48, 0x2a, 0xfb, 0x6d,
- 0xd2, 0x77, 0x4a, 0x00, 0x6c, 0xd8, 0x5e, 0x20, 0xd7, 0xc7, 0xa7, 0x90, 0xab, 0xf6, 0x4f, 0xb9,
- 0x74, 0xb3, 0x98, 0xa8, 0x9c, 0x18, 0x89, 0xfd, 0x42, 0x8a, 0xb5, 0x85, 0x58, 0x62, 0x13, 0xd8,
- 0x5a, 0x3e, 0x0e, 0x8a, 0xe7, 0xcd, 0x6e, 0x17, 0xfa, 0xda, 0xab, 0x64, 0x50, 0x2c, 0xbb, 0xd0,
- 0xf4, 0xa1, 0x06, 0x23, 0xd1, 0x69, 0x60, 0xda, 0x75, 0x1c, 0x7f, 0xdd, 0xf4, 0x77, 0xa8, 0xdc,
- 0xc2, 0x67, 0xf5, 0xa9, 0xe0, 0x51, 0x5b, 0x7b, 0xdd, 0xae, 0x0f, 0x1f, 0xf4, 0xd7, 0x5d, 0x6b,
- 0xd7, 0x74, 0xf7, 0x6b, 0xa6, 0xbd, 0xbd, 0x67, 0x6e, 0x43, 0xca, 0x5e, 0xdc, 0x6b, 0xea, 0xa8,
- 0xf2, 0x4b, 0x6c, 0xc7, 0x73, 0x2f, 0x2f, 0xf4, 0xef, 0xe4, 0xe4, 0x44, 0x58, 0x5c, 0x24, 0xec,
- 0xc5, 0xf4, 0x3c, 0x1a, 0x98, 0xde, 0xb5, 0xe1, 0xae, 0x63, 0x5b, 0xed, 0xc0, 0x5a, 0x0d, 0x9e,
- 0xb5, 0x8f, 0x86, 0x68, 0x2c, 0x71, 0x68, 0x2c, 0x0a, 0x97, 0x92, 0x0e, 0x8a, 0xe6, 0x08, 0xfd,
- 0xce, 0x75, 0xe0, 0xd1, 0xa4, 0x1b, 0xd9, 0x6c, 0x35, 0x36, 0xcb, 0x86, 0x5e, 0x6a, 0xe9, 0x9b,
- 0xb5, 0x46, 0xb9, 0x54, 0xdb, 0x34, 0xf4, 0xf5, 0x86, 0x02, 0xd1, 0xec, 0x7c, 0xca, 0x80, 0x6d,
- 0xe7, 0x32, 0x74, 0xb5, 0xe7, 0xe6, 0xc4, 0x20, 0x4a, 0x10, 0x4a, 0x12, 0x7c, 0xb2, 0x08, 0x7c,
- 0x3f, 0x21, 0xec, 0x67, 0x44, 0x05, 0x4b, 0x99, 0x8f, 0x69, 0x31, 0x1f, 0x13, 0xea, 0x63, 0x12,
- 0x49, 0x3d, 0x02, 0x40, 0xfa, 0x47, 0x09, 0x4c, 0x95, 0x1d, 0xfb, 0x32, 0x74, 0x7d, 0x76, 0x92,
- 0xc5, 0xe2, 0x90, 0xeb, 0xc3, 0xe1, 0x34, 0x98, 0x82, 0xb6, 0xef, 0x3a, 0xbd, 0x60, 0x96, 0x15,
- 0x3c, 0x6a, 0x6f, 0x4c, 0x2b, 0x61, 0x5a, 0x72, 0xfc, 0xda, 0xec, 0xe0, 0x82, 0x38, 0xf6, 0xe4,
- 0xbe, 0xb6, 0xf3, 0x70, 0x1a, 0x5c, 0x06, 0x33, 0x90, 0x7d, 0x3f, 0xf6, 0x15, 0x19, 0xcc, 0x93,
- 0x76, 0xdb, 0x84, 0xd8, 0x2c, 0xd4, 0x1a, 0xec, 0x3a, 0x67, 0x9f, 0xf0, 0x57, 0x8f, 0x71, 0xe2,
- 0x2f, 0x9a, 0xbd, 0x5e, 0xb8, 0x42, 0xbe, 0x7a, 0xcc, 0xa0, 0xcf, 0x44, 0xcd, 0x97, 0x8a, 0x20,
- 0x6f, 0xee, 0xf9, 0x3b, 0xda, 0xb7, 0x84, 0x67, 0xbc, 0x5c, 0x3f, 0x42, 0xf9, 0x89, 0x81, 0xe4,
- 0x24, 0x28, 0xf8, 0xce, 0x25, 0x18, 0xc8, 0x81, 0x3c, 0x20, 0x38, 0xcc, 0x5e, 0xaf, 0x85, 0x5f,
- 0x50, 0x38, 0x82, 0x67, 0x64, 0x60, 0x99, 0xed, 0xb6, 0xb3, 0x67, 0xfb, 0xd5, 0x60, 0x95, 0x3c,
- 0x4a, 0xd0, 0xbe, 0x20, 0xb4, 0x0d, 0x25, 0xc0, 0x60, 0x3a, 0xc8, 0x2e, 0x8e, 0xd0, 0x94, 0x16,
- 0xc1, 0x2d, 0xa5, 0xf5, 0xf5, 0xcd, 0x56, 0xe3, 0x7e, 0xbd, 0x1e, 0x59, 0xbb, 0x9b, 0xd5, 0xfa,
- 0x66, 0x6b, 0x55, 0xdf, 0x2c, 0x6f, 0x18, 0x78, 0x71, 0xb2, 0x54, 0x2e, 0x37, 0x36, 0xea, 0x2d,
- 0x05, 0x6a, 0x6f, 0x95, 0xc0, 0x5c, 0xb9, 0xeb, 0x78, 0x21, 0xc2, 0xd7, 0x45, 0x08, 0x87, 0x62,
- 0xcc, 0x31, 0x62, 0xd4, 0xfe, 0x35, 0x27, 0xea, 0x27, 0x13, 0x08, 0x84, 0x21, 0x1f, 0xd3, 0x4b,
- 0xbd, 0x51, 0xc8, 0x4f, 0x66, 0x38, 0xbd, 0xec, 0x9b, 0xc4, 0x67, 0x96, 0xc1, 0x54, 0x89, 0x28,
- 0x86, 0xf6, 0x27, 0x39, 0x50, 0x2c, 0x3b, 0xf6, 0x96, 0xb5, 0x8d, 0x2c, 0x48, 0x68, 0x9b, 0x17,
- 0xbb, 0xb0, 0x62, 0xfa, 0xe6, 0x65, 0x0b, 0x5e, 0xc1, 0x15, 0x98, 0x36, 0xfa, 0x52, 0x11, 0x53,
- 0x34, 0x05, 0x5e, 0xdc, 0xdb, 0xc6, 0x4c, 0x4d, 0x1b, 0x6c, 0x12, 0x1a, 0x3f, 0xc8, 0xe3, 0xba,
- 0x0b, 0x5d, 0xd8, 0x85, 0xa6, 0x07, 0xd1, 0x5c, 0xcc, 0x86, 0x5d, 0xac, 0xb4, 0xd3, 0x46, 0xdc,
- 0x6b, 0xf5, 0x2c, 0x98, 0x23, 0xaf, 0xb0, 0xfd, 0xe3, 0x61, 0x35, 0x9e, 0x36, 0xb8, 0x34, 0xf5,
- 0x09, 0xa0, 0x00, 0x1f, 0xf4, 0x5d, 0xf3, 0x74, 0x07, 0xe3, 0xf5, 0xa8, 0x45, 0xe2, 0x28, 0xbb,
- 0x18, 0x38, 0xca, 0x2e, 0x36, 0xb1, 0x1b, 0xad, 0x41, 0x72, 0x69, 0xff, 0x7b, 0x3a, 0xb4, 0x5e,
- 0x3e, 0x2f, 0x47, 0x8a, 0xa1, 0x82, 0xbc, 0x6d, 0xee, 0x42, 0xaa, 0x17, 0xf8, 0xbf, 0x7a, 0x0b,
- 0x38, 0x6e, 0x5e, 0x36, 0x7d, 0xd3, 0xad, 0x39, 0x6d, 0xb3, 0x8b, 0x87, 0xcd, 0xa0, 0xe5, 0xf7,
- 0xbf, 0xc0, 0x9b, 0x56, 0xbe, 0xe3, 0x42, 0x9c, 0x2b, 0xd8, 0xb4, 0x0a, 0x12, 0x10, 0x75, 0xab,
- 0xed, 0xd8, 0x98, 0x7f, 0xd9, 0xc0, 0xff, 0x91, 0x54, 0x3a, 0x96, 0x87, 0x2a, 0x82, 0xa9, 0xd4,
- 0xc9, 0x7e, 0x4a, 0x73, 0xdf, 0x6e, 0xe3, 0x0d, 0xab, 0x69, 0x23, 0xee, 0xb5, 0xba, 0x04, 0x66,
- 0xe9, 0xee, 0xcb, 0x1a, 0xd2, 0xab, 0x22, 0xd6, 0xab, 0xeb, 0x79, 0x37, 0x44, 0x82, 0xe7, 0x62,
- 0x3d, 0xca, 0x67, 0xb0, 0x1f, 0xa9, 0xcf, 0x00, 0x8f, 0xa6, 0x8f, 0xe5, 0x3d, 0xcf, 0x77, 0x76,
- 0x09, 0xe8, 0xcb, 0x56, 0x97, 0xd4, 0x60, 0x0a, 0xd7, 0x20, 0x29, 0x8b, 0x7a, 0x07, 0x38, 0xd9,
- 0x73, 0xe1, 0x16, 0x74, 0x2f, 0x98, 0xbb, 0x7b, 0x0f, 0xb6, 0x5c, 0xd3, 0xf6, 0x7a, 0x8e, 0xeb,
- 0x9f, 0x9e, 0xc6, 0xcc, 0x0f, 0x7c, 0xa7, 0xde, 0x0a, 0x4e, 0x3c, 0xe0, 0x39, 0x76, 0xa9, 0x67,
- 0xd5, 0x2c, 0xcf, 0x87, 0x76, 0xa9, 0xd3, 0x71, 0x4f, 0xcf, 0xe0, 0xb2, 0x0e, 0xbe, 0x50, 0x6f,
- 0x04, 0xf3, 0x0f, 0x38, 0x96, 0xdd, 0xf4, 0x5d, 0x68, 0xee, 0x6e, 0xb8, 0xdd, 0xd3, 0x80, 0x6c,
- 0x10, 0x71, 0x89, 0xb4, 0xf3, 0x9d, 0x06, 0x45, 0x02, 0x89, 0xf6, 0x92, 0x82, 0xb0, 0x57, 0x33,
- 0x15, 0x52, 0xa2, 0xb5, 0x78, 0x3b, 0x98, 0xa2, 0xbd, 0x26, 0x06, 0x7f, 0xf6, 0x8e, 0x53, 0x7d,
- 0x0b, 0x24, 0x94, 0x8a, 0x11, 0x64, 0x53, 0x9f, 0x04, 0x8a, 0x6d, 0x2c, 0x2a, 0xac, 0x07, 0xb3,
- 0x77, 0x3c, 0x7a, 0x70, 0xa1, 0x38, 0x8b, 0x41, 0xb3, 0x6a, 0x5f, 0x94, 0x85, 0x1c, 0xa1, 0x93,
- 0x38, 0x4e, 0xd7, 0x53, 0x7c, 0x55, 0x1a, 0xa1, 0x2b, 0xbe, 0x15, 0xdc, 0x4c, 0xfb, 0x59, 0x6a,
- 0xd3, 0x54, 0x36, 0x97, 0x36, 0x82, 0x59, 0x2d, 0xb2, 0x74, 0x9a, 0xad, 0x92, 0xd1, 0xda, 0xac,
- 0x37, 0x2a, 0x68, 0x36, 0x7c, 0x0b, 0xb8, 0x69, 0x48, 0x6e, 0xbd, 0xb5, 0x59, 0x2f, 0xad, 0xe9,
- 0xca, 0x16, 0x6f, 0x2f, 0x35, 0x5b, 0x8d, 0xf5, 0x4d, 0x63, 0xa3, 0x5e, 0xaf, 0xd6, 0x57, 0x08,
- 0x31, 0x64, 0xa0, 0x9e, 0x8a, 0x32, 0x9c, 0x37, 0xaa, 0x2d, 0x7d, 0xb3, 0xdc, 0xa8, 0x2f, 0x57,
- 0x57, 0x14, 0x6b, 0x98, 0xb1, 0xf5, 0x80, 0x7a, 0x3d, 0xb8, 0x96, 0xe3, 0xa4, 0xda, 0xa8, 0xa3,
- 0x29, 0x7a, 0xb9, 0x54, 0x2f, 0xeb, 0x68, 0x3e, 0x7e, 0x49, 0xd5, 0xc0, 0xd5, 0x84, 0xdc, 0xe6,
- 0x72, 0xb5, 0xc6, 0xee, 0xaa, 0x7d, 0x2a, 0xa7, 0x9e, 0x06, 0x57, 0xb1, 0xef, 0xa8, 0x4f, 0x84,
- 0xf2, 0x1b, 0x39, 0xf5, 0x46, 0x70, 0x1d, 0xf7, 0x15, 0xd9, 0x20, 0xdb, 0xac, 0x56, 0x36, 0xd7,
- 0xaa, 0xcd, 0xb5, 0x52, 0xab, 0xbc, 0xaa, 0x7c, 0x1a, 0x4f, 0x5f, 0x42, 0x7b, 0x9c, 0xf1, 0x4e,
- 0x7e, 0x19, 0x6b, 0x27, 0x94, 0x78, 0x45, 0x7d, 0xfc, 0x40, 0xd8, 0x93, 0xed, 0xe2, 0x4f, 0x84,
- 0x23, 0x4e, 0x85, 0x53, 0xa1, 0xdb, 0x53, 0xd0, 0x4a, 0xa7, 0x43, 0xad, 0x11, 0x54, 0xe8, 0x7a,
- 0x70, 0x6d, 0x5d, 0x27, 0x48, 0x19, 0x7a, 0xb9, 0x71, 0x4e, 0x37, 0x36, 0xcf, 0x97, 0x6a, 0x35,
- 0xbd, 0xb5, 0xb9, 0x5c, 0x35, 0x9a, 0x2d, 0x65, 0x4b, 0xfb, 0x27, 0x29, 0x5c, 0x96, 0x62, 0xa4,
- 0xf5, 0x27, 0x52, 0xda, 0x66, 0x9d, 0xb8, 0xfc, 0xf4, 0x5d, 0xa0, 0xe8, 0xf9, 0xa6, 0xbf, 0xe7,
- 0xd1, 0x56, 0xfd, 0x98, 0xc1, 0xad, 0x7a, 0xb1, 0x89, 0x33, 0x19, 0x34, 0xb3, 0xf6, 0xc5, 0x5c,
- 0x9a, 0x66, 0x3a, 0x86, 0x95, 0x29, 0x6b, 0x04, 0x11, 0x9f, 0x01, 0x5a, 0xa0, 0xed, 0xd5, 0xe6,
- 0x66, 0xa9, 0x66, 0xe8, 0xa5, 0xca, 0x85, 0x70, 0x3d, 0x0a, 0xaa, 0x57, 0x83, 0x13, 0x1b, 0xf5,
- 0xd2, 0x52, 0x4d, 0xc7, 0xcd, 0xa5, 0x51, 0xaf, 0xeb, 0x65, 0x24, 0xf7, 0x1f, 0xc2, 0xbb, 0x3f,
- 0xc8, 0x2a, 0xc7, 0x7c, 0x23, 0xcb, 0x89, 0x91, 0xff, 0x5f, 0x09, 0xbb, 0xb9, 0x45, 0x1a, 0xc6,
- 0xd2, 0x1a, 0x2f, 0x0e, 0x5f, 0x10, 0xf2, 0x6c, 0x13, 0xe2, 0x24, 0x1d, 0x1e, 0xdf, 0x37, 0x02,
- 0x1e, 0x57, 0x83, 0x13, 0x2c, 0x1e, 0xd8, 0xc3, 0x2d, 0x1e, 0x86, 0x3f, 0x96, 0xc1, 0xd4, 0x9a,
- 0xb5, 0x8d, 0xdd, 0x8b, 0xf7, 0x22, 0x03, 0x65, 0x01, 0x48, 0xa1, 0xf7, 0x8e, 0x64, 0x75, 0xb8,
- 0xc9, 0xbc, 0x24, 0xbe, 0xde, 0x22, 0x34, 0x61, 0xff, 0x62, 0xea, 0x9e, 0x89, 0x32, 0x1c, 0xd3,
- 0x33, 0xbd, 0x50, 0x4a, 0xd3, 0x33, 0x0d, 0xa6, 0x95, 0x0a, 0x26, 0x64, 0x3a, 0xb8, 0xf0, 0xd9,
- 0x7b, 0x96, 0x0b, 0x3b, 0xd8, 0x4c, 0xc4, 0xf5, 0x96, 0x0d, 0x3e, 0xf1, 0xac, 0x7b, 0x38, 0x30,
- 0x59, 0x2f, 0x9b, 0x39, 0x30, 0x1d, 0x8e, 0x26, 0x78, 0xc3, 0x07, 0xbd, 0xd4, 0xeb, 0x8d, 0x8d,
- 0x95, 0xd5, 0xcd, 0x65, 0x43, 0xd7, 0xe9, 0x12, 0xf1, 0xb6, 0xf6, 0x2e, 0x09, 0xcc, 0xd3, 0x1a,
- 0x52, 0xef, 0x89, 0xeb, 0x62, 0x41, 0xa6, 0x70, 0xfc, 0x07, 0x3b, 0x3d, 0x59, 0xe1, 0xe1, 0x78,
- 0x62, 0x92, 0x08, 0x13, 0xdd, 0x27, 0xde, 0x14, 0x36, 0xa1, 0xfb, 0x38, 0x50, 0x9e, 0x92, 0x9a,
- 0x62, 0xf6, 0x53, 0x94, 0x97, 0x00, 0x50, 0x6c, 0xc2, 0x2e, 0x6c, 0xfb, 0xda, 0x87, 0xe4, 0x91,
- 0xdb, 0x44, 0x9c, 0xb9, 0x2d, 0xa7, 0x32, 0xb7, 0xf3, 0x19, 0x98, 0xdb, 0x85, 0xd1, 0xcd, 0xed,
- 0x62, 0x5a, 0x73, 0x7b, 0x2a, 0xce, 0xdc, 0x4e, 0xe8, 0x35, 0xa6, 0x13, 0x7b, 0x8d, 0x3e, 0x43,
- 0xdd, 0xa8, 0x51, 0x93, 0x9e, 0x4f, 0xa4, 0xca, 0xfc, 0xf1, 0x62, 0xda, 0x71, 0x9c, 0x00, 0x7f,
- 0xb4, 0xe6, 0xf9, 0x8f, 0x15, 0xd2, 0x8c, 0xfb, 0x03, 0x39, 0x4e, 0xd7, 0x4a, 0x5e, 0x99, 0xcf,
- 0x60, 0xd1, 0x51, 0xbd, 0x01, 0x5c, 0x17, 0x3d, 0x6f, 0xea, 0xcf, 0xaa, 0x36, 0x5b, 0x4d, 0x6c,
- 0x93, 0x97, 0x1b, 0x86, 0xb1, 0xb1, 0x4e, 0xb6, 0xab, 0x4e, 0x01, 0x35, 0xa2, 0x62, 0x6c, 0xd4,
- 0x89, 0x05, 0xbe, 0xcd, 0x53, 0x5f, 0xae, 0xd6, 0x2b, 0x9b, 0xe1, 0xa8, 0x56, 0x5f, 0x6e, 0x28,
- 0x3b, 0xea, 0x22, 0xb8, 0x85, 0xa1, 0x8e, 0x3b, 0x40, 0x52, 0x42, 0xa9, 0x5e, 0xd9, 0x5c, 0xab,
- 0xeb, 0x6b, 0x8d, 0x7a, 0xb5, 0x8c, 0xd3, 0x9b, 0x7a, 0x4b, 0xb1, 0x90, 0x29, 0xd8, 0x67, 0xf3,
- 0x37, 0xf5, 0x92, 0x51, 0x5e, 0xd5, 0x0d, 0x52, 0xe4, 0x03, 0xea, 0x4d, 0xe0, 0x6c, 0xa9, 0xde,
- 0x68, 0xa1, 0x94, 0x52, 0xfd, 0x42, 0xeb, 0xc2, 0xba, 0xbe, 0xb9, 0x6e, 0x34, 0xca, 0x7a, 0xb3,
- 0x89, 0x46, 0x52, 0x3a, 0x43, 0x50, 0xba, 0xea, 0xd3, 0xc1, 0x5d, 0x0c, 0x6b, 0x7a, 0x0b, 0xfb,
- 0x46, 0xac, 0x35, 0xb0, 0x7b, 0x5c, 0x45, 0xdf, 0x5c, 0x2d, 0x35, 0x37, 0xab, 0xf5, 0x72, 0x63,
- 0x6d, 0xbd, 0xd4, 0xaa, 0xa2, 0x01, 0x77, 0xdd, 0x68, 0xb4, 0x1a, 0x9b, 0xe7, 0x74, 0xa3, 0x59,
- 0x6d, 0xd4, 0x15, 0x1b, 0x55, 0x99, 0x19, 0xa1, 0x03, 0x4b, 0xc9, 0x51, 0xaf, 0x05, 0xa7, 0x83,
- 0xf4, 0x5a, 0x03, 0x09, 0x9a, 0x99, 0x33, 0xf4, 0x58, 0x3b, 0xab, 0xd9, 0x6a, 0x18, 0x64, 0xd6,
- 0xb0, 0x56, 0x5d, 0x31, 0xd0, 0x54, 0x47, 0x79, 0x76, 0xa6, 0x73, 0x8a, 0x7f, 0x91, 0x40, 0xbe,
- 0xe9, 0x3b, 0x3d, 0xed, 0x3b, 0xa3, 0xee, 0xf0, 0x0c, 0x00, 0x2e, 0x76, 0x85, 0xa8, 0x98, 0xbe,
- 0x49, 0x57, 0x6b, 0x98, 0x14, 0xed, 0xd7, 0x85, 0xf7, 0x6f, 0x23, 0xab, 0xcb, 0xe9, 0xc5, 0x0c,
- 0x1f, 0xdf, 0x14, 0x3b, 0x0e, 0x19, 0x4f, 0x28, 0x5d, 0x7b, 0xf8, 0x91, 0x51, 0x76, 0x68, 0x35,
- 0x70, 0x8a, 0x81, 0x15, 0xc9, 0x3f, 0x50, 0x19, 0xa8, 0x3e, 0x0a, 0x5c, 0xd5, 0xa7, 0x7c, 0x58,
- 0xe7, 0xb6, 0xd4, 0xef, 0x00, 0x8f, 0x61, 0xd4, 0x5f, 0x5f, 0x6b, 0x9c, 0xd3, 0x43, 0x45, 0xaf,
- 0x94, 0x5a, 0x25, 0x65, 0x5b, 0xfb, 0xbc, 0x0c, 0xf2, 0x6b, 0xce, 0xe5, 0xfe, 0x6d, 0x73, 0x1b,
- 0x5e, 0x61, 0xf6, 0x56, 0x82, 0x47, 0xfe, 0x08, 0x96, 0x90, 0xd8, 0xd7, 0xe2, 0x5d, 0x64, 0xbe,
- 0x20, 0xa5, 0x11, 0xfb, 0xda, 0x61, 0xfd, 0x62, 0xfe, 0x66, 0x14, 0xb1, 0xc7, 0x88, 0x16, 0xaa,
- 0x67, 0xc1, 0x99, 0xe8, 0x45, 0xb5, 0xa2, 0xd7, 0x5b, 0xd5, 0xe5, 0x0b, 0x91, 0x70, 0xab, 0x86,
- 0x90, 0xf8, 0x87, 0x75, 0x73, 0xc9, 0x6b, 0x05, 0xa7, 0xc1, 0xc9, 0xe8, 0xdd, 0x8a, 0xde, 0x0a,
- 0xde, 0x3c, 0xa0, 0x3d, 0x54, 0x00, 0x73, 0xa4, 0xdb, 0xdf, 0xe8, 0x75, 0x90, 0xf5, 0xfd, 0xa4,
- 0x08, 0xdd, 0x9b, 0xc1, 0xf1, 0xea, 0xfa, 0x72, 0xb3, 0xe9, 0x3b, 0xae, 0xb9, 0x0d, 0xf1, 0x38,
- 0x4a, 0xa4, 0xd5, 0x9f, 0xac, 0xbd, 0x57, 0x78, 0xf5, 0x9f, 0x1f, 0x6a, 0x48, 0x99, 0x31, 0xa8,
- 0x7f, 0x45, 0x68, 0xb5, 0x5e, 0x80, 0x60, 0x3a, 0xf4, 0x1f, 0x18, 0x73, 0x9b, 0x8b, 0xc7, 0x65,
- 0xeb, 0xec, 0xf3, 0x25, 0x30, 0xd3, 0xb2, 0x76, 0xe1, 0x73, 0x1c, 0x1b, 0x7a, 0xea, 0x14, 0x90,
- 0x57, 0xd6, 0x5a, 0xca, 0x31, 0xf4, 0x07, 0x4d, 0x8b, 0x72, 0xf8, 0x8f, 0x8e, 0x0a, 0x40, 0x7f,
- 0x4a, 0x2d, 0x45, 0x46, 0x7f, 0xd6, 0xf4, 0x96, 0x92, 0x47, 0x7f, 0xea, 0x7a, 0x4b, 0x29, 0xa0,
- 0x3f, 0xeb, 0xb5, 0x96, 0x52, 0x44, 0x7f, 0xaa, 0xcd, 0x96, 0x32, 0x85, 0xfe, 0x2c, 0x35, 0x5b,
- 0xca, 0x34, 0xfa, 0x73, 0xae, 0xd9, 0x52, 0x66, 0xd0, 0x9f, 0x72, 0xab, 0xa5, 0x00, 0xf4, 0xe7,
- 0xbe, 0x66, 0x4b, 0x99, 0x45, 0x7f, 0x4a, 0xe5, 0x96, 0x32, 0x87, 0xff, 0xe8, 0x2d, 0x65, 0x1e,
- 0xfd, 0x69, 0x36, 0x5b, 0xca, 0x02, 0xa6, 0xdc, 0x6c, 0x29, 0xc7, 0x71, 0x59, 0xd5, 0x96, 0xa2,
- 0xa0, 0x3f, 0xab, 0xcd, 0x96, 0x72, 0x02, 0x67, 0x6e, 0xb6, 0x14, 0x15, 0x17, 0xda, 0x6c, 0x29,
- 0x57, 0xe1, 0x3c, 0xcd, 0x96, 0x72, 0x12, 0x17, 0xd1, 0x6c, 0x29, 0x57, 0x63, 0x36, 0xf4, 0x96,
- 0x72, 0x0a, 0xe7, 0x31, 0x5a, 0xca, 0xa3, 0xf0, 0xab, 0x7a, 0x4b, 0x39, 0x8d, 0x19, 0xd3, 0x5b,
- 0xca, 0x35, 0xf8, 0x8f, 0xd1, 0x52, 0x34, 0xfc, 0xaa, 0xd4, 0x52, 0x1e, 0xad, 0x3d, 0x06, 0xcc,
- 0xac, 0x40, 0x9f, 0x80, 0xa8, 0x29, 0x40, 0x5e, 0x81, 0x3e, 0x3b, 0x11, 0x7f, 0x55, 0x1e, 0x3c,
- 0x8a, 0x2e, 0xde, 0x2c, 0xbb, 0xce, 0x6e, 0x0d, 0x6e, 0x9b, 0xed, 0x7d, 0xfd, 0x41, 0x64, 0xf0,
- 0x69, 0x2f, 0xce, 0x71, 0x2b, 0xda, 0xbd, 0xa8, 0x37, 0xc2, 0xff, 0x13, 0x0d, 0xe4, 0x60, 0x8d,
- 0x5a, 0xe6, 0xd7, 0xa8, 0xe3, 0x4c, 0xc2, 0xbc, 0xc8, 0x44, 0xf2, 0x1f, 0xd8, 0xc6, 0xc0, 0x6d,
- 0x48, 0xe5, 0xfa, 0x36, 0xa4, 0x50, 0x0b, 0xeb, 0x41, 0xd7, 0x73, 0x6c, 0xb3, 0xdb, 0xa4, 0xee,
- 0x47, 0x64, 0xae, 0xda, 0x9f, 0xac, 0x3e, 0x33, 0x68, 0x54, 0xc4, 0xe0, 0x7b, 0x5a, 0xd2, 0xf2,
- 0x56, 0xbf, 0x84, 0x62, 0xda, 0xd7, 0xa7, 0xc3, 0xf6, 0xd5, 0xe2, 0xda, 0xd7, 0x33, 0x0e, 0x41,
- 0x3b, 0x5d, 0x53, 0xab, 0x8e, 0x36, 0x15, 0x8d, 0x9c, 0xf3, 0x83, 0xfd, 0x2f, 0x59, 0xfb, 0xbc,
- 0x04, 0x4e, 0xe9, 0xf6, 0xa0, 0xa9, 0x0c, 0xab, 0x46, 0x6f, 0x65, 0xa1, 0x59, 0xe7, 0x45, 0x7a,
- 0xd7, 0xc0, 0x6a, 0x0f, 0xa6, 0x19, 0x23, 0xd1, 0xcf, 0x86, 0x12, 0x6d, 0x72, 0x12, 0xbd, 0x77,
- 0x74, 0xd2, 0xe9, 0x04, 0x5a, 0x1f, 0x6b, 0xdf, 0x95, 0xd7, 0xfe, 0x42, 0x02, 0x27, 0x88, 0x07,
- 0xe1, 0x7d, 0x64, 0xe6, 0x84, 0x7b, 0x7b, 0xde, 0xfa, 0xea, 0x46, 0xb3, 0x2c, 0xa2, 0xdf, 0x4c,
- 0x8a, 0xf6, 0x3a, 0x56, 0xe0, 0xf7, 0xf3, 0x02, 0x8f, 0xe9, 0xc7, 0xfb, 0x8b, 0x8b, 0x91, 0xf5,
- 0x6f, 0x84, 0xb2, 0xae, 0x73, 0xb2, 0xbe, 0x6b, 0x24, 0xaa, 0x47, 0x2b, 0xe6, 0xaf, 0xe6, 0xc1,
- 0x63, 0x08, 0x87, 0x54, 0x11, 0x48, 0x3f, 0x58, 0xb2, 0x3b, 0x06, 0xf4, 0x7c, 0xd3, 0xf5, 0xb9,
- 0xd0, 0x2b, 0x7d, 0x53, 0xf3, 0x5c, 0x06, 0x53, 0x73, 0x69, 0xe8, 0xd4, 0x5c, 0x7b, 0x0f, 0x6b,
- 0xe0, 0x9d, 0xe7, 0x91, 0x2d, 0x25, 0x60, 0x10, 0x53, 0xc3, 0xb8, 0x16, 0x15, 0x5a, 0x7e, 0xdf,
- 0xc3, 0xa1, 0xbc, 0x7c, 0xe8, 0x12, 0xd2, 0x21, 0xfe, 0xeb, 0xe3, 0xb5, 0xc4, 0xf3, 0xec, 0x3b,
- 0xde, 0x6c, 0x54, 0x3a, 0x99, 0x4e, 0xa1, 0x5e, 0x3a, 0x0d, 0x66, 0x70, 0x97, 0x53, 0xb3, 0xec,
- 0x4b, 0xda, 0x9f, 0xcb, 0x60, 0xae, 0x0e, 0xaf, 0x94, 0x77, 0xcc, 0x6e, 0x17, 0xda, 0xdb, 0x50,
- 0x7b, 0x80, 0xb3, 0xed, 0xcd, 0x5e, 0xaf, 0x1e, 0xed, 0x0f, 0x07, 0x8f, 0xea, 0xbd, 0xa0, 0xe0,
- 0xb5, 0x9d, 0x30, 0xa8, 0xc3, 0x77, 0xc6, 0xac, 0x5e, 0x97, 0xf6, 0xfc, 0x9d, 0x45, 0x5c, 0x56,
- 0xa9, 0x67, 0x35, 0xd1, 0x07, 0x06, 0xf9, 0x8e, 0x8e, 0x93, 0x7f, 0x35, 0xb0, 0x33, 0xce, 0x25,
- 0x74, 0xc6, 0x21, 0xe3, 0x8b, 0x2c, 0xd3, 0x31, 0x8b, 0x24, 0xd7, 0x83, 0xd9, 0x76, 0x90, 0x25,
- 0x3c, 0xa5, 0xc7, 0x26, 0x69, 0x7f, 0x99, 0xaa, 0xbb, 0x16, 0x2a, 0x3c, 0x9d, 0x56, 0xc1, 0x31,
- 0x9b, 0x9a, 0x57, 0x83, 0x13, 0xad, 0x46, 0x63, 0x73, 0xad, 0x54, 0xbf, 0x10, 0xc5, 0x56, 0xd9,
- 0xd2, 0x5e, 0x99, 0x07, 0x0b, 0x4d, 0xa7, 0x7b, 0x19, 0x46, 0x38, 0x57, 0x39, 0xf7, 0x4f, 0x56,
- 0x4e, 0xb9, 0x03, 0x72, 0x52, 0x4f, 0x81, 0xa2, 0x69, 0x7b, 0x57, 0x60, 0x60, 0xfe, 0xd3, 0x27,
- 0x0a, 0xe3, 0x47, 0xd8, 0x8e, 0xc0, 0xe0, 0x61, 0xbc, 0x7b, 0x88, 0x24, 0x79, 0xae, 0x62, 0x80,
- 0x3c, 0x0b, 0xe6, 0x3c, 0xe2, 0x25, 0xd2, 0x62, 0x9c, 0x81, 0xb8, 0x34, 0xcc, 0x22, 0x71, 0x53,
- 0x92, 0x29, 0x8b, 0xf8, 0x49, 0x7b, 0x38, 0xec, 0x3f, 0x36, 0x38, 0x88, 0x4b, 0x87, 0x61, 0x2c,
- 0x1d, 0xc8, 0xaf, 0x1e, 0xf7, 0x24, 0xfe, 0x34, 0x38, 0x19, 0x9c, 0x50, 0x2f, 0xaf, 0x96, 0x6a,
- 0x35, 0xbd, 0xbe, 0xa2, 0x6f, 0x56, 0x2b, 0x64, 0x3f, 0x39, 0x4a, 0x29, 0xb5, 0x5a, 0xfa, 0xda,
- 0x7a, 0xab, 0xb9, 0xa9, 0x3f, 0xab, 0xac, 0xeb, 0x15, 0xec, 0x80, 0x8d, 0x4f, 0x50, 0x06, 0xae,
- 0xf2, 0xa5, 0x7a, 0xf3, 0xbc, 0x6e, 0x28, 0x3b, 0x67, 0x4b, 0x60, 0x96, 0x19, 0x28, 0x10, 0x77,
- 0x15, 0xb8, 0x65, 0xee, 0x75, 0xa9, 0x39, 0xae, 0x1c, 0x43, 0xdc, 0x61, 0xd9, 0x34, 0xec, 0xee,
- 0xbe, 0x92, 0x53, 0x15, 0x30, 0xc7, 0x8e, 0x09, 0x8a, 0xa4, 0xbd, 0xf3, 0x5a, 0x30, 0x73, 0xde,
- 0x71, 0x2f, 0x61, 0xaf, 0x61, 0xed, 0x03, 0x24, 0x06, 0x5b, 0x10, 0x51, 0x82, 0x31, 0xc0, 0x5e,
- 0x2d, 0xee, 0x26, 0x16, 0x50, 0x5b, 0x1c, 0x1a, 0x35, 0xe2, 0x7a, 0x30, 0x7b, 0x25, 0xc8, 0x1d,
- 0xb5, 0x74, 0x26, 0x49, 0xfb, 0x45, 0x31, 0xc7, 0xaf, 0xe1, 0x45, 0x66, 0xbf, 0xea, 0xff, 0x76,
- 0x09, 0x14, 0x57, 0xa0, 0x5f, 0xea, 0x76, 0x59, 0xb9, 0xbd, 0x5c, 0xf8, 0x1c, 0x29, 0x57, 0x89,
- 0x52, 0xb7, 0x1b, 0xdf, 0xa8, 0x18, 0x01, 0x05, 0xe7, 0x9d, 0xb8, 0x34, 0x41, 0x2f, 0xed, 0x21,
- 0x05, 0x66, 0x2f, 0xb1, 0x8f, 0x46, 0xae, 0xd9, 0xaf, 0x67, 0xcc, 0xa4, 0x27, 0x46, 0xf1, 0xf7,
- 0x72, 0xc9, 0x4e, 0x52, 0x41, 0x3e, 0xf5, 0x7e, 0x30, 0xb5, 0xe7, 0xc1, 0xb2, 0xe9, 0x05, 0x43,
- 0x1b, 0x5f, 0xd3, 0xc6, 0xc5, 0x07, 0x60, 0xdb, 0x5f, 0xac, 0xee, 0xa2, 0x89, 0xcf, 0x06, 0xc9,
- 0x18, 0xc6, 0x2b, 0xa2, 0xcf, 0x46, 0x40, 0x01, 0x4d, 0x3b, 0xaf, 0x58, 0xfe, 0x4e, 0x79, 0xc7,
- 0xf4, 0xe9, 0x66, 0x4b, 0xf8, 0xac, 0xbd, 0x64, 0x04, 0x38, 0x13, 0x1d, 0x76, 0x62, 0x8f, 0xa3,
- 0xa7, 0x06, 0x71, 0x0c, 0x5e, 0x36, 0xa3, 0x80, 0xf8, 0xb7, 0x12, 0xc8, 0x37, 0x7a, 0xd0, 0x16,
- 0x3e, 0x7b, 0x19, 0xca, 0x56, 0xea, 0x93, 0xed, 0xc3, 0xe2, 0x6e, 0xc1, 0x61, 0xa5, 0x51, 0xc9,
- 0x31, 0x92, 0xbd, 0x0d, 0xe4, 0x2d, 0x7b, 0xcb, 0xa1, 0x96, 0xed, 0xa3, 0x63, 0x6c, 0x9d, 0xaa,
- 0xbd, 0xe5, 0x18, 0x38, 0xa3, 0xa8, 0x47, 0x70, 0x52, 0xd9, 0xd9, 0x8b, 0xfb, 0xef, 0xa6, 0x41,
- 0x91, 0xa8, 0xb3, 0xf6, 0x32, 0x19, 0xc8, 0xa5, 0x4e, 0x27, 0x46, 0xf0, 0xd2, 0x01, 0xc1, 0x3b,
- 0xf8, 0xb3, 0x10, 0x93, 0xf0, 0x99, 0x0f, 0xbc, 0x26, 0xd8, 0xb7, 0xd3, 0x26, 0x55, 0xea, 0x74,
- 0xe2, 0xcf, 0x2d, 0x84, 0x05, 0x4a, 0x7c, 0x81, 0x6c, 0x0b, 0x97, 0xc5, 0x5a, 0x78, 0xea, 0x81,
- 0x20, 0x96, 0xbf, 0xec, 0x21, 0xfa, 0x07, 0x09, 0x4c, 0xd5, 0x2c, 0xcf, 0x47, 0xd8, 0x94, 0x44,
- 0xb0, 0xb9, 0x16, 0xcc, 0x04, 0xa2, 0x41, 0x5d, 0x1e, 0xea, 0xcf, 0xa3, 0x04, 0x7e, 0x26, 0x7e,
- 0x1f, 0x8f, 0xce, 0x93, 0x93, 0x6b, 0x4f, 0xb9, 0x88, 0x3f, 0xd3, 0x16, 0x15, 0x2b, 0xf5, 0x17,
- 0xfb, 0x4b, 0xa1, 0xc0, 0xd7, 0x38, 0x81, 0xdf, 0x39, 0x4a, 0x91, 0xd9, 0x0b, 0xfd, 0xf7, 0x25,
- 0x00, 0x50, 0xd9, 0xf4, 0xe0, 0xf0, 0xe3, 0xb8, 0x70, 0x20, 0x09, 0xd2, 0x7d, 0x25, 0x2b, 0xdd,
- 0x35, 0x5e, 0xba, 0xdf, 0x3d, 0xbc, 0xaa, 0x49, 0x07, 0x84, 0x55, 0x05, 0xc8, 0x56, 0x28, 0x5a,
- 0xf4, 0x57, 0x7b, 0x7b, 0x28, 0xd4, 0x75, 0x4e, 0xa8, 0x77, 0x8f, 0x58, 0x52, 0xf6, 0x72, 0xfd,
- 0x23, 0x09, 0x4c, 0x35, 0xa1, 0x8f, 0xba, 0x49, 0xed, 0x9c, 0x48, 0x0f, 0xcf, 0xb4, 0x6d, 0x49,
- 0xb0, 0x6d, 0x7f, 0x23, 0x27, 0x1a, 0x18, 0x2e, 0x92, 0x0c, 0xe5, 0x29, 0x66, 0xf5, 0xe1, 0xf5,
- 0x42, 0x81, 0xe1, 0x86, 0x51, 0xcb, 0x5e, 0xba, 0x6f, 0x95, 0x42, 0x4f, 0x11, 0xfe, 0x5c, 0x1f,
- 0x6b, 0x16, 0xe7, 0x0e, 0x9a, 0xc5, 0xe2, 0xe7, 0xfa, 0xd8, 0x3a, 0xc6, 0x3b, 0x26, 0xa4, 0x36,
- 0x36, 0xc6, 0xe0, 0x33, 0x30, 0x8a, 0xbc, 0x9e, 0x27, 0x83, 0x22, 0xdd, 0x3c, 0xb8, 0x37, 0x79,
- 0xef, 0x60, 0xf8, 0xd4, 0xe2, 0xfd, 0x23, 0x98, 0x72, 0x49, 0xcb, 0xf2, 0x21, 0x1b, 0x12, 0xc3,
- 0xc6, 0xad, 0xa0, 0x80, 0xa3, 0x66, 0xd3, 0x71, 0x2e, 0x72, 0xf7, 0x08, 0x48, 0xe8, 0xe8, 0xad,
- 0x41, 0x32, 0xa5, 0x46, 0x61, 0x0c, 0x2b, 0xf9, 0xa3, 0xa0, 0xf0, 0x75, 0x15, 0x80, 0xf5, 0xbd,
- 0x8b, 0x5d, 0xcb, 0xdb, 0xb1, 0x6c, 0xec, 0x23, 0x36, 0x47, 0x1f, 0x49, 0xf0, 0xe7, 0x44, 0xf3,
- 0x2f, 0xd6, 0x28, 0x50, 0x80, 0xbc, 0xe7, 0x5a, 0x74, 0x19, 0x00, 0xfd, 0x55, 0xef, 0x09, 0xbd,
- 0x2d, 0xf3, 0x7d, 0x81, 0x5b, 0x90, 0x18, 0x22, 0x0e, 0x16, 0x99, 0xd2, 0x23, 0xaf, 0x4b, 0x36,
- 0xc2, 0x77, 0x81, 0x8f, 0xf0, 0xcd, 0x9d, 0xe6, 0x2e, 0xf6, 0x9d, 0xe6, 0x46, 0x38, 0x7a, 0xd6,
- 0x73, 0x20, 0x76, 0x3d, 0x92, 0x0d, 0xfc, 0x1f, 0x7d, 0x81, 0xdd, 0x83, 0xb0, 0x77, 0x1e, 0x39,
- 0x33, 0x10, 0x25, 0xb0, 0x7d, 0xde, 0x8c, 0x60, 0x9f, 0xf7, 0xd9, 0x68, 0xee, 0xf3, 0xfd, 0x82,
- 0x86, 0x73, 0x0a, 0xc9, 0xdd, 0x02, 0x14, 0xcb, 0x6e, 0x77, 0xf7, 0x3a, 0xe4, 0xd8, 0x09, 0xea,
- 0xdb, 0xe8, 0x69, 0x94, 0x03, 0xe9, 0xda, 0xc7, 0x85, 0xc3, 0x72, 0x32, 0x12, 0x4f, 0x9c, 0xd3,
- 0x50, 0x7e, 0xa4, 0x90, 0x1f, 0x66, 0x47, 0x38, 0xa9, 0x3f, 0x1e, 0x46, 0x3f, 0x9d, 0x66, 0xef,
- 0x8e, 0xb0, 0x7a, 0xa3, 0x82, 0x85, 0xe0, 0x90, 0x7c, 0x63, 0xe9, 0x3e, 0xbd, 0xdc, 0x52, 0xe0,
- 0xc1, 0x83, 0xf3, 0xf8, 0x88, 0x3c, 0x39, 0x0e, 0x1f, 0xad, 0xd0, 0x68, 0xff, 0x4b, 0x02, 0x45,
- 0x6a, 0x7c, 0xdc, 0x7b, 0x48, 0x40, 0xb5, 0x57, 0x8d, 0x02, 0x49, 0x62, 0xac, 0x92, 0xcf, 0xa4,
- 0x05, 0x60, 0x0c, 0xe6, 0xc6, 0x85, 0xcc, 0x00, 0xd0, 0xfe, 0x59, 0x02, 0x79, 0x64, 0x14, 0x89,
- 0x45, 0x82, 0xf8, 0xb4, 0xb0, 0x83, 0x30, 0x23, 0x00, 0x44, 0x3e, 0x46, 0xbf, 0x97, 0xc0, 0x4c,
- 0x8f, 0x64, 0x0c, 0xe3, 0x90, 0xdc, 0x28, 0xd0, 0x35, 0x41, 0x23, 0xfa, 0x4c, 0x7b, 0x9f, 0xd0,
- 0xf1, 0x87, 0x64, 0x7e, 0xd2, 0xc1, 0xa1, 0x8f, 0x23, 0x68, 0xc4, 0x96, 0xf6, 0x6f, 0x12, 0x00,
- 0x06, 0xf4, 0x9c, 0xee, 0x65, 0xb8, 0xe1, 0x5a, 0xda, 0xa3, 0x23, 0x00, 0x68, 0xb3, 0xcf, 0x45,
- 0xcd, 0xfe, 0x73, 0x92, 0xa8, 0x2b, 0x30, 0xa7, 0x79, 0x01, 0xf1, 0x18, 0xf1, 0x3f, 0x1d, 0x4c,
- 0x51, 0x39, 0x52, 0x0b, 0x53, 0x4c, 0xf8, 0xc1, 0x47, 0xda, 0x07, 0x85, 0x5c, 0x89, 0x45, 0x38,
- 0x4a, 0x07, 0x40, 0x79, 0x04, 0x00, 0x8e, 0x83, 0xd9, 0x00, 0x80, 0x0d, 0xa3, 0xaa, 0x40, 0xed,
- 0xdd, 0x32, 0xf6, 0xb7, 0x20, 0x43, 0xdd, 0xe1, 0x7b, 0x9a, 0xbf, 0x10, 0x9e, 0xfa, 0x33, 0xf2,
- 0x08, 0xcb, 0xcf, 0x08, 0xa0, 0xdf, 0x16, 0x9a, 0xeb, 0x0b, 0x30, 0xf4, 0x48, 0xe9, 0xaf, 0xce,
- 0xea, 0x60, 0x9e, 0xb3, 0x51, 0xd4, 0xd3, 0xe0, 0x24, 0x97, 0x40, 0xc6, 0xbb, 0x8e, 0x72, 0x4c,
- 0xd5, 0xc0, 0x29, 0xee, 0x0d, 0x7d, 0x80, 0x1d, 0x25, 0xa7, 0x3d, 0xfc, 0x85, 0x5c, 0xb8, 0xfa,
- 0xf3, 0xfe, 0x3c, 0x5d, 0x77, 0xfb, 0x24, 0x1f, 0xfa, 0xb2, 0xed, 0xd8, 0x3e, 0x7c, 0x90, 0x71,
- 0x5a, 0x09, 0x13, 0x12, 0x6d, 0x88, 0xd3, 0x60, 0xca, 0x77, 0x59, 0x47, 0x96, 0xe0, 0x91, 0x55,
- 0xac, 0x02, 0xaf, 0x58, 0x75, 0x70, 0x96, 0x5a, 0x13, 0x06, 0xec, 0x9a, 0x48, 0x86, 0x5e, 0xc9,
- 0xab, 0xc0, 0x1e, 0xb4, 0x3b, 0xd0, 0xf6, 0x09, 0x9f, 0xc1, 0x29, 0x58, 0x81, 0x9c, 0xbc, 0x32,
- 0xde, 0xc3, 0x2b, 0xe3, 0xe3, 0x06, 0x2d, 0xe8, 0x26, 0xac, 0xfe, 0xdd, 0x09, 0x00, 0xa9, 0xdb,
- 0x39, 0x0b, 0x5e, 0xa1, 0x6a, 0x78, 0x4d, 0xdf, 0x1a, 0x60, 0x23, 0xcc, 0x60, 0x30, 0x99, 0xb5,
- 0x2f, 0x87, 0xea, 0xf7, 0x0c, 0x4e, 0xfd, 0x6e, 0x15, 0x64, 0x21, 0x9d, 0xd6, 0xf5, 0x46, 0xd0,
- 0xba, 0x79, 0x30, 0x13, 0xed, 0x2d, 0xcb, 0xea, 0x35, 0xe0, 0xea, 0xc0, 0xdf, 0xb8, 0xae, 0xeb,
- 0x95, 0xe6, 0xe6, 0xc6, 0xfa, 0x8a, 0x51, 0xaa, 0xe8, 0x0a, 0x40, 0xfa, 0x49, 0xf4, 0x32, 0x74,
- 0x13, 0xce, 0x6b, 0x7f, 0x20, 0x81, 0x02, 0x3e, 0xc2, 0xad, 0x7d, 0xef, 0x98, 0x34, 0xc7, 0xe3,
- 0x5c, 0xa0, 0xc2, 0x71, 0x57, 0xfc, 0x42, 0x13, 0x2a, 0x4c, 0xcc, 0xd5, 0xa1, 0x2e, 0x34, 0x49,
- 0x20, 0x94, 0xfd, 0xbc, 0x08, 0x35, 0xc9, 0xe6, 0x8e, 0x73, 0xe5, 0xbf, 0x72, 0x93, 0x44, 0xf5,
- 0x3f, 0xe2, 0x26, 0x39, 0x80, 0x85, 0x89, 0x37, 0xc9, 0x01, 0xed, 0x2e, 0xa1, 0x99, 0x6a, 0x1f,
- 0x29, 0x84, 0xb3, 0xc1, 0x4f, 0x48, 0x87, 0xda, 0x09, 0x2b, 0x81, 0x79, 0xcb, 0xf6, 0xa1, 0x6b,
- 0x9b, 0xdd, 0xe5, 0xae, 0xb9, 0x1d, 0xd8, 0xa7, 0xfd, 0xdb, 0x1f, 0x55, 0x26, 0x8f, 0xc1, 0x7f,
- 0xa1, 0x9e, 0x01, 0xc0, 0x87, 0xbb, 0xbd, 0xae, 0xe9, 0x47, 0xaa, 0xc7, 0xa4, 0xb0, 0xda, 0x97,
- 0xe7, 0xb5, 0xef, 0x76, 0x70, 0x15, 0x01, 0xad, 0xb5, 0xdf, 0x83, 0x1b, 0xb6, 0xf5, 0xec, 0x3d,
- 0x1c, 0x29, 0x99, 0xe8, 0xe8, 0xa0, 0x57, 0xdc, 0x7e, 0x50, 0x91, 0xdf, 0x0f, 0x52, 0xef, 0x06,
- 0xd7, 0xe0, 0x20, 0xd8, 0xf8, 0xc6, 0x90, 0xf3, 0x56, 0x67, 0x1b, 0xfa, 0xd5, 0xad, 0x35, 0xcb,
- 0xf3, 0x2c, 0x7b, 0x1b, 0x4f, 0xce, 0xa7, 0x8d, 0xf8, 0x0c, 0xda, 0xdf, 0x0a, 0x47, 0x61, 0x0a,
- 0xfa, 0x8c, 0x21, 0x51, 0x98, 0xc2, 0x76, 0x2a, 0xf7, 0xb5, 0xd3, 0x70, 0x8d, 0x27, 0x2f, 0xb0,
- 0xc6, 0xc3, 0x62, 0x5a, 0x10, 0x5c, 0x2b, 0x78, 0xad, 0x50, 0x98, 0xa7, 0xa4, 0x6a, 0x4c, 0x60,
- 0x4d, 0x48, 0x06, 0x0b, 0xa4, 0xe8, 0x25, 0xc7, 0xb9, 0xb4, 0x6b, 0xba, 0x97, 0xb4, 0x9f, 0x38,
- 0xdc, 0x9e, 0x6e, 0xe2, 0x5e, 0x56, 0xdc, 0x06, 0x6d, 0x9f, 0xf2, 0xe6, 0xfb, 0x95, 0x57, 0xfb,
- 0xac, 0xf0, 0x94, 0x84, 0x93, 0x67, 0x50, 0xa9, 0xc9, 0x6c, 0x76, 0x89, 0x1d, 0x76, 0x14, 0x61,
- 0x30, 0x7b, 0xe0, 0x7f, 0x33, 0x04, 0x3e, 0x18, 0x47, 0xd8, 0x7d, 0x82, 0x71, 0xe2, 0xae, 0x7d,
- 0x65, 0x34, 0xec, 0x02, 0xbe, 0x46, 0xc0, 0x4e, 0x01, 0xf2, 0xa5, 0xd0, 0x35, 0x09, 0xfd, 0x65,
- 0x2b, 0x94, 0xcf, 0x0e, 0xcd, 0x18, 0x96, 0x27, 0x82, 0xe6, 0x49, 0x9e, 0x85, 0x46, 0x2f, 0x53,
- 0x4c, 0xbf, 0x24, 0xbc, 0xff, 0x36, 0x50, 0x40, 0x84, 0xbb, 0xc9, 0xb4, 0x4a, 0xb1, 0xcd, 0x3b,
- 0x71, 0x36, 0xb3, 0x47, 0xf3, 0xc5, 0x05, 0x30, 0x13, 0x44, 0xc3, 0xc2, 0xf7, 0x0b, 0x86, 0x18,
- 0x9e, 0x02, 0x45, 0xcf, 0xd9, 0x73, 0xdb, 0x90, 0xee, 0x88, 0xd2, 0xa7, 0x11, 0x76, 0xef, 0x86,
- 0x9a, 0x0b, 0x07, 0x2c, 0x92, 0x7c, 0x6a, 0x8b, 0x24, 0xde, 0xde, 0x4d, 0xb0, 0x1f, 0xb4, 0x97,
- 0x08, 0x5f, 0x02, 0xc2, 0x61, 0xd6, 0x84, 0xfe, 0x23, 0xd1, 0x08, 0xf8, 0x35, 0xa1, 0xbd, 0xa1,
- 0x21, 0x35, 0x49, 0xa7, 0x72, 0x8d, 0x11, 0xec, 0xe0, 0x47, 0x83, 0x47, 0x05, 0x39, 0xa8, 0x01,
- 0x8c, 0x0d, 0xde, 0x0d, 0xa3, 0xa6, 0xc8, 0xda, 0xf3, 0xf2, 0x40, 0x21, 0xac, 0x35, 0x42, 0x5b,
- 0x50, 0x7b, 0x79, 0xee, 0xa8, 0x0d, 0xde, 0xf8, 0x19, 0xec, 0xef, 0x4a, 0xa2, 0xa1, 0xc3, 0x39,
- 0xc1, 0x47, 0xb5, 0x8b, 0xd1, 0xa4, 0x11, 0x9a, 0x59, 0x82, 0xf2, 0x69, 0x6f, 0xc9, 0x89, 0x44,
- 0x22, 0x17, 0x63, 0x31, 0xfb, 0x5e, 0xe9, 0x1b, 0xf9, 0x20, 0xa8, 0xe1, 0xb2, 0xeb, 0xec, 0x6e,
- 0xb8, 0x5d, 0xed, 0xdf, 0x85, 0x2e, 0x7a, 0x88, 0x99, 0x5d, 0x48, 0xf1, 0xb3, 0x0b, 0xbc, 0x22,
- 0xdd, 0x8d, 0x36, 0xc6, 0xba, 0x23, 0x0c, 0xdf, 0xea, 0x4d, 0x60, 0xc1, 0xec, 0x74, 0xd6, 0xcd,
- 0x6d, 0x58, 0x46, 0xd3, 0x76, 0xdb, 0xa7, 0x01, 0xcf, 0xfa, 0x52, 0x13, 0xa7, 0x32, 0x7c, 0x1f,
- 0x39, 0x75, 0xc0, 0x2a, 0x15, 0x5f, 0x86, 0xe5, 0x40, 0xa4, 0xf2, 0x9b, 0xc8, 0xf0, 0x87, 0x86,
- 0x8c, 0xf6, 0x8e, 0x19, 0x85, 0x67, 0xa4, 0x4f, 0x82, 0x9e, 0x59, 0x02, 0x7c, 0x67, 0xaf, 0x79,
- 0xbf, 0x22, 0x81, 0x29, 0x84, 0x47, 0xa9, 0xd3, 0xd1, 0x1e, 0xcb, 0x45, 0x31, 0x8d, 0xf5, 0x8d,
- 0x7b, 0xa1, 0xb0, 0x53, 0x62, 0x50, 0x43, 0x42, 0x3f, 0x06, 0x93, 0x48, 0x88, 0x12, 0x27, 0x44,
- 0x31, 0xdf, 0xc3, 0xc4, 0x22, 0xb2, 0x17, 0xdf, 0xa7, 0x25, 0x30, 0x1f, 0xcc, 0x33, 0x96, 0xa1,
- 0xdf, 0xde, 0xd1, 0xee, 0x14, 0x5d, 0xe7, 0xa2, 0x2d, 0x31, 0xdc, 0x12, 0xee, 0x6a, 0xdf, 0xca,
- 0xa5, 0x54, 0x79, 0xae, 0xe4, 0x98, 0x45, 0xc2, 0x54, 0xba, 0x98, 0x44, 0x30, 0x7b, 0x61, 0x7e,
- 0x59, 0x02, 0xa0, 0xe5, 0x84, 0x93, 0xe5, 0x43, 0x48, 0xf2, 0x27, 0x85, 0x77, 0x8b, 0x69, 0xc5,
- 0xa3, 0x62, 0xd3, 0xf7, 0x1c, 0x82, 0xae, 0x55, 0xc3, 0x4a, 0x9a, 0x48, 0x5b, 0x9f, 0xa9, 0xec,
- 0xf5, 0xba, 0x56, 0xdb, 0xf4, 0xfb, 0xfd, 0x01, 0xe3, 0xc5, 0x8b, 0x2f, 0xe7, 0x4e, 0x65, 0x34,
- 0x86, 0x65, 0xc4, 0xc8, 0x92, 0x44, 0xfd, 0x91, 0x82, 0xa8, 0x3f, 0x82, 0x3e, 0x3e, 0x43, 0x88,
- 0x4f, 0x40, 0x3d, 0x65, 0x70, 0xbc, 0xd1, 0x83, 0xf6, 0x92, 0x0b, 0xcd, 0x4e, 0xdb, 0xdd, 0xdb,
- 0xbd, 0xe8, 0xb1, 0xce, 0xac, 0xc9, 0x3a, 0xca, 0xac, 0x5c, 0x4b, 0xdc, 0xca, 0xb5, 0xf6, 0xc3,
- 0xb2, 0x68, 0x5c, 0x36, 0x66, 0x7f, 0x85, 0xe1, 0x61, 0x84, 0xa1, 0x2e, 0x95, 0x0b, 0x56, 0xdf,
- 0x22, 0x75, 0x3e, 0xcd, 0x22, 0xf5, 0x9b, 0x85, 0xa2, 0xbc, 0x09, 0xd5, 0x6b, 0x22, 0x9e, 0x74,
- 0x0b, 0x4d, 0xe8, 0xc7, 0xc0, 0x7b, 0x23, 0x98, 0xbf, 0x18, 0xbd, 0x09, 0x21, 0xe6, 0x13, 0x07,
- 0xf8, 0xb7, 0xbe, 0x35, 0xed, 0x0a, 0x0d, 0xcf, 0x42, 0x0c, 0xba, 0x21, 0x82, 0x92, 0x88, 0x13,
- 0x5d, 0xaa, 0xe5, 0x96, 0xc4, 0xf2, 0xb3, 0x47, 0xe1, 0xe3, 0x12, 0x98, 0xc5, 0x57, 0x8e, 0x2f,
- 0xed, 0xe3, 0x63, 0x9d, 0x82, 0x46, 0xc9, 0x8b, 0x59, 0x31, 0xab, 0x20, 0xdf, 0xb5, 0xec, 0x4b,
- 0x81, 0xf7, 0x23, 0xfa, 0x1f, 0x5d, 0x58, 0x2a, 0x0d, 0xb8, 0xb0, 0x34, 0xdc, 0x26, 0x09, 0xcb,
- 0x8d, 0x19, 0x4d, 0xdf, 0x90, 0x13, 0xb9, 0xb0, 0x74, 0x28, 0xb9, 0xec, 0xc5, 0xf8, 0xd7, 0x79,
- 0x50, 0x6c, 0x42, 0xd3, 0x6d, 0xef, 0x68, 0xef, 0x97, 0x06, 0x4e, 0x25, 0xa6, 0xf9, 0xa9, 0xc4,
- 0x32, 0x98, 0xda, 0xb2, 0xba, 0x3e, 0x74, 0x89, 0x47, 0x38, 0xdb, 0xb5, 0x93, 0x26, 0xbe, 0xd4,
- 0x75, 0xda, 0x97, 0x16, 0xa9, 0x69, 0xbf, 0x18, 0x44, 0x8f, 0x5e, 0x5c, 0xc6, 0x1f, 0x19, 0xc1,
- 0xc7, 0xc8, 0x20, 0xf4, 0x1c, 0xd7, 0x8f, 0xbb, 0x8d, 0x28, 0x86, 0x4a, 0xd3, 0x71, 0x7d, 0x83,
- 0x7c, 0x88, 0x60, 0xde, 0xda, 0xeb, 0x76, 0x5b, 0xf0, 0x41, 0x3f, 0x98, 0xd6, 0x05, 0xcf, 0xc8,
- 0x58, 0x74, 0xb6, 0xb6, 0x3c, 0x48, 0x16, 0x15, 0x0a, 0x06, 0x7d, 0x52, 0x4f, 0x82, 0x42, 0xd7,
- 0xda, 0xb5, 0xc8, 0x44, 0xa4, 0x60, 0x90, 0x07, 0xf5, 0x16, 0xa0, 0x44, 0x73, 0x20, 0xc2, 0xe8,
- 0xe9, 0x22, 0x6e, 0x9a, 0x07, 0xd2, 0x91, 0xce, 0x5c, 0x82, 0xfb, 0xde, 0xe9, 0x29, 0xfc, 0x1e,
- 0xff, 0xe7, 0x8f, 0xdf, 0x88, 0x6c, 0x98, 0x10, 0x89, 0xc7, 0xcf, 0x70, 0x5d, 0xd8, 0x76, 0xdc,
- 0x4e, 0x20, 0x9b, 0xf8, 0x09, 0x06, 0xcd, 0x97, 0x6e, 0x9b, 0x63, 0x60, 0xe1, 0xd9, 0x6b, 0xda,
- 0x7b, 0x8a, 0xa8, 0xdb, 0x44, 0x45, 0x9f, 0xb7, 0xfc, 0x9d, 0x35, 0xe8, 0x9b, 0xda, 0x5f, 0xcb,
- 0x03, 0x35, 0x6e, 0xf6, 0xff, 0xd3, 0xb8, 0x21, 0x1a, 0x47, 0x22, 0x80, 0xf9, 0x7b, 0xae, 0x8d,
- 0xe4, 0x48, 0xbd, 0x6a, 0x99, 0x14, 0xf5, 0x6e, 0x70, 0x4d, 0xf4, 0x14, 0x2c, 0xa5, 0x56, 0x18,
- 0x47, 0xdb, 0x69, 0x23, 0x3e, 0x83, 0xba, 0x0e, 0x6e, 0x20, 0x2f, 0x57, 0x5b, 0x6b, 0xb5, 0x55,
- 0x6b, 0x7b, 0xa7, 0x6b, 0x6d, 0xef, 0xf8, 0x5e, 0xd5, 0xf6, 0x7c, 0x68, 0x76, 0x1a, 0x5b, 0x06,
- 0xb9, 0x47, 0x0c, 0x60, 0x3a, 0x22, 0x59, 0x79, 0x8f, 0x71, 0xb1, 0xd1, 0x8d, 0xd5, 0x94, 0x98,
- 0x96, 0xf2, 0x14, 0xd4, 0x52, 0xbc, 0xbd, 0x6e, 0x88, 0xe9, 0xb5, 0x7d, 0x98, 0x46, 0xaa, 0xbe,
- 0xd7, 0xc5, 0xcd, 0x05, 0x67, 0x4e, 0x3b, 0xce, 0x25, 0x70, 0x92, 0x7d, 0xb3, 0xf9, 0xf7, 0x22,
- 0x28, 0xac, 0xb8, 0x66, 0x6f, 0x47, 0x7b, 0x1e, 0xd3, 0x3f, 0x8f, 0xab, 0x4d, 0x84, 0xda, 0x29,
- 0x0d, 0xd3, 0x4e, 0x79, 0x88, 0x76, 0xe6, 0x19, 0xed, 0x8c, 0x5f, 0x74, 0x3e, 0x0b, 0xe6, 0xda,
- 0x4e, 0xb7, 0x0b, 0xdb, 0x48, 0x1e, 0xd5, 0x0e, 0x5e, 0xed, 0x99, 0x31, 0xb8, 0x34, 0x1c, 0x61,
- 0x1f, 0xfa, 0x4d, 0xb2, 0xc6, 0x4e, 0x94, 0x3e, 0x4a, 0xd0, 0x5e, 0x2e, 0x81, 0xbc, 0xde, 0xd9,
- 0x86, 0xdc, 0x3a, 0x7c, 0x8e, 0x59, 0x87, 0x3f, 0x05, 0x8a, 0xbe, 0xe9, 0x6e, 0x43, 0x3f, 0x58,
- 0x27, 0x20, 0x4f, 0x61, 0xe0, 0x7f, 0x99, 0x09, 0xfc, 0xff, 0xdd, 0x20, 0x8f, 0x64, 0x46, 0x9d,
- 0xe4, 0x6f, 0x18, 0x04, 0x3f, 0x96, 0xfd, 0x22, 0x2a, 0x71, 0x11, 0xd5, 0xda, 0xc0, 0x1f, 0xf4,
- 0x63, 0x5d, 0x38, 0x18, 0x98, 0xf6, 0x5a, 0x30, 0x63, 0xb5, 0x1d, 0xbb, 0xba, 0x6b, 0x6e, 0x43,
- 0x5a, 0xcd, 0x28, 0x21, 0x78, 0xab, 0xef, 0x3a, 0x0f, 0x58, 0x74, 0x51, 0x2b, 0x4a, 0x40, 0x55,
- 0xd8, 0xb1, 0x3a, 0x1d, 0x68, 0xd3, 0x96, 0x4d, 0x9f, 0xce, 0x9e, 0x01, 0x79, 0xc4, 0x03, 0xd2,
- 0x1f, 0x64, 0x2c, 0x28, 0xc7, 0xd4, 0x39, 0xd4, 0xac, 0x48, 0xe3, 0x55, 0x72, 0xfc, 0x9a, 0xab,
- 0x88, 0xd7, 0x10, 0xa9, 0xdc, 0xe0, 0xc6, 0xf5, 0x04, 0x50, 0xb0, 0x9d, 0x0e, 0x1c, 0x3a, 0x08,
- 0x91, 0x5c, 0xea, 0x93, 0x41, 0x01, 0x76, 0x50, 0xaf, 0x20, 0xe3, 0xec, 0x67, 0x92, 0x65, 0x69,
- 0x90, 0xcc, 0xe9, 0x5c, 0x93, 0x06, 0x71, 0x9b, 0x7d, 0x03, 0xfc, 0xd1, 0x29, 0x70, 0x9c, 0xf4,
- 0x01, 0xcd, 0xbd, 0x8b, 0x88, 0xd4, 0x45, 0xa8, 0xbd, 0x7e, 0xf0, 0xc0, 0x75, 0x9c, 0x57, 0xf6,
- 0x93, 0xa0, 0xe0, 0xed, 0x5d, 0x0c, 0x8d, 0x50, 0xf2, 0xc0, 0x36, 0x5d, 0x69, 0x2c, 0xc3, 0x99,
- 0x3c, 0xea, 0x70, 0xc6, 0x0d, 0x4d, 0x72, 0xd0, 0xf8, 0xa3, 0x81, 0x8c, 0x1c, 0xef, 0x08, 0x06,
- 0xb2, 0x41, 0xc3, 0xd0, 0x69, 0x30, 0x65, 0x6e, 0xf9, 0xd0, 0x8d, 0xcc, 0x44, 0xfa, 0x88, 0x86,
- 0xca, 0x8b, 0x70, 0xcb, 0x71, 0x91, 0x58, 0x48, 0x90, 0xd8, 0xf0, 0x99, 0x69, 0xb9, 0x80, 0xdb,
- 0x41, 0xbb, 0x15, 0x9c, 0xb0, 0x9d, 0x0a, 0xec, 0x51, 0x39, 0x13, 0x14, 0xe7, 0xc9, 0x5d, 0xed,
- 0x07, 0x5e, 0x1c, 0xe8, 0x4a, 0x16, 0x0e, 0x76, 0x25, 0xda, 0xe7, 0xd2, 0xce, 0x99, 0xfb, 0x80,
- 0x1e, 0x9b, 0x85, 0xa6, 0x3e, 0x0d, 0xcc, 0x75, 0xa8, 0x87, 0x58, 0xdb, 0x0a, 0x5b, 0x49, 0xec,
- 0x77, 0x5c, 0xe6, 0x48, 0x91, 0xf2, 0xac, 0x22, 0xad, 0x80, 0x69, 0x7c, 0x10, 0x1b, 0x69, 0x52,
- 0xa1, 0xcf, 0x23, 0x1f, 0x4f, 0xeb, 0xc2, 0x4a, 0x31, 0x62, 0x5b, 0x2c, 0xd3, 0x4f, 0x8c, 0xf0,
- 0xe3, 0x74, 0xb3, 0xef, 0x64, 0x09, 0x65, 0xdf, 0x1c, 0x7f, 0xa9, 0x08, 0xae, 0x29, 0xbb, 0x8e,
- 0xe7, 0xe1, 0x63, 0x38, 0xfd, 0x0d, 0xf3, 0x8d, 0x12, 0x77, 0x05, 0xd0, 0x23, 0xba, 0xf9, 0x0d,
- 0x6a, 0x50, 0x93, 0x6b, 0x1a, 0x7f, 0x21, 0x1c, 0xc2, 0x26, 0xdc, 0x7f, 0x88, 0x11, 0xfa, 0x7f,
- 0x8d, 0x46, 0xf2, 0x9e, 0x9c, 0x48, 0x54, 0x9d, 0x94, 0xb2, 0xca, 0xbe, 0xb9, 0x7c, 0x49, 0x02,
- 0x8f, 0xee, 0xe7, 0x66, 0xc3, 0xf6, 0xc2, 0x06, 0x73, 0xdd, 0x90, 0xf6, 0xc2, 0x47, 0x61, 0x49,
- 0xbc, 0xf1, 0x37, 0xa6, 0xee, 0x4c, 0x69, 0x31, 0x8b, 0x25, 0xd1, 0x81, 0x9e, 0xa4, 0x1b, 0x7f,
- 0x53, 0x93, 0xcf, 0x5e, 0xb8, 0xbf, 0x9b, 0x07, 0xc7, 0x57, 0x5c, 0x67, 0xaf, 0xe7, 0x45, 0x3d,
- 0xd0, 0x9f, 0x0c, 0xde, 0x90, 0x2d, 0x8a, 0x98, 0x06, 0xd7, 0x83, 0x59, 0x97, 0x5a, 0x73, 0xd1,
- 0xf6, 0x2c, 0x9b, 0xc4, 0xf6, 0x5e, 0xf2, 0x61, 0x7a, 0xaf, 0xa8, 0x9f, 0xc9, 0x73, 0xfd, 0x4c,
- 0x7f, 0xcf, 0x51, 0x18, 0xd0, 0x73, 0xfc, 0xb1, 0x94, 0x72, 0x50, 0xed, 0x13, 0x51, 0x4c, 0x7f,
- 0x51, 0x06, 0xc5, 0x6d, 0x9c, 0x91, 0x76, 0x17, 0x8f, 0x17, 0xab, 0x19, 0x26, 0x6e, 0xd0, 0x4f,
- 0x23, 0xb9, 0xca, 0xac, 0x0e, 0xa7, 0x1a, 0xe0, 0x92, 0xb9, 0xcd, 0x5e, 0xa9, 0x1e, 0xce, 0x83,
- 0xb9, 0xb0, 0xf4, 0x6a, 0xc7, 0xe3, 0x62, 0xbd, 0x32, 0x1a, 0x35, 0x2f, 0xa2, 0x51, 0x07, 0xd6,
- 0x99, 0xc3, 0x51, 0x47, 0x66, 0x46, 0x9d, 0x81, 0xa3, 0xcb, 0x5c, 0xcc, 0xe8, 0xa2, 0x3d, 0x57,
- 0x16, 0xbd, 0x44, 0x8f, 0xef, 0x5a, 0x71, 0x6d, 0x1e, 0xc9, 0x83, 0x85, 0xe0, 0x55, 0x7e, 0xc3,
- 0x6b, 0x95, 0xbd, 0x92, 0x7c, 0x58, 0x02, 0x27, 0x0e, 0x76, 0xe6, 0xdf, 0xc1, 0x7b, 0xa9, 0xa1,
- 0x3a, 0x79, 0xa1, 0x97, 0x1a, 0x7e, 0xe2, 0x37, 0xe9, 0x12, 0x43, 0xa2, 0x70, 0xf6, 0xde, 0xf0,
- 0x4e, 0x5c, 0x2c, 0xe8, 0x89, 0x20, 0xd1, 0xec, 0x05, 0xf8, 0x53, 0x32, 0x98, 0x69, 0x42, 0xbf,
- 0x66, 0xee, 0x3b, 0x7b, 0xbe, 0x66, 0x8a, 0x6e, 0xcf, 0x3d, 0x15, 0x14, 0xbb, 0xf8, 0x13, 0xdc,
- 0xc1, 0xb0, 0x21, 0x48, 0xd9, 0xfd, 0x2d, 0xec, 0x1b, 0x44, 0x48, 0x1b, 0x34, 0x3f, 0x1f, 0x8b,
- 0x46, 0x64, 0x77, 0x34, 0xe4, 0x6e, 0x2c, 0x5b, 0x3b, 0xa9, 0xf6, 0x4e, 0xe3, 0x8a, 0xce, 0x1e,
- 0x96, 0x1f, 0x96, 0xc1, 0x7c, 0x13, 0xfa, 0x55, 0x6f, 0xd9, 0xbc, 0xec, 0xb8, 0x96, 0x0f, 0xb5,
- 0x15, 0x51, 0x68, 0xce, 0x00, 0x60, 0x85, 0x9f, 0xd1, 0x08, 0x59, 0x4c, 0x8a, 0xf6, 0x96, 0xb4,
- 0x8e, 0x42, 0x1c, 0x1f, 0x63, 0x01, 0x21, 0x95, 0x8f, 0x45, 0x52, 0xf1, 0x13, 0xb8, 0x06, 0x5c,
- 0xa2, 0x40, 0x94, 0xdc, 0xf6, 0x8e, 0x75, 0x19, 0x76, 0x52, 0x02, 0x11, 0x7c, 0x16, 0x01, 0x11,
- 0x12, 0x4a, 0xed, 0xbe, 0xc2, 0xf1, 0x31, 0x0e, 0xf7, 0x95, 0x24, 0x82, 0x13, 0x09, 0x72, 0x85,
- 0xba, 0x1e, 0xba, 0x9e, 0x79, 0xaf, 0xa8, 0x58, 0x23, 0x93, 0x4d, 0x62, 0x4d, 0xb6, 0x91, 0x3a,
- 0x16, 0x52, 0xf6, 0x30, 0x9d, 0xce, 0x67, 0xd1, 0xb1, 0x0c, 0x2c, 0x3a, 0x7b, 0xa1, 0xbf, 0x4f,
- 0x06, 0x57, 0x87, 0xd1, 0x5f, 0x9a, 0xd0, 0xaf, 0x98, 0xde, 0xce, 0x45, 0xc7, 0x74, 0x3b, 0x5a,
- 0x79, 0x0c, 0x07, 0x0e, 0xb5, 0x3f, 0x64, 0x41, 0xa8, 0xf3, 0x20, 0x0c, 0x74, 0x25, 0x1d, 0xc8,
- 0xcb, 0x38, 0x3a, 0x99, 0x44, 0x6f, 0xd7, 0x77, 0x84, 0x60, 0x3d, 0x93, 0x03, 0xeb, 0x9e, 0x51,
- 0x59, 0xcc, 0x1e, 0xb8, 0x9f, 0x25, 0x23, 0x02, 0xe3, 0xf5, 0x7c, 0x41, 0x14, 0xb0, 0x18, 0xaf,
- 0x57, 0x39, 0xd6, 0xeb, 0x75, 0xa4, 0x31, 0x62, 0xa8, 0xc7, 0x72, 0xb6, 0x63, 0xc4, 0x11, 0x7a,
- 0x23, 0xbf, 0x4b, 0x06, 0x0a, 0x0e, 0xff, 0xc5, 0x78, 0x84, 0xb3, 0xd1, 0xb4, 0x93, 0xd1, 0x39,
- 0xe0, 0x7d, 0x3e, 0x95, 0xd6, 0xfb, 0x5c, 0x7b, 0x67, 0x5a, 0x1f, 0xf3, 0x7e, 0x6e, 0xc7, 0x82,
- 0x58, 0x2a, 0x17, 0xf2, 0x21, 0x1c, 0x64, 0x0f, 0xda, 0x8f, 0xc9, 0x00, 0xa0, 0x06, 0x4d, 0xcf,
- 0x46, 0x3c, 0x4b, 0x14, 0xae, 0xdb, 0x58, 0xbf, 0x7b, 0x04, 0xd4, 0xd5, 0x7d, 0x40, 0x11, 0x8a,
- 0xd1, 0xa9, 0x8b, 0xd7, 0xa7, 0xf5, 0xad, 0x8c, 0xb8, 0x1a, 0x0b, 0x2c, 0xa9, 0xbc, 0x2d, 0x63,
- 0xcb, 0xce, 0x1e, 0x90, 0xff, 0x29, 0x81, 0x42, 0xcb, 0x69, 0x42, 0xff, 0xf0, 0xa6, 0x40, 0xea,
- 0xa8, 0x01, 0xb8, 0xdc, 0x71, 0x44, 0x0d, 0x18, 0x44, 0x28, 0x7b, 0xd1, 0xbd, 0x57, 0x02, 0x73,
- 0x2d, 0xa7, 0x1c, 0x2e, 0x4e, 0x89, 0xfb, 0xaa, 0xfe, 0x6b, 0x2e, 0xe5, 0x1a, 0x06, 0x5b, 0x4c,
- 0x8c, 0xc0, 0x52, 0xad, 0x1e, 0x24, 0xd0, 0xcb, 0x5e, 0x6e, 0x77, 0x82, 0xe3, 0x1b, 0x76, 0xc7,
- 0x31, 0x60, 0xc7, 0xa1, 0x2b, 0xdd, 0xaa, 0x0a, 0xf2, 0x7b, 0x76, 0xc7, 0xc1, 0x2c, 0x17, 0x0c,
- 0xfc, 0x1f, 0xa5, 0xb9, 0xb0, 0xe3, 0x50, 0xdf, 0x00, 0xfc, 0x5f, 0xfb, 0x0b, 0x19, 0xe4, 0xd1,
- 0xb7, 0xe2, 0xa2, 0x7e, 0x97, 0x9c, 0x32, 0x0e, 0x02, 0x22, 0x3f, 0x16, 0x4b, 0xe8, 0x5e, 0x66,
- 0xed, 0x9f, 0x78, 0xb0, 0xde, 0x10, 0x57, 0x1e, 0x23, 0x8a, 0x68, 0xcd, 0x5f, 0x3d, 0x0d, 0xa6,
- 0x2e, 0x76, 0x9d, 0xf6, 0xa5, 0xe8, 0xb8, 0x3e, 0x7d, 0x54, 0x6f, 0x01, 0x05, 0xd7, 0xb4, 0xb7,
- 0x21, 0xdd, 0x53, 0x38, 0xd9, 0xd7, 0x17, 0x62, 0xaf, 0x17, 0x83, 0x64, 0xd1, 0xde, 0x99, 0x26,
- 0x02, 0xc3, 0x80, 0xca, 0xa7, 0xd3, 0x87, 0xca, 0x08, 0x27, 0xcf, 0x14, 0x30, 0x57, 0x2e, 0xd5,
- 0xc9, 0xad, 0x86, 0x8d, 0x73, 0xba, 0x22, 0x63, 0x98, 0x91, 0x4c, 0x32, 0x84, 0x19, 0x91, 0xff,
- 0x2f, 0x0b, 0xf3, 0x80, 0xca, 0x1f, 0x05, 0xcc, 0x9f, 0x96, 0xc0, 0x7c, 0xcd, 0xf2, 0xfc, 0x38,
- 0x6f, 0xff, 0x84, 0xe8, 0xbf, 0x2f, 0x49, 0x6b, 0x2a, 0x73, 0xe5, 0x08, 0x87, 0xfd, 0x4d, 0x65,
- 0x0e, 0x27, 0x15, 0x31, 0x99, 0x63, 0x29, 0x98, 0x03, 0x72, 0xa5, 0xbd, 0xb0, 0x24, 0x53, 0x1b,
- 0x4a, 0x51, 0x21, 0x93, 0x37, 0x94, 0x62, 0xcb, 0xce, 0x5e, 0xbe, 0x7f, 0x21, 0x81, 0x13, 0xa8,
- 0xf8, 0xa4, 0x65, 0xa9, 0x78, 0x31, 0x0f, 0x5d, 0x96, 0x4a, 0xbd, 0x32, 0x7e, 0x80, 0x97, 0x71,
- 0xac, 0x8c, 0x0f, 0x23, 0x3a, 0x61, 0x31, 0xc7, 0x2c, 0xc3, 0x0e, 0x13, 0x73, 0xc2, 0x32, 0xec,
- 0xe8, 0x62, 0x4e, 0x5e, 0x8a, 0x1d, 0x51, 0xcc, 0x47, 0xb6, 0xc0, 0xfa, 0x0b, 0x72, 0x28, 0xe6,
- 0xd8, 0xb5, 0x8d, 0x04, 0x31, 0xa7, 0x3e, 0xd1, 0xab, 0xbd, 0x7b, 0x44, 0xc1, 0x8f, 0x79, 0x7d,
- 0x63, 0x14, 0x98, 0x8e, 0x70, 0x8d, 0xe3, 0xe7, 0x64, 0xb0, 0x40, 0xb9, 0x18, 0x3c, 0x65, 0x4e,
- 0xc0, 0x28, 0xf5, 0x94, 0x39, 0xf5, 0x19, 0x20, 0x9e, 0xb3, 0xc9, 0x9f, 0x01, 0x4a, 0x2c, 0x3f,
- 0x7b, 0x70, 0xfe, 0x2a, 0x0f, 0x4e, 0x21, 0x16, 0xd6, 0x9c, 0x8e, 0xb5, 0xb5, 0x4f, 0xb8, 0x38,
- 0x67, 0x76, 0xf7, 0xa0, 0xa7, 0x7d, 0x40, 0x12, 0x45, 0xe9, 0xbf, 0x03, 0xe0, 0xf4, 0xa0, 0x4b,
- 0xe2, 0xb8, 0x51, 0xa0, 0xee, 0x8e, 0xab, 0xec, 0xc1, 0x92, 0xc2, 0xcb, 0x70, 0x1a, 0x01, 0x11,
- 0x83, 0xa1, 0x87, 0xac, 0xc2, 0x99, 0xf0, 0x4d, 0xbf, 0x83, 0x47, 0xee, 0xa0, 0x83, 0xc7, 0xcd,
- 0x40, 0x36, 0x3b, 0x9d, 0x10, 0xaa, 0xfe, 0xcd, 0x6c, 0x5c, 0xa6, 0x81, 0xb2, 0xa0, 0x9c, 0x1e,
- 0x8c, 0x8e, 0xe6, 0xc5, 0xe4, 0xf4, 0xa0, 0xaf, 0x2e, 0x82, 0x22, 0xb9, 0x1c, 0x3c, 0x5c, 0xd1,
- 0x1f, 0x9c, 0x99, 0xe6, 0xe2, 0x4d, 0xbb, 0x06, 0xaf, 0x86, 0x77, 0xa6, 0x92, 0xcc, 0xa0, 0x7e,
- 0x3a, 0xb2, 0x93, 0x0d, 0x4e, 0xc1, 0x9e, 0x3e, 0x32, 0xe5, 0xc9, 0xec, 0x86, 0x95, 0x7a, 0xbd,
- 0xee, 0x7e, 0x8b, 0x06, 0x1e, 0x48, 0xb5, 0x1b, 0xc6, 0xc4, 0x2f, 0x90, 0x0e, 0xc4, 0x2f, 0x48,
- 0xbd, 0x1b, 0xc6, 0xf1, 0x31, 0x8e, 0xdd, 0xb0, 0x24, 0x82, 0x13, 0xb9, 0x95, 0x07, 0x5b, 0xcd,
- 0xf4, 0x6e, 0x82, 0x7f, 0x1c, 0xec, 0x59, 0x0d, 0x78, 0x67, 0x97, 0x41, 0xd7, 0x16, 0x24, 0xde,
- 0xc9, 0xa2, 0x3e, 0x19, 0x14, 0xb7, 0x1c, 0x77, 0xd7, 0x0c, 0x36, 0xee, 0xfb, 0x4f, 0x8a, 0xd0,
- 0xfb, 0x00, 0x96, 0x71, 0x1e, 0x83, 0xe6, 0x45, 0xf3, 0x91, 0xe7, 0x58, 0x3d, 0x1a, 0xf4, 0x11,
- 0xfd, 0x55, 0x6f, 0x04, 0xf3, 0x34, 0xf6, 0x63, 0x1d, 0x7a, 0x3e, 0xec, 0xd0, 0x88, 0x16, 0x7c,
- 0xa2, 0x7a, 0x16, 0xcc, 0xd1, 0x84, 0x65, 0xab, 0x0b, 0x3d, 0x1a, 0xd4, 0x82, 0x4b, 0x53, 0x4f,
- 0x81, 0xa2, 0xe5, 0xdd, 0xe7, 0x39, 0x36, 0x0d, 0xc8, 0x47, 0x9f, 0xd4, 0x9b, 0xc1, 0x71, 0x9a,
- 0x2f, 0x34, 0x56, 0xc9, 0x81, 0x9d, 0xfe, 0x64, 0xa4, 0x5a, 0xb6, 0xb3, 0xee, 0x3a, 0xdb, 0x2e,
- 0xf4, 0x3c, 0x7c, 0x6a, 0x6a, 0xda, 0x60, 0x52, 0xd4, 0x0b, 0xe0, 0x44, 0xd7, 0xb2, 0x2f, 0x79,
- 0x38, 0x46, 0xf0, 0x32, 0x75, 0x1b, 0x9b, 0x1b, 0x10, 0xbb, 0x9b, 0x69, 0x6c, 0x54, 0x0e, 0xec,
- 0x27, 0xc6, 0x41, 0x2a, 0x4c, 0x94, 0xfc, 0x25, 0xb3, 0x7d, 0x09, 0xbf, 0xa7, 0xee, 0xa8, 0x07,
- 0xd2, 0x19, 0x61, 0x90, 0x3b, 0x00, 0x16, 0x38, 0x61, 0xe0, 0x34, 0xed, 0x65, 0x39, 0x30, 0xc7,
- 0x15, 0x60, 0x02, 0x35, 0xe8, 0x16, 0xbd, 0xf3, 0x3b, 0x96, 0x0f, 0x11, 0x73, 0xf4, 0xac, 0xcb,
- 0x13, 0x87, 0x30, 0x6f, 0x1c, 0xf8, 0xd0, 0x18, 0x40, 0x0c, 0xf1, 0x45, 0x3a, 0x3c, 0xec, 0x59,
- 0xe6, 0x51, 0x5b, 0x95, 0x4b, 0xd3, 0x9e, 0x03, 0xd4, 0x83, 0xd4, 0x18, 0x2f, 0x90, 0x5c, 0x3a,
- 0x2f, 0x10, 0x24, 0x37, 0xb3, 0xdb, 0x75, 0xae, 0xc0, 0x4e, 0x48, 0x96, 0xea, 0xea, 0x81, 0x74,
- 0xed, 0xf3, 0xa3, 0xcc, 0x0b, 0x53, 0x5f, 0xb3, 0x81, 0x1a, 0xd9, 0x5e, 0xbb, 0x0d, 0x61, 0x87,
- 0x1e, 0x5c, 0x0b, 0x1e, 0x53, 0x5e, 0xc0, 0x91, 0x7a, 0x16, 0x79, 0x44, 0x37, 0x70, 0x7c, 0xf4,
- 0x6a, 0x50, 0x24, 0xb7, 0xd9, 0x69, 0x2f, 0x5b, 0x18, 0xd8, 0xd7, 0x2c, 0xf0, 0x7d, 0xcd, 0x06,
- 0x98, 0xb3, 0x1d, 0x54, 0xdc, 0xba, 0xe9, 0x9a, 0xbb, 0x5e, 0xd2, 0x22, 0x31, 0xa1, 0x1b, 0x5a,
- 0x04, 0x75, 0xe6, 0xb3, 0xd5, 0x63, 0x06, 0x47, 0x46, 0xfd, 0xff, 0x81, 0xe3, 0x17, 0x69, 0x80,
- 0x07, 0x8f, 0x52, 0x96, 0xe2, 0x5d, 0x28, 0xfb, 0x28, 0x2f, 0xf1, 0x5f, 0xae, 0x1e, 0x33, 0xfa,
- 0x89, 0xa9, 0xff, 0x0d, 0x2c, 0xa0, 0xc7, 0x8e, 0x73, 0x25, 0x60, 0x5c, 0x8e, 0xb7, 0x23, 0xfb,
- 0xc8, 0xaf, 0x71, 0x1f, 0xae, 0x1e, 0x33, 0xfa, 0x48, 0xa9, 0x0d, 0x00, 0x76, 0xfc, 0xdd, 0x2e,
- 0x25, 0x9c, 0x8f, 0x57, 0xc9, 0x3e, 0xc2, 0xab, 0xe1, 0x47, 0xab, 0xc7, 0x0c, 0x86, 0x84, 0x5a,
- 0x03, 0x33, 0xfe, 0x83, 0x3e, 0xa5, 0x57, 0x88, 0xf7, 0x5d, 0xe8, 0xa3, 0xd7, 0x0a, 0xbe, 0x59,
- 0x3d, 0x66, 0x44, 0x04, 0xd4, 0x2a, 0x98, 0xee, 0x5d, 0xa4, 0xc4, 0x8a, 0xf1, 0xfd, 0x5d, 0x1f,
- 0xb1, 0xf5, 0x8b, 0x21, 0xad, 0xf0, 0x73, 0xc4, 0x58, 0xdb, 0xbb, 0x4c, 0x69, 0x4d, 0x09, 0x33,
- 0x56, 0x0e, 0xbe, 0x41, 0x8c, 0x85, 0x04, 0xd4, 0x2a, 0x98, 0xf1, 0x6c, 0xb3, 0xe7, 0xed, 0x38,
- 0xbe, 0x77, 0x7a, 0xba, 0xcf, 0xcd, 0x35, 0x9e, 0x5a, 0x93, 0x7e, 0x63, 0x44, 0x5f, 0xab, 0x4f,
- 0x06, 0x57, 0xef, 0xf5, 0x3a, 0xa6, 0x0f, 0xf5, 0x07, 0x2d, 0xcf, 0xb7, 0xec, 0xed, 0x20, 0x42,
- 0x31, 0x19, 0x2c, 0x06, 0xbf, 0x54, 0x17, 0xe9, 0x81, 0x37, 0x80, 0xdb, 0xa6, 0xd6, 0xbf, 0xd7,
- 0x4a, 0x8a, 0x65, 0xce, 0xb9, 0x3d, 0x0d, 0xe4, 0xd1, 0x2b, 0x3c, 0xb8, 0x2c, 0x0c, 0x5e, 0xc7,
- 0xed, 0xd7, 0x1d, 0xdc, 0x80, 0xd1, 0x47, 0x7d, 0xe3, 0xd3, 0xdc, 0x81, 0xf1, 0xe9, 0x7a, 0x30,
- 0x6b, 0x79, 0x6b, 0xd6, 0x36, 0x31, 0x8e, 0xe9, 0xf8, 0xc1, 0x26, 0x91, 0xc5, 0x84, 0x3a, 0xbc,
- 0x42, 0x06, 0x8e, 0xe3, 0xc1, 0x62, 0x42, 0x90, 0xa2, 0xdd, 0x04, 0xe6, 0xd8, 0x46, 0x46, 0xae,
- 0xc4, 0xb5, 0x22, 0xd3, 0x9a, 0x3e, 0x69, 0x37, 0x82, 0x05, 0x5e, 0xa7, 0x19, 0x0b, 0x42, 0x0e,
- 0xba, 0x42, 0xed, 0x06, 0x70, 0xbc, 0xaf, 0x61, 0x05, 0x21, 0x63, 0x72, 0x51, 0xc8, 0x98, 0xeb,
- 0x01, 0x88, 0xb4, 0x78, 0x20, 0x99, 0xeb, 0xc0, 0x4c, 0xa8, 0x97, 0x03, 0x33, 0xfc, 0x69, 0x0e,
- 0x4c, 0x07, 0xca, 0x36, 0x28, 0x03, 0x1a, 0x99, 0x6c, 0x66, 0x7f, 0x28, 0x18, 0x99, 0xd8, 0x34,
- 0x64, 0x26, 0x44, 0x5e, 0xd9, 0x2d, 0xcb, 0xef, 0x06, 0x27, 0x1b, 0xfb, 0x93, 0xd5, 0x75, 0x00,
- 0x2c, 0x8c, 0x51, 0x2b, 0x3a, 0xea, 0x78, 0x7b, 0x8a, 0xf6, 0x40, 0xf4, 0x81, 0xa1, 0x71, 0xf6,
- 0x3b, 0xe8, 0x39, 0xc4, 0x19, 0x50, 0x20, 0x61, 0xfa, 0x8f, 0xa9, 0x0b, 0x00, 0xe8, 0xcf, 0x5a,
- 0xd7, 0x8d, 0xaa, 0x5e, 0x2f, 0xeb, 0x4a, 0x4e, 0x7b, 0x85, 0x04, 0x66, 0xc2, 0x46, 0x30, 0xb0,
- 0x92, 0x3a, 0x55, 0xad, 0xa1, 0xb7, 0x8e, 0x1e, 0x6c, 0x54, 0xac, 0x92, 0x3d, 0x15, 0x3c, 0x6a,
- 0xcf, 0x83, 0xcb, 0x96, 0xeb, 0xf9, 0x86, 0x73, 0x65, 0xd9, 0x71, 0xa3, 0x81, 0x95, 0x04, 0xb8,
- 0x8d, 0x7b, 0x8d, 0x0c, 0xc6, 0x0e, 0xc4, 0x67, 0xde, 0xa0, 0x4b, 0x17, 0xfe, 0xa3, 0x04, 0x44,
- 0xd7, 0x77, 0x4d, 0xdb, 0xeb, 0x39, 0x1e, 0x34, 0x9c, 0x2b, 0x5e, 0xc9, 0xee, 0x94, 0x9d, 0xee,
- 0xde, 0xae, 0xed, 0x51, 0x93, 0x2f, 0xee, 0x35, 0x92, 0x0e, 0xbe, 0x53, 0x78, 0x01, 0x80, 0x72,
- 0xa3, 0x56, 0xd3, 0xcb, 0xad, 0x6a, 0xa3, 0xae, 0x1c, 0x43, 0xd2, 0x6a, 0x95, 0x96, 0x6a, 0x48,
- 0x3a, 0xdf, 0x0b, 0xa6, 0x83, 0x36, 0x4d, 0xa3, 0xdc, 0xe4, 0x82, 0x28, 0x37, 0x6a, 0x09, 0x4c,
- 0x07, 0xad, 0x9c, 0x8e, 0x08, 0x8f, 0xed, 0x3f, 0xd5, 0xbc, 0x6b, 0xba, 0x3e, 0x36, 0x50, 0x02,
- 0x22, 0x4b, 0xa6, 0x07, 0x8d, 0xf0, 0xb3, 0xb3, 0x4f, 0xa0, 0x1c, 0xa8, 0x60, 0xa1, 0x54, 0xab,
- 0x6d, 0x36, 0x8c, 0xcd, 0x7a, 0xa3, 0xb5, 0x5a, 0xad, 0xaf, 0x90, 0x11, 0xb2, 0xba, 0x52, 0x6f,
- 0x18, 0x3a, 0x19, 0x20, 0x9b, 0x4a, 0x8e, 0xdc, 0x69, 0xbd, 0x34, 0x0d, 0x8a, 0x3d, 0x2c, 0x5d,
- 0xed, 0x4b, 0x72, 0xca, 0x70, 0x06, 0x21, 0x4e, 0x31, 0xb7, 0xee, 0x72, 0x47, 0x0a, 0xa4, 0x01,
- 0x47, 0x7e, 0xcf, 0x82, 0x39, 0x62, 0xaa, 0x7b, 0x78, 0x77, 0x06, 0x23, 0x27, 0x1b, 0x5c, 0x9a,
- 0xf6, 0x71, 0x29, 0x45, 0x8c, 0x83, 0x81, 0x1c, 0xa5, 0x33, 0x2e, 0x7e, 0x2f, 0x37, 0xda, 0xa5,
- 0x16, 0xd5, 0x7a, 0x4b, 0x37, 0xea, 0xa5, 0x1a, 0xcd, 0x22, 0xab, 0xa7, 0xc1, 0xc9, 0x7a, 0x83,
- 0x86, 0x74, 0x6c, 0x6e, 0xb6, 0x1a, 0x9b, 0xd5, 0xb5, 0xf5, 0x86, 0xd1, 0x52, 0x0a, 0xea, 0x29,
- 0xa0, 0x92, 0xff, 0x9b, 0xd5, 0xe6, 0x66, 0xb9, 0x54, 0x2f, 0xeb, 0x35, 0xbd, 0xa2, 0x14, 0xd5,
- 0xc7, 0x81, 0x1b, 0xc8, 0x25, 0x49, 0x8d, 0xe5, 0x4d, 0xa3, 0x71, 0xbe, 0x89, 0x10, 0x34, 0xf4,
- 0x5a, 0x09, 0x29, 0x12, 0x73, 0xb7, 0xf5, 0x94, 0x7a, 0x15, 0x38, 0x8e, 0x2f, 0xbe, 0xaf, 0x35,
- 0x4a, 0x15, 0x5a, 0xde, 0xb4, 0x7a, 0x2d, 0x38, 0x5d, 0xad, 0x37, 0x37, 0x96, 0x97, 0xab, 0xe5,
- 0xaa, 0x5e, 0x6f, 0x6d, 0xae, 0xeb, 0xc6, 0x5a, 0xb5, 0xd9, 0x44, 0xdf, 0x2a, 0x33, 0xf8, 0xe6,
- 0x60, 0xd2, 0x67, 0x6a, 0xef, 0x97, 0xc1, 0xfc, 0x39, 0xb3, 0x6b, 0xa1, 0x81, 0x02, 0x5f, 0x29,
- 0xde, 0x77, 0x1a, 0xc8, 0xc7, 0x57, 0x8f, 0xd3, 0xf3, 0x04, 0xf8, 0x41, 0xfb, 0x21, 0x39, 0xe5,
- 0x69, 0x20, 0x0a, 0x04, 0x29, 0x71, 0x91, 0x2b, 0x2d, 0x66, 0xee, 0xfa, 0x5a, 0x29, 0xc5, 0x69,
- 0x20, 0x71, 0xf2, 0xe9, 0xc0, 0xff, 0xf9, 0x71, 0x81, 0xaf, 0x80, 0xb9, 0x8d, 0x7a, 0x69, 0xa3,
- 0xb5, 0xda, 0x30, 0xaa, 0xdf, 0x83, 0x63, 0xd9, 0xcf, 0x83, 0x99, 0xe5, 0x86, 0xb1, 0x54, 0xad,
- 0x54, 0xf4, 0xba, 0x52, 0x50, 0x1f, 0x05, 0xae, 0x6a, 0xea, 0xc6, 0xb9, 0x6a, 0x59, 0xdf, 0xdc,
- 0xa8, 0x97, 0xce, 0x95, 0xaa, 0x35, 0xdc, 0x47, 0x14, 0x13, 0xae, 0x43, 0x9f, 0xd2, 0x7e, 0x20,
- 0x0f, 0x00, 0xa9, 0x3a, 0xbe, 0xca, 0x89, 0xb9, 0x34, 0xfb, 0x0f, 0xd2, 0x4e, 0x1a, 0x22, 0x32,
- 0x31, 0xed, 0xb7, 0x0a, 0xa6, 0x5d, 0xfa, 0x82, 0xae, 0x8e, 0x0d, 0xa3, 0x43, 0xfe, 0x06, 0xd4,
- 0x8c, 0xf0, 0x73, 0xed, 0x03, 0x69, 0xe6, 0x08, 0xb1, 0x8c, 0xa5, 0x43, 0x72, 0x79, 0x3c, 0x40,
- 0x6a, 0x2f, 0xce, 0x81, 0x05, 0xbe, 0x62, 0xa8, 0x12, 0xd8, 0x98, 0x12, 0xab, 0x04, 0xff, 0x31,
- 0x63, 0x64, 0x9d, 0x7d, 0x12, 0x1d, 0x4e, 0x41, 0xd0, 0x32, 0xc9, 0xc1, 0xfe, 0xc0, 0x62, 0x51,
- 0x72, 0x88, 0x79, 0x64, 0x74, 0x28, 0x92, 0x3a, 0x05, 0xe4, 0xd6, 0x83, 0xbe, 0x22, 0x6b, 0x5f,
- 0x93, 0xc1, 0x3c, 0x77, 0x2b, 0xb7, 0xf6, 0xce, 0x9c, 0xc8, 0x8d, 0xb9, 0xcc, 0x7d, 0xdf, 0xb9,
- 0xc3, 0xde, 0xf7, 0x7d, 0xf6, 0x5e, 0x30, 0x45, 0xd3, 0xb0, 0x7c, 0x1b, 0x75, 0x64, 0x0a, 0x1c,
- 0x07, 0xb3, 0x2b, 0x7a, 0x6b, 0xb3, 0xd9, 0x2a, 0x19, 0x2d, 0xbd, 0xa2, 0xe4, 0xd0, 0xc0, 0xa7,
- 0xaf, 0xad, 0xb7, 0x2e, 0x28, 0x12, 0x1a, 0x13, 0x57, 0x36, 0xaa, 0x15, 0x7d, 0xb3, 0x51, 0xaf,
- 0x5d, 0x50, 0xe4, 0xf4, 0x0e, 0x97, 0xfd, 0x8c, 0x4d, 0xd8, 0xe1, 0x32, 0xa9, 0xf8, 0xec, 0xe7,
- 0xae, 0x9f, 0x93, 0x81, 0x42, 0x38, 0xd0, 0x1f, 0xec, 0x41, 0xd7, 0x82, 0x76, 0x1b, 0x6a, 0x97,
- 0x44, 0x02, 0xc0, 0x1e, 0x08, 0x7d, 0x88, 0xfb, 0x77, 0xc6, 0x6a, 0x24, 0x0f, 0x7d, 0x06, 0x77,
- 0xfe, 0x80, 0xc1, 0xfd, 0xd9, 0xb4, 0x1e, 0x97, 0xfd, 0xec, 0x8e, 0x05, 0xb2, 0x4f, 0xa5, 0xf1,
- 0xb8, 0x1c, 0xc2, 0xc1, 0x44, 0xe2, 0x3a, 0xc7, 0x8c, 0xc7, 0x8a, 0xac, 0xbd, 0x48, 0x06, 0xc7,
- 0x2b, 0xa6, 0x0f, 0x97, 0xf6, 0x5b, 0xc1, 0x2d, 0x9a, 0x31, 0x37, 0x5f, 0xe7, 0x0e, 0xdc, 0x7c,
- 0x1d, 0x5d, 0xc4, 0x29, 0xf5, 0x5d, 0xc4, 0xa9, 0xbd, 0x27, 0xed, 0x19, 0xcd, 0x3e, 0x1e, 0xc6,
- 0x16, 0x7c, 0x39, 0xdd, 0xd9, 0xcb, 0x64, 0x2e, 0xb2, 0x6f, 0x60, 0x6f, 0x9f, 0x01, 0x0a, 0x61,
- 0x85, 0x71, 0x2a, 0xfc, 0x29, 0x7a, 0x59, 0xfc, 0x66, 0x8a, 0x18, 0x8e, 0x41, 0x54, 0x0c, 0x89,
- 0x8f, 0x8a, 0xc1, 0xad, 0x51, 0xcb, 0xfd, 0x8e, 0x20, 0x69, 0x3b, 0x43, 0xc6, 0x83, 0x30, 0x3e,
- 0x6c, 0x6e, 0x76, 0x9d, 0x61, 0x62, 0xf1, 0x93, 0xb9, 0xd0, 0x98, 0xde, 0x1a, 0xaa, 0x8b, 0x22,
- 0x93, 0x7c, 0x6f, 0x7b, 0x5a, 0x77, 0x72, 0xce, 0x83, 0x33, 0xe1, 0x32, 0xf3, 0xec, 0xdc, 0xc9,
- 0x87, 0x71, 0x90, 0x3d, 0x0a, 0xdf, 0x92, 0x40, 0xbe, 0xe9, 0xb8, 0xfe, 0xb8, 0x30, 0x48, 0xbb,
- 0x05, 0xce, 0x48, 0xa0, 0x19, 0x3f, 0x07, 0xcd, 0x6e, 0x0b, 0x3c, 0xb9, 0xfc, 0x09, 0x84, 0xc1,
- 0x3c, 0x0e, 0x16, 0x08, 0x27, 0xe1, 0x1d, 0x32, 0xff, 0x26, 0x91, 0xfe, 0xea, 0x7e, 0x51, 0x44,
- 0xf0, 0x46, 0x48, 0xb8, 0x05, 0x1d, 0x80, 0xc2, 0xa5, 0x69, 0x6f, 0x64, 0x71, 0xa9, 0xf0, 0xb8,
- 0x0c, 0x9a, 0x81, 0x87, 0xd7, 0xb0, 0x8c, 0xab, 0x67, 0x4a, 0x13, 0x51, 0x33, 0xa1, 0xf0, 0xec,
- 0x11, 0x79, 0x48, 0x06, 0x45, 0xea, 0x02, 0x38, 0x56, 0x04, 0xd2, 0xb6, 0x8c, 0x50, 0x08, 0x62,
- 0xae, 0x82, 0xf2, 0xb8, 0x5b, 0x46, 0x72, 0xf9, 0xd9, 0xe3, 0xf0, 0x1f, 0xd4, 0xb7, 0xb5, 0x74,
- 0xd9, 0xb4, 0xba, 0xe6, 0xc5, 0x6e, 0x8a, 0x48, 0xd6, 0x1f, 0x4f, 0x79, 0x9a, 0x2f, 0xac, 0x2a,
- 0x57, 0x5e, 0x8c, 0xc4, 0xbf, 0x0b, 0xcc, 0xb8, 0xdc, 0xde, 0x1f, 0xb2, 0xa2, 0xfa, 0xfc, 0x8a,
- 0xe9, 0x7b, 0x23, 0xca, 0x99, 0xea, 0xe8, 0x9e, 0x10, 0x3f, 0x13, 0x39, 0x6a, 0x34, 0x5b, 0xea,
- 0x74, 0x96, 0xa1, 0xe9, 0xef, 0xb9, 0xb0, 0x93, 0x6a, 0x88, 0x70, 0xfb, 0xb6, 0x47, 0x19, 0x49,
- 0x70, 0xb1, 0x24, 0x6b, 0x3c, 0x3a, 0x4f, 0x19, 0xd2, 0x1b, 0x04, 0xbc, 0x8c, 0xa5, 0x4b, 0x7a,
- 0x5b, 0x08, 0x49, 0x83, 0x83, 0xe4, 0x69, 0xa3, 0x31, 0x91, 0x3d, 0x20, 0x3f, 0x23, 0x83, 0x05,
- 0x62, 0x27, 0x8c, 0x1b, 0x93, 0x0f, 0xa5, 0x74, 0x19, 0x62, 0x6e, 0xe9, 0x62, 0xd9, 0x19, 0x0b,
- 0x2c, 0x69, 0x1c, 0x8c, 0xc4, 0xf8, 0xc8, 0x1e, 0x99, 0xe7, 0x9f, 0x00, 0x80, 0x71, 0x03, 0xfd,
- 0x78, 0x31, 0x8a, 0xeb, 0xa8, 0xbd, 0x93, 0xce, 0x3f, 0x9a, 0x5c, 0x90, 0x71, 0xc6, 0xc5, 0x33,
- 0xdc, 0xa0, 0xe2, 0x13, 0x85, 0x46, 0x95, 0xdf, 0x4b, 0x69, 0xf3, 0x52, 0x27, 0xcc, 0xa1, 0x83,
- 0xfb, 0x88, 0xbd, 0xdc, 0x27, 0x52, 0x18, 0xbf, 0xc3, 0x58, 0x49, 0x87, 0x5a, 0x6d, 0x84, 0x99,
- 0xfd, 0x69, 0x70, 0xd2, 0xd0, 0x4b, 0x95, 0x46, 0xbd, 0x76, 0x81, 0xbd, 0xb2, 0x49, 0x91, 0xd9,
- 0xc9, 0x49, 0x26, 0xb0, 0xbd, 0x2e, 0x65, 0x1f, 0xc8, 0xcb, 0x2a, 0x69, 0xb6, 0xc2, 0x2c, 0xae,
- 0x0c, 0xef, 0xd5, 0x04, 0xc8, 0x1e, 0x25, 0x0a, 0x5f, 0x2b, 0x82, 0x59, 0x03, 0xb6, 0x9d, 0xdd,
- 0x5d, 0x68, 0x77, 0x60, 0x47, 0x7b, 0x9d, 0x0c, 0xe6, 0xc2, 0xfd, 0xbf, 0x26, 0xf4, 0xb5, 0xff,
- 0x16, 0x61, 0x73, 0x16, 0xcc, 0xa1, 0xca, 0x35, 0xf8, 0xc0, 0xf1, 0x5c, 0x9a, 0x7a, 0x2b, 0x38,
- 0x11, 0xa0, 0xd0, 0xe8, 0x9b, 0xc2, 0x1c, 0x7c, 0xa1, 0xbd, 0x97, 0xc5, 0x68, 0x83, 0xc7, 0xe8,
- 0xde, 0x78, 0x61, 0x86, 0xec, 0x2e, 0xb2, 0xac, 0xc6, 0x80, 0xf5, 0x3b, 0x21, 0x58, 0xcf, 0xe2,
- 0xc0, 0xaa, 0x1c, 0x92, 0xfe, 0x51, 0xa2, 0xf6, 0xcb, 0x32, 0x38, 0x19, 0x74, 0xc4, 0x93, 0x43,
- 0xeb, 0x13, 0x2c, 0x5a, 0xdf, 0xcb, 0xa3, 0xb5, 0x22, 0x22, 0xcd, 0x41, 0x2c, 0xc7, 0xa0, 0xf6,
- 0xc5, 0x10, 0xb5, 0xef, 0xe3, 0x50, 0xab, 0x8d, 0xa9, 0x9c, 0xa3, 0x44, 0xef, 0x43, 0x32, 0x38,
- 0x8d, 0xcc, 0xce, 0xb2, 0x63, 0x6f, 0x75, 0xad, 0xb6, 0x6f, 0xd9, 0xdb, 0x91, 0x4b, 0xdb, 0x8a,
- 0xc8, 0xca, 0x66, 0x3f, 0xb6, 0xd2, 0x41, 0x6c, 0xf9, 0x78, 0x1b, 0xa2, 0x6d, 0x2b, 0x8e, 0xad,
- 0x98, 0x21, 0x8c, 0x71, 0xd6, 0x8e, 0x34, 0x87, 0x4d, 0x4a, 0xdf, 0xfa, 0x04, 0x39, 0x38, 0x4a,
- 0xfc, 0x1e, 0x02, 0x8c, 0xe9, 0xf1, 0x42, 0x19, 0x28, 0xd8, 0x7f, 0x12, 0xf7, 0xec, 0xf4, 0x3e,
- 0xd3, 0x06, 0xef, 0x59, 0xdf, 0x0b, 0x04, 0x14, 0x78, 0xd6, 0x07, 0x09, 0xea, 0x4d, 0x60, 0xa1,
- 0xbd, 0x03, 0xdb, 0x97, 0xaa, 0x76, 0xe0, 0x9b, 0x44, 0x1c, 0x59, 0xfa, 0x52, 0xf9, 0xc1, 0xec,
- 0x7e, 0x1e, 0x4c, 0x7e, 0xe1, 0x91, 0x9b, 0xd8, 0xb0, 0x4c, 0xc5, 0x34, 0xb4, 0xdf, 0x08, 0x01,
- 0xaa, 0x73, 0x00, 0xdd, 0x35, 0x12, 0xd5, 0x74, 0xb0, 0xd4, 0x47, 0x80, 0x45, 0x03, 0xa7, 0x1a,
- 0xeb, 0xad, 0x6a, 0xa3, 0xbe, 0xb9, 0xd1, 0xd4, 0x2b, 0x9b, 0x4b, 0x01, 0x38, 0x4d, 0x45, 0xd6,
- 0xbe, 0x2a, 0x81, 0x29, 0xc2, 0x96, 0xa7, 0x3d, 0x3e, 0x82, 0x60, 0xe8, 0x91, 0x02, 0xed, 0xed,
- 0xc2, 0x01, 0x82, 0x42, 0x41, 0xd0, 0x72, 0x62, 0x1a, 0xc6, 0x53, 0xc1, 0x14, 0x01, 0x39, 0xd8,
- 0x05, 0x38, 0x13, 0x63, 0xd9, 0x51, 0x32, 0x46, 0x90, 0x5d, 0x30, 0x58, 0xd0, 0x10, 0x36, 0xb2,
- 0xb7, 0xc6, 0x9f, 0x9b, 0x27, 0x4b, 0x07, 0xe7, 0x2d, 0x7f, 0x07, 0x9f, 0x38, 0xd0, 0x9e, 0x29,
- 0xd2, 0x71, 0xdd, 0x0a, 0x0a, 0x97, 0x51, 0xee, 0x21, 0xa7, 0x37, 0x48, 0x26, 0xed, 0xe7, 0x85,
- 0x63, 0x53, 0x73, 0xfa, 0x19, 0xf2, 0x14, 0x03, 0xce, 0x1a, 0xc8, 0x77, 0x2d, 0xcf, 0xa7, 0x36,
- 0xf7, 0x9d, 0xa9, 0x08, 0x05, 0x7f, 0xaa, 0x3e, 0xdc, 0x35, 0x30, 0x19, 0xed, 0x3e, 0x64, 0x31,
- 0x45, 0xa9, 0x02, 0x27, 0x58, 0x4e, 0x83, 0x29, 0x7a, 0xb2, 0x9a, 0x6e, 0x4b, 0x05, 0x8f, 0x82,
- 0x5b, 0x41, 0x42, 0xb5, 0xcd, 0x5e, 0x07, 0xfe, 0x9f, 0xe3, 0x60, 0x6a, 0xd5, 0xf2, 0x7c, 0xc7,
- 0xdd, 0xd7, 0x5e, 0x9f, 0x03, 0x53, 0xe7, 0xa0, 0xeb, 0x59, 0x8e, 0x7d, 0xc0, 0x5d, 0xeb, 0x7a,
- 0x30, 0xdb, 0x73, 0xe1, 0x65, 0xcb, 0xd9, 0xf3, 0x98, 0x51, 0x82, 0x49, 0x52, 0x35, 0x30, 0x6d,
- 0xee, 0xf9, 0x3b, 0x8e, 0x1b, 0x05, 0x64, 0x0a, 0x9e, 0xd5, 0x33, 0x00, 0x90, 0xff, 0x75, 0x73,
- 0x17, 0x06, 0x77, 0xae, 0x47, 0x29, 0xaa, 0x0a, 0xf2, 0xbe, 0xb5, 0x0b, 0x69, 0x84, 0x76, 0xfc,
- 0x1f, 0x09, 0x18, 0x47, 0x3b, 0xa5, 0x51, 0x65, 0x65, 0x23, 0x78, 0xd4, 0xfe, 0x50, 0x06, 0xb3,
- 0x2b, 0xd0, 0xa7, 0xac, 0x7a, 0xda, 0x4b, 0x72, 0x42, 0x97, 0x22, 0xa1, 0x79, 0x49, 0xd7, 0xf4,
- 0x82, 0xef, 0xc2, 0x21, 0x97, 0x4f, 0x8c, 0xc2, 0xc5, 0xcb, 0xec, 0x5d, 0x11, 0x38, 0x76, 0xa8,
- 0x5f, 0x25, 0xce, 0xfc, 0x34, 0x33, 0xdd, 0x38, 0x3e, 0xf8, 0x82, 0xb7, 0x89, 0x13, 0xe3, 0x6e,
- 0x50, 0xd9, 0x2f, 0x32, 0xf5, 0x89, 0xed, 0x8e, 0xa6, 0x2f, 0xd3, 0x1c, 0x07, 0xae, 0x01, 0x61,
- 0x29, 0x51, 0x32, 0x46, 0x98, 0x5b, 0x30, 0x62, 0xc7, 0x70, 0x4e, 0x26, 0x70, 0xf1, 0xab, 0x0c,
- 0x66, 0x9b, 0x3b, 0xce, 0x95, 0x40, 0x8e, 0xdf, 0x2b, 0x06, 0xec, 0xb5, 0x60, 0xe6, 0x72, 0x1f,
- 0xa8, 0x51, 0x02, 0x7b, 0xd7, 0x9c, 0xcc, 0xdf, 0x35, 0xf7, 0x02, 0x39, 0x2d, 0x4c, 0x0c, 0x73,
- 0x31, 0x30, 0xf1, 0xd7, 0xc3, 0x49, 0x29, 0xae, 0x87, 0x53, 0x9f, 0x02, 0xa6, 0x28, 0xd7, 0x74,
- 0x99, 0x3a, 0x19, 0xe0, 0x20, 0x33, 0x5b, 0xc1, 0x3c, 0x5f, 0xc1, 0x74, 0xc8, 0xc7, 0x57, 0x2e,
- 0x7b, 0xe4, 0x7f, 0x4b, 0xc2, 0xf1, 0x9a, 0x02, 0xe0, 0xcb, 0x63, 0x00, 0x5e, 0xfb, 0x66, 0x4e,
- 0x74, 0x33, 0x27, 0x94, 0x40, 0xc8, 0xc1, 0xa1, 0x2e, 0x3c, 0x1b, 0x4a, 0x2e, 0x7b, 0x79, 0xbe,
- 0x22, 0x0f, 0xe6, 0x2a, 0xd6, 0xd6, 0x56, 0xd8, 0x49, 0xbe, 0x54, 0xb0, 0x93, 0x8c, 0x77, 0xa9,
- 0x42, 0x76, 0xee, 0x9e, 0xeb, 0x42, 0x3b, 0xa8, 0x14, 0x6d, 0x4e, 0x7d, 0xa9, 0xea, 0xcd, 0xe0,
- 0x78, 0x30, 0x2e, 0xb0, 0x1d, 0xe5, 0x8c, 0xd1, 0x9f, 0xac, 0x7d, 0x5d, 0xd8, 0x13, 0x20, 0x90,
- 0x28, 0x5b, 0xa5, 0x98, 0x06, 0x78, 0x37, 0x98, 0xdf, 0x21, 0xb9, 0xf1, 0x72, 0x69, 0xd0, 0x59,
- 0x9e, 0xea, 0x8b, 0x87, 0xbf, 0x06, 0x3d, 0xcf, 0xdc, 0x86, 0x06, 0x9f, 0xb9, 0xaf, 0xf9, 0xca,
- 0x69, 0x6e, 0x77, 0x14, 0x73, 0x2a, 0x10, 0xa8, 0x49, 0xf6, 0xda, 0xf1, 0xc5, 0xb3, 0x20, 0xbf,
- 0x6c, 0x75, 0xa1, 0xf6, 0x23, 0x12, 0x98, 0x41, 0xb3, 0x6e, 0xbb, 0x8d, 0x9e, 0x18, 0x07, 0xcb,
- 0xaf, 0xe5, 0x44, 0x6f, 0x35, 0x46, 0x74, 0x16, 0x43, 0x1a, 0x31, 0xed, 0x46, 0xec, 0xf6, 0xe2,
- 0x44, 0x52, 0x13, 0xb8, 0x83, 0x0a, 0x4d, 0x3d, 0xb6, 0xb6, 0xba, 0x8e, 0xc9, 0x6d, 0x18, 0xf4,
- 0x9b, 0x42, 0xd1, 0xa1, 0xc0, 0xba, 0xe3, 0xaf, 0x5b, 0xb6, 0x1d, 0xc6, 0xd9, 0x38, 0x90, 0xce,
- 0xfb, 0xba, 0x24, 0x86, 0x2a, 0xc3, 0x75, 0xa7, 0xa5, 0xc7, 0x68, 0xf6, 0x4d, 0x60, 0xe1, 0xe2,
- 0xbe, 0x0f, 0x3d, 0x9a, 0x8b, 0x16, 0x9b, 0x37, 0xfa, 0x52, 0x99, 0x8b, 0x06, 0x92, 0x42, 0x9a,
- 0x25, 0x14, 0x98, 0x4e, 0xd4, 0xab, 0x23, 0xcc, 0x00, 0x4f, 0x02, 0xa5, 0xde, 0xa8, 0xe8, 0xd8,
- 0xdf, 0x37, 0xf0, 0xa0, 0xdc, 0xd6, 0x7e, 0x52, 0x06, 0x73, 0xd8, 0x01, 0x2f, 0x40, 0xe1, 0x06,
- 0x81, 0xf9, 0x88, 0xf6, 0x65, 0x61, 0x5f, 0x60, 0x5c, 0x65, 0xb6, 0x80, 0x78, 0x41, 0x6f, 0x59,
- 0xdd, 0x7e, 0x41, 0x17, 0x8c, 0xbe, 0xd4, 0x01, 0x80, 0xc8, 0x03, 0x01, 0xf9, 0x65, 0x21, 0x87,
- 0xe0, 0x61, 0xdc, 0x1d, 0x15, 0x2a, 0xbf, 0x22, 0x83, 0x59, 0x34, 0x49, 0x09, 0x40, 0x69, 0x70,
- 0xa0, 0x38, 0x76, 0x77, 0x3f, 0x5a, 0x16, 0x09, 0x1e, 0x53, 0x35, 0x92, 0x3f, 0x12, 0x9e, 0xb9,
- 0x63, 0x11, 0x31, 0xbc, 0x4c, 0x08, 0xbf, 0x0f, 0x0a, 0xcd, 0xe7, 0x87, 0x30, 0x77, 0x54, 0xf0,
- 0x3d, 0x5c, 0x04, 0xc5, 0x8d, 0x1e, 0x46, 0xee, 0x4b, 0xb2, 0xc8, 0xa5, 0x1d, 0x07, 0x0e, 0x83,
- 0x21, 0x33, 0xab, 0xeb, 0xb4, 0xcd, 0xee, 0x7a, 0x74, 0xaa, 0x36, 0x4a, 0x50, 0xef, 0xa2, 0xfe,
- 0xe1, 0xe4, 0xc4, 0xf9, 0x4d, 0x89, 0xf7, 0x59, 0x60, 0x19, 0x31, 0x07, 0xef, 0x6e, 0x05, 0x27,
- 0x3a, 0x96, 0x67, 0x5e, 0xec, 0x42, 0xdd, 0x6e, 0xbb, 0xfb, 0x44, 0x1c, 0x74, 0x5a, 0x75, 0xe0,
- 0x85, 0x7a, 0x0f, 0x28, 0x78, 0xfe, 0x7e, 0x97, 0xcc, 0x13, 0xd9, 0x73, 0x7a, 0xb1, 0x45, 0x35,
- 0x51, 0x76, 0x83, 0x7c, 0xc5, 0xba, 0x75, 0x4e, 0x89, 0xb9, 0x75, 0xaa, 0x4f, 0x02, 0x45, 0xc7,
- 0xb5, 0xb6, 0x2d, 0x72, 0x45, 0xdd, 0xc2, 0x81, 0xb0, 0xad, 0xc4, 0x14, 0x68, 0xe0, 0x2c, 0x06,
- 0xcd, 0xaa, 0x3e, 0x05, 0xcc, 0x58, 0xbb, 0xe6, 0x36, 0xbc, 0xdf, 0xb2, 0xc9, 0xa1, 0xf6, 0x85,
- 0x3b, 0x4e, 0x1f, 0x38, 0x82, 0x48, 0xdf, 0x1b, 0x51, 0x56, 0xf5, 0x6e, 0x70, 0x4d, 0xdb, 0x85,
- 0xa6, 0x0f, 0x91, 0x80, 0xce, 0x5b, 0x9d, 0x6d, 0xe8, 0x57, 0xb7, 0xd6, 0x2c, 0xcf, 0xb3, 0xec,
- 0x6d, 0x7a, 0x0b, 0x65, 0x7c, 0x06, 0xed, 0x83, 0x92, 0x68, 0x64, 0x3a, 0x2c, 0x19, 0xa2, 0x12,
- 0x23, 0xdc, 0x96, 0xcd, 0x48, 0x51, 0x16, 0x74, 0x8e, 0x7d, 0xb5, 0x50, 0xcc, 0xb8, 0x78, 0xb6,
- 0xb2, 0x1f, 0xfa, 0x7f, 0x5f, 0x02, 0xd3, 0x15, 0xe7, 0x8a, 0x8d, 0x9b, 0xc9, 0x9d, 0x62, 0x96,
- 0xf2, 0x80, 0x63, 0xe6, 0xfc, 0xbd, 0xcb, 0x89, 0x67, 0xca, 0x70, 0x6d, 0x83, 0x22, 0x63, 0x60,
- 0x48, 0x6c, 0x77, 0x82, 0xb7, 0xe1, 0x26, 0x95, 0x93, 0xbd, 0x5c, 0x7f, 0x5b, 0x06, 0xf9, 0x8a,
- 0xeb, 0xf4, 0xb4, 0xb7, 0xe5, 0x52, 0x38, 0x89, 0x75, 0x5c, 0xa7, 0xd7, 0xc2, 0xd7, 0x59, 0x46,
- 0xfb, 0x22, 0x6c, 0x9a, 0x7a, 0x27, 0x98, 0xee, 0x39, 0x9e, 0xe5, 0x07, 0x93, 0x90, 0x85, 0x3b,
- 0x1e, 0x33, 0xb0, 0x2f, 0x58, 0xa7, 0x99, 0x8c, 0x30, 0x3b, 0xea, 0xf3, 0xb1, 0x08, 0x91, 0x5c,
- 0x90, 0x18, 0x83, 0x2b, 0x3d, 0xfb, 0x52, 0xb5, 0x97, 0xb1, 0x48, 0x3e, 0x8d, 0x47, 0xf2, 0xb1,
- 0x03, 0x24, 0xec, 0x3a, 0xbd, 0xb1, 0xb8, 0x75, 0xbc, 0x32, 0x44, 0xf5, 0xe9, 0x1c, 0xaa, 0xb7,
- 0x08, 0x95, 0x99, 0x3d, 0xa2, 0x1f, 0xcc, 0x03, 0x80, 0x8d, 0x94, 0x0d, 0x34, 0x7d, 0x12, 0xb3,
- 0xd0, 0x7e, 0x38, 0xcf, 0xc8, 0xb2, 0xc4, 0xcb, 0xf2, 0xf1, 0x31, 0x36, 0x10, 0x26, 0x1f, 0x23,
- 0xd1, 0x12, 0x28, 0xec, 0xa1, 0xd7, 0x54, 0xa2, 0x82, 0x24, 0xf0, 0xa3, 0x41, 0xbe, 0xd4, 0x7e,
- 0x2b, 0x07, 0x0a, 0x38, 0x41, 0x3d, 0x03, 0x00, 0x36, 0x0b, 0xc8, 0x91, 0xcc, 0x1c, 0x36, 0x00,
- 0x98, 0x14, 0xac, 0xad, 0x56, 0x87, 0xbe, 0x26, 0x06, 0x77, 0x94, 0x80, 0xbe, 0xc6, 0xc6, 0x02,
- 0xa6, 0x45, 0xcd, 0x07, 0x26, 0x05, 0x7d, 0x8d, 0x9f, 0x6a, 0x70, 0x8b, 0xdc, 0x34, 0x90, 0x37,
- 0xa2, 0x84, 0xf0, 0xeb, 0x5a, 0x78, 0x3f, 0x65, 0xf0, 0x35, 0x4e, 0x41, 0x53, 0x69, 0xac, 0x96,
- 0x4b, 0x51, 0x11, 0x45, 0x9c, 0xa9, 0x3f, 0x59, 0x7b, 0x5d, 0xa8, 0x36, 0x15, 0x4e, 0x6d, 0x6e,
- 0x4f, 0x21, 0xde, 0xec, 0x95, 0xe7, 0x4f, 0x0b, 0x60, 0xa6, 0xee, 0x74, 0xa8, 0xee, 0x30, 0xd3,
- 0xcd, 0x4f, 0x15, 0x52, 0x4d, 0x37, 0x43, 0x1a, 0x31, 0x0a, 0xf2, 0x0c, 0x5e, 0x41, 0xc4, 0x28,
- 0xb0, 0xfa, 0xa1, 0x2e, 0x81, 0x22, 0xd6, 0xde, 0x83, 0x17, 0x1f, 0x26, 0x91, 0xc0, 0xa2, 0x35,
- 0xe8, 0x97, 0xff, 0xe9, 0x74, 0xec, 0x7f, 0x80, 0x02, 0xae, 0x60, 0xc2, 0xde, 0x10, 0x5f, 0x51,
- 0x29, 0xb9, 0xa2, 0x72, 0x72, 0x45, 0xf3, 0xfd, 0x15, 0x4d, 0xb3, 0x8a, 0x10, 0xa7, 0x21, 0xd9,
- 0xeb, 0xf8, 0xdf, 0x4e, 0x01, 0x50, 0x37, 0x2f, 0x5b, 0xdb, 0x64, 0x6f, 0xf9, 0x0f, 0x83, 0xd9,
- 0x13, 0xdd, 0x05, 0xfe, 0x31, 0x66, 0x20, 0xbc, 0x13, 0x4c, 0xd1, 0x71, 0x8f, 0x56, 0xe4, 0x3a,
- 0xae, 0x22, 0x11, 0x15, 0x62, 0xd4, 0x3e, 0xe8, 0x1b, 0x41, 0x7e, 0xee, 0x8e, 0x76, 0xa9, 0xef,
- 0x8e, 0xf6, 0xc1, 0x3b, 0x18, 0x31, 0x37, 0xb7, 0x6b, 0xef, 0x13, 0x3e, 0x43, 0xc5, 0xf0, 0xc3,
- 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x09, 0x4c, 0x39, 0xe1, 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb5,
- 0xb7, 0x1c, 0x23, 0xc8, 0x29, 0xb8, 0x75, 0x26, 0xc4, 0xc7, 0x44, 0x8e, 0x29, 0x9e, 0x5a, 0x09,
- 0xa2, 0x36, 0xa2, 0x7a, 0x9c, 0xb7, 0xfc, 0x9d, 0x9a, 0x65, 0x5f, 0xf2, 0xb4, 0xef, 0x13, 0xb3,
- 0x20, 0x19, 0xfc, 0xa5, 0x74, 0xf8, 0xf3, 0x51, 0x93, 0x9a, 0x3c, 0x6a, 0xf7, 0xc4, 0x51, 0x19,
- 0xcc, 0x6d, 0x0c, 0x80, 0x77, 0x81, 0x22, 0x61, 0x94, 0x76, 0xa2, 0x67, 0x63, 0xf1, 0x0b, 0x29,
- 0x19, 0xf4, 0x0b, 0xed, 0xbd, 0x21, 0x8e, 0xe7, 0x38, 0x1c, 0x97, 0x0e, 0xc5, 0x59, 0xe6, 0x90,
- 0x9e, 0x7d, 0x22, 0x98, 0xa2, 0x92, 0x56, 0x17, 0xd8, 0x56, 0xac, 0x1c, 0x53, 0x01, 0x28, 0xae,
- 0x39, 0x97, 0x61, 0xcb, 0x51, 0x72, 0xe8, 0x3f, 0xe2, 0xaf, 0xe5, 0x28, 0x92, 0xf6, 0xaa, 0x69,
- 0x30, 0x1d, 0x86, 0xcb, 0xfb, 0x7d, 0x09, 0x28, 0x65, 0x3c, 0x43, 0x5b, 0x76, 0x9d, 0x5d, 0x52,
- 0x23, 0x71, 0x7f, 0xfc, 0x9f, 0x11, 0x76, 0x10, 0x09, 0xc3, 0xd8, 0xf5, 0x17, 0x16, 0x83, 0x25,
- 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42, 0x0e, 0x23, 0xa2, 0xa5, 0x64, 0xdf, 0xd4,
- 0x3e, 0x2b, 0x81, 0x42, 0xb9, 0xeb, 0xd8, 0x90, 0x3d, 0x34, 0x3a, 0xf4, 0x74, 0xe2, 0xe0, 0x7d,
- 0x0c, 0xed, 0xb9, 0x92, 0xa8, 0xad, 0x11, 0x09, 0x00, 0x95, 0x2d, 0x28, 0x5b, 0xb1, 0x41, 0x2a,
- 0x91, 0x74, 0xf6, 0x02, 0xfd, 0xaa, 0x04, 0x66, 0x48, 0x64, 0xb2, 0x52, 0xb7, 0xab, 0x3d, 0x26,
- 0x12, 0xea, 0x80, 0x90, 0x83, 0xda, 0x2f, 0x0b, 0x1f, 0x8a, 0x0a, 0x6b, 0x15, 0xd2, 0x4e, 0x11,
- 0xa2, 0x2d, 0xdd, 0x19, 0x1d, 0xb1, 0x9d, 0xb8, 0xa1, 0x0c, 0x65, 0x2f, 0xea, 0x3f, 0x90, 0x90,
- 0x01, 0x60, 0x5f, 0x5a, 0x77, 0xe1, 0x65, 0x0b, 0x5e, 0xd1, 0x1e, 0x1d, 0x09, 0xfb, 0x60, 0xd8,
- 0xa5, 0x37, 0x09, 0x2f, 0xe2, 0x30, 0x24, 0x63, 0x37, 0xc2, 0x66, 0xbb, 0x51, 0x26, 0xda, 0x8b,
- 0xf7, 0xc7, 0xc2, 0x62, 0xc8, 0x18, 0x6c, 0x76, 0xc1, 0x35, 0x9b, 0x78, 0x2e, 0xb2, 0x17, 0xec,
- 0xaf, 0x4e, 0x81, 0xe9, 0x0d, 0xdb, 0xeb, 0x75, 0x4d, 0x6f, 0x47, 0xfb, 0x37, 0x19, 0x14, 0xc9,
- 0x75, 0x9b, 0xda, 0x77, 0x71, 0xd1, 0x5d, 0x9e, 0xbd, 0x07, 0xdd, 0xc0, 0x81, 0x87, 0x3c, 0x44,
- 0xf6, 0x91, 0xc4, 0xd8, 0x47, 0xda, 0x07, 0x65, 0xd1, 0x49, 0x6a, 0x50, 0x28, 0xbd, 0xdf, 0x33,
- 0x3e, 0xa0, 0x48, 0xcf, 0x6a, 0xfb, 0x7b, 0x2e, 0xf4, 0x06, 0x06, 0x14, 0x89, 0xa5, 0xb2, 0x4e,
- 0xbe, 0x32, 0xc2, 0xcf, 0x35, 0x13, 0x4c, 0xd1, 0xc4, 0x03, 0x9b, 0x51, 0x07, 0x23, 0x1e, 0x9c,
- 0x02, 0x45, 0xd3, 0xf5, 0x2d, 0xcf, 0xa7, 0xdb, 0xb3, 0xf4, 0x09, 0x75, 0x97, 0xe4, 0xdf, 0x86,
- 0xdb, 0x0d, 0xe2, 0x40, 0x85, 0x09, 0xda, 0xaf, 0x08, 0xcd, 0x1f, 0x93, 0x6b, 0x9e, 0x0e, 0xf2,
- 0xfb, 0x47, 0x58, 0xe1, 0x7e, 0x14, 0xb8, 0xca, 0x28, 0xb5, 0xf4, 0x4d, 0x12, 0x36, 0x28, 0x8c,
- 0x10, 0xd4, 0xd1, 0xde, 0x23, 0x33, 0xeb, 0x77, 0xfb, 0xdc, 0x18, 0x41, 0xa5, 0x18, 0x8d, 0x11,
- 0x61, 0x42, 0xc2, 0x5e, 0x37, 0xb7, 0x84, 0x2b, 0x0b, 0x2f, 0xe1, 0x6a, 0xbf, 0x24, 0xbc, 0x17,
- 0x15, 0x8a, 0x72, 0xc8, 0x1a, 0x60, 0xd2, 0x75, 0x7c, 0x1f, 0x16, 0xda, 0x57, 0x1a, 0x56, 0xd2,
- 0x11, 0xc2, 0xf6, 0xcd, 0x53, 0x40, 0x2a, 0x55, 0xb5, 0x1f, 0x9d, 0x02, 0x73, 0xe7, 0x5d, 0xcb,
- 0xb7, 0xec, 0xed, 0x96, 0xe3, 0x74, 0x3d, 0xed, 0x1b, 0xcc, 0x46, 0xc5, 0x53, 0x40, 0xb1, 0xed,
- 0xd8, 0x5b, 0xd6, 0x36, 0x15, 0xe3, 0x19, 0xae, 0x72, 0xa5, 0xea, 0xe2, 0xba, 0xeb, 0x5c, 0xb6,
- 0x3a, 0xd0, 0x2d, 0xe3, 0x5c, 0x06, 0xcd, 0x8d, 0xf4, 0x98, 0x09, 0xbc, 0x76, 0x7b, 0xff, 0x57,
- 0x6c, 0x79, 0x61, 0xe4, 0x17, 0x9a, 0xc8, 0xc4, 0x5d, 0xab, 0x82, 0xe9, 0xae, 0x69, 0x6f, 0xef,
- 0x05, 0x33, 0xef, 0xfe, 0x5d, 0xd4, 0x38, 0x4a, 0x35, 0xfa, 0x91, 0x11, 0x7e, 0x8e, 0x9d, 0xdc,
- 0x90, 0xa9, 0x4f, 0xda, 0x1e, 0xfe, 0x7f, 0xf6, 0xa3, 0x39, 0x30, 0xcb, 0x14, 0xaa, 0xce, 0x82,
- 0xa9, 0x8a, 0xbe, 0x5c, 0xda, 0xa8, 0xb5, 0x94, 0x63, 0x48, 0x8a, 0xcd, 0x8d, 0xb5, 0xb5, 0x92,
- 0x51, 0xfd, 0x1e, 0x5d, 0xc9, 0xa1, 0x77, 0x2b, 0x46, 0x09, 0x3d, 0x2b, 0x12, 0x7a, 0x68, 0xae,
- 0x36, 0x8c, 0x96, 0x5e, 0x57, 0x64, 0x64, 0x8f, 0xea, 0xcf, 0x5a, 0x2f, 0xd5, 0x2b, 0x4a, 0x1e,
- 0xfd, 0x5f, 0xda, 0xa8, 0xd5, 0xf4, 0x96, 0x52, 0x88, 0x42, 0xb1, 0x15, 0x51, 0x72, 0xb9, 0xd4,
- 0xdc, 0x28, 0xd5, 0x94, 0x29, 0x94, 0xbc, 0xbc, 0x51, 0xaf, 0x5f, 0x50, 0xa6, 0x51, 0x11, 0xe5,
- 0x46, 0x7d, 0xb9, 0x5a, 0xd1, 0xeb, 0x2d, 0x65, 0x46, 0xbd, 0x0a, 0x1c, 0x6f, 0xb6, 0x8c, 0x52,
- 0x75, 0x65, 0xb5, 0xb5, 0xdc, 0x30, 0xce, 0x97, 0x8c, 0x8a, 0x02, 0x54, 0x05, 0xcc, 0xad, 0x1b,
- 0x8d, 0x65, 0x1d, 0xc7, 0xf2, 0x28, 0xd5, 0x94, 0x59, 0xf4, 0x55, 0xcb, 0x28, 0xd5, 0x9b, 0xb5,
- 0x52, 0x4b, 0x57, 0xe6, 0xce, 0xde, 0x07, 0xa6, 0x83, 0xea, 0xaa, 0x45, 0x20, 0xe9, 0x75, 0xe5,
- 0x18, 0xfe, 0x6d, 0x2a, 0x39, 0xf4, 0xbb, 0x8c, 0xf8, 0x2d, 0x02, 0xa9, 0xa2, 0x2b, 0x32, 0xfa,
- 0xad, 0xb6, 0x94, 0x3c, 0xfa, 0x5d, 0x47, 0x2c, 0x16, 0x81, 0xb4, 0x5a, 0x55, 0x8a, 0xe8, 0xb7,
- 0xb5, 0xaa, 0x4c, 0xf1, 0xb7, 0x6e, 0x27, 0xf6, 0xc2, 0x07, 0x25, 0x1f, 0x63, 0x68, 0xf8, 0xd1,
- 0x1c, 0x19, 0xff, 0xd7, 0x5e, 0x29, 0x89, 0xf4, 0x75, 0xc9, 0xf4, 0xd3, 0x35, 0x9a, 0xb7, 0xe4,
- 0xc6, 0xd8, 0x6a, 0x54, 0x0d, 0x9c, 0xd2, 0xeb, 0x95, 0xf5, 0x46, 0xb5, 0xde, 0x22, 0x01, 0xb3,
- 0xf4, 0x52, 0x79, 0x15, 0xe3, 0x0c, 0x11, 0x82, 0x6b, 0x8d, 0x8a, 0x5e, 0xc3, 0x2f, 0x96, 0x1b,
- 0x1b, 0xf5, 0x8a, 0xb2, 0x85, 0xca, 0x2a, 0x6d, 0xb4, 0x56, 0x37, 0x0d, 0xfd, 0x99, 0x1b, 0x55,
- 0x43, 0xaf, 0x28, 0xdb, 0x88, 0x46, 0xad, 0x54, 0x5f, 0xd9, 0x28, 0xad, 0xd0, 0xfd, 0xc2, 0x8d,
- 0xf5, 0xf5, 0x06, 0xde, 0x31, 0xdc, 0xd1, 0xfe, 0x21, 0x0f, 0xa6, 0x4b, 0x7b, 0xbe, 0xb3, 0x65,
- 0x75, 0xbb, 0xda, 0x43, 0xd2, 0xe1, 0x9b, 0x62, 0x89, 0x6b, 0x8a, 0x07, 0x1a, 0x50, 0x50, 0x56,
- 0xd8, 0x78, 0x82, 0x04, 0xa6, 0x1d, 0x9e, 0x8e, 0x9c, 0xb1, 0x65, 0xba, 0xd3, 0x4c, 0x1e, 0x89,
- 0x23, 0xae, 0x4d, 0x5b, 0x16, 0x7e, 0x43, 0x1f, 0xcf, 0xde, 0x0f, 0xe6, 0x58, 0x4a, 0x38, 0xa8,
- 0x54, 0x69, 0x85, 0x44, 0x9d, 0x0a, 0xe2, 0xcc, 0x91, 0xa8, 0x53, 0xf8, 0x50, 0x80, 0x84, 0xdb,
- 0x4b, 0xb5, 0x55, 0x43, 0x7a, 0x7a, 0x1c, 0xcc, 0x56, 0xf4, 0x66, 0xd9, 0xa8, 0x62, 0x3f, 0x75,
- 0x25, 0xcf, 0x7b, 0x19, 0x24, 0x5a, 0x66, 0x7c, 0x8d, 0x44, 0x95, 0xf2, 0x5b, 0x42, 0xf6, 0x56,
- 0x3c, 0xed, 0x74, 0x0a, 0xf9, 0x92, 0x47, 0x9a, 0x42, 0x6a, 0x2f, 0xc9, 0x93, 0x75, 0xb2, 0xe6,
- 0xde, 0xee, 0xae, 0xe9, 0xee, 0x73, 0xfe, 0x6a, 0xa3, 0xea, 0x5d, 0xfc, 0xf8, 0x9e, 0x18, 0xa1,
- 0x06, 0x99, 0x50, 0x3d, 0xd7, 0xd9, 0xed, 0x05, 0x7d, 0x35, 0x7d, 0xd2, 0xfe, 0x2f, 0xe1, 0x99,
- 0x63, 0xa9, 0xba, 0xc8, 0x54, 0x66, 0x84, 0xa1, 0xfd, 0x07, 0x24, 0x91, 0x59, 0x64, 0x62, 0x31,
- 0xdf, 0xee, 0x1a, 0xf1, 0x37, 0x79, 0x70, 0x15, 0x8d, 0x3e, 0x12, 0xae, 0x3f, 0x20, 0x53, 0xf5,
- 0x35, 0x99, 0x6a, 0x06, 0x35, 0xa8, 0xe5, 0xc8, 0xa0, 0x66, 0x36, 0xbc, 0xf3, 0x82, 0x1b, 0xde,
- 0x6f, 0x13, 0x3e, 0xf4, 0x50, 0xaa, 0x2e, 0x0e, 0xa8, 0xe3, 0x64, 0xb6, 0xe5, 0x5f, 0x20, 0x89,
- 0xac, 0xb6, 0x0a, 0x71, 0xf8, 0xed, 0xae, 0x6b, 0xef, 0xc8, 0x81, 0x05, 0x5e, 0x55, 0xd4, 0x27,
- 0x83, 0xe9, 0x1e, 0x4d, 0xa1, 0x72, 0x39, 0x1d, 0xa7, 0x5c, 0x46, 0x98, 0x13, 0x41, 0x04, 0xed,
- 0x4e, 0xcf, 0xb1, 0xec, 0x70, 0x5d, 0x3e, 0x78, 0x46, 0xf3, 0x4e, 0x3c, 0x75, 0x08, 0x62, 0xd1,
- 0xe1, 0x87, 0x28, 0x02, 0x69, 0x9e, 0x89, 0x40, 0x8a, 0x84, 0xe8, 0xc3, 0x5d, 0x7c, 0xa3, 0xca,
- 0x9e, 0x4b, 0x1c, 0x5e, 0x24, 0x83, 0x4d, 0x3a, 0xfb, 0x74, 0x30, 0x1d, 0x94, 0x8f, 0xac, 0xbb,
- 0x46, 0xad, 0x56, 0x5a, 0x2b, 0x91, 0x85, 0xca, 0xc6, 0xba, 0x5e, 0x2f, 0x55, 0x95, 0x1c, 0x1a,
- 0xe8, 0x6a, 0x6b, 0xcd, 0xd6, 0x46, 0xa5, 0xda, 0x50, 0x24, 0xfc, 0x84, 0x32, 0x95, 0xd7, 0xd7,
- 0x15, 0x59, 0x7b, 0xe3, 0x14, 0x98, 0x5a, 0x31, 0xbb, 0x5d, 0xe8, 0xee, 0x6b, 0x5f, 0x95, 0x80,
- 0x12, 0xcc, 0x0e, 0xd6, 0x4c, 0xdb, 0xda, 0x82, 0x9e, 0x9f, 0xbc, 0x50, 0xf1, 0x3e, 0xe1, 0x6b,
- 0x96, 0x68, 0x19, 0x8b, 0xfd, 0xf4, 0x63, 0x74, 0xfc, 0x36, 0x90, 0xb7, 0xec, 0x2d, 0x87, 0x2e,
- 0x57, 0xf4, 0xfb, 0xdb, 0x04, 0x1f, 0xe3, 0x6d, 0x03, 0x9c, 0x51, 0xf0, 0xa6, 0x25, 0x41, 0x2e,
- 0xb2, 0x5f, 0xb5, 0x78, 0x47, 0x1e, 0xcc, 0x07, 0x4c, 0x54, 0xed, 0x0e, 0x7c, 0x90, 0xdd, 0x06,
- 0xfd, 0xc9, 0xbc, 0x68, 0xf0, 0x9b, 0xfe, 0xfa, 0x60, 0x52, 0x31, 0x22, 0x6d, 0x01, 0xd0, 0x36,
- 0x7d, 0xb8, 0xed, 0xb8, 0x56, 0xb8, 0x16, 0xf1, 0xe4, 0x34, 0xd4, 0xca, 0xe4, 0xeb, 0x7d, 0x83,
- 0xa1, 0xa3, 0xde, 0x03, 0x66, 0x61, 0x18, 0x6d, 0x30, 0xd8, 0x26, 0x4d, 0xc4, 0x8b, 0xcd, 0xaf,
- 0xfd, 0x81, 0x50, 0x8c, 0x1d, 0x91, 0x6a, 0xa6, 0xc3, 0x6c, 0x73, 0xb4, 0xae, 0x67, 0xa3, 0xbe,
- 0x56, 0x32, 0x9a, 0xab, 0xa5, 0x5a, 0xad, 0x5a, 0x5f, 0x09, 0xc3, 0xde, 0xaa, 0x60, 0xa1, 0xd2,
- 0x38, 0x5f, 0x67, 0xe2, 0x12, 0xe7, 0xb5, 0x75, 0x30, 0x1d, 0xc8, 0x6b, 0xd0, 0x29, 0x2a, 0x56,
- 0x66, 0xf4, 0x14, 0x15, 0x93, 0x84, 0x4c, 0x43, 0xab, 0x1d, 0xba, 0xd6, 0xe3, 0xff, 0xda, 0x6f,
- 0x9a, 0xa0, 0x80, 0xfd, 0x59, 0xb4, 0x77, 0xe1, 0x79, 0x71, 0xaf, 0x6b, 0xb6, 0xa1, 0xb6, 0x9b,
- 0x62, 0x25, 0x3c, 0xb8, 0xf7, 0x53, 0x3a, 0x70, 0xef, 0x27, 0xfe, 0x4b, 0x47, 0x8c, 0x93, 0x83,
- 0x7c, 0x68, 0x0c, 0x92, 0x85, 0x0f, 0x47, 0x93, 0xe8, 0xd9, 0x44, 0x5c, 0x6f, 0x28, 0x9b, 0x31,
- 0x2a, 0x19, 0xcf, 0x53, 0xba, 0x55, 0x60, 0x31, 0x1f, 0xa8, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f,
- 0xca, 0x83, 0x42, 0xb3, 0xd7, 0xb5, 0x7c, 0xed, 0xe7, 0xa4, 0xb1, 0x60, 0x46, 0xee, 0x6a, 0x95,
- 0x87, 0xde, 0xd5, 0x1a, 0xf9, 0x4b, 0xe6, 0x05, 0xfc, 0x25, 0x5b, 0xf0, 0x41, 0x9f, 0xf7, 0x97,
- 0xbc, 0x93, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0x63, 0x07, 0x88, 0x14, 0x57, 0x6b, 0xc0, 0x9d, 0x08,
- 0x67, 0x9f, 0x48, 0x43, 0xb3, 0x03, 0x50, 0x5c, 0x6a, 0xb4, 0x5a, 0x8d, 0x35, 0xe5, 0x18, 0x9e,
- 0x7e, 0x35, 0xd6, 0x49, 0xa0, 0xdc, 0x6a, 0xbd, 0xae, 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0xb8, 0x2f,
- 0x71, 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d, 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd,
- 0xb4, 0x0c, 0x0a, 0x6b, 0xd0, 0xdd, 0x86, 0xda, 0xb3, 0x53, 0x38, 0xd8, 0x6d, 0x59, 0xae, 0x47,
- 0x42, 0xeb, 0x47, 0x0e, 0x76, 0x6c, 0x9a, 0x7a, 0x23, 0x98, 0xf7, 0x60, 0xdb, 0xb1, 0x3b, 0x41,
- 0x26, 0xd2, 0x1f, 0xf1, 0x89, 0xda, 0xcb, 0x53, 0x42, 0x86, 0x19, 0x1d, 0x8b, 0x97, 0x5c, 0x1a,
- 0x60, 0x06, 0x95, 0x9a, 0x3d, 0x30, 0x5f, 0x97, 0xd1, 0x47, 0xbd, 0x7d, 0xed, 0xe5, 0xc2, 0x9e,
- 0x8f, 0xb7, 0x82, 0xe2, 0xc5, 0xe0, 0x8e, 0x26, 0x39, 0xb6, 0x3f, 0xa6, 0x79, 0xd4, 0x25, 0x70,
- 0xc2, 0x83, 0x5d, 0xd8, 0xf6, 0x61, 0x07, 0x35, 0x5d, 0x63, 0x68, 0xa7, 0x70, 0x30, 0xbb, 0xf6,
- 0x3b, 0x2c, 0x80, 0x77, 0xf3, 0x00, 0xde, 0x34, 0x40, 0x94, 0xa8, 0x42, 0xf1, 0x73, 0x13, 0x54,
- 0x8d, 0x66, 0xd7, 0x09, 0x0d, 0xdf, 0xe0, 0x19, 0xbd, 0xdb, 0xf1, 0x77, 0xbb, 0xf8, 0x1d, 0x3d,
- 0x1a, 0x1c, 0x3c, 0xab, 0x8b, 0x60, 0xca, 0xb4, 0xf7, 0xf1, 0xab, 0x7c, 0x42, 0xad, 0x83, 0x4c,
- 0xda, 0xab, 0x42, 0xe4, 0xef, 0xe5, 0x90, 0x7f, 0xbc, 0x18, 0xbb, 0xd9, 0x03, 0xff, 0x43, 0x53,
- 0xa0, 0xb0, 0x6e, 0x7a, 0x3e, 0xd4, 0xfe, 0xb7, 0x2c, 0x8a, 0xfc, 0x4d, 0x60, 0x61, 0xcb, 0x69,
- 0xef, 0x79, 0xb0, 0xc3, 0x37, 0xca, 0xbe, 0xd4, 0x71, 0x60, 0xae, 0xde, 0x02, 0x94, 0x20, 0x91,
- 0x92, 0x0d, 0x5c, 0x60, 0x0f, 0xa4, 0xe3, 0x6b, 0xe0, 0xbc, 0x75, 0xd3, 0xf5, 0x1b, 0x5b, 0x38,
- 0x2d, 0xbc, 0x06, 0x8e, 0x4d, 0xe4, 0xa0, 0x2f, 0x26, 0x40, 0x3f, 0x15, 0x0f, 0xfd, 0xb4, 0x00,
- 0xf4, 0x6a, 0x09, 0x4c, 0x6f, 0x59, 0x5d, 0x88, 0x3f, 0x98, 0xc1, 0x1f, 0x0c, 0x1a, 0x93, 0xb0,
- 0xec, 0xc3, 0x31, 0x69, 0xd9, 0xea, 0x42, 0x23, 0xfc, 0x2c, 0x98, 0xc8, 0x80, 0x68, 0x22, 0x53,
- 0x23, 0x27, 0xe1, 0x90, 0xe1, 0x65, 0x9b, 0xbb, 0x30, 0xd8, 0xf8, 0xb6, 0xe9, 0xb1, 0xf4, 0x8e,
- 0xe9, 0x9b, 0x18, 0x8c, 0x39, 0x03, 0xff, 0xe7, 0x7d, 0xb2, 0xe5, 0x7e, 0x9f, 0xec, 0xe7, 0xcb,
- 0xe9, 0x7a, 0xc4, 0x80, 0xd9, 0x98, 0x16, 0x75, 0x31, 0x00, 0x88, 0x58, 0x8a, 0xe1, 0x33, 0x02,
- 0xa6, 0x6d, 0xba, 0xd0, 0x5f, 0x67, 0xbd, 0xa0, 0x0b, 0x06, 0x9f, 0x88, 0x0f, 0xe1, 0x78, 0x4d,
- 0x73, 0x97, 0x5c, 0xf3, 0x56, 0x46, 0xef, 0xe8, 0xe1, 0x8a, 0x03, 0xe9, 0x51, 0xff, 0x5b, 0x18,
- 0x77, 0xff, 0x3b, 0xa8, 0x8e, 0xd9, 0x37, 0xc3, 0xd7, 0xe6, 0x81, 0x5c, 0xde, 0xf3, 0x1f, 0xd1,
- 0xdd, 0xef, 0xb7, 0x84, 0x7d, 0xcc, 0x69, 0x7f, 0xb6, 0xe7, 0x1f, 0x6d, 0xef, 0x9b, 0x52, 0x4b,
- 0xc4, 0x7c, 0xd9, 0xe3, 0xea, 0x96, 0xbd, 0x8e, 0xbc, 0x4d, 0x0e, 0x8f, 0x46, 0x3d, 0x94, 0x3b,
- 0xbc, 0x69, 0xae, 0x91, 0xfe, 0x89, 0xe9, 0x19, 0xc2, 0xe7, 0xa0, 0xe3, 0xc9, 0x73, 0x37, 0x13,
- 0x60, 0xd7, 0x56, 0x2c, 0xca, 0x39, 0x83, 0x3c, 0x68, 0xaf, 0x10, 0x3e, 0x30, 0x4a, 0xc4, 0x96,
- 0x78, 0x8c, 0x27, 0x9d, 0x4d, 0xf5, 0x1a, 0xa1, 0x63, 0xa3, 0x09, 0xc5, 0x66, 0x0f, 0xd8, 0xdf,
- 0xb3, 0xc7, 0x74, 0x4a, 0x87, 0x46, 0x4c, 0x7b, 0xb5, 0xf0, 0x82, 0x3e, 0xa9, 0xf6, 0x90, 0xbd,
- 0xfa, 0x74, 0xf2, 0x16, 0x73, 0x14, 0x4b, 0x2c, 0x78, 0x02, 0xf7, 0xd6, 0xca, 0xa0, 0x48, 0x16,
- 0x7e, 0xb5, 0x37, 0x0b, 0x37, 0x11, 0xd4, 0x1b, 0xf1, 0xc7, 0x77, 0xc2, 0xe7, 0x34, 0x6b, 0x0e,
- 0xdc, 0x31, 0x9f, 0x7c, 0xaa, 0x63, 0x3e, 0x7c, 0x04, 0x16, 0x81, 0x76, 0x44, 0xea, 0x98, 0xf1,
- 0x74, 0x32, 0x4d, 0x0b, 0x1b, 0xc8, 0x50, 0xf6, 0x78, 0xbf, 0xb0, 0x00, 0xe6, 0x48, 0xd1, 0xe4,
- 0x7c, 0xa1, 0xf6, 0x1e, 0xe9, 0xdb, 0x07, 0x75, 0xb5, 0x0e, 0xe6, 0xae, 0x60, 0xb6, 0xc9, 0x7d,
- 0xb4, 0x74, 0xe5, 0xe2, 0x96, 0xc4, 0x75, 0x0f, 0x52, 0xcf, 0xe0, 0x06, 0x5b, 0xee, 0x7b, 0x24,
- 0x63, 0xb2, 0xc1, 0x42, 0x0e, 0x4f, 0x14, 0xb1, 0x91, 0xc5, 0x26, 0xa9, 0xa7, 0x40, 0xf1, 0xb2,
- 0x05, 0xaf, 0x54, 0x3b, 0xd4, 0xba, 0xa5, 0x4f, 0xda, 0xaf, 0x09, 0xfb, 0x4c, 0xb2, 0x70, 0x53,
- 0x5e, 0xb2, 0xd5, 0x42, 0x31, 0xcf, 0xc9, 0xa1, 0x6c, 0x4d, 0x20, 0x1a, 0x90, 0x44, 0xee, 0xcc,
- 0xa6, 0x61, 0xe6, 0xcb, 0x29, 0x14, 0x31, 0xce, 0x70, 0xe6, 0x83, 0xf0, 0x25, 0x9e, 0x35, 0x27,
- 0x02, 0x88, 0xca, 0x1f, 0x4b, 0x9f, 0x2f, 0x16, 0x19, 0x6e, 0x48, 0xd1, 0xd9, 0x4b, 0xfe, 0x75,
- 0x32, 0x98, 0x69, 0x42, 0x7f, 0xd9, 0x82, 0xdd, 0x8e, 0xa7, 0xb9, 0x87, 0x37, 0x8d, 0x6e, 0x03,
- 0xc5, 0x2d, 0x4c, 0x6c, 0xd8, 0xe6, 0x24, 0xcd, 0xa6, 0xbd, 0x56, 0x12, 0xf5, 0x03, 0xa2, 0xab,
- 0x6f, 0x01, 0xb7, 0x63, 0x81, 0x49, 0xec, 0x34, 0x5d, 0x72, 0xc9, 0x13, 0xb8, 0xc6, 0x47, 0x06,
- 0x73, 0x78, 0xfb, 0x1f, 0xfa, 0xa5, 0xae, 0xb5, 0x6d, 0x6b, 0x7b, 0x63, 0x68, 0x21, 0xea, 0xed,
- 0xa0, 0x60, 0x22, 0x6a, 0xd4, 0xdd, 0x4d, 0x1b, 0xd8, 0x79, 0xe2, 0xf2, 0x0c, 0x92, 0x31, 0xc5,
- 0xa5, 0x19, 0x91, 0x62, 0x07, 0x3c, 0x4f, 0xf0, 0xd2, 0x8c, 0xa1, 0x85, 0x67, 0x8f, 0xd8, 0x57,
- 0x64, 0x70, 0x92, 0x32, 0x70, 0x0e, 0xba, 0xbe, 0xd5, 0x36, 0xbb, 0x04, 0xb9, 0x17, 0xe7, 0xc6,
- 0x01, 0xdd, 0x2a, 0x98, 0xbf, 0xcc, 0x92, 0xa5, 0x10, 0x9e, 0x1d, 0x08, 0x21, 0xc7, 0x80, 0xc1,
- 0x7f, 0x98, 0xe2, 0xf2, 0x01, 0x4e, 0xaa, 0x1c, 0xcd, 0x09, 0x5e, 0x3e, 0x20, 0xcc, 0x44, 0xf6,
- 0x10, 0xbf, 0x8c, 0x06, 0xd5, 0x8c, 0xba, 0xcf, 0x3f, 0x14, 0xc6, 0x76, 0x03, 0xcc, 0x62, 0x2c,
- 0xc9, 0x87, 0x74, 0x19, 0x22, 0x41, 0x89, 0xc3, 0x7e, 0x87, 0x5e, 0x97, 0x1e, 0x7e, 0x6b, 0xb0,
- 0x74, 0xb4, 0xf3, 0x00, 0x44, 0xaf, 0xd8, 0x4e, 0x3a, 0x17, 0xd7, 0x49, 0x4b, 0x62, 0x9d, 0xf4,
- 0x9b, 0x84, 0xc3, 0x1c, 0x0e, 0x66, 0xfb, 0xf0, 0xea, 0x21, 0x16, 0xe0, 0x6e, 0x78, 0xe9, 0xd9,
- 0xeb, 0xc5, 0xab, 0xa8, 0x5e, 0x54, 0xf6, 0x7a, 0x5d, 0xab, 0x8d, 0xe6, 0x53, 0x1f, 0x1f, 0xcb,
- 0x7c, 0x8a, 0xed, 0x0f, 0xe4, 0xbe, 0xfe, 0xe0, 0x10, 0x96, 0xf4, 0xcd, 0xe0, 0x38, 0x29, 0xa2,
- 0x1c, 0xb2, 0x55, 0x20, 0x41, 0xdc, 0xfa, 0x92, 0xf9, 0x88, 0xe2, 0x82, 0x4a, 0x10, 0x0a, 0x61,
- 0x84, 0xa5, 0xcf, 0x74, 0xc6, 0x6e, 0x5a, 0x05, 0x89, 0xe3, 0x6c, 0x02, 0x47, 0xb2, 0xf2, 0xc4,
- 0xda, 0xdd, 0xc0, 0x37, 0xda, 0x6b, 0x5f, 0xcc, 0x8f, 0x63, 0x44, 0x78, 0x06, 0xf5, 0x34, 0x95,
- 0x63, 0x97, 0x34, 0xa2, 0x22, 0xc3, 0x7e, 0xa4, 0x05, 0x1f, 0xf4, 0x57, 0x8f, 0x11, 0xbf, 0x54,
- 0xf5, 0x16, 0x70, 0xfc, 0xa2, 0xd9, 0xbe, 0xb4, 0xed, 0x3a, 0x7b, 0xf8, 0xee, 0x6f, 0x87, 0x5e,
- 0x22, 0xbe, 0x7a, 0xcc, 0xe8, 0x7f, 0xa1, 0xde, 0x11, 0x98, 0x0e, 0x85, 0x61, 0xa6, 0xc3, 0xea,
- 0x31, 0x6a, 0x3c, 0xa8, 0x4f, 0x0c, 0x3b, 0x9d, 0x62, 0x62, 0xa7, 0xb3, 0x7a, 0x2c, 0xe8, 0x76,
- 0xd4, 0x0a, 0x98, 0xee, 0x58, 0x97, 0xf1, 0x56, 0x35, 0x9e, 0x75, 0x0d, 0x0b, 0x3a, 0x54, 0xb1,
- 0x2e, 0x93, 0x8d, 0xed, 0xd5, 0x63, 0x46, 0xf8, 0xa5, 0xba, 0x02, 0x66, 0xf0, 0xb6, 0x00, 0x26,
- 0x33, 0x9d, 0x2a, 0xa0, 0xd0, 0xea, 0x31, 0x23, 0xfa, 0x16, 0x59, 0x1f, 0x79, 0x7c, 0xee, 0xfa,
- 0xde, 0x60, 0xbb, 0x3d, 0x97, 0x6a, 0xbb, 0x1d, 0xc9, 0x82, 0x6c, 0xb8, 0x9f, 0x02, 0x85, 0x36,
- 0x96, 0xb0, 0x44, 0x25, 0x4c, 0x1e, 0xd5, 0xbb, 0x41, 0x7e, 0xd7, 0x74, 0x83, 0xc9, 0xf3, 0x4d,
- 0xc3, 0xe9, 0xae, 0x99, 0xee, 0x25, 0x84, 0x20, 0xfa, 0x6a, 0x69, 0x0a, 0x14, 0xb0, 0xe0, 0xc2,
- 0x3f, 0xda, 0xdb, 0xf2, 0xc4, 0x0c, 0x29, 0x3b, 0x36, 0x1a, 0xf6, 0x5b, 0x4e, 0x70, 0x38, 0xfd,
- 0xd7, 0x72, 0xe3, 0xb1, 0x20, 0xaf, 0x62, 0xae, 0xfa, 0xb0, 0xad, 0x67, 0xef, 0xc1, 0xfb, 0xe1,
- 0x3e, 0x5d, 0x12, 0x1d, 0xf4, 0x4a, 0x3d, 0x03, 0x80, 0x4f, 0x4f, 0xea, 0x85, 0x41, 0x4c, 0x99,
- 0x94, 0x68, 0xf9, 0xa0, 0x30, 0xdc, 0x51, 0xe5, 0x77, 0x46, 0x30, 0x5d, 0xfa, 0x05, 0x11, 0x3f,
- 0x03, 0xef, 0x5a, 0x36, 0x53, 0xe7, 0xe0, 0x31, 0x65, 0xa7, 0x94, 0xd6, 0xa8, 0x19, 0xc2, 0x5e,
- 0xf6, 0x7d, 0xd3, 0x5b, 0xf2, 0xe4, 0xb6, 0x03, 0x72, 0x02, 0x5a, 0x7f, 0xd0, 0xf2, 0x7c, 0xcb,
- 0xde, 0xa6, 0xe7, 0x9b, 0x3f, 0x33, 0x16, 0xa5, 0x19, 0x30, 0xe0, 0xc8, 0x03, 0x07, 0x9c, 0x03,
- 0x01, 0x82, 0xf2, 0x43, 0x02, 0x04, 0x15, 0xd2, 0xad, 0x1c, 0x7e, 0x84, 0xd5, 0x9f, 0x75, 0x5e,
- 0x7f, 0xee, 0x8a, 0x01, 0x68, 0x90, 0x5c, 0xc6, 0x62, 0xdf, 0xbc, 0x2b, 0xd4, 0x94, 0x26, 0xa7,
- 0x29, 0xf7, 0x8e, 0xce, 0x48, 0xf6, 0xda, 0xf2, 0xa1, 0x3c, 0xb8, 0x2a, 0x62, 0xa6, 0x0e, 0xaf,
- 0x50, 0x45, 0xf9, 0xfd, 0xb1, 0x28, 0x4a, 0x7a, 0x47, 0xe7, 0xac, 0x35, 0xe6, 0xb7, 0x84, 0xcf,
- 0xed, 0xf7, 0x03, 0x15, 0xca, 0x26, 0x46, 0x59, 0x4e, 0x81, 0x22, 0xe9, 0x61, 0x28, 0x34, 0xf4,
- 0x29, 0x65, 0x77, 0x23, 0x76, 0xda, 0x5f, 0x94, 0xb7, 0x09, 0xe8, 0x0f, 0x5d, 0xd7, 0x68, 0xed,
- 0xb9, 0x76, 0xd5, 0xf6, 0x1d, 0xed, 0x07, 0xc7, 0xa2, 0x38, 0xa1, 0x37, 0x9c, 0x3c, 0x8a, 0x37,
- 0xdc, 0x48, 0xab, 0x1c, 0x41, 0x0d, 0x8e, 0x64, 0x95, 0x23, 0xa6, 0xf0, 0xec, 0xf1, 0x7b, 0xa7,
- 0x0c, 0x4e, 0xd1, 0xc9, 0xd6, 0x12, 0x6f, 0x21, 0x6a, 0x17, 0xc6, 0x01, 0xe4, 0xc9, 0xc0, 0x4c,
- 0xa2, 0x7e, 0xf4, 0xf8, 0x81, 0x8f, 0x52, 0x90, 0x78, 0x9b, 0x25, 0x37, 0x1d, 0xec, 0xe3, 0x70,
- 0x2c, 0x48, 0x89, 0x5d, 0x62, 0x99, 0x82, 0x8d, 0xec, 0x31, 0x7b, 0xa9, 0x0c, 0x8a, 0x24, 0x46,
- 0x82, 0xb6, 0x91, 0x89, 0xc3, 0x04, 0x7f, 0x3f, 0x8b, 0xc0, 0x8e, 0x1c, 0xe1, 0x26, 0xb3, 0xf8,
- 0x11, 0x69, 0xf6, 0xe2, 0x06, 0xb2, 0x32, 0x01, 0x17, 0x42, 0x09, 0xcc, 0x36, 0xa1, 0x5f, 0x36,
- 0x5d, 0xd7, 0x32, 0xb7, 0xc7, 0xe5, 0xf1, 0x2d, 0xea, 0x3d, 0xac, 0x7d, 0x23, 0x27, 0x7a, 0x96,
- 0x3d, 0x5c, 0x08, 0x0f, 0x58, 0x8d, 0x89, 0x02, 0xfe, 0x7a, 0xa1, 0xf3, 0xea, 0xc3, 0xa8, 0x4d,
- 0xc0, 0x63, 0x5b, 0x02, 0x53, 0x41, 0x1c, 0x8c, 0xdb, 0xb8, 0xd8, 0x28, 0x3b, 0xfe, 0x6e, 0x70,
- 0x0c, 0x06, 0xff, 0x3f, 0x18, 0x7f, 0x41, 0x7b, 0x65, 0x4a, 0x47, 0xf9, 0xe4, 0x20, 0x1e, 0xe9,
- 0xda, 0x58, 0x1a, 0x77, 0xf8, 0xa3, 0x0a, 0xdb, 0xf1, 0xcb, 0x53, 0x74, 0x39, 0xb2, 0x66, 0xfa,
- 0xf0, 0x41, 0xed, 0x0f, 0x65, 0x30, 0xd5, 0x84, 0x3e, 0x1a, 0x6f, 0x11, 0xfb, 0x87, 0xd6, 0x70,
- 0x95, 0x59, 0xf1, 0xa0, 0x67, 0x6b, 0xd5, 0xfb, 0xc0, 0x4c, 0xcf, 0x75, 0xda, 0xd0, 0xf3, 0xe8,
- 0xea, 0x05, 0xeb, 0xa8, 0x36, 0x68, 0xf4, 0xc7, 0xac, 0x2d, 0xae, 0x07, 0xdf, 0x18, 0xd1, 0xe7,
- 0x69, 0xcd, 0x00, 0x42, 0x89, 0x56, 0x70, 0xd2, 0x66, 0x40, 0x52, 0xe1, 0xd9, 0x03, 0xfd, 0xbb,
- 0x32, 0x98, 0x6b, 0x42, 0x3f, 0x94, 0x62, 0x8a, 0x4d, 0x8e, 0x78, 0x78, 0x39, 0x28, 0xe5, 0xc3,
- 0x41, 0xf9, 0x4e, 0xe1, 0x4b, 0x61, 0x79, 0x69, 0x86, 0xc4, 0xc6, 0x82, 0xe7, 0x5b, 0x84, 0xee,
- 0x82, 0x15, 0xe3, 0x60, 0x02, 0xc7, 0xd7, 0x1e, 0x0b, 0x66, 0x30, 0x2f, 0xb8, 0xc1, 0xfe, 0x68,
- 0x3e, 0x6a, 0xbc, 0x5f, 0xc8, 0xa8, 0xf1, 0xde, 0x03, 0x0a, 0xbb, 0xa6, 0x7b, 0x29, 0x38, 0x7c,
- 0xfb, 0x38, 0xb1, 0xd5, 0x2f, 0xcf, 0x20, 0x5f, 0x0d, 0xf6, 0xd3, 0x2c, 0xa4, 0xf3, 0xd3, 0x7c,
- 0xbd, 0x94, 0x6a, 0x24, 0x24, 0x73, 0x87, 0x31, 0x36, 0xf9, 0x14, 0xe3, 0x66, 0x42, 0xd9, 0xd9,
- 0x2b, 0xc7, 0x8b, 0x65, 0x30, 0x8d, 0xc6, 0x6d, 0x6c, 0x8f, 0x9f, 0x3f, 0xbc, 0x3a, 0x0c, 0x36,
- 0xf4, 0x53, 0xf6, 0xc0, 0x81, 0x44, 0xc6, 0x67, 0xde, 0xa7, 0xe8, 0x81, 0x93, 0x0a, 0xcf, 0x1e,
- 0x8f, 0x77, 0x13, 0x3c, 0x70, 0x7b, 0xd0, 0xde, 0x20, 0x03, 0x79, 0x05, 0xfa, 0x93, 0xb6, 0x22,
- 0xdf, 0x2e, 0x1c, 0x5e, 0x94, 0x13, 0x18, 0xe6, 0x79, 0x71, 0x05, 0x8e, 0xa7, 0x01, 0x89, 0xc5,
- 0x15, 0x15, 0x62, 0x20, 0x7b, 0xd4, 0xde, 0x4f, 0x50, 0x23, 0x9b, 0x0b, 0x3f, 0x30, 0x86, 0x5e,
- 0x75, 0xb2, 0x0b, 0x1f, 0x81, 0x00, 0x31, 0x8d, 0xa3, 0x6a, 0x6f, 0x83, 0x0a, 0xcf, 0x1e, 0xb9,
- 0x9f, 0x91, 0xf1, 0x25, 0x66, 0xe5, 0x1d, 0xd8, 0xbe, 0x04, 0x3b, 0xec, 0x45, 0xce, 0xa3, 0x42,
- 0x77, 0x1a, 0x4c, 0xb5, 0x09, 0x35, 0x0c, 0xde, 0xb4, 0x11, 0x3c, 0xf2, 0x37, 0x0b, 0x25, 0xde,
- 0x9d, 0xc5, 0x77, 0x44, 0xe4, 0xf3, 0xb1, 0xe0, 0x22, 0x76, 0xe1, 0x95, 0x40, 0xf1, 0x13, 0x30,
- 0x5b, 0xc8, 0x2c, 0xa3, 0xda, 0x76, 0x6c, 0xed, 0xfb, 0x0f, 0x0f, 0xcb, 0xb5, 0x60, 0xc6, 0x6a,
- 0x3b, 0x36, 0x0e, 0x01, 0x17, 0x1c, 0x02, 0x0a, 0x13, 0x82, 0xb7, 0xfa, 0xae, 0xf3, 0x80, 0x45,
- 0x77, 0xcd, 0xa3, 0x84, 0x51, 0x8d, 0x09, 0xc4, 0xfa, 0x51, 0x19, 0x13, 0x03, 0xca, 0xce, 0x1e,
- 0xb2, 0x4f, 0x44, 0xde, 0x6d, 0xa4, 0x2b, 0x7c, 0x44, 0xac, 0x02, 0x8f, 0x32, 0x9c, 0xb1, 0xb5,
- 0x38, 0x92, 0xe1, 0x2c, 0x81, 0x81, 0x09, 0xdc, 0x44, 0x18, 0xe1, 0x98, 0xf9, 0x1a, 0xf0, 0x21,
- 0xd0, 0x19, 0x9f, 0x79, 0x38, 0x22, 0x3a, 0x47, 0x63, 0x22, 0x7e, 0x98, 0x86, 0xa7, 0xa7, 0x16,
- 0x8f, 0xf6, 0x3f, 0xc6, 0x01, 0xce, 0x5d, 0xa3, 0xf8, 0x2b, 0x10, 0x6f, 0x05, 0xed, 0xad, 0x92,
- 0x68, 0x08, 0x94, 0x03, 0x12, 0x44, 0x54, 0xc6, 0x82, 0xe0, 0x9b, 0x84, 0x62, 0x93, 0x88, 0x94,
- 0x9f, 0x3d, 0x80, 0x2f, 0x92, 0xc1, 0x02, 0xf6, 0x11, 0xe8, 0x42, 0xd3, 0x25, 0x1d, 0xe5, 0x58,
- 0x1c, 0xe5, 0xdf, 0x2d, 0x1c, 0xe0, 0x87, 0x97, 0x43, 0xc4, 0xc7, 0x58, 0xa0, 0x10, 0x8b, 0xee,
- 0x23, 0xc8, 0xc2, 0x44, 0xb6, 0x51, 0x94, 0x90, 0x05, 0xaa, 0xe2, 0xe3, 0xc1, 0x23, 0xa5, 0x47,
- 0x2e, 0x2f, 0x8c, 0xa0, 0xb1, 0x4d, 0xd8, 0x23, 0x57, 0x84, 0x89, 0xec, 0x31, 0x79, 0xc3, 0xed,
- 0x74, 0xc1, 0xb9, 0x65, 0x5e, 0xec, 0x42, 0xed, 0xd5, 0xf9, 0xf0, 0x44, 0xdb, 0xef, 0x8e, 0xc5,
- 0x03, 0xf3, 0x10, 0x97, 0x51, 0xa9, 0x20, 0xef, 0x3a, 0x57, 0xc8, 0xd2, 0xd6, 0xbc, 0x81, 0xff,
- 0x93, 0x78, 0x96, 0xdd, 0xbd, 0x5d, 0x9b, 0x9c, 0x0c, 0x9d, 0x37, 0x82, 0x47, 0xf5, 0x46, 0x30,
- 0x7f, 0xc5, 0xf2, 0x77, 0x56, 0xa1, 0xd9, 0x81, 0xae, 0xe1, 0x5c, 0xc1, 0x1e, 0x73, 0xd3, 0x06,
- 0x9f, 0xc8, 0xfb, 0xaf, 0x08, 0xd8, 0x97, 0x48, 0x28, 0x93, 0x39, 0xfe, 0x96, 0xc6, 0xf2, 0x8c,
- 0xe7, 0x2a, 0x7b, 0x85, 0xf9, 0x80, 0x0c, 0x66, 0x0c, 0xe7, 0x0a, 0x55, 0x92, 0xff, 0xe3, 0x68,
- 0x75, 0x24, 0xf5, 0x44, 0x0f, 0x4b, 0x2e, 0x64, 0x7f, 0xe2, 0x13, 0xbd, 0xc4, 0xe2, 0x27, 0x72,
- 0x72, 0x69, 0xce, 0x70, 0xae, 0x34, 0xa1, 0x4f, 0x5a, 0x84, 0xb6, 0x39, 0x26, 0x27, 0x6b, 0xcb,
- 0x23, 0x04, 0xe9, 0x3c, 0x3c, 0x7c, 0x4e, 0xbb, 0x8b, 0x10, 0x0a, 0x28, 0x64, 0x71, 0xd2, 0xbb,
- 0x08, 0x43, 0x39, 0x98, 0x40, 0x8c, 0x14, 0x19, 0xcc, 0x1a, 0xce, 0x15, 0x34, 0x34, 0x2c, 0x5b,
- 0xdd, 0xee, 0x78, 0x46, 0xc8, 0xb4, 0xc6, 0x7f, 0x20, 0x86, 0x80, 0x8b, 0x89, 0x1b, 0xff, 0x43,
- 0x18, 0xc8, 0x1e, 0x86, 0xe7, 0x93, 0xc6, 0x12, 0x8c, 0xd0, 0xf6, 0x78, 0x70, 0x18, 0xb5, 0x41,
- 0x84, 0x6c, 0x1c, 0x59, 0x83, 0x88, 0xe3, 0x60, 0x22, 0x3b, 0x27, 0x0b, 0x65, 0x3c, 0xcc, 0x8f,
- 0xb7, 0x4d, 0xbc, 0x37, 0x9d, 0x6b, 0x22, 0x1d, 0x76, 0x39, 0x46, 0xc6, 0x82, 0x46, 0x0a, 0x17,
- 0x44, 0x01, 0x1e, 0xb2, 0xc7, 0xe3, 0xa3, 0x32, 0x98, 0x23, 0x2c, 0x3c, 0x42, 0xac, 0x80, 0x91,
- 0x1a, 0x15, 0x5b, 0x83, 0xa3, 0x69, 0x54, 0x09, 0x1c, 0x4c, 0xe4, 0x3e, 0x7f, 0x64, 0xc7, 0x8d,
- 0x70, 0x7c, 0x3c, 0x0e, 0xc1, 0x91, 0x8d, 0xb1, 0x31, 0x1e, 0x21, 0x1f, 0xc5, 0x18, 0x3b, 0xa2,
- 0x63, 0xe4, 0xcf, 0x0f, 0x5b, 0xd1, 0x38, 0x31, 0x38, 0x44, 0x53, 0x18, 0x23, 0x0c, 0x23, 0x36,
- 0x85, 0x23, 0x42, 0xe2, 0x4f, 0x65, 0x00, 0x08, 0x03, 0x6b, 0xce, 0x65, 0x7c, 0x91, 0xe6, 0x18,
- 0xba, 0xb3, 0x7e, 0xb7, 0x7a, 0x79, 0x88, 0x5b, 0x7d, 0xca, 0x10, 0x2e, 0x69, 0x57, 0x02, 0x19,
- 0x29, 0xa3, 0x4a, 0x4e, 0x7c, 0x25, 0x30, 0xb9, 0xfc, 0xec, 0x31, 0xfe, 0x32, 0xb1, 0xe6, 0xa2,
- 0x03, 0xa6, 0x3f, 0x3b, 0x16, 0x94, 0x99, 0xd9, 0xbf, 0xcc, 0xcf, 0xfe, 0x0f, 0x81, 0xed, 0xa8,
- 0x36, 0xe2, 0xb0, 0x83, 0xa3, 0xd9, 0xdb, 0x88, 0x47, 0x77, 0x40, 0xf4, 0x07, 0xf2, 0xe0, 0x38,
- 0xed, 0x44, 0xbe, 0x1d, 0x20, 0x4e, 0x79, 0x0e, 0x8f, 0xeb, 0x24, 0x87, 0xa0, 0x3c, 0xae, 0x05,
- 0xa9, 0x34, 0x4b, 0x99, 0x02, 0xec, 0x4d, 0x64, 0x75, 0xa3, 0xa8, 0x3f, 0xd8, 0x33, 0xed, 0x8e,
- 0x78, 0xb8, 0xdf, 0x21, 0xc0, 0x07, 0x6b, 0x8d, 0x32, 0xbf, 0xd6, 0x38, 0x60, 0x65, 0x32, 0xf5,
- 0xce, 0x35, 0x16, 0x19, 0x61, 0x77, 0xe2, 0x3b, 0xd7, 0xf1, 0x65, 0x67, 0x8f, 0xd2, 0x7b, 0x65,
- 0x90, 0x6f, 0x3a, 0xae, 0xaf, 0xbd, 0x20, 0x4d, 0xeb, 0x24, 0x92, 0x8f, 0x40, 0x0a, 0x9e, 0xd5,
- 0x32, 0xc8, 0xa3, 0xca, 0xd1, 0x19, 0xc3, 0x6d, 0xc9, 0x47, 0x9d, 0x4d, 0xdf, 0xc4, 0x5e, 0xdd,
- 0xa8, 0xfc, 0xc5, 0xd6, 0x7e, 0x0f, 0x1a, 0xf8, 0xe3, 0xb4, 0xf1, 0x74, 0x88, 0xfc, 0x9a, 0xf1,
- 0x07, 0x30, 0x32, 0x8b, 0xa7, 0x13, 0x5b, 0x72, 0xf6, 0xb8, 0x3d, 0x7c, 0x9c, 0xfa, 0xb6, 0x2e,
- 0x5b, 0x5d, 0xa8, 0xbd, 0x80, 0xb8, 0x8c, 0xd4, 0xcd, 0x5d, 0x28, 0x7e, 0x24, 0x26, 0xd1, 0xb5,
- 0x15, 0xc7, 0x97, 0x95, 0xa3, 0xf8, 0xb2, 0x69, 0x1b, 0x14, 0x39, 0x80, 0x4e, 0x58, 0x9a, 0x74,
- 0x83, 0x4a, 0x28, 0x7b, 0x22, 0x71, 0x3a, 0x4f, 0x34, 0xa1, 0x4f, 0x8c, 0xca, 0x46, 0x70, 0x45,
- 0xd2, 0xf7, 0x8e, 0x25, 0x62, 0x67, 0x78, 0xa1, 0x8e, 0xdc, 0x77, 0x03, 0xd3, 0x07, 0x58, 0x70,
- 0xd6, 0x78, 0x70, 0xbe, 0x3b, 0x5e, 0x40, 0x3c, 0x93, 0x63, 0x81, 0xe9, 0xed, 0x21, 0x4c, 0xeb,
- 0x1c, 0x4c, 0x77, 0x8f, 0xc8, 0x45, 0xf6, 0x80, 0xfd, 0x78, 0x01, 0x1c, 0x27, 0x93, 0xfe, 0x92,
- 0xdd, 0xa1, 0x11, 0x56, 0xdf, 0x2c, 0x1d, 0xf1, 0x66, 0xdb, 0xc1, 0x10, 0xac, 0x5c, 0x2c, 0xe7,
- 0x42, 0x5f, 0x2c, 0x67, 0x75, 0x89, 0x84, 0x73, 0x45, 0x9d, 0x28, 0xde, 0x69, 0x1b, 0x16, 0x66,
- 0x02, 0xcb, 0x1e, 0x77, 0xb9, 0xe1, 0x77, 0xfc, 0x3d, 0xa2, 0x53, 0xe2, 0xf7, 0x88, 0xfe, 0x76,
- 0xba, 0x75, 0x3b, 0x5c, 0x74, 0x9f, 0xc0, 0x33, 0xb6, 0x9d, 0x52, 0xac, 0xe8, 0x09, 0x70, 0xf7,
- 0x5f, 0xc3, 0x9d, 0x2c, 0x8a, 0x20, 0x32, 0xa2, 0x3b, 0x19, 0x26, 0x70, 0x94, 0xee, 0x64, 0xc3,
- 0x18, 0xc8, 0x1e, 0xc7, 0xdf, 0x2e, 0xd0, 0xdd, 0x7c, 0xdc, 0x6e, 0xb4, 0x3f, 0x96, 0x32, 0x1f,
- 0xa5, 0xbf, 0x99, 0x4b, 0xe5, 0xff, 0x8c, 0xf9, 0x4a, 0x1e, 0xa6, 0xd3, 0x78, 0x34, 0x27, 0x91,
- 0x9b, 0xc0, 0xba, 0x91, 0x84, 0x7d, 0xd1, 0xcf, 0x5b, 0x1d, 0x7f, 0x67, 0x4c, 0x27, 0x3a, 0xae,
- 0x20, 0x5a, 0x34, 0x5e, 0x3d, 0x79, 0xd0, 0xfe, 0x35, 0x97, 0x2a, 0x84, 0x54, 0x28, 0x12, 0xcc,
- 0x56, 0x8c, 0x88, 0x53, 0x04, 0x7e, 0x4a, 0xa4, 0x37, 0x41, 0x8d, 0x3e, 0x67, 0x75, 0xa0, 0xf3,
- 0x08, 0xd4, 0x68, 0xcc, 0xd7, 0xf8, 0x34, 0x3a, 0x89, 0xdc, 0x7f, 0x51, 0x8d, 0x0e, 0x45, 0x32,
- 0x26, 0x8d, 0x4e, 0xa4, 0x97, 0xbd, 0x8c, 0x5f, 0x39, 0x47, 0x27, 0x52, 0x35, 0xcb, 0xbe, 0xa4,
- 0xfd, 0x53, 0x11, 0x28, 0x41, 0x1c, 0x61, 0x7f, 0x87, 0xc6, 0x82, 0xf9, 0x90, 0xf0, 0xdd, 0x28,
- 0x23, 0xc4, 0x7b, 0xe1, 0xc3, 0x49, 0x15, 0x0e, 0x84, 0x93, 0x2a, 0x81, 0x79, 0xcb, 0xf6, 0xa1,
- 0x6b, 0x9b, 0xdd, 0xe5, 0xae, 0xb9, 0xed, 0x9d, 0x9e, 0x1a, 0x78, 0x79, 0x5d, 0x95, 0xc9, 0x63,
- 0xf0, 0x5f, 0xb0, 0x17, 0x88, 0x4e, 0xf3, 0x17, 0x88, 0xc6, 0x44, 0xbf, 0x9a, 0x89, 0x8f, 0x7e,
- 0x15, 0x46, 0xb7, 0x02, 0xc3, 0x83, 0x63, 0x8b, 0xda, 0xc6, 0x29, 0xc3, 0xfd, 0xdd, 0x26, 0x18,
- 0x85, 0x2d, 0x0c, 0xfd, 0xf8, 0x1a, 0x39, 0xd5, 0xea, 0x1e, 0x52, 0x84, 0xc5, 0x7e, 0x25, 0x48,
- 0x6d, 0xa1, 0xb2, 0x95, 0x97, 0xfb, 0x2a, 0x1f, 0x9a, 0x3c, 0x79, 0x01, 0x93, 0x87, 0x55, 0xaa,
- 0x82, 0xe8, 0x9d, 0xae, 0xe2, 0x8b, 0x85, 0x22, 0xb5, 0x9d, 0xc0, 0x69, 0xa4, 0x02, 0x38, 0x11,
- 0x44, 0xbb, 0xed, 0xf5, 0xa0, 0xe9, 0x9a, 0x76, 0x1b, 0x6a, 0x9f, 0x90, 0xc6, 0x61, 0xf6, 0x2e,
- 0x83, 0x69, 0xab, 0xed, 0xd8, 0x4d, 0xeb, 0x39, 0xc1, 0xe5, 0x72, 0xc9, 0x41, 0xd6, 0xb1, 0x44,
- 0xaa, 0xf4, 0x0b, 0x23, 0xfc, 0x56, 0xad, 0x82, 0x99, 0xb6, 0xe9, 0x76, 0x48, 0x10, 0xbe, 0x42,
- 0xdf, 0x45, 0x4e, 0xb1, 0x84, 0xca, 0xc1, 0x27, 0x46, 0xf4, 0xb5, 0xda, 0xe0, 0x85, 0x58, 0xec,
- 0x8b, 0xe6, 0x11, 0x4b, 0xac, 0x12, 0x7d, 0xc4, 0xc9, 0x1c, 0x49, 0xc7, 0x85, 0x5d, 0x93, 0x5c,
- 0x3a, 0x3e, 0x45, 0xee, 0x88, 0x0e, 0x13, 0xd2, 0x2e, 0x0f, 0xe0, 0xa2, 0x0e, 0xa0, 0x31, 0xe9,
- 0xe5, 0x01, 0x21, 0x2e, 0xb2, 0xd7, 0xcc, 0x77, 0x15, 0xc1, 0x3c, 0xe9, 0xd5, 0xa8, 0x38, 0xb5,
- 0x17, 0xc9, 0xa0, 0xd8, 0x84, 0xfe, 0xfd, 0x70, 0x5f, 0x6b, 0x1e, 0x7e, 0x4c, 0x56, 0x80, 0x7c,
- 0x29, 0x0c, 0x38, 0x88, 0xfe, 0xa6, 0xdd, 0xb7, 0x0f, 0xf8, 0x5a, 0x24, 0x3c, 0x4d, 0x7a, 0xdf,
- 0x3e, 0xb9, 0xf8, 0xec, 0xf1, 0xf9, 0x09, 0x19, 0xc8, 0xa5, 0x4e, 0x47, 0x6b, 0x1f, 0x1e, 0x8a,
- 0xeb, 0xc1, 0x6c, 0xd0, 0x66, 0xa2, 0x18, 0x90, 0x6c, 0x52, 0xda, 0x45, 0xd0, 0x50, 0x36, 0xa5,
- 0xce, 0xc4, 0x77, 0x15, 0x12, 0xca, 0xce, 0x1e, 0x94, 0x2f, 0x4c, 0xd1, 0x46, 0xb3, 0xe4, 0x38,
- 0x97, 0xf0, 0x51, 0x99, 0x5f, 0x94, 0x41, 0x61, 0x19, 0xfa, 0xed, 0x1d, 0xcd, 0x1b, 0x4b, 0x9b,
- 0xe9, 0xbb, 0xf7, 0x7c, 0x48, 0x50, 0xce, 0xb4, 0xd1, 0x9f, 0x03, 0xb6, 0x17, 0x31, 0xcb, 0x93,
- 0x8e, 0xfe, 0x9c, 0x58, 0xfa, 0x04, 0x0e, 0xc1, 0xe5, 0xc1, 0x42, 0xb8, 0x02, 0x46, 0x30, 0x7b,
- 0x47, 0xee, 0x11, 0xb7, 0x1e, 0x3a, 0xc4, 0x6e, 0xd6, 0x7e, 0x3f, 0x5d, 0x88, 0xb5, 0x50, 0xe6,
- 0x7c, 0xcd, 0x33, 0x5e, 0x98, 0x4c, 0x11, 0x7c, 0x4d, 0x8c, 0xc1, 0x09, 0xac, 0x00, 0xc8, 0x60,
- 0x1a, 0x33, 0x54, 0xb1, 0x2e, 0x63, 0xd7, 0x43, 0x6e, 0xa1, 0xf2, 0xb9, 0x63, 0x59, 0xa8, 0xbc,
- 0x9b, 0x5f, 0xa8, 0x14, 0x8c, 0x98, 0x1c, 0xac, 0x53, 0xa6, 0xf4, 0xc5, 0x41, 0xdf, 0x8f, 0x7d,
- 0x99, 0x32, 0x85, 0x2f, 0xce, 0x90, 0xf2, 0xb3, 0x47, 0xf4, 0x8d, 0xff, 0x9d, 0x76, 0xd6, 0xc1,
- 0x86, 0xac, 0xf6, 0xbf, 0x4e, 0x80, 0xfc, 0x39, 0xf4, 0xe7, 0x1f, 0xa3, 0x1b, 0xb5, 0x5e, 0x3e,
- 0x86, 0xe0, 0x0e, 0x4f, 0x07, 0x79, 0x44, 0x9f, 0x4e, 0x7b, 0x6e, 0x11, 0xdb, 0x1d, 0x46, 0x8c,
- 0x18, 0xf8, 0x3b, 0xf5, 0x14, 0x28, 0x7a, 0xce, 0x9e, 0xdb, 0x46, 0xe6, 0x37, 0xd2, 0x18, 0xfa,
- 0x94, 0x36, 0xa8, 0x29, 0x47, 0x7a, 0x71, 0x7c, 0x2e, 0xa7, 0xcc, 0x05, 0x4b, 0x32, 0x77, 0xc1,
- 0x52, 0x8a, 0xfd, 0x07, 0x01, 0xde, 0xb2, 0xd7, 0x88, 0x3f, 0xc6, 0x77, 0x0d, 0x76, 0xc6, 0x05,
- 0x7b, 0x8c, 0x58, 0x0e, 0xab, 0x0e, 0x69, 0x1d, 0xc6, 0x79, 0xd1, 0x86, 0x71, 0xe4, 0x27, 0xea,
- 0x30, 0x2e, 0xc0, 0xc3, 0x44, 0x4e, 0xb9, 0x17, 0xa9, 0x93, 0xeb, 0x85, 0x71, 0xa2, 0x9b, 0xe7,
- 0x94, 0xfe, 0x50, 0xe8, 0x8c, 0xd1, 0xf9, 0x75, 0x64, 0x74, 0x8e, 0xc8, 0xfd, 0xf5, 0xd7, 0x65,
- 0x1c, 0x49, 0x33, 0x30, 0x82, 0xc4, 0x2f, 0x4a, 0x4a, 0x0d, 0x11, 0x1a, 0x83, 0xb9, 0x38, 0xd2,
- 0xf3, 0xa3, 0x87, 0x16, 0xe7, 0x45, 0xc7, 0xf0, 0x3f, 0xe9, 0xd0, 0xe2, 0xa2, 0x8c, 0x64, 0x0f,
- 0xe4, 0x2f, 0x90, 0x8b, 0xc9, 0x4a, 0x6d, 0xdf, 0xba, 0x3c, 0xe6, 0x96, 0xc6, 0x0f, 0x2f, 0x29,
- 0xa3, 0x09, 0x1f, 0x90, 0x10, 0xe1, 0x70, 0xd2, 0xd1, 0x84, 0xc5, 0xd8, 0xc8, 0x1e, 0xa6, 0x1f,
- 0x03, 0x48, 0x7a, 0x74, 0x6d, 0xe7, 0x0d, 0x32, 0x90, 0x9b, 0xd0, 0xd7, 0xe0, 0xe1, 0xd1, 0x3a,
- 0x0b, 0xe6, 0x98, 0xa5, 0x83, 0xe0, 0xc2, 0x1b, 0x2e, 0x2d, 0xed, 0x41, 0xf9, 0x50, 0x64, 0xec,
- 0xa2, 0xcb, 0xa4, 0x0f, 0xca, 0x8b, 0x30, 0x31, 0x81, 0x83, 0xf2, 0x74, 0xd9, 0xe7, 0xdb, 0x05,
- 0xa8, 0x71, 0xad, 0x00, 0x1d, 0x0a, 0xa8, 0xa3, 0x58, 0x0a, 0x7a, 0x7b, 0x64, 0x6c, 0x4c, 0x08,
- 0xab, 0x0f, 0xb1, 0x58, 0x35, 0x78, 0xac, 0xee, 0x14, 0x11, 0x93, 0x98, 0xf1, 0x21, 0x34, 0xc1,
- 0x7f, 0x67, 0x08, 0x97, 0xc1, 0xc1, 0xf5, 0xf4, 0x91, 0xf9, 0xc8, 0x1e, 0xb1, 0x9f, 0x23, 0xe3,
- 0x56, 0x93, 0xcc, 0xad, 0xc6, 0x33, 0x6e, 0xd1, 0x69, 0x9b, 0xcc, 0x4d, 0xdb, 0x52, 0x1e, 0xac,
- 0x88, 0xfc, 0x85, 0x03, 0xe6, 0x86, 0x41, 0x94, 0x1f, 0xf3, 0xc1, 0x8a, 0xa1, 0x1c, 0x64, 0x0f,
- 0xce, 0xd7, 0x64, 0x00, 0x56, 0x5c, 0x67, 0xaf, 0xd7, 0x70, 0x3b, 0xd0, 0xd5, 0xfe, 0x2c, 0x9a,
- 0xa9, 0xfd, 0xe4, 0x18, 0x66, 0x6a, 0xeb, 0x00, 0x6c, 0x87, 0xc4, 0xa9, 0x86, 0xdf, 0x2e, 0x36,
- 0x2f, 0x8b, 0x98, 0x32, 0x18, 0x1a, 0xfc, 0xdd, 0xc2, 0xcf, 0xe4, 0x31, 0x4e, 0xea, 0xb3, 0x22,
- 0x72, 0xe3, 0x9c, 0xa9, 0xbd, 0x3b, 0xc4, 0xba, 0xc5, 0x61, 0xfd, 0x8c, 0x43, 0x70, 0x92, 0x3d,
- 0xe6, 0xff, 0x30, 0x05, 0x66, 0xc9, 0xbe, 0x2c, 0x91, 0xe9, 0xdf, 0x44, 0xa0, 0xff, 0xec, 0x18,
- 0x40, 0xdf, 0x00, 0x73, 0x4e, 0x44, 0x9d, 0xf4, 0xa9, 0xec, 0x4a, 0x59, 0x22, 0xec, 0x0c, 0x5f,
- 0x06, 0x47, 0x46, 0xfb, 0x18, 0x8b, 0xbc, 0xc1, 0x23, 0x7f, 0x77, 0x82, 0xbc, 0x19, 0x8a, 0xe3,
- 0x84, 0xfe, 0x3d, 0x21, 0xf4, 0x1b, 0x1c, 0xf4, 0xa5, 0xc3, 0xb0, 0x32, 0x81, 0x7b, 0x15, 0x64,
- 0x90, 0xc7, 0xc7, 0x20, 0xdf, 0x92, 0xe1, 0x42, 0xcc, 0x69, 0x30, 0x85, 0x9b, 0x6c, 0x38, 0x41,
- 0x0c, 0x1e, 0xd1, 0x1b, 0x73, 0xcb, 0x87, 0x6e, 0xb8, 0xc4, 0x1e, 0x3c, 0x22, 0x1e, 0x02, 0xf7,
- 0x73, 0xef, 0x74, 0x91, 0xec, 0x38, 0x87, 0x09, 0x23, 0xcf, 0x1e, 0x59, 0x89, 0x8f, 0xed, 0x60,
- 0xe4, 0x28, 0xb3, 0xc7, 0x21, 0x8c, 0x64, 0x0f, 0xfc, 0x17, 0xf3, 0xe0, 0x34, 0x59, 0xfe, 0x5b,
- 0x76, 0x9d, 0xdd, 0xbe, 0x6b, 0xcc, 0xac, 0xc3, 0xeb, 0xc2, 0x4d, 0x60, 0xc1, 0xe7, 0x1c, 0xef,
- 0xa9, 0x4e, 0xf4, 0xa5, 0x6a, 0xbf, 0xc3, 0x3a, 0xcf, 0x3c, 0x8b, 0x47, 0x72, 0x29, 0x41, 0x80,
- 0x71, 0xbc, 0xa7, 0xde, 0x51, 0x11, 0x64, 0x94, 0x59, 0x4d, 0x94, 0x47, 0x5a, 0x5c, 0x0e, 0x75,
- 0xaa, 0x20, 0xa2, 0x53, 0x1f, 0x0c, 0x75, 0xea, 0xbf, 0x71, 0x3a, 0xb5, 0x72, 0x78, 0x91, 0x4c,
- 0x60, 0x89, 0x69, 0x01, 0x14, 0x97, 0xad, 0xae, 0x0f, 0x5d, 0xed, 0xcb, 0x74, 0x1e, 0xf5, 0xea,
- 0x0c, 0xbb, 0x97, 0x0a, 0x28, 0x6e, 0xe1, 0xd2, 0xa8, 0x41, 0x76, 0xab, 0x18, 0x36, 0x84, 0x43,
- 0x83, 0x7e, 0x9b, 0x36, 0xc8, 0x5f, 0x1f, 0x99, 0xb1, 0x4d, 0xc0, 0x52, 0x04, 0xf9, 0x1b, 0xce,
- 0xc2, 0x44, 0xee, 0xb7, 0x2a, 0x1a, 0x70, 0x17, 0x8d, 0x20, 0x97, 0xb2, 0x43, 0x58, 0x01, 0xb2,
- 0xd5, 0xf1, 0x70, 0xd3, 0x9b, 0x31, 0xd0, 0xdf, 0xb4, 0x2e, 0x47, 0xfd, 0xa2, 0x22, 0x2c, 0x4f,
- 0xda, 0xe5, 0x48, 0x88, 0x8b, 0xec, 0x31, 0xfb, 0x26, 0xf6, 0x37, 0xed, 0x75, 0xcd, 0x36, 0x44,
- 0xdc, 0x67, 0x86, 0xda, 0x02, 0x90, 0xac, 0x60, 0xc4, 0x97, 0x2c, 0xb6, 0x9d, 0x16, 0x0e, 0xd1,
- 0x4e, 0x47, 0x5d, 0x8d, 0x0c, 0x65, 0x8e, 0x2b, 0x7e, 0x64, 0xab, 0x91, 0x89, 0x6c, 0x4c, 0xe0,
- 0xf6, 0xd2, 0xe0, 0x3c, 0xee, 0x44, 0x5b, 0xeb, 0xa8, 0x7b, 0x35, 0x54, 0x58, 0x63, 0x3b, 0x7b,
- 0x3b, 0xca, 0x5e, 0x4d, 0x3c, 0x0f, 0x13, 0x40, 0x6b, 0x81, 0xa2, 0xf5, 0x79, 0x3a, 0x8c, 0x66,
- 0xbc, 0x5d, 0xea, 0x39, 0xae, 0x9f, 0x6e, 0xbb, 0x14, 0x71, 0x67, 0xe0, 0xef, 0xd2, 0x9e, 0xdf,
- 0xe2, 0x8f, 0x67, 0x8f, 0x6b, 0xf8, 0x4c, 0x71, 0x7e, 0x6b, 0x18, 0x03, 0xd9, 0xc3, 0xfb, 0xd6,
- 0x23, 0x1a, 0x3c, 0x47, 0x6d, 0x8e, 0xb4, 0x0d, 0x8c, 0x6d, 0xe8, 0x1c, 0xa5, 0x39, 0xc6, 0xf3,
- 0x90, 0x3d, 0x5e, 0x7f, 0xcf, 0x0c, 0x9c, 0x6f, 0x9a, 0xe0, 0xc0, 0x19, 0xb4, 0xcc, 0xc2, 0x88,
- 0x2d, 0x73, 0xd4, 0xdd, 0x05, 0x2a, 0xeb, 0xf1, 0x0d, 0x98, 0xa3, 0xec, 0x2e, 0x24, 0x30, 0x91,
- 0x3d, 0xe2, 0x6f, 0x96, 0x41, 0xa1, 0x39, 0xf9, 0xf1, 0x72, 0xd4, 0xb9, 0x08, 0x96, 0x55, 0x73,
- 0x6c, 0xc3, 0xe5, 0x28, 0x73, 0x91, 0x58, 0x16, 0x26, 0x10, 0xbf, 0xff, 0x38, 0x98, 0xc3, 0x13,
- 0xee, 0x60, 0xb7, 0xf5, 0xef, 0xe9, 0xa8, 0xf9, 0xfa, 0x0c, 0xdb, 0xea, 0x7d, 0x60, 0x3a, 0xd8,
- 0x1d, 0xa2, 0x23, 0xe7, 0xa2, 0x58, 0xfb, 0x0c, 0xb8, 0x34, 0xc2, 0xef, 0x0f, 0xe5, 0x13, 0x31,
- 0xf6, 0x9d, 0xc0, 0x51, 0x7d, 0x22, 0x8e, 0x74, 0x37, 0xf0, 0xb7, 0xa3, 0x11, 0xf5, 0xfb, 0xb3,
- 0xc3, 0xbc, 0x7f, 0x97, 0x30, 0x3f, 0x60, 0x97, 0xf0, 0x13, 0x2c, 0x96, 0x4d, 0x1e, 0xcb, 0x7b,
- 0x44, 0x45, 0x38, 0xc6, 0xb1, 0xf6, 0xbd, 0x21, 0x9c, 0xe7, 0x38, 0x38, 0x97, 0x0e, 0xc5, 0xcb,
- 0x04, 0xce, 0x4f, 0xe6, 0xa3, 0x31, 0xf7, 0x93, 0x19, 0xb6, 0xe3, 0xbe, 0xc3, 0x19, 0xf9, 0x03,
- 0x87, 0x33, 0xb8, 0x96, 0x5e, 0x38, 0x64, 0x4b, 0xff, 0x24, 0xab, 0x1d, 0x2d, 0x5e, 0x3b, 0x9e,
- 0x2e, 0x8e, 0xc8, 0xf8, 0x46, 0xe6, 0xf7, 0x85, 0xea, 0x71, 0x9e, 0x53, 0x8f, 0xf2, 0xe1, 0x98,
- 0xc9, 0x5e, 0x3f, 0x7e, 0x23, 0x98, 0xd0, 0x1e, 0x71, 0x7b, 0x1f, 0x75, 0x23, 0x92, 0x13, 0xe2,
- 0xd8, 0x46, 0xee, 0x51, 0x36, 0x22, 0x87, 0x71, 0x32, 0x81, 0x90, 0x6e, 0xf3, 0x60, 0x16, 0xf3,
- 0x74, 0xde, 0xea, 0x6c, 0x43, 0x5f, 0x7b, 0x0d, 0x71, 0x55, 0x0c, 0x02, 0x68, 0x8e, 0x29, 0xca,
- 0x51, 0xdc, 0xb1, 0xd9, 0xb4, 0xfe, 0x02, 0x84, 0xc9, 0x45, 0x86, 0xc1, 0x49, 0x07, 0x62, 0x1c,
- 0xca, 0x41, 0xf6, 0x90, 0x7d, 0x8c, 0x38, 0x73, 0xd4, 0xcc, 0x7d, 0x67, 0xcf, 0xd7, 0x1e, 0x1a,
- 0x43, 0x07, 0xbd, 0x04, 0x8a, 0x5d, 0x4c, 0x8d, 0x9e, 0xce, 0x48, 0x9e, 0xee, 0x50, 0x11, 0x90,
- 0xf2, 0x0d, 0xfa, 0x65, 0xda, 0x23, 0x1a, 0x91, 0x1c, 0x09, 0x9d, 0x49, 0x1f, 0xd1, 0x18, 0x52,
- 0xfe, 0x44, 0xae, 0xea, 0x99, 0x46, 0xa5, 0x5b, 0xbb, 0x96, 0x3f, 0xa6, 0x40, 0x10, 0x5d, 0x44,
- 0x2b, 0x08, 0x04, 0x81, 0x1f, 0xd2, 0x1e, 0x3c, 0x65, 0xa4, 0x82, 0x3e, 0x9f, 0xf4, 0xc1, 0xd3,
- 0xe4, 0xe2, 0xb3, 0xc7, 0xe4, 0xa7, 0x49, 0xcb, 0x3a, 0x47, 0x7c, 0x70, 0x33, 0x74, 0xef, 0x1d,
- 0xb9, 0xb1, 0x10, 0xd6, 0x8e, 0xae, 0xb1, 0x0c, 0x2c, 0x3f, 0x7b, 0x60, 0x7e, 0xf1, 0x3b, 0x41,
- 0xa1, 0x02, 0x2f, 0xee, 0x6d, 0x6b, 0x77, 0x83, 0xe9, 0x96, 0x0b, 0x61, 0xd5, 0xde, 0x72, 0x90,
- 0x74, 0x7d, 0xf4, 0x3f, 0x80, 0x84, 0x3e, 0x21, 0x3c, 0x76, 0xa0, 0xd9, 0x89, 0x8e, 0xa1, 0x05,
- 0x8f, 0xda, 0xcb, 0x25, 0x90, 0x6f, 0xfa, 0xa6, 0xaf, 0xcd, 0x84, 0xd8, 0x6a, 0x0f, 0xb1, 0x58,
- 0xdc, 0xcd, 0x63, 0x71, 0x13, 0x27, 0x0b, 0xcc, 0xc1, 0x22, 0xfa, 0x3e, 0x06, 0x00, 0x0d, 0x4c,
- 0x3f, 0xe0, 0x39, 0x36, 0xca, 0x11, 0x9c, 0x94, 0x0c, 0x9e, 0xb5, 0x57, 0x85, 0xe2, 0xbe, 0x97,
- 0x13, 0xf7, 0xe3, 0xc5, 0x8a, 0x98, 0xc0, 0x4a, 0x9b, 0x04, 0x66, 0x90, 0x68, 0x57, 0xa1, 0xd9,
- 0xf1, 0xb4, 0xef, 0x88, 0x94, 0x3f, 0x46, 0xcc, 0xda, 0x87, 0x85, 0x63, 0x7a, 0x92, 0x5a, 0x85,
- 0xc4, 0xe3, 0xfd, 0x05, 0x82, 0x98, 0x26, 0x12, 0x1f, 0xd3, 0xe4, 0x36, 0x90, 0xb7, 0xec, 0x2d,
- 0x87, 0x7a, 0xaf, 0x3d, 0x3a, 0x86, 0x36, 0xd2, 0x09, 0x03, 0x67, 0x14, 0x0c, 0xf8, 0x99, 0xcc,
- 0xd6, 0x44, 0xee, 0xce, 0xcb, 0xa3, 0xd2, 0xb5, 0xff, 0xff, 0x50, 0x61, 0xab, 0x2a, 0xc8, 0xf7,
- 0x4c, 0x7f, 0x87, 0x16, 0x8d, 0xff, 0x23, 0x1b, 0x79, 0xcf, 0x36, 0x6d, 0xc7, 0xde, 0xdf, 0xb5,
- 0x9e, 0x13, 0x5e, 0xd1, 0xcb, 0xa5, 0x21, 0xce, 0xb7, 0xa1, 0x0d, 0x5d, 0xd3, 0x87, 0xcd, 0xcb,
- 0xdb, 0x78, 0x8e, 0x35, 0x6d, 0xb0, 0x49, 0xa9, 0xf5, 0x1f, 0x71, 0x1c, 0xaf, 0xff, 0x5b, 0x56,
- 0x17, 0xe2, 0x80, 0x4f, 0x54, 0xff, 0x83, 0xe7, 0x54, 0xfa, 0x3f, 0xa0, 0x88, 0xec, 0xd1, 0xf8,
- 0x37, 0x09, 0xcc, 0x35, 0x91, 0xc2, 0x35, 0xf7, 0x76, 0x77, 0x4d, 0x77, 0x5f, 0xbb, 0x21, 0x42,
- 0x85, 0x51, 0xcd, 0x1c, 0xa7, 0x9a, 0xda, 0xaf, 0x0b, 0xdf, 0x4e, 0x4d, 0x9b, 0x36, 0x53, 0x42,
- 0xea, 0x76, 0xf0, 0x44, 0x50, 0x40, 0xea, 0x1d, 0xf8, 0xf3, 0x25, 0x36, 0x04, 0x92, 0x53, 0x30,
- 0x30, 0xd6, 0x50, 0xde, 0x26, 0x10, 0x94, 0x43, 0x02, 0xc7, 0x9b, 0xbe, 0xd9, 0xbe, 0xb4, 0xe2,
- 0xb8, 0xce, 0x9e, 0x6f, 0xd9, 0xd0, 0xd3, 0x1e, 0x13, 0x21, 0x10, 0xe8, 0x7f, 0x2e, 0xd2, 0x7f,
- 0xed, 0x3f, 0x72, 0xa2, 0xa3, 0x68, 0xd8, 0xad, 0xb2, 0xe4, 0x63, 0xe2, 0x5c, 0x89, 0x8d, 0x8b,
- 0x22, 0x14, 0xb3, 0x17, 0xda, 0x9b, 0x64, 0xa0, 0xe8, 0x0f, 0xf6, 0x1c, 0xd7, 0xaf, 0x39, 0x6d,
- 0xb3, 0xeb, 0xf9, 0x8e, 0x0b, 0xb5, 0x46, 0xa2, 0xd4, 0x50, 0x0f, 0xd3, 0x71, 0xda, 0xd1, 0xe0,
- 0x48, 0x9f, 0x58, 0xb5, 0x93, 0x79, 0x1d, 0xff, 0x98, 0xf0, 0x2e, 0x23, 0x91, 0x4a, 0x3f, 0x47,
- 0x31, 0x7a, 0x3e, 0xa8, 0x4b, 0x4b, 0xe7, 0x8a, 0x2f, 0xb6, 0xf3, 0x28, 0xc4, 0xd4, 0x04, 0x96,
- 0xca, 0x25, 0x30, 0xdf, 0xdc, 0xbb, 0x18, 0x12, 0xf1, 0x58, 0x23, 0xe4, 0xb5, 0xc2, 0xc1, 0x2c,
- 0xa8, 0xe2, 0xb1, 0x84, 0x62, 0xe4, 0x7b, 0x23, 0x98, 0xf7, 0xd8, 0x6c, 0x14, 0x6f, 0x3e, 0x51,
- 0x30, 0x88, 0xc5, 0xf0, 0x52, 0xb3, 0x17, 0xe0, 0xfb, 0x24, 0x30, 0xdf, 0xe8, 0x41, 0x1b, 0x76,
- 0x88, 0x8f, 0x1d, 0x27, 0xc0, 0x97, 0xa7, 0x14, 0x20, 0x47, 0x28, 0x46, 0x80, 0x91, 0x3f, 0x6c,
- 0x25, 0x10, 0x5e, 0x94, 0x90, 0x4a, 0x70, 0x49, 0xa5, 0x65, 0x2f, 0xb8, 0x2f, 0x49, 0x60, 0xd6,
- 0xd8, 0xb3, 0xd7, 0x5d, 0x07, 0x8d, 0xc6, 0xae, 0x76, 0x4f, 0xd4, 0x41, 0xdc, 0x0a, 0x4e, 0x74,
- 0xf6, 0x5c, 0xbc, 0xfe, 0x54, 0xb5, 0x9b, 0xb0, 0xed, 0xd8, 0x1d, 0x0f, 0xd7, 0xa3, 0x60, 0x1c,
- 0x7c, 0x71, 0x57, 0xfe, 0x05, 0x7f, 0x25, 0xe7, 0xb4, 0x17, 0x09, 0x47, 0xcc, 0x21, 0x95, 0x67,
- 0x8a, 0x16, 0xef, 0x09, 0x04, 0xe3, 0xe2, 0x0c, 0x2b, 0x21, 0x7b, 0xe1, 0x7e, 0x5e, 0x02, 0x6a,
- 0xa9, 0xdd, 0x76, 0xf6, 0x6c, 0xbf, 0x09, 0xbb, 0xb0, 0xed, 0xb7, 0x5c, 0xb3, 0x0d, 0x59, 0xfb,
- 0x59, 0x01, 0x72, 0xc7, 0x72, 0x69, 0x1f, 0x8c, 0xfe, 0x52, 0x39, 0xbe, 0x5c, 0x78, 0xc7, 0x91,
- 0xd4, 0xf2, 0x60, 0x29, 0x29, 0xc4, 0x29, 0xb6, 0xaf, 0x28, 0x58, 0x50, 0xf6, 0x52, 0xfd, 0xa4,
- 0x04, 0x66, 0x82, 0x1e, 0x7b, 0x5b, 0x44, 0x98, 0x3f, 0x9d, 0x72, 0x32, 0x12, 0x12, 0x4f, 0x21,
- 0xc3, 0x77, 0xa5, 0x98, 0x55, 0xc4, 0xd1, 0x4f, 0x27, 0xba, 0x52, 0x7a, 0xd1, 0xa1, 0xc7, 0x7a,
- 0x63, 0x73, 0xb9, 0x51, 0xab, 0xe8, 0x86, 0x22, 0x6b, 0x5f, 0x96, 0x40, 0x7e, 0xdd, 0xb2, 0xb7,
- 0xd9, 0xc0, 0x66, 0x27, 0x91, 0x1d, 0xd9, 0x81, 0x0f, 0xd2, 0x96, 0x4e, 0x1e, 0xd4, 0x3b, 0xc0,
- 0x49, 0x7b, 0x6f, 0xf7, 0x22, 0x74, 0x1b, 0x5b, 0x78, 0x94, 0xf5, 0x5a, 0x4e, 0x13, 0xda, 0xc4,
- 0x08, 0x2d, 0x18, 0x03, 0xdf, 0xf1, 0x26, 0x98, 0xc0, 0xe4, 0x01, 0x71, 0x12, 0x23, 0xf1, 0x90,
- 0x29, 0x89, 0x61, 0x2a, 0xd5, 0xb4, 0x61, 0x00, 0xf1, 0xec, 0x35, 0xf5, 0x37, 0x0b, 0xe0, 0xea,
- 0x92, 0xbd, 0x8f, 0x6d, 0x0a, 0xd2, 0xc1, 0x97, 0x77, 0x4c, 0x7b, 0x1b, 0xe2, 0x01, 0x22, 0x94,
- 0x38, 0x1b, 0xe9, 0x3f, 0xc7, 0x47, 0xfa, 0x57, 0x0d, 0x30, 0xe5, 0xb8, 0x1d, 0xe8, 0x2e, 0xed,
- 0x63, 0x9e, 0xfa, 0x97, 0x9d, 0x69, 0x9b, 0x1c, 0x54, 0xc4, 0x22, 0x25, 0xbf, 0xd8, 0x20, 0xdf,
- 0x1b, 0x01, 0xa1, 0xb3, 0xb7, 0x82, 0x29, 0x9a, 0xa6, 0xce, 0x81, 0xe9, 0x86, 0x51, 0xd1, 0x8d,
- 0xcd, 0x6a, 0x45, 0x39, 0xa6, 0x5e, 0x05, 0x8e, 0x57, 0x5b, 0xba, 0x51, 0x6a, 0x55, 0x1b, 0xf5,
- 0x4d, 0x9c, 0xae, 0xe4, 0xb4, 0xe7, 0xe7, 0x45, 0x3d, 0x7b, 0x93, 0x99, 0x19, 0x04, 0xab, 0x01,
- 0xa6, 0xda, 0x24, 0x03, 0x1e, 0x42, 0x67, 0x53, 0xd5, 0x8e, 0x12, 0x24, 0x09, 0x46, 0x40, 0x48,
- 0x3d, 0x03, 0xc0, 0x15, 0xd7, 0xb1, 0xb7, 0xa3, 0x33, 0x6d, 0xd3, 0x06, 0x93, 0xa2, 0x3d, 0x94,
- 0x03, 0x45, 0xf2, 0x0d, 0xbe, 0xd9, 0x04, 0xff, 0x8b, 0x04, 0x1f, 0x3c, 0x23, 0x8b, 0x17, 0xcb,
- 0x2b, 0x9a, 0x68, 0xd1, 0x47, 0xa4, 0x8b, 0x44, 0x06, 0xc4, 0x12, 0xa6, 0x55, 0xb9, 0x0d, 0x14,
- 0xc9, 0xb7, 0xd4, 0xeb, 0x20, 0x3e, 0x4a, 0x29, 0xc9, 0x26, 0xe8, 0xa7, 0x2c, 0x2e, 0xd3, 0xec,
- 0xb5, 0xf9, 0x23, 0x12, 0x98, 0xae, 0x43, 0xbf, 0xbc, 0x03, 0xdb, 0x97, 0xb4, 0xc7, 0xf1, 0x0b,
- 0xa0, 0x5d, 0x0b, 0xda, 0xfe, 0x85, 0xdd, 0x6e, 0xb8, 0x00, 0x1a, 0x24, 0x68, 0x2f, 0x64, 0x3b,
- 0xdf, 0x67, 0xf0, 0xfa, 0x73, 0xcb, 0x80, 0xba, 0x06, 0x25, 0xc4, 0xa8, 0xcc, 0x29, 0x50, 0x74,
- 0xa1, 0xb7, 0xd7, 0x0d, 0x16, 0xd1, 0xe8, 0x93, 0xf6, 0x70, 0x28, 0xce, 0x32, 0x27, 0xce, 0xdb,
- 0xc4, 0x8b, 0x98, 0x40, 0xd8, 0xd3, 0x3c, 0x98, 0xaa, 0xda, 0x96, 0x6f, 0x99, 0x5d, 0xed, 0x45,
- 0x79, 0x30, 0xdf, 0x84, 0xfe, 0xba, 0xe9, 0x9a, 0xbb, 0xd0, 0x87, 0xae, 0xa7, 0x7d, 0x83, 0xef,
- 0x13, 0x7a, 0x5d, 0xd3, 0xdf, 0x72, 0xdc, 0xdd, 0x40, 0x35, 0x83, 0x67, 0xa4, 0x9a, 0x97, 0xa1,
- 0xeb, 0x45, 0x7c, 0x05, 0x8f, 0xe8, 0xcd, 0x15, 0xc7, 0xbd, 0x84, 0x06, 0x41, 0x3a, 0x4d, 0xa3,
- 0x8f, 0x88, 0x5e, 0xd7, 0xd9, 0xae, 0xc1, 0xcb, 0x30, 0x88, 0xaa, 0x16, 0x3e, 0xa3, 0xb9, 0x40,
- 0xc7, 0xa9, 0x3b, 0x3e, 0xea, 0xb4, 0x6b, 0xce, 0x36, 0x09, 0x3b, 0x3b, 0x6d, 0xf0, 0x89, 0x51,
- 0x2e, 0xf3, 0x32, 0xc4, 0xb9, 0x8a, 0x6c, 0x2e, 0x9a, 0xa8, 0x2e, 0x02, 0x35, 0xfc, 0xac, 0x05,
- 0xbb, 0x70, 0x17, 0xfa, 0xee, 0x3e, 0xbe, 0x5d, 0x62, 0xda, 0x18, 0xf0, 0x86, 0x0e, 0xd0, 0xe2,
- 0x93, 0x75, 0x2a, 0xbd, 0x45, 0x4e, 0x72, 0x87, 0x9a, 0xac, 0x8b, 0x50, 0x9c, 0xc8, 0xed, 0x59,
- 0x32, 0xb2, 0x66, 0x5e, 0x21, 0x83, 0x3c, 0x1e, 0x3c, 0xdf, 0x9c, 0xe3, 0x56, 0x98, 0x76, 0xa1,
- 0xe7, 0x99, 0xdb, 0x30, 0x58, 0x61, 0xa2, 0x8f, 0xea, 0x9d, 0xa0, 0xd0, 0xc5, 0x98, 0x92, 0xc1,
- 0xe1, 0x06, 0xae, 0x66, 0xc8, 0xc0, 0x40, 0xb4, 0xc2, 0x91, 0x00, 0xc3, 0x6d, 0x90, 0x2f, 0xce,
- 0xde, 0x07, 0x0a, 0x04, 0xfe, 0x19, 0x50, 0xa8, 0xe8, 0x4b, 0x1b, 0x2b, 0xca, 0x31, 0xf4, 0x37,
- 0xe0, 0x6f, 0x06, 0x14, 0x96, 0x4b, 0xad, 0x52, 0x4d, 0x91, 0x50, 0x3d, 0xaa, 0xf5, 0xe5, 0x86,
- 0x22, 0xa3, 0xc4, 0xf5, 0x52, 0xbd, 0x5a, 0x56, 0xf2, 0xea, 0x2c, 0x98, 0x3a, 0x5f, 0x32, 0xea,
- 0xd5, 0xfa, 0x8a, 0x52, 0xd0, 0xfe, 0x92, 0xc5, 0xef, 0x2e, 0x1e, 0xbf, 0x1b, 0xe3, 0x78, 0x1a,
- 0x04, 0xd9, 0xcf, 0x87, 0x90, 0xdd, 0xc3, 0x41, 0xf6, 0x9d, 0x22, 0x44, 0x26, 0xe0, 0xce, 0x54,
- 0x04, 0x53, 0xeb, 0xae, 0xd3, 0x86, 0x9e, 0xa7, 0xfd, 0x8c, 0x04, 0x8a, 0x65, 0xd3, 0x6e, 0xc3,
- 0xae, 0x76, 0x4d, 0x04, 0x15, 0x71, 0x15, 0xcd, 0x05, 0xae, 0xa2, 0xda, 0xd7, 0x72, 0xa2, 0xbd,
- 0x1f, 0xa5, 0xbb, 0x48, 0x68, 0xc6, 0xc8, 0x47, 0xac, 0x97, 0x4b, 0x24, 0x35, 0x81, 0x1b, 0x76,
- 0x24, 0x30, 0x43, 0x57, 0x03, 0x2e, 0x42, 0x76, 0x1e, 0xfe, 0x8d, 0x9c, 0xe8, 0xe4, 0x30, 0xa8,
- 0x41, 0x48, 0x26, 0x46, 0x1e, 0x62, 0x13, 0xc1, 0x61, 0xd4, 0x26, 0xb0, 0x79, 0x28, 0x81, 0xd9,
- 0x0d, 0xdb, 0x1b, 0x24, 0x14, 0xf1, 0x70, 0xfc, 0x41, 0x35, 0x18, 0x42, 0x87, 0x0a, 0xc7, 0x3f,
- 0x9c, 0x5e, 0xf6, 0x82, 0xf9, 0x46, 0x0e, 0x9c, 0x5c, 0x81, 0x36, 0x74, 0xad, 0x36, 0xa9, 0x41,
- 0x20, 0x89, 0x7b, 0x78, 0x49, 0x3c, 0x8e, 0xe3, 0x7c, 0xd0, 0x17, 0xbc, 0x04, 0x5e, 0x1d, 0x4a,
- 0xe0, 0x19, 0x9c, 0x04, 0x6e, 0x15, 0xa4, 0x33, 0x81, 0x6b, 0xd5, 0x67, 0xc0, 0x5c, 0xdd, 0xf1,
- 0xad, 0x2d, 0xab, 0x4d, 0x7c, 0xd0, 0x7e, 0x4e, 0x06, 0xf9, 0x9a, 0xe5, 0xf9, 0x5a, 0x29, 0xea,
- 0x4e, 0xae, 0x07, 0xb3, 0x96, 0xdd, 0xee, 0xee, 0x75, 0xa0, 0x01, 0x4d, 0xd2, 0xaf, 0x4c, 0x1b,
- 0x6c, 0x52, 0xb4, 0xb5, 0x8f, 0xd8, 0x92, 0x83, 0xad, 0xfd, 0xcf, 0x0a, 0x2f, 0xc3, 0xb0, 0x2c,
- 0xe0, 0xb8, 0x94, 0x31, 0x76, 0x57, 0x09, 0xcc, 0xdb, 0x4c, 0xd6, 0xc0, 0x60, 0xef, 0xbf, 0x97,
- 0x80, 0x25, 0x67, 0xf0, 0x5f, 0x68, 0x1f, 0x10, 0x6a, 0xac, 0xc3, 0x18, 0x4a, 0x87, 0xcc, 0xf2,
- 0x08, 0x93, 0x64, 0x15, 0x2c, 0x54, 0xeb, 0x2d, 0xdd, 0xa8, 0x97, 0x6a, 0x34, 0x8b, 0xac, 0xfd,
- 0x9b, 0x04, 0x0a, 0x06, 0xec, 0x75, 0xf7, 0xd9, 0xc0, 0xd3, 0xd4, 0x51, 0x3c, 0x17, 0x3a, 0x8a,
- 0xab, 0xcb, 0x00, 0x98, 0x6d, 0x54, 0x30, 0xbe, 0x99, 0x4b, 0x1a, 0x18, 0xce, 0x94, 0xab, 0x60,
- 0x29, 0xcc, 0x6d, 0x30, 0x5f, 0x6a, 0x2f, 0x16, 0xde, 0x39, 0xe2, 0xa8, 0x61, 0x0e, 0x63, 0xfa,
- 0x84, 0x0f, 0x0a, 0x6d, 0xf6, 0x0c, 0x25, 0x77, 0x34, 0xe2, 0xff, 0x8a, 0x04, 0xf2, 0x2d, 0xd4,
- 0x5b, 0x32, 0x1d, 0xe7, 0x67, 0x46, 0xd3, 0x71, 0x44, 0x26, 0x46, 0xc7, 0xef, 0x05, 0x73, 0xac,
- 0xc6, 0x52, 0x57, 0x89, 0x44, 0x15, 0xe7, 0x3e, 0x18, 0x45, 0xc3, 0x07, 0xb0, 0x73, 0x34, 0x22,
- 0xfe, 0xd4, 0xe3, 0x01, 0x58, 0x83, 0xbb, 0x17, 0xa1, 0xeb, 0xed, 0x58, 0x3d, 0xed, 0xaf, 0x65,
- 0x30, 0xb3, 0x02, 0xfd, 0xa6, 0x6f, 0xfa, 0x7b, 0x5e, 0xdf, 0x76, 0xa7, 0xed, 0x94, 0xcd, 0xf6,
- 0x0e, 0xa4, 0xdd, 0x51, 0xf0, 0xa8, 0xbd, 0x47, 0x16, 0xf5, 0x27, 0x8a, 0xca, 0x59, 0x0c, 0xcb,
- 0x88, 0xc1, 0xe4, 0x09, 0x20, 0xdf, 0x31, 0x7d, 0x93, 0x62, 0x71, 0x4d, 0x1f, 0x16, 0x11, 0x21,
- 0x03, 0x67, 0xd3, 0xde, 0x21, 0x89, 0x38, 0x14, 0x09, 0x94, 0x9f, 0x0e, 0x84, 0x0f, 0xe4, 0x46,
- 0x40, 0xe1, 0x04, 0x98, 0xaf, 0x37, 0x5a, 0x9b, 0xb5, 0xc6, 0xca, 0x8a, 0x8e, 0x52, 0x15, 0x59,
- 0x3d, 0x05, 0xd4, 0xf5, 0xd2, 0x85, 0x35, 0xbd, 0xde, 0xda, 0xac, 0x37, 0x2a, 0x3a, 0xfd, 0x32,
- 0xaf, 0x1e, 0x07, 0xb3, 0xe5, 0x52, 0x79, 0x35, 0x48, 0x28, 0xa8, 0xa7, 0xc1, 0xc9, 0x35, 0x7d,
- 0x6d, 0x49, 0x37, 0x9a, 0xab, 0xd5, 0xf5, 0x4d, 0x44, 0x66, 0xb9, 0xb1, 0x51, 0xaf, 0x28, 0x45,
- 0x55, 0x03, 0xa7, 0x98, 0x37, 0xe7, 0x8d, 0x46, 0x7d, 0x65, 0xb3, 0xd9, 0x2a, 0xb5, 0x74, 0x65,
- 0x4a, 0xbd, 0x0a, 0x1c, 0x2f, 0x97, 0xea, 0x38, 0x7b, 0xb9, 0x51, 0xaf, 0xeb, 0xe5, 0x96, 0x32,
- 0xad, 0xfd, 0x47, 0x1e, 0xcc, 0x56, 0xbd, 0xba, 0xb9, 0x0b, 0xcf, 0x99, 0x5d, 0xab, 0xa3, 0xbd,
- 0x88, 0x99, 0x79, 0xdc, 0x08, 0xe6, 0x5d, 0xf2, 0x17, 0x76, 0x5a, 0x16, 0x24, 0x68, 0xce, 0x1b,
- 0x7c, 0x22, 0x9a, 0x93, 0xdb, 0x98, 0x40, 0x30, 0x27, 0x27, 0x4f, 0xea, 0x12, 0x00, 0xe4, 0x5f,
- 0x2b, 0xba, 0x23, 0xf6, 0x6c, 0x7f, 0x6b, 0x32, 0x77, 0xa1, 0x07, 0xdd, 0xcb, 0x56, 0x1b, 0x06,
- 0x39, 0x0d, 0xe6, 0x2b, 0xed, 0x4f, 0x65, 0xd1, 0xfd, 0x45, 0x06, 0x54, 0xa6, 0x3a, 0x31, 0xbd,
- 0xe1, 0x8f, 0xc8, 0x22, 0xbb, 0x83, 0x42, 0x24, 0xd3, 0x69, 0xca, 0x4b, 0xa5, 0xd1, 0x96, 0x6d,
- 0x5b, 0x8d, 0xc6, 0x66, 0x73, 0xb5, 0x61, 0xb4, 0x14, 0x59, 0x9d, 0x03, 0xd3, 0xe8, 0xb1, 0xd6,
- 0xa8, 0xaf, 0x28, 0x79, 0xf5, 0x6a, 0x70, 0x62, 0xb5, 0xd4, 0xdc, 0xac, 0xd6, 0xcf, 0x95, 0x6a,
- 0xd5, 0xca, 0x66, 0x79, 0xb5, 0x64, 0x34, 0x95, 0x82, 0x7a, 0x0d, 0xb8, 0xba, 0x55, 0xd5, 0x8d,
- 0xcd, 0x65, 0xbd, 0xd4, 0xda, 0x30, 0xf4, 0xe6, 0x66, 0xbd, 0xb1, 0x59, 0x2f, 0xad, 0xe9, 0x4a,
- 0x11, 0x35, 0x7f, 0xfc, 0x2a, 0x52, 0x9b, 0xa9, 0x83, 0xca, 0x38, 0x1d, 0xa3, 0x8c, 0x33, 0xfd,
- 0xca, 0x08, 0x58, 0xb5, 0x32, 0xf4, 0xa6, 0x6e, 0x9c, 0xd3, 0x95, 0xd9, 0x41, 0xba, 0x36, 0xa7,
- 0x9e, 0x04, 0x0a, 0xe2, 0x61, 0xb3, 0xda, 0x0c, 0x72, 0x56, 0x94, 0x79, 0xed, 0x93, 0x45, 0x70,
- 0xca, 0x80, 0xdb, 0x96, 0xe7, 0x43, 0x77, 0xdd, 0xdc, 0xdf, 0x85, 0xb6, 0x1f, 0x74, 0xf2, 0xff,
- 0x9c, 0x5a, 0x19, 0xd7, 0xc0, 0x7c, 0x8f, 0xd0, 0x58, 0x83, 0xfe, 0x8e, 0xd3, 0xa1, 0xa3, 0xf0,
- 0xe3, 0x62, 0x7b, 0x8e, 0xc5, 0x75, 0x36, 0xbb, 0xc1, 0x7f, 0xcd, 0xe8, 0xb6, 0x9c, 0xa0, 0xdb,
- 0xf9, 0x51, 0x74, 0x5b, 0xbd, 0x16, 0xcc, 0xec, 0x79, 0xd0, 0xd5, 0x77, 0x4d, 0xab, 0x1b, 0xdc,
- 0xf1, 0x19, 0x26, 0x68, 0xef, 0xcc, 0x8b, 0x9e, 0x58, 0x61, 0xea, 0x32, 0x58, 0x8c, 0x31, 0x7d,
- 0xeb, 0x19, 0x00, 0x68, 0x65, 0x37, 0xdc, 0x2e, 0x55, 0x56, 0x26, 0x05, 0xf1, 0x77, 0xd1, 0xea,
- 0x76, 0x2d, 0x7b, 0x3b, 0xdc, 0xf7, 0x8f, 0x12, 0xb4, 0x97, 0xca, 0x22, 0x27, 0x58, 0xd2, 0xf2,
- 0x96, 0xae, 0x35, 0xbd, 0x58, 0x9a, 0x70, 0xbf, 0x7b, 0xb0, 0xe9, 0x14, 0x55, 0x05, 0xcc, 0xe1,
- 0x34, 0xda, 0x02, 0x95, 0x29, 0xd4, 0x07, 0x07, 0xe4, 0xd6, 0xf4, 0xd6, 0x6a, 0xa3, 0x12, 0xbe,
- 0x9b, 0x46, 0x24, 0x11, 0x33, 0xa5, 0xfa, 0x05, 0xdc, 0x1a, 0x67, 0xd4, 0xc7, 0x80, 0x6b, 0x98,
- 0x0e, 0xbb, 0x54, 0x33, 0xf4, 0x52, 0xe5, 0xc2, 0xa6, 0xfe, 0xac, 0x6a, 0xb3, 0xd5, 0xe4, 0x1b,
- 0x57, 0xd0, 0x8e, 0x66, 0x11, 0xbf, 0xfa, 0x5a, 0xa9, 0x5a, 0xa3, 0xfd, 0xfb, 0x72, 0xc3, 0x58,
- 0x2b, 0xb5, 0x94, 0x39, 0xed, 0x15, 0x32, 0x50, 0x56, 0xa0, 0xbf, 0xee, 0xb8, 0xbe, 0xd9, 0xad,
- 0x59, 0xf6, 0xa5, 0x0d, 0xb7, 0xcb, 0x4d, 0x36, 0x85, 0xc3, 0x74, 0xf0, 0x43, 0x24, 0x47, 0x30,
- 0x7e, 0x47, 0xbc, 0x87, 0xb3, 0x45, 0xca, 0x14, 0x25, 0x68, 0xcf, 0x95, 0x44, 0x96, 0xbb, 0xc5,
- 0x4b, 0x4d, 0xa7, 0x27, 0xcf, 0x9b, 0xf4, 0xf8, 0x3c, 0x00, 0xb5, 0xa2, 0xf6, 0x82, 0x3c, 0x98,
- 0x5e, 0xb6, 0x6c, 0xb3, 0x6b, 0x3d, 0x87, 0x8b, 0x8e, 0x19, 0xf5, 0x31, 0xb9, 0x84, 0x3e, 0x46,
- 0x1a, 0x69, 0xfc, 0xfc, 0x29, 0x59, 0x74, 0x79, 0x81, 0x91, 0x7d, 0xc0, 0x64, 0xcc, 0xe0, 0xf9,
- 0xab, 0x92, 0xc8, 0xf2, 0xc2, 0x70, 0x7a, 0xe9, 0x30, 0xfc, 0xf4, 0xb7, 0x87, 0x8d, 0xd5, 0xd7,
- 0xbe, 0xa7, 0x07, 0xa9, 0xc2, 0x8c, 0xf6, 0x7b, 0x32, 0xd0, 0x56, 0xa0, 0x7f, 0x0e, 0xba, 0xe1,
- 0x54, 0x00, 0xf7, 0xfa, 0xd4, 0xde, 0x66, 0x9a, 0xec, 0x9b, 0x59, 0x00, 0xcf, 0xf3, 0x00, 0x96,
- 0x12, 0x1a, 0x4f, 0x0c, 0xe9, 0x98, 0xc6, 0x5b, 0x05, 0x45, 0x0f, 0xbf, 0xa7, 0x6a, 0xf6, 0xc4,
- 0xf8, 0xe1, 0x12, 0x13, 0x63, 0xa9, 0x13, 0xc2, 0x06, 0x25, 0xa0, 0x7d, 0x33, 0x9c, 0x04, 0x7d,
- 0x0f, 0xa7, 0x1d, 0xcb, 0x87, 0x66, 0x36, 0x9d, 0xbe, 0xb8, 0xd9, 0xaa, 0xcb, 0x20, 0xfb, 0x46,
- 0xfb, 0xd5, 0x02, 0x38, 0x39, 0xa8, 0x3a, 0xda, 0x2f, 0xe7, 0xb8, 0x1d, 0x76, 0x88, 0x87, 0xfc,
- 0x1c, 0xdd, 0x40, 0x44, 0x0f, 0xea, 0x93, 0xc1, 0xd5, 0xe1, 0x32, 0x5c, 0xcb, 0xa9, 0xc3, 0x2b,
- 0x5e, 0x17, 0xfa, 0x3e, 0x74, 0x71, 0xd5, 0xa6, 0x8d, 0xc1, 0x2f, 0xd5, 0xa7, 0x82, 0x47, 0x59,
- 0xb6, 0x67, 0x75, 0xa0, 0xdb, 0xb2, 0x7a, 0x5e, 0xc9, 0xee, 0xb4, 0xf6, 0x7c, 0xc7, 0xb5, 0x4c,
- 0x7a, 0x23, 0xe5, 0xb4, 0x11, 0xf7, 0x5a, 0xbd, 0x05, 0x28, 0x96, 0xd7, 0xb0, 0x2f, 0x3a, 0xa6,
- 0xdb, 0xb1, 0xec, 0xed, 0x9a, 0xe5, 0xf9, 0xd4, 0x03, 0xf8, 0x40, 0xba, 0xf6, 0x37, 0xb2, 0xe8,
- 0x61, 0xba, 0x21, 0xb0, 0xc6, 0x74, 0x28, 0x2f, 0x94, 0x45, 0x8e, 0xc7, 0xa5, 0xa3, 0x9d, 0x4e,
- 0x59, 0x9e, 0x3f, 0x69, 0x43, 0x62, 0xf0, 0x08, 0x8e, 0xbb, 0x16, 0x92, 0x1e, 0x18, 0x02, 0xe7,
- 0x74, 0xa3, 0xba, 0x5c, 0xd5, 0x91, 0x59, 0x71, 0x35, 0x38, 0x11, 0xbd, 0xab, 0x5c, 0xd8, 0x6c,
- 0xea, 0xf5, 0x96, 0x32, 0x8d, 0xfa, 0x29, 0x92, 0xbc, 0x5c, 0xaa, 0xd6, 0xf4, 0xca, 0x66, 0xab,
- 0x81, 0xde, 0x54, 0x46, 0x33, 0x2d, 0xb4, 0x87, 0xf2, 0xe0, 0x38, 0x96, 0xed, 0x3e, 0x96, 0x2a,
- 0x12, 0x4a, 0x9f, 0xaf, 0x6d, 0x08, 0xd0, 0x0c, 0x11, 0xaf, 0xf6, 0xbb, 0xc2, 0x17, 0x6e, 0x32,
- 0x10, 0xf6, 0x95, 0x11, 0xa3, 0x19, 0xdf, 0x90, 0x44, 0x22, 0x54, 0x08, 0x93, 0x4d, 0xa7, 0x14,
- 0xff, 0x32, 0xe9, 0x11, 0x27, 0x1e, 0x7c, 0x6c, 0x65, 0x96, 0xf1, 0xc7, 0xcf, 0x5a, 0xaf, 0x1a,
- 0x58, 0x1d, 0x16, 0x00, 0xc0, 0x29, 0x58, 0x83, 0x88, 0x1e, 0x0c, 0x1c, 0xaf, 0xe2, 0xf4, 0xa0,
- 0x54, 0x6e, 0x55, 0xcf, 0xe9, 0x71, 0x7a, 0xf0, 0x39, 0x19, 0x4c, 0xaf, 0x40, 0x1f, 0xcd, 0xa9,
- 0x3c, 0xed, 0x69, 0x02, 0xeb, 0x3f, 0xc8, 0x8c, 0xe9, 0x3a, 0x6d, 0xb3, 0x1b, 0x2e, 0x03, 0x90,
- 0x27, 0xed, 0x87, 0x47, 0x31, 0x41, 0x82, 0xa2, 0x63, 0xc6, 0xab, 0xef, 0x06, 0x05, 0x1f, 0xbd,
- 0xa6, 0xcb, 0xd0, 0xdf, 0x11, 0x3b, 0x5c, 0x21, 0x22, 0x15, 0xd3, 0x37, 0x0d, 0x92, 0x9f, 0x19,
- 0x9d, 0x04, 0x6d, 0x97, 0x18, 0x46, 0xbe, 0x1d, 0xed, 0xcf, 0xbf, 0x94, 0xc1, 0xd5, 0xa4, 0x7d,
- 0x94, 0x7a, 0xbd, 0xa6, 0xef, 0xb8, 0xd0, 0x80, 0x6d, 0x68, 0xf5, 0xfc, 0xbe, 0xf5, 0x3d, 0x97,
- 0xa4, 0x06, 0x9b, 0xcd, 0xf4, 0x51, 0x7b, 0x83, 0x2c, 0x1a, 0xe1, 0xf7, 0x40, 0x7b, 0xec, 0x2b,
- 0x2f, 0xa6, 0xb1, 0x7f, 0x42, 0x12, 0x89, 0xd9, 0x9b, 0x92, 0x78, 0x3a, 0xa0, 0x3e, 0x7a, 0x04,
- 0x40, 0x05, 0x2b, 0x37, 0x86, 0x5e, 0xd6, 0xab, 0xeb, 0x68, 0x10, 0xb8, 0x0e, 0x3c, 0x7a, 0x7d,
- 0xc3, 0x28, 0xaf, 0x96, 0x9a, 0xfa, 0xa6, 0xa1, 0xaf, 0x54, 0x9b, 0x2d, 0xea, 0x94, 0x45, 0xbe,
- 0x9a, 0x52, 0xaf, 0x05, 0xa7, 0x9b, 0x1b, 0x4b, 0xcd, 0xb2, 0x51, 0x5d, 0xc7, 0xe9, 0x86, 0x5e,
- 0xd7, 0xcf, 0xd3, 0xb7, 0xd3, 0xda, 0x87, 0x15, 0x30, 0x8b, 0x26, 0x00, 0x4d, 0x32, 0x2f, 0xd0,
- 0xfe, 0x2e, 0x0f, 0x66, 0x0d, 0xe8, 0x39, 0xdd, 0xcb, 0x78, 0x8e, 0x30, 0xa9, 0xa9, 0xc7, 0xd7,
- 0x65, 0xd1, 0xf3, 0xdb, 0x0c, 0xb3, 0x8b, 0x0c, 0xa3, 0xf1, 0x13, 0x4d, 0xf3, 0xb2, 0x69, 0x75,
- 0xcd, 0x8b, 0xb4, 0xab, 0x99, 0x36, 0xa2, 0x04, 0x75, 0x11, 0xa8, 0xce, 0x15, 0x1b, 0xba, 0xcd,
- 0xf6, 0x15, 0xdd, 0xdf, 0x29, 0x75, 0x3a, 0x2e, 0xf4, 0x3c, 0xba, 0x7a, 0x31, 0xe0, 0x8d, 0x7a,
- 0x33, 0x38, 0x8e, 0x53, 0x99, 0xcc, 0xc4, 0x41, 0xa6, 0x3f, 0x39, 0xcc, 0x59, 0xb2, 0xf7, 0x83,
- 0x9c, 0x05, 0x26, 0x67, 0x94, 0xcc, 0x1e, 0x97, 0x28, 0xf2, 0xa7, 0x74, 0xae, 0x07, 0xb3, 0xb6,
- 0xb9, 0x0b, 0xf5, 0x07, 0x7b, 0x96, 0x0b, 0x3d, 0xec, 0x18, 0x23, 0x1b, 0x6c, 0x92, 0xf6, 0xab,
- 0x42, 0xe7, 0xcd, 0xc5, 0x24, 0x96, 0x4e, 0xf7, 0x57, 0x46, 0x50, 0xfd, 0x01, 0xfd, 0x8c, 0xac,
- 0x7d, 0x58, 0x06, 0x73, 0x94, 0xa9, 0x92, 0xbd, 0x5f, 0xed, 0x68, 0xd7, 0x71, 0xc6, 0xaf, 0x89,
- 0xd2, 0x02, 0xe3, 0x17, 0x3f, 0x68, 0x3f, 0x2a, 0x8b, 0xba, 0x3b, 0x0f, 0xa8, 0x38, 0x2e, 0x23,
- 0xde, 0x71, 0x74, 0xcb, 0xd9, 0xa3, 0x8e, 0xaa, 0xd3, 0x06, 0x79, 0xc8, 0x72, 0x51, 0x4f, 0xfb,
- 0x35, 0x21, 0x67, 0x6a, 0xc1, 0x6a, 0x1c, 0x11, 0x80, 0x9f, 0x92, 0xc1, 0x02, 0xe5, 0xaa, 0x49,
- 0xcf, 0xf9, 0x08, 0x1d, 0x78, 0xfb, 0x71, 0x61, 0x43, 0x70, 0x40, 0xfd, 0x69, 0x49, 0x8f, 0x18,
- 0x20, 0x3f, 0x26, 0x14, 0x1c, 0x4d, 0xb8, 0x22, 0x47, 0x04, 0xe5, 0xbb, 0xf2, 0x60, 0x76, 0xc3,
- 0x83, 0x2e, 0xf5, 0xdb, 0xd7, 0x1e, 0xce, 0x03, 0x79, 0x05, 0x72, 0x1b, 0xa9, 0x2f, 0x11, 0xf6,
- 0xf0, 0x65, 0x2b, 0xcb, 0x10, 0x45, 0x36, 0x52, 0x0c, 0x6c, 0x37, 0x81, 0x05, 0x22, 0xd2, 0x92,
- 0xef, 0x23, 0x23, 0x31, 0xf0, 0xa6, 0xed, 0x4b, 0x1d, 0xc7, 0x56, 0x11, 0x2e, 0x0b, 0x65, 0x29,
- 0x23, 0x9e, 0x6a, 0x70, 0x8b, 0xcc, 0x67, 0xf3, 0x46, 0x5f, 0xaa, 0x7a, 0x3b, 0xb8, 0xca, 0xe9,
- 0x41, 0x72, 0x7e, 0x85, 0xc9, 0x5c, 0xc0, 0x99, 0x07, 0xbd, 0xd2, 0xfe, 0x4e, 0xc8, 0x57, 0x57,
- 0x5c, 0x3a, 0xe9, 0x74, 0xa1, 0x37, 0x1e, 0x93, 0xe4, 0x24, 0x50, 0x50, 0x0e, 0xbc, 0xff, 0x62,
- 0xe8, 0xcd, 0x46, 0xed, 0x9c, 0x3e, 0x78, 0x19, 0xa3, 0xa0, 0x3d, 0x5f, 0x06, 0x33, 0x4b, 0xae,
- 0x63, 0x76, 0xda, 0xa6, 0xe7, 0x6b, 0xdf, 0x94, 0xc0, 0xdc, 0xba, 0xb9, 0xdf, 0x75, 0xcc, 0x0e,
- 0xf6, 0xef, 0xef, 0xeb, 0x0b, 0x7a, 0xe4, 0x55, 0xd0, 0x17, 0xd0, 0x47, 0xfe, 0x60, 0x60, 0x78,
- 0x74, 0x2f, 0x27, 0x72, 0xaf, 0x66, 0xb8, 0xcd, 0x27, 0x0d, 0x0a, 0x56, 0x1a, 0xf0, 0xb5, 0xc8,
- 0xf2, 0x14, 0x63, 0x51, 0x7e, 0x58, 0x2c, 0xfc, 0xa8, 0x08, 0xc9, 0xa3, 0xd9, 0x95, 0x7f, 0xc1,
- 0x34, 0x28, 0x56, 0x20, 0xb6, 0xe2, 0xfe, 0xa7, 0x04, 0xa6, 0x9a, 0xd0, 0xc7, 0x16, 0xdc, 0x9d,
- 0x9c, 0xa7, 0x70, 0x07, 0x67, 0x88, 0x9c, 0xd8, 0x83, 0x67, 0x34, 0x59, 0x67, 0xce, 0x5b, 0xe3,
- 0xff, 0x29, 0x3c, 0x12, 0x49, 0xb9, 0x8b, 0xb4, 0xcc, 0x43, 0x79, 0x24, 0x26, 0x92, 0xca, 0xde,
- 0xd7, 0xea, 0x3d, 0x12, 0x75, 0xad, 0x62, 0x7a, 0xbd, 0xd7, 0xb0, 0xfa, 0x99, 0xe8, 0x6d, 0x46,
- 0x99, 0x4f, 0x70, 0x8e, 0x7a, 0x12, 0x98, 0x22, 0x32, 0x0f, 0xe6, 0xa3, 0xfd, 0x7e, 0x0a, 0x84,
- 0x04, 0x3e, 0x7b, 0x1d, 0xe4, 0x14, 0x74, 0x51, 0x8b, 0x2f, 0x7c, 0x22, 0x31, 0x08, 0xe6, 0xea,
- 0xd0, 0xbf, 0xe2, 0xb8, 0x97, 0x9a, 0xbe, 0xe9, 0x43, 0xed, 0x5f, 0x24, 0x72, 0x5d, 0x1e, 0x13,
- 0xfd, 0xa4, 0x0e, 0x4e, 0x90, 0x0a, 0xd1, 0x8c, 0xb8, 0xff, 0x26, 0x15, 0xb9, 0x7e, 0xa0, 0x10,
- 0x98, 0x7c, 0xc6, 0xc1, 0x4f, 0xb5, 0x9f, 0x19, 0x18, 0xf4, 0x49, 0x1a, 0x30, 0x69, 0xa0, 0x92,
- 0x61, 0x19, 0x8c, 0xbf, 0x1f, 0x4f, 0xfb, 0x88, 0x90, 0x59, 0x2d, 0x46, 0xf3, 0x68, 0xba, 0x82,
- 0x7f, 0x7f, 0x1c, 0xc8, 0x97, 0x77, 0x4c, 0x5f, 0x7b, 0xb7, 0x0c, 0x40, 0xa9, 0xd3, 0x59, 0x23,
- 0x3e, 0xe0, 0xac, 0x43, 0xda, 0x59, 0x30, 0xd7, 0xde, 0x31, 0xa3, 0x9b, 0x33, 0x48, 0x7f, 0xc0,
- 0xa5, 0xa9, 0x4f, 0x8e, 0x9c, 0xc9, 0x89, 0x54, 0xb5, 0x3e, 0x98, 0x50, 0x19, 0x94, 0x76, 0xe8,
- 0x68, 0xce, 0x87, 0xc2, 0x4c, 0x3c, 0x42, 0x87, 0x3e, 0x5f, 0x8c, 0xd8, 0x8b, 0x9f, 0xc3, 0x51,
- 0xd2, 0xe1, 0x01, 0x9b, 0x28, 0x21, 0xe5, 0x49, 0x6f, 0xb1, 0x80, 0x1e, 0xc9, 0x7c, 0x4d, 0x24,
- 0x74, 0xad, 0xaa, 0x77, 0xac, 0x40, 0xb4, 0x34, 0x60, 0x96, 0xf6, 0xe2, 0x5c, 0x3a, 0xf8, 0x92,
- 0x05, 0xf7, 0x0c, 0x30, 0x0f, 0x3b, 0x96, 0x0f, 0x83, 0x5a, 0x52, 0x01, 0x26, 0x41, 0xcc, 0x7f,
- 0xa0, 0x3d, 0x4f, 0x38, 0xe8, 0x1a, 0x16, 0xe8, 0xc1, 0x1a, 0xc5, 0xb4, 0x3f, 0xb1, 0x30, 0x6a,
- 0x62, 0x34, 0xb3, 0x07, 0xeb, 0x87, 0x65, 0x70, 0x75, 0xcb, 0xd9, 0xde, 0xee, 0xc2, 0x40, 0x4c,
- 0x90, 0x78, 0x67, 0x6a, 0xe6, 0x38, 0xe1, 0xc2, 0x3b, 0x41, 0xce, 0x03, 0x56, 0x78, 0x94, 0x0c,
- 0x3d, 0xf0, 0x27, 0xa6, 0x12, 0x67, 0x51, 0x58, 0x5c, 0x03, 0xf9, 0x8c, 0x41, 0x41, 0x2c, 0xe0,
- 0xb3, 0x30, 0xd9, 0xec, 0x81, 0xf8, 0x82, 0x04, 0xe6, 0xc9, 0xbd, 0x88, 0x81, 0x82, 0xde, 0x3f,
- 0x46, 0x00, 0xb4, 0x6f, 0xe6, 0x44, 0xfd, 0x6c, 0xb1, 0x4c, 0x38, 0x4e, 0x62, 0x44, 0x2c, 0x16,
- 0x54, 0x65, 0x28, 0xb9, 0x09, 0xdc, 0xd4, 0x99, 0x07, 0xb3, 0x2b, 0x30, 0x68, 0x69, 0x9e, 0xf6,
- 0xfe, 0x94, 0x3d, 0xd1, 0x59, 0x30, 0x87, 0x2f, 0x07, 0x6b, 0xd0, 0x63, 0x92, 0x64, 0xd5, 0x8c,
- 0x4b, 0x53, 0x6f, 0x04, 0xf3, 0x17, 0xe1, 0x96, 0xe3, 0xc2, 0x06, 0x77, 0x96, 0x92, 0x4f, 0x1c,
- 0x1c, 0x9e, 0x4e, 0xbd, 0x19, 0x1c, 0xa7, 0x8e, 0xee, 0x4b, 0x68, 0xae, 0x6f, 0xba, 0xfb, 0xf4,
- 0x60, 0x5a, 0x7f, 0xb2, 0xf6, 0x97, 0x6c, 0x83, 0x59, 0xe2, 0x51, 0xbc, 0xf5, 0xa0, 0xd8, 0x99,
- 0x4a, 0xc7, 0x8c, 0x4e, 0x4f, 0x01, 0xd3, 0x54, 0x47, 0x02, 0x83, 0x2e, 0xa9, 0x07, 0x0d, 0xf3,
- 0xaa, 0x4f, 0x01, 0x33, 0x48, 0x44, 0xd8, 0x6e, 0xa0, 0x5d, 0xef, 0xe9, 0x01, 0x1f, 0xe2, 0xf7,
- 0x46, 0x94, 0x55, 0xfb, 0x85, 0x50, 0x67, 0x74, 0x4e, 0x67, 0x9e, 0x98, 0x86, 0xf9, 0x89, 0x5c,
- 0x24, 0xaf, 0x30, 0xe5, 0x2f, 0xed, 0x57, 0x3b, 0x9e, 0xb6, 0x96, 0x4e, 0x6b, 0xce, 0x00, 0x10,
- 0x36, 0xbf, 0x20, 0x70, 0x06, 0x93, 0xc2, 0xc7, 0xc6, 0x4f, 0x3c, 0x0a, 0xd8, 0x2f, 0x0e, 0xcc,
- 0xce, 0x78, 0x01, 0x15, 0x3c, 0x42, 0x28, 0xc2, 0x49, 0xf6, 0xe8, 0xfc, 0x7c, 0x1e, 0x5c, 0x1d,
- 0x9e, 0x70, 0xaa, 0x99, 0x5e, 0xd4, 0xb2, 0x2f, 0xa4, 0x83, 0x88, 0x3b, 0x52, 0x12, 0x36, 0xc7,
- 0x93, 0xa0, 0xe0, 0xed, 0x5d, 0x0c, 0x1d, 0x01, 0xc9, 0x83, 0xf6, 0x46, 0x39, 0xd5, 0x58, 0x35,
- 0x90, 0xbf, 0x31, 0x37, 0xc2, 0x5b, 0xc1, 0x09, 0x7b, 0x6f, 0x37, 0xc4, 0x02, 0xf7, 0x34, 0xb4,
- 0x67, 0x39, 0xf8, 0x82, 0x6f, 0xb2, 0x79, 0xf1, 0x26, 0x9b, 0x62, 0x24, 0x15, 0xa9, 0x74, 0xf6,
- 0xea, 0xf1, 0xe9, 0xbe, 0x23, 0x68, 0xe5, 0xd4, 0x4a, 0x41, 0xe0, 0x97, 0x58, 0xf8, 0xff, 0x29,
- 0x97, 0xaa, 0xe7, 0x1d, 0x7e, 0x72, 0x2d, 0x45, 0x4f, 0x78, 0x94, 0xc7, 0xd6, 0x3e, 0x2f, 0x01,
- 0xad, 0x19, 0x39, 0xe4, 0x50, 0x50, 0xd7, 0x5d, 0x78, 0xd9, 0x82, 0x57, 0x38, 0xf7, 0xad, 0x37,
- 0x09, 0xc7, 0xa1, 0xe6, 0x75, 0xe5, 0x00, 0xd1, 0xf8, 0x75, 0xf1, 0x01, 0xb8, 0x88, 0xc5, 0x9b,
- 0x4e, 0x57, 0xe2, 0x04, 0x62, 0x87, 0x4b, 0xe0, 0x0c, 0x83, 0xea, 0xb2, 0xeb, 0xec, 0x26, 0x48,
- 0xf6, 0x15, 0xac, 0x64, 0x37, 0x78, 0xc9, 0xde, 0x9b, 0xa8, 0x2e, 0x03, 0x08, 0xc7, 0xa8, 0xe3,
- 0xfb, 0x43, 0x39, 0x3e, 0x8b, 0x93, 0x63, 0xe5, 0x90, 0xf4, 0xb3, 0x97, 0xe5, 0x1f, 0xe4, 0xc1,
- 0x9c, 0x01, 0xcd, 0x4e, 0x38, 0x08, 0xfc, 0x9f, 0x8c, 0x79, 0xf7, 0x34, 0x90, 0xf7, 0xa3, 0x75,
- 0x9a, 0xc7, 0x1d, 0xac, 0x0c, 0xfb, 0x25, 0x7e, 0xc0, 0xcb, 0x35, 0xf8, 0xa3, 0x03, 0xbd, 0x85,
- 0x24, 0x60, 0x1b, 0xca, 0x22, 0xb6, 0x61, 0x7e, 0x90, 0x6d, 0x78, 0x33, 0x38, 0xde, 0x35, 0x3d,
- 0xbf, 0x72, 0xb1, 0x65, 0xed, 0x42, 0xcf, 0x37, 0x77, 0x7b, 0xd8, 0x0a, 0x94, 0x8d, 0xfe, 0x64,
- 0xfe, 0x1e, 0xf8, 0xc4, 0xf3, 0x60, 0x83, 0xaa, 0x78, 0xf8, 0x98, 0xb9, 0x1f, 0x12, 0x3a, 0xfc,
- 0x35, 0xac, 0xec, 0x74, 0x9a, 0x71, 0xdf, 0x08, 0x6b, 0x4b, 0xa7, 0x80, 0xba, 0xa6, 0x37, 0x9b,
- 0xa5, 0x15, 0x7c, 0x26, 0x24, 0x70, 0x12, 0xea, 0x9c, 0x7d, 0x2c, 0x12, 0x1f, 0x41, 0x5a, 0x9d,
- 0x8b, 0xc6, 0x5e, 0xe5, 0x98, 0x3a, 0x0b, 0xa6, 0x5c, 0xd8, 0xeb, 0x5a, 0xd0, 0x53, 0x72, 0xda,
- 0x37, 0x24, 0x50, 0xdc, 0xb0, 0x5d, 0x68, 0x76, 0xb4, 0x67, 0xc6, 0x0f, 0x21, 0x23, 0x2a, 0x05,
- 0x1f, 0xf7, 0x2a, 0x71, 0x55, 0x96, 0x36, 0x3a, 0xc4, 0xc8, 0x58, 0xe0, 0x13, 0x5b, 0x8e, 0x8d,
- 0x2f, 0x35, 0xf3, 0x26, 0x7d, 0x76, 0x0a, 0x14, 0xf4, 0xdd, 0x9e, 0xbf, 0x7f, 0xf6, 0xb1, 0x60,
- 0xbe, 0xe9, 0xbb, 0xd0, 0xdc, 0x65, 0x36, 0xd5, 0x7d, 0xe7, 0x12, 0xb4, 0x83, 0x4d, 0x75, 0xfc,
- 0x70, 0xd7, 0x9d, 0x60, 0xca, 0x76, 0x36, 0xcd, 0x3d, 0x7f, 0x47, 0xbd, 0xee, 0x40, 0x34, 0x1a,
- 0xaa, 0x7e, 0x0d, 0x1a, 0xfe, 0xef, 0x4f, 0xef, 0xc6, 0x53, 0xab, 0xa2, 0xed, 0x94, 0xf6, 0xfc,
- 0x9d, 0xa5, 0x6b, 0x3f, 0xf5, 0x67, 0x67, 0x72, 0x9f, 0xfb, 0xb3, 0x33, 0xb9, 0xaf, 0xfc, 0xd9,
- 0x99, 0xdc, 0x8f, 0xff, 0xf9, 0x99, 0x63, 0x9f, 0xfb, 0xf3, 0x33, 0xc7, 0xbe, 0xf0, 0xe7, 0x67,
- 0x8e, 0x7d, 0x8f, 0xd4, 0xbb, 0x78, 0xb1, 0x88, 0xa9, 0x3c, 0xe9, 0xff, 0x0d, 0x00, 0x00, 0xff,
- 0xff, 0xe5, 0x76, 0x0c, 0x3b, 0xd1, 0x2b, 0x02, 0x00,
+ // 21504 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x98, 0x24, 0x49,
+ 0x59, 0x37, 0x3a, 0x95, 0x59, 0x55, 0xdd, 0x1d, 0x7d, 0x99, 0x9c, 0xdc, 0xd9, 0x61, 0x36, 0x59,
+ 0x66, 0xd7, 0xd9, 0x65, 0x59, 0x97, 0xa5, 0x77, 0x59, 0x10, 0xd9, 0x65, 0x97, 0xa5, 0xba, 0x2a,
+ 0xbb, 0xbb, 0x76, 0xab, 0xab, 0x9a, 0xac, 0xea, 0x19, 0x46, 0x3f, 0x4f, 0x9b, 0x53, 0x15, 0xdd,
+ 0x9d, 0x3b, 0xd5, 0x99, 0x45, 0x66, 0xf6, 0xcc, 0x36, 0xe7, 0xf9, 0xce, 0x27, 0xe2, 0x0a, 0x88,
+ 0x88, 0xa8, 0xa8, 0x88, 0xdc, 0x16, 0x01, 0x01, 0xb9, 0xdf, 0x3e, 0x50, 0x2e, 0x72, 0x11, 0x44,
+ 0x54, 0x14, 0x2f, 0x80, 0x72, 0xc4, 0x3b, 0x7e, 0x47, 0x8f, 0x1f, 0x1e, 0x05, 0xf1, 0x13, 0x3d,
+ 0x4f, 0x5c, 0x32, 0x33, 0xa2, 0xba, 0x32, 0x2b, 0xb2, 0xba, 0xb2, 0x7a, 0xd1, 0xef, 0xaf, 0xaa,
+ 0x8c, 0x8c, 0x7c, 0xe3, 0x8d, 0xf7, 0xf7, 0x46, 0xc4, 0x1b, 0x11, 0x6f, 0xbc, 0x01, 0x4e, 0xf7,
+ 0x2e, 0xde, 0xd6, 0x73, 0x1d, 0xdf, 0xf1, 0x6e, 0x6b, 0x3b, 0xbb, 0xbb, 0xa6, 0xdd, 0xf1, 0x16,
+ 0xf1, 0xb3, 0x3a, 0x65, 0xda, 0xfb, 0xfe, 0x7e, 0x0f, 0x6a, 0x37, 0xf6, 0x2e, 0x6d, 0xdf, 0xd6,
+ 0xb5, 0x2e, 0xde, 0xd6, 0xbb, 0x78, 0xdb, 0xae, 0xd3, 0x81, 0xdd, 0xe0, 0x03, 0xfc, 0x40, 0xb3,
+ 0x6b, 0x37, 0xc7, 0xe5, 0xea, 0x3a, 0x6d, 0xb3, 0xeb, 0xf9, 0x8e, 0x0b, 0x69, 0xce, 0x53, 0x51,
+ 0x91, 0xf0, 0x32, 0xb4, 0xfd, 0x80, 0xc2, 0xb5, 0xdb, 0x8e, 0xb3, 0xdd, 0x85, 0xe4, 0xdd, 0xc5,
+ 0xbd, 0xad, 0xdb, 0x3c, 0xdf, 0xdd, 0x6b, 0xfb, 0xf4, 0xed, 0xf5, 0xfd, 0x6f, 0x3b, 0xd0, 0x6b,
+ 0xbb, 0x56, 0xcf, 0x77, 0x5c, 0x92, 0xe3, 0xec, 0x9f, 0xff, 0xde, 0x34, 0x90, 0x8d, 0x5e, 0x5b,
+ 0xfb, 0xfa, 0x14, 0x90, 0x4b, 0xbd, 0x9e, 0xf6, 0x49, 0x09, 0x80, 0x15, 0xe8, 0x9f, 0x83, 0xae,
+ 0x67, 0x39, 0xb6, 0x76, 0x1c, 0x4c, 0x19, 0xf0, 0xd9, 0x7b, 0xd0, 0xf3, 0xef, 0xca, 0xbf, 0xe0,
+ 0xaf, 0xe4, 0x9c, 0xf6, 0x7a, 0x09, 0x4c, 0x1b, 0xd0, 0xeb, 0x39, 0xb6, 0x07, 0xd5, 0x67, 0x80,
+ 0x02, 0x74, 0x5d, 0xc7, 0x3d, 0x9d, 0xbb, 0x3e, 0x77, 0xf3, 0xec, 0x1d, 0xb7, 0x2c, 0xd2, 0xea,
+ 0x2f, 0x1a, 0xbd, 0xf6, 0x62, 0xa9, 0xd7, 0x5b, 0x8c, 0x28, 0x2d, 0x06, 0x1f, 0x2d, 0xea, 0xe8,
+ 0x0b, 0x83, 0x7c, 0xa8, 0x9e, 0x06, 0x53, 0x97, 0x49, 0x86, 0xd3, 0xd2, 0xf5, 0xb9, 0x9b, 0x67,
+ 0x8c, 0xe0, 0x11, 0xbd, 0xe9, 0x40, 0xdf, 0xb4, 0xba, 0xde, 0x69, 0x99, 0xbc, 0xa1, 0x8f, 0xda,
+ 0xc3, 0x39, 0x50, 0xc0, 0x44, 0xd4, 0x32, 0xc8, 0xb7, 0x9d, 0x0e, 0xc4, 0xc5, 0x2f, 0xdc, 0x71,
+ 0x9b, 0x78, 0xf1, 0x8b, 0x65, 0xa7, 0x03, 0x0d, 0xfc, 0xb1, 0x7a, 0x3d, 0x98, 0x0d, 0xc4, 0x12,
+ 0xb1, 0xc1, 0x26, 0x9d, 0xbd, 0x03, 0xe4, 0x51, 0x7e, 0x75, 0x1a, 0xe4, 0xeb, 0x1b, 0xb5, 0x9a,
+ 0x72, 0x4c, 0x3d, 0x01, 0xe6, 0x37, 0xea, 0xf7, 0xd7, 0x1b, 0xe7, 0xeb, 0x9b, 0xba, 0x61, 0x34,
+ 0x0c, 0x25, 0xa7, 0xce, 0x83, 0x99, 0xa5, 0x52, 0x65, 0xb3, 0x5a, 0x5f, 0xdf, 0x68, 0x29, 0x92,
+ 0xf6, 0x2a, 0x19, 0x2c, 0x34, 0xa1, 0x5f, 0x81, 0x97, 0xad, 0x36, 0x6c, 0xfa, 0xa6, 0x0f, 0xb5,
+ 0x97, 0xe4, 0x42, 0x61, 0xaa, 0x1b, 0xa8, 0xd0, 0xf0, 0x15, 0xad, 0xc0, 0x93, 0x0e, 0x54, 0x80,
+ 0xa7, 0xb0, 0x48, 0xbf, 0x5e, 0x64, 0xd2, 0x0c, 0x96, 0xce, 0xd9, 0x27, 0x80, 0x59, 0xe6, 0x9d,
+ 0xba, 0x00, 0xc0, 0x52, 0xa9, 0x7c, 0xff, 0x8a, 0xd1, 0xd8, 0xa8, 0x57, 0x94, 0x63, 0xe8, 0x79,
+ 0xb9, 0x61, 0xe8, 0xf4, 0x39, 0xa7, 0x7d, 0x33, 0xc7, 0x80, 0x59, 0xe1, 0xc1, 0x5c, 0x1c, 0xce,
+ 0xcc, 0x00, 0x40, 0xb5, 0x37, 0x84, 0xe0, 0xac, 0x70, 0xe0, 0x3c, 0x29, 0x1d, 0xb9, 0xec, 0x01,
+ 0x7a, 0x48, 0x02, 0xd3, 0xcd, 0x9d, 0x3d, 0xbf, 0xe3, 0x5c, 0xb1, 0xb5, 0x99, 0x10, 0x19, 0xed,
+ 0xef, 0x58, 0x99, 0x3c, 0x9d, 0x97, 0xc9, 0xcd, 0x07, 0x2b, 0x41, 0x29, 0xc4, 0x48, 0xe3, 0x35,
+ 0xa1, 0x34, 0x4a, 0x9c, 0x34, 0x9e, 0x20, 0x4a, 0x28, 0x7b, 0x39, 0x7c, 0xe1, 0x6e, 0x50, 0x68,
+ 0xf6, 0xcc, 0x36, 0xd4, 0x3e, 0x2b, 0x83, 0xb9, 0x1a, 0x34, 0x2f, 0xc3, 0x52, 0xaf, 0xe7, 0x3a,
+ 0x97, 0xa1, 0x56, 0x8e, 0xf4, 0xf5, 0x34, 0x98, 0xf2, 0x50, 0xa6, 0x6a, 0x07, 0xd7, 0x60, 0xc6,
+ 0x08, 0x1e, 0xd5, 0x33, 0x00, 0x58, 0x1d, 0x68, 0xfb, 0x96, 0x6f, 0x41, 0xef, 0xb4, 0x74, 0xbd,
+ 0x7c, 0xf3, 0x8c, 0xc1, 0xa4, 0x68, 0x5f, 0x97, 0x44, 0x75, 0x0c, 0x73, 0xb1, 0xc8, 0x72, 0x10,
+ 0x23, 0xd5, 0xd7, 0x49, 0x22, 0x3a, 0x36, 0x94, 0x5c, 0x3a, 0xd9, 0xbe, 0x2d, 0x97, 0x5e, 0xb8,
+ 0x28, 0x47, 0xbd, 0xb1, 0xd9, 0xdc, 0x28, 0xaf, 0x6e, 0x36, 0xd7, 0x4b, 0x65, 0x5d, 0x81, 0xea,
+ 0x49, 0xa0, 0xe0, 0xbf, 0x9b, 0xd5, 0xe6, 0x66, 0x45, 0xaf, 0xe9, 0x2d, 0xbd, 0xa2, 0x6c, 0xa9,
+ 0x2a, 0x58, 0x30, 0xf4, 0x67, 0x6e, 0xe8, 0xcd, 0xd6, 0xe6, 0x72, 0xa9, 0x5a, 0xd3, 0x2b, 0xca,
+ 0x36, 0xfa, 0xb8, 0x56, 0x5d, 0xab, 0xb6, 0x36, 0x0d, 0xbd, 0x54, 0x5e, 0xd5, 0x2b, 0xca, 0x8e,
+ 0xfa, 0x28, 0x70, 0x55, 0xbd, 0xb1, 0x59, 0x5a, 0x5f, 0x37, 0x1a, 0xe7, 0xf4, 0x4d, 0xfa, 0x45,
+ 0x53, 0xb1, 0x48, 0x41, 0xad, 0xcd, 0xe6, 0x6a, 0xc9, 0xd0, 0x4b, 0x4b, 0x35, 0x5d, 0x79, 0x40,
+ 0x7b, 0x9e, 0x0c, 0xe6, 0xd7, 0xcc, 0x4b, 0xb0, 0xb9, 0x63, 0xba, 0xd0, 0xbc, 0xd8, 0x85, 0xda,
+ 0x0d, 0x02, 0x78, 0x6a, 0x9f, 0x65, 0xf1, 0xd2, 0x79, 0xbc, 0x6e, 0x1b, 0x20, 0x60, 0xae, 0x88,
+ 0x18, 0xc0, 0xfe, 0x39, 0x6c, 0x06, 0xab, 0x1c, 0x60, 0x4f, 0x4e, 0x49, 0x2f, 0x1d, 0x62, 0x3f,
+ 0xf8, 0x08, 0x40, 0x4c, 0xfb, 0x62, 0x1e, 0x2c, 0x54, 0xed, 0xcb, 0x96, 0x0f, 0x57, 0xa0, 0x0d,
+ 0x5d, 0x34, 0x0e, 0xbc, 0x2a, 0x27, 0xd2, 0xae, 0x5a, 0x00, 0x58, 0xf8, 0xbb, 0xd6, 0x7e, 0x0f,
+ 0xe2, 0xea, 0x0d, 0x96, 0x17, 0x4f, 0x3c, 0x1c, 0x22, 0xaa, 0xe1, 0xb7, 0x06, 0x43, 0xe7, 0xec,
+ 0x0d, 0x00, 0x44, 0x6f, 0x54, 0x00, 0x8a, 0x6b, 0x70, 0xf7, 0x22, 0x74, 0x95, 0x63, 0xea, 0x0c,
+ 0x28, 0xac, 0xa0, 0x2f, 0x95, 0x9c, 0xf6, 0x7a, 0x99, 0x51, 0x81, 0x65, 0x5e, 0x05, 0x6e, 0x17,
+ 0x61, 0x61, 0xd0, 0x48, 0x7f, 0x2d, 0x98, 0x21, 0x7c, 0x94, 0xad, 0x0e, 0x45, 0x2b, 0x4a, 0x50,
+ 0x6f, 0x04, 0xf3, 0xe4, 0x61, 0xd9, 0xea, 0xc2, 0xfb, 0xe1, 0x3e, 0x1d, 0xf3, 0xf9, 0x44, 0xed,
+ 0x47, 0xc3, 0x86, 0x5f, 0xe5, 0xf4, 0xe8, 0xbb, 0xd2, 0x32, 0x95, 0x4e, 0x91, 0x5e, 0xf6, 0x48,
+ 0x68, 0xfa, 0x07, 0x5a, 0xb8, 0xa5, 0x7d, 0x4b, 0x02, 0xb3, 0x4d, 0xdf, 0xe9, 0xa1, 0xe6, 0x62,
+ 0xd9, 0xdb, 0x62, 0xed, 0xfb, 0xd3, 0x6c, 0xfb, 0x2e, 0xf3, 0xe0, 0x3e, 0x61, 0x80, 0x1c, 0x99,
+ 0x02, 0x62, 0x5a, 0xf7, 0xd7, 0xc3, 0xd6, 0xbd, 0xcc, 0xa1, 0x72, 0x47, 0x2a, 0x6a, 0xdf, 0x86,
+ 0x6d, 0xfb, 0x65, 0x32, 0x50, 0x02, 0x35, 0xf3, 0xcb, 0x7b, 0xae, 0x0b, 0x6d, 0x5f, 0x0c, 0x84,
+ 0x3f, 0x62, 0x41, 0x58, 0xe5, 0x41, 0xb8, 0x23, 0x41, 0x99, 0x83, 0x52, 0x32, 0x6c, 0x63, 0x1f,
+ 0x0d, 0xd1, 0xbc, 0x9f, 0x43, 0xf3, 0xbb, 0xd3, 0xb3, 0x95, 0x0e, 0xd2, 0xd5, 0x11, 0x10, 0x3d,
+ 0x09, 0x14, 0x34, 0x1e, 0x96, 0x5b, 0xd5, 0x73, 0xfa, 0x66, 0xb5, 0x7e, 0xae, 0xda, 0xd2, 0x15,
+ 0xa8, 0xbd, 0x54, 0x8e, 0xfa, 0x5c, 0x1f, 0x77, 0x6a, 0x62, 0xa8, 0x7c, 0x51, 0x1a, 0xad, 0xdf,
+ 0x23, 0x65, 0x4c, 0x04, 0x13, 0xf1, 0x7e, 0x6f, 0x20, 0x53, 0xe9, 0x10, 0xb9, 0x6f, 0x04, 0x44,
+ 0x4e, 0x01, 0xb5, 0x5a, 0x3f, 0x57, 0xaa, 0x55, 0x2b, 0xa4, 0x8d, 0x6d, 0xb6, 0x2e, 0xac, 0x23,
+ 0x4c, 0x7e, 0x52, 0x06, 0x73, 0x84, 0x35, 0x03, 0x5e, 0x76, 0x2e, 0x09, 0x1a, 0x23, 0x5f, 0x4e,
+ 0x69, 0x3c, 0xb2, 0x25, 0xc4, 0xf4, 0x56, 0x3f, 0x92, 0xc2, 0x78, 0x4c, 0x20, 0xf7, 0x48, 0x1a,
+ 0x41, 0x0e, 0x74, 0x4d, 0xdb, 0x03, 0x7a, 0xb0, 0x81, 0x23, 0xc8, 0xc7, 0xf3, 0x81, 0x3d, 0x70,
+ 0xce, 0x82, 0x57, 0xb4, 0xb5, 0x08, 0x13, 0x4e, 0x6d, 0x73, 0x43, 0xd5, 0x56, 0x1a, 0xa4, 0xb6,
+ 0x7f, 0xc9, 0xda, 0x11, 0x4b, 0x3c, 0x7a, 0xb7, 0xc6, 0x8a, 0x1b, 0x71, 0x12, 0xbf, 0x5a, 0x10,
+ 0x28, 0x8a, 0xc4, 0x5b, 0x4b, 0xd7, 0x82, 0x19, 0xfc, 0xb7, 0x6e, 0xee, 0x42, 0xda, 0x86, 0xa2,
+ 0x04, 0xf5, 0x2c, 0x98, 0x23, 0x19, 0xdb, 0x8e, 0x8d, 0xea, 0x93, 0xc7, 0x19, 0xb8, 0x34, 0x04,
+ 0x62, 0xdb, 0x85, 0xa6, 0xef, 0xb8, 0x98, 0x46, 0x81, 0x80, 0xc8, 0x24, 0xa9, 0xb7, 0x82, 0x13,
+ 0x96, 0x87, 0x5b, 0xd5, 0x86, 0x07, 0x5d, 0xc2, 0xec, 0xe9, 0xe2, 0xf5, 0xb9, 0x9b, 0xa7, 0x8d,
+ 0x83, 0x2f, 0xb4, 0xaf, 0x86, 0x6d, 0x56, 0xe7, 0xf4, 0xec, 0x89, 0x69, 0x2a, 0x9e, 0x4e, 0xcb,
+ 0x2e, 0x8f, 0xd6, 0x83, 0x92, 0x7e, 0x73, 0x13, 0xe9, 0xc6, 0x32, 0x5e, 0x18, 0x80, 0xb4, 0x15,
+ 0xa3, 0x54, 0x94, 0xb7, 0xdc, 0xa8, 0xb7, 0xf4, 0x7a, 0x4b, 0xd9, 0x1a, 0xa8, 0x7f, 0xdb, 0xda,
+ 0xeb, 0xf2, 0x20, 0x7f, 0x9f, 0x63, 0xd9, 0xda, 0x43, 0x39, 0x4e, 0x81, 0x6c, 0xe8, 0x5f, 0x71,
+ 0xdc, 0x4b, 0x61, 0xb3, 0x8e, 0x12, 0x92, 0x91, 0x8c, 0x14, 0x4f, 0x1e, 0xaa, 0x78, 0xf9, 0x41,
+ 0x8a, 0xf7, 0x13, 0xac, 0xe2, 0xdd, 0xcd, 0x2b, 0xde, 0x4d, 0x03, 0xe4, 0x8f, 0x98, 0x8f, 0xe9,
+ 0x2e, 0x3e, 0x15, 0x76, 0x17, 0xf7, 0x72, 0x30, 0x3e, 0x5e, 0x8c, 0x4c, 0x3a, 0x00, 0xbf, 0x94,
+ 0x69, 0x37, 0x31, 0x08, 0xea, 0xed, 0x18, 0xa8, 0x77, 0x06, 0xf4, 0x20, 0xd6, 0xc1, 0x8e, 0xe6,
+ 0x81, 0x83, 0x9d, 0xca, 0x25, 0xf5, 0x6a, 0x70, 0xa2, 0x52, 0x5d, 0x5e, 0xd6, 0x0d, 0xbd, 0xde,
+ 0xda, 0xac, 0xeb, 0xad, 0xf3, 0x0d, 0xe3, 0x7e, 0xa5, 0xab, 0x3d, 0x2c, 0x03, 0x80, 0x24, 0x54,
+ 0x36, 0xed, 0x36, 0xec, 0x8a, 0xf5, 0xff, 0xff, 0xaf, 0x94, 0xae, 0x07, 0x89, 0xe8, 0xc7, 0xc0,
+ 0xf9, 0x4a, 0x49, 0xbc, 0x55, 0xc6, 0x12, 0x4b, 0x07, 0xea, 0x9b, 0x1f, 0x09, 0xb3, 0x87, 0xab,
+ 0xc0, 0xf1, 0x80, 0x1e, 0xcd, 0x3e, 0x78, 0xd1, 0xe0, 0xed, 0x79, 0xb0, 0x40, 0x61, 0x09, 0x56,
+ 0x81, 0x5e, 0x20, 0x34, 0x5d, 0xd5, 0xc0, 0x34, 0x5d, 0xf4, 0x09, 0x06, 0x83, 0xf0, 0x59, 0x5d,
+ 0x01, 0xb3, 0x3d, 0xe8, 0xee, 0x5a, 0x9e, 0x67, 0x39, 0x36, 0x59, 0xce, 0x5d, 0xb8, 0xe3, 0xb1,
+ 0xa1, 0xc4, 0xf1, 0xca, 0xf7, 0xe2, 0xba, 0xe9, 0xfa, 0x56, 0xdb, 0xea, 0x99, 0xb6, 0xbf, 0x1e,
+ 0x65, 0x36, 0xd8, 0x2f, 0x91, 0x61, 0x97, 0xca, 0x40, 0xe3, 0x6b, 0x12, 0xa3, 0x12, 0xbf, 0x92,
+ 0x62, 0x52, 0x99, 0x48, 0x30, 0x9d, 0x5a, 0x7c, 0x32, 0x53, 0xb5, 0x18, 0x80, 0xf7, 0xb6, 0x7a,
+ 0x0d, 0xb8, 0xba, 0x5a, 0x2f, 0x37, 0x0c, 0x43, 0x2f, 0xb7, 0x36, 0xd7, 0x75, 0x63, 0xad, 0xda,
+ 0x6c, 0x56, 0x1b, 0xf5, 0xe6, 0x61, 0x5a, 0xbb, 0xf6, 0x19, 0x39, 0xd4, 0x98, 0x0a, 0x6c, 0x77,
+ 0x2d, 0x1b, 0x6a, 0xf7, 0x1e, 0x52, 0x61, 0xf8, 0x35, 0x43, 0x71, 0x9c, 0x69, 0xf9, 0x31, 0x38,
+ 0xbf, 0x36, 0x3d, 0xce, 0x83, 0x09, 0xfe, 0x07, 0x6e, 0xfe, 0x5f, 0x96, 0xc1, 0x09, 0xa6, 0x21,
+ 0x1a, 0x70, 0x77, 0x6c, 0xeb, 0xc0, 0x3f, 0xc8, 0xb6, 0xdd, 0x2a, 0x8f, 0xe9, 0x20, 0xdb, 0xfb,
+ 0x00, 0x1b, 0x31, 0xb0, 0xbe, 0x39, 0x84, 0xb5, 0xc6, 0xc1, 0xfa, 0xd4, 0x11, 0x68, 0xa6, 0x43,
+ 0xf6, 0x1d, 0x99, 0x22, 0x7b, 0x0d, 0xb8, 0x7a, 0xbd, 0x64, 0xb4, 0xaa, 0xe5, 0xea, 0x7a, 0x09,
+ 0x8d, 0xa3, 0xcc, 0x90, 0x1d, 0x63, 0xdc, 0xf3, 0xa0, 0x0f, 0xc4, 0xf7, 0x23, 0x79, 0x70, 0xed,
+ 0xe0, 0x8e, 0xb6, 0xbc, 0x63, 0xda, 0xdb, 0x50, 0xb3, 0x44, 0xa0, 0xae, 0x80, 0xa9, 0x36, 0xce,
+ 0x4e, 0x70, 0x66, 0x37, 0xfe, 0x12, 0xfa, 0x72, 0x52, 0x82, 0x11, 0x7c, 0xaa, 0xbd, 0x9b, 0x55,
+ 0x88, 0x16, 0xaf, 0x10, 0x4f, 0x4f, 0x06, 0xef, 0x00, 0xdf, 0x31, 0xba, 0xf1, 0xb9, 0x50, 0x37,
+ 0xce, 0x73, 0xba, 0x51, 0x3e, 0x1c, 0xf9, 0x74, 0x6a, 0xf2, 0x1b, 0x8f, 0x84, 0x0e, 0x20, 0x56,
+ 0x9b, 0xac, 0xf8, 0x51, 0x61, 0x60, 0x77, 0xff, 0x6a, 0x19, 0x14, 0x2b, 0xb0, 0x0b, 0x7d, 0xc1,
+ 0x19, 0xfc, 0xdf, 0x4b, 0xa2, 0xdb, 0x69, 0x04, 0x06, 0x42, 0x3b, 0x7e, 0x2d, 0xc5, 0xb7, 0x76,
+ 0xa1, 0xe7, 0x9b, 0xbb, 0x3d, 0x2c, 0x6a, 0xd9, 0x88, 0x12, 0xb4, 0x1f, 0x92, 0x44, 0x36, 0xdb,
+ 0x12, 0x8a, 0xf9, 0x8f, 0xb1, 0x2a, 0xfc, 0x79, 0x09, 0x4c, 0x37, 0xa1, 0xdf, 0x70, 0x3b, 0xd0,
+ 0xd5, 0x9a, 0x11, 0x46, 0xd7, 0x83, 0x59, 0x0c, 0x0a, 0x9a, 0x66, 0x86, 0x38, 0xb1, 0x49, 0xea,
+ 0x4d, 0x60, 0x21, 0x7c, 0xc4, 0x9f, 0xd3, 0x6e, 0xbc, 0x2f, 0x55, 0xfb, 0x5a, 0x4e, 0xd4, 0x07,
+ 0x80, 0x2e, 0xfa, 0x52, 0x6e, 0x62, 0x5a, 0xa9, 0xd8, 0x7e, 0x7e, 0x22, 0xa9, 0xec, 0xb7, 0x49,
+ 0xdf, 0x29, 0x01, 0xb0, 0x61, 0x7b, 0x81, 0x5c, 0x1f, 0x9f, 0x42, 0xae, 0xda, 0x3f, 0xe5, 0xd2,
+ 0xcd, 0x62, 0xa2, 0x72, 0x62, 0x24, 0xf6, 0x0b, 0x29, 0xd6, 0x16, 0x62, 0x89, 0x4d, 0x60, 0x6b,
+ 0xf9, 0x38, 0x28, 0x9e, 0x37, 0xbb, 0x5d, 0xe8, 0x6b, 0xaf, 0x92, 0x41, 0xb1, 0xec, 0x42, 0xd3,
+ 0x87, 0x1a, 0x8c, 0x44, 0xa7, 0x81, 0x69, 0xd7, 0x71, 0xfc, 0x75, 0xd3, 0xdf, 0xa1, 0x72, 0x0b,
+ 0x9f, 0xd5, 0xa7, 0x82, 0x47, 0x6d, 0xed, 0x75, 0xbb, 0x3e, 0x7c, 0xd0, 0x5f, 0x77, 0xad, 0x5d,
+ 0xd3, 0xdd, 0xaf, 0x99, 0xf6, 0xf6, 0x9e, 0xb9, 0x0d, 0x29, 0x7b, 0x71, 0xaf, 0xa9, 0xa3, 0xca,
+ 0x2f, 0xb1, 0x1d, 0xcf, 0xbd, 0xbc, 0xd0, 0xbf, 0x93, 0x93, 0x13, 0x61, 0x71, 0x91, 0xb0, 0x17,
+ 0xd3, 0xf3, 0x68, 0x60, 0x7a, 0xd7, 0x86, 0xbb, 0x8e, 0x6d, 0xb5, 0x03, 0x6b, 0x35, 0x78, 0xd6,
+ 0x3e, 0x16, 0xa2, 0xb1, 0xc4, 0xa1, 0xb1, 0x28, 0x5c, 0x4a, 0x3a, 0x28, 0x9a, 0x23, 0xf4, 0x3b,
+ 0xd7, 0x81, 0x47, 0x93, 0x6e, 0x64, 0xb3, 0xd5, 0xd8, 0x2c, 0x1b, 0x7a, 0xa9, 0xa5, 0x6f, 0xd6,
+ 0x1a, 0xe5, 0x52, 0x6d, 0xd3, 0xd0, 0xd7, 0x1b, 0x0a, 0x44, 0xb3, 0xf3, 0x29, 0x03, 0xb6, 0x9d,
+ 0xcb, 0xd0, 0xd5, 0x9e, 0x9b, 0x13, 0x83, 0x28, 0x41, 0x28, 0x49, 0xf0, 0xc9, 0x22, 0xf0, 0xfd,
+ 0x84, 0xb0, 0x9f, 0x11, 0x15, 0x2c, 0x65, 0x3e, 0xa6, 0xc5, 0x7c, 0x5c, 0xa8, 0x8f, 0x49, 0x24,
+ 0xf5, 0x08, 0x00, 0xe9, 0x1f, 0x25, 0x30, 0x55, 0x76, 0xec, 0xcb, 0xd0, 0xf5, 0xd9, 0x49, 0x16,
+ 0x8b, 0x43, 0xae, 0x0f, 0x87, 0xd3, 0x60, 0x0a, 0xda, 0xbe, 0xeb, 0xf4, 0x82, 0x59, 0x56, 0xf0,
+ 0xa8, 0xbd, 0x31, 0xad, 0x84, 0x69, 0xc9, 0xf1, 0x6b, 0xb3, 0x83, 0x0b, 0xe2, 0xd8, 0x93, 0xfb,
+ 0xda, 0xce, 0xc3, 0x69, 0x70, 0x19, 0xcc, 0x40, 0xf6, 0xfd, 0xd8, 0x57, 0x64, 0x30, 0x4f, 0xda,
+ 0x6d, 0x13, 0x62, 0xb3, 0x50, 0x6b, 0xb0, 0xeb, 0x9c, 0x7d, 0xc2, 0x5f, 0x3d, 0xc6, 0x89, 0xbf,
+ 0x68, 0xf6, 0x7a, 0xe1, 0x0a, 0xf9, 0xea, 0x31, 0x83, 0x3e, 0x13, 0x35, 0x5f, 0x2a, 0x82, 0xbc,
+ 0xb9, 0xe7, 0xef, 0x68, 0xdf, 0x12, 0x9e, 0xf1, 0x72, 0xfd, 0x08, 0xe5, 0x27, 0x06, 0x92, 0x93,
+ 0xa0, 0xe0, 0x3b, 0x97, 0x60, 0x20, 0x07, 0xf2, 0x80, 0xe0, 0x30, 0x7b, 0xbd, 0x16, 0x7e, 0x41,
+ 0xe1, 0x08, 0x9e, 0x91, 0x81, 0x65, 0xb6, 0xdb, 0xce, 0x9e, 0xed, 0x57, 0x83, 0x55, 0xf2, 0x28,
+ 0x41, 0xfb, 0x82, 0xd0, 0x36, 0x94, 0x00, 0x83, 0xe9, 0x20, 0xbb, 0x38, 0x42, 0x53, 0x5a, 0x04,
+ 0xb7, 0x94, 0xd6, 0xd7, 0x37, 0x5b, 0x8d, 0xfb, 0xf5, 0x7a, 0x64, 0xed, 0x6e, 0x56, 0xeb, 0x9b,
+ 0xad, 0x55, 0x7d, 0xb3, 0xbc, 0x61, 0xe0, 0xc5, 0xc9, 0x52, 0xb9, 0xdc, 0xd8, 0xa8, 0xb7, 0x14,
+ 0xa8, 0xbd, 0x55, 0x02, 0x73, 0xe5, 0xae, 0xe3, 0x85, 0x08, 0x5f, 0x17, 0x21, 0x1c, 0x8a, 0x31,
+ 0xc7, 0x88, 0x51, 0xfb, 0x5f, 0x39, 0x51, 0x3f, 0x99, 0x40, 0x20, 0x0c, 0xf9, 0x98, 0x5e, 0xea,
+ 0x8d, 0x42, 0x7e, 0x32, 0xc3, 0xe9, 0x65, 0xdf, 0x24, 0x3e, 0xbb, 0x0c, 0xa6, 0x4a, 0x44, 0x31,
+ 0xb4, 0x3f, 0xc9, 0x81, 0x62, 0xd9, 0xb1, 0xb7, 0xac, 0x6d, 0x64, 0x41, 0x42, 0xdb, 0xbc, 0xd8,
+ 0x85, 0x15, 0xd3, 0x37, 0x2f, 0x5b, 0xf0, 0x0a, 0xae, 0xc0, 0xb4, 0xd1, 0x97, 0x8a, 0x98, 0xa2,
+ 0x29, 0xf0, 0xe2, 0xde, 0x36, 0x66, 0x6a, 0xda, 0x60, 0x93, 0xd0, 0xf8, 0x41, 0x1e, 0xd7, 0x5d,
+ 0xe8, 0xc2, 0x2e, 0x34, 0x3d, 0x88, 0xe6, 0x62, 0x36, 0xec, 0x62, 0xa5, 0x9d, 0x36, 0xe2, 0x5e,
+ 0xab, 0x67, 0xc1, 0x1c, 0x79, 0x85, 0xed, 0x1f, 0x0f, 0xab, 0xf1, 0xb4, 0xc1, 0xa5, 0xa9, 0x4f,
+ 0x00, 0x05, 0xf8, 0xa0, 0xef, 0x9a, 0xa7, 0x3b, 0x18, 0xaf, 0x47, 0x2d, 0x12, 0x47, 0xd9, 0xc5,
+ 0xc0, 0x51, 0x76, 0xb1, 0x89, 0xdd, 0x68, 0x0d, 0x92, 0x4b, 0xfb, 0x9f, 0xd3, 0xa1, 0xf5, 0xf2,
+ 0x79, 0x39, 0x52, 0x0c, 0x15, 0xe4, 0x6d, 0x73, 0x17, 0x52, 0xbd, 0xc0, 0xff, 0xd5, 0x5b, 0xc0,
+ 0x71, 0xf3, 0xb2, 0xe9, 0x9b, 0x6e, 0xcd, 0x69, 0x9b, 0x5d, 0x3c, 0x6c, 0x06, 0x2d, 0xbf, 0xff,
+ 0x05, 0xde, 0xb4, 0xf2, 0x1d, 0x17, 0xe2, 0x5c, 0xc1, 0xa6, 0x55, 0x90, 0x80, 0xa8, 0x5b, 0x6d,
+ 0xc7, 0xc6, 0xfc, 0xcb, 0x06, 0xfe, 0x8f, 0xa4, 0xd2, 0xb1, 0x3c, 0x54, 0x11, 0x4c, 0xa5, 0x4e,
+ 0xf6, 0x53, 0x9a, 0xfb, 0x76, 0x1b, 0x6f, 0x58, 0x4d, 0x1b, 0x71, 0xaf, 0xd5, 0x25, 0x30, 0x4b,
+ 0x77, 0x5f, 0xd6, 0x90, 0x5e, 0x15, 0xb1, 0x5e, 0x5d, 0xcf, 0xbb, 0x21, 0x12, 0x3c, 0x17, 0xeb,
+ 0x51, 0x3e, 0x83, 0xfd, 0x48, 0x7d, 0x06, 0x78, 0x34, 0x7d, 0x2c, 0xef, 0x79, 0xbe, 0xb3, 0x4b,
+ 0x40, 0x5f, 0xb6, 0xba, 0xa4, 0x06, 0x53, 0xb8, 0x06, 0x49, 0x59, 0xd4, 0x3b, 0xc0, 0xc9, 0x9e,
+ 0x0b, 0xb7, 0xa0, 0x7b, 0xc1, 0xdc, 0xdd, 0x7b, 0xb0, 0xe5, 0x9a, 0xb6, 0xd7, 0x73, 0x5c, 0xff,
+ 0xf4, 0x34, 0x66, 0x7e, 0xe0, 0x3b, 0xf5, 0x56, 0x70, 0xe2, 0x01, 0xcf, 0xb1, 0x4b, 0x3d, 0xab,
+ 0x66, 0x79, 0x3e, 0xb4, 0x4b, 0x9d, 0x8e, 0x7b, 0x7a, 0x06, 0x97, 0x75, 0xf0, 0x85, 0x7a, 0x23,
+ 0x98, 0x7f, 0xc0, 0xb1, 0xec, 0xa6, 0xef, 0x42, 0x73, 0x77, 0xc3, 0xed, 0x9e, 0x06, 0x64, 0x83,
+ 0x88, 0x4b, 0xa4, 0x9d, 0xef, 0x34, 0x28, 0x12, 0x48, 0xb4, 0x97, 0x14, 0x84, 0xbd, 0x9a, 0xa9,
+ 0x90, 0x12, 0xad, 0xc5, 0xdb, 0xc1, 0x14, 0xed, 0x35, 0x31, 0xf8, 0xb3, 0x77, 0x9c, 0xea, 0x5b,
+ 0x20, 0xa1, 0x54, 0x8c, 0x20, 0x9b, 0xfa, 0x24, 0x50, 0x6c, 0x63, 0x51, 0x61, 0x3d, 0x98, 0xbd,
+ 0xe3, 0xd1, 0x83, 0x0b, 0xc5, 0x59, 0x0c, 0x9a, 0x55, 0xfb, 0xa2, 0x2c, 0xe4, 0x08, 0x9d, 0xc4,
+ 0x71, 0xba, 0x9e, 0xe2, 0xab, 0xd2, 0x08, 0x5d, 0xf1, 0xad, 0xe0, 0x66, 0xda, 0xcf, 0x52, 0x9b,
+ 0xa6, 0xb2, 0xb9, 0xb4, 0x11, 0xcc, 0x6a, 0x91, 0xa5, 0xd3, 0x6c, 0x95, 0x8c, 0xd6, 0x66, 0xbd,
+ 0x51, 0x41, 0xb3, 0xe1, 0x5b, 0xc0, 0x4d, 0x43, 0x72, 0xeb, 0xad, 0xcd, 0x7a, 0x69, 0x4d, 0x57,
+ 0xb6, 0x78, 0x7b, 0xa9, 0xd9, 0x6a, 0xac, 0x6f, 0x1a, 0x1b, 0xf5, 0x7a, 0xb5, 0xbe, 0x42, 0x88,
+ 0x21, 0x03, 0xf5, 0x54, 0x94, 0xe1, 0xbc, 0x51, 0x6d, 0xe9, 0x9b, 0xe5, 0x46, 0x7d, 0xb9, 0xba,
+ 0xa2, 0x58, 0xc3, 0x8c, 0xad, 0x07, 0xd4, 0xeb, 0xc1, 0xb5, 0x1c, 0x27, 0xd5, 0x46, 0x1d, 0x4d,
+ 0xd1, 0xcb, 0xa5, 0x7a, 0x59, 0x47, 0xf3, 0xf1, 0x4b, 0xaa, 0x06, 0xae, 0x26, 0xe4, 0x36, 0x97,
+ 0xab, 0x35, 0x76, 0x57, 0xed, 0xd3, 0x39, 0xf5, 0x34, 0xb8, 0x8a, 0x7d, 0x47, 0x7d, 0x22, 0x94,
+ 0x5f, 0xcf, 0xa9, 0x37, 0x82, 0xeb, 0xb8, 0xaf, 0xc8, 0x06, 0xd9, 0x66, 0xb5, 0xb2, 0xb9, 0x56,
+ 0x6d, 0xae, 0x95, 0x5a, 0xe5, 0x55, 0xe5, 0x33, 0x78, 0xfa, 0x12, 0xda, 0xe3, 0x8c, 0x77, 0xf2,
+ 0xcb, 0x58, 0x3b, 0xa1, 0xc4, 0x2b, 0xea, 0xe3, 0x07, 0xc2, 0x9e, 0x6c, 0x17, 0x7f, 0x32, 0x1c,
+ 0x71, 0x2a, 0x9c, 0x0a, 0xdd, 0x9e, 0x82, 0x56, 0x3a, 0x1d, 0x6a, 0x8d, 0xa0, 0x42, 0xd7, 0x83,
+ 0x6b, 0xeb, 0x3a, 0x41, 0xca, 0xd0, 0xcb, 0x8d, 0x73, 0xba, 0xb1, 0x79, 0xbe, 0x54, 0xab, 0xe9,
+ 0xad, 0xcd, 0xe5, 0xaa, 0xd1, 0x6c, 0x29, 0x5b, 0xda, 0x3f, 0x49, 0xe1, 0xb2, 0x14, 0x23, 0xad,
+ 0x3f, 0x91, 0xd2, 0x36, 0xeb, 0xc4, 0xe5, 0xa7, 0xef, 0x02, 0x45, 0xcf, 0x37, 0xfd, 0x3d, 0x8f,
+ 0xb6, 0xea, 0xc7, 0x0c, 0x6e, 0xd5, 0x8b, 0x4d, 0x9c, 0xc9, 0xa0, 0x99, 0xb5, 0x2f, 0xe6, 0xd2,
+ 0x34, 0xd3, 0x31, 0xac, 0x4c, 0x59, 0x23, 0x88, 0xf8, 0x0c, 0xd0, 0x02, 0x6d, 0xaf, 0x36, 0x37,
+ 0x4b, 0x35, 0x43, 0x2f, 0x55, 0x2e, 0x84, 0xeb, 0x51, 0x50, 0xbd, 0x1a, 0x9c, 0xd8, 0xa8, 0x97,
+ 0x96, 0x6a, 0x3a, 0x6e, 0x2e, 0x8d, 0x7a, 0x5d, 0x2f, 0x23, 0xb9, 0xff, 0x10, 0xde, 0xfd, 0x41,
+ 0x56, 0x39, 0xe6, 0x1b, 0x59, 0x4e, 0x8c, 0xfc, 0xff, 0x4a, 0xd8, 0xcd, 0x2d, 0xd2, 0x30, 0x96,
+ 0xd6, 0x78, 0x71, 0xf8, 0x82, 0x90, 0x67, 0x9b, 0x10, 0x27, 0xe9, 0xf0, 0xf8, 0xfe, 0x11, 0xf0,
+ 0xb8, 0x1a, 0x9c, 0x60, 0xf1, 0xc0, 0x1e, 0x6e, 0xf1, 0x30, 0xfc, 0xb1, 0x0c, 0xa6, 0xd6, 0xac,
+ 0x6d, 0xec, 0x5e, 0xbc, 0x17, 0x19, 0x28, 0x0b, 0x40, 0x0a, 0xbd, 0x77, 0x24, 0xab, 0xc3, 0x4d,
+ 0xe6, 0x25, 0xf1, 0xf5, 0x16, 0xa1, 0x09, 0xfb, 0x17, 0x53, 0xf7, 0x4c, 0x94, 0xe1, 0x98, 0x9e,
+ 0xe9, 0x85, 0x52, 0x9a, 0x9e, 0x69, 0x30, 0xad, 0x54, 0x30, 0x21, 0xd3, 0xc1, 0x85, 0xcf, 0xde,
+ 0xb3, 0x5c, 0xd8, 0xc1, 0x66, 0x22, 0xae, 0xb7, 0x6c, 0xf0, 0x89, 0x67, 0xdd, 0xc3, 0x81, 0xc9,
+ 0x7a, 0xd9, 0xcc, 0x81, 0xe9, 0x70, 0x34, 0xc1, 0x1b, 0x3e, 0xe8, 0xa5, 0x5e, 0x6f, 0x6c, 0xac,
+ 0xac, 0x6e, 0x2e, 0x1b, 0xba, 0x4e, 0x97, 0x88, 0xb7, 0xb5, 0x77, 0x49, 0x60, 0x9e, 0xd6, 0x90,
+ 0x7a, 0x4f, 0x5c, 0x17, 0x0b, 0x32, 0x85, 0xe3, 0xdf, 0xd9, 0xe9, 0xc9, 0x0a, 0x0f, 0xc7, 0x13,
+ 0x93, 0x44, 0x98, 0xe8, 0x3e, 0xf1, 0xa6, 0xb0, 0x09, 0xdd, 0xc7, 0x81, 0xf2, 0x94, 0xd4, 0x14,
+ 0xb3, 0x9f, 0xa2, 0xbc, 0x04, 0x80, 0x62, 0x13, 0x76, 0x61, 0xdb, 0xd7, 0x3e, 0x24, 0x8f, 0xdc,
+ 0x26, 0xe2, 0xcc, 0x6d, 0x39, 0x95, 0xb9, 0x9d, 0xcf, 0xc0, 0xdc, 0x2e, 0x8c, 0x6e, 0x6e, 0x17,
+ 0xd3, 0x9a, 0xdb, 0x53, 0x71, 0xe6, 0x76, 0x42, 0xaf, 0x31, 0x9d, 0xd8, 0x6b, 0xf4, 0x19, 0xea,
+ 0x46, 0x8d, 0x9a, 0xf4, 0x7c, 0x22, 0x55, 0xe6, 0x4f, 0x14, 0xd3, 0x8e, 0xe3, 0x04, 0xf8, 0xa3,
+ 0x35, 0xcf, 0x7f, 0xac, 0x90, 0x66, 0xdc, 0x1f, 0xc8, 0x71, 0xba, 0x56, 0xf2, 0xca, 0x7c, 0x06,
+ 0x8b, 0x8e, 0xea, 0x0d, 0xe0, 0xba, 0xe8, 0x79, 0x53, 0x7f, 0x56, 0xb5, 0xd9, 0x6a, 0x62, 0x9b,
+ 0xbc, 0xdc, 0x30, 0x8c, 0x8d, 0x75, 0xb2, 0x5d, 0x75, 0x0a, 0xa8, 0x11, 0x15, 0x63, 0xa3, 0x4e,
+ 0x2c, 0xf0, 0x6d, 0x9e, 0xfa, 0x72, 0xb5, 0x5e, 0xd9, 0x0c, 0x47, 0xb5, 0xfa, 0x72, 0x43, 0xd9,
+ 0x51, 0x17, 0xc1, 0x2d, 0x0c, 0x75, 0xdc, 0x01, 0x92, 0x12, 0x4a, 0xf5, 0xca, 0xe6, 0x5a, 0x5d,
+ 0x5f, 0x6b, 0xd4, 0xab, 0x65, 0x9c, 0xde, 0xd4, 0x5b, 0x8a, 0x85, 0x4c, 0xc1, 0x3e, 0x9b, 0xbf,
+ 0xa9, 0x97, 0x8c, 0xf2, 0xaa, 0x6e, 0x90, 0x22, 0x1f, 0x50, 0x6f, 0x02, 0x67, 0x4b, 0xf5, 0x46,
+ 0x0b, 0xa5, 0x94, 0xea, 0x17, 0x5a, 0x17, 0xd6, 0xf5, 0xcd, 0x75, 0xa3, 0x51, 0xd6, 0x9b, 0x4d,
+ 0x34, 0x92, 0xd2, 0x19, 0x82, 0xd2, 0x55, 0x9f, 0x0e, 0xee, 0x62, 0x58, 0xd3, 0x5b, 0xd8, 0x37,
+ 0x62, 0xad, 0x81, 0xdd, 0xe3, 0x2a, 0xfa, 0xe6, 0x6a, 0xa9, 0xb9, 0x59, 0xad, 0x97, 0x1b, 0x6b,
+ 0xeb, 0xa5, 0x56, 0x15, 0x0d, 0xb8, 0xeb, 0x46, 0xa3, 0xd5, 0xd8, 0x3c, 0xa7, 0x1b, 0xcd, 0x6a,
+ 0xa3, 0xae, 0xd8, 0xa8, 0xca, 0xcc, 0x08, 0x1d, 0x58, 0x4a, 0x8e, 0x7a, 0x2d, 0x38, 0x1d, 0xa4,
+ 0xd7, 0x1a, 0x48, 0xd0, 0xcc, 0x9c, 0xa1, 0xc7, 0xda, 0x59, 0xcd, 0x56, 0xc3, 0x20, 0xb3, 0x86,
+ 0xb5, 0xea, 0x8a, 0x81, 0xa6, 0x3a, 0xca, 0xb3, 0x33, 0x9d, 0x53, 0xfc, 0x8b, 0x04, 0xf2, 0x4d,
+ 0xdf, 0xe9, 0x69, 0xdf, 0x19, 0x75, 0x87, 0x67, 0x00, 0x70, 0xb1, 0x2b, 0x44, 0xc5, 0xf4, 0x4d,
+ 0xba, 0x5a, 0xc3, 0xa4, 0x68, 0xbf, 0x26, 0xbc, 0x7f, 0x1b, 0x59, 0x5d, 0x4e, 0x2f, 0x66, 0xf8,
+ 0xf8, 0xa6, 0xd8, 0x71, 0xc8, 0x78, 0x42, 0xe9, 0xda, 0xc3, 0x8f, 0x8c, 0xb2, 0x43, 0xab, 0x81,
+ 0x53, 0x0c, 0xac, 0x48, 0xfe, 0x81, 0xca, 0x40, 0xf5, 0x51, 0xe0, 0xaa, 0x3e, 0xe5, 0xc3, 0x3a,
+ 0xb7, 0xa5, 0x7e, 0x07, 0x78, 0x0c, 0xa3, 0xfe, 0xfa, 0x5a, 0xe3, 0x9c, 0x1e, 0x2a, 0x7a, 0xa5,
+ 0xd4, 0x2a, 0x29, 0xdb, 0xda, 0xe7, 0x65, 0x90, 0x5f, 0x73, 0x2e, 0xf7, 0x6f, 0x9b, 0xdb, 0xf0,
+ 0x0a, 0xb3, 0xb7, 0x12, 0x3c, 0xf2, 0x47, 0xb0, 0x84, 0xc4, 0xbe, 0x16, 0xef, 0x22, 0xf3, 0x05,
+ 0x29, 0x8d, 0xd8, 0xd7, 0x0e, 0xeb, 0x17, 0xf3, 0x37, 0xa3, 0x88, 0x3d, 0x46, 0xb4, 0x50, 0x3d,
+ 0x0b, 0xce, 0x44, 0x2f, 0xaa, 0x15, 0xbd, 0xde, 0xaa, 0x2e, 0x5f, 0x88, 0x84, 0x5b, 0x35, 0x84,
+ 0xc4, 0x3f, 0xac, 0x9b, 0x4b, 0x5e, 0x2b, 0x38, 0x0d, 0x4e, 0x46, 0xef, 0x56, 0xf4, 0x56, 0xf0,
+ 0xe6, 0x01, 0xed, 0xa1, 0x02, 0x98, 0x23, 0xdd, 0xfe, 0x46, 0xaf, 0x83, 0xac, 0xef, 0x27, 0x45,
+ 0xe8, 0xde, 0x0c, 0x8e, 0x57, 0xd7, 0x97, 0x9b, 0x4d, 0xdf, 0x71, 0xcd, 0x6d, 0x88, 0xc7, 0x51,
+ 0x22, 0xad, 0xfe, 0x64, 0xed, 0xbd, 0xc2, 0xab, 0xff, 0xfc, 0x50, 0x43, 0xca, 0x8c, 0x41, 0xfd,
+ 0x2b, 0x42, 0xab, 0xf5, 0x02, 0x04, 0xd3, 0xa1, 0xff, 0xc0, 0x98, 0xdb, 0x5c, 0x3c, 0x2e, 0x5b,
+ 0x67, 0x9f, 0x2f, 0x81, 0x99, 0x96, 0xb5, 0x0b, 0x9f, 0xe3, 0xd8, 0xd0, 0x53, 0xa7, 0x80, 0xbc,
+ 0xb2, 0xd6, 0x52, 0x8e, 0xa1, 0x3f, 0x68, 0x5a, 0x94, 0xc3, 0x7f, 0x74, 0x54, 0x00, 0xfa, 0x53,
+ 0x6a, 0x29, 0x32, 0xfa, 0xb3, 0xa6, 0xb7, 0x94, 0x3c, 0xfa, 0x53, 0xd7, 0x5b, 0x4a, 0x01, 0xfd,
+ 0x59, 0xaf, 0xb5, 0x94, 0x22, 0xfa, 0x53, 0x6d, 0xb6, 0x94, 0x29, 0xf4, 0x67, 0xa9, 0xd9, 0x52,
+ 0xa6, 0xd1, 0x9f, 0x73, 0xcd, 0x96, 0x32, 0x83, 0xfe, 0x94, 0x5b, 0x2d, 0x05, 0xa0, 0x3f, 0xf7,
+ 0x35, 0x5b, 0xca, 0x2c, 0xfa, 0x53, 0x2a, 0xb7, 0x94, 0x39, 0xfc, 0x47, 0x6f, 0x29, 0xf3, 0xe8,
+ 0x4f, 0xb3, 0xd9, 0x52, 0x16, 0x30, 0xe5, 0x66, 0x4b, 0x39, 0x8e, 0xcb, 0xaa, 0xb6, 0x14, 0x05,
+ 0xfd, 0x59, 0x6d, 0xb6, 0x94, 0x13, 0x38, 0x73, 0xb3, 0xa5, 0xa8, 0xb8, 0xd0, 0x66, 0x4b, 0xb9,
+ 0x0a, 0xe7, 0x69, 0xb6, 0x94, 0x93, 0xb8, 0x88, 0x66, 0x4b, 0xb9, 0x1a, 0xb3, 0xa1, 0xb7, 0x94,
+ 0x53, 0x38, 0x8f, 0xd1, 0x52, 0x1e, 0x85, 0x5f, 0xd5, 0x5b, 0xca, 0x69, 0xcc, 0x98, 0xde, 0x52,
+ 0xae, 0xc1, 0x7f, 0x8c, 0x96, 0xa2, 0xe1, 0x57, 0xa5, 0x96, 0xf2, 0x68, 0xed, 0x31, 0x60, 0x66,
+ 0x05, 0xfa, 0x04, 0x44, 0x4d, 0x01, 0xf2, 0x0a, 0xf4, 0xd9, 0x89, 0xf8, 0xab, 0xf2, 0xe0, 0x51,
+ 0x74, 0xf1, 0x66, 0xd9, 0x75, 0x76, 0x6b, 0x70, 0xdb, 0x6c, 0xef, 0xeb, 0x0f, 0x22, 0x83, 0x4f,
+ 0x7b, 0x71, 0x8e, 0x5b, 0xd1, 0xee, 0x45, 0xbd, 0x11, 0xfe, 0x9f, 0x68, 0x20, 0x07, 0x6b, 0xd4,
+ 0x32, 0xbf, 0x46, 0x1d, 0x67, 0x12, 0xe6, 0x45, 0x26, 0x92, 0xff, 0xc0, 0x36, 0x06, 0x6e, 0x43,
+ 0x2a, 0xd7, 0xb7, 0x21, 0x85, 0x5a, 0x58, 0x0f, 0xba, 0x9e, 0x63, 0x9b, 0xdd, 0x26, 0x75, 0x3f,
+ 0x22, 0x73, 0xd5, 0xfe, 0x64, 0xf5, 0x99, 0x41, 0xa3, 0x22, 0x06, 0xdf, 0xd3, 0x92, 0x96, 0xb7,
+ 0xfa, 0x25, 0x14, 0xd3, 0xbe, 0x3e, 0x13, 0xb6, 0xaf, 0x16, 0xd7, 0xbe, 0x9e, 0x71, 0x08, 0xda,
+ 0xe9, 0x9a, 0x5a, 0x75, 0xb4, 0xa9, 0x68, 0xe4, 0x9c, 0x1f, 0xec, 0x7f, 0xc9, 0xda, 0xe7, 0x25,
+ 0x70, 0x4a, 0xb7, 0x07, 0x4d, 0x65, 0x58, 0x35, 0x7a, 0x2b, 0x0b, 0xcd, 0x3a, 0x2f, 0xd2, 0xbb,
+ 0x06, 0x56, 0x7b, 0x30, 0xcd, 0x18, 0x89, 0xfe, 0x56, 0x28, 0xd1, 0x26, 0x27, 0xd1, 0x7b, 0x47,
+ 0x27, 0x9d, 0x4e, 0xa0, 0xf5, 0xb1, 0xf6, 0x5d, 0x79, 0xed, 0x2f, 0x24, 0x70, 0x82, 0x78, 0x10,
+ 0xde, 0x47, 0x66, 0x4e, 0xb8, 0xb7, 0xe7, 0xad, 0xaf, 0x6e, 0x34, 0xcb, 0x22, 0xfa, 0xcd, 0xa4,
+ 0x68, 0xaf, 0x63, 0x05, 0x7e, 0x3f, 0x2f, 0xf0, 0x98, 0x7e, 0xbc, 0xbf, 0xb8, 0x18, 0x59, 0xff,
+ 0x7a, 0x28, 0xeb, 0x3a, 0x27, 0xeb, 0xbb, 0x46, 0xa2, 0x7a, 0xb4, 0x62, 0xfe, 0x6a, 0x1e, 0x3c,
+ 0x86, 0x70, 0x48, 0x15, 0x81, 0xf4, 0x83, 0x25, 0xbb, 0x63, 0x40, 0xcf, 0x37, 0x5d, 0x9f, 0x0b,
+ 0xbd, 0xd2, 0x37, 0x35, 0xcf, 0x65, 0x30, 0x35, 0x97, 0x86, 0x4e, 0xcd, 0xb5, 0xf7, 0xb0, 0x06,
+ 0xde, 0x79, 0x1e, 0xd9, 0x52, 0x02, 0x06, 0x31, 0x35, 0x8c, 0x6b, 0x51, 0xa1, 0xe5, 0xf7, 0x3d,
+ 0x1c, 0xca, 0xcb, 0x87, 0x2e, 0x21, 0x1d, 0xe2, 0xbf, 0x36, 0x5e, 0x4b, 0x3c, 0xcf, 0xbe, 0xe3,
+ 0xcd, 0x46, 0xa5, 0x93, 0xe9, 0x14, 0xea, 0xa5, 0xd3, 0x60, 0x06, 0x77, 0x39, 0x35, 0xcb, 0xbe,
+ 0xa4, 0xfd, 0xb9, 0x0c, 0xe6, 0xea, 0xf0, 0x4a, 0x79, 0xc7, 0xec, 0x76, 0xa1, 0xbd, 0x0d, 0xb5,
+ 0x07, 0x38, 0xdb, 0xde, 0xec, 0xf5, 0xea, 0xd1, 0xfe, 0x70, 0xf0, 0xa8, 0xde, 0x0b, 0x0a, 0x5e,
+ 0xdb, 0x09, 0x83, 0x3a, 0x7c, 0x67, 0xcc, 0xea, 0x75, 0x69, 0xcf, 0xdf, 0x59, 0xc4, 0x65, 0x95,
+ 0x7a, 0x56, 0x13, 0x7d, 0x60, 0x90, 0xef, 0xe8, 0x38, 0xf9, 0x57, 0x03, 0x3b, 0xe3, 0x5c, 0x42,
+ 0x67, 0x1c, 0x32, 0xbe, 0xc8, 0x32, 0x1d, 0xb3, 0x48, 0x72, 0x3d, 0x98, 0x6d, 0x07, 0x59, 0xc2,
+ 0x53, 0x7a, 0x6c, 0x92, 0xf6, 0x97, 0xa9, 0xba, 0x6b, 0xa1, 0xc2, 0xd3, 0x69, 0x15, 0x1c, 0xb3,
+ 0xa9, 0x79, 0x35, 0x38, 0xd1, 0x6a, 0x34, 0x36, 0xd7, 0x4a, 0xf5, 0x0b, 0x51, 0x6c, 0x95, 0x2d,
+ 0xed, 0x95, 0x79, 0xb0, 0xd0, 0x74, 0xba, 0x97, 0x61, 0x84, 0x73, 0x95, 0x73, 0xff, 0x64, 0xe5,
+ 0x94, 0x3b, 0x20, 0x27, 0xf5, 0x14, 0x28, 0x9a, 0xb6, 0x77, 0x05, 0x06, 0xe6, 0x3f, 0x7d, 0xa2,
+ 0x30, 0x7e, 0x84, 0xed, 0x08, 0x0c, 0x1e, 0xc6, 0xbb, 0x87, 0x48, 0x92, 0xe7, 0x2a, 0x06, 0xc8,
+ 0xb3, 0x60, 0xce, 0x23, 0x5e, 0x22, 0x2d, 0xc6, 0x19, 0x88, 0x4b, 0xc3, 0x2c, 0x12, 0x37, 0x25,
+ 0x99, 0xb2, 0x88, 0x9f, 0xb4, 0x87, 0xc3, 0xfe, 0x63, 0x83, 0x83, 0xb8, 0x74, 0x18, 0xc6, 0xd2,
+ 0x81, 0xfc, 0xea, 0x71, 0x4f, 0xe2, 0x4f, 0x83, 0x93, 0xc1, 0x09, 0xf5, 0xf2, 0x6a, 0xa9, 0x56,
+ 0xd3, 0xeb, 0x2b, 0xfa, 0x66, 0xb5, 0x42, 0xf6, 0x93, 0xa3, 0x94, 0x52, 0xab, 0xa5, 0xaf, 0xad,
+ 0xb7, 0x9a, 0x9b, 0xfa, 0xb3, 0xca, 0xba, 0x5e, 0xc1, 0x0e, 0xd8, 0xf8, 0x04, 0x65, 0xe0, 0x2a,
+ 0x5f, 0xaa, 0x37, 0xcf, 0xeb, 0x86, 0xb2, 0x73, 0xb6, 0x04, 0x66, 0x99, 0x81, 0x02, 0x71, 0x57,
+ 0x81, 0x5b, 0xe6, 0x5e, 0x97, 0x9a, 0xe3, 0xca, 0x31, 0xc4, 0x1d, 0x96, 0x4d, 0xc3, 0xee, 0xee,
+ 0x2b, 0x39, 0x55, 0x01, 0x73, 0xec, 0x98, 0xa0, 0x48, 0xda, 0x3b, 0xaf, 0x05, 0x33, 0xe7, 0x1d,
+ 0xf7, 0x12, 0xf6, 0x1a, 0xd6, 0x3e, 0x40, 0x62, 0xb0, 0x05, 0x11, 0x25, 0x18, 0x03, 0xec, 0xd5,
+ 0xe2, 0x6e, 0x62, 0x01, 0xb5, 0xc5, 0xa1, 0x51, 0x23, 0xae, 0x07, 0xb3, 0x57, 0x82, 0xdc, 0x51,
+ 0x4b, 0x67, 0x92, 0xb4, 0x5f, 0x14, 0x73, 0xfc, 0x1a, 0x5e, 0x64, 0xf6, 0xab, 0xfe, 0x6f, 0x97,
+ 0x40, 0x71, 0x05, 0xfa, 0xa5, 0x6e, 0x97, 0x95, 0xdb, 0xcb, 0x85, 0xcf, 0x91, 0x72, 0x95, 0x28,
+ 0x75, 0xbb, 0xf1, 0x8d, 0x8a, 0x11, 0x50, 0x70, 0xde, 0x89, 0x4b, 0x13, 0xf4, 0xd2, 0x1e, 0x52,
+ 0x60, 0xf6, 0x12, 0xfb, 0x58, 0xe4, 0x9a, 0xfd, 0x7a, 0xc6, 0x4c, 0x7a, 0x62, 0x14, 0x7f, 0x2f,
+ 0x97, 0xec, 0x24, 0x15, 0xe4, 0x53, 0xef, 0x07, 0x53, 0x7b, 0x1e, 0x2c, 0x9b, 0x5e, 0x30, 0xb4,
+ 0xf1, 0x35, 0x6d, 0x5c, 0x7c, 0x00, 0xb6, 0xfd, 0xc5, 0xea, 0x2e, 0x9a, 0xf8, 0x6c, 0x90, 0x8c,
+ 0x61, 0xbc, 0x22, 0xfa, 0x6c, 0x04, 0x14, 0xd0, 0xb4, 0xf3, 0x8a, 0xe5, 0xef, 0x94, 0x77, 0x4c,
+ 0x9f, 0x6e, 0xb6, 0x84, 0xcf, 0xda, 0x4b, 0x46, 0x80, 0x33, 0xd1, 0x61, 0x27, 0xf6, 0x38, 0x7a,
+ 0x6a, 0x10, 0xc7, 0xe0, 0x65, 0x33, 0x0a, 0x88, 0x7f, 0x2b, 0x81, 0x7c, 0xa3, 0x07, 0x6d, 0xe1,
+ 0xb3, 0x97, 0xa1, 0x6c, 0xa5, 0x3e, 0xd9, 0x3e, 0x2c, 0xee, 0x16, 0x1c, 0x56, 0x1a, 0x95, 0x1c,
+ 0x23, 0xd9, 0xdb, 0x40, 0xde, 0xb2, 0xb7, 0x1c, 0x6a, 0xd9, 0x3e, 0x3a, 0xc6, 0xd6, 0xa9, 0xda,
+ 0x5b, 0x8e, 0x81, 0x33, 0x8a, 0x7a, 0x04, 0x27, 0x95, 0x9d, 0xbd, 0xb8, 0xff, 0x6e, 0x1a, 0x14,
+ 0x89, 0x3a, 0x6b, 0x2f, 0x93, 0x81, 0x5c, 0xea, 0x74, 0x62, 0x04, 0x2f, 0x1d, 0x10, 0xbc, 0x83,
+ 0x3f, 0x0b, 0x31, 0x09, 0x9f, 0xf9, 0xc0, 0x6b, 0x82, 0x7d, 0x3b, 0x6d, 0x52, 0xa5, 0x4e, 0x27,
+ 0xfe, 0xdc, 0x42, 0x58, 0xa0, 0xc4, 0x17, 0xc8, 0xb6, 0x70, 0x59, 0xac, 0x85, 0xa7, 0x1e, 0x08,
+ 0x62, 0xf9, 0xcb, 0x1e, 0xa2, 0x7f, 0x90, 0xc0, 0x54, 0xcd, 0xf2, 0x7c, 0x84, 0x4d, 0x49, 0x04,
+ 0x9b, 0x6b, 0xc1, 0x4c, 0x20, 0x1a, 0xd4, 0xe5, 0xa1, 0xfe, 0x3c, 0x4a, 0xe0, 0x67, 0xe2, 0xf7,
+ 0xf1, 0xe8, 0x3c, 0x39, 0xb9, 0xf6, 0x94, 0x8b, 0xf8, 0x33, 0x6d, 0x51, 0xb1, 0x52, 0x7f, 0xb1,
+ 0xbf, 0x14, 0x0a, 0x7c, 0x8d, 0x13, 0xf8, 0x9d, 0xa3, 0x14, 0x99, 0xbd, 0xd0, 0x7f, 0x5f, 0x02,
+ 0x00, 0x95, 0x4d, 0x0f, 0x0e, 0x3f, 0x8e, 0x0b, 0x07, 0x92, 0x20, 0xdd, 0x57, 0xb2, 0xd2, 0x5d,
+ 0xe3, 0xa5, 0xfb, 0xdd, 0xc3, 0xab, 0x9a, 0x74, 0x40, 0x58, 0x55, 0x80, 0x6c, 0x85, 0xa2, 0x45,
+ 0x7f, 0xb5, 0xb7, 0x87, 0x42, 0x5d, 0xe7, 0x84, 0x7a, 0xf7, 0x88, 0x25, 0x65, 0x2f, 0xd7, 0x3f,
+ 0x92, 0xc0, 0x54, 0x13, 0xfa, 0xa8, 0x9b, 0xd4, 0xce, 0x89, 0xf4, 0xf0, 0x4c, 0xdb, 0x96, 0x04,
+ 0xdb, 0xf6, 0x37, 0x72, 0xa2, 0x81, 0xe1, 0x22, 0xc9, 0x50, 0x9e, 0x62, 0x56, 0x1f, 0x5e, 0x2f,
+ 0x14, 0x18, 0x6e, 0x18, 0xb5, 0xec, 0xa5, 0xfb, 0x56, 0x29, 0xf4, 0x14, 0xe1, 0xcf, 0xf5, 0xb1,
+ 0x66, 0x71, 0xee, 0xa0, 0x59, 0x2c, 0x7e, 0xae, 0x8f, 0xad, 0x63, 0xbc, 0x63, 0x42, 0x6a, 0x63,
+ 0x63, 0x0c, 0x3e, 0x03, 0xa3, 0xc8, 0xeb, 0x79, 0x32, 0x28, 0xd2, 0xcd, 0x83, 0x7b, 0x93, 0xf7,
+ 0x0e, 0x86, 0x4f, 0x2d, 0xde, 0x3f, 0x82, 0x29, 0x97, 0xb4, 0x2c, 0x1f, 0xb2, 0x21, 0x31, 0x6c,
+ 0xdc, 0x0a, 0x0a, 0x38, 0x6a, 0x36, 0x1d, 0xe7, 0x22, 0x77, 0x8f, 0x80, 0x84, 0x8e, 0xde, 0x1a,
+ 0x24, 0x53, 0x6a, 0x14, 0xc6, 0xb0, 0x92, 0x3f, 0x0a, 0x0a, 0x5f, 0x55, 0x01, 0x58, 0xdf, 0xbb,
+ 0xd8, 0xb5, 0xbc, 0x1d, 0xcb, 0xc6, 0x3e, 0x62, 0x73, 0xf4, 0x91, 0x04, 0x7f, 0x4e, 0x34, 0xff,
+ 0x62, 0x8d, 0x02, 0x05, 0xc8, 0x7b, 0xae, 0x45, 0x97, 0x01, 0xd0, 0x5f, 0xf5, 0x9e, 0xd0, 0xdb,
+ 0x32, 0xdf, 0x17, 0xb8, 0x05, 0x89, 0x21, 0xe2, 0x60, 0x91, 0x29, 0x3d, 0xf2, 0xba, 0x64, 0x23,
+ 0x7c, 0x17, 0xf8, 0x08, 0xdf, 0xdc, 0x69, 0xee, 0x62, 0xdf, 0x69, 0x6e, 0x84, 0xa3, 0x67, 0x3d,
+ 0x07, 0x62, 0xd7, 0x23, 0xd9, 0xc0, 0xff, 0xd1, 0x17, 0xd8, 0x3d, 0x08, 0x7b, 0xe7, 0x91, 0x33,
+ 0x03, 0x51, 0x02, 0xdb, 0xe7, 0xcd, 0x08, 0xf6, 0x79, 0x1f, 0x8d, 0xe6, 0x3e, 0x8e, 0xa0, 0xe1,
+ 0x9c, 0x42, 0x72, 0x1c, 0xbb, 0xf9, 0x3e, 0x76, 0xb5, 0x4f, 0x08, 0x07, 0xe2, 0x64, 0x64, 0x9c,
+ 0x38, 0x8b, 0xa1, 0x1c, 0x48, 0x21, 0x07, 0xcc, 0x1e, 0x70, 0x52, 0x0f, 0x3c, 0x8c, 0x7e, 0x3a,
+ 0x5d, 0xde, 0x1d, 0x61, 0xbd, 0x46, 0x05, 0x0b, 0xc1, 0xb1, 0xf8, 0xc6, 0xd2, 0x7d, 0x7a, 0xb9,
+ 0xa5, 0xc0, 0x83, 0x47, 0xe5, 0xf1, 0xa1, 0x78, 0x72, 0x00, 0x3e, 0x5a, 0x93, 0xd1, 0xfe, 0x87,
+ 0x04, 0x8a, 0xd4, 0xdc, 0xb8, 0xf7, 0x90, 0x10, 0x6a, 0xaf, 0x1a, 0x05, 0x92, 0xc4, 0xe8, 0x24,
+ 0x9f, 0x4d, 0x0b, 0xc0, 0x18, 0x0c, 0x8c, 0x0b, 0x99, 0x01, 0xa0, 0xfd, 0xb3, 0x04, 0xf2, 0xc8,
+ 0x0c, 0x12, 0x8b, 0xfd, 0xf0, 0x19, 0x61, 0x97, 0x60, 0x46, 0x00, 0x88, 0x7c, 0x8c, 0x7e, 0x2f,
+ 0x81, 0x99, 0x1e, 0xc9, 0x18, 0x46, 0x1e, 0xb9, 0x51, 0xa0, 0x33, 0x82, 0x46, 0xf4, 0x99, 0xf6,
+ 0x3e, 0xa1, 0x03, 0x0f, 0xc9, 0xfc, 0xa4, 0x83, 0x43, 0x1f, 0x47, 0x98, 0x88, 0x2d, 0xed, 0x5f,
+ 0x25, 0x00, 0x0c, 0xe8, 0x39, 0xdd, 0xcb, 0x70, 0xc3, 0xb5, 0xb4, 0x47, 0x47, 0x00, 0xd0, 0x66,
+ 0x9f, 0x8b, 0x9a, 0xfd, 0xe7, 0x24, 0x51, 0xe7, 0x5f, 0x4e, 0xf3, 0x02, 0xe2, 0x31, 0xe2, 0x7f,
+ 0x3a, 0x98, 0xa2, 0x72, 0xa4, 0x36, 0xa5, 0x98, 0xf0, 0x83, 0x8f, 0xb4, 0x0f, 0x0a, 0x39, 0x0f,
+ 0x8b, 0x70, 0x94, 0x0e, 0x80, 0xf2, 0x08, 0x00, 0x1c, 0x07, 0xb3, 0x01, 0x00, 0x1b, 0x46, 0x55,
+ 0x81, 0xda, 0xbb, 0x65, 0xec, 0x61, 0x41, 0x06, 0xb7, 0xc3, 0xf7, 0x34, 0x7f, 0x21, 0x3c, 0xd9,
+ 0x67, 0xe4, 0x11, 0x96, 0x9f, 0x11, 0x40, 0xbf, 0x2d, 0x34, 0xbb, 0x17, 0x60, 0xe8, 0x91, 0xd2,
+ 0x5f, 0x9d, 0xd5, 0xc1, 0x3c, 0x67, 0x95, 0xa8, 0xa7, 0xc1, 0x49, 0x2e, 0x81, 0x8c, 0x77, 0x1d,
+ 0xe5, 0x98, 0xaa, 0x81, 0x53, 0xdc, 0x1b, 0xfa, 0x00, 0x3b, 0x4a, 0x4e, 0x7b, 0xf8, 0x0b, 0xb9,
+ 0x70, 0xbd, 0xe7, 0xfd, 0x79, 0xba, 0xd2, 0xf6, 0x29, 0x3e, 0xd8, 0x65, 0xdb, 0xb1, 0x7d, 0xf8,
+ 0x20, 0xe3, 0xa6, 0x12, 0x26, 0x24, 0x5a, 0x0d, 0xa7, 0xc1, 0x94, 0xef, 0xb2, 0xae, 0x2b, 0xc1,
+ 0x23, 0xab, 0x58, 0x05, 0x5e, 0xb1, 0xea, 0xe0, 0xac, 0x65, 0xb7, 0xbb, 0x7b, 0x1d, 0x68, 0xc0,
+ 0xae, 0x89, 0x64, 0xe8, 0x95, 0xbc, 0x0a, 0xec, 0x41, 0xbb, 0x03, 0x6d, 0x9f, 0xf0, 0x19, 0x9c,
+ 0x7b, 0x15, 0xc8, 0xc9, 0x2b, 0xe3, 0x3d, 0xbc, 0x32, 0x3e, 0x6e, 0xd0, 0x12, 0x6e, 0xc2, 0x7a,
+ 0xdf, 0x9d, 0x00, 0x90, 0xba, 0x9d, 0xb3, 0xe0, 0x15, 0xaa, 0x86, 0xd7, 0xf4, 0xad, 0xfa, 0x35,
+ 0xc2, 0x0c, 0x06, 0x93, 0x59, 0xfb, 0x72, 0xa8, 0x7e, 0xcf, 0xe0, 0xd4, 0xef, 0x56, 0x41, 0x16,
+ 0xd2, 0x69, 0x5d, 0x6f, 0x04, 0xad, 0x9b, 0x07, 0x33, 0xd1, 0x6e, 0xb2, 0xac, 0x5e, 0x03, 0xae,
+ 0x0e, 0x3c, 0x8c, 0xeb, 0xba, 0x5e, 0x69, 0x6e, 0x6e, 0xac, 0xaf, 0x18, 0xa5, 0x8a, 0xae, 0x00,
+ 0xa4, 0x9f, 0x44, 0x2f, 0x43, 0xc7, 0xe0, 0xbc, 0xf6, 0x07, 0x12, 0x28, 0xe0, 0x43, 0xdb, 0xda,
+ 0xf7, 0x8d, 0x49, 0x73, 0x3c, 0xce, 0xe9, 0x29, 0x1c, 0x77, 0xc5, 0xaf, 0x30, 0xa1, 0xc2, 0xc4,
+ 0x5c, 0x1d, 0xea, 0x0a, 0x93, 0x04, 0x42, 0xd9, 0xcf, 0x84, 0x50, 0x93, 0x6c, 0xee, 0x38, 0x57,
+ 0xfe, 0x33, 0x37, 0x49, 0x54, 0xff, 0x23, 0x6e, 0x92, 0x03, 0x58, 0x98, 0x78, 0x93, 0x1c, 0xd0,
+ 0xee, 0x12, 0x9a, 0xa9, 0xf6, 0x91, 0x42, 0x38, 0xff, 0xfb, 0xa4, 0x74, 0xa8, 0xbd, 0xaf, 0x12,
+ 0x98, 0xb7, 0x6c, 0x1f, 0xba, 0xb6, 0xd9, 0x5d, 0xee, 0x9a, 0xdb, 0x81, 0x7d, 0xda, 0xbf, 0xe1,
+ 0x51, 0x65, 0xf2, 0x18, 0xfc, 0x17, 0xea, 0x19, 0x00, 0x7c, 0xb8, 0xdb, 0xeb, 0x9a, 0x7e, 0xa4,
+ 0x7a, 0x4c, 0x0a, 0xab, 0x7d, 0x79, 0x5e, 0xfb, 0x6e, 0x07, 0x57, 0x11, 0xd0, 0x5a, 0xfb, 0x3d,
+ 0xb8, 0x61, 0x5b, 0xcf, 0xde, 0xc3, 0xb1, 0x91, 0x89, 0x8e, 0x0e, 0x7a, 0xc5, 0xed, 0x00, 0x15,
+ 0xf9, 0x1d, 0x20, 0xf5, 0x6e, 0x70, 0x0d, 0x0e, 0x7b, 0x8d, 0xef, 0x08, 0x39, 0x6f, 0x75, 0xb6,
+ 0xa1, 0x5f, 0xdd, 0x5a, 0xb3, 0x3c, 0xcf, 0xb2, 0xb7, 0xf1, 0x74, 0x7c, 0xda, 0x88, 0xcf, 0xa0,
+ 0xfd, 0xad, 0x70, 0xdc, 0xa5, 0xa0, 0xcf, 0x18, 0x12, 0x77, 0x29, 0x6c, 0xa7, 0x72, 0x5f, 0x3b,
+ 0x0d, 0x57, 0x75, 0xf2, 0x02, 0xab, 0x3a, 0x2c, 0xa6, 0x05, 0xc1, 0xd5, 0x81, 0xd7, 0x0a, 0x05,
+ 0x76, 0x4a, 0xaa, 0x46, 0xf6, 0x7d, 0xdf, 0xd7, 0x65, 0xb0, 0x40, 0x8a, 0x5e, 0x72, 0x9c, 0x4b,
+ 0xbb, 0xa6, 0x7b, 0x49, 0xfb, 0x89, 0xc3, 0xed, 0xe2, 0x26, 0xee, 0x5e, 0xc5, 0x6d, 0xc9, 0xf6,
+ 0x29, 0x6f, 0xbe, 0x5f, 0x79, 0xb5, 0xdf, 0x12, 0x9e, 0x92, 0x70, 0xf2, 0x0c, 0x2a, 0x35, 0x99,
+ 0xed, 0x2d, 0xb1, 0xe3, 0x8d, 0x22, 0x0c, 0x66, 0x0f, 0xfc, 0x6f, 0x84, 0xc0, 0x07, 0xe3, 0x08,
+ 0xbb, 0x33, 0x30, 0x4e, 0xdc, 0xb5, 0xaf, 0x8c, 0x86, 0x5d, 0xc0, 0xd7, 0x08, 0xd8, 0x29, 0x40,
+ 0xbe, 0x14, 0x3a, 0x23, 0xa1, 0xbf, 0x6c, 0x85, 0xf2, 0xd9, 0xa1, 0x19, 0xc3, 0xf2, 0x44, 0xd0,
+ 0x3c, 0xc9, 0xb3, 0xd0, 0xe8, 0x65, 0x8a, 0xe9, 0x97, 0x84, 0x77, 0xdc, 0x06, 0x0a, 0x88, 0x70,
+ 0x37, 0x99, 0x56, 0x29, 0xb6, 0x5d, 0x27, 0xce, 0x66, 0xf6, 0x68, 0xbe, 0xb8, 0x00, 0x66, 0x82,
+ 0xf8, 0x57, 0xf8, 0x46, 0xc1, 0x10, 0xc3, 0x53, 0xa0, 0xe8, 0x39, 0x7b, 0x6e, 0x1b, 0xd2, 0x3d,
+ 0x50, 0xfa, 0x34, 0xc2, 0x7e, 0xdd, 0x50, 0x73, 0xe1, 0x80, 0x45, 0x92, 0x4f, 0x6d, 0x91, 0xc4,
+ 0xdb, 0xbb, 0x09, 0xf6, 0x83, 0xf6, 0x12, 0xe1, 0x6b, 0x3f, 0x38, 0xcc, 0x9a, 0xd0, 0x7f, 0x24,
+ 0x1a, 0x01, 0xbf, 0x2a, 0xb4, 0x1b, 0x34, 0xa4, 0x26, 0xe9, 0x54, 0xae, 0x31, 0x82, 0x1d, 0xfc,
+ 0x68, 0xf0, 0xa8, 0x20, 0x07, 0x35, 0x80, 0xb1, 0xc1, 0xbb, 0x61, 0xd4, 0x14, 0x59, 0x7b, 0x5e,
+ 0x1e, 0x28, 0x84, 0xb5, 0x46, 0x68, 0x0b, 0x6a, 0x2f, 0xcf, 0x1d, 0xb5, 0xc1, 0x1b, 0x3f, 0x83,
+ 0xfd, 0x5d, 0x49, 0x34, 0x58, 0x38, 0x27, 0xf8, 0xa8, 0x76, 0x31, 0x9a, 0x34, 0x42, 0x33, 0x4b,
+ 0x50, 0x3e, 0xed, 0x2d, 0x39, 0x91, 0xd8, 0xe3, 0x62, 0x2c, 0x66, 0xdf, 0x2b, 0x7d, 0x23, 0x1f,
+ 0x84, 0x31, 0x5c, 0x76, 0x9d, 0xdd, 0x0d, 0xb7, 0xab, 0xfd, 0x9b, 0xd0, 0xd5, 0x0e, 0x31, 0xb3,
+ 0x0b, 0x29, 0x7e, 0x76, 0x81, 0x57, 0xa4, 0xbb, 0xd1, 0x56, 0x58, 0x77, 0x84, 0xe1, 0x5b, 0xbd,
+ 0x09, 0x2c, 0x98, 0x9d, 0xce, 0xba, 0xb9, 0x0d, 0xcb, 0x68, 0xda, 0x6e, 0xfb, 0x34, 0xc4, 0x59,
+ 0x5f, 0x6a, 0xe2, 0x54, 0x86, 0xef, 0x23, 0xa7, 0x0e, 0x58, 0xa5, 0xe2, 0xcb, 0xb0, 0x1c, 0x88,
+ 0x54, 0x7e, 0x13, 0x19, 0xfe, 0xd0, 0x90, 0xd1, 0xde, 0x31, 0xa3, 0x80, 0x8c, 0xf4, 0x49, 0xd0,
+ 0x17, 0x4b, 0x80, 0xef, 0xec, 0x35, 0xef, 0x57, 0x24, 0x30, 0x85, 0xf0, 0x28, 0x75, 0x3a, 0xda,
+ 0x63, 0xb9, 0xb8, 0xa5, 0xb1, 0xde, 0x70, 0x2f, 0x14, 0x76, 0x43, 0x0c, 0x6a, 0x48, 0xe8, 0xc7,
+ 0x60, 0x12, 0x09, 0x51, 0xe2, 0x84, 0x28, 0xe6, 0x6d, 0x98, 0x58, 0x44, 0xf6, 0xe2, 0xfb, 0x8c,
+ 0x04, 0xe6, 0x83, 0x79, 0xc6, 0x32, 0xf4, 0xdb, 0x3b, 0xda, 0x9d, 0xa2, 0xeb, 0x5c, 0xb4, 0x25,
+ 0x86, 0x5b, 0xc2, 0x5d, 0xed, 0x5b, 0xb9, 0x94, 0x2a, 0xcf, 0x95, 0x1c, 0xb3, 0x48, 0x98, 0x4a,
+ 0x17, 0x93, 0x08, 0x66, 0x2f, 0xcc, 0x2f, 0x4b, 0x00, 0xb4, 0x9c, 0x70, 0xb2, 0x7c, 0x08, 0x49,
+ 0xfe, 0xa4, 0xf0, 0x6e, 0x31, 0xad, 0x78, 0x54, 0x6c, 0xfa, 0x9e, 0x43, 0xd0, 0x99, 0x6a, 0x58,
+ 0x49, 0x13, 0x69, 0xeb, 0x33, 0x95, 0xbd, 0x5e, 0xd7, 0x6a, 0x9b, 0x7e, 0xbf, 0x07, 0x60, 0xbc,
+ 0x78, 0xf1, 0x75, 0xdc, 0xa9, 0x8c, 0xc6, 0xb0, 0x8c, 0x18, 0x59, 0x92, 0x38, 0x3f, 0x52, 0x10,
+ 0xe7, 0x47, 0xd0, 0xab, 0x67, 0x08, 0xf1, 0x09, 0xa8, 0xa7, 0x0c, 0x8e, 0x37, 0x7a, 0xd0, 0x5e,
+ 0x72, 0xa1, 0xd9, 0x69, 0xbb, 0x7b, 0xbb, 0x17, 0x3d, 0xd6, 0x7d, 0x35, 0x59, 0x47, 0x99, 0x95,
+ 0x6b, 0x89, 0x5b, 0xb9, 0xd6, 0x7e, 0x58, 0x16, 0x8d, 0xc4, 0xc6, 0xec, 0xaf, 0x30, 0x3c, 0x8c,
+ 0x30, 0xd4, 0xa5, 0x72, 0xba, 0xea, 0x5b, 0xa4, 0xce, 0xa7, 0x59, 0xa4, 0x7e, 0xb3, 0x50, 0x5c,
+ 0x37, 0xa1, 0x7a, 0x4d, 0xc4, 0x77, 0x6e, 0xa1, 0x09, 0xfd, 0x18, 0x78, 0x6f, 0x04, 0xf3, 0x17,
+ 0xa3, 0x37, 0x21, 0xc4, 0x7c, 0xe2, 0x00, 0x8f, 0xd6, 0xb7, 0xa6, 0x5d, 0xa1, 0xe1, 0x59, 0x88,
+ 0x41, 0x37, 0x44, 0x50, 0x12, 0x71, 0x9b, 0x4b, 0xb5, 0xdc, 0x92, 0x58, 0x7e, 0xf6, 0x28, 0x7c,
+ 0x42, 0x02, 0xb3, 0xf8, 0x92, 0xf1, 0xa5, 0x7d, 0x7c, 0x90, 0x53, 0xd0, 0x28, 0x79, 0x31, 0x2b,
+ 0x66, 0x15, 0xe4, 0xbb, 0x96, 0x7d, 0x29, 0xf0, 0x77, 0x44, 0xff, 0xa3, 0x2b, 0x4a, 0xa5, 0x01,
+ 0x57, 0x94, 0x86, 0xdb, 0x24, 0x61, 0xb9, 0x31, 0xa3, 0xe9, 0x1b, 0x72, 0x22, 0x57, 0x94, 0x0e,
+ 0x25, 0x97, 0xbd, 0x18, 0xff, 0x3a, 0x0f, 0x8a, 0x4d, 0x68, 0xba, 0xed, 0x1d, 0xed, 0xfd, 0xd2,
+ 0xc0, 0xa9, 0xc4, 0x34, 0x3f, 0x95, 0x58, 0x06, 0x53, 0x5b, 0x56, 0xd7, 0x87, 0x2e, 0xf1, 0x01,
+ 0x67, 0xbb, 0x76, 0xd2, 0xc4, 0x97, 0xba, 0x4e, 0xfb, 0xd2, 0x22, 0x35, 0xed, 0x17, 0x83, 0x78,
+ 0xd1, 0x8b, 0xcb, 0xf8, 0x23, 0x23, 0xf8, 0x18, 0x19, 0x84, 0x9e, 0xe3, 0xfa, 0x71, 0xf7, 0x0f,
+ 0xc5, 0x50, 0x69, 0x3a, 0xae, 0x6f, 0x90, 0x0f, 0x11, 0xcc, 0x5b, 0x7b, 0xdd, 0x6e, 0x0b, 0x3e,
+ 0xe8, 0x07, 0xd3, 0xba, 0xe0, 0x19, 0x19, 0x8b, 0xce, 0xd6, 0x96, 0x07, 0xc9, 0xa2, 0x42, 0xc1,
+ 0xa0, 0x4f, 0xea, 0x49, 0x50, 0xe8, 0x5a, 0xbb, 0x16, 0x99, 0x88, 0x14, 0x0c, 0xf2, 0xa0, 0xde,
+ 0x02, 0x94, 0x68, 0x0e, 0x44, 0x18, 0x3d, 0x5d, 0xc4, 0x4d, 0xf3, 0x40, 0x3a, 0xd2, 0x99, 0x4b,
+ 0x70, 0xdf, 0x3b, 0x3d, 0x85, 0xdf, 0xe3, 0xff, 0xfc, 0x81, 0x1b, 0x91, 0x0d, 0x13, 0x22, 0xf1,
+ 0xf8, 0x19, 0xae, 0x0b, 0xdb, 0x8e, 0xdb, 0x09, 0x64, 0x13, 0x3f, 0xc1, 0xa0, 0xf9, 0xd2, 0x6d,
+ 0x73, 0x0c, 0x2c, 0x3c, 0x7b, 0x4d, 0x7b, 0x4f, 0x11, 0x75, 0x9b, 0xa8, 0xe8, 0xf3, 0x96, 0xbf,
+ 0xb3, 0x06, 0x7d, 0x53, 0xfb, 0x6b, 0x79, 0xa0, 0xc6, 0xcd, 0xfe, 0x6f, 0x8d, 0x1b, 0xa2, 0x71,
+ 0x24, 0xe6, 0x97, 0xbf, 0xe7, 0xda, 0x48, 0x8e, 0xd4, 0x8f, 0x96, 0x49, 0x51, 0xef, 0x06, 0xd7,
+ 0x44, 0x4f, 0xc1, 0x52, 0x6a, 0x85, 0x71, 0xad, 0x9d, 0x36, 0xe2, 0x33, 0xa8, 0xeb, 0xe0, 0x06,
+ 0xf2, 0x72, 0xb5, 0xb5, 0x56, 0x5b, 0xb5, 0xb6, 0x77, 0xba, 0xd6, 0xf6, 0x8e, 0xef, 0x55, 0x6d,
+ 0xcf, 0x87, 0x66, 0xa7, 0xb1, 0x65, 0x90, 0x9b, 0xc3, 0x00, 0xa6, 0x23, 0x92, 0x95, 0xf7, 0x11,
+ 0x17, 0x1b, 0xdd, 0x58, 0x4d, 0x89, 0x69, 0x29, 0x4f, 0x41, 0x2d, 0xc5, 0xdb, 0xeb, 0x86, 0x98,
+ 0x5e, 0xdb, 0x87, 0x69, 0xa4, 0xea, 0x7b, 0x5d, 0xdc, 0x5c, 0x70, 0xe6, 0xb4, 0xe3, 0x5c, 0x02,
+ 0x27, 0xd9, 0x37, 0x9b, 0x7f, 0x2b, 0x82, 0xc2, 0x8a, 0x6b, 0xf6, 0x76, 0xb4, 0xe7, 0x31, 0xfd,
+ 0xf3, 0xb8, 0xda, 0x44, 0xa8, 0x9d, 0xd2, 0x30, 0xed, 0x94, 0x87, 0x68, 0x67, 0x9e, 0xd1, 0xce,
+ 0xf8, 0x45, 0xe7, 0xb3, 0x60, 0xae, 0xed, 0x74, 0xbb, 0xb0, 0x8d, 0xe4, 0x51, 0xed, 0xe0, 0xd5,
+ 0x9e, 0x19, 0x83, 0x4b, 0xc3, 0x31, 0xf5, 0xa1, 0xdf, 0x24, 0x6b, 0xec, 0x44, 0xe9, 0xa3, 0x04,
+ 0xed, 0xe5, 0x12, 0xc8, 0xeb, 0x9d, 0x6d, 0xc8, 0xad, 0xc3, 0xe7, 0x98, 0x75, 0xf8, 0x53, 0xa0,
+ 0xe8, 0x9b, 0xee, 0x36, 0xf4, 0x83, 0x75, 0x02, 0xf2, 0x14, 0x86, 0xfa, 0x97, 0x99, 0x50, 0xff,
+ 0xdf, 0x0d, 0xf2, 0x48, 0x66, 0xd4, 0x2d, 0xfe, 0x86, 0x41, 0xf0, 0x63, 0xd9, 0x2f, 0xa2, 0x12,
+ 0x17, 0x51, 0xad, 0x0d, 0xfc, 0x41, 0x3f, 0xd6, 0x85, 0x83, 0xa1, 0x68, 0xaf, 0x05, 0x33, 0x56,
+ 0xdb, 0xb1, 0xab, 0xbb, 0xe6, 0x36, 0xa4, 0xd5, 0x8c, 0x12, 0x82, 0xb7, 0xfa, 0xae, 0xf3, 0x80,
+ 0x45, 0x17, 0xb5, 0xa2, 0x04, 0x54, 0x85, 0x1d, 0xab, 0xd3, 0x81, 0x36, 0x6d, 0xd9, 0xf4, 0xe9,
+ 0xec, 0x19, 0x90, 0x47, 0x3c, 0x20, 0xfd, 0x41, 0xc6, 0x82, 0x72, 0x4c, 0x9d, 0x43, 0xcd, 0x8a,
+ 0x34, 0x5e, 0x25, 0xc7, 0xaf, 0xb9, 0x8a, 0x78, 0x0d, 0x91, 0xca, 0x0d, 0x6e, 0x5c, 0x4f, 0x00,
+ 0x05, 0xdb, 0xe9, 0xc0, 0xa1, 0x83, 0x10, 0xc9, 0xa5, 0x3e, 0x19, 0x14, 0x60, 0x07, 0xf5, 0x0a,
+ 0x32, 0xce, 0x7e, 0x26, 0x59, 0x96, 0x06, 0xc9, 0x9c, 0xce, 0x35, 0x69, 0x10, 0xb7, 0xd9, 0x37,
+ 0xc0, 0x1f, 0x9d, 0x02, 0xc7, 0x49, 0x1f, 0xd0, 0xdc, 0xbb, 0x88, 0x48, 0x5d, 0x84, 0xda, 0xeb,
+ 0x07, 0x0f, 0x5c, 0xc7, 0x79, 0x65, 0x3f, 0x09, 0x0a, 0xde, 0xde, 0xc5, 0xd0, 0x08, 0x25, 0x0f,
+ 0x6c, 0xd3, 0x95, 0xc6, 0x32, 0x9c, 0xc9, 0xa3, 0x0e, 0x67, 0xdc, 0xd0, 0x24, 0x07, 0x8d, 0x3f,
+ 0x1a, 0xc8, 0xc8, 0x81, 0x8e, 0x60, 0x20, 0x1b, 0x34, 0x0c, 0x9d, 0x06, 0x53, 0xe6, 0x96, 0x0f,
+ 0xdd, 0xc8, 0x4c, 0xa4, 0x8f, 0x68, 0xa8, 0xbc, 0x08, 0xb7, 0x1c, 0x17, 0x89, 0x85, 0x84, 0x85,
+ 0x0d, 0x9f, 0x99, 0x96, 0x0b, 0xb8, 0x1d, 0xb4, 0x5b, 0xc1, 0x09, 0xdb, 0xa9, 0xc0, 0x1e, 0x95,
+ 0x33, 0x41, 0x71, 0x9e, 0xdc, 0xce, 0x7e, 0xe0, 0xc5, 0x81, 0xae, 0x64, 0xe1, 0x60, 0x57, 0xa2,
+ 0x7d, 0x2e, 0xed, 0x9c, 0xb9, 0x0f, 0xe8, 0xb1, 0x59, 0x68, 0xea, 0xd3, 0xc0, 0x5c, 0x87, 0x7a,
+ 0x88, 0xb5, 0xad, 0xb0, 0x95, 0xc4, 0x7e, 0xc7, 0x65, 0x8e, 0x14, 0x29, 0xcf, 0x2a, 0xd2, 0x0a,
+ 0x98, 0xc6, 0x47, 0xaf, 0x91, 0x26, 0x15, 0xfa, 0x3c, 0xf2, 0xf1, 0xb4, 0x2e, 0xac, 0x14, 0x23,
+ 0xb6, 0xc5, 0x32, 0xfd, 0xc4, 0x08, 0x3f, 0x4e, 0x37, 0xfb, 0x4e, 0x96, 0x50, 0xf6, 0xcd, 0xf1,
+ 0x97, 0x8a, 0xe0, 0x9a, 0xb2, 0xeb, 0x78, 0x1e, 0x3e, 0x82, 0xd3, 0xdf, 0x30, 0xdf, 0x28, 0x71,
+ 0x97, 0xfe, 0x3c, 0xa2, 0x9b, 0xdf, 0xa0, 0x06, 0x35, 0xb9, 0xa6, 0xf1, 0x17, 0xc2, 0x41, 0x6b,
+ 0xc2, 0xfd, 0x87, 0x18, 0xa1, 0xff, 0xe7, 0x68, 0x24, 0xef, 0xc9, 0x89, 0xc4, 0xd1, 0x49, 0x29,
+ 0xab, 0xec, 0x9b, 0xcb, 0x97, 0x24, 0xf0, 0xe8, 0x7e, 0x6e, 0x36, 0x6c, 0x2f, 0x6c, 0x30, 0xd7,
+ 0x0d, 0x69, 0x2f, 0x7c, 0xdc, 0x95, 0xc4, 0x3b, 0x7e, 0x63, 0xea, 0xce, 0x94, 0x16, 0xb3, 0x58,
+ 0x12, 0x1d, 0xe8, 0x49, 0xba, 0xe3, 0x37, 0x35, 0xf9, 0xec, 0x85, 0xfb, 0xbb, 0x79, 0x70, 0x7c,
+ 0xc5, 0x75, 0xf6, 0x7a, 0x5e, 0xd4, 0x03, 0xfd, 0xc9, 0xe0, 0x0d, 0xd9, 0xa2, 0x88, 0x69, 0x70,
+ 0x3d, 0x98, 0x75, 0xa9, 0x35, 0x17, 0x6d, 0xcf, 0xb2, 0x49, 0x6c, 0xef, 0x25, 0x1f, 0xa6, 0xf7,
+ 0x8a, 0xfa, 0x99, 0x3c, 0xd7, 0xcf, 0xf4, 0xf7, 0x1c, 0x85, 0x01, 0x3d, 0xc7, 0x1f, 0x4b, 0x29,
+ 0x07, 0xd5, 0x3e, 0x11, 0xc5, 0xf4, 0x17, 0x65, 0x50, 0xdc, 0xc6, 0x19, 0x69, 0x77, 0xf1, 0x78,
+ 0xb1, 0x9a, 0x61, 0xe2, 0x06, 0xfd, 0x34, 0x92, 0xab, 0xcc, 0xea, 0x70, 0xaa, 0x01, 0x2e, 0x99,
+ 0xdb, 0xec, 0x95, 0xea, 0xe1, 0x3c, 0x98, 0x0b, 0x4b, 0xaf, 0x76, 0x3c, 0x2e, 0xba, 0x2b, 0xa3,
+ 0x51, 0xf3, 0x22, 0x1a, 0x75, 0x60, 0x9d, 0x39, 0x1c, 0x75, 0x64, 0x66, 0xd4, 0x19, 0x38, 0xba,
+ 0xcc, 0xc5, 0x8c, 0x2e, 0xda, 0x73, 0x65, 0xd1, 0x6b, 0xf3, 0xf8, 0xae, 0x15, 0xd7, 0xe6, 0x91,
+ 0x3c, 0x58, 0x08, 0x5e, 0xde, 0x37, 0xbc, 0x56, 0xd9, 0x2b, 0xc9, 0x87, 0x25, 0x70, 0xe2, 0x60,
+ 0x67, 0xfe, 0x1d, 0xbc, 0x97, 0x1a, 0xaa, 0x93, 0x17, 0x7a, 0xa9, 0xe1, 0x27, 0x7e, 0x93, 0x2e,
+ 0x31, 0x08, 0x0a, 0x67, 0xef, 0x0d, 0xef, 0xc4, 0xc5, 0xc2, 0x9c, 0x08, 0x12, 0xcd, 0x5e, 0x80,
+ 0x3f, 0x25, 0x83, 0x99, 0x26, 0xf4, 0x6b, 0xe6, 0xbe, 0xb3, 0xe7, 0x6b, 0xa6, 0xe8, 0xf6, 0xdc,
+ 0x53, 0x41, 0xb1, 0x8b, 0x3f, 0xc1, 0x1d, 0x0c, 0x1b, 0x74, 0x94, 0xdd, 0xdf, 0xc2, 0xbe, 0x41,
+ 0x84, 0xb4, 0x41, 0xf3, 0xf3, 0xd1, 0x67, 0x44, 0x76, 0x47, 0x43, 0xee, 0xc6, 0xb2, 0xb5, 0x93,
+ 0x6a, 0xef, 0x34, 0xae, 0xe8, 0xec, 0x61, 0xf9, 0x61, 0x19, 0xcc, 0x37, 0xa1, 0x5f, 0xf5, 0x96,
+ 0xcd, 0xcb, 0x8e, 0x6b, 0xf9, 0x50, 0x5b, 0x11, 0x85, 0xe6, 0x0c, 0x00, 0x56, 0xf8, 0x19, 0x8d,
+ 0x89, 0xc5, 0xa4, 0x68, 0x6f, 0x49, 0xeb, 0x28, 0xc4, 0xf1, 0x31, 0x16, 0x10, 0x52, 0xf9, 0x58,
+ 0x24, 0x15, 0x3f, 0x81, 0x8b, 0xbf, 0x25, 0x0a, 0x44, 0xc9, 0x6d, 0xef, 0x58, 0x97, 0x61, 0x27,
+ 0x25, 0x10, 0xc1, 0x67, 0x11, 0x10, 0x21, 0xa1, 0xd4, 0xee, 0x2b, 0x1c, 0x1f, 0xe3, 0x70, 0x5f,
+ 0x49, 0x22, 0x38, 0x91, 0xb0, 0x56, 0xa8, 0xeb, 0xa1, 0xeb, 0x99, 0xf7, 0x8a, 0x8a, 0x35, 0x32,
+ 0xd9, 0x24, 0xd6, 0x64, 0x1b, 0xa9, 0x63, 0x21, 0x65, 0x0f, 0xd3, 0xe9, 0x7c, 0x16, 0x1d, 0xcb,
+ 0xc0, 0xa2, 0xb3, 0x17, 0xfa, 0xfb, 0x64, 0x70, 0x75, 0x18, 0xef, 0xa5, 0x09, 0xfd, 0x8a, 0xe9,
+ 0xed, 0x5c, 0x74, 0x4c, 0xb7, 0xa3, 0x95, 0xc7, 0x70, 0xe0, 0x50, 0xfb, 0x43, 0x16, 0x84, 0x3a,
+ 0x0f, 0xc2, 0x40, 0x57, 0xd2, 0x81, 0xbc, 0x8c, 0xa3, 0x93, 0x49, 0xf4, 0x76, 0x7d, 0x47, 0x08,
+ 0xd6, 0x33, 0x39, 0xb0, 0xee, 0x19, 0x95, 0xc5, 0xec, 0x81, 0xfb, 0x59, 0x32, 0x22, 0x30, 0x5e,
+ 0xcf, 0x17, 0x44, 0x01, 0x8b, 0xf1, 0x7a, 0x95, 0x63, 0xbd, 0x5e, 0x47, 0x1a, 0x23, 0x86, 0x7a,
+ 0x2c, 0x67, 0x3b, 0x46, 0x1c, 0xa1, 0x37, 0xf2, 0xbb, 0x64, 0xa0, 0xe0, 0x80, 0x5f, 0x8c, 0x47,
+ 0x38, 0x1b, 0x3f, 0x3b, 0x19, 0x9d, 0x03, 0xde, 0xe7, 0x53, 0x69, 0xbd, 0xcf, 0xb5, 0x77, 0xa6,
+ 0xf5, 0x31, 0xef, 0xe7, 0x76, 0x2c, 0x88, 0xa5, 0x72, 0x21, 0x1f, 0xc2, 0x41, 0xf6, 0xa0, 0xfd,
+ 0x98, 0x0c, 0x00, 0x6a, 0xd0, 0xf4, 0x6c, 0xc4, 0xb3, 0x44, 0xe1, 0xba, 0x8d, 0xf5, 0xbb, 0x47,
+ 0x40, 0x5d, 0xdd, 0x07, 0x14, 0xa1, 0x18, 0x9d, 0xba, 0x78, 0x7d, 0x5a, 0xdf, 0xca, 0x88, 0xab,
+ 0xb1, 0xc0, 0x92, 0xca, 0xdb, 0x32, 0xb6, 0xec, 0xec, 0x01, 0xf9, 0xef, 0x12, 0x28, 0xb4, 0x9c,
+ 0x26, 0xf4, 0x0f, 0x6f, 0x0a, 0xa4, 0x8e, 0x1a, 0x80, 0xcb, 0x1d, 0x47, 0xd4, 0x80, 0x41, 0x84,
+ 0xb2, 0x17, 0xdd, 0x7b, 0x25, 0x30, 0xd7, 0x72, 0xca, 0xe1, 0xe2, 0x94, 0xb8, 0xaf, 0xaa, 0xf8,
+ 0xd5, 0xff, 0x61, 0x05, 0xa3, 0x62, 0x0e, 0x75, 0xf5, 0xff, 0x70, 0x7a, 0xd9, 0xcb, 0xed, 0x4e,
+ 0x70, 0x7c, 0xc3, 0xee, 0x38, 0x06, 0xec, 0x38, 0x74, 0xa5, 0x5b, 0x55, 0x41, 0x7e, 0xcf, 0xee,
+ 0x38, 0x98, 0xe5, 0x82, 0x81, 0xff, 0xa3, 0x34, 0x17, 0x76, 0x1c, 0xea, 0x1b, 0x80, 0xff, 0x6b,
+ 0x7f, 0x21, 0x83, 0x3c, 0xfa, 0x56, 0x5c, 0xd4, 0xef, 0x92, 0x53, 0xc6, 0x41, 0x40, 0xe4, 0xc7,
+ 0x62, 0x09, 0xdd, 0xcb, 0xac, 0xfd, 0x13, 0x0f, 0xd6, 0x1b, 0xe2, 0xca, 0x63, 0x44, 0x11, 0xad,
+ 0xf9, 0xab, 0xa7, 0xc1, 0xd4, 0xc5, 0xae, 0xd3, 0xbe, 0x14, 0x1d, 0xd7, 0xa7, 0x8f, 0xea, 0x2d,
+ 0xa0, 0xe0, 0x9a, 0xf6, 0x36, 0xa4, 0x7b, 0x0a, 0x27, 0xfb, 0xfa, 0x42, 0xec, 0xf5, 0x62, 0x90,
+ 0x2c, 0xda, 0x3b, 0xd3, 0x44, 0x60, 0x18, 0x50, 0xf9, 0x74, 0xfa, 0x50, 0x19, 0xe1, 0xe4, 0x99,
+ 0x02, 0xe6, 0xca, 0xa5, 0x3a, 0xb9, 0xc7, 0xb0, 0x71, 0x4e, 0x57, 0x64, 0x0c, 0x33, 0x92, 0x49,
+ 0x86, 0x30, 0x23, 0xf2, 0xff, 0x69, 0x61, 0x1e, 0x50, 0xf9, 0xa3, 0x80, 0xf9, 0x33, 0x12, 0x98,
+ 0xaf, 0x59, 0x9e, 0x1f, 0xe7, 0xed, 0x9f, 0x10, 0xef, 0xf7, 0x25, 0x69, 0x4d, 0x65, 0xae, 0x1c,
+ 0xe1, 0x40, 0xbf, 0xa9, 0xcc, 0xe1, 0xa4, 0x22, 0x26, 0x73, 0x2c, 0x05, 0x73, 0x40, 0x2e, 0xb1,
+ 0x17, 0x96, 0x64, 0x6a, 0x43, 0x29, 0x2a, 0x64, 0xf2, 0x86, 0x52, 0x6c, 0xd9, 0xd9, 0xcb, 0xf7,
+ 0x2f, 0x24, 0x70, 0x02, 0x15, 0x9f, 0xb4, 0x2c, 0x15, 0x2f, 0xe6, 0xa1, 0xcb, 0x52, 0xa9, 0x57,
+ 0xc6, 0x0f, 0xf0, 0x32, 0x8e, 0x95, 0xf1, 0x61, 0x44, 0x27, 0x2c, 0xe6, 0x98, 0x65, 0xd8, 0x61,
+ 0x62, 0x4e, 0x58, 0x86, 0x1d, 0x5d, 0xcc, 0xc9, 0x4b, 0xb1, 0x23, 0x8a, 0xf9, 0xc8, 0x16, 0x58,
+ 0x7f, 0x41, 0x0e, 0xc5, 0x1c, 0xbb, 0xb6, 0x91, 0x20, 0xe6, 0xd4, 0x27, 0x7a, 0xb5, 0x77, 0x8f,
+ 0x28, 0xf8, 0x31, 0xaf, 0x6f, 0x8c, 0x02, 0xd3, 0x11, 0xae, 0x71, 0xfc, 0x9c, 0x0c, 0x16, 0x28,
+ 0x17, 0x83, 0xa7, 0xcc, 0x09, 0x18, 0xa5, 0x9e, 0x32, 0xa7, 0x3e, 0x03, 0xc4, 0x73, 0x36, 0xf9,
+ 0x33, 0x40, 0x89, 0xe5, 0x67, 0x0f, 0xce, 0x5f, 0xe5, 0xc1, 0x29, 0xc4, 0xc2, 0x9a, 0xd3, 0xb1,
+ 0xb6, 0xf6, 0x09, 0x17, 0xe7, 0xcc, 0xee, 0x1e, 0xf4, 0xb4, 0x0f, 0x48, 0xa2, 0x28, 0xfd, 0x17,
+ 0x00, 0x9c, 0x1e, 0x74, 0x49, 0x1c, 0x37, 0x0a, 0xd4, 0xdd, 0x71, 0x95, 0x3d, 0x58, 0x52, 0x78,
+ 0xfd, 0x4d, 0x23, 0x20, 0x62, 0x30, 0xf4, 0x90, 0x55, 0x38, 0x13, 0xbe, 0xe9, 0x77, 0xf0, 0xc8,
+ 0x1d, 0x74, 0xf0, 0xb8, 0x19, 0xc8, 0x66, 0xa7, 0x13, 0x42, 0xd5, 0xbf, 0x99, 0x8d, 0xcb, 0x34,
+ 0x50, 0x16, 0x94, 0xd3, 0x83, 0xd1, 0xd1, 0xbc, 0x98, 0x9c, 0x1e, 0xf4, 0xd5, 0x45, 0x50, 0x24,
+ 0xd7, 0x81, 0x87, 0x2b, 0xfa, 0x83, 0x33, 0xd3, 0x5c, 0xbc, 0x69, 0xd7, 0xe0, 0xd5, 0xf0, 0xce,
+ 0x54, 0x92, 0x19, 0xd4, 0x4f, 0x47, 0x76, 0xb2, 0xc1, 0x29, 0xd8, 0xd3, 0x47, 0xa6, 0x3c, 0x99,
+ 0xdd, 0xb0, 0x52, 0xaf, 0xd7, 0xdd, 0x6f, 0xd1, 0xc0, 0x03, 0xa9, 0x76, 0xc3, 0x98, 0xf8, 0x05,
+ 0xd2, 0x81, 0xf8, 0x05, 0xa9, 0x77, 0xc3, 0x38, 0x3e, 0xc6, 0xb1, 0x1b, 0x96, 0x44, 0x70, 0x22,
+ 0xf7, 0xf0, 0x60, 0xab, 0x99, 0xde, 0x46, 0xf0, 0x8f, 0x83, 0x3d, 0xab, 0x01, 0xef, 0xec, 0x32,
+ 0xe8, 0xa2, 0x82, 0xc4, 0x5b, 0x58, 0xd4, 0x27, 0x83, 0xe2, 0x96, 0xe3, 0xee, 0x9a, 0xc1, 0xc6,
+ 0x7d, 0xff, 0x49, 0x11, 0x7a, 0x03, 0xc0, 0x32, 0xce, 0x63, 0xd0, 0xbc, 0x68, 0x3e, 0xf2, 0x1c,
+ 0xab, 0x47, 0x83, 0x3e, 0xa2, 0xbf, 0xea, 0x8d, 0x60, 0x9e, 0xc6, 0x7e, 0xac, 0x43, 0xcf, 0x87,
+ 0x1d, 0x1a, 0xd1, 0x82, 0x4f, 0x54, 0xcf, 0x82, 0x39, 0x9a, 0xb0, 0x6c, 0x75, 0xa1, 0x47, 0x83,
+ 0x5a, 0x70, 0x69, 0xea, 0x29, 0x50, 0xb4, 0xbc, 0xfb, 0x3c, 0xc7, 0xa6, 0x01, 0xf9, 0xe8, 0x93,
+ 0x7a, 0x33, 0x38, 0x4e, 0xf3, 0x85, 0xc6, 0x2a, 0x39, 0xb0, 0xd3, 0x9f, 0x8c, 0x54, 0xcb, 0x76,
+ 0xd6, 0x5d, 0x67, 0xdb, 0x85, 0x9e, 0x87, 0x4f, 0x4d, 0x4d, 0x1b, 0x4c, 0x8a, 0x7a, 0x01, 0x9c,
+ 0xe8, 0x5a, 0xf6, 0x25, 0x0f, 0xc7, 0x08, 0x5e, 0xa6, 0x6e, 0x63, 0x73, 0x03, 0x62, 0x77, 0x33,
+ 0x8d, 0x8d, 0xca, 0x81, 0xfd, 0xc4, 0x38, 0x48, 0x45, 0xbd, 0x05, 0x28, 0x94, 0x9b, 0x25, 0xb3,
+ 0x7d, 0x09, 0xbf, 0xa7, 0xee, 0xa8, 0x07, 0xd2, 0x19, 0x61, 0x90, 0x30, 0xfa, 0x0b, 0x9c, 0x30,
+ 0x48, 0x24, 0xfd, 0x97, 0xe5, 0xc0, 0x1c, 0x57, 0x80, 0x09, 0xd4, 0xa0, 0x5b, 0xf4, 0xce, 0xef,
+ 0x58, 0x3e, 0x44, 0xcc, 0xd1, 0xb3, 0x2e, 0x4f, 0x1c, 0xc2, 0xbc, 0x71, 0xe0, 0x43, 0x63, 0x00,
+ 0x31, 0xc4, 0x17, 0xe9, 0xf0, 0xb0, 0x67, 0x99, 0x47, 0x6d, 0x55, 0x2e, 0x4d, 0x7b, 0x0e, 0x50,
+ 0x0f, 0x52, 0x63, 0xbc, 0x40, 0x72, 0xe9, 0xbc, 0x40, 0x90, 0xdc, 0xcc, 0x6e, 0xd7, 0xb9, 0x02,
+ 0x3b, 0x21, 0x59, 0xaa, 0xab, 0x07, 0xd2, 0xb5, 0xcf, 0x8f, 0x32, 0x2f, 0x4c, 0x7d, 0xb1, 0x06,
+ 0x6a, 0x64, 0x7b, 0xed, 0x36, 0x84, 0x1d, 0x7a, 0x70, 0x2d, 0x78, 0x4c, 0x79, 0xe5, 0x46, 0xea,
+ 0x59, 0xe4, 0x11, 0xdd, 0xb9, 0xf1, 0xb1, 0xab, 0x41, 0x91, 0xdc, 0x5f, 0xa7, 0xbd, 0x6c, 0x61,
+ 0x60, 0x5f, 0xb3, 0xc0, 0xf7, 0x35, 0x1b, 0x60, 0xce, 0x76, 0x50, 0x71, 0xeb, 0xa6, 0x6b, 0xee,
+ 0x7a, 0x49, 0x8b, 0xc4, 0x84, 0x6e, 0x68, 0x11, 0xd4, 0x99, 0xcf, 0x56, 0x8f, 0x19, 0x1c, 0x19,
+ 0xf5, 0xff, 0x00, 0xc7, 0x2f, 0xd2, 0x00, 0x0f, 0x1e, 0xa5, 0x2c, 0xc5, 0xbb, 0x50, 0xf6, 0x51,
+ 0x5e, 0xe2, 0xbf, 0x5c, 0x3d, 0x66, 0xf4, 0x13, 0x53, 0xbf, 0x17, 0x2c, 0xa0, 0xc7, 0x8e, 0x73,
+ 0x25, 0x60, 0x5c, 0x8e, 0xb7, 0x23, 0xfb, 0xc8, 0xaf, 0x71, 0x1f, 0xae, 0x1e, 0x33, 0xfa, 0x48,
+ 0xa9, 0x0d, 0x00, 0x76, 0xfc, 0xdd, 0x2e, 0x25, 0x9c, 0x8f, 0x57, 0xc9, 0x3e, 0xc2, 0xab, 0xe1,
+ 0x47, 0xab, 0xc7, 0x0c, 0x86, 0x84, 0x5a, 0x03, 0x33, 0xfe, 0x83, 0x3e, 0xa5, 0x57, 0x88, 0xf7,
+ 0x5d, 0xe8, 0xa3, 0xd7, 0x0a, 0xbe, 0x59, 0x3d, 0x66, 0x44, 0x04, 0xd4, 0x2a, 0x98, 0xee, 0x5d,
+ 0xa4, 0xc4, 0x8a, 0xf1, 0xfd, 0x5d, 0x1f, 0xb1, 0xf5, 0x8b, 0x21, 0xad, 0xf0, 0x73, 0xc4, 0x58,
+ 0xdb, 0xbb, 0x4c, 0x69, 0x4d, 0x09, 0x33, 0x56, 0x0e, 0xbe, 0x41, 0x8c, 0x85, 0x04, 0xd4, 0x2a,
+ 0x98, 0xf1, 0x6c, 0xb3, 0xe7, 0xed, 0x38, 0xbe, 0x77, 0x7a, 0xba, 0xcf, 0xcd, 0x35, 0x9e, 0x5a,
+ 0x93, 0x7e, 0x63, 0x44, 0x5f, 0xab, 0x4f, 0x06, 0x57, 0xef, 0xf5, 0x3a, 0xa6, 0x0f, 0xf5, 0x07,
+ 0x2d, 0xcf, 0xb7, 0xec, 0xed, 0x20, 0x42, 0x31, 0x19, 0x2c, 0x06, 0xbf, 0x54, 0x17, 0xe9, 0x81,
+ 0x37, 0x80, 0xdb, 0xa6, 0xd6, 0xbf, 0xd7, 0x4a, 0x8a, 0x65, 0xce, 0xb9, 0x3d, 0x0d, 0xe4, 0xd1,
+ 0x2b, 0x3c, 0xb8, 0x2c, 0x0c, 0x5e, 0xc7, 0xed, 0xd7, 0x1d, 0xdc, 0x80, 0xd1, 0x47, 0x7d, 0xe3,
+ 0xd3, 0xdc, 0x81, 0xf1, 0xe9, 0x7a, 0x30, 0x6b, 0x79, 0x6b, 0xd6, 0x36, 0x31, 0x8e, 0xe9, 0xf8,
+ 0xc1, 0x26, 0x91, 0xc5, 0x84, 0x3a, 0xbc, 0x42, 0x06, 0x8e, 0xe3, 0xc1, 0x62, 0x42, 0x90, 0xa2,
+ 0xdd, 0x04, 0xe6, 0xd8, 0x46, 0x46, 0x2e, 0xc1, 0xb5, 0x22, 0xd3, 0x9a, 0x3e, 0x69, 0x37, 0x82,
+ 0x05, 0x5e, 0xa7, 0x19, 0x0b, 0x42, 0x0e, 0xba, 0x42, 0xed, 0x06, 0x70, 0xbc, 0xaf, 0x61, 0x05,
+ 0x21, 0x63, 0x72, 0x51, 0xc8, 0x98, 0xeb, 0x01, 0x88, 0xb4, 0x78, 0x20, 0x99, 0xeb, 0xc0, 0x4c,
+ 0xa8, 0x97, 0x03, 0x33, 0xfc, 0x69, 0x0e, 0x4c, 0x07, 0xca, 0x36, 0x28, 0x03, 0x1a, 0x99, 0x6c,
+ 0x66, 0x7f, 0x28, 0x18, 0x99, 0xd8, 0x34, 0x64, 0x26, 0x44, 0x5e, 0xd9, 0x2d, 0xcb, 0xef, 0x06,
+ 0x27, 0x1b, 0xfb, 0x93, 0xd5, 0x75, 0x00, 0x2c, 0x8c, 0x51, 0x2b, 0x3a, 0xea, 0x78, 0x7b, 0x8a,
+ 0xf6, 0x40, 0xf4, 0x81, 0xa1, 0x71, 0xf6, 0x3b, 0xe8, 0x39, 0xc4, 0x19, 0x50, 0x20, 0x61, 0xfa,
+ 0x8f, 0xa9, 0x0b, 0x00, 0xe8, 0xcf, 0x5a, 0xd7, 0x8d, 0xaa, 0x5e, 0x2f, 0xeb, 0x4a, 0x4e, 0x7b,
+ 0x85, 0x04, 0x66, 0xc2, 0x46, 0x30, 0xb0, 0x92, 0x3a, 0x55, 0xad, 0xa1, 0xf7, 0x8c, 0x1e, 0x6c,
+ 0x54, 0xac, 0x92, 0x3d, 0x15, 0x3c, 0x6a, 0xcf, 0x83, 0xcb, 0x96, 0xeb, 0xf9, 0x86, 0x73, 0x65,
+ 0xd9, 0x71, 0xa3, 0x81, 0x95, 0x04, 0xb8, 0x8d, 0x7b, 0x8d, 0x0c, 0xc6, 0x0e, 0xc4, 0x67, 0xde,
+ 0xa0, 0x4b, 0x17, 0xfe, 0xa3, 0x04, 0x44, 0xd7, 0x77, 0x4d, 0xdb, 0xeb, 0x39, 0x1e, 0x34, 0x9c,
+ 0x2b, 0x5e, 0xc9, 0xee, 0x94, 0x9d, 0xee, 0xde, 0xae, 0xed, 0x51, 0x93, 0x2f, 0xee, 0x35, 0x92,
+ 0x0e, 0xbe, 0x45, 0x78, 0x01, 0x80, 0x72, 0xa3, 0x56, 0xd3, 0xcb, 0xad, 0x6a, 0xa3, 0xae, 0x1c,
+ 0x43, 0xd2, 0x6a, 0x95, 0x96, 0x6a, 0x48, 0x3a, 0xdf, 0x07, 0xa6, 0x83, 0x36, 0x4d, 0xa3, 0xdc,
+ 0xe4, 0x82, 0x28, 0x37, 0x6a, 0x09, 0x4c, 0x07, 0xad, 0x9c, 0x8e, 0x08, 0x8f, 0xed, 0x3f, 0xd5,
+ 0xbc, 0x6b, 0xba, 0x3e, 0x36, 0x50, 0x02, 0x22, 0x4b, 0xa6, 0x07, 0x8d, 0xf0, 0xb3, 0xb3, 0x4f,
+ 0xa0, 0x1c, 0xa8, 0x60, 0xa1, 0x54, 0xab, 0x6d, 0x36, 0x8c, 0xcd, 0x7a, 0xa3, 0xb5, 0x5a, 0xad,
+ 0xaf, 0x90, 0x11, 0xb2, 0xba, 0x52, 0x6f, 0x18, 0x3a, 0x19, 0x20, 0x9b, 0x4a, 0x8e, 0xdc, 0x62,
+ 0xbd, 0x34, 0x0d, 0x8a, 0x3d, 0x2c, 0x5d, 0xed, 0x4b, 0x72, 0xca, 0x70, 0x06, 0x21, 0x4e, 0x31,
+ 0xf7, 0xec, 0x72, 0x47, 0x0a, 0xa4, 0x01, 0x47, 0x7e, 0xcf, 0x82, 0x39, 0x62, 0xaa, 0x7b, 0x78,
+ 0x77, 0x06, 0x23, 0x27, 0x1b, 0x5c, 0x9a, 0xf6, 0x09, 0x29, 0x45, 0x8c, 0x83, 0x81, 0x1c, 0xa5,
+ 0x33, 0x2e, 0x7e, 0x2f, 0x37, 0xda, 0xa5, 0x16, 0xd5, 0x7a, 0x4b, 0x37, 0xea, 0xa5, 0x1a, 0xcd,
+ 0x22, 0xab, 0xa7, 0xc1, 0xc9, 0x7a, 0x83, 0x86, 0x74, 0x6c, 0x6e, 0xb6, 0x1a, 0x9b, 0xd5, 0xb5,
+ 0xf5, 0x86, 0xd1, 0x52, 0x0a, 0xea, 0x29, 0xa0, 0x92, 0xff, 0x9b, 0xd5, 0xe6, 0x66, 0xb9, 0x54,
+ 0x2f, 0xeb, 0x35, 0xbd, 0xa2, 0x14, 0xd5, 0xc7, 0x81, 0x1b, 0xc8, 0x25, 0x49, 0x8d, 0xe5, 0x4d,
+ 0xa3, 0x71, 0xbe, 0x89, 0x10, 0x34, 0xf4, 0x5a, 0x09, 0x29, 0x12, 0x73, 0x9b, 0xf5, 0x94, 0x7a,
+ 0x15, 0x38, 0x8e, 0xaf, 0xba, 0xaf, 0x35, 0x4a, 0x15, 0x5a, 0xde, 0xb4, 0x7a, 0x2d, 0x38, 0x5d,
+ 0xad, 0x37, 0x37, 0x96, 0x97, 0xab, 0xe5, 0xaa, 0x5e, 0x6f, 0x6d, 0xae, 0xeb, 0xc6, 0x5a, 0xb5,
+ 0xd9, 0x44, 0xdf, 0x2a, 0x33, 0xf8, 0xae, 0x60, 0xd2, 0x67, 0x6a, 0xef, 0x97, 0xc1, 0xfc, 0x39,
+ 0xb3, 0x6b, 0xa1, 0x81, 0x02, 0x5f, 0x22, 0xde, 0x77, 0x1a, 0xc8, 0xc7, 0x97, 0x8d, 0xd3, 0xf3,
+ 0x04, 0xf8, 0x41, 0xfb, 0x21, 0x39, 0xe5, 0x69, 0x20, 0x0a, 0x04, 0x29, 0x71, 0x91, 0x2b, 0x2d,
+ 0x66, 0xee, 0xfa, 0x5a, 0x29, 0xc5, 0x69, 0x20, 0x71, 0xf2, 0xe9, 0xc0, 0xff, 0xf9, 0x71, 0x81,
+ 0xaf, 0x80, 0xb9, 0x8d, 0x7a, 0x69, 0xa3, 0xb5, 0xda, 0x30, 0xaa, 0xdf, 0x83, 0x63, 0xd9, 0xcf,
+ 0x83, 0x99, 0xe5, 0x86, 0xb1, 0x54, 0xad, 0x54, 0xf4, 0xba, 0x52, 0x50, 0x1f, 0x05, 0xae, 0x6a,
+ 0xea, 0xc6, 0xb9, 0x6a, 0x59, 0xdf, 0xdc, 0xa8, 0x97, 0xce, 0x95, 0xaa, 0x35, 0xdc, 0x47, 0x14,
+ 0x13, 0x2e, 0x40, 0x9f, 0xd2, 0x7e, 0x20, 0x0f, 0x00, 0xa9, 0x3a, 0xbe, 0xca, 0x89, 0xb9, 0x26,
+ 0xfb, 0x0f, 0xd2, 0x4e, 0x1a, 0x22, 0x32, 0x31, 0xed, 0xb7, 0x0a, 0xa6, 0x5d, 0xfa, 0x82, 0xae,
+ 0x8e, 0x0d, 0xa3, 0x43, 0xfe, 0x06, 0xd4, 0x8c, 0xf0, 0x73, 0xed, 0x03, 0x69, 0xe6, 0x08, 0xb1,
+ 0x8c, 0xa5, 0x43, 0x72, 0x79, 0x3c, 0x40, 0x6a, 0x2f, 0xce, 0x81, 0x05, 0xbe, 0x62, 0xa8, 0x12,
+ 0xd8, 0x98, 0x12, 0xab, 0x04, 0xff, 0x31, 0x63, 0x64, 0x9d, 0x7d, 0x12, 0x1d, 0x4e, 0x41, 0xd0,
+ 0x32, 0xc9, 0xc1, 0xfe, 0xc0, 0x62, 0x51, 0x72, 0x88, 0x79, 0x64, 0x74, 0x28, 0x92, 0x3a, 0x05,
+ 0xe4, 0xd6, 0x83, 0xbe, 0x22, 0x6b, 0x5f, 0x93, 0xc1, 0x3c, 0x77, 0x0f, 0xb7, 0xf6, 0xce, 0x9c,
+ 0xc8, 0x1d, 0xb9, 0xcc, 0x0d, 0xdf, 0xb9, 0xc3, 0xde, 0xf0, 0x7d, 0xf6, 0x5e, 0x30, 0x45, 0xd3,
+ 0xb0, 0x7c, 0x1b, 0x75, 0x64, 0x0a, 0x1c, 0x07, 0xb3, 0x2b, 0x7a, 0x6b, 0xb3, 0xd9, 0x2a, 0x19,
+ 0x2d, 0xbd, 0xa2, 0xe4, 0xd0, 0xc0, 0xa7, 0xaf, 0xad, 0xb7, 0x2e, 0x28, 0x12, 0x1a, 0x13, 0x57,
+ 0x36, 0xaa, 0x15, 0x7d, 0xb3, 0x51, 0xaf, 0x5d, 0x50, 0xe4, 0xf4, 0x0e, 0x97, 0xfd, 0x8c, 0x4d,
+ 0xd8, 0xe1, 0x32, 0xa9, 0xf8, 0xec, 0xe7, 0xae, 0x9f, 0x93, 0x81, 0x42, 0x38, 0xd0, 0x1f, 0xec,
+ 0x41, 0xd7, 0x82, 0x76, 0x1b, 0x6a, 0x97, 0x44, 0x02, 0xc0, 0x1e, 0x08, 0x7d, 0x88, 0xfb, 0x77,
+ 0xc6, 0x6a, 0x24, 0x0f, 0x7d, 0x06, 0x77, 0xfe, 0x80, 0xc1, 0xfd, 0x5b, 0x69, 0x3d, 0x2e, 0xfb,
+ 0xd9, 0x1d, 0x0b, 0x64, 0x9f, 0x4e, 0xe3, 0x71, 0x39, 0x84, 0x83, 0x89, 0xc4, 0x75, 0x8e, 0x19,
+ 0x8f, 0x15, 0x59, 0x7b, 0x91, 0x0c, 0x8e, 0x57, 0x4c, 0x1f, 0x2e, 0xed, 0xb7, 0x82, 0x7b, 0x33,
+ 0x63, 0xee, 0xba, 0xce, 0x1d, 0xb8, 0xeb, 0x3a, 0xba, 0x7a, 0x53, 0xea, 0xbb, 0x7a, 0x53, 0x7b,
+ 0x4f, 0xda, 0x33, 0x9a, 0x7d, 0x3c, 0x8c, 0x2d, 0xf8, 0x72, 0xba, 0xb3, 0x97, 0xc9, 0x5c, 0x64,
+ 0xdf, 0xc0, 0xde, 0x3e, 0x03, 0x14, 0xc2, 0x0a, 0xe3, 0x54, 0xf8, 0x53, 0xf4, 0x7a, 0xf8, 0xcd,
+ 0x14, 0x31, 0x1c, 0x83, 0xa8, 0x18, 0x12, 0x1f, 0x15, 0x83, 0x5b, 0xa3, 0x96, 0xfb, 0x1d, 0x41,
+ 0xd2, 0x76, 0x86, 0x8c, 0x07, 0x61, 0x7c, 0xd8, 0xdc, 0xec, 0x3a, 0xc3, 0xc4, 0xe2, 0x27, 0x73,
+ 0x85, 0x31, 0xbd, 0x35, 0x54, 0x17, 0x45, 0x26, 0xf9, 0xa6, 0xf6, 0xb4, 0xee, 0xe4, 0x9c, 0x07,
+ 0x67, 0xc2, 0xf5, 0xe5, 0xd9, 0xb9, 0x93, 0x0f, 0xe3, 0x20, 0x7b, 0x14, 0xbe, 0x25, 0x81, 0x7c,
+ 0xd3, 0x71, 0xfd, 0x71, 0x61, 0x90, 0x76, 0x0b, 0x9c, 0x91, 0x40, 0x33, 0x7e, 0x0e, 0x9a, 0xdd,
+ 0x16, 0x78, 0x72, 0xf9, 0x13, 0x08, 0x83, 0x79, 0x1c, 0x2c, 0x10, 0x4e, 0xc2, 0x3b, 0x64, 0xfe,
+ 0x55, 0x22, 0xfd, 0xd5, 0xfd, 0xa2, 0x88, 0xe0, 0x8d, 0x90, 0x70, 0x0b, 0x3a, 0x00, 0x85, 0x4b,
+ 0xd3, 0xde, 0xc8, 0xe2, 0x52, 0xe1, 0x71, 0x19, 0x34, 0x03, 0x0f, 0xaf, 0x61, 0x19, 0x57, 0xcf,
+ 0x94, 0x26, 0xa2, 0x66, 0x42, 0xe1, 0xd9, 0x23, 0xf2, 0x90, 0x0c, 0x8a, 0xd4, 0x05, 0x70, 0xac,
+ 0x08, 0xa4, 0x6d, 0x19, 0xa1, 0x10, 0xc4, 0x5c, 0x05, 0xe5, 0x71, 0xb7, 0x8c, 0xe4, 0xf2, 0xb3,
+ 0xc7, 0xe1, 0xdf, 0xa9, 0x6f, 0x6b, 0xe9, 0xb2, 0x69, 0x75, 0xcd, 0x8b, 0xdd, 0x14, 0x91, 0xac,
+ 0x3f, 0x91, 0xf2, 0x34, 0x5f, 0x58, 0x55, 0xae, 0xbc, 0x18, 0x89, 0x7f, 0x17, 0x98, 0x71, 0xb9,
+ 0xbd, 0x3f, 0x64, 0x45, 0xf5, 0xf9, 0x15, 0xd3, 0xf7, 0x46, 0x94, 0x33, 0xd5, 0xd1, 0x3d, 0x21,
+ 0x7e, 0x26, 0x72, 0xd4, 0x68, 0xb6, 0xd4, 0xe9, 0x2c, 0x43, 0xd3, 0xdf, 0x73, 0x61, 0x27, 0xd5,
+ 0x10, 0xe1, 0xf6, 0x6d, 0x8f, 0x32, 0x92, 0xe0, 0x62, 0x49, 0xd6, 0x78, 0x74, 0x9e, 0x32, 0xa4,
+ 0x37, 0x08, 0x78, 0x19, 0x4b, 0x97, 0xf4, 0xb6, 0x10, 0x92, 0x06, 0x07, 0xc9, 0xd3, 0x46, 0x63,
+ 0x22, 0x7b, 0x40, 0x7e, 0x46, 0x06, 0x0b, 0xc4, 0x4e, 0x18, 0x37, 0x26, 0x1f, 0x4a, 0xe9, 0x32,
+ 0xc4, 0xdc, 0xd2, 0xc5, 0xb2, 0x33, 0x16, 0x58, 0xd2, 0x38, 0x18, 0x89, 0xf1, 0x91, 0x3d, 0x32,
+ 0xcf, 0x3f, 0x01, 0x00, 0xe3, 0x06, 0xfa, 0x89, 0x62, 0x14, 0xd7, 0x51, 0x7b, 0x27, 0x9d, 0x7f,
+ 0x34, 0xb9, 0x20, 0xe3, 0x8c, 0x8b, 0x67, 0xb8, 0x41, 0xc5, 0x27, 0x0a, 0x8d, 0x2a, 0xbf, 0x97,
+ 0xd2, 0xe6, 0xa5, 0x4e, 0x98, 0x43, 0x07, 0xf7, 0x11, 0x7b, 0xb9, 0x4f, 0xa6, 0x30, 0x7e, 0x87,
+ 0xb1, 0x92, 0x0e, 0xb5, 0xda, 0x08, 0x33, 0xfb, 0xd3, 0xe0, 0xa4, 0xa1, 0x97, 0x2a, 0x8d, 0x7a,
+ 0xed, 0x02, 0x7b, 0x65, 0x93, 0x22, 0xb3, 0x93, 0x93, 0x4c, 0x60, 0x7b, 0x5d, 0xca, 0x3e, 0x90,
+ 0x97, 0x55, 0xd2, 0x6c, 0x85, 0x59, 0x5c, 0x19, 0xde, 0xab, 0x09, 0x90, 0x3d, 0x4a, 0x14, 0xbe,
+ 0x56, 0x04, 0xb3, 0x06, 0x6c, 0x3b, 0xbb, 0xbb, 0xd0, 0xee, 0xc0, 0x8e, 0xf6, 0x3a, 0x19, 0xcc,
+ 0x85, 0xfb, 0x7f, 0x4d, 0xe8, 0x6b, 0xdf, 0x1b, 0x61, 0x73, 0x16, 0xcc, 0xa1, 0xca, 0x35, 0xf8,
+ 0xc0, 0xf1, 0x5c, 0x9a, 0x7a, 0x2b, 0x38, 0x11, 0xa0, 0xd0, 0xe8, 0x9b, 0xc2, 0x1c, 0x7c, 0xa1,
+ 0xbd, 0x97, 0xc5, 0x68, 0x83, 0xc7, 0xe8, 0xde, 0x78, 0x61, 0x86, 0xec, 0x2e, 0xb2, 0xac, 0xc6,
+ 0x80, 0xf5, 0x3b, 0x21, 0x58, 0xcf, 0xe2, 0xc0, 0xaa, 0x1c, 0x92, 0xfe, 0x51, 0xa2, 0xf6, 0xcb,
+ 0x32, 0x38, 0x19, 0x74, 0xc4, 0x93, 0x43, 0xeb, 0x93, 0x2c, 0x5a, 0xdf, 0xc7, 0xa3, 0xb5, 0x22,
+ 0x22, 0xcd, 0x41, 0x2c, 0xc7, 0xa0, 0xf6, 0xc5, 0x10, 0xb5, 0xef, 0xe7, 0x50, 0xab, 0x8d, 0xa9,
+ 0x9c, 0xa3, 0x44, 0xef, 0x43, 0x32, 0x38, 0x8d, 0xcc, 0xce, 0xb2, 0x63, 0x6f, 0x75, 0xad, 0xb6,
+ 0x6f, 0xd9, 0xdb, 0x91, 0x4b, 0xdb, 0x8a, 0xc8, 0xca, 0x66, 0x3f, 0xb6, 0xd2, 0x41, 0x6c, 0xf9,
+ 0x78, 0x1b, 0xa2, 0x6d, 0x2b, 0x8e, 0xad, 0x98, 0x21, 0x8c, 0x71, 0xd6, 0x8e, 0x34, 0x87, 0x4d,
+ 0x4a, 0xdf, 0xfa, 0x04, 0x39, 0x38, 0x4a, 0xfc, 0x1e, 0x02, 0x8c, 0xe9, 0xf1, 0x42, 0x19, 0x28,
+ 0xd8, 0x7f, 0x12, 0xf7, 0xec, 0xf4, 0x3e, 0xd3, 0x06, 0xef, 0x59, 0xdf, 0x0b, 0x04, 0x14, 0x78,
+ 0xd6, 0x07, 0x09, 0xea, 0x4d, 0x60, 0xa1, 0xbd, 0x03, 0xdb, 0x97, 0xaa, 0x76, 0xe0, 0x9b, 0x44,
+ 0x1c, 0x59, 0xfa, 0x52, 0xf9, 0xc1, 0xec, 0x7e, 0x1e, 0x4c, 0x7e, 0xe1, 0x91, 0x9b, 0xd8, 0xb0,
+ 0x4c, 0xc5, 0x34, 0xb4, 0x5f, 0x0f, 0x01, 0xaa, 0x73, 0x00, 0xdd, 0x35, 0x12, 0xd5, 0x74, 0xb0,
+ 0xd4, 0x47, 0x80, 0x45, 0x03, 0xa7, 0x1a, 0xeb, 0xad, 0x6a, 0xa3, 0xbe, 0xb9, 0xd1, 0xd4, 0x2b,
+ 0x9b, 0x4b, 0x01, 0x38, 0x4d, 0x45, 0xd6, 0xbe, 0x2a, 0x81, 0x29, 0xc2, 0x96, 0xa7, 0x3d, 0x3e,
+ 0x82, 0x60, 0xe8, 0x91, 0x02, 0xed, 0xed, 0xc2, 0x01, 0x82, 0x42, 0x41, 0xd0, 0x72, 0x62, 0x1a,
+ 0xc6, 0x53, 0xc1, 0x14, 0x01, 0x39, 0xd8, 0x05, 0x38, 0x13, 0x63, 0xd9, 0x51, 0x32, 0x46, 0x90,
+ 0x5d, 0x30, 0x58, 0xd0, 0x10, 0x36, 0xb2, 0xb7, 0xc6, 0x9f, 0x9b, 0x27, 0x4b, 0x07, 0xe7, 0x2d,
+ 0x7f, 0x07, 0x9f, 0x38, 0xd0, 0x9e, 0x29, 0xd2, 0x71, 0xdd, 0x0a, 0x0a, 0x97, 0x51, 0xee, 0x21,
+ 0xa7, 0x37, 0x48, 0x26, 0xed, 0xe7, 0x85, 0x63, 0x53, 0x73, 0xfa, 0x19, 0xf2, 0x14, 0x03, 0xce,
+ 0x1a, 0xc8, 0x77, 0x2d, 0xcf, 0xa7, 0x36, 0xf7, 0x9d, 0xa9, 0x08, 0x05, 0x7f, 0xaa, 0x3e, 0xdc,
+ 0x35, 0x30, 0x19, 0xed, 0x3e, 0x64, 0x31, 0x45, 0xa9, 0x02, 0x27, 0x58, 0x4e, 0x83, 0x29, 0x7a,
+ 0xb2, 0x9a, 0x6e, 0x4b, 0x05, 0x8f, 0x82, 0x5b, 0x41, 0x42, 0xb5, 0xcd, 0x5e, 0x07, 0xfe, 0xbf,
+ 0xe3, 0x60, 0x6a, 0xd5, 0xf2, 0x7c, 0xc7, 0xdd, 0xd7, 0x5e, 0x9f, 0x03, 0x53, 0xe7, 0xa0, 0xeb,
+ 0x59, 0x8e, 0x7d, 0xc0, 0x5d, 0xeb, 0x7a, 0x30, 0xdb, 0x73, 0xe1, 0x65, 0xcb, 0xd9, 0xf3, 0x98,
+ 0x51, 0x82, 0x49, 0x52, 0x35, 0x30, 0x6d, 0xee, 0xf9, 0x3b, 0x8e, 0x1b, 0x05, 0x64, 0x0a, 0x9e,
+ 0xd5, 0x33, 0x00, 0x90, 0xff, 0x75, 0x73, 0x17, 0x06, 0x77, 0xae, 0x47, 0x29, 0xaa, 0x0a, 0xf2,
+ 0xbe, 0xb5, 0x0b, 0x69, 0x84, 0x76, 0xfc, 0x1f, 0x09, 0x18, 0x47, 0x3b, 0xa5, 0x51, 0x65, 0x65,
+ 0x23, 0x78, 0xd4, 0xfe, 0x50, 0x06, 0xb3, 0x2b, 0xd0, 0xa7, 0xac, 0x7a, 0xda, 0x4b, 0x72, 0x42,
+ 0x97, 0x22, 0xa1, 0x79, 0x49, 0xd7, 0xf4, 0x82, 0xef, 0xc2, 0x21, 0x97, 0x4f, 0x8c, 0xc2, 0xc5,
+ 0xcb, 0xec, 0x5d, 0x11, 0x38, 0x76, 0xa8, 0x5f, 0x25, 0xce, 0xfc, 0x34, 0x33, 0xdd, 0x38, 0x3e,
+ 0xf8, 0x82, 0xb7, 0x89, 0x13, 0xe3, 0x6e, 0x50, 0xd9, 0x2f, 0x32, 0xf5, 0x89, 0xed, 0x8e, 0xa6,
+ 0x2f, 0xd3, 0x1c, 0x07, 0xae, 0x01, 0x61, 0x29, 0x51, 0x32, 0x46, 0x98, 0x5b, 0x30, 0x62, 0xc7,
+ 0x70, 0x4e, 0x26, 0x70, 0xf1, 0xab, 0x0c, 0x66, 0x9b, 0x3b, 0xce, 0x95, 0x40, 0x8e, 0xdf, 0x27,
+ 0x06, 0xec, 0xb5, 0x60, 0xe6, 0x72, 0x1f, 0xa8, 0x51, 0x02, 0x7b, 0xd7, 0x9c, 0xcc, 0xdf, 0x35,
+ 0xf7, 0x02, 0x39, 0x2d, 0x4c, 0x0c, 0x73, 0x31, 0x30, 0xf1, 0xd7, 0xc3, 0x49, 0x29, 0xae, 0x87,
+ 0x53, 0x9f, 0x02, 0xa6, 0x28, 0xd7, 0x74, 0x99, 0x3a, 0x19, 0xe0, 0x20, 0x33, 0x5b, 0xc1, 0x3c,
+ 0x5f, 0xc1, 0x74, 0xc8, 0xc7, 0x57, 0x2e, 0x7b, 0xe4, 0x7f, 0x53, 0xc2, 0xf1, 0x9a, 0x02, 0xe0,
+ 0xcb, 0x63, 0x00, 0x5e, 0xfb, 0x66, 0x4e, 0x74, 0x33, 0x27, 0x94, 0x40, 0xc8, 0xc1, 0xa1, 0x2e,
+ 0x3c, 0x1b, 0x4a, 0x2e, 0x7b, 0x79, 0xbe, 0x22, 0x0f, 0xe6, 0x2a, 0xd6, 0xd6, 0x56, 0xd8, 0x49,
+ 0xbe, 0x54, 0xb0, 0x93, 0x8c, 0x77, 0xa9, 0x42, 0x76, 0xee, 0x9e, 0xeb, 0x42, 0x3b, 0xa8, 0x14,
+ 0x6d, 0x4e, 0x7d, 0xa9, 0xea, 0xcd, 0xe0, 0x78, 0x30, 0x2e, 0xb0, 0x1d, 0xe5, 0x8c, 0xd1, 0x9f,
+ 0xac, 0x7d, 0x5d, 0xd8, 0x13, 0x20, 0x90, 0x28, 0x5b, 0xa5, 0x98, 0x06, 0x78, 0x37, 0x98, 0xdf,
+ 0x21, 0xb9, 0xf1, 0x72, 0x69, 0xd0, 0x59, 0x9e, 0xea, 0x8b, 0x87, 0xbf, 0x06, 0x3d, 0xcf, 0xdc,
+ 0x86, 0x06, 0x9f, 0xb9, 0xaf, 0xf9, 0xca, 0x69, 0x6e, 0x77, 0x14, 0x73, 0x2a, 0x10, 0xa8, 0x49,
+ 0xf6, 0xda, 0xf1, 0xc5, 0xb3, 0x20, 0xbf, 0x6c, 0x75, 0xa1, 0xf6, 0x23, 0x12, 0x98, 0x41, 0xb3,
+ 0x6e, 0xbb, 0x8d, 0x9e, 0x18, 0x07, 0xcb, 0xaf, 0xe5, 0x44, 0x6f, 0x35, 0x46, 0x74, 0x16, 0x43,
+ 0x1a, 0x31, 0xed, 0x46, 0xec, 0xf6, 0xe2, 0x44, 0x52, 0x13, 0xb8, 0x83, 0x0a, 0x4d, 0x3d, 0xb6,
+ 0xb6, 0xba, 0x8e, 0xc9, 0x6d, 0x18, 0xf4, 0x9b, 0x42, 0xd1, 0xa1, 0xc0, 0xba, 0xe3, 0xaf, 0x5b,
+ 0xb6, 0x1d, 0xc6, 0xd9, 0x38, 0x90, 0xce, 0xfb, 0xba, 0x24, 0x86, 0x2a, 0xc3, 0x75, 0xa7, 0xa5,
+ 0xc7, 0x68, 0xf6, 0x4d, 0x60, 0xe1, 0xe2, 0xbe, 0x0f, 0x3d, 0x9a, 0x8b, 0x16, 0x9b, 0x37, 0xfa,
+ 0x52, 0x99, 0x8b, 0x06, 0x92, 0x42, 0x9a, 0x25, 0x14, 0x98, 0x4e, 0xd4, 0xab, 0x23, 0xcc, 0x00,
+ 0x4f, 0x02, 0xa5, 0xde, 0xa8, 0xe8, 0xd8, 0xdf, 0x37, 0xf0, 0xa0, 0xdc, 0xd6, 0x7e, 0x52, 0x06,
+ 0x73, 0xd8, 0x01, 0x2f, 0x40, 0xe1, 0x06, 0x81, 0xf9, 0x88, 0xf6, 0x65, 0x61, 0x5f, 0x60, 0x5c,
+ 0x65, 0xb6, 0x80, 0x78, 0x41, 0x6f, 0x59, 0xdd, 0x7e, 0x41, 0x17, 0x8c, 0xbe, 0xd4, 0x01, 0x80,
+ 0xc8, 0x03, 0x01, 0xf9, 0x65, 0x21, 0x87, 0xe0, 0x61, 0xdc, 0x1d, 0x15, 0x2a, 0xbf, 0x22, 0x83,
+ 0x59, 0x34, 0x49, 0x09, 0x40, 0x69, 0x70, 0xa0, 0x38, 0x76, 0x77, 0x3f, 0x5a, 0x16, 0x09, 0x1e,
+ 0x53, 0x35, 0x92, 0x3f, 0x12, 0x9e, 0xb9, 0x63, 0x11, 0x31, 0xbc, 0x4c, 0x08, 0xbf, 0x0f, 0x0a,
+ 0xcd, 0xe7, 0x87, 0x30, 0x77, 0x54, 0xf0, 0x3d, 0x5c, 0x04, 0xc5, 0x8d, 0x1e, 0x46, 0xee, 0x4b,
+ 0xb2, 0xc8, 0xa5, 0x1d, 0x07, 0x0e, 0x83, 0x21, 0x33, 0xab, 0xeb, 0xb4, 0xcd, 0xee, 0x7a, 0x74,
+ 0xaa, 0x36, 0x4a, 0x50, 0xef, 0xa2, 0xfe, 0xe1, 0xe4, 0xc4, 0xf9, 0x4d, 0x89, 0xf7, 0x59, 0x60,
+ 0x19, 0x31, 0x07, 0xef, 0x6e, 0x05, 0x27, 0x3a, 0x96, 0x67, 0x5e, 0xec, 0x42, 0xdd, 0x6e, 0xbb,
+ 0xfb, 0x44, 0x1c, 0x74, 0x5a, 0x75, 0xe0, 0x85, 0x7a, 0x0f, 0x28, 0x78, 0xfe, 0x7e, 0x97, 0xcc,
+ 0x13, 0xd9, 0x73, 0x7a, 0xb1, 0x45, 0x35, 0x51, 0x76, 0x83, 0x7c, 0xc5, 0xba, 0x75, 0x4e, 0x89,
+ 0xb9, 0x75, 0xaa, 0x4f, 0x02, 0x45, 0xc7, 0xb5, 0xb6, 0x2d, 0x72, 0x45, 0xdd, 0xc2, 0x81, 0xb0,
+ 0xad, 0xc4, 0x14, 0x68, 0xe0, 0x2c, 0x06, 0xcd, 0xaa, 0x3e, 0x05, 0xcc, 0x58, 0xbb, 0xe6, 0x36,
+ 0xbc, 0xdf, 0xb2, 0xc9, 0xa1, 0xf6, 0x85, 0x3b, 0x4e, 0x1f, 0x38, 0x82, 0x48, 0xdf, 0x1b, 0x51,
+ 0x56, 0xf5, 0x6e, 0x70, 0x4d, 0xdb, 0x85, 0xa6, 0x0f, 0x91, 0x80, 0xce, 0x5b, 0x9d, 0x6d, 0xe8,
+ 0x57, 0xb7, 0xd6, 0x2c, 0xcf, 0xb3, 0xec, 0x6d, 0x7a, 0x0b, 0x65, 0x7c, 0x06, 0xed, 0x83, 0x92,
+ 0x68, 0x64, 0x3a, 0x2c, 0x19, 0xa2, 0x12, 0x23, 0xdc, 0x96, 0xcd, 0x48, 0x51, 0x16, 0x74, 0x8e,
+ 0x7d, 0xb5, 0x50, 0xcc, 0xb8, 0x78, 0xb6, 0xb2, 0x1f, 0xfa, 0x7f, 0x5f, 0x02, 0xd3, 0x15, 0xe7,
+ 0x8a, 0x8d, 0x9b, 0xc9, 0x9d, 0x62, 0x96, 0xf2, 0x80, 0x63, 0xe6, 0xfc, 0xbd, 0xcb, 0x89, 0x67,
+ 0xca, 0x70, 0x6d, 0x83, 0x22, 0x63, 0x60, 0x48, 0x6c, 0x77, 0x82, 0xb7, 0xe1, 0x26, 0x95, 0x93,
+ 0xbd, 0x5c, 0x7f, 0x5b, 0x06, 0xf9, 0x8a, 0xeb, 0xf4, 0xb4, 0xb7, 0xe5, 0x52, 0x38, 0x89, 0x75,
+ 0x5c, 0xa7, 0xd7, 0xc2, 0xd7, 0x59, 0x46, 0xfb, 0x22, 0x6c, 0x9a, 0x7a, 0x27, 0x98, 0xee, 0x39,
+ 0x9e, 0xe5, 0x07, 0x93, 0x90, 0x85, 0x3b, 0x1e, 0x33, 0xb0, 0x2f, 0x58, 0xa7, 0x99, 0x8c, 0x30,
+ 0x3b, 0xea, 0xf3, 0xb1, 0x08, 0x91, 0x5c, 0x90, 0x18, 0x83, 0x2b, 0x3d, 0xfb, 0x52, 0xb5, 0x97,
+ 0xb1, 0x48, 0x3e, 0x8d, 0x47, 0xf2, 0xb1, 0x03, 0x24, 0xec, 0x3a, 0xbd, 0xb1, 0xb8, 0x75, 0xbc,
+ 0x32, 0x44, 0xf5, 0xe9, 0x1c, 0xaa, 0xb7, 0x08, 0x95, 0x99, 0x3d, 0xa2, 0x1f, 0xcc, 0x03, 0x80,
+ 0x8d, 0x94, 0x0d, 0x34, 0x7d, 0x12, 0xb3, 0xd0, 0x7e, 0x38, 0xcf, 0xc8, 0xb2, 0xc4, 0xcb, 0xf2,
+ 0xf1, 0x31, 0x36, 0x10, 0x26, 0x1f, 0x23, 0xd1, 0x12, 0x28, 0xec, 0xa1, 0xd7, 0x54, 0xa2, 0x82,
+ 0x24, 0xf0, 0xa3, 0x41, 0xbe, 0xd4, 0x7e, 0x33, 0x07, 0x0a, 0x38, 0x41, 0x3d, 0x03, 0x00, 0x36,
+ 0x0b, 0xc8, 0x91, 0xcc, 0x1c, 0x36, 0x00, 0x98, 0x14, 0xac, 0xad, 0x56, 0x87, 0xbe, 0x26, 0x06,
+ 0x77, 0x94, 0x80, 0xbe, 0xc6, 0xc6, 0x02, 0xa6, 0x45, 0xcd, 0x07, 0x26, 0x05, 0x7d, 0x8d, 0x9f,
+ 0x6a, 0x70, 0x8b, 0xdc, 0x34, 0x90, 0x37, 0xa2, 0x84, 0xf0, 0xeb, 0x5a, 0x78, 0x3f, 0x65, 0xf0,
+ 0x35, 0x4e, 0x41, 0x53, 0x69, 0xac, 0x96, 0x4b, 0x51, 0x11, 0x45, 0x9c, 0xa9, 0x3f, 0x59, 0x7b,
+ 0x5d, 0xa8, 0x36, 0x15, 0x4e, 0x6d, 0x6e, 0x4f, 0x21, 0xde, 0xec, 0x95, 0xe7, 0x4f, 0x0b, 0x60,
+ 0xa6, 0xee, 0x74, 0xa8, 0xee, 0x30, 0xd3, 0xcd, 0x4f, 0x17, 0x52, 0x4d, 0x37, 0x43, 0x1a, 0x31,
+ 0x0a, 0xf2, 0x0c, 0x5e, 0x41, 0xc4, 0x28, 0xb0, 0xfa, 0xa1, 0x2e, 0x81, 0x22, 0xd6, 0xde, 0x83,
+ 0x17, 0x1f, 0x26, 0x91, 0xc0, 0xa2, 0x35, 0xe8, 0x97, 0xff, 0xe1, 0x74, 0xec, 0xbf, 0x81, 0x02,
+ 0xae, 0x60, 0xc2, 0xde, 0x10, 0x5f, 0x51, 0x29, 0xb9, 0xa2, 0x72, 0x72, 0x45, 0xf3, 0xfd, 0x15,
+ 0x4d, 0xb3, 0x8a, 0x10, 0xa7, 0x21, 0xd9, 0xeb, 0xf8, 0xdf, 0x4e, 0x01, 0x50, 0x37, 0x2f, 0x5b,
+ 0xdb, 0x64, 0x6f, 0xf9, 0x0f, 0x83, 0xd9, 0x13, 0xdd, 0x05, 0xfe, 0x31, 0x66, 0x20, 0xbc, 0x13,
+ 0x4c, 0xd1, 0x71, 0x8f, 0x56, 0xe4, 0x3a, 0xae, 0x22, 0x11, 0x15, 0x62, 0xd4, 0x3e, 0xe8, 0x1b,
+ 0x41, 0x7e, 0xee, 0x8e, 0x76, 0xa9, 0xef, 0x8e, 0xf6, 0xc1, 0x3b, 0x18, 0x31, 0x37, 0xb7, 0x6b,
+ 0xef, 0x13, 0x3e, 0x43, 0xc5, 0xf0, 0xc3, 0xd4, 0x28, 0xa6, 0x09, 0x3e, 0x09, 0x4c, 0x39, 0xe1,
+ 0x76, 0xb8, 0x1c, 0xbb, 0x8a, 0x56, 0xb5, 0xb7, 0x1c, 0x23, 0xc8, 0x29, 0xb8, 0x75, 0x26, 0xc4,
+ 0xc7, 0x44, 0x8e, 0x29, 0x9e, 0x5a, 0x09, 0xa2, 0x36, 0xa2, 0x7a, 0x9c, 0xb7, 0xfc, 0x9d, 0x9a,
+ 0x65, 0x5f, 0xf2, 0xb4, 0xef, 0x17, 0xb3, 0x20, 0x19, 0xfc, 0xa5, 0x74, 0xf8, 0xf3, 0x51, 0x93,
+ 0x9a, 0x3c, 0x6a, 0xf7, 0xc4, 0x51, 0x19, 0xcc, 0x6d, 0x0c, 0x80, 0x77, 0x81, 0x22, 0x61, 0x94,
+ 0x76, 0xa2, 0x67, 0x63, 0xf1, 0x0b, 0x29, 0x19, 0xf4, 0x0b, 0xed, 0xbd, 0x21, 0x8e, 0xe7, 0x38,
+ 0x1c, 0x97, 0x0e, 0xc5, 0x59, 0xe6, 0x90, 0x9e, 0x7d, 0x22, 0x98, 0xa2, 0x92, 0x56, 0x17, 0xd8,
+ 0x56, 0xac, 0x1c, 0x53, 0x01, 0x28, 0xae, 0x39, 0x97, 0x61, 0xcb, 0x51, 0x72, 0xe8, 0x3f, 0xe2,
+ 0xaf, 0xe5, 0x28, 0x92, 0xf6, 0xaa, 0x69, 0x30, 0x1d, 0x86, 0xcb, 0xfb, 0x7d, 0x09, 0x28, 0x65,
+ 0x3c, 0x43, 0x5b, 0x76, 0x9d, 0x5d, 0x52, 0x23, 0x71, 0x7f, 0xfc, 0x9f, 0x11, 0x76, 0x10, 0x09,
+ 0xc3, 0xd8, 0xf5, 0x17, 0x16, 0x83, 0x25, 0x59, 0xc2, 0x94, 0x82, 0x25, 0x4c, 0xed, 0xad, 0x42,
+ 0x0e, 0x23, 0xa2, 0xa5, 0x64, 0xdf, 0xd4, 0x7e, 0x4b, 0x02, 0x85, 0x72, 0xd7, 0xb1, 0x21, 0x7b,
+ 0x68, 0x74, 0xe8, 0xe9, 0xc4, 0xc1, 0xfb, 0x18, 0xda, 0x73, 0x25, 0x51, 0x5b, 0x23, 0x12, 0x00,
+ 0x2a, 0x5b, 0x50, 0xb6, 0x62, 0x83, 0x54, 0x22, 0xe9, 0xec, 0x05, 0xfa, 0x55, 0x09, 0xcc, 0x90,
+ 0xc8, 0x64, 0xa5, 0x6e, 0x57, 0x7b, 0x4c, 0x24, 0xd4, 0x01, 0x21, 0x07, 0xb5, 0x5f, 0x16, 0x3e,
+ 0x14, 0x15, 0xd6, 0x2a, 0xa4, 0x9d, 0x22, 0x44, 0x5b, 0xba, 0x33, 0x3a, 0x62, 0x3b, 0x71, 0x43,
+ 0x19, 0xca, 0x5e, 0xd4, 0x7f, 0x20, 0x21, 0x03, 0xc0, 0xbe, 0xb4, 0xee, 0xc2, 0xcb, 0x16, 0xbc,
+ 0xa2, 0x3d, 0x3a, 0x12, 0xf6, 0xc1, 0xb0, 0x4b, 0x6f, 0x12, 0x5e, 0xc4, 0x61, 0x48, 0xc6, 0x6e,
+ 0x84, 0xcd, 0x76, 0xa3, 0x4c, 0xb4, 0x17, 0xef, 0x8f, 0x85, 0xc5, 0x90, 0x31, 0xd8, 0xec, 0x82,
+ 0x6b, 0x36, 0xf1, 0x5c, 0x64, 0x2f, 0xd8, 0x8f, 0x4e, 0x81, 0xe9, 0x0d, 0xdb, 0xeb, 0x75, 0x4d,
+ 0x6f, 0x47, 0xfb, 0x57, 0x19, 0x14, 0xc9, 0x75, 0x9b, 0xda, 0x77, 0x71, 0xd1, 0x5d, 0x9e, 0xbd,
+ 0x07, 0xdd, 0xc0, 0x81, 0x87, 0x3c, 0x44, 0xf6, 0x91, 0xc4, 0xd8, 0x47, 0xda, 0x07, 0x65, 0xd1,
+ 0x49, 0x6a, 0x50, 0x28, 0xbd, 0xdf, 0x33, 0x3e, 0xa0, 0x48, 0xcf, 0x6a, 0xfb, 0x7b, 0x2e, 0xf4,
+ 0x06, 0x06, 0x14, 0x89, 0xa5, 0xb2, 0x4e, 0xbe, 0x32, 0xc2, 0xcf, 0x35, 0x13, 0x4c, 0xd1, 0xc4,
+ 0x03, 0x9b, 0x51, 0x07, 0x23, 0x1e, 0x9c, 0x02, 0x45, 0xd3, 0xf5, 0x2d, 0xcf, 0xa7, 0xdb, 0xb3,
+ 0xf4, 0x09, 0x75, 0x97, 0xe4, 0xdf, 0x86, 0xdb, 0x0d, 0xe2, 0x40, 0x85, 0x09, 0xda, 0xaf, 0x08,
+ 0xcd, 0x1f, 0x93, 0x6b, 0x9e, 0x0e, 0xf2, 0xfb, 0x47, 0x58, 0xe1, 0x7e, 0x14, 0xb8, 0xca, 0x28,
+ 0xb5, 0xf4, 0x4d, 0x12, 0x36, 0x28, 0x8c, 0x10, 0xd4, 0xd1, 0xde, 0x23, 0x33, 0xeb, 0x77, 0xfb,
+ 0xdc, 0x18, 0x41, 0xa5, 0x18, 0x8d, 0x11, 0x61, 0x42, 0xc2, 0x5e, 0x37, 0xb7, 0x84, 0x2b, 0x0b,
+ 0x2f, 0xe1, 0x6a, 0xbf, 0x24, 0xbc, 0x17, 0x15, 0x8a, 0x72, 0xc8, 0x1a, 0x60, 0xd2, 0x75, 0x7c,
+ 0x1f, 0x16, 0xda, 0x57, 0x1a, 0x56, 0xd2, 0x11, 0xc2, 0xf6, 0xcd, 0x53, 0x40, 0x2a, 0x55, 0xb5,
+ 0x1f, 0x9d, 0x02, 0x73, 0xe7, 0x5d, 0xcb, 0xb7, 0xec, 0xed, 0x96, 0xe3, 0x74, 0x3d, 0xed, 0x1b,
+ 0xcc, 0x46, 0xc5, 0x53, 0x40, 0xb1, 0xed, 0xd8, 0x5b, 0xd6, 0x36, 0x15, 0xe3, 0x19, 0xae, 0x72,
+ 0xa5, 0xea, 0xe2, 0xba, 0xeb, 0x5c, 0xb6, 0x3a, 0xd0, 0x2d, 0xe3, 0x5c, 0x06, 0xcd, 0x8d, 0xf4,
+ 0x98, 0x09, 0xbc, 0x76, 0x7b, 0xff, 0x57, 0x6c, 0x79, 0x61, 0xe4, 0x17, 0x9a, 0xc8, 0xc4, 0x5d,
+ 0xab, 0x82, 0xe9, 0xae, 0x69, 0x6f, 0xef, 0x05, 0x33, 0xef, 0xfe, 0x5d, 0xd4, 0x38, 0x4a, 0x35,
+ 0xfa, 0x91, 0x11, 0x7e, 0x8e, 0x9d, 0xdc, 0x90, 0xa9, 0x4f, 0xda, 0x1e, 0xfe, 0x7f, 0xf6, 0x63,
+ 0x39, 0x30, 0xcb, 0x14, 0xaa, 0xce, 0x82, 0xa9, 0x8a, 0xbe, 0x5c, 0xda, 0xa8, 0xb5, 0x94, 0x63,
+ 0x48, 0x8a, 0xcd, 0x8d, 0xb5, 0xb5, 0x92, 0x51, 0xfd, 0x1e, 0x5d, 0xc9, 0xa1, 0x77, 0x2b, 0x46,
+ 0x09, 0x3d, 0x2b, 0x12, 0x7a, 0x68, 0xae, 0x36, 0x8c, 0x96, 0x5e, 0x57, 0x64, 0x64, 0x8f, 0xea,
+ 0xcf, 0x5a, 0x2f, 0xd5, 0x2b, 0x4a, 0x1e, 0xfd, 0x5f, 0xda, 0xa8, 0xd5, 0xf4, 0x96, 0x52, 0x88,
+ 0x42, 0xb1, 0x15, 0x51, 0x72, 0xb9, 0xd4, 0xdc, 0x28, 0xd5, 0x94, 0x29, 0x94, 0xbc, 0xbc, 0x51,
+ 0xaf, 0x5f, 0x50, 0xa6, 0x51, 0x11, 0xe5, 0x46, 0x7d, 0xb9, 0x5a, 0xd1, 0xeb, 0x2d, 0x65, 0x46,
+ 0xbd, 0x0a, 0x1c, 0x6f, 0xb6, 0x8c, 0x52, 0x75, 0x65, 0xb5, 0xb5, 0xdc, 0x30, 0xce, 0x97, 0x8c,
+ 0x8a, 0x02, 0x54, 0x05, 0xcc, 0xad, 0x1b, 0x8d, 0x65, 0x1d, 0xc7, 0xf2, 0x28, 0xd5, 0x94, 0x59,
+ 0xf4, 0x55, 0xcb, 0x28, 0xd5, 0x9b, 0xb5, 0x52, 0x4b, 0x57, 0xe6, 0xce, 0xde, 0x07, 0xa6, 0x83,
+ 0xea, 0xaa, 0x45, 0x20, 0xe9, 0x75, 0xe5, 0x18, 0xfe, 0x6d, 0x2a, 0x39, 0xf4, 0xbb, 0x8c, 0xf8,
+ 0x2d, 0x02, 0xa9, 0xa2, 0x2b, 0x32, 0xfa, 0xad, 0xb6, 0x94, 0x3c, 0xfa, 0x5d, 0x47, 0x2c, 0x16,
+ 0x81, 0xb4, 0x5a, 0x55, 0x8a, 0xe8, 0xb7, 0xb5, 0xaa, 0x4c, 0xf1, 0xb7, 0x6e, 0x27, 0xf6, 0xc2,
+ 0x07, 0x25, 0x1f, 0x63, 0x68, 0xf8, 0xd1, 0x1c, 0x19, 0xff, 0xd7, 0x5e, 0x29, 0x89, 0xf4, 0x75,
+ 0xc9, 0xf4, 0xd3, 0x35, 0x9a, 0xb7, 0xe4, 0xc6, 0xd8, 0x6a, 0x54, 0x0d, 0x9c, 0xd2, 0xeb, 0x95,
+ 0xf5, 0x46, 0xb5, 0xde, 0x22, 0x01, 0xb3, 0xf4, 0x52, 0x79, 0x15, 0xe3, 0x0c, 0x11, 0x82, 0x6b,
+ 0x8d, 0x8a, 0x5e, 0xc3, 0x2f, 0x96, 0x1b, 0x1b, 0xf5, 0x8a, 0xb2, 0x85, 0xca, 0x2a, 0x6d, 0xb4,
+ 0x56, 0x37, 0x0d, 0xfd, 0x99, 0x1b, 0x55, 0x43, 0xaf, 0x28, 0xdb, 0x88, 0x46, 0xad, 0x54, 0x5f,
+ 0xd9, 0x28, 0xad, 0xd0, 0xfd, 0xc2, 0x8d, 0xf5, 0xf5, 0x06, 0xde, 0x31, 0xdc, 0xd1, 0xfe, 0x21,
+ 0x0f, 0xa6, 0x4b, 0x7b, 0xbe, 0xb3, 0x65, 0x75, 0xbb, 0xda, 0x43, 0xd2, 0xe1, 0x9b, 0x62, 0x89,
+ 0x6b, 0x8a, 0x07, 0x1a, 0x50, 0x50, 0x56, 0xd8, 0x78, 0x82, 0x04, 0xa6, 0x1d, 0x9e, 0x8e, 0x9c,
+ 0xb1, 0x65, 0xba, 0xd3, 0x4c, 0x1e, 0x89, 0x23, 0xae, 0x4d, 0x5b, 0x16, 0x7e, 0x43, 0x1f, 0xcf,
+ 0xde, 0x0f, 0xe6, 0x58, 0x4a, 0x38, 0xa8, 0x54, 0x69, 0x85, 0x44, 0x9d, 0x0a, 0xe2, 0xcc, 0x91,
+ 0xa8, 0x53, 0xf8, 0x50, 0x80, 0x84, 0xdb, 0x4b, 0xb5, 0x55, 0x43, 0x7a, 0x7a, 0x1c, 0xcc, 0x56,
+ 0xf4, 0x66, 0xd9, 0xa8, 0x62, 0x3f, 0x75, 0x25, 0xcf, 0x7b, 0x19, 0x24, 0x5a, 0x66, 0x7c, 0x8d,
+ 0x44, 0x95, 0xf2, 0x5b, 0x42, 0xf6, 0x56, 0x3c, 0xed, 0x74, 0x0a, 0xf9, 0x92, 0x47, 0x9a, 0x42,
+ 0x6a, 0x2f, 0xc9, 0x93, 0x75, 0xb2, 0xe6, 0xde, 0xee, 0xae, 0xe9, 0xee, 0x73, 0xfe, 0x6a, 0xa3,
+ 0xea, 0x5d, 0xfc, 0xf8, 0x9e, 0x18, 0xa1, 0x06, 0x99, 0x50, 0x3d, 0xd7, 0xd9, 0xed, 0x05, 0x7d,
+ 0x35, 0x7d, 0xd2, 0xfe, 0x1f, 0xe1, 0x99, 0x63, 0xa9, 0xba, 0xc8, 0x54, 0x66, 0x84, 0xa1, 0xfd,
+ 0x07, 0x24, 0x91, 0x59, 0x64, 0x62, 0x31, 0xdf, 0xee, 0x1a, 0xf1, 0x37, 0x79, 0x70, 0x15, 0x8d,
+ 0x3e, 0x12, 0xae, 0x3f, 0x20, 0x53, 0xf5, 0x35, 0x99, 0x6a, 0x06, 0x35, 0xa8, 0xe5, 0xc8, 0xa0,
+ 0x66, 0x36, 0xbc, 0xf3, 0x82, 0x1b, 0xde, 0x6f, 0x13, 0x3e, 0xf4, 0x50, 0xaa, 0x2e, 0x0e, 0xa8,
+ 0xe3, 0x64, 0xb6, 0xe5, 0x5f, 0x20, 0x89, 0xac, 0xb6, 0x0a, 0x71, 0xf8, 0xed, 0xae, 0x6b, 0xef,
+ 0xc8, 0x81, 0x05, 0x5e, 0x55, 0xd4, 0x27, 0x83, 0xe9, 0x1e, 0x4d, 0xa1, 0x72, 0x39, 0x1d, 0xa7,
+ 0x5c, 0x46, 0x98, 0x13, 0x41, 0x04, 0xed, 0x4e, 0xcf, 0xb1, 0xec, 0x70, 0x5d, 0x3e, 0x78, 0x46,
+ 0xf3, 0x4e, 0x3c, 0x75, 0x08, 0x62, 0xd1, 0xe1, 0x87, 0x28, 0x02, 0x69, 0x9e, 0x89, 0x40, 0x8a,
+ 0x84, 0xe8, 0xc3, 0x5d, 0x7c, 0xa3, 0xca, 0x9e, 0x4b, 0x1c, 0x5e, 0x24, 0x83, 0x4d, 0x3a, 0xfb,
+ 0x74, 0x30, 0x1d, 0x94, 0x8f, 0xac, 0xbb, 0x46, 0xad, 0x56, 0x5a, 0x2b, 0x91, 0x85, 0xca, 0xc6,
+ 0xba, 0x5e, 0x2f, 0x55, 0x95, 0x1c, 0x1a, 0xe8, 0x6a, 0x6b, 0xcd, 0xd6, 0x46, 0xa5, 0xda, 0x50,
+ 0x24, 0xfc, 0x84, 0x32, 0x95, 0xd7, 0xd7, 0x15, 0x59, 0x7b, 0xe3, 0x14, 0x98, 0x5a, 0x31, 0xbb,
+ 0x5d, 0xe8, 0xee, 0x6b, 0x5f, 0x95, 0x80, 0x12, 0xcc, 0x0e, 0xd6, 0x4c, 0xdb, 0xda, 0x82, 0x9e,
+ 0x9f, 0xbc, 0x50, 0xf1, 0x3e, 0xe1, 0x6b, 0x96, 0x68, 0x19, 0x8b, 0xfd, 0xf4, 0x63, 0x74, 0xfc,
+ 0x36, 0x90, 0xb7, 0xec, 0x2d, 0x87, 0x2e, 0x57, 0xf4, 0xfb, 0xdb, 0x04, 0x1f, 0xe3, 0x6d, 0x03,
+ 0x9c, 0x51, 0xf0, 0xa6, 0x25, 0x41, 0x2e, 0xb2, 0x5f, 0xb5, 0x78, 0x47, 0x1e, 0xcc, 0x07, 0x4c,
+ 0x54, 0xed, 0x0e, 0x7c, 0x90, 0xdd, 0x06, 0xfd, 0xc9, 0xbc, 0x68, 0xf0, 0x9b, 0xfe, 0xfa, 0x60,
+ 0x52, 0x31, 0x22, 0x6d, 0x01, 0xd0, 0x36, 0x7d, 0xb8, 0xed, 0xb8, 0x56, 0xb8, 0x16, 0xf1, 0xe4,
+ 0x34, 0xd4, 0xca, 0xe4, 0xeb, 0x7d, 0x83, 0xa1, 0xa3, 0xde, 0x03, 0x66, 0x61, 0x18, 0x6d, 0x30,
+ 0xd8, 0x26, 0x4d, 0xc4, 0x8b, 0xcd, 0xaf, 0xfd, 0x81, 0x50, 0x8c, 0x1d, 0x91, 0x6a, 0xa6, 0xc3,
+ 0x6c, 0x73, 0xb4, 0xae, 0x67, 0xa3, 0xbe, 0x56, 0x32, 0x9a, 0xab, 0xa5, 0x5a, 0xad, 0x5a, 0x5f,
+ 0x09, 0xc3, 0xde, 0xaa, 0x60, 0xa1, 0xd2, 0x38, 0x5f, 0x67, 0xe2, 0x12, 0xe7, 0xb5, 0x75, 0x30,
+ 0x1d, 0xc8, 0x6b, 0xd0, 0x29, 0x2a, 0x56, 0x66, 0xf4, 0x14, 0x15, 0x93, 0x84, 0x4c, 0x43, 0xab,
+ 0x1d, 0xba, 0xd6, 0xe3, 0xff, 0xda, 0x6f, 0x98, 0xa0, 0x80, 0xfd, 0x59, 0xb4, 0x77, 0xe1, 0x79,
+ 0x71, 0xaf, 0x6b, 0xb6, 0xa1, 0xb6, 0x9b, 0x62, 0x25, 0x3c, 0xb8, 0xf7, 0x53, 0x3a, 0x70, 0xef,
+ 0x27, 0xfe, 0x4b, 0x47, 0x8c, 0x93, 0x83, 0x7c, 0x68, 0x0c, 0x92, 0x85, 0x0f, 0x47, 0x93, 0xe8,
+ 0xd9, 0x44, 0x5c, 0x6f, 0x28, 0x9b, 0x31, 0x2a, 0x19, 0xcf, 0x53, 0xba, 0x55, 0x60, 0x31, 0x1f,
+ 0xa8, 0x24, 0x8e, 0xb2, 0x6f, 0xf1, 0x5f, 0xca, 0x83, 0x42, 0xb3, 0xd7, 0xb5, 0x7c, 0xed, 0xe7,
+ 0xa4, 0xb1, 0x60, 0x46, 0xee, 0x6a, 0x95, 0x87, 0xde, 0xd5, 0x1a, 0xf9, 0x4b, 0xe6, 0x05, 0xfc,
+ 0x25, 0x5b, 0xf0, 0x41, 0x9f, 0xf7, 0x97, 0xbc, 0x93, 0x4e, 0xdb, 0x88, 0xb7, 0xe5, 0x63, 0x07,
+ 0x88, 0x14, 0x57, 0x6b, 0xc0, 0x9d, 0x08, 0x67, 0x9f, 0x48, 0x43, 0xb3, 0x03, 0x50, 0x5c, 0x6a,
+ 0xb4, 0x5a, 0x8d, 0x35, 0xe5, 0x18, 0x9e, 0x7e, 0x35, 0xd6, 0x49, 0xa0, 0xdc, 0x6a, 0xbd, 0xae,
+ 0x1b, 0xdc, 0x8c, 0x8b, 0xbf, 0xb8, 0x2f, 0x71, 0x82, 0xc5, 0x97, 0x9d, 0xa5, 0x7a, 0x89, 0x2d,
+ 0x82, 0xc7, 0xf3, 0x93, 0xbd, 0x72, 0xfd, 0xb4, 0x0c, 0x0a, 0x6b, 0xd0, 0xdd, 0x86, 0xda, 0xb3,
+ 0x53, 0x38, 0xd8, 0x6d, 0x59, 0xae, 0x47, 0x42, 0xeb, 0x47, 0x0e, 0x76, 0x6c, 0x9a, 0x7a, 0x23,
+ 0x98, 0xf7, 0x60, 0xdb, 0xb1, 0x3b, 0x41, 0x26, 0xd2, 0x1f, 0xf1, 0x89, 0xda, 0xcb, 0x53, 0x42,
+ 0x86, 0x19, 0x1d, 0x8b, 0x97, 0x5c, 0x1a, 0x60, 0x06, 0x95, 0x9a, 0x3d, 0x30, 0x5f, 0x97, 0xd1,
+ 0x47, 0xbd, 0x7d, 0xed, 0xe5, 0xc2, 0x9e, 0x8f, 0xb7, 0x82, 0xe2, 0xc5, 0xe0, 0x8e, 0x26, 0x39,
+ 0xb6, 0x3f, 0xa6, 0x79, 0xd4, 0x25, 0x70, 0xc2, 0x83, 0x5d, 0xd8, 0xf6, 0x61, 0x07, 0x35, 0x5d,
+ 0x63, 0x68, 0xa7, 0x70, 0x30, 0xbb, 0xf6, 0x3b, 0x2c, 0x80, 0x77, 0xf3, 0x00, 0xde, 0x34, 0x40,
+ 0x94, 0xa8, 0x42, 0xf1, 0x73, 0x13, 0x54, 0x8d, 0x66, 0xd7, 0x09, 0x0d, 0xdf, 0xe0, 0x19, 0xbd,
+ 0xdb, 0xf1, 0x77, 0xbb, 0xf8, 0x1d, 0x3d, 0x1a, 0x1c, 0x3c, 0xab, 0x8b, 0x60, 0xca, 0xb4, 0xf7,
+ 0xf1, 0xab, 0x7c, 0x42, 0xad, 0x83, 0x4c, 0xda, 0xab, 0x42, 0xe4, 0xef, 0xe5, 0x90, 0x7f, 0xbc,
+ 0x18, 0xbb, 0xd9, 0x03, 0xff, 0x43, 0x53, 0xa0, 0xb0, 0x6e, 0x7a, 0x3e, 0xd4, 0xfe, 0xa7, 0x2c,
+ 0x8a, 0xfc, 0x4d, 0x60, 0x61, 0xcb, 0x69, 0xef, 0x79, 0xb0, 0xc3, 0x37, 0xca, 0xbe, 0xd4, 0x71,
+ 0x60, 0xae, 0xde, 0x02, 0x94, 0x20, 0x91, 0x92, 0x0d, 0x5c, 0x60, 0x0f, 0xa4, 0xe3, 0x6b, 0xe0,
+ 0xbc, 0x75, 0xd3, 0xf5, 0x1b, 0x5b, 0x38, 0x2d, 0xbc, 0x06, 0x8e, 0x4d, 0xe4, 0xa0, 0x2f, 0x26,
+ 0x40, 0x3f, 0x15, 0x0f, 0xfd, 0xb4, 0x00, 0xf4, 0x6a, 0x09, 0x4c, 0x6f, 0x59, 0x5d, 0x88, 0x3f,
+ 0x98, 0xc1, 0x1f, 0x0c, 0x1a, 0x93, 0xb0, 0xec, 0xc3, 0x31, 0x69, 0xd9, 0xea, 0x42, 0x23, 0xfc,
+ 0x2c, 0x98, 0xc8, 0x80, 0x68, 0x22, 0x53, 0x23, 0x27, 0xe1, 0x90, 0xe1, 0x65, 0x9b, 0xbb, 0x30,
+ 0xd8, 0xf8, 0xb6, 0xe9, 0xb1, 0xf4, 0x8e, 0xe9, 0x9b, 0x18, 0x8c, 0x39, 0x03, 0xff, 0xe7, 0x7d,
+ 0xb2, 0xe5, 0x7e, 0x9f, 0xec, 0xe7, 0xcb, 0xe9, 0x7a, 0xc4, 0x80, 0xd9, 0x98, 0x16, 0x75, 0x31,
+ 0x00, 0x88, 0x58, 0x8a, 0xe1, 0x33, 0x02, 0xa6, 0x6d, 0xba, 0xd0, 0x5f, 0x67, 0xbd, 0xa0, 0x0b,
+ 0x06, 0x9f, 0x88, 0x0f, 0xe1, 0x78, 0x4d, 0x73, 0x97, 0x5c, 0xf3, 0x56, 0x46, 0xef, 0xe8, 0xe1,
+ 0x8a, 0x03, 0xe9, 0x51, 0xff, 0x5b, 0x18, 0x77, 0xff, 0x3b, 0xa8, 0x8e, 0xd9, 0x37, 0xc3, 0xd7,
+ 0xe6, 0x81, 0x5c, 0xde, 0xf3, 0x1f, 0xd1, 0xdd, 0xef, 0xb7, 0x84, 0x7d, 0xcc, 0x69, 0x7f, 0xb6,
+ 0xe7, 0x1f, 0x6d, 0xef, 0x9b, 0x52, 0x4b, 0xc4, 0x7c, 0xd9, 0xe3, 0xea, 0x96, 0xbd, 0x8e, 0xbc,
+ 0x4d, 0x0e, 0x8f, 0x46, 0x3d, 0x94, 0x3b, 0xbc, 0x69, 0xae, 0x91, 0xfe, 0x89, 0xe9, 0x19, 0xc2,
+ 0xe7, 0xa0, 0xe3, 0xc9, 0x73, 0x37, 0x13, 0x60, 0xd7, 0x56, 0x2c, 0xca, 0x39, 0x83, 0x3c, 0x68,
+ 0xaf, 0x10, 0x3e, 0x30, 0x4a, 0xc4, 0x96, 0x78, 0x8c, 0x27, 0x9d, 0x4d, 0xf5, 0x1a, 0xa1, 0x63,
+ 0xa3, 0x09, 0xc5, 0x66, 0x0f, 0xd8, 0xdf, 0xb3, 0xc7, 0x74, 0x4a, 0x87, 0x46, 0x4c, 0x7b, 0xb5,
+ 0xf0, 0x82, 0x3e, 0xa9, 0xf6, 0x90, 0xbd, 0xfa, 0x74, 0xf2, 0x16, 0x73, 0x14, 0x4b, 0x2c, 0x78,
+ 0x02, 0xf7, 0xd6, 0xca, 0xa0, 0x48, 0x16, 0x7e, 0xb5, 0x37, 0x0b, 0x37, 0x11, 0xd4, 0x1b, 0xf1,
+ 0xc7, 0x77, 0xc2, 0xe7, 0x34, 0x6b, 0x0e, 0xdc, 0x31, 0x9f, 0x7c, 0xaa, 0x63, 0x3e, 0x7c, 0x04,
+ 0x16, 0x81, 0x76, 0x44, 0xea, 0x98, 0xf1, 0x74, 0x32, 0x4d, 0x0b, 0x1b, 0xc8, 0x50, 0xf6, 0x78,
+ 0xbf, 0xb0, 0x00, 0xe6, 0x48, 0xd1, 0xe4, 0x7c, 0xa1, 0xf6, 0x1e, 0xe9, 0xdb, 0x07, 0x75, 0xb5,
+ 0x0e, 0xe6, 0xae, 0x60, 0xb6, 0xc9, 0x7d, 0xb4, 0x74, 0xe5, 0xe2, 0x96, 0xc4, 0x75, 0x0f, 0x52,
+ 0xcf, 0xe0, 0x06, 0x5b, 0xee, 0x7b, 0x24, 0x63, 0xb2, 0xc1, 0x42, 0x0e, 0x4f, 0x14, 0xb1, 0x91,
+ 0xc5, 0x26, 0xa9, 0xa7, 0x40, 0xf1, 0xb2, 0x05, 0xaf, 0x54, 0x3b, 0xd4, 0xba, 0xa5, 0x4f, 0xda,
+ 0xaf, 0x0a, 0xfb, 0x4c, 0xb2, 0x70, 0x53, 0x5e, 0xb2, 0xd5, 0x42, 0x31, 0xcf, 0xc9, 0xa1, 0x6c,
+ 0x4d, 0x20, 0x1a, 0x90, 0x44, 0xee, 0xcc, 0xa6, 0x61, 0xe6, 0xcb, 0x29, 0x14, 0x31, 0xce, 0x70,
+ 0xe6, 0x83, 0xf0, 0x25, 0x9e, 0x35, 0x27, 0x02, 0x88, 0xca, 0x1f, 0x4b, 0x9f, 0x2f, 0x16, 0x19,
+ 0x6e, 0x48, 0xd1, 0xd9, 0x4b, 0xfe, 0x75, 0x32, 0x98, 0x69, 0x42, 0x7f, 0xd9, 0x82, 0xdd, 0x8e,
+ 0xa7, 0xb9, 0x87, 0x37, 0x8d, 0x6e, 0x03, 0xc5, 0x2d, 0x4c, 0x6c, 0xd8, 0xe6, 0x24, 0xcd, 0xa6,
+ 0xbd, 0x56, 0x12, 0xf5, 0x03, 0xa2, 0xab, 0x6f, 0x01, 0xb7, 0x63, 0x81, 0x49, 0xec, 0x34, 0x5d,
+ 0x72, 0xc9, 0x13, 0xb8, 0xc6, 0x47, 0x06, 0x73, 0x78, 0xfb, 0x1f, 0xfa, 0xa5, 0xae, 0xb5, 0x6d,
+ 0x6b, 0x7b, 0x63, 0x68, 0x21, 0xea, 0xed, 0xa0, 0x60, 0x22, 0x6a, 0xd4, 0xdd, 0x4d, 0x1b, 0xd8,
+ 0x79, 0xe2, 0xf2, 0x0c, 0x92, 0x31, 0xc5, 0xa5, 0x19, 0x91, 0x62, 0x07, 0x3c, 0x4f, 0xf0, 0xd2,
+ 0x8c, 0xa1, 0x85, 0x67, 0x8f, 0xd8, 0x57, 0x64, 0x70, 0x92, 0x32, 0x70, 0x0e, 0xba, 0xbe, 0xd5,
+ 0x36, 0xbb, 0x04, 0xb9, 0x17, 0xe7, 0xc6, 0x01, 0xdd, 0x2a, 0x98, 0xbf, 0xcc, 0x92, 0xa5, 0x10,
+ 0x9e, 0x1d, 0x08, 0x21, 0xc7, 0x80, 0xc1, 0x7f, 0x98, 0xe2, 0xf2, 0x01, 0x4e, 0xaa, 0x1c, 0xcd,
+ 0x09, 0x5e, 0x3e, 0x20, 0xcc, 0x44, 0xf6, 0x10, 0xbf, 0x8c, 0x06, 0xd5, 0x8c, 0xba, 0xcf, 0x3f,
+ 0x14, 0xc6, 0x76, 0x03, 0xcc, 0x62, 0x2c, 0xc9, 0x87, 0x74, 0x19, 0x22, 0x41, 0x89, 0xc3, 0x7e,
+ 0x87, 0x5e, 0x97, 0x1e, 0x7e, 0x6b, 0xb0, 0x74, 0xb4, 0xf3, 0x00, 0x44, 0xaf, 0xd8, 0x4e, 0x3a,
+ 0x17, 0xd7, 0x49, 0x4b, 0x62, 0x9d, 0xf4, 0x9b, 0x84, 0xc3, 0x1c, 0x0e, 0x66, 0xfb, 0xf0, 0xea,
+ 0x21, 0x16, 0xe0, 0x6e, 0x78, 0xe9, 0xd9, 0xeb, 0xc5, 0xab, 0xa8, 0x5e, 0x54, 0xf6, 0x7a, 0x5d,
+ 0xab, 0x8d, 0xe6, 0x53, 0x9f, 0x18, 0xcb, 0x7c, 0x8a, 0xed, 0x0f, 0xe4, 0xbe, 0xfe, 0xe0, 0x10,
+ 0x96, 0xf4, 0xcd, 0xe0, 0x38, 0x29, 0xa2, 0x1c, 0xb2, 0x55, 0x20, 0x41, 0xdc, 0xfa, 0x92, 0xf9,
+ 0x88, 0xe2, 0x82, 0x4a, 0x10, 0x0a, 0x61, 0x84, 0xa5, 0xcf, 0x74, 0xc6, 0x6e, 0x5a, 0x05, 0x89,
+ 0xe3, 0x6c, 0x02, 0x47, 0xb2, 0xf2, 0xc4, 0xda, 0xdd, 0xc0, 0x37, 0xda, 0x6b, 0x5f, 0xcc, 0x8f,
+ 0x63, 0x44, 0x78, 0x06, 0xf5, 0x34, 0x95, 0x63, 0x97, 0x34, 0xa2, 0x22, 0xc3, 0x7e, 0xa4, 0x05,
+ 0x1f, 0xf4, 0x57, 0x8f, 0x11, 0xbf, 0x54, 0xf5, 0x16, 0x70, 0xfc, 0xa2, 0xd9, 0xbe, 0xb4, 0xed,
+ 0x3a, 0x7b, 0xf8, 0xee, 0x6f, 0x87, 0x5e, 0x22, 0xbe, 0x7a, 0xcc, 0xe8, 0x7f, 0xa1, 0xde, 0x11,
+ 0x98, 0x0e, 0x85, 0x61, 0xa6, 0xc3, 0xea, 0x31, 0x6a, 0x3c, 0xa8, 0x4f, 0x0c, 0x3b, 0x9d, 0x62,
+ 0x62, 0xa7, 0xb3, 0x7a, 0x2c, 0xe8, 0x76, 0xd4, 0x0a, 0x98, 0xee, 0x58, 0x97, 0xf1, 0x56, 0x35,
+ 0x9e, 0x75, 0x0d, 0x0b, 0x3a, 0x54, 0xb1, 0x2e, 0x93, 0x8d, 0xed, 0xd5, 0x63, 0x46, 0xf8, 0xa5,
+ 0xba, 0x02, 0x66, 0xf0, 0xb6, 0x00, 0x26, 0x33, 0x9d, 0x2a, 0xa0, 0xd0, 0xea, 0x31, 0x23, 0xfa,
+ 0x16, 0x59, 0x1f, 0x79, 0x7c, 0xee, 0xfa, 0xde, 0x60, 0xbb, 0x3d, 0x97, 0x6a, 0xbb, 0x1d, 0xc9,
+ 0x82, 0x6c, 0xb8, 0x9f, 0x02, 0x85, 0x36, 0x96, 0xb0, 0x44, 0x25, 0x4c, 0x1e, 0xd5, 0xbb, 0x41,
+ 0x7e, 0xd7, 0x74, 0x83, 0xc9, 0xf3, 0x4d, 0xc3, 0xe9, 0xae, 0x99, 0xee, 0x25, 0x84, 0x20, 0xfa,
+ 0x6a, 0x69, 0x0a, 0x14, 0xb0, 0xe0, 0xc2, 0x3f, 0xda, 0xdb, 0xf2, 0xc4, 0x0c, 0x29, 0x3b, 0x36,
+ 0x1a, 0xf6, 0x5b, 0x4e, 0x70, 0x38, 0xfd, 0x57, 0x73, 0xe3, 0xb1, 0x20, 0xaf, 0x62, 0xae, 0xfa,
+ 0xb0, 0xad, 0x67, 0xef, 0xc1, 0xfb, 0xe1, 0x3e, 0x5d, 0x12, 0x1d, 0xf4, 0x4a, 0x3d, 0x03, 0x80,
+ 0x4f, 0x4f, 0xea, 0x85, 0x41, 0x4c, 0x99, 0x94, 0x68, 0xf9, 0xa0, 0x30, 0xdc, 0x51, 0xe5, 0x77,
+ 0x46, 0x30, 0x5d, 0xfa, 0x05, 0x11, 0x3f, 0x03, 0xef, 0x5a, 0x36, 0x53, 0xe7, 0xe0, 0x31, 0x65,
+ 0xa7, 0x94, 0xd6, 0xa8, 0x19, 0xc2, 0x5e, 0xf6, 0x7d, 0xd3, 0x5b, 0xf2, 0xe4, 0xb6, 0x03, 0x72,
+ 0x02, 0x5a, 0x7f, 0xd0, 0xf2, 0x7c, 0xcb, 0xde, 0xa6, 0xe7, 0x9b, 0x3f, 0x3b, 0x16, 0xa5, 0x19,
+ 0x30, 0xe0, 0xc8, 0x03, 0x07, 0x9c, 0x03, 0x01, 0x82, 0xf2, 0x43, 0x02, 0x04, 0x15, 0xd2, 0xad,
+ 0x1c, 0x7e, 0x84, 0xd5, 0x9f, 0x75, 0x5e, 0x7f, 0xee, 0x8a, 0x01, 0x68, 0x90, 0x5c, 0xc6, 0x62,
+ 0xdf, 0xbc, 0x2b, 0xd4, 0x94, 0x26, 0xa7, 0x29, 0xf7, 0x8e, 0xce, 0x48, 0xf6, 0xda, 0xf2, 0xa1,
+ 0x3c, 0xb8, 0x2a, 0x62, 0xa6, 0x0e, 0xaf, 0x50, 0x45, 0xf9, 0xfd, 0xb1, 0x28, 0x4a, 0x7a, 0x47,
+ 0xe7, 0xac, 0x35, 0xe6, 0x37, 0x85, 0xcf, 0xed, 0xf7, 0x03, 0x15, 0xca, 0x26, 0x46, 0x59, 0x4e,
+ 0x81, 0x22, 0xe9, 0x61, 0x28, 0x34, 0xf4, 0x29, 0x65, 0x77, 0x23, 0x76, 0xda, 0x5f, 0x94, 0xb7,
+ 0x09, 0xe8, 0x0f, 0x5d, 0xd7, 0x68, 0xed, 0xb9, 0x76, 0xd5, 0xf6, 0x1d, 0xed, 0x07, 0xc7, 0xa2,
+ 0x38, 0xa1, 0x37, 0x9c, 0x3c, 0x8a, 0x37, 0xdc, 0x48, 0xab, 0x1c, 0x41, 0x0d, 0x8e, 0x64, 0x95,
+ 0x23, 0xa6, 0xf0, 0xec, 0xf1, 0x7b, 0xa7, 0x0c, 0x4e, 0xd1, 0xc9, 0xd6, 0x12, 0x6f, 0x21, 0x6a,
+ 0x17, 0xc6, 0x01, 0xe4, 0xc9, 0xc0, 0x4c, 0xa2, 0x7e, 0xf4, 0xf8, 0x81, 0x8f, 0x52, 0x90, 0x78,
+ 0x9b, 0x25, 0x37, 0x1d, 0xec, 0xe3, 0x70, 0x2c, 0x48, 0x89, 0x5d, 0x62, 0x99, 0x82, 0x8d, 0xec,
+ 0x31, 0x7b, 0xa9, 0x0c, 0x8a, 0x24, 0x46, 0x82, 0xb6, 0x91, 0x89, 0xc3, 0x04, 0x7f, 0x3f, 0x8b,
+ 0xc0, 0x8e, 0x1c, 0xe1, 0x26, 0xb3, 0xf8, 0x11, 0x69, 0xf6, 0xe2, 0x06, 0xb2, 0x32, 0x01, 0x17,
+ 0x42, 0x09, 0xcc, 0x36, 0xa1, 0x5f, 0x36, 0x5d, 0xd7, 0x32, 0xb7, 0xc7, 0xe5, 0xf1, 0x2d, 0xea,
+ 0x3d, 0xac, 0x7d, 0x23, 0x27, 0x7a, 0x96, 0x3d, 0x5c, 0x08, 0x0f, 0x58, 0x8d, 0x89, 0x02, 0xfe,
+ 0x7a, 0xa1, 0xf3, 0xea, 0xc3, 0xa8, 0x4d, 0xc0, 0x63, 0x5b, 0x02, 0x53, 0x41, 0x1c, 0x8c, 0xdb,
+ 0xb8, 0xd8, 0x28, 0x3b, 0xfe, 0x6e, 0x70, 0x0c, 0x06, 0xff, 0x3f, 0x18, 0x7f, 0x41, 0x7b, 0x65,
+ 0x4a, 0x47, 0xf9, 0xe4, 0x20, 0x1e, 0xe9, 0xda, 0x58, 0x1a, 0x77, 0xf8, 0xa3, 0x0a, 0xdb, 0xf1,
+ 0xcb, 0x53, 0x74, 0x39, 0xb2, 0x66, 0xfa, 0xf0, 0x41, 0xed, 0x0f, 0x65, 0x30, 0xd5, 0x84, 0x3e,
+ 0x1a, 0x6f, 0x11, 0xfb, 0x87, 0xd6, 0x70, 0x95, 0x59, 0xf1, 0xa0, 0x67, 0x6b, 0xd5, 0xfb, 0xc0,
+ 0x4c, 0xcf, 0x75, 0xda, 0xd0, 0xf3, 0xe8, 0xea, 0x05, 0xeb, 0xa8, 0x36, 0x68, 0xf4, 0xc7, 0xac,
+ 0x2d, 0xae, 0x07, 0xdf, 0x18, 0xd1, 0xe7, 0x69, 0xcd, 0x00, 0x42, 0x89, 0x56, 0x70, 0xd2, 0x66,
+ 0x40, 0x52, 0xe1, 0xd9, 0x03, 0xfd, 0xbb, 0x32, 0x98, 0x6b, 0x42, 0x3f, 0x94, 0x62, 0x8a, 0x4d,
+ 0x8e, 0x78, 0x78, 0x39, 0x28, 0xe5, 0xc3, 0x41, 0xf9, 0x4e, 0xe1, 0x4b, 0x61, 0x79, 0x69, 0x86,
+ 0xc4, 0xc6, 0x82, 0xe7, 0x5b, 0x84, 0xee, 0x82, 0x15, 0xe3, 0x60, 0x02, 0xc7, 0xd7, 0x1e, 0x0b,
+ 0x66, 0x30, 0x2f, 0xb8, 0xc1, 0xfe, 0x68, 0x3e, 0x6a, 0xbc, 0x5f, 0xc8, 0xa8, 0xf1, 0xde, 0x03,
+ 0x0a, 0xbb, 0xa6, 0x7b, 0x29, 0x38, 0x7c, 0xfb, 0x38, 0xb1, 0xd5, 0x2f, 0xcf, 0x20, 0x5f, 0x0d,
+ 0xf6, 0xd3, 0x2c, 0xa4, 0xf3, 0xd3, 0x7c, 0xbd, 0x94, 0x6a, 0x24, 0x24, 0x73, 0x87, 0x31, 0x36,
+ 0xf9, 0x14, 0xe3, 0x66, 0x42, 0xd9, 0xd9, 0x2b, 0xc7, 0x8b, 0x65, 0x30, 0x8d, 0xc6, 0x6d, 0x6c,
+ 0x8f, 0x9f, 0x3f, 0xbc, 0x3a, 0x0c, 0x36, 0xf4, 0x53, 0xf6, 0xc0, 0x81, 0x44, 0xc6, 0x67, 0xde,
+ 0xa7, 0xe8, 0x81, 0x93, 0x0a, 0xcf, 0x1e, 0x8f, 0x77, 0x13, 0x3c, 0x70, 0x7b, 0xd0, 0xde, 0x20,
+ 0x03, 0x79, 0x05, 0xfa, 0x93, 0xb6, 0x22, 0xdf, 0x2e, 0x1c, 0x5e, 0x94, 0x13, 0x18, 0xe6, 0x79,
+ 0x71, 0x05, 0x8e, 0xa7, 0x01, 0x89, 0xc5, 0x15, 0x15, 0x62, 0x20, 0x7b, 0xd4, 0xde, 0x4f, 0x50,
+ 0x23, 0x9b, 0x0b, 0x3f, 0x30, 0x86, 0x5e, 0x75, 0xb2, 0x0b, 0x1f, 0x81, 0x00, 0x31, 0x8d, 0xa3,
+ 0x6a, 0x6f, 0x83, 0x0a, 0xcf, 0x1e, 0xb9, 0x9f, 0x91, 0xf1, 0x25, 0x66, 0xe5, 0x1d, 0xd8, 0xbe,
+ 0x04, 0x3b, 0xec, 0x45, 0xce, 0xa3, 0x42, 0x77, 0x1a, 0x4c, 0xb5, 0x09, 0x35, 0x0c, 0xde, 0xb4,
+ 0x11, 0x3c, 0xf2, 0x37, 0x0b, 0x25, 0xde, 0x9d, 0xc5, 0x77, 0x44, 0xe4, 0xf3, 0xb1, 0xe0, 0x22,
+ 0x76, 0xe1, 0x95, 0x40, 0xf1, 0x13, 0x30, 0x5b, 0xc8, 0x2c, 0xa3, 0xda, 0x76, 0x6c, 0xed, 0xbf,
+ 0x1e, 0x1e, 0x96, 0x6b, 0xc1, 0x8c, 0xd5, 0x76, 0x6c, 0x1c, 0x02, 0x2e, 0x38, 0x04, 0x14, 0x26,
+ 0x04, 0x6f, 0xf5, 0x5d, 0xe7, 0x01, 0x8b, 0xee, 0x9a, 0x47, 0x09, 0xa3, 0x1a, 0x13, 0x88, 0xf5,
+ 0xa3, 0x32, 0x26, 0x06, 0x94, 0x9d, 0x3d, 0x64, 0x9f, 0x8c, 0xbc, 0xdb, 0x48, 0x57, 0xf8, 0x88,
+ 0x58, 0x05, 0x1e, 0x65, 0x38, 0x63, 0x6b, 0x71, 0x24, 0xc3, 0x59, 0x02, 0x03, 0x13, 0xb8, 0x89,
+ 0x30, 0xc2, 0x31, 0xf3, 0x35, 0xe0, 0x43, 0xa0, 0x33, 0x3e, 0xf3, 0x70, 0x44, 0x74, 0x8e, 0xc6,
+ 0x44, 0xfc, 0x30, 0x0d, 0x4f, 0x4f, 0x2d, 0x1e, 0xed, 0xbf, 0x8d, 0x03, 0x9c, 0xbb, 0x46, 0xf1,
+ 0x57, 0x20, 0xde, 0x0a, 0xda, 0x5b, 0x25, 0xd1, 0x10, 0x28, 0x07, 0x24, 0x88, 0xa8, 0x8c, 0x05,
+ 0xc1, 0x37, 0x09, 0xc5, 0x26, 0x11, 0x29, 0x3f, 0x7b, 0x00, 0x5f, 0x24, 0x83, 0x05, 0xec, 0x23,
+ 0xd0, 0x85, 0xa6, 0x4b, 0x3a, 0xca, 0xb1, 0x38, 0xca, 0xbf, 0x5b, 0x38, 0xc0, 0x0f, 0x2f, 0x87,
+ 0x88, 0x8f, 0xb1, 0x40, 0x21, 0x16, 0xdd, 0x47, 0x90, 0x85, 0x89, 0x6c, 0xa3, 0x28, 0x21, 0x0b,
+ 0x54, 0xc5, 0xc7, 0x83, 0x47, 0x4a, 0x8f, 0x5c, 0x5e, 0x18, 0x41, 0x63, 0x9b, 0xb0, 0x47, 0xae,
+ 0x08, 0x13, 0xd9, 0x63, 0xf2, 0x86, 0xdb, 0xe9, 0x82, 0x73, 0xcb, 0xbc, 0xd8, 0x85, 0xda, 0xab,
+ 0xf3, 0xe1, 0x89, 0xb6, 0xdf, 0x1d, 0x8b, 0x07, 0xe6, 0x21, 0x2e, 0xa3, 0x52, 0x41, 0xde, 0x75,
+ 0xae, 0x90, 0xa5, 0xad, 0x79, 0x03, 0xff, 0x27, 0xf1, 0x2c, 0xbb, 0x7b, 0xbb, 0x36, 0x39, 0x19,
+ 0x3a, 0x6f, 0x04, 0x8f, 0xea, 0x8d, 0x60, 0xfe, 0x8a, 0xe5, 0xef, 0xac, 0x42, 0xb3, 0x03, 0x5d,
+ 0xc3, 0xb9, 0x82, 0x3d, 0xe6, 0xa6, 0x0d, 0x3e, 0x91, 0xf7, 0x5f, 0x11, 0xb0, 0x2f, 0x91, 0x50,
+ 0x26, 0x73, 0xfc, 0x2d, 0x8d, 0xe5, 0x19, 0xcf, 0x55, 0xf6, 0x0a, 0xf3, 0x01, 0x19, 0xcc, 0x18,
+ 0xce, 0x15, 0xaa, 0x24, 0xff, 0xd7, 0xd1, 0xea, 0x48, 0xea, 0x89, 0x1e, 0x96, 0x5c, 0xc8, 0xfe,
+ 0xc4, 0x27, 0x7a, 0x89, 0xc5, 0x4f, 0xe4, 0xe4, 0xd2, 0x9c, 0xe1, 0x5c, 0x69, 0x42, 0x9f, 0xb4,
+ 0x08, 0x6d, 0x73, 0x4c, 0x4e, 0xd6, 0x96, 0x47, 0x08, 0xd2, 0x79, 0x78, 0xf8, 0x9c, 0x76, 0x17,
+ 0x21, 0x14, 0x50, 0xc8, 0xe2, 0xa4, 0x77, 0x11, 0x86, 0x72, 0x30, 0x81, 0x18, 0x29, 0x32, 0x98,
+ 0x35, 0x9c, 0x2b, 0x68, 0x68, 0x58, 0xb6, 0xba, 0xdd, 0xf1, 0x8c, 0x90, 0x69, 0x8d, 0xff, 0x40,
+ 0x0c, 0x01, 0x17, 0x13, 0x37, 0xfe, 0x87, 0x30, 0x90, 0x3d, 0x0c, 0xcf, 0x27, 0x8d, 0x25, 0x18,
+ 0xa1, 0xed, 0xf1, 0xe0, 0x30, 0x6a, 0x83, 0x08, 0xd9, 0x38, 0xb2, 0x06, 0x11, 0xc7, 0xc1, 0x44,
+ 0x76, 0x4e, 0x16, 0xca, 0x78, 0x98, 0x1f, 0x6f, 0x9b, 0x78, 0x6f, 0x3a, 0xd7, 0x44, 0x3a, 0xec,
+ 0x72, 0x8c, 0x8c, 0x05, 0x8d, 0x14, 0x2e, 0x88, 0x02, 0x3c, 0x64, 0x8f, 0xc7, 0xc7, 0x64, 0x30,
+ 0x47, 0x58, 0x78, 0x84, 0x58, 0x01, 0x23, 0x35, 0x2a, 0xb6, 0x06, 0x47, 0xd3, 0xa8, 0x12, 0x38,
+ 0x98, 0xc8, 0x7d, 0xfe, 0xc8, 0x8e, 0x1b, 0xe1, 0xf8, 0x78, 0x1c, 0x82, 0x23, 0x1b, 0x63, 0x63,
+ 0x3c, 0x42, 0x3e, 0x8a, 0x31, 0x76, 0x44, 0xc7, 0xc8, 0x9f, 0x1f, 0xb6, 0xa2, 0x71, 0x62, 0x70,
+ 0x88, 0xa6, 0x30, 0x46, 0x18, 0x46, 0x6c, 0x0a, 0x47, 0x84, 0xc4, 0x9f, 0xca, 0x00, 0x10, 0x06,
+ 0xd6, 0x9c, 0xcb, 0xf8, 0x22, 0xcd, 0x31, 0x74, 0x67, 0xfd, 0x6e, 0xf5, 0xf2, 0x10, 0xb7, 0xfa,
+ 0x94, 0x21, 0x5c, 0xd2, 0xae, 0x04, 0x32, 0x52, 0x46, 0x95, 0x9c, 0xf8, 0x4a, 0x60, 0x72, 0xf9,
+ 0xd9, 0x63, 0xfc, 0x65, 0x62, 0xcd, 0x45, 0x07, 0x4c, 0x7f, 0x76, 0x2c, 0x28, 0x33, 0xb3, 0x7f,
+ 0x99, 0x9f, 0xfd, 0x1f, 0x02, 0xdb, 0x51, 0x6d, 0xc4, 0x61, 0x07, 0x47, 0xb3, 0xb7, 0x11, 0x8f,
+ 0xee, 0x80, 0xe8, 0x0f, 0xe4, 0xc1, 0x71, 0xda, 0x89, 0x7c, 0x3b, 0x40, 0x9c, 0xf2, 0x1c, 0x1e,
+ 0xd7, 0x49, 0x0e, 0x41, 0x79, 0x5c, 0x0b, 0x52, 0x69, 0x96, 0x32, 0x05, 0xd8, 0x9b, 0xc8, 0xea,
+ 0x46, 0x51, 0x7f, 0xb0, 0x67, 0xda, 0x1d, 0xf1, 0x70, 0xbf, 0x43, 0x80, 0x0f, 0xd6, 0x1a, 0x65,
+ 0x7e, 0xad, 0x71, 0xc0, 0xca, 0x64, 0xea, 0x9d, 0x6b, 0x2c, 0x32, 0xc2, 0xee, 0xc4, 0x77, 0xae,
+ 0xe3, 0xcb, 0xce, 0x1e, 0xa5, 0xf7, 0xca, 0x20, 0xdf, 0x74, 0x5c, 0x5f, 0x7b, 0x41, 0x9a, 0xd6,
+ 0x49, 0x24, 0x1f, 0x81, 0x14, 0x3c, 0xab, 0x65, 0x90, 0x47, 0x95, 0xa3, 0x33, 0x86, 0xdb, 0x92,
+ 0x8f, 0x3a, 0x9b, 0xbe, 0x89, 0xbd, 0xba, 0x51, 0xf9, 0x8b, 0xad, 0xfd, 0x1e, 0x34, 0xf0, 0xc7,
+ 0x69, 0xe3, 0xe9, 0x10, 0xf9, 0x35, 0xe3, 0x0f, 0x60, 0x64, 0x16, 0x4f, 0x27, 0xb6, 0xe4, 0xec,
+ 0x71, 0x7b, 0xf8, 0x38, 0xf5, 0x6d, 0x5d, 0xb6, 0xba, 0x50, 0x7b, 0x01, 0x71, 0x19, 0xa9, 0x9b,
+ 0xbb, 0x50, 0xfc, 0x48, 0x4c, 0xa2, 0x6b, 0x2b, 0x8e, 0x2f, 0x2b, 0x47, 0xf1, 0x65, 0xd3, 0x36,
+ 0x28, 0x72, 0x00, 0x9d, 0xb0, 0x34, 0xe9, 0x06, 0x95, 0x50, 0xf6, 0x44, 0xe2, 0x74, 0x9e, 0x68,
+ 0x42, 0x9f, 0x18, 0x95, 0x8d, 0xe0, 0x8a, 0xa4, 0xef, 0x1b, 0x4b, 0xc4, 0xce, 0xf0, 0x42, 0x1d,
+ 0xb9, 0xef, 0x06, 0xa6, 0x0f, 0xb0, 0xe0, 0xac, 0xf1, 0xe0, 0x7c, 0x77, 0xbc, 0x80, 0x78, 0x26,
+ 0xc7, 0x02, 0xd3, 0xdb, 0x43, 0x98, 0xd6, 0x39, 0x98, 0xee, 0x1e, 0x91, 0x8b, 0xec, 0x01, 0xfb,
+ 0xf1, 0x02, 0x38, 0x4e, 0x26, 0xfd, 0x25, 0xbb, 0x43, 0x23, 0xac, 0xbe, 0x59, 0x3a, 0xe2, 0xcd,
+ 0xb6, 0x83, 0x21, 0x58, 0xb9, 0x58, 0xce, 0x85, 0xbe, 0x58, 0xce, 0xea, 0x12, 0x09, 0xe7, 0x8a,
+ 0x3a, 0x51, 0xbc, 0xd3, 0x36, 0x2c, 0xcc, 0x04, 0x96, 0x3d, 0xee, 0x72, 0xc3, 0xef, 0xf8, 0x7b,
+ 0x44, 0xa7, 0xc4, 0xef, 0x11, 0xfd, 0xed, 0x74, 0xeb, 0x76, 0xb8, 0xe8, 0x3e, 0x81, 0x67, 0x6c,
+ 0x3b, 0xa5, 0x58, 0xd1, 0x13, 0xe0, 0xee, 0x3f, 0x87, 0x3b, 0x59, 0x14, 0x41, 0x64, 0x44, 0x77,
+ 0x32, 0x4c, 0xe0, 0x28, 0xdd, 0xc9, 0x86, 0x31, 0x90, 0x3d, 0x8e, 0xbf, 0x5d, 0xa0, 0xbb, 0xf9,
+ 0xb8, 0xdd, 0x68, 0x7f, 0x2c, 0x65, 0x3e, 0x4a, 0x7f, 0x33, 0x97, 0xca, 0xff, 0x19, 0xf3, 0x95,
+ 0x3c, 0x4c, 0xa7, 0xf1, 0x68, 0x4e, 0x22, 0x37, 0x81, 0x75, 0x23, 0x09, 0xfb, 0xa2, 0x9f, 0xb7,
+ 0x3a, 0xfe, 0xce, 0x98, 0x4e, 0x74, 0x5c, 0x41, 0xb4, 0x68, 0xbc, 0x7a, 0xf2, 0xa0, 0xfd, 0xaf,
+ 0x5c, 0xaa, 0x10, 0x52, 0xa1, 0x48, 0x30, 0x5b, 0x31, 0x22, 0x4e, 0x11, 0xf8, 0x29, 0x91, 0xde,
+ 0x04, 0x35, 0xfa, 0x9c, 0xd5, 0x81, 0xce, 0x23, 0x50, 0xa3, 0x31, 0x5f, 0xe3, 0xd3, 0xe8, 0x24,
+ 0x72, 0xff, 0x49, 0x35, 0x3a, 0x14, 0xc9, 0x98, 0x34, 0x3a, 0x91, 0x5e, 0xf6, 0x32, 0x7e, 0xe5,
+ 0x1c, 0x9d, 0x48, 0xd5, 0x2c, 0xfb, 0x92, 0xf6, 0x4f, 0x45, 0xa0, 0x04, 0x71, 0x84, 0xfd, 0x1d,
+ 0x1a, 0x0b, 0xe6, 0x43, 0xc2, 0x77, 0xa3, 0x8c, 0x10, 0xef, 0x85, 0x0f, 0x27, 0x55, 0x38, 0x10,
+ 0x4e, 0xaa, 0x04, 0xe6, 0x2d, 0xdb, 0x87, 0xae, 0x6d, 0x76, 0x97, 0xbb, 0xe6, 0xb6, 0x77, 0x7a,
+ 0x6a, 0xe0, 0xe5, 0x75, 0x55, 0x26, 0x8f, 0xc1, 0x7f, 0xc1, 0x5e, 0x20, 0x3a, 0xcd, 0x5f, 0x20,
+ 0x1a, 0x13, 0xfd, 0x6a, 0x26, 0x3e, 0xfa, 0x55, 0x18, 0xdd, 0x0a, 0x0c, 0x0f, 0x8e, 0x2d, 0x6a,
+ 0x1b, 0xa7, 0x0c, 0xf7, 0x77, 0x9b, 0x60, 0x14, 0xb6, 0x30, 0xf4, 0xe3, 0x6b, 0xe4, 0x54, 0xab,
+ 0x7b, 0x48, 0x11, 0x16, 0xfb, 0x95, 0x20, 0xb5, 0x85, 0xca, 0x56, 0x5e, 0xee, 0xab, 0x7c, 0x68,
+ 0xf2, 0xe4, 0x05, 0x4c, 0x1e, 0x56, 0xa9, 0x0a, 0xa2, 0x77, 0xba, 0x8a, 0x2f, 0x16, 0x8a, 0xd4,
+ 0x76, 0x02, 0xa7, 0x91, 0x0a, 0xe0, 0x44, 0x10, 0xed, 0xb6, 0xd7, 0x83, 0xa6, 0x6b, 0xda, 0x6d,
+ 0xa8, 0x7d, 0x52, 0x1a, 0x87, 0xd9, 0xbb, 0x0c, 0xa6, 0xad, 0xb6, 0x63, 0x37, 0xad, 0xe7, 0x04,
+ 0x97, 0xcb, 0x25, 0x07, 0x59, 0xc7, 0x12, 0xa9, 0xd2, 0x2f, 0x8c, 0xf0, 0x5b, 0xb5, 0x0a, 0x66,
+ 0xda, 0xa6, 0xdb, 0x21, 0x41, 0xf8, 0x0a, 0x7d, 0x17, 0x39, 0xc5, 0x12, 0x2a, 0x07, 0x9f, 0x18,
+ 0xd1, 0xd7, 0x6a, 0x83, 0x17, 0x62, 0xb1, 0x2f, 0x9a, 0x47, 0x2c, 0xb1, 0x4a, 0xf4, 0x11, 0x27,
+ 0x73, 0x24, 0x1d, 0x17, 0x76, 0x4d, 0x72, 0xe9, 0xf8, 0x14, 0xb9, 0x23, 0x3a, 0x4c, 0x48, 0xbb,
+ 0x3c, 0x80, 0x8b, 0x3a, 0x80, 0xc6, 0xa4, 0x97, 0x07, 0x84, 0xb8, 0xc8, 0x5e, 0x33, 0xdf, 0x55,
+ 0x04, 0xf3, 0xa4, 0x57, 0xa3, 0xe2, 0xd4, 0x5e, 0x24, 0x83, 0x62, 0x13, 0xfa, 0xf7, 0xc3, 0x7d,
+ 0xad, 0x79, 0xf8, 0x31, 0x59, 0x01, 0xf2, 0xa5, 0x30, 0xe0, 0x20, 0xfa, 0x9b, 0x76, 0xdf, 0x3e,
+ 0xe0, 0x6b, 0x91, 0xf0, 0x34, 0xe9, 0x7d, 0xfb, 0xe4, 0xe2, 0xb3, 0xc7, 0xe7, 0x27, 0x64, 0x20,
+ 0x97, 0x3a, 0x1d, 0xad, 0x7d, 0x78, 0x28, 0xae, 0x07, 0xb3, 0x41, 0x9b, 0x89, 0x62, 0x40, 0xb2,
+ 0x49, 0x69, 0x17, 0x41, 0x43, 0xd9, 0x94, 0x3a, 0x13, 0xdf, 0x55, 0x48, 0x28, 0x3b, 0x7b, 0x50,
+ 0xbe, 0x30, 0x45, 0x1b, 0xcd, 0x92, 0xe3, 0x5c, 0xc2, 0x47, 0x65, 0x7e, 0x51, 0x06, 0x85, 0x65,
+ 0xe8, 0xb7, 0x77, 0x34, 0x6f, 0x2c, 0x6d, 0xa6, 0xef, 0xde, 0xf3, 0x21, 0x41, 0x39, 0xd3, 0x46,
+ 0x7f, 0x0e, 0xd8, 0x5e, 0xc4, 0x2c, 0x4f, 0x3a, 0xfa, 0x73, 0x62, 0xe9, 0x13, 0x38, 0x04, 0x97,
+ 0x07, 0x0b, 0xe1, 0x0a, 0x18, 0xc1, 0xec, 0x1d, 0xb9, 0x47, 0xdc, 0x7a, 0xe8, 0x10, 0xbb, 0x59,
+ 0xfb, 0xfd, 0x74, 0x21, 0xd6, 0x42, 0x99, 0xf3, 0x35, 0xcf, 0x78, 0x61, 0x32, 0x45, 0xf0, 0x35,
+ 0x31, 0x06, 0x27, 0xb0, 0x02, 0x20, 0x83, 0x69, 0xcc, 0x50, 0xc5, 0xba, 0x8c, 0x5d, 0x0f, 0xb9,
+ 0x85, 0xca, 0xe7, 0x8e, 0x65, 0xa1, 0xf2, 0x6e, 0x7e, 0xa1, 0x52, 0x30, 0x62, 0x72, 0xb0, 0x4e,
+ 0x99, 0xd2, 0x17, 0x07, 0x7d, 0x3f, 0xf6, 0x65, 0xca, 0x14, 0xbe, 0x38, 0x43, 0xca, 0xcf, 0x1e,
+ 0xd1, 0x37, 0xfe, 0x17, 0xda, 0x59, 0x07, 0x1b, 0xb2, 0xda, 0xff, 0x38, 0x01, 0xf2, 0xe7, 0xd0,
+ 0x9f, 0x7f, 0x8c, 0x6e, 0xd4, 0x7a, 0xf9, 0x18, 0x82, 0x3b, 0x3c, 0x1d, 0xe4, 0x11, 0x7d, 0x3a,
+ 0xed, 0xb9, 0x45, 0x6c, 0x77, 0x18, 0x31, 0x62, 0xe0, 0xef, 0xd4, 0x53, 0xa0, 0xe8, 0x39, 0x7b,
+ 0x6e, 0x1b, 0x99, 0xdf, 0x48, 0x63, 0xe8, 0x53, 0xda, 0xa0, 0xa6, 0x1c, 0xe9, 0xc5, 0xf1, 0xb9,
+ 0x9c, 0x32, 0x17, 0x2c, 0xc9, 0xdc, 0x05, 0x4b, 0x29, 0xf6, 0x1f, 0x04, 0x78, 0xcb, 0x5e, 0x23,
+ 0xfe, 0x18, 0xdf, 0x35, 0xd8, 0x19, 0x17, 0xec, 0x31, 0x62, 0x39, 0xac, 0x3a, 0xa4, 0x75, 0x18,
+ 0xe7, 0x45, 0x1b, 0xc6, 0x91, 0x9f, 0xa8, 0xc3, 0xb8, 0x00, 0x0f, 0x13, 0x39, 0xe5, 0x5e, 0xa4,
+ 0x4e, 0xae, 0x17, 0xc6, 0x89, 0x6e, 0x9e, 0x53, 0xfa, 0x43, 0xa1, 0x33, 0x46, 0xe7, 0xd7, 0x91,
+ 0xd1, 0x39, 0x22, 0xf7, 0xd7, 0x5f, 0x93, 0x71, 0x24, 0xcd, 0xc0, 0x08, 0x12, 0xbf, 0x28, 0x29,
+ 0x35, 0x44, 0x68, 0x0c, 0xe6, 0xe2, 0x48, 0xcf, 0x8f, 0x1e, 0x5a, 0x9c, 0x17, 0x1d, 0xc3, 0xff,
+ 0xa4, 0x43, 0x8b, 0x8b, 0x32, 0x92, 0x3d, 0x90, 0xbf, 0x40, 0x2e, 0x26, 0x2b, 0xb5, 0x7d, 0xeb,
+ 0xf2, 0x98, 0x5b, 0x1a, 0x3f, 0xbc, 0xa4, 0x8c, 0x26, 0x7c, 0x40, 0x42, 0x84, 0xc3, 0x49, 0x47,
+ 0x13, 0x16, 0x63, 0x23, 0x7b, 0x98, 0x7e, 0x0c, 0x20, 0xe9, 0xd1, 0xb5, 0x9d, 0x37, 0xc8, 0x40,
+ 0x6e, 0x42, 0x5f, 0x83, 0x87, 0x47, 0xeb, 0x2c, 0x98, 0x63, 0x96, 0x0e, 0x82, 0x0b, 0x6f, 0xb8,
+ 0xb4, 0xb4, 0x07, 0xe5, 0x43, 0x91, 0xb1, 0x8b, 0x2e, 0x93, 0x3e, 0x28, 0x2f, 0xc2, 0xc4, 0x04,
+ 0x0e, 0xca, 0xd3, 0x65, 0x9f, 0x6f, 0x17, 0xa0, 0xc6, 0xb5, 0x02, 0x74, 0x28, 0xa0, 0x8e, 0x62,
+ 0x29, 0xe8, 0xed, 0x91, 0xb1, 0x31, 0x21, 0xac, 0x3e, 0xc4, 0x62, 0xd5, 0xe0, 0xb1, 0xba, 0x53,
+ 0x44, 0x4c, 0x62, 0xc6, 0x87, 0xd0, 0x04, 0xff, 0x9d, 0x21, 0x5c, 0x06, 0x07, 0xd7, 0xd3, 0x47,
+ 0xe6, 0x23, 0x7b, 0xc4, 0x7e, 0x8e, 0x8c, 0x5b, 0x4d, 0x32, 0xb7, 0x1a, 0xcf, 0xb8, 0x45, 0xa7,
+ 0x6d, 0x32, 0x37, 0x6d, 0x4b, 0x79, 0xb0, 0x22, 0xf2, 0x17, 0x0e, 0x98, 0x1b, 0x06, 0x51, 0x7e,
+ 0xcc, 0x07, 0x2b, 0x86, 0x72, 0x90, 0x3d, 0x38, 0x5f, 0x93, 0x01, 0x58, 0x71, 0x9d, 0xbd, 0x5e,
+ 0xc3, 0xed, 0x40, 0x57, 0xfb, 0xb3, 0x68, 0xa6, 0xf6, 0x93, 0x63, 0x98, 0xa9, 0xad, 0x03, 0xb0,
+ 0x1d, 0x12, 0xa7, 0x1a, 0x7e, 0xbb, 0xd8, 0xbc, 0x2c, 0x62, 0xca, 0x60, 0x68, 0xf0, 0x77, 0x0b,
+ 0x3f, 0x93, 0xc7, 0x38, 0xa9, 0xcf, 0x8a, 0xc8, 0x8d, 0x73, 0xa6, 0xf6, 0xee, 0x10, 0xeb, 0x16,
+ 0x87, 0xf5, 0x33, 0x0e, 0xc1, 0x49, 0xf6, 0x98, 0xff, 0xc3, 0x14, 0x98, 0x25, 0xfb, 0xb2, 0x44,
+ 0xa6, 0x7f, 0x13, 0x81, 0xfe, 0xb3, 0x63, 0x00, 0x7d, 0x03, 0xcc, 0x39, 0x11, 0x75, 0xd2, 0xa7,
+ 0xb2, 0x2b, 0x65, 0x89, 0xb0, 0x33, 0x7c, 0x19, 0x1c, 0x19, 0xed, 0xe3, 0x2c, 0xf2, 0x06, 0x8f,
+ 0xfc, 0xdd, 0x09, 0xf2, 0x66, 0x28, 0x8e, 0x13, 0xfa, 0xf7, 0x84, 0xd0, 0x6f, 0x70, 0xd0, 0x97,
+ 0x0e, 0xc3, 0xca, 0x04, 0xee, 0x55, 0x90, 0x41, 0x1e, 0x1f, 0x83, 0x7c, 0x4b, 0x86, 0x0b, 0x31,
+ 0xa7, 0xc1, 0x14, 0x6e, 0xb2, 0xe1, 0x04, 0x31, 0x78, 0x44, 0x6f, 0xcc, 0x2d, 0x1f, 0xba, 0xe1,
+ 0x12, 0x7b, 0xf0, 0x88, 0x78, 0x08, 0xdc, 0xcf, 0xbd, 0xd3, 0x45, 0xb2, 0xe3, 0x1c, 0x26, 0x8c,
+ 0x3c, 0x7b, 0x64, 0x25, 0x3e, 0xb6, 0x83, 0x91, 0xa3, 0xcc, 0x1e, 0x87, 0x30, 0x92, 0x3d, 0xf0,
+ 0x5f, 0xcc, 0x83, 0xd3, 0x64, 0xf9, 0x6f, 0xd9, 0x75, 0x76, 0xfb, 0xae, 0x31, 0xb3, 0x0e, 0xaf,
+ 0x0b, 0x37, 0x81, 0x05, 0x9f, 0x73, 0xbc, 0xa7, 0x3a, 0xd1, 0x97, 0xaa, 0xfd, 0x0e, 0xeb, 0x3c,
+ 0xf3, 0x2c, 0x1e, 0xc9, 0xa5, 0x04, 0x01, 0xc6, 0xf1, 0x9e, 0x7a, 0x47, 0x45, 0x90, 0x51, 0x66,
+ 0x35, 0x51, 0x1e, 0x69, 0x71, 0x39, 0xd4, 0xa9, 0x82, 0x88, 0x4e, 0x7d, 0x30, 0xd4, 0xa9, 0xef,
+ 0xe5, 0x74, 0x6a, 0xe5, 0xf0, 0x22, 0x99, 0xc0, 0x12, 0xd3, 0x02, 0x28, 0x2e, 0x5b, 0x5d, 0x1f,
+ 0xba, 0xda, 0x97, 0xe9, 0x3c, 0xea, 0xd5, 0x19, 0x76, 0x2f, 0x15, 0x50, 0xdc, 0xc2, 0xa5, 0x51,
+ 0x83, 0xec, 0x56, 0x31, 0x6c, 0x08, 0x87, 0x06, 0xfd, 0x36, 0x6d, 0x90, 0xbf, 0x3e, 0x32, 0x63,
+ 0x9b, 0x80, 0xa5, 0x08, 0xf2, 0x37, 0x9c, 0x85, 0x89, 0xdc, 0x6f, 0x55, 0x34, 0xe0, 0x2e, 0x1a,
+ 0x41, 0x2e, 0x65, 0x87, 0xb0, 0x02, 0x64, 0xab, 0xe3, 0xe1, 0xa6, 0x37, 0x63, 0xa0, 0xbf, 0x69,
+ 0x5d, 0x8e, 0xfa, 0x45, 0x45, 0x58, 0x9e, 0xb4, 0xcb, 0x91, 0x10, 0x17, 0xd9, 0x63, 0xf6, 0x4d,
+ 0xec, 0x6f, 0xda, 0xeb, 0x9a, 0x6d, 0x88, 0xb8, 0xcf, 0x0c, 0xb5, 0x05, 0x20, 0x59, 0xc1, 0x88,
+ 0x2f, 0x59, 0x6c, 0x3b, 0x2d, 0x1c, 0xa2, 0x9d, 0x8e, 0xba, 0x1a, 0x19, 0xca, 0x1c, 0x57, 0xfc,
+ 0xc8, 0x56, 0x23, 0x13, 0xd9, 0x98, 0xc0, 0xed, 0xa5, 0xc1, 0x79, 0xdc, 0x89, 0xb6, 0xd6, 0x51,
+ 0xf7, 0x6a, 0xa8, 0xb0, 0xc6, 0x76, 0xf6, 0x76, 0x94, 0xbd, 0x9a, 0x78, 0x1e, 0x26, 0x80, 0xd6,
+ 0x02, 0x45, 0xeb, 0xf3, 0x74, 0x18, 0xcd, 0x78, 0xbb, 0xd4, 0x73, 0x5c, 0x3f, 0xdd, 0x76, 0x29,
+ 0xe2, 0xce, 0xc0, 0xdf, 0xa5, 0x3d, 0xbf, 0xc5, 0x1f, 0xcf, 0x1e, 0xd7, 0xf0, 0x99, 0xe2, 0xfc,
+ 0xd6, 0x30, 0x06, 0xb2, 0x87, 0xf7, 0xad, 0x47, 0x34, 0x78, 0x8e, 0xda, 0x1c, 0x69, 0x1b, 0x18,
+ 0xdb, 0xd0, 0x39, 0x4a, 0x73, 0x8c, 0xe7, 0x21, 0x7b, 0xbc, 0xfe, 0x9e, 0x19, 0x38, 0xdf, 0x34,
+ 0xc1, 0x81, 0x33, 0x68, 0x99, 0x85, 0x11, 0x5b, 0xe6, 0xa8, 0xbb, 0x0b, 0x54, 0xd6, 0xe3, 0x1b,
+ 0x30, 0x47, 0xd9, 0x5d, 0x48, 0x60, 0x22, 0x7b, 0xc4, 0xdf, 0x2c, 0x83, 0x42, 0x73, 0xf2, 0xe3,
+ 0xe5, 0xa8, 0x73, 0x11, 0x2c, 0xab, 0xe6, 0xd8, 0x86, 0xcb, 0x51, 0xe6, 0x22, 0xb1, 0x2c, 0x4c,
+ 0x20, 0x7e, 0xff, 0x71, 0x30, 0x87, 0x27, 0xdc, 0xc1, 0x6e, 0xeb, 0xdf, 0xd3, 0x51, 0xf3, 0xf5,
+ 0x19, 0xb6, 0xd5, 0xfb, 0xc0, 0x74, 0xb0, 0x3b, 0x44, 0x47, 0xce, 0x45, 0xb1, 0xf6, 0x19, 0x70,
+ 0x69, 0x84, 0xdf, 0x1f, 0xca, 0x27, 0x62, 0xec, 0x3b, 0x81, 0xa3, 0xfa, 0x44, 0x1c, 0xe9, 0x6e,
+ 0xe0, 0x6f, 0x47, 0x23, 0xea, 0x7f, 0xcd, 0x0e, 0xf3, 0xfe, 0x5d, 0xc2, 0xfc, 0x80, 0x5d, 0xc2,
+ 0x4f, 0xb2, 0x58, 0x36, 0x79, 0x2c, 0xef, 0x11, 0x15, 0xe1, 0x18, 0xc7, 0xda, 0xf7, 0x86, 0x70,
+ 0x9e, 0xe3, 0xe0, 0x5c, 0x3a, 0x14, 0x2f, 0x13, 0x38, 0x3f, 0x99, 0x8f, 0xc6, 0xdc, 0x4f, 0x65,
+ 0xd8, 0x8e, 0xfb, 0x0e, 0x67, 0xe4, 0x0f, 0x1c, 0xce, 0xe0, 0x5a, 0x7a, 0xe1, 0x90, 0x2d, 0xfd,
+ 0x53, 0xac, 0x76, 0xb4, 0x78, 0xed, 0x78, 0xba, 0x38, 0x22, 0xe3, 0x1b, 0x99, 0xdf, 0x17, 0xaa,
+ 0xc7, 0x79, 0x4e, 0x3d, 0xca, 0x87, 0x63, 0x26, 0x7b, 0xfd, 0xf8, 0xf5, 0x60, 0x42, 0x7b, 0xc4,
+ 0xed, 0x7d, 0xd4, 0x8d, 0x48, 0x4e, 0x88, 0x63, 0x1b, 0xb9, 0x47, 0xd9, 0x88, 0x1c, 0xc6, 0xc9,
+ 0x04, 0x42, 0xba, 0xcd, 0x83, 0x59, 0xcc, 0xd3, 0x79, 0xab, 0xb3, 0x0d, 0x7d, 0xed, 0x35, 0xc4,
+ 0x55, 0x31, 0x08, 0xa0, 0x39, 0xa6, 0x28, 0x47, 0x71, 0xc7, 0x66, 0xd3, 0xfa, 0x0b, 0x10, 0x26,
+ 0x17, 0x19, 0x06, 0x27, 0x1d, 0x88, 0x71, 0x28, 0x07, 0xd9, 0x43, 0xf6, 0x71, 0xe2, 0xcc, 0x51,
+ 0x33, 0xf7, 0x9d, 0x3d, 0x5f, 0x7b, 0x68, 0x0c, 0x1d, 0xf4, 0x12, 0x28, 0x76, 0x31, 0x35, 0x7a,
+ 0x3a, 0x23, 0x79, 0xba, 0x43, 0x45, 0x40, 0xca, 0x37, 0xe8, 0x97, 0x69, 0x8f, 0x68, 0x44, 0x72,
+ 0x24, 0x74, 0x26, 0x7d, 0x44, 0x63, 0x48, 0xf9, 0x13, 0xb9, 0xaa, 0x67, 0x1a, 0x95, 0x6e, 0xed,
+ 0x5a, 0xfe, 0x98, 0x02, 0x41, 0x74, 0x11, 0xad, 0x20, 0x10, 0x04, 0x7e, 0x48, 0x7b, 0xf0, 0x94,
+ 0x91, 0x0a, 0xfa, 0x7c, 0xd2, 0x07, 0x4f, 0x93, 0x8b, 0xcf, 0x1e, 0x93, 0x9f, 0x26, 0x2d, 0xeb,
+ 0x1c, 0xf1, 0xc1, 0xcd, 0xd0, 0xbd, 0x77, 0xe4, 0xc6, 0x42, 0x58, 0x3b, 0xba, 0xc6, 0x32, 0xb0,
+ 0xfc, 0xec, 0x81, 0xf9, 0xc5, 0xef, 0x04, 0x85, 0x0a, 0xbc, 0xb8, 0xb7, 0xad, 0xdd, 0x0d, 0xa6,
+ 0x5b, 0x2e, 0x84, 0x55, 0x7b, 0xcb, 0x41, 0xd2, 0xf5, 0xd1, 0xff, 0x00, 0x12, 0xfa, 0x84, 0xf0,
+ 0xd8, 0x81, 0x66, 0x27, 0x3a, 0x86, 0x16, 0x3c, 0x6a, 0x2f, 0x97, 0x40, 0xbe, 0xe9, 0x9b, 0xbe,
+ 0x36, 0x13, 0x62, 0xab, 0x3d, 0xc4, 0x62, 0x71, 0x37, 0x8f, 0xc5, 0x4d, 0x9c, 0x2c, 0x30, 0x07,
+ 0x8b, 0xe8, 0xfb, 0x18, 0x00, 0x34, 0x30, 0xfd, 0x80, 0xe7, 0xd8, 0x28, 0x47, 0x70, 0x52, 0x32,
+ 0x78, 0xd6, 0x5e, 0x15, 0x8a, 0xfb, 0x5e, 0x4e, 0xdc, 0x8f, 0x17, 0x2b, 0x62, 0x02, 0x2b, 0x6d,
+ 0x12, 0x98, 0x41, 0xa2, 0x5d, 0x85, 0x66, 0xc7, 0xd3, 0xbe, 0x23, 0x52, 0xfe, 0x18, 0x31, 0x6b,
+ 0x1f, 0x16, 0x8e, 0xe9, 0x49, 0x6a, 0x15, 0x12, 0x8f, 0xf7, 0x17, 0x08, 0x62, 0x9a, 0x48, 0x7c,
+ 0x4c, 0x93, 0xdb, 0x40, 0xde, 0xb2, 0xb7, 0x1c, 0xea, 0xbd, 0xf6, 0xe8, 0x18, 0xda, 0x48, 0x27,
+ 0x0c, 0x9c, 0x51, 0x30, 0xe0, 0x67, 0x32, 0x5b, 0x13, 0xb9, 0x3b, 0x2f, 0x8f, 0x4a, 0xd7, 0xfe,
+ 0xcf, 0xa1, 0xc2, 0x56, 0x55, 0x90, 0xef, 0x99, 0xfe, 0x0e, 0x2d, 0x1a, 0xff, 0x47, 0x36, 0xf2,
+ 0x9e, 0x6d, 0xda, 0x8e, 0xbd, 0xbf, 0x6b, 0x3d, 0x27, 0xbc, 0xa2, 0x97, 0x4b, 0x43, 0x9c, 0x6f,
+ 0x43, 0x1b, 0xba, 0xa6, 0x0f, 0x9b, 0x97, 0xb7, 0xf1, 0x1c, 0x6b, 0xda, 0x60, 0x93, 0x52, 0xeb,
+ 0x3f, 0xe2, 0x38, 0x5e, 0xff, 0xb7, 0xac, 0x2e, 0xc4, 0x01, 0x9f, 0xa8, 0xfe, 0x07, 0xcf, 0xa9,
+ 0xf4, 0x7f, 0x40, 0x11, 0xd9, 0xa3, 0xf1, 0xaf, 0x12, 0x98, 0x6b, 0x22, 0x85, 0x6b, 0xee, 0xed,
+ 0xee, 0x9a, 0xee, 0xbe, 0x76, 0x43, 0x84, 0x0a, 0xa3, 0x9a, 0x39, 0x4e, 0x35, 0xb5, 0x5f, 0x13,
+ 0xbe, 0x9d, 0x9a, 0x36, 0x6d, 0xa6, 0x84, 0xd4, 0xed, 0xe0, 0x89, 0xa0, 0x80, 0xd4, 0x3b, 0xf0,
+ 0xe7, 0x4b, 0x6c, 0x08, 0x24, 0xa7, 0x60, 0x60, 0xac, 0xa1, 0xbc, 0x4d, 0x20, 0x28, 0x87, 0x04,
+ 0x8e, 0x37, 0x7d, 0xb3, 0x7d, 0x69, 0xc5, 0x71, 0x9d, 0x3d, 0xdf, 0xb2, 0xa1, 0xa7, 0x3d, 0x26,
+ 0x42, 0x20, 0xd0, 0xff, 0x5c, 0xa4, 0xff, 0xda, 0xbf, 0xe7, 0x44, 0x47, 0xd1, 0xb0, 0x5b, 0x65,
+ 0xc9, 0xc7, 0xc4, 0xb9, 0x12, 0x1b, 0x17, 0x45, 0x28, 0x66, 0x2f, 0xb4, 0x37, 0xc9, 0x40, 0xd1,
+ 0x1f, 0xec, 0x39, 0xae, 0x5f, 0x73, 0xda, 0x66, 0xd7, 0xf3, 0x1d, 0x17, 0x6a, 0x8d, 0x44, 0xa9,
+ 0xa1, 0x1e, 0xa6, 0xe3, 0xb4, 0xa3, 0xc1, 0x91, 0x3e, 0xb1, 0x6a, 0x27, 0xf3, 0x3a, 0xfe, 0x71,
+ 0xe1, 0x5d, 0x46, 0x22, 0x95, 0x7e, 0x8e, 0x62, 0xf4, 0x7c, 0x50, 0x97, 0x96, 0xce, 0x15, 0x5f,
+ 0x6c, 0xe7, 0x51, 0x88, 0xa9, 0x09, 0x2c, 0x95, 0x4b, 0x60, 0xbe, 0xb9, 0x77, 0x31, 0x24, 0xe2,
+ 0xb1, 0x46, 0xc8, 0x6b, 0x85, 0x83, 0x59, 0x50, 0xc5, 0x63, 0x09, 0xc5, 0xc8, 0xf7, 0x46, 0x30,
+ 0xef, 0xb1, 0xd9, 0x28, 0xde, 0x7c, 0xa2, 0x60, 0x10, 0x8b, 0xe1, 0xa5, 0x66, 0x2f, 0xc0, 0xf7,
+ 0x49, 0x60, 0xbe, 0xd1, 0x83, 0x36, 0xec, 0x10, 0x1f, 0x3b, 0x4e, 0x80, 0x2f, 0x4f, 0x29, 0x40,
+ 0x8e, 0x50, 0x8c, 0x00, 0x23, 0x7f, 0xd8, 0x4a, 0x20, 0xbc, 0x28, 0x21, 0x95, 0xe0, 0x92, 0x4a,
+ 0xcb, 0x5e, 0x70, 0x5f, 0x92, 0xc0, 0xac, 0xb1, 0x67, 0xaf, 0xbb, 0x0e, 0x1a, 0x8d, 0x5d, 0xed,
+ 0x9e, 0xa8, 0x83, 0xb8, 0x15, 0x9c, 0xe8, 0xec, 0xb9, 0x78, 0xfd, 0xa9, 0x6a, 0x37, 0x61, 0xdb,
+ 0xb1, 0x3b, 0x1e, 0xae, 0x47, 0xc1, 0x38, 0xf8, 0xe2, 0xae, 0xfc, 0x0b, 0xfe, 0x4a, 0xce, 0x69,
+ 0x2f, 0x12, 0x8e, 0x98, 0x43, 0x2a, 0xcf, 0x14, 0x2d, 0xde, 0x13, 0x08, 0xc6, 0xc5, 0x19, 0x56,
+ 0x42, 0xf6, 0xc2, 0xfd, 0xbc, 0x04, 0xd4, 0x52, 0xbb, 0xed, 0xec, 0xd9, 0x7e, 0x13, 0x76, 0x61,
+ 0xdb, 0x6f, 0xb9, 0x66, 0x1b, 0xb2, 0xf6, 0xb3, 0x02, 0xe4, 0x8e, 0xe5, 0xd2, 0x3e, 0x18, 0xfd,
+ 0xa5, 0x72, 0x7c, 0xb9, 0xf0, 0x8e, 0x23, 0xa9, 0xe5, 0xc1, 0x52, 0x52, 0x88, 0x53, 0x6c, 0x5f,
+ 0x51, 0xb0, 0xa0, 0xec, 0xa5, 0xfa, 0x29, 0x09, 0xcc, 0x04, 0x3d, 0xf6, 0xb6, 0x88, 0x30, 0x7f,
+ 0x3a, 0xe5, 0x64, 0x24, 0x24, 0x9e, 0x42, 0x86, 0xef, 0x4a, 0x31, 0xab, 0x88, 0xa3, 0x9f, 0x4e,
+ 0x74, 0xa5, 0xf4, 0xa2, 0x43, 0x8f, 0xf5, 0xc6, 0xe6, 0x72, 0xa3, 0x56, 0xd1, 0x0d, 0x45, 0xd6,
+ 0xbe, 0x2c, 0x81, 0xfc, 0xba, 0x65, 0x6f, 0xb3, 0x81, 0xcd, 0x4e, 0x22, 0x3b, 0xb2, 0x03, 0x1f,
+ 0xa4, 0x2d, 0x9d, 0x3c, 0xa8, 0x77, 0x80, 0x93, 0xf6, 0xde, 0xee, 0x45, 0xe8, 0x36, 0xb6, 0xf0,
+ 0x28, 0xeb, 0xb5, 0x9c, 0x26, 0xb4, 0x89, 0x11, 0x5a, 0x30, 0x06, 0xbe, 0xe3, 0x4d, 0x30, 0x81,
+ 0xc9, 0x03, 0xe2, 0x24, 0x46, 0xe2, 0x21, 0x53, 0x12, 0xc3, 0x54, 0xaa, 0x69, 0xc3, 0x00, 0xe2,
+ 0xd9, 0x6b, 0xea, 0x6f, 0x14, 0xc0, 0xd5, 0x25, 0x7b, 0x1f, 0xdb, 0x14, 0xa4, 0x83, 0x2f, 0xef,
+ 0x98, 0xf6, 0x36, 0xc4, 0x03, 0x44, 0x28, 0x71, 0x36, 0xd2, 0x7f, 0x8e, 0x8f, 0xf4, 0xaf, 0x1a,
+ 0x60, 0xca, 0x71, 0x3b, 0xd0, 0x5d, 0xda, 0xc7, 0x3c, 0xf5, 0x2f, 0x3b, 0xd3, 0x36, 0x39, 0xa8,
+ 0x88, 0x45, 0x4a, 0x7e, 0xb1, 0x41, 0xbe, 0x37, 0x02, 0x42, 0x67, 0x6f, 0x05, 0x53, 0x34, 0x4d,
+ 0x9d, 0x03, 0xd3, 0x0d, 0xa3, 0xa2, 0x1b, 0x9b, 0xd5, 0x8a, 0x72, 0x4c, 0xbd, 0x0a, 0x1c, 0xaf,
+ 0xb6, 0x74, 0xa3, 0xd4, 0xaa, 0x36, 0xea, 0x9b, 0x38, 0x5d, 0xc9, 0x69, 0xcf, 0xcf, 0x8b, 0x7a,
+ 0xf6, 0x26, 0x33, 0x33, 0x08, 0x56, 0x03, 0x4c, 0xb5, 0x49, 0x06, 0x3c, 0x84, 0xce, 0xa6, 0xaa,
+ 0x1d, 0x25, 0x48, 0x12, 0x8c, 0x80, 0x90, 0x7a, 0x06, 0x80, 0x2b, 0xae, 0x63, 0x6f, 0x47, 0x67,
+ 0xda, 0xa6, 0x0d, 0x26, 0x45, 0x7b, 0x28, 0x07, 0x8a, 0xe4, 0x1b, 0x7c, 0xb3, 0x09, 0xfe, 0x17,
+ 0x09, 0x3e, 0x78, 0x46, 0x16, 0x2f, 0x96, 0x57, 0x34, 0xd1, 0xa2, 0x8f, 0x48, 0x17, 0x89, 0x0c,
+ 0x88, 0x25, 0x4c, 0xab, 0x72, 0x1b, 0x28, 0x92, 0x6f, 0xa9, 0xd7, 0x41, 0x7c, 0x94, 0x52, 0x92,
+ 0x4d, 0xd0, 0x4f, 0x59, 0x5c, 0xa6, 0xd9, 0x6b, 0xf3, 0x47, 0x24, 0x30, 0x5d, 0x87, 0x7e, 0x79,
+ 0x07, 0xb6, 0x2f, 0x69, 0x8f, 0xe3, 0x17, 0x40, 0xbb, 0x16, 0xb4, 0xfd, 0x0b, 0xbb, 0xdd, 0x70,
+ 0x01, 0x34, 0x48, 0xd0, 0x5e, 0xc8, 0x76, 0xbe, 0xcf, 0xe0, 0xf5, 0xe7, 0x96, 0x01, 0x75, 0x0d,
+ 0x4a, 0x88, 0x51, 0x99, 0x53, 0xa0, 0xe8, 0x42, 0x6f, 0xaf, 0x1b, 0x2c, 0xa2, 0xd1, 0x27, 0xed,
+ 0xe1, 0x50, 0x9c, 0x65, 0x4e, 0x9c, 0xb7, 0x89, 0x17, 0x31, 0x81, 0xb0, 0xa7, 0x79, 0x30, 0x55,
+ 0xb5, 0x2d, 0xdf, 0x32, 0xbb, 0xda, 0x8b, 0xf2, 0x60, 0xbe, 0x09, 0xfd, 0x75, 0xd3, 0x35, 0x77,
+ 0xa1, 0x0f, 0x5d, 0x4f, 0xfb, 0x06, 0xdf, 0x27, 0xf4, 0xba, 0xa6, 0xbf, 0xe5, 0xb8, 0xbb, 0x81,
+ 0x6a, 0x06, 0xcf, 0x48, 0x35, 0x2f, 0x43, 0xd7, 0x8b, 0xf8, 0x0a, 0x1e, 0xd1, 0x9b, 0x2b, 0x8e,
+ 0x7b, 0x09, 0x0d, 0x82, 0x74, 0x9a, 0x46, 0x1f, 0x11, 0xbd, 0xae, 0xb3, 0x5d, 0x83, 0x97, 0x61,
+ 0x10, 0x55, 0x2d, 0x7c, 0x46, 0x73, 0x81, 0x8e, 0x53, 0x77, 0x7c, 0xd4, 0x69, 0xd7, 0x9c, 0x6d,
+ 0x12, 0x76, 0x76, 0xda, 0xe0, 0x13, 0xa3, 0x5c, 0xe6, 0x65, 0x88, 0x73, 0x15, 0xd9, 0x5c, 0x34,
+ 0x51, 0x5d, 0x04, 0x6a, 0xf8, 0x59, 0x0b, 0x76, 0xe1, 0x2e, 0xf4, 0xdd, 0x7d, 0x7c, 0xbb, 0xc4,
+ 0xb4, 0x31, 0xe0, 0x0d, 0x1d, 0xa0, 0xc5, 0x27, 0xeb, 0x54, 0x7a, 0x8b, 0x9c, 0xe4, 0x0e, 0x35,
+ 0x59, 0x17, 0xa1, 0x38, 0x91, 0xdb, 0xb3, 0x64, 0x64, 0xcd, 0xbc, 0x42, 0x06, 0x79, 0x3c, 0x78,
+ 0xbe, 0x39, 0xc7, 0xad, 0x30, 0xed, 0x42, 0xcf, 0x33, 0xb7, 0x61, 0xb0, 0xc2, 0x44, 0x1f, 0xd5,
+ 0x3b, 0x41, 0xa1, 0x8b, 0x31, 0x25, 0x83, 0xc3, 0x0d, 0x5c, 0xcd, 0x90, 0x81, 0x81, 0x68, 0x85,
+ 0x23, 0x01, 0x86, 0xdb, 0x20, 0x5f, 0x9c, 0xbd, 0x0f, 0x14, 0x08, 0xfc, 0x33, 0xa0, 0x50, 0xd1,
+ 0x97, 0x36, 0x56, 0x94, 0x63, 0xe8, 0x6f, 0xc0, 0xdf, 0x0c, 0x28, 0x2c, 0x97, 0x5a, 0xa5, 0x9a,
+ 0x22, 0xa1, 0x7a, 0x54, 0xeb, 0xcb, 0x0d, 0x45, 0x46, 0x89, 0xeb, 0xa5, 0x7a, 0xb5, 0xac, 0xe4,
+ 0xd5, 0x59, 0x30, 0x75, 0xbe, 0x64, 0xd4, 0xab, 0xf5, 0x15, 0xa5, 0xa0, 0xfd, 0x25, 0x8b, 0xdf,
+ 0x5d, 0x3c, 0x7e, 0x37, 0xc6, 0xf1, 0x34, 0x08, 0xb2, 0x9f, 0x0f, 0x21, 0xbb, 0x87, 0x83, 0xec,
+ 0x3b, 0x45, 0x88, 0x4c, 0xc0, 0x9d, 0xa9, 0x08, 0xa6, 0xd6, 0x5d, 0xa7, 0x0d, 0x3d, 0x4f, 0xfb,
+ 0x19, 0x09, 0x14, 0xcb, 0xa6, 0xdd, 0x86, 0x5d, 0xed, 0x9a, 0x08, 0x2a, 0xe2, 0x2a, 0x9a, 0x0b,
+ 0x5c, 0x45, 0xb5, 0xaf, 0xe5, 0x44, 0x7b, 0x3f, 0x4a, 0x77, 0x91, 0xd0, 0x8c, 0x91, 0x8f, 0x58,
+ 0x2f, 0x97, 0x48, 0x6a, 0x02, 0x37, 0xec, 0x48, 0x60, 0x86, 0xae, 0x06, 0x5c, 0x84, 0xec, 0x3c,
+ 0xfc, 0x1b, 0x39, 0xd1, 0xc9, 0x61, 0x50, 0x83, 0x90, 0x4c, 0x8c, 0x3c, 0xc4, 0x26, 0x82, 0xc3,
+ 0xa8, 0x4d, 0x60, 0xf3, 0x50, 0x02, 0xb3, 0x1b, 0xb6, 0x37, 0x48, 0x28, 0xe2, 0xe1, 0xf8, 0x83,
+ 0x6a, 0x30, 0x84, 0x0e, 0x15, 0x8e, 0x7f, 0x38, 0xbd, 0xec, 0x05, 0xf3, 0x8d, 0x1c, 0x38, 0xb9,
+ 0x02, 0x6d, 0xe8, 0x5a, 0x6d, 0x52, 0x83, 0x40, 0x12, 0xf7, 0xf0, 0x92, 0x78, 0x1c, 0xc7, 0xf9,
+ 0xa0, 0x2f, 0x78, 0x09, 0xbc, 0x3a, 0x94, 0xc0, 0x33, 0x38, 0x09, 0xdc, 0x2a, 0x48, 0x67, 0x02,
+ 0xd7, 0xaa, 0xcf, 0x80, 0xb9, 0xba, 0xe3, 0x5b, 0x5b, 0x56, 0x9b, 0xf8, 0xa0, 0xfd, 0x9c, 0x0c,
+ 0xf2, 0x35, 0xcb, 0xf3, 0xb5, 0x52, 0xd4, 0x9d, 0x5c, 0x0f, 0x66, 0x2d, 0xbb, 0xdd, 0xdd, 0xeb,
+ 0x40, 0x03, 0x9a, 0xa4, 0x5f, 0x99, 0x36, 0xd8, 0xa4, 0x68, 0x6b, 0x1f, 0xb1, 0x25, 0x07, 0x5b,
+ 0xfb, 0xbf, 0x25, 0xbc, 0x0c, 0xc3, 0xb2, 0x80, 0xe3, 0x52, 0xc6, 0xd8, 0x5d, 0x25, 0x30, 0x6f,
+ 0x33, 0x59, 0x03, 0x83, 0xbd, 0xff, 0x5e, 0x02, 0x96, 0x9c, 0xc1, 0x7f, 0xa1, 0x7d, 0x40, 0xa8,
+ 0xb1, 0x0e, 0x63, 0x28, 0x1d, 0x32, 0xcb, 0x23, 0x4c, 0x92, 0x55, 0xb0, 0x50, 0xad, 0xb7, 0x74,
+ 0xa3, 0x5e, 0xaa, 0xd1, 0x2c, 0xb2, 0xf6, 0xaf, 0x12, 0x28, 0x18, 0xb0, 0xd7, 0xdd, 0x67, 0x03,
+ 0x4f, 0x53, 0x47, 0xf1, 0x5c, 0xe8, 0x28, 0xae, 0x2e, 0x03, 0x60, 0xb6, 0x51, 0xc1, 0xf8, 0x66,
+ 0x2e, 0x69, 0x60, 0x38, 0x53, 0xae, 0x82, 0xa5, 0x30, 0xb7, 0xc1, 0x7c, 0xa9, 0xbd, 0x58, 0x78,
+ 0xe7, 0x88, 0xa3, 0x86, 0x39, 0x8c, 0xe9, 0x13, 0x3e, 0x28, 0xb4, 0xd9, 0x33, 0x94, 0xdc, 0xd1,
+ 0x88, 0xff, 0x2b, 0x12, 0xc8, 0xb7, 0x50, 0x6f, 0xc9, 0x74, 0x9c, 0x9f, 0x1d, 0x4d, 0xc7, 0x11,
+ 0x99, 0x18, 0x1d, 0xbf, 0x17, 0xcc, 0xb1, 0x1a, 0x4b, 0x5d, 0x25, 0x12, 0x55, 0x9c, 0xfb, 0x60,
+ 0x14, 0x0d, 0x1f, 0xc0, 0xce, 0xd1, 0x88, 0xf8, 0xd3, 0x8f, 0x07, 0x60, 0x0d, 0xee, 0x5e, 0x84,
+ 0xae, 0xb7, 0x63, 0xf5, 0xb4, 0xbf, 0x96, 0xc1, 0xcc, 0x0a, 0xf4, 0x9b, 0xbe, 0xe9, 0xef, 0x79,
+ 0x7d, 0xdb, 0x9d, 0xb6, 0x53, 0x36, 0xdb, 0x3b, 0x90, 0x76, 0x47, 0xc1, 0xa3, 0xf6, 0x1e, 0x59,
+ 0xd4, 0x9f, 0x28, 0x2a, 0x67, 0x31, 0x2c, 0x23, 0x06, 0x93, 0x27, 0x80, 0x7c, 0xc7, 0xf4, 0x4d,
+ 0x8a, 0xc5, 0x35, 0x7d, 0x58, 0x44, 0x84, 0x0c, 0x9c, 0x4d, 0x7b, 0x87, 0x24, 0xe2, 0x50, 0x24,
+ 0x50, 0x7e, 0x3a, 0x10, 0x3e, 0x90, 0x1b, 0x01, 0x85, 0x13, 0x60, 0xbe, 0xde, 0x68, 0x6d, 0xd6,
+ 0x1a, 0x2b, 0x2b, 0x3a, 0x4a, 0x55, 0x64, 0xf5, 0x14, 0x50, 0xd7, 0x4b, 0x17, 0xd6, 0xf4, 0x7a,
+ 0x6b, 0xb3, 0xde, 0xa8, 0xe8, 0xf4, 0xcb, 0xbc, 0x7a, 0x1c, 0xcc, 0x96, 0x4b, 0xe5, 0xd5, 0x20,
+ 0xa1, 0xa0, 0x9e, 0x06, 0x27, 0xd7, 0xf4, 0xb5, 0x25, 0xdd, 0x68, 0xae, 0x56, 0xd7, 0x37, 0x11,
+ 0x99, 0xe5, 0xc6, 0x46, 0xbd, 0xa2, 0x14, 0x55, 0x0d, 0x9c, 0x62, 0xde, 0x9c, 0x37, 0x1a, 0xf5,
+ 0x95, 0xcd, 0x66, 0xab, 0xd4, 0xd2, 0x95, 0x29, 0xf5, 0x2a, 0x70, 0xbc, 0x5c, 0xaa, 0xe3, 0xec,
+ 0xe5, 0x46, 0xbd, 0xae, 0x97, 0x5b, 0xca, 0xb4, 0xf6, 0xef, 0x79, 0x30, 0x5b, 0xf5, 0xea, 0xe6,
+ 0x2e, 0x3c, 0x67, 0x76, 0xad, 0x8e, 0xf6, 0x22, 0x66, 0xe6, 0x71, 0x23, 0x98, 0x77, 0xc9, 0x5f,
+ 0xd8, 0x69, 0x59, 0x90, 0xa0, 0x39, 0x6f, 0xf0, 0x89, 0x68, 0x4e, 0x6e, 0x63, 0x02, 0xc1, 0x9c,
+ 0x9c, 0x3c, 0xa9, 0x4b, 0x00, 0x90, 0x7f, 0xad, 0xe8, 0x8e, 0xd8, 0xb3, 0xfd, 0xad, 0xc9, 0xdc,
+ 0x85, 0x1e, 0x74, 0x2f, 0x5b, 0x6d, 0x18, 0xe4, 0x34, 0x98, 0xaf, 0xb4, 0x3f, 0x95, 0x45, 0xf7,
+ 0x17, 0x19, 0x50, 0x99, 0xea, 0xc4, 0xf4, 0x86, 0x3f, 0x22, 0x8b, 0xec, 0x0e, 0x0a, 0x91, 0x4c,
+ 0xa7, 0x29, 0x2f, 0x95, 0x46, 0x5b, 0xb6, 0x6d, 0x35, 0x1a, 0x9b, 0xcd, 0xd5, 0x86, 0xd1, 0x52,
+ 0x64, 0x75, 0x0e, 0x4c, 0xa3, 0xc7, 0x5a, 0xa3, 0xbe, 0xa2, 0xe4, 0xd5, 0xab, 0xc1, 0x89, 0xd5,
+ 0x52, 0x73, 0xb3, 0x5a, 0x3f, 0x57, 0xaa, 0x55, 0x2b, 0x9b, 0xe5, 0xd5, 0x92, 0xd1, 0x54, 0x0a,
+ 0xea, 0x35, 0xe0, 0xea, 0x56, 0x55, 0x37, 0x36, 0x97, 0xf5, 0x52, 0x6b, 0xc3, 0xd0, 0x9b, 0x9b,
+ 0xf5, 0xc6, 0x66, 0xbd, 0xb4, 0xa6, 0x2b, 0x45, 0xd4, 0xfc, 0xf1, 0xab, 0x48, 0x6d, 0xa6, 0x0e,
+ 0x2a, 0xe3, 0x74, 0x8c, 0x32, 0xce, 0xf4, 0x2b, 0x23, 0x60, 0xd5, 0xca, 0xd0, 0x9b, 0xba, 0x71,
+ 0x4e, 0x57, 0x66, 0x07, 0xe9, 0xda, 0x9c, 0x7a, 0x12, 0x28, 0x88, 0x87, 0xcd, 0x6a, 0x33, 0xc8,
+ 0x59, 0x51, 0xe6, 0xb5, 0x4f, 0x15, 0xc1, 0x29, 0x03, 0x6e, 0x5b, 0x9e, 0x0f, 0xdd, 0x75, 0x73,
+ 0x7f, 0x17, 0xda, 0x7e, 0xd0, 0xc9, 0xff, 0x73, 0x6a, 0x65, 0x5c, 0x03, 0xf3, 0x3d, 0x42, 0x63,
+ 0x0d, 0xfa, 0x3b, 0x4e, 0x87, 0x8e, 0xc2, 0x8f, 0x8b, 0xed, 0x39, 0x16, 0xd7, 0xd9, 0xec, 0x06,
+ 0xff, 0x35, 0xa3, 0xdb, 0x72, 0x82, 0x6e, 0xe7, 0x47, 0xd1, 0x6d, 0xf5, 0x5a, 0x30, 0xb3, 0xe7,
+ 0x41, 0x57, 0xdf, 0x35, 0xad, 0x6e, 0x70, 0xc7, 0x67, 0x98, 0xa0, 0xbd, 0x33, 0x2f, 0x7a, 0x62,
+ 0x85, 0xa9, 0xcb, 0x60, 0x31, 0xc6, 0xf4, 0xad, 0x67, 0x00, 0xa0, 0x95, 0xdd, 0x70, 0xbb, 0x54,
+ 0x59, 0x99, 0x14, 0xc4, 0xdf, 0x45, 0xab, 0xdb, 0xb5, 0xec, 0xed, 0x70, 0xdf, 0x3f, 0x4a, 0xd0,
+ 0x5e, 0x2a, 0x8b, 0x9c, 0x60, 0x49, 0xcb, 0x5b, 0xba, 0xd6, 0xf4, 0x62, 0x69, 0xc2, 0xfd, 0xee,
+ 0xc1, 0xa6, 0x53, 0x54, 0x15, 0x30, 0x87, 0xd3, 0x68, 0x0b, 0x54, 0xa6, 0x50, 0x1f, 0x1c, 0x90,
+ 0x5b, 0xd3, 0x5b, 0xab, 0x8d, 0x4a, 0xf8, 0x6e, 0x1a, 0x91, 0x44, 0xcc, 0x94, 0xea, 0x17, 0x70,
+ 0x6b, 0x9c, 0x51, 0x1f, 0x03, 0xae, 0x61, 0x3a, 0xec, 0x52, 0xcd, 0xd0, 0x4b, 0x95, 0x0b, 0x9b,
+ 0xfa, 0xb3, 0xaa, 0xcd, 0x56, 0x93, 0x6f, 0x5c, 0x41, 0x3b, 0x9a, 0x45, 0xfc, 0xea, 0x6b, 0xa5,
+ 0x6a, 0x8d, 0xf6, 0xef, 0xcb, 0x0d, 0x63, 0xad, 0xd4, 0x52, 0xe6, 0xb4, 0x57, 0xc8, 0x40, 0x59,
+ 0x81, 0xfe, 0xba, 0xe3, 0xfa, 0x66, 0xb7, 0x66, 0xd9, 0x97, 0x36, 0xdc, 0x2e, 0x37, 0xd9, 0x14,
+ 0x0e, 0xd3, 0xc1, 0x0f, 0x91, 0x1c, 0xc1, 0xf8, 0x1d, 0xf1, 0x1e, 0xce, 0x16, 0x29, 0x53, 0x94,
+ 0xa0, 0x3d, 0x57, 0x12, 0x59, 0xee, 0x16, 0x2f, 0x35, 0x9d, 0x9e, 0x3c, 0x6f, 0xd2, 0xe3, 0xf3,
+ 0x00, 0xd4, 0x8a, 0xda, 0x0b, 0xf2, 0x60, 0x7a, 0xd9, 0xb2, 0xcd, 0xae, 0xf5, 0x1c, 0x2e, 0x3a,
+ 0x66, 0xd4, 0xc7, 0xe4, 0x12, 0xfa, 0x18, 0x69, 0xa4, 0xf1, 0xf3, 0xa7, 0x64, 0xd1, 0xe5, 0x05,
+ 0x46, 0xf6, 0x01, 0x93, 0x31, 0x83, 0xe7, 0x47, 0x25, 0x91, 0xe5, 0x85, 0xe1, 0xf4, 0xd2, 0x61,
+ 0xf8, 0x99, 0x6f, 0x0f, 0x1b, 0xab, 0xaf, 0x7d, 0x4f, 0x0f, 0x52, 0x85, 0x19, 0xed, 0xf7, 0x64,
+ 0xa0, 0xad, 0x40, 0xff, 0x1c, 0x74, 0xc3, 0xa9, 0x00, 0xee, 0xf5, 0xa9, 0xbd, 0xcd, 0x34, 0xd9,
+ 0x37, 0xb3, 0x00, 0x9e, 0xe7, 0x01, 0x2c, 0x25, 0x34, 0x9e, 0x18, 0xd2, 0x31, 0x8d, 0xb7, 0x0a,
+ 0x8a, 0x1e, 0x7e, 0x4f, 0xd5, 0xec, 0x89, 0xf1, 0xc3, 0x25, 0x26, 0xc6, 0x52, 0x27, 0x84, 0x0d,
+ 0x4a, 0x40, 0xfb, 0x66, 0x38, 0x09, 0xfa, 0x1e, 0x4e, 0x3b, 0x96, 0x0f, 0xcd, 0x6c, 0x3a, 0x7d,
+ 0x71, 0xb3, 0x55, 0x97, 0x41, 0xf6, 0x8d, 0xf6, 0xd1, 0x02, 0x38, 0x39, 0xa8, 0x3a, 0xda, 0x2f,
+ 0xe7, 0xb8, 0x1d, 0x76, 0x88, 0x87, 0xfc, 0x1c, 0xdd, 0x40, 0x44, 0x0f, 0xea, 0x93, 0xc1, 0xd5,
+ 0xe1, 0x32, 0x5c, 0xcb, 0xa9, 0xc3, 0x2b, 0x5e, 0x17, 0xfa, 0x3e, 0x74, 0x71, 0xd5, 0xa6, 0x8d,
+ 0xc1, 0x2f, 0xd5, 0xa7, 0x82, 0x47, 0x59, 0xb6, 0x67, 0x75, 0xa0, 0xdb, 0xb2, 0x7a, 0x5e, 0xc9,
+ 0xee, 0xb4, 0xf6, 0x7c, 0xc7, 0xb5, 0x4c, 0x7a, 0x23, 0xe5, 0xb4, 0x11, 0xf7, 0x5a, 0xbd, 0x05,
+ 0x28, 0x96, 0xd7, 0xb0, 0x2f, 0x3a, 0xa6, 0xdb, 0xb1, 0xec, 0xed, 0x9a, 0xe5, 0xf9, 0xd4, 0x03,
+ 0xf8, 0x40, 0xba, 0xf6, 0x37, 0xb2, 0xe8, 0x61, 0xba, 0x21, 0xb0, 0xc6, 0x74, 0x28, 0x2f, 0x94,
+ 0x45, 0x8e, 0xc7, 0xa5, 0xa3, 0x9d, 0x4e, 0x59, 0x9e, 0x3f, 0x69, 0x43, 0x62, 0xf0, 0x08, 0x8e,
+ 0xbb, 0x16, 0x92, 0x1e, 0x18, 0x02, 0xe7, 0x74, 0xa3, 0xba, 0x5c, 0xd5, 0x91, 0x59, 0x71, 0x35,
+ 0x38, 0x11, 0xbd, 0xab, 0x5c, 0xd8, 0x6c, 0xea, 0xf5, 0x96, 0x32, 0x8d, 0xfa, 0x29, 0x92, 0xbc,
+ 0x5c, 0xaa, 0xd6, 0xf4, 0xca, 0x66, 0xab, 0x81, 0xde, 0x54, 0x46, 0x33, 0x2d, 0xb4, 0x87, 0xf2,
+ 0xe0, 0x38, 0x96, 0xed, 0x3e, 0x96, 0x2a, 0x12, 0x4a, 0x9f, 0xaf, 0x6d, 0x08, 0xd0, 0x0c, 0x11,
+ 0xaf, 0xf6, 0xbb, 0xc2, 0x17, 0x6e, 0x32, 0x10, 0xf6, 0x95, 0x11, 0xa3, 0x19, 0xdf, 0x90, 0x44,
+ 0x22, 0x54, 0x08, 0x93, 0x4d, 0xa7, 0x14, 0xff, 0x32, 0xe9, 0x11, 0x27, 0x1e, 0x7c, 0x6c, 0x65,
+ 0x96, 0xf1, 0xc7, 0xcf, 0x5a, 0xaf, 0x1a, 0x58, 0x1d, 0x16, 0x00, 0xc0, 0x29, 0x58, 0x83, 0x88,
+ 0x1e, 0x0c, 0x1c, 0xaf, 0xe2, 0xf4, 0xa0, 0x54, 0x6e, 0x55, 0xcf, 0xe9, 0x71, 0x7a, 0xf0, 0x39,
+ 0x19, 0x4c, 0xaf, 0x40, 0x1f, 0xcd, 0xa9, 0x3c, 0xed, 0x69, 0x02, 0xeb, 0x3f, 0xc8, 0x8c, 0xe9,
+ 0x3a, 0x6d, 0xb3, 0x1b, 0x2e, 0x03, 0x90, 0x27, 0xed, 0x87, 0x47, 0x31, 0x41, 0x82, 0xa2, 0x63,
+ 0xc6, 0xab, 0xef, 0x06, 0x05, 0x1f, 0xbd, 0xa6, 0xcb, 0xd0, 0xdf, 0x11, 0x3b, 0x5c, 0x21, 0x22,
+ 0x15, 0xd3, 0x37, 0x0d, 0x92, 0x9f, 0x19, 0x9d, 0x04, 0x6d, 0x97, 0x18, 0x46, 0xbe, 0x1d, 0xed,
+ 0xcf, 0xbf, 0x94, 0xc1, 0xd5, 0xa4, 0x7d, 0x94, 0x7a, 0xbd, 0xa6, 0xef, 0xb8, 0xd0, 0x80, 0x6d,
+ 0x68, 0xf5, 0xfc, 0xbe, 0xf5, 0x3d, 0x97, 0xa4, 0x06, 0x9b, 0xcd, 0xf4, 0x51, 0x7b, 0x83, 0x2c,
+ 0x1a, 0xe1, 0xf7, 0x40, 0x7b, 0xec, 0x2b, 0x2f, 0xa6, 0xb1, 0x7f, 0x52, 0x12, 0x89, 0xd9, 0x9b,
+ 0x92, 0x78, 0x3a, 0xa0, 0x3e, 0x76, 0x04, 0x40, 0x05, 0x2b, 0x37, 0x86, 0x5e, 0xd6, 0xab, 0xeb,
+ 0x68, 0x10, 0xb8, 0x0e, 0x3c, 0x7a, 0x7d, 0xc3, 0x28, 0xaf, 0x96, 0x9a, 0xfa, 0xa6, 0xa1, 0xaf,
+ 0x54, 0x9b, 0x2d, 0xea, 0x94, 0x45, 0xbe, 0x9a, 0x52, 0xaf, 0x05, 0xa7, 0x9b, 0x1b, 0x4b, 0xcd,
+ 0xb2, 0x51, 0x5d, 0xc7, 0xe9, 0x86, 0x5e, 0xd7, 0xcf, 0xd3, 0xb7, 0xd3, 0xda, 0x87, 0x15, 0x30,
+ 0x8b, 0x26, 0x00, 0x4d, 0x32, 0x2f, 0xd0, 0xfe, 0x2e, 0x0f, 0x66, 0x0d, 0xe8, 0x39, 0xdd, 0xcb,
+ 0x78, 0x8e, 0x30, 0xa9, 0xa9, 0xc7, 0xd7, 0x65, 0xd1, 0xf3, 0xdb, 0x0c, 0xb3, 0x8b, 0x0c, 0xa3,
+ 0xf1, 0x13, 0x4d, 0xf3, 0xb2, 0x69, 0x75, 0xcd, 0x8b, 0xb4, 0xab, 0x99, 0x36, 0xa2, 0x04, 0x75,
+ 0x11, 0xa8, 0xce, 0x15, 0x1b, 0xba, 0xcd, 0xf6, 0x15, 0xdd, 0xdf, 0x29, 0x75, 0x3a, 0x2e, 0xf4,
+ 0x3c, 0xba, 0x7a, 0x31, 0xe0, 0x8d, 0x7a, 0x33, 0x38, 0x8e, 0x53, 0x99, 0xcc, 0xc4, 0x41, 0xa6,
+ 0x3f, 0x39, 0xcc, 0x59, 0xb2, 0xf7, 0x83, 0x9c, 0x05, 0x26, 0x67, 0x94, 0xcc, 0x1e, 0x97, 0x28,
+ 0xf2, 0xa7, 0x74, 0xae, 0x07, 0xb3, 0xb6, 0xb9, 0x0b, 0xf5, 0x07, 0x7b, 0x96, 0x0b, 0x3d, 0xec,
+ 0x18, 0x23, 0x1b, 0x6c, 0x92, 0xf6, 0x51, 0xa1, 0xf3, 0xe6, 0x62, 0x12, 0x4b, 0xa7, 0xfb, 0x2b,
+ 0x23, 0xa8, 0xfe, 0x80, 0x7e, 0x46, 0xd6, 0x3e, 0x2c, 0x83, 0x39, 0xca, 0x54, 0xc9, 0xde, 0xaf,
+ 0x76, 0xb4, 0xeb, 0x38, 0xe3, 0xd7, 0x44, 0x69, 0x81, 0xf1, 0x8b, 0x1f, 0xb4, 0x1f, 0x95, 0x45,
+ 0xdd, 0x9d, 0x07, 0x54, 0x1c, 0x97, 0x11, 0xef, 0x38, 0xba, 0xe5, 0xec, 0x51, 0x47, 0xd5, 0x69,
+ 0x83, 0x3c, 0x64, 0xb9, 0xa8, 0xa7, 0xfd, 0xaa, 0x90, 0x33, 0xb5, 0x60, 0x35, 0x8e, 0x08, 0xc0,
+ 0x4f, 0xcb, 0x60, 0x81, 0x72, 0xd5, 0xa4, 0xe7, 0x7c, 0x84, 0x0e, 0xbc, 0xfd, 0xb8, 0xb0, 0x21,
+ 0x38, 0xa0, 0xfe, 0xb4, 0xa4, 0x47, 0x0c, 0x90, 0x1f, 0x17, 0x0a, 0x8e, 0x26, 0x5c, 0x91, 0x23,
+ 0x82, 0xf2, 0x5d, 0x79, 0x30, 0xbb, 0xe1, 0x41, 0x97, 0xfa, 0xed, 0x6b, 0x0f, 0xe7, 0x81, 0xbc,
+ 0x02, 0xb9, 0x8d, 0xd4, 0x97, 0x08, 0x7b, 0xf8, 0xb2, 0x95, 0x65, 0x88, 0x22, 0x1b, 0x29, 0x06,
+ 0xb6, 0x9b, 0xc0, 0x02, 0x11, 0x69, 0xc9, 0xf7, 0x91, 0x91, 0x18, 0x78, 0xd3, 0xf6, 0xa5, 0x8e,
+ 0x63, 0xab, 0x08, 0x97, 0x85, 0xb2, 0x94, 0x11, 0x4f, 0x35, 0xb8, 0x45, 0xe6, 0xb3, 0x79, 0xa3,
+ 0x2f, 0x55, 0xbd, 0x1d, 0x5c, 0xe5, 0xf4, 0x20, 0x39, 0xbf, 0xc2, 0x64, 0x2e, 0xe0, 0xcc, 0x83,
+ 0x5e, 0x69, 0x7f, 0x27, 0xe4, 0xab, 0x2b, 0x2e, 0x9d, 0x74, 0xba, 0xd0, 0x1b, 0x8f, 0x49, 0x72,
+ 0x12, 0x28, 0x28, 0x07, 0xde, 0x7f, 0x31, 0xf4, 0x66, 0xa3, 0x76, 0x4e, 0x1f, 0xbc, 0x8c, 0x51,
+ 0xd0, 0x9e, 0x2f, 0x83, 0x99, 0x25, 0xd7, 0x31, 0x3b, 0x6d, 0xd3, 0xf3, 0xb5, 0x6f, 0x4a, 0x60,
+ 0x6e, 0xdd, 0xdc, 0xef, 0x3a, 0x66, 0x07, 0xfb, 0xf7, 0xf7, 0xf5, 0x05, 0x3d, 0xf2, 0x2a, 0xe8,
+ 0x0b, 0xe8, 0x23, 0x7f, 0x30, 0x30, 0x3c, 0xba, 0x97, 0x13, 0xb9, 0x57, 0x33, 0xdc, 0xe6, 0x93,
+ 0x06, 0x05, 0x2b, 0x0d, 0xf8, 0x5a, 0x64, 0x79, 0x8a, 0xb1, 0x28, 0x3f, 0x2c, 0x16, 0x7e, 0x54,
+ 0x84, 0xe4, 0xd1, 0xec, 0xca, 0xbf, 0x60, 0x1a, 0x14, 0x2b, 0x10, 0x5b, 0x71, 0xff, 0x5d, 0x02,
+ 0x53, 0x4d, 0xe8, 0x63, 0x0b, 0xee, 0x4e, 0xce, 0x53, 0xb8, 0x83, 0x33, 0x44, 0x4e, 0xec, 0xc1,
+ 0x33, 0x9a, 0xac, 0x33, 0xe7, 0xad, 0xf1, 0xff, 0x14, 0x1e, 0x89, 0xa4, 0xdc, 0x45, 0x5a, 0xe6,
+ 0xa1, 0x3c, 0x12, 0x13, 0x49, 0x65, 0xef, 0x6b, 0xf5, 0x1e, 0x89, 0xba, 0x56, 0x31, 0xbd, 0xde,
+ 0x6b, 0x58, 0xfd, 0x4c, 0xf4, 0x36, 0xa3, 0xcc, 0x27, 0x38, 0x47, 0x3d, 0x09, 0x4c, 0x11, 0x99,
+ 0x07, 0xf3, 0xd1, 0x7e, 0x3f, 0x05, 0x42, 0x02, 0x9f, 0xbd, 0x0e, 0x72, 0x0a, 0xba, 0xa8, 0xc5,
+ 0x17, 0x3e, 0x91, 0x18, 0x04, 0x73, 0x75, 0xe8, 0x5f, 0x71, 0xdc, 0x4b, 0x4d, 0xdf, 0xf4, 0xa1,
+ 0xf6, 0x2f, 0x12, 0xb9, 0x2e, 0x8f, 0x89, 0x7e, 0x52, 0x07, 0x27, 0x48, 0x85, 0x68, 0x46, 0xdc,
+ 0x7f, 0x93, 0x8a, 0x5c, 0x3f, 0x50, 0x08, 0x4c, 0x3e, 0xe3, 0xe0, 0xa7, 0xda, 0xcf, 0x0c, 0x0c,
+ 0xfa, 0x24, 0x0d, 0x98, 0x34, 0x50, 0xc9, 0xb0, 0x0c, 0xc6, 0xdf, 0x8f, 0xa7, 0x7d, 0x44, 0xc8,
+ 0xac, 0x16, 0xa3, 0x79, 0x34, 0x5d, 0xc1, 0xbf, 0x3d, 0x0e, 0xe4, 0xcb, 0x3b, 0xa6, 0xaf, 0xbd,
+ 0x5b, 0x06, 0xa0, 0xd4, 0xe9, 0xac, 0x11, 0x1f, 0x70, 0xd6, 0x21, 0xed, 0x2c, 0x98, 0x6b, 0xef,
+ 0x98, 0xd1, 0xcd, 0x19, 0xa4, 0x3f, 0xe0, 0xd2, 0xd4, 0x27, 0x47, 0xce, 0xe4, 0x44, 0xaa, 0x5a,
+ 0x1f, 0x4c, 0xa8, 0x0c, 0x4a, 0x3b, 0x74, 0x34, 0xe7, 0x43, 0x61, 0x26, 0x1e, 0xa1, 0x43, 0x9f,
+ 0x2f, 0x46, 0xec, 0xc5, 0xcf, 0xe1, 0x28, 0xe9, 0xf0, 0x80, 0x4d, 0x94, 0x90, 0xf2, 0xa4, 0xb7,
+ 0x58, 0x40, 0x8f, 0x64, 0xbe, 0x26, 0x12, 0xba, 0x56, 0xd5, 0x3b, 0x56, 0x20, 0x5a, 0x1a, 0x30,
+ 0x4b, 0x7b, 0x71, 0x2e, 0x1d, 0x7c, 0xc9, 0x82, 0x7b, 0x06, 0x98, 0x87, 0x1d, 0xcb, 0x87, 0x41,
+ 0x2d, 0xa9, 0x00, 0x93, 0x20, 0xe6, 0x3f, 0xd0, 0x9e, 0x27, 0x1c, 0x74, 0x0d, 0x0b, 0xf4, 0x60,
+ 0x8d, 0x62, 0xda, 0x9f, 0x58, 0x18, 0x35, 0x31, 0x9a, 0xd9, 0x83, 0xf5, 0xc3, 0x32, 0xb8, 0xba,
+ 0xe5, 0x6c, 0x6f, 0x77, 0x61, 0x20, 0x26, 0x48, 0xbc, 0x33, 0x35, 0x73, 0x9c, 0x70, 0xe1, 0x9d,
+ 0x20, 0xe7, 0x01, 0x2b, 0x3c, 0x4a, 0x86, 0x1e, 0xf8, 0x13, 0x53, 0x89, 0xb3, 0x28, 0x2c, 0xae,
+ 0x81, 0x7c, 0xc6, 0xa0, 0x20, 0x16, 0xf0, 0x59, 0x98, 0x6c, 0xf6, 0x40, 0x7c, 0x41, 0x02, 0xf3,
+ 0xe4, 0x5e, 0xc4, 0x40, 0x41, 0xef, 0x1f, 0x23, 0x00, 0xda, 0x37, 0x73, 0xa2, 0x7e, 0xb6, 0x58,
+ 0x26, 0x1c, 0x27, 0x31, 0x22, 0x16, 0x0b, 0xaa, 0x32, 0x94, 0xdc, 0x04, 0x6e, 0xea, 0xcc, 0x83,
+ 0xd9, 0x15, 0x18, 0xb4, 0x34, 0x4f, 0x7b, 0x7f, 0xca, 0x9e, 0xe8, 0x2c, 0x98, 0xc3, 0x97, 0x83,
+ 0x35, 0xe8, 0x31, 0x49, 0xb2, 0x6a, 0xc6, 0xa5, 0xa9, 0x37, 0x82, 0xf9, 0x8b, 0x70, 0xcb, 0x71,
+ 0x61, 0x83, 0x3b, 0x4b, 0xc9, 0x27, 0x0e, 0x0e, 0x4f, 0xa7, 0xde, 0x0c, 0x8e, 0x53, 0x47, 0xf7,
+ 0x25, 0x34, 0xd7, 0x37, 0xdd, 0x7d, 0x7a, 0x30, 0xad, 0x3f, 0x59, 0xfb, 0x4b, 0xb6, 0xc1, 0x2c,
+ 0xf1, 0x28, 0xde, 0x7a, 0x50, 0xec, 0x4c, 0xa5, 0x63, 0x46, 0xa7, 0xa7, 0x80, 0x69, 0xaa, 0x23,
+ 0x81, 0x41, 0x97, 0xd4, 0x83, 0x86, 0x79, 0xd5, 0xa7, 0x80, 0x19, 0x24, 0x22, 0x6c, 0x37, 0xd0,
+ 0xae, 0xf7, 0xf4, 0x80, 0x0f, 0xf1, 0x7b, 0x23, 0xca, 0xaa, 0xfd, 0x42, 0xa8, 0x33, 0x3a, 0xa7,
+ 0x33, 0x4f, 0x4c, 0xc3, 0xfc, 0x44, 0x2e, 0x92, 0x57, 0x98, 0xf2, 0x97, 0xf6, 0xab, 0x1d, 0x4f,
+ 0x5b, 0x4b, 0xa7, 0x35, 0x67, 0x00, 0x08, 0x9b, 0x5f, 0x10, 0x38, 0x83, 0x49, 0xe1, 0x63, 0xe3,
+ 0x27, 0x1e, 0x05, 0xec, 0x17, 0x07, 0x66, 0x67, 0xbc, 0x80, 0x0a, 0x1e, 0x21, 0x14, 0xe1, 0x24,
+ 0x7b, 0x74, 0x7e, 0x3e, 0x0f, 0xae, 0x0e, 0x4f, 0x38, 0xd5, 0x4c, 0x2f, 0x6a, 0xd9, 0x17, 0xd2,
+ 0x41, 0xc4, 0x1d, 0x29, 0x09, 0x9b, 0xe3, 0x49, 0x50, 0xf0, 0xf6, 0x2e, 0x86, 0x8e, 0x80, 0xe4,
+ 0x41, 0x7b, 0xa3, 0x9c, 0x6a, 0xac, 0x1a, 0xc8, 0xdf, 0x98, 0x1b, 0xe1, 0xad, 0xe0, 0x84, 0xbd,
+ 0xb7, 0x1b, 0x62, 0x81, 0x7b, 0x1a, 0xda, 0xb3, 0x1c, 0x7c, 0xc1, 0x37, 0xd9, 0xbc, 0x78, 0x93,
+ 0x4d, 0x31, 0x92, 0x8a, 0x54, 0x3a, 0x7b, 0xf5, 0xf8, 0x4c, 0xdf, 0x11, 0xb4, 0x72, 0x6a, 0xa5,
+ 0x20, 0xf0, 0x4b, 0x2c, 0xfc, 0xff, 0x94, 0x4b, 0xd5, 0xf3, 0x0e, 0x3f, 0xb9, 0x96, 0xa2, 0x27,
+ 0x3c, 0xca, 0x63, 0x6b, 0x9f, 0x97, 0x80, 0xd6, 0x8c, 0x1c, 0x72, 0x28, 0xa8, 0xeb, 0x2e, 0xbc,
+ 0x6c, 0xc1, 0x2b, 0x9c, 0xfb, 0xd6, 0x9b, 0x84, 0xe3, 0x50, 0xf3, 0xba, 0x72, 0x80, 0x68, 0xfc,
+ 0xba, 0xf8, 0x00, 0x5c, 0xc4, 0xe2, 0x4d, 0xa7, 0x2b, 0x71, 0x02, 0xb1, 0xc3, 0x25, 0x70, 0x86,
+ 0x41, 0x75, 0xd9, 0x75, 0x76, 0x13, 0x24, 0xfb, 0x0a, 0x56, 0xb2, 0x1b, 0xbc, 0x64, 0xef, 0x4d,
+ 0x54, 0x97, 0x01, 0x84, 0x63, 0xd4, 0xf1, 0xfd, 0xa1, 0x1c, 0x9f, 0xc5, 0xc9, 0xb1, 0x72, 0x48,
+ 0xfa, 0xd9, 0xcb, 0xf2, 0x0f, 0xf2, 0x60, 0xce, 0x80, 0x66, 0x27, 0x1c, 0x04, 0xfe, 0x6f, 0xc6,
+ 0xbc, 0x7b, 0x1a, 0xc8, 0xfb, 0xd1, 0x3a, 0xcd, 0xe3, 0x0e, 0x56, 0x86, 0xfd, 0x12, 0x3f, 0xe0,
+ 0xe5, 0x1a, 0xfc, 0xd1, 0x81, 0xde, 0x42, 0x12, 0xb0, 0x0d, 0x65, 0x11, 0xdb, 0x30, 0x3f, 0xc8,
+ 0x36, 0xbc, 0x19, 0x1c, 0xef, 0x9a, 0x9e, 0x5f, 0xb9, 0xd8, 0xb2, 0x76, 0xa1, 0xe7, 0x9b, 0xbb,
+ 0x3d, 0x6c, 0x05, 0xca, 0x46, 0x7f, 0x32, 0x7f, 0x0f, 0x7c, 0xe2, 0x79, 0xb0, 0x41, 0x55, 0x3c,
+ 0x7c, 0xcc, 0xdc, 0x0f, 0x09, 0x1d, 0xfe, 0x1a, 0x56, 0x76, 0x3a, 0xcd, 0xb8, 0x6f, 0x84, 0xb5,
+ 0xa5, 0x53, 0x40, 0x5d, 0xd3, 0x9b, 0xcd, 0xd2, 0x0a, 0x3e, 0x13, 0x12, 0x38, 0x09, 0x75, 0xce,
+ 0x3e, 0x16, 0x89, 0x8f, 0x20, 0xad, 0xce, 0x45, 0x63, 0xaf, 0x72, 0x4c, 0x9d, 0x05, 0x53, 0x2e,
+ 0xec, 0x75, 0x2d, 0xe8, 0x29, 0x39, 0xed, 0x1b, 0x12, 0x28, 0x6e, 0xd8, 0x2e, 0x34, 0x3b, 0xda,
+ 0x33, 0xe3, 0x87, 0x90, 0x11, 0x95, 0x82, 0x8f, 0x7b, 0x95, 0xb8, 0x2a, 0x4b, 0x1b, 0x1d, 0x62,
+ 0x64, 0x2c, 0xf0, 0x89, 0x2d, 0xc7, 0xc6, 0x97, 0x9a, 0x79, 0x93, 0x3e, 0x3b, 0x05, 0x0a, 0xfa,
+ 0x6e, 0xcf, 0xdf, 0x3f, 0xfb, 0x58, 0x30, 0xdf, 0xf4, 0x5d, 0x68, 0xee, 0x32, 0x9b, 0xea, 0xbe,
+ 0x73, 0x09, 0xda, 0xc1, 0xa6, 0x3a, 0x7e, 0xb8, 0xeb, 0x4e, 0x30, 0x65, 0x3b, 0x9b, 0xe6, 0x9e,
+ 0xbf, 0xa3, 0x5e, 0x77, 0x20, 0x1a, 0x0d, 0x55, 0xbf, 0x06, 0x0d, 0xff, 0xf7, 0xa7, 0x77, 0xe3,
+ 0xa9, 0x55, 0xd1, 0x76, 0x4a, 0x7b, 0xfe, 0xce, 0xd2, 0xb5, 0x9f, 0xfe, 0xb3, 0x33, 0xb9, 0xcf,
+ 0xfd, 0xd9, 0x99, 0xdc, 0x57, 0xfe, 0xec, 0x4c, 0xee, 0xc7, 0xff, 0xfc, 0xcc, 0xb1, 0xcf, 0xfd,
+ 0xf9, 0x99, 0x63, 0x5f, 0xf8, 0xf3, 0x33, 0xc7, 0xbe, 0x47, 0xea, 0x5d, 0xbc, 0x58, 0xc4, 0x54,
+ 0x9e, 0xf4, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xca, 0x85, 0x9f, 0xc3, 0x2b, 0x02, 0x00,
}
func (m *Rpc) Marshal() (dAtA []byte, err error) {
@@ -85111,9 +85110,9 @@ func (m *RpcPublishingCreateRequest) MarshalToSizedBuffer(dAtA []byte) (int, err
_ = i
var l int
_ = l
- if m.IncludeSpaceInfo {
+ if m.JoinSpace {
i--
- if m.IncludeSpaceInfo {
+ if m.JoinSpace {
dAtA[i] = 1
} else {
dAtA[i] = 0
@@ -128509,7 +128508,7 @@ func (m *RpcPublishingCreateRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovCommands(uint64(l))
}
- if m.IncludeSpaceInfo {
+ if m.JoinSpace {
n += 2
}
return n
@@ -165553,7 +165552,7 @@ func (m *RpcPublishingCreateRequest) Unmarshal(dAtA []byte) error {
iNdEx = postIndex
case 4:
if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field IncludeSpaceInfo", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field JoinSpace", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
@@ -165570,7 +165569,7 @@ func (m *RpcPublishingCreateRequest) Unmarshal(dAtA []byte) error {
break
}
}
- m.IncludeSpaceInfo = bool(v != 0)
+ m.JoinSpace = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipCommands(dAtA[iNdEx:])
diff --git a/pb/protos/commands.proto b/pb/protos/commands.proto
index 2d606a395..7cef605fb 100644
--- a/pb/protos/commands.proto
+++ b/pb/protos/commands.proto
@@ -1497,7 +1497,7 @@ message Rpc {
string spaceId = 1;
string objectId = 2;
string uri = 3;
- bool includeSpaceInfo = 4;
+ bool joinSpace = 4;
}
message Response {
Error error = 1;
From 7dbe057a217a7cfabc178ddec7d1bd984bae624f Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 12:12:57 +0200
Subject: [PATCH 116/132] GO-5362 fix relation format
---
pkg/lib/bundle/relation.gen.go | 4 ++--
pkg/lib/bundle/relations.json | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/pkg/lib/bundle/relation.gen.go b/pkg/lib/bundle/relation.gen.go
index f3b0e482b..b7995fd27 100644
--- a/pkg/lib/bundle/relation.gen.go
+++ b/pkg/lib/bundle/relation.gen.go
@@ -9,7 +9,7 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
-const RelationChecksum = "6388e7cd19fabdc6953ebc6d1f2cd0208054d488b3fe538b7e013b38d7311108"
+const RelationChecksum = "a23583f8faef1cbfcd05ca1d2761538e67bbdd1336d1a467a0d657b5f986b313"
const (
RelationKeyTag domain.RelationKey = "tag"
RelationKeyCamera domain.RelationKey = "camera"
@@ -287,7 +287,7 @@ var (
DataSource: model.Relation_details,
Description: "",
- Format: model.RelationFormat_bool,
+ Format: model.RelationFormat_checkbox,
Hidden: true,
Id: "_brautoWidgetDisabled",
Key: "autoWidgetDisabled",
diff --git a/pkg/lib/bundle/relations.json b/pkg/lib/bundle/relations.json
index a73c38167..75c3c2160 100644
--- a/pkg/lib/bundle/relations.json
+++ b/pkg/lib/bundle/relations.json
@@ -1518,7 +1518,7 @@
"source": "details"
},
{
- "format": "bool",
+ "format": "checkbox",
"hidden": true,
"key": "autoWidgetDisabled",
"maxCount": 0,
From 80d9e88d978d6aee7c1d7ebfbf835a6e920bedb0 Mon Sep 17 00:00:00 2001
From: Sergey Cherepanov
Date: Mon, 31 Mar 2025 12:35:27 +0200
Subject: [PATCH 117/132] GO-5377 update any-sync / fix closed conn release /
quic write deadline (#2279)
---
core/debug/netcheck.go | 2 +-
go.mod | 2 +-
go.sum | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/core/debug/netcheck.go b/core/debug/netcheck.go
index eff9f1b60..8940cd019 100644
--- a/core/debug/netcheck.go
+++ b/core/debug/netcheck.go
@@ -223,7 +223,7 @@ func (c config) GetYamux() yamux.Config {
func (c config) GetQuic() quic.Config {
return quic.Config{
- WriteTimeoutSec: 60,
+ WriteTimeoutSec: 1200,
DialTimeoutSec: 60,
KeepAlivePeriodSec: 120,
}
diff --git a/go.mod b/go.mod
index 90c579cb2..c9c72031c 100644
--- a/go.mod
+++ b/go.mod
@@ -8,7 +8,7 @@ require (
github.com/VividCortex/ewma v1.2.0
github.com/adrium/goheif v0.0.0-20230113233934-ca402e77a786
github.com/anyproto/any-store v0.1.12
- github.com/anyproto/any-sync v0.6.8
+ github.com/anyproto/any-sync v0.6.10
github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a
github.com/anyproto/go-chash v0.1.0
github.com/anyproto/go-naturaldate/v2 v2.0.2-0.20230524105841-9829cfd13438
diff --git a/go.sum b/go.sum
index cc79e314e..2958e410f 100644
--- a/go.sum
+++ b/go.sum
@@ -84,8 +84,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk
github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
github.com/anyproto/any-store v0.1.12 h1:VgTyfxM4BvFnYMbwWxV9FQmXWNlwp9xriWFh6VOjcm0=
github.com/anyproto/any-store v0.1.12/go.mod h1:T6WNuCHcuXIRiaZ+QAcBHdxIbPbgNCMIf1u3P9jvAyU=
-github.com/anyproto/any-sync v0.6.8 h1:aMS7U+RWCqAqaCokCQjtBbiEsoBSBdLGz0kckxqMB2w=
-github.com/anyproto/any-sync v0.6.8/go.mod h1:P1hd0Hrc66juMNlr/k7SG55aEwOrBAsKGkh9TsLdml8=
+github.com/anyproto/any-sync v0.6.10 h1:TV3yLkp5NK7FkddUvVtfxT01t/Xi+DlKbvisGEQwmC0=
+github.com/anyproto/any-sync v0.6.10/go.mod h1:TSKgCoTV40Bt8AfCh3RxPUUAfYGrhc8Mzh8/AiVlvX4=
github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a h1:ZZM+0OUCQMWSLSflpkf0ZMVo3V76qEDDIXPpQOClNs0=
github.com/anyproto/anytype-publish-server/publishclient v0.0.0-20250131145601-de288583ff2a/go.mod h1:4fkueCZcGniSMXkrwESO8zzERrh/L7WHimRNWecfGM0=
github.com/anyproto/badger/v4 v4.2.1-0.20240110160636-80743fa3d580 h1:Ba80IlCCxkZ9H1GF+7vFu/TSpPvbpDCxXJ5ogc4euYc=
From e12520ddd6694b416b69f5187c8169a3cf8594c1 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 12:38:21 +0200
Subject: [PATCH 118/132] GO-5376 All objects
---
core/block/editor/archive.go | 2 +-
core/block/editor/widget.go | 24 ++++++++++++++++++++++++
core/block/editor/widget/widget.go | 1 +
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/core/block/editor/archive.go b/core/block/editor/archive.go
index 7820d402a..af987c580 100644
--- a/core/block/editor/archive.go
+++ b/core/block/editor/archive.go
@@ -55,7 +55,7 @@ func (p *Archive) Init(ctx *smartblock.InitContext) (err error) {
func (p *Archive) CreationStateMigration(ctx *smartblock.InitContext) migration.Migration {
return migration.Migration{
- Version: 2,
+ Version: 3,
Proc: func(st *state.State) {
template.InitTemplate(st,
template.WithEmpty,
diff --git a/core/block/editor/widget.go b/core/block/editor/widget.go
index 19a9855a6..7992cc6ba 100644
--- a/core/block/editor/widget.go
+++ b/core/block/editor/widget.go
@@ -14,6 +14,7 @@ import (
"github.com/anyproto/anytype-heart/core/block/simple"
"github.com/anyproto/anytype-heart/core/domain"
"github.com/anyproto/anytype-heart/core/session"
+ "github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore/spaceindex"
@@ -56,6 +57,7 @@ func (w *WidgetObject) CreationStateMigration(ctx *smartblock.InitContext) migra
return migration.Migration{
Version: 2,
Proc: func(st *state.State) {
+ // we purposefully do not add the ALl Objects widget here(as in migration3), because for new users we don't want to auto-create it
template.InitTemplate(st,
template.WithEmpty,
template.WithObjectTypes([]domain.TypeKey{bundle.TypeKeyDashboard}),
@@ -112,6 +114,28 @@ func (w *WidgetObject) StateMigrations() migration.Migrations {
},
},
+ {
+ Version: 3,
+ Proc: func(s *state.State) {
+ // add All Objects widget for existing spaces
+ _, err := w.CreateBlock(s, &pb.RpcBlockCreateWidgetRequest{
+ ContextId: s.RootId(),
+ WidgetLayout: model.BlockContentWidget_Link,
+ Position: model.Block_InnerFirst,
+ TargetId: s.RootId(),
+ ViewId: "",
+ Block: &model.Block{
+ Id: "allObjects",
+ Content: &model.BlockContentOfLink{Link: &model.BlockContentLink{
+ TargetBlockId: widget.DefaultWidgetAll,
+ }},
+ },
+ })
+ if err != nil {
+ log.Warnf("all objects migration failed: %s", err.Error())
+ }
+ },
+ },
},
)
}
diff --git a/core/block/editor/widget/widget.go b/core/block/editor/widget/widget.go
index 86047cc69..93e8c014f 100644
--- a/core/block/editor/widget/widget.go
+++ b/core/block/editor/widget/widget.go
@@ -20,6 +20,7 @@ const (
DefaultWidgetRecent = "recent"
DefaultWidgetCollection = "collection"
DefaultWidgetBin = "bin"
+ DefaultWidgetAll = "allObject"
DefaultWidgetRecentOpen = "recentOpen"
autoWidgetBlockSuffix = "-wrapper" // in case blockId is specifically provided to avoid bad tree merges
)
From f8b723b91eccddc430dade8df15df5e76212948b Mon Sep 17 00:00:00 2001
From: Anastasia Shemyakinskaya
<36507473+AnastasiaShemyakinskaya@users.noreply.github.com>
Date: Mon, 31 Mar 2025 15:01:56 +0300
Subject: [PATCH 119/132] GO-5249: Wrong file permissions on export (#2278)
Signed-off-by: AnastasiaShemyakinskaya
---
core/block/export/export.go | 5 +++++
core/block/export/writer_test.go | 19 +++++++++++++++++++
2 files changed, 24 insertions(+)
diff --git a/core/block/export/export.go b/core/block/export/export.go
index 9c34bf8ec..6da3b7085 100644
--- a/core/block/export/export.go
+++ b/core/block/export/export.go
@@ -63,6 +63,8 @@ const (
FilesObjects = "filesObjects"
Files = "files"
+
+ defaultFileName = "untitled"
)
var log = logging.Logger("anytype-mw-export")
@@ -1258,6 +1260,9 @@ func (fn *namer) Get(path, hash, title, ext string) (name string) {
title = slug.Make(strings.TrimSuffix(title, ext))
name = text.TruncateEllipsized(title, fileLenLimit)
name = strings.TrimSuffix(name, text.TruncateEllipsis)
+ if name == "" {
+ name = defaultFileName
+ }
var (
i = 0
b = 36
diff --git a/core/block/export/writer_test.go b/core/block/export/writer_test.go
index 53be6b6ca..6126f3f7f 100644
--- a/core/block/export/writer_test.go
+++ b/core/block/export/writer_test.go
@@ -75,3 +75,22 @@ func TestZipWriter_WriteFile(t *testing.T) {
}
assert.True(t, found)
}
+
+func TestZipWriter_Get(t *testing.T) {
+ t.Run("file without name", func(t *testing.T) {
+ // given
+ path, err := ioutil.TempDir("", "")
+ require.NoError(t, err)
+ defer os.RemoveAll(path)
+
+ wr, err := newZipWriter(path, uniqName()+".zip")
+ require.NoError(t, err)
+
+ // when
+ name := wr.Namer().Get(Files, "hash", "", "")
+
+ // then
+ require.NoError(t, wr.Close())
+ assert.Equal(t, filepath.Join(Files, defaultFileName), name)
+ })
+}
From beb98a02a20210a1bd6959bd50e132b2663e550e Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 14:10:49 +0200
Subject: [PATCH 120/132] GO-5376 fix
---
core/block/editor/archive.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/block/editor/archive.go b/core/block/editor/archive.go
index af987c580..7820d402a 100644
--- a/core/block/editor/archive.go
+++ b/core/block/editor/archive.go
@@ -55,7 +55,7 @@ func (p *Archive) Init(ctx *smartblock.InitContext) (err error) {
func (p *Archive) CreationStateMigration(ctx *smartblock.InitContext) migration.Migration {
return migration.Migration{
- Version: 3,
+ Version: 2,
Proc: func(st *state.State) {
template.InitTemplate(st,
template.WithEmpty,
From 773adfcaf86670f35fedc70d6df1020ccb37ffad Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 14:13:28 +0200
Subject: [PATCH 121/132] GO-5303 fixes
---
core/block/service.go | 3 ---
core/block/widget.go | 5 ++---
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/core/block/service.go b/core/block/service.go
index 9e801e050..64934e594 100644
--- a/core/block/service.go
+++ b/core/block/service.go
@@ -35,7 +35,6 @@ import (
"github.com/anyproto/anytype-heart/core/files"
"github.com/anyproto/anytype-heart/core/files/fileobject"
"github.com/anyproto/anytype-heart/core/files/fileuploader"
- "github.com/anyproto/anytype-heart/core/notifications"
"github.com/anyproto/anytype-heart/core/session"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
@@ -101,7 +100,6 @@ type Service struct {
builtinObjectService builtinObjects
fileObjectService fileobject.Service
detailsService detailservice.Service
- notificationService notifications.Notifications
fileService files.Service
fileUploaderService fileuploader.Service
@@ -129,7 +127,6 @@ func (s *Service) Init(a *app.App) (err error) {
s.objectStore = a.MustComponent(objectstore.CName).(objectstore.ObjectStore)
s.restriction = a.MustComponent(restriction.CName).(restriction.Service)
s.bookmark = a.MustComponent("bookmark-importer").(bookmarksvc.Service)
- s.notificationService = app.MustComponent[notifications.Notifications](a)
s.objectCreator = app.MustComponent[objectcreator.Service](a)
s.templateService = app.MustComponent[template.Service](a)
s.spaceService = a.MustComponent(space.CName).(space.Service)
diff --git a/core/block/widget.go b/core/block/widget.go
index 3f3e70b14..1057e79c0 100644
--- a/core/block/widget.go
+++ b/core/block/widget.go
@@ -96,7 +96,7 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
}
widgetObjectId := space.DerivedIDs().Widgets
spaceIndex := s.objectStore.SpaceIndex(space.Id())
- widgetDetails, err := s.objectStore.SpaceIndex(space.Id()).GetDetails(widgetObjectId)
+ widgetDetails, err := spaceIndex.GetDetails(widgetObjectId)
if err == nil {
keys := widgetDetails.Get(bundle.RelationKeyAutoWidgetTargets).StringList()
if slices.Contains(keys, typeId) {
@@ -105,7 +105,7 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
}
}
// this is not optimal, maybe it should be some cheaper way
- records, err := s.objectStore.SpaceIndex(space.Id()).QueryRaw(&database.Filters{FilterObj: database.FiltersAnd{
+ records, err := spaceIndex.QueryRaw(&database.Filters{FilterObj: database.FiltersAnd{
database.FilterEq{
Key: bundle.RelationKeyType,
Cond: model.BlockContentDataviewFilter_Equal,
@@ -141,5 +141,4 @@ func (s *Service) CreateTypeWidgetIfMissing(ctx context.Context, spaceId string,
return cache.DoState(s, widgetObjectId, func(st *state.State, w widget.Widget) (err error) {
return w.AddAutoWidget(st, typeId, key.String(), addr.ObjectTypeAllViewId, model.BlockContentWidget_View, targetName)
})
- return err
}
From ead1a4f57ccddb6dccbb5a47303272275edf8bf7 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 14:16:05 +0200
Subject: [PATCH 122/132] GO-5303 fixed
---
core/block/detailservice/set_details.go | 2 +-
core/block/editor/archive.go | 2 +-
core/block/editor/widget/widget.go | 3 +++
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/core/block/detailservice/set_details.go b/core/block/detailservice/set_details.go
index d1b38a66f..f1e4b01ed 100644
--- a/core/block/detailservice/set_details.go
+++ b/core/block/detailservice/set_details.go
@@ -273,6 +273,6 @@ func (s *service) createFavoriteWidget(spc clientspace.Space) error {
}
return cache.DoState(s.objectGetter, widgetObjectId, func(st *state.State, w widget.Widget) (err error) {
- return w.AddAutoWidget(st, widget.DefaultWidgetFavorite, widget.DefaultWidgetFavorite, "", model.BlockContentWidget_CompactList, "Favorites")
+ return w.AddAutoWidget(st, widget.DefaultWidgetFavorite, widget.DefaultWidgetFavorite, "", model.BlockContentWidget_CompactList, widget.DefaultWidgetFavoriteEventName)
})
}
diff --git a/core/block/editor/archive.go b/core/block/editor/archive.go
index 2806d8b20..748fc1d8a 100644
--- a/core/block/editor/archive.go
+++ b/core/block/editor/archive.go
@@ -100,7 +100,7 @@ func (p *Archive) autoInstallBinWidget() error {
st := sb.NewState()
if w, ok := sb.(widget.Widget); ok {
// We rely on AddAutoWidget to check if the widget was already installed/removed before
- err = w.AddAutoWidget(st, widget.DefaultWidgetBin, widget.DefaultWidgetBin, "", model.BlockContentWidget_Link, "Bin")
+ err = w.AddAutoWidget(st, widget.DefaultWidgetBin, widget.DefaultWidgetBin, "", model.BlockContentWidget_Link, widget.DefaultWidgetBinEventName)
if err != nil {
return err
}
diff --git a/core/block/editor/widget/widget.go b/core/block/editor/widget/widget.go
index e8d003cc9..a5d6eb0ea 100644
--- a/core/block/editor/widget/widget.go
+++ b/core/block/editor/widget/widget.go
@@ -22,6 +22,9 @@ const (
DefaultWidgetBin = "bin"
DefaultWidgetRecentOpen = "recentOpen"
autoWidgetBlockSuffix = "-wrapper" // in case blockId is specifically provided to avoid bad tree merges
+
+ DefaultWidgetFavoriteEventName = "Favorite"
+ DefaultWidgetBinEventName = "Bin"
)
type Widget interface {
From 2eeb80cc2de70945b499ffe67415798d997d40a1 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 14:17:33 +0200
Subject: [PATCH 123/132] GO-5376 rename DefaultWidgetAll
---
core/block/editor/widget/widget.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/block/editor/widget/widget.go b/core/block/editor/widget/widget.go
index 93e8c014f..c35ac7d29 100644
--- a/core/block/editor/widget/widget.go
+++ b/core/block/editor/widget/widget.go
@@ -20,7 +20,7 @@ const (
DefaultWidgetRecent = "recent"
DefaultWidgetCollection = "collection"
DefaultWidgetBin = "bin"
- DefaultWidgetAll = "allObject"
+ DefaultWidgetAll = "allObjects"
DefaultWidgetRecentOpen = "recentOpen"
autoWidgetBlockSuffix = "-wrapper" // in case blockId is specifically provided to avoid bad tree merges
)
From cf52393df19c29ad7a42314eba477b5ba2bb1d7a Mon Sep 17 00:00:00 2001
From: Anastasia Shemyakinskaya
<36507473+anastasiashemyakinskaya@users.noreply.github.com>
Date: Mon, 31 Mar 2025 14:18:27 +0200
Subject: [PATCH 124/132] GO-5320: fix tests
Signed-off-by: AnastasiaShemyakinskaya
---
core/block/import/common/collection_test.go | 43 +++------------------
core/block/import/importer_test.go | 4 ++
2 files changed, 10 insertions(+), 37 deletions(-)
diff --git a/core/block/import/common/collection_test.go b/core/block/import/common/collection_test.go
index 1d69268f6..e616e72db 100644
--- a/core/block/import/common/collection_test.go
+++ b/core/block/import/common/collection_test.go
@@ -9,7 +9,6 @@ import (
"github.com/anyproto/anytype-heart/core/block/collection"
"github.com/anyproto/anytype-heart/core/domain"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
- "github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
func TestMakeImportCollection(t *testing.T) {
@@ -18,57 +17,32 @@ func TestMakeImportCollection(t *testing.T) {
needToAddDate bool
shouldBeFavorite bool
shouldAddRelation bool
- widgetSnapshot bool
}{
- {"all false", false, false, false, false},
- {"add date", true, false, false, false},
- {"add favorite", false, true, false, false},
- {"add relations", false, false, true, false},
- {"with existing widget snapshot", false, false, false, true},
- {"all True", true, true, true, true},
+ {"all false", false, false, false},
+ {"add date", true, false, false},
+ {"add favorite", false, true, false},
+ {"add relations", false, false, true},
+ {"all True", true, true, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
importer := NewImportCollection(collection.New())
- var widget *Snapshot
- if tt.widgetSnapshot {
- widget = &Snapshot{
- Id: "widget-id",
- FileName: "existing",
- Snapshot: &SnapshotModel{
- Data: &StateSnapshot{
- Blocks: []*model.Block{
- {
- Id: "root-block",
- ChildrenIds: []string{},
- Content: &model.BlockContentOfSmartblock{
- Smartblock: &model.BlockContentSmartblock{},
- },
- },
- },
- },
- },
- }
- }
-
req := NewImportCollectionSetting(
WithCollectionName("My Collection"),
WithTargetObjects([]string{"obj1", "obj2"}),
WithIcon("icon.png"),
- WithWidgetSnapshot(widget),
)
req.needToAddDate = tt.needToAddDate
req.shouldBeFavorite = tt.shouldBeFavorite
req.shouldAddRelations = tt.shouldAddRelation
- root, widgetSnap, err := importer.MakeImportCollection(req)
+ root, err := importer.MakeImportCollection(req)
assert.NoError(t, err)
assert.NotNil(t, root)
- assert.NotNil(t, widgetSnap)
if tt.needToAddDate {
assert.Contains(t, root.FileName, time.Now().Format("2006"))
@@ -82,11 +56,6 @@ func TestMakeImportCollection(t *testing.T) {
assert.Equal(t, domain.Bool(false), root.Snapshot.Data.Details.Get(bundle.RelationKeyIsFavorite))
}
- if tt.widgetSnapshot {
- assert.Equal(t, "existing", widgetSnap.FileName)
- } else {
- assert.Equal(t, "rootWidget", widgetSnap.FileName)
- }
})
}
}
diff --git a/core/block/import/importer_test.go b/core/block/import/importer_test.go
index 782699cd7..98c23ad7d 100644
--- a/core/block/import/importer_test.go
+++ b/core/block/import/importer_test.go
@@ -16,6 +16,7 @@ import (
"github.com/anyproto/anytype-heart/core/block/import/web/parsers/mock_parsers"
"github.com/anyproto/anytype-heart/core/block/process"
"github.com/anyproto/anytype-heart/core/domain"
+ "github.com/anyproto/anytype-heart/space/mock_space"
"github.com/anyproto/anytype-heart/core/block/import/common"
"github.com/anyproto/anytype-heart/core/block/import/common/mock_common"
@@ -971,6 +972,9 @@ func Test_ImportRootCollectionInResponse(t *testing.T) {
fileSync.EXPECT().SendImportEvents().Return().Times(1)
fileSync.EXPECT().ClearImportEvents().Return().Times(1)
i.fileSync = fileSync
+ mockSpaceService := mock_space.NewMockService(t)
+ mockSpaceService.EXPECT().Get(nil, "space1").Return(nil, fmt.Errorf("not found"))
+ i.spaceService = mockSpaceService
// when
importRequest := &ImportRequest{
From 682a655798fa4b298c88e8f83de9257ead2240a3 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 15:28:41 +0200
Subject: [PATCH 125/132] GO-5303 remove unused func
---
core/block/editor/smartblock/detailsinject.go | 5 -----
1 file changed, 5 deletions(-)
diff --git a/core/block/editor/smartblock/detailsinject.go b/core/block/editor/smartblock/detailsinject.go
index cde641403..7afc67721 100644
--- a/core/block/editor/smartblock/detailsinject.go
+++ b/core/block/editor/smartblock/detailsinject.go
@@ -385,11 +385,6 @@ func (sb *smartBlock) changeResolvedLayoutForObjects(msgs []simple.EventMessage,
return nil
}
-func (sb *smartBlock) getTypeDetails() (*domain.Details, error) {
- typeId := sb.LocalDetails().GetString(bundle.RelationKeyType)
- return sb.spaceIndex.GetDetails(typeId)
-}
-
func getLayoutFromMessages(msgs []simple.EventMessage) (layout int64, found bool) {
for _, ev := range msgs {
if amend := ev.Msg.GetObjectDetailsAmend(); amend != nil {
From f0d3cde2b030e9ed4c34b960f236d47349b5138a Mon Sep 17 00:00:00 2001
From: Mikhail
Date: Mon, 31 Mar 2025 15:32:23 +0200
Subject: [PATCH 126/132] GO-5366 Add debug stat (#2277)
---
pkg/lib/localstore/ftsearch/ftsearch.go | 18 ++++++++++++++++++
pkg/lib/localstore/objectstore/service.go | 18 ++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/pkg/lib/localstore/ftsearch/ftsearch.go b/pkg/lib/localstore/ftsearch/ftsearch.go
index 92ea248bc..52b2e6ffa 100644
--- a/pkg/lib/localstore/ftsearch/ftsearch.go
+++ b/pkg/lib/localstore/ftsearch/ftsearch.go
@@ -25,6 +25,7 @@ import (
"unicode"
"github.com/anyproto/any-sync/app"
+ "github.com/anyproto/any-sync/app/debugstat"
tantivy "github.com/anyproto/tantivy-go"
"github.com/valyala/fastjson"
@@ -102,6 +103,19 @@ type ftSearch struct {
lang tantivy.Language
}
+func (f *ftSearch) ProvideStat() any {
+ count, _ := f.DocCount()
+ return count
+}
+
+func (f *ftSearch) StatId() string {
+ return "doc_count"
+}
+
+func (f *ftSearch) StatType() string {
+ return CName
+}
+
func TantivyNew() FTSearch {
return new(ftSearch)
}
@@ -138,6 +152,10 @@ func (f *ftSearch) DeleteObject(objectId string) error {
func (f *ftSearch) Init(a *app.App) error {
repoPath := app.MustComponent[wallet.Wallet](a).RepoPath()
+ statService, _ := app.GetComponent[debugstat.StatService](a)
+ if statService != nil {
+ statService.AddProvider(f)
+ }
f.lang = validateLanguage(app.MustComponent[wallet.Wallet](a).FtsPrimaryLang())
f.rootPath = filepath.Join(repoPath, ftsDir2)
f.blevePath = filepath.Join(repoPath, ftsDir)
diff --git a/pkg/lib/localstore/objectstore/service.go b/pkg/lib/localstore/objectstore/service.go
index fdd5393da..13be262e2 100644
--- a/pkg/lib/localstore/objectstore/service.go
+++ b/pkg/lib/localstore/objectstore/service.go
@@ -11,6 +11,7 @@ import (
anystore "github.com/anyproto/any-store"
"github.com/anyproto/any-store/anyenc"
"github.com/anyproto/any-sync/app"
+ "github.com/anyproto/any-sync/app/debugstat"
"github.com/anyproto/any-sync/coordinator/coordinatorproto"
"golang.org/x/exp/maps"
@@ -124,6 +125,19 @@ type dsObjectStore struct {
componentCtxCancel context.CancelFunc
}
+func (s *dsObjectStore) ProvideStat() any {
+ count, _ := s.ListIdsCrossSpace()
+ return len(count)
+}
+
+func (s *dsObjectStore) StatId() string {
+ return "ds_count"
+}
+
+func (s *dsObjectStore) StatType() string {
+ return CName
+}
+
func (s *dsObjectStore) IterateSpaceIndex(f func(store spaceindex.Store) error) error {
s.Lock()
spaceIndexes := make([]spaceindex.Store, 0, len(s.spaceIndexes))
@@ -169,6 +183,10 @@ func (s *dsObjectStore) Init(a *app.App) (err error) {
s.setDefaultConfig()
s.oldStore = app.MustComponent[oldstore.Service](a)
s.techSpaceIdProvider = app.MustComponent[TechSpaceIdProvider](a)
+ statService, _ := app.GetComponent[debugstat.StatService](a)
+ if statService != nil {
+ statService.AddProvider(s)
+ }
return nil
}
From 09d08045d253abd3a781595c212b25309e07dfac Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 16:17:41 +0200
Subject: [PATCH 127/132] GO-4459 remove member update
---
core/api/docs/docs.go | 4 +-
core/api/docs/swagger.json | 4 +-
core/api/docs/swagger.yaml | 81 ------------------------------
core/api/internal/space/handler.go | 46 -----------------
4 files changed, 4 insertions(+), 131 deletions(-)
diff --git a/core/api/docs/docs.go b/core/api/docs/docs.go
index 8b13e380e..b06ec07b5 100644
--- a/core/api/docs/docs.go
+++ b/core/api/docs/docs.go
@@ -6,10 +6,10 @@ import "github.com/swaggo/swag/v2"
const docTemplate = `{
"schemes": {{ marshal .Schemes }},
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"{{escape .Description}}","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"{{.Title}}","version":"{{.Version}}"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to ` + "`" + `active` + "`" + ` and specifying a role (` + "`" + `reader` + "`" + ` or ` + "`" + `writer` + "`" + `), reject a joining member by setting the status to ` + "`" + `declined` + "`" + `, remove a member by setting the status to ` + "`" + `removed` + "`" + `, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with ` + "`" + `_participant` + "`" + `) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.json b/core/api/docs/swagger.json
index e25d58240..ae76dc771 100644
--- a/core/api/docs/swagger.json
+++ b/core/api/docs/swagger.json
@@ -1,8 +1,8 @@
{
- "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"space.UpdateMemberRequest":{"properties":{"role":{"description":"Role to assign if approving a joining member","enum":["viewer","editor"],"example":"viewer","type":"string"},"status":{"description":"Status of the member","enum":["active","removed","declined"],"example":"active","type":"string"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
+ "components": {"schemas":{"auth.DisplayCodeResponse":{"properties":{"challenge_id":{"description":"The challenge id associated with the displayed code and needed to solve the challenge for token","example":"67647f5ecda913e9a2e11b26","type":"string"}},"type":"object"},"auth.TokenResponse":{"properties":{"app_key":{"description":"The permanent app key","example":"zhSG/zQRmgADyilWPtgdnfo1qD60oK02/SVgi1GaFt6=","type":"string"},"session_token":{"description":"The ephemeral session token","example":"eyJhbGciOeJIRzI1NiIsInR5cCI6IkpXVCJ1.eyJzZWVkIjaiY0dmVndlUnAifQ.Y1EZecYnwmvMkrXKOa2XJnAbaRt34urBabe06tmDQII","type":"string"}},"type":"object"},"export.ObjectExportResponse":{"properties":{"markdown":{"example":"# This is the title\n...","type":"string"}},"type":"object"},"list.Filter":{"properties":{"condition":{"description":"The filter condition","example":"contains","type":"string"},"format":{"description":"The format of the property used for filtering","example":"text","type":"string"},"id":{"description":"The id of the filter","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for filtering","example":"name","type":"string"},"value":{"description":"The value used for filtering","example":"Some value...","type":"string"}},"type":"object"},"list.Sort":{"properties":{"format":{"description":"The format of the property used for sorting","example":"text","type":"string"},"id":{"description":"The id of the sort","example":"67bf3f21cda9134102e2422c","type":"string"},"property_key":{"description":"The property key used for sorting","example":"name","type":"string"},"sort_type":{"description":"The sort direction","example":"asc","type":"string"}},"type":"object"},"list.View":{"properties":{"filters":{"description":"The list of filters","items":{"$ref":"#/components/schemas/list.Filter"},"type":"array","uniqueItems":false},"id":{"description":"The id of the view","example":"67bf3f21cda9134102e2422c","type":"string"},"layout":{"description":"The layout of the view","enum":["grid","table"],"example":"grid","type":"string"},"name":{"description":"The name of the view","example":"All","type":"string"},"sorts":{"description":"The list of sorts","items":{"$ref":"#/components/schemas/list.Sort"},"type":"array","uniqueItems":false}},"type":"object"},"object.Block":{"properties":{"align":{"description":"The alignment of the block","enum":["AlignLeft","AlignCenter","AlignRight","AlignJustify"],"example":"AlignLeft","type":"string"},"background_color":{"description":"The background color of the block","example":"red","type":"string"},"children_ids":{"description":"The ids of the block's children","example":["['6797ce8ecda913cde14b02dc']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"file":{"$ref":"#/components/schemas/object.File"},"id":{"description":"The id of the block","example":"64394517de52ad5acb89c66c","type":"string"},"property":{"$ref":"#/components/schemas/object.Property"},"text":{"$ref":"#/components/schemas/object.Text"},"vertical_align":{"description":"The vertical alignment of the block","enum":["VerticalAlignTop","VerticalAlignMiddle","VerticalAlignBottom"],"example":"VerticalAlignTop","type":"string"}},"type":"object"},"object.CreateObjectRequest":{"properties":{"body":{"description":"The body of the object","example":"This is the body of the object. Markdown syntax is supported here.","type":"string"},"description":{"description":"The description of the object","example":"This is a description of the object.","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"name":{"description":"The name of the object","example":"My object","type":"string"},"source":{"description":"The source url, only applicable for bookmarks","example":"https://bookmark-source.com","type":"string"},"template_id":{"description":"The id of the template to use","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"type_key":{"description":"The key of the type of object to create","example":"ot-page","type":"string"}},"type":"object"},"object.File":{"description":"The file of the block, if applicable","properties":{"added_at":{"description":"The added at of the file","type":"integer"},"hash":{"description":"The hash of the file","type":"string"},"mime":{"description":"The mime of the file","type":"string"},"name":{"description":"The name of the file","type":"string"},"size":{"description":"The size of the file","type":"integer"},"state":{"description":"The state of the file","type":"string"},"style":{"description":"The style of the file","type":"string"},"target_object_id":{"description":"The target object id of the file","type":"string"},"type":{"description":"The type of the file","type":"string"}},"type":"object"},"object.Object":{"description":"The object","properties":{"archived":{"description":"Whether the object is archived","example":false,"type":"boolean"},"blocks":{"description":"The blocks of the object","items":{"$ref":"#/components/schemas/object.Block"},"type":"array","uniqueItems":false},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the object","example":"bafyreie6n5l5nkbjal37su54cha4coy7qzuhrnajluzv5qd5jvtsrxkequ","type":"string"},"layout":{"description":"The layout of the object","example":"basic","type":"string"},"name":{"description":"The name of the object","example":"My object","type":"string"},"object":{"description":"The data model of the object","example":"object","type":"string"},"properties":{"description":"The properties of the object","items":{"$ref":"#/components/schemas/object.Property"},"type":"array","uniqueItems":false},"snippet":{"description":"The snippet of the object, especially important for notes as they don't have a name","example":"The beginning of the object body...","type":"string"},"space_id":{"description":"The id of the space the object is in","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"object.ObjectResponse":{"properties":{"object":{"$ref":"#/components/schemas/object.Object"}},"type":"object"},"object.Property":{"description":"The property block, if applicable","properties":{"checkbox":{"description":"The checkbox value, if applicable","example":true,"type":"boolean"},"date":{"description":"The date value, if applicable","example":"2025-02-14T12:34:56Z","type":"string"},"email":{"description":"The email value, if applicable","example":"example@example.com","type":"string"},"file":{"description":"The file references, if applicable","example":["['fileId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"format":{"description":"The format of the property","enum":["text","number","select","multi_select","date","file","checkbox","url","email","phone","object"],"example":"date","type":"string"},"id":{"description":"The id of the property","example":"last_modified_date","type":"string"},"multi_select":{"description":"The multi-select values, if applicable","items":{"$ref":"#/components/schemas/object.Tag"},"type":"array","uniqueItems":false},"name":{"description":"The name of the property","example":"Last modified date","type":"string"},"number":{"description":"The number value, if applicable","example":42,"type":"number"},"object":{"description":"The object references, if applicable","example":["['objectId']"],"items":{"type":"string"},"type":"array","uniqueItems":false},"phone":{"description":"The phone number value, if applicable","example":"+1234567890","type":"string"},"select":{"$ref":"#/components/schemas/object.Tag"},"text":{"description":"The text value, if applicable","example":"Some text...","type":"string"},"url":{"description":"The url value, if applicable","example":"https://example.com","type":"string"}},"type":"object"},"object.Tag":{"description":"The select value, if applicable","properties":{"color":{"description":"The color of the tag","example":"yellow","type":"string"},"id":{"description":"The id of the tag","example":"bafyreiaixlnaefu3ci22zdenjhsdlyaeeoyjrsid5qhfeejzlccijbj7sq","type":"string"},"name":{"description":"The name of the tag","example":"in-progress","type":"string"}},"type":"object"},"object.Template":{"description":"The template","properties":{"archived":{"description":"Whether the template is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the template","example":"bafyreictrp3obmnf6dwejy5o4p7bderaaia4bdg2psxbfzf44yya5uutge","type":"string"},"name":{"description":"The name of the template","example":"My template","type":"string"},"object":{"description":"The data model of the object","example":"template","type":"string"}},"type":"object"},"object.TemplateResponse":{"properties":{"template":{"$ref":"#/components/schemas/object.Template"}},"type":"object"},"object.Text":{"description":"The text of the block, if applicable","properties":{"checked":{"description":"Whether the text is checked","example":true,"type":"boolean"},"color":{"description":"The color of the text","example":"red","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"style":{"description":"The style of the text","enum":["Paragraph","Header1","Header2","Header3","Header4","Quote","Code","Title","Checkbox","Marked","Numbered","Toggle","Description","Callout"],"example":"Paragraph","type":"string"},"text":{"description":"The text","example":"Some text...","type":"string"}},"type":"object"},"object.Type":{"description":"The type of the object","properties":{"archived":{"description":"Whether the type is archived","example":false,"type":"boolean"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the type (which is unique across spaces)","example":"bafyreigyb6l5szohs32ts26ku2j42yd65e6hqy2u3gtzgdwqv6hzftsetu","type":"string"},"key":{"description":"The key of the type (can be the same across spaces for known types)","example":"ot-page","type":"string"},"name":{"description":"The name of the type","example":"Page","type":"string"},"object":{"description":"The data model of the object","example":"type","type":"string"},"recommended_layout":{"description":"The recommended layout of the type","example":"todo","type":"string"}},"type":"object"},"object.TypeResponse":{"properties":{"type":{"$ref":"#/components/schemas/object.Type"}},"type":"object"},"pagination.PaginatedResponse-list_View":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/list.View"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Object":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Object"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Template":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Template"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-object_Type":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/object.Type"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Member":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Member"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginatedResponse-space_Space":{"properties":{"data":{"description":"The list of items in the current result set","items":{"$ref":"#/components/schemas/space.Space"},"type":"array","uniqueItems":false},"pagination":{"$ref":"#/components/schemas/pagination.PaginationMeta"}},"type":"object"},"pagination.PaginationMeta":{"description":"The pagination metadata for the response","properties":{"has_more":{"description":"Indicates if there are more items available beyond the current result set","example":true,"type":"boolean"},"limit":{"description":"The maximum number of items returned in the result set","example":100,"type":"integer"},"offset":{"description":"The number of items skipped before starting to collect the result set","example":0,"type":"integer"},"total":{"description":"The total number of items available for the endpoint","example":1024,"type":"integer"}},"type":"object"},"search.SearchRequest":{"properties":{"query":{"description":"The search term to look for in object names and snippets","example":"test","type":"string"},"sort":{"$ref":"#/components/schemas/search.SortOptions"},"types":{"description":"The types of objects to search for, specified by key or ID","example":["ot-page","ot-678043f0cda9133be777049f","bafyreightzrdts2ymxyaeyzspwdfo2juspyam76ewq6qq7ixnw3523gs7q"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"search.SortDirection":{"default":"desc","description":"The direction to sort the search results","enum":["asc","desc"],"type":"string","x-enum-varnames":["Asc","Desc"]},"search.SortOptions":{"description":"The sorting criteria and direction for the search results","properties":{"direction":{"$ref":"#/components/schemas/search.SortDirection"},"property":{"$ref":"#/components/schemas/search.SortProperty"}},"type":"object"},"search.SortProperty":{"default":"last_modified_date","description":"The property to sort the search results by","enum":["created_date","last_modified_date","last_opened_date","name"],"type":"string","x-enum-varnames":["CreatedDate","LastModifiedDate","LastOpenedDate","Name"]},"space.CreateSpaceRequest":{"properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"name":{"description":"The name of the space","example":"New Space","type":"string"}},"type":"object"},"space.Member":{"description":"The member","properties":{"global_name":{"description":"The global name of the member in the network","example":"john.any","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The profile object id of the member","example":"_participant_bafyreigyfkt6rbv24sbv5aq2hko1bhmv5xxlf22b4bypdu6j7hnphm3psq_23me69r569oi1_AAjEaEwPF4nkEh9AWkqEnzcQ8HziBB4ETjiTpvRCQvWnSMDZ","type":"string"},"identity":{"description":"The identity of the member in the network","example":"AAjEaEwPF4nkEh7AWkqEnzcQ8HziGB4ETjiTpvRCQvWnSMDZ","type":"string"},"name":{"description":"The name of the member","example":"John Doe","type":"string"},"object":{"description":"The data model of the object","example":"member","type":"string"},"role":{"description":"The role of the member","enum":["viewer","editor","owner","no_permission"],"example":"owner","type":"string"},"status":{"description":"The status of the member","enum":["joining","active","removed","declined","removing","canceled"],"example":"active","type":"string"}},"type":"object"},"space.MemberResponse":{"properties":{"member":{"$ref":"#/components/schemas/space.Member"}},"type":"object"},"space.Space":{"description":"The space","properties":{"description":{"description":"The description of the space","example":"The local-first wiki","type":"string"},"gateway_url":{"description":"The gateway url to serve files and media","example":"http://127.0.0.1:31006","type":"string"},"icon":{"$ref":"#/components/schemas/util.Icon"},"id":{"description":"The id of the space","example":"bafyreigyfkt6rbv24sbv5aq2hko3bhmv5xxlf22b4bypdu6j7hnphm3psq.23me69r569oi1","type":"string"},"name":{"description":"The name of the space","example":"My Space","type":"string"},"network_id":{"description":"The network id of the space","example":"N83gJpVd9MuNRZAuJLZ7LiMntTThhPc6DtzWWVjb1M3PouVU","type":"string"},"object":{"description":"The data model of the object","example":"space","type":"string"}},"type":"object"},"space.SpaceResponse":{"properties":{"space":{"$ref":"#/components/schemas/space.Space"}},"type":"object"},"util.ForbiddenError":{"properties":{"error":{"properties":{"message":{"example":"Forbidden","type":"string"}},"type":"object"}},"type":"object"},"util.GoneError":{"properties":{"error":{"properties":{"message":{"example":"Resource is gone","type":"string"}},"type":"object"}},"type":"object"},"util.Icon":{"description":"The icon of the object","properties":{"color":{"description":"The color of the icon","example":"red","type":"string"},"emoji":{"description":"The emoji of the icon","example":"📄","type":"string"},"file":{"description":"The file of the icon","example":"http://127.0.0.1:31006/image/bafybeieptz5hvcy6txplcvphjbbh5yjc2zqhmihs3owkh5oab4ezauzqay","type":"string"},"format":{"$ref":"#/components/schemas/util.IconFormat"},"name":{"description":"The name of the icon","example":"document","type":"string"}},"type":"object"},"util.IconFormat":{"description":"The type of the icon","enum":["emoji","file","icon"],"example":"emoji","type":"string","x-enum-varnames":["IconFormatEmoji","IconFormatFile","IconFormatIcon"]},"util.NotFoundError":{"properties":{"error":{"properties":{"message":{"example":"Resource not found","type":"string"}},"type":"object"}},"type":"object"},"util.RateLimitError":{"properties":{"error":{"properties":{"message":{"example":"Rate limit exceeded","type":"string"}},"type":"object"}},"type":"object"},"util.ServerError":{"properties":{"error":{"properties":{"message":{"example":"Internal server error","type":"string"}},"type":"object"}},"type":"object"},"util.UnauthorizedError":{"properties":{"error":{"properties":{"message":{"example":"Unauthorized","type":"string"}},"type":"object"}},"type":"object"},"util.ValidationError":{"properties":{"error":{"properties":{"message":{"example":"Bad request","type":"string"}},"type":"object"}},"type":"object"}},"securitySchemes":{"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
"info": {"contact":{"email":"support@anytype.io","name":"Anytype Support","url":"https://anytype.io/contact"},"description":"This API allows interaction with Anytype resources such as spaces, objects and types.","license":{"name":"Any Source Available License 1.0","url":"https://github.com/anyproto/anytype-api/blob/main/LICENSE.md"},"termsOfService":"https://anytype.io/terms_of_use","title":"Anytype API","version":"2025-03-17"},
"externalDocs": {"description":"OpenAPI","url":"https://swagger.io/resources/open-api/"},
- "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]},"patch":{"description":"Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.UpdateMemberRequest"}}},"description":"Member to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Update member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
+ "paths": {"/auth/display_code":{"post":{"description":"This endpoint initiates a secure authentication flow by generating a new challenge. Clients must supply the name of the application (via a query parameter) that is requesting authentication. On success, the service returns a unique challenge ID. This challenge ID must then be used with the token endpoint (see below) to solve the challenge and retrieve an authentication token. In essence, this endpoint “boots up” the login process and is the first step in a multi-phase authentication sequence.","parameters":[{"description":"App name requesting the challenge","in":"query","name":"app_name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.DisplayCodeResponse"}}},"description":"Challenge ID"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Start new challenge","tags":["auth"]}},"/auth/token":{"post":{"description":"After receiving a challenge ID from the display_code endpoint, the client calls this endpoint to provide the corresponding 4-digit code (also via a query parameter) along with the challenge ID. The endpoint verifies that the challenge solution is correct and, if it is, returns an ephemeral session token together with a permanent app key. These tokens are then used in subsequent API requests to authorize access. This endpoint is central to ensuring that only properly authenticated sessions can access further resources.","parameters":[{"description":"Challenge ID","in":"query","name":"challenge_id","required":true,"schema":{"type":"string"}},{"description":"4-digit code retrieved from Anytype Desktop app","in":"query","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/auth.TokenResponse"}}},"description":"Authentication token"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"summary":"Retrieve token","tags":["auth"]}},"/search":{"post":{"description":"This endpoint executes a global search over every space the user has access to. It accepts pagination parameters (offset and limit) and a JSON body containing search criteria. The criteria include a search query string, an optional list of object types, and sort options (e.g. ascending/descending by creation, modification, or last opened dates). Internally, the endpoint aggregates results from each space, merges and sorts them (after last modified date by default), and returns a unified, paginated list of objects that match the search parameters.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects across all spaces","tags":["search"]}},"/spaces":{"get":{"description":"Retrieves a paginated list of all spaces that are accessible by the authenticated user. Each space record contains detailed information such as the space ID, name, icon (derived either from an emoji or image URL), and additional metadata. This endpoint is key to displaying a user’s workspaces.","parameters":[{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Space"}}},"description":"List of spaces"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List spaces","tags":["spaces"]},"post":{"description":"Creates a new workspace (or space) based on a supplied name in the JSON request body. The endpoint is subject to rate limiting and automatically applies default configurations such as generating a random icon and initializing the workspace with default settings (for example, a default dashboard or home page). On success, the new space’s full metadata is returned, enabling the client to immediately switch context to the new space.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.CreateSpaceRequest"}}},"description":"Space to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create space","tags":["spaces"]}},"/spaces/{space_id}":{"get":{"description":"Fetches full details about a single space identified by its space ID. The response includes metadata such as the space name, icon, and various workspace IDs (home, archive, profile, etc.). This detailed view supports use cases such as displaying space-specific settings.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.SpaceResponse"}}},"description":"Space"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Space not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get space","tags":["spaces"]}},"/spaces/{space_id}/lists/{list_id}/objects":{"post":{"description":"Enables clients to add one or more objects to a specific list (collection only) by submitting a JSON array of object IDs. Upon success, the endpoint returns a confirmation message. This endpoint is vital for building user interfaces that allow drag‑and‑drop or multi‑select additions to collections.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array"}}},"description":"List of object IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects added successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Add objects to list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/objects/{object_id}":{"delete":{"description":"Removes a given object from the specified list (collection only) in a space. The endpoint takes the space, list, and object identifiers as path parameters. It's subject to rate limiting and returns a success message on completion. It is used for dynamically managing collections without affecting the underlying object data.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}}},"description":"Objects removed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Remove object from list","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/views":{"get":{"description":"Returns a paginated list of views defined for a specific list (query or collection) within a space. Each view includes configuration details such as layout, applied filters, and sorting options, enabling clients to render the list according to user preferences and context. This endpoint supports pagination parameters to control the number of views returned and the starting point of the result set.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-list_View"}}},"description":"List of views"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get list views","tags":["lists"]}},"/spaces/{space_id}/lists/{list_id}/{view_id}/objects":{"get":{"description":"Returns a paginated list of objects associated with a specific list (query or collection) within a space. When a view ID is provided, the objects are filtered and sorted according to the view's configuration. If no view ID is specified, all list objects are returned without filtering and sorting. This endpoint helps clients to manage grouped objects (for example, tasks within a list) by returning information for each item of the list.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"List ID","in":"path","name":"list_id","required":true,"schema":{"type":"string"}},{"description":"View ID","in":"path","name":"view_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get objects in list","tags":["lists"]}},"/spaces/{space_id}/members":{"get":{"description":"Returns a paginated list of members belonging to the specified space. Each member record includes the member’s profile ID, name, icon (which may be derived from an emoji or image), network identity, global name, status (e.g. joining, active) and role (e.g. Viewer, Editor, Owner). This endpoint supports collaborative features by allowing clients to show who is in a space and manage access rights.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-space_Member"}}},"description":"List of members"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List members","tags":["members"]}},"/spaces/{space_id}/members/{member_id}":{"get":{"description":"Fetches detailed information about a single member within a space. The endpoint returns the member’s identifier, name, icon, identity, global name, status and role. The member_id path parameter can be provided as either the member's ID (starting with `_participant`) or the member's identity. This is useful for user profile pages, permission management, and displaying member-specific information in collaborative environments.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Member ID or Identity","in":"path","name":"member_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/space.MemberResponse"}}},"description":"Member"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Member not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get member","tags":["members"]}},"/spaces/{space_id}/objects":{"get":{"description":"Retrieves a paginated list of objects in the given space. The endpoint takes query parameters for pagination (offset and limit) and returns detailed data about each object including its ID, name, icon, type information, a snippet of the content (if applicable), layout, space ID, blocks and details. It is intended for building views where users can see all objects in a space at a glance.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List objects","tags":["objects"]},"post":{"description":"Creates a new object in the specified space using a JSON payload. The creation process is subject to rate limiting. The payload must include key details such as the object name, icon, description, body content (which may support Markdown), source URL (required for bookmark objects), template identifier, and the type_key (which is the non-unique identifier of the type of object to create). Post-creation, additional operations (like setting featured properties or fetching bookmark metadata) may occur. The endpoint then returns the full object data, ready for further interactions.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.CreateObjectRequest"}}},"description":"Object to create","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The created object"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Create object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}":{"delete":{"description":"This endpoint “deletes” an object by marking it as archived. The deletion process is performed safely and is subject to rate limiting. It returns the object’s details after it has been archived. Proper error handling is in place for situations such as when the object isn’t found or the deletion cannot be performed because of permission issues.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The deleted object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ForbiddenError"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"423":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.RateLimitError"}}},"description":"Rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Delete object","tags":["objects"]},"get":{"description":"Fetches the full details of a single object identified by the object ID within the specified space. The response includes not only basic metadata (ID, name, icon, type) but also the complete set of blocks (which may include text, files, properties and dataviews) and extra details (such as timestamps and linked member information). This endpoint is essential when a client needs to render or edit the full object view.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.ObjectResponse"}}},"description":"The requested object"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get object","tags":["objects"]}},"/spaces/{space_id}/objects/{object_id}/{format}":{"get":{"description":"This endpoint exports a single object from the specified space into a desired format. The export format is provided as a path parameter (currently supporting “markdown” only). The endpoint calls the export service which converts the object’s content into the requested format. It is useful for sharing, or displaying the markdown representation of the objecte externally.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Object ID","in":"path","name":"object_id","required":true,"schema":{"type":"string"}},{"description":"Export format","in":"path","name":"format","required":true,"schema":{"enum":["markdown"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/export.ObjectExportResponse"}}},"description":"Object exported successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ValidationError"}}},"description":"Bad request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Export object","tags":["export"]}},"/spaces/{space_id}/search":{"post":{"description":"This endpoint performs a focused search within a single space (specified by the space_id path parameter). Like the global search, it accepts pagination parameters and a JSON payload containing the search query, object types, and sorting preferences. The search is limited to the provided space and returns a list of objects that match the query. This allows clients to implement space‑specific filtering without having to process extraneous results.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/search.SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Object"}}},"description":"List of objects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Search objects within a space","tags":["search"]}},"/spaces/{space_id}/types":{"get":{"description":"This endpoint retrieves a paginated list of object types (e.g. 'Page', 'Note', 'Task') available within the specified space. Each type’s record includes its unique identifier, type key, display name, icon, and a recommended layout. While a type's id is truly unique, a type's key can be the same across spaces for known types, e.g. 'ot-page' for 'Page'. Clients use this information when offering choices for object creation or for filtering objects by type through search.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Type"}}},"description":"List of types"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List types","tags":["types"]}},"/spaces/{space_id}/types/{type_id}":{"get":{"description":"Fetches detailed information about one specific object type by its ID. This includes the type’s unique key, name, icon, and recommended layout. This detailed view assists clients in understanding the expected structure and style for objects of that type and in guiding the user interface (such as displaying appropriate icons or layout hints).","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TypeResponse"}}},"description":"The requested type"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get type","tags":["types"]}},"/spaces/{space_id}/types/{type_id}/templates":{"get":{"description":"This endpoint returns a paginated list of templates that are associated with a specific object type within a space. Templates provide pre‑configured structures for creating new objects. Each template record contains its identifier, name, and icon, so that clients can offer users a selection of templates when creating objects.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"The number of items to skip before starting to collect the result set","in":"query","name":"offset","schema":{"default":0,"type":"integer"}},{"description":"The number of items to return","in":"query","name":"limit","schema":{"default":100,"maximum":1000,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pagination.PaginatedResponse-object_Template"}}},"description":"List of templates"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"List templates","tags":["templates"]}},"/spaces/{space_id}/types/{type_id}/templates/{template_id}":{"get":{"description":"Fetches full details for one template associated with a particular object type in a space. The response provides the template’s identifier, name, icon, and any other relevant metadata. This endpoint is useful when a client needs to preview or apply a template to prefill object creation fields.","parameters":[{"description":"Space ID","in":"path","name":"space_id","required":true,"schema":{"type":"string"}},{"description":"Type ID","in":"path","name":"type_id","required":true,"schema":{"type":"string"}},{"description":"Template ID","in":"path","name":"template_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/object.TemplateResponse"}}},"description":"The requested template"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.UnauthorizedError"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.NotFoundError"}}},"description":"Resource not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.GoneError"}}},"description":"Resource deleted"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/util.ServerError"}}},"description":"Internal server error"}},"security":[{"bearerauth":[]}],"summary":"Get template","tags":["templates"]}}},
"openapi": "3.1.0",
"servers": [
{"url":"http://localhost:31009/v1"}
diff --git a/core/api/docs/swagger.yaml b/core/api/docs/swagger.yaml
index cf5d69d2d..6cad0f8bc 100644
--- a/core/api/docs/swagger.yaml
+++ b/core/api/docs/swagger.yaml
@@ -687,24 +687,6 @@ components:
space:
$ref: '#/components/schemas/space.Space'
type: object
- space.UpdateMemberRequest:
- properties:
- role:
- description: Role to assign if approving a joining member
- enum:
- - viewer
- - editor
- example: viewer
- type: string
- status:
- description: Status of the member
- enum:
- - active
- - removed
- - declined
- example: active
- type: string
- type: object
util.ForbiddenError:
properties:
error:
@@ -1473,69 +1455,6 @@ paths:
summary: Get member
tags:
- members
- patch:
- description: Modifies a member's status and role in a space. Use this endpoint
- to approve a joining member by setting the status to `active` and specifying
- a role (`reader` or `writer`), reject a joining member by setting the status
- to `declined`, remove a member by setting the status to `removed`, or update
- an active member's role. This endpoint enables fine-grained control over member
- access and permissions.
- parameters:
- - description: Space ID
- in: path
- name: space_id
- required: true
- schema:
- type: string
- - description: Member ID
- in: path
- name: member_id
- required: true
- schema:
- type: string
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/space.UpdateMemberRequest'
- description: Member to update
- required: true
- responses:
- "200":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/space.MemberResponse'
- description: Member updated successfully
- "400":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.ValidationError'
- description: Bad request
- "401":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.UnauthorizedError'
- description: Unauthorized
- "404":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.NotFoundError'
- description: Member not found
- "500":
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/util.ServerError'
- description: Internal server error
- security:
- - bearerauth: []
- summary: Update member
- tags:
- - members
/spaces/{space_id}/objects:
get:
description: Retrieves a paginated list of objects in the given space. The endpoint
diff --git a/core/api/internal/space/handler.go b/core/api/internal/space/handler.go
index 5cd3f5606..4b8871ca9 100644
--- a/core/api/internal/space/handler.go
+++ b/core/api/internal/space/handler.go
@@ -189,49 +189,3 @@ func GetMemberHandler(s *SpaceService) gin.HandlerFunc {
c.JSON(http.StatusOK, MemberResponse{Member: member})
}
}
-
-// UpdateMemberHandler updates a member in a space
-//
-// @Summary Update member
-// @Description Modifies a member's status and role in a space. Use this endpoint to approve a joining member by setting the status to `active` and specifying a role (`reader` or `writer`), reject a joining member by setting the status to `declined`, remove a member by setting the status to `removed`, or update an active member's role. This endpoint enables fine-grained control over member access and permissions.
-// @Tags members
-// @Accept json
-// @Produce json
-// @Param space_id path string true "Space ID"
-// @Param member_id path string true "Member ID"
-// @Param body body UpdateMemberRequest true "Member to update"
-// @Success 200 {object} MemberResponse "Member updated successfully"
-// @Failure 400 {object} util.ValidationError "Bad request"
-// @Failure 401 {object} util.UnauthorizedError "Unauthorized"
-// @Failure 404 {object} util.NotFoundError "Member not found"
-// @Failure 500 {object} util.ServerError "Internal server error"
-// @Security bearerauth
-// @Router /spaces/{space_id}/members/{member_id} [patch]
-func UpdateMemberHandler(s *SpaceService) gin.HandlerFunc {
- return func(c *gin.Context) {
- spaceId := c.Param("space_id")
- memberId := c.Param("member_id")
-
- var req UpdateMemberRequest
- if err := c.BindJSON(&req); err != nil {
- apiErr := util.CodeToAPIError(http.StatusBadRequest, err.Error())
- c.AbortWithStatusJSON(http.StatusBadRequest, apiErr)
- }
-
- member, err := s.UpdateMember(c.Request.Context(), spaceId, memberId, req)
- code := util.MapErrorCode(err,
- util.ErrToCode(ErrInvalidApproveMemberStatus, http.StatusBadRequest),
- util.ErrToCode(ErrInvalidApproveMemberRole, http.StatusBadRequest),
- util.ErrToCode(ErrMemberNotFound, http.StatusNotFound),
- util.ErrToCode(ErrFailedUpdateMember, http.StatusInternalServerError),
- )
-
- if code != http.StatusOK {
- apiErr := util.CodeToAPIError(code, err.Error())
- c.JSON(code, apiErr)
- return
- }
-
- c.JSON(http.StatusOK, MemberResponse{Member: member})
- }
-}
From 5c3474860e20f691bc36c77888164b39943e37fa Mon Sep 17 00:00:00 2001
From: Mikhail
Date: Mon, 31 Mar 2025 16:55:27 +0200
Subject: [PATCH 128/132] GO-4701 Add tmp cleanup (#2276)
---
pkg/lib/core/tmp_dir.go | 29 +++++++++++++++++++++
pkg/lib/core/tmp_dir_test.go | 50 ++++++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+)
create mode 100644 pkg/lib/core/tmp_dir_test.go
diff --git a/pkg/lib/core/tmp_dir.go b/pkg/lib/core/tmp_dir.go
index 9a07eb6d2..fa7e22a24 100644
--- a/pkg/lib/core/tmp_dir.go
+++ b/pkg/lib/core/tmp_dir.go
@@ -4,6 +4,7 @@ import (
"os"
"path/filepath"
"sync"
+ "time"
"github.com/anyproto/any-sync/app"
@@ -54,8 +55,36 @@ func (s *TempDirService) TempDir() string {
s.tempDir = os.TempDir()
} else {
s.tempDir = path
+ go s.cleanUp()
}
})
return s.tempDir
}
+
+func (s *TempDirService) cleanUp() {
+ cutoff := time.Now().Add(-72 * time.Hour)
+ recursiveCleanup(s.tempDir, cutoff)
+}
+
+func recursiveCleanup(path string, cutoff time.Time) {
+ entries, err := os.ReadDir(path)
+ if err != nil {
+ log.Warnf("tmp cleanup readdir: %v", err)
+ }
+ for _, entry := range entries {
+ fullEntryPath := filepath.Join(path, entry.Name())
+ info, err := entry.Info()
+ if err != nil {
+ log.Warnf("tmp cleanup entry: %v", err)
+ }
+ if entry.IsDir() {
+ recursiveCleanup(fullEntryPath, cutoff)
+ } else if info.ModTime().IsZero() || info.ModTime().Before(cutoff) {
+ err = os.RemoveAll(fullEntryPath)
+ if err != nil {
+ log.Warnf("tmp cleanup delete: %v", err)
+ }
+ }
+ }
+}
diff --git a/pkg/lib/core/tmp_dir_test.go b/pkg/lib/core/tmp_dir_test.go
new file mode 100644
index 000000000..99c98e202
--- /dev/null
+++ b/pkg/lib/core/tmp_dir_test.go
@@ -0,0 +1,50 @@
+package core
+
+import (
+ "os"
+ "path/filepath"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestTempDirService(t *testing.T) {
+ t.Run("cleanup", func(t *testing.T) {
+ // given
+ s := NewTempDirService()
+ s.tempDir = t.TempDir()
+
+ oldFile := filepath.Join(s.tempDir, "old.txt")
+ require.NoError(t, os.WriteFile(oldFile, []byte("old"), 0600))
+ oldTime := time.Now().Add(-100 * time.Hour)
+ require.NoError(t, os.Chtimes(oldFile, oldTime, oldTime))
+
+ newFile := filepath.Join(s.tempDir, "new.txt")
+ require.NoError(t, os.WriteFile(newFile, []byte("new"), 0600))
+
+ nestedDir := filepath.Join(s.tempDir, "nested")
+ require.NoError(t, os.MkdirAll(nestedDir, 0755))
+ nestedOldFile := filepath.Join(nestedDir, "nested_old.txt")
+ require.NoError(t, os.WriteFile(nestedOldFile, []byte("nested old"), 0600))
+ require.NoError(t, os.Chtimes(nestedOldFile, oldTime, oldTime))
+ nestedNewFile := filepath.Join(nestedDir, "nested_new.txt")
+ require.NoError(t, os.WriteFile(nestedNewFile, []byte("nested new"), 0600))
+
+ // when
+ s.cleanUp()
+
+ // then
+ _, err := os.Stat(oldFile)
+ require.True(t, os.IsNotExist(err), "old file should be deleted")
+
+ _, err = os.Stat(newFile)
+ require.NoError(t, err, "new file should remain")
+
+ _, err = os.Stat(nestedOldFile)
+ require.True(t, os.IsNotExist(err), "nested old file should be deleted")
+
+ _, err = os.Stat(nestedNewFile)
+ require.NoError(t, err, "nested new file should remain")
+ })
+}
From 6f75b2f96a16c36b8ecc4560e0206255cf3f2411 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 17:02:28 +0200
Subject: [PATCH 129/132] GO-4459 disable member update endpoint
---
core/api/server/router.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/api/server/router.go b/core/api/server/router.go
index a2fcb9616..119d23108 100644
--- a/core/api/server/router.go
+++ b/core/api/server/router.go
@@ -88,7 +88,7 @@ func (s *Server) NewRouter(mw apicore.ClientCommands, accountService apicore.Acc
v1.GET("/spaces/:space_id", space.GetSpaceHandler(s.spaceService))
v1.GET("/spaces/:space_id/members", space.GetMembersHandler(s.spaceService))
v1.GET("/spaces/:space_id/members/:member_id", space.GetMemberHandler(s.spaceService))
- v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond), space.UpdateMemberHandler(s.spaceService))
+ // v1.PATCH("/spaces/:space_id/members/:member_id", s.rateLimit(maxWriteRequestsPerSecond), space.UpdateMemberHandler(s.spaceService))
v1.POST("/spaces", s.rateLimit(maxWriteRequestsPerSecond), space.CreateSpaceHandler(s.spaceService))
// Type
From bda55e79be30d155488d71e7a06283fea559c2f6 Mon Sep 17 00:00:00 2001
From: kirillston
Date: Mon, 31 Mar 2025 18:48:29 +0300
Subject: [PATCH 130/132] GO-5331 Remove tasks and priority from Task
---
pkg/lib/bundle/types.gen.go | 4 ++--
pkg/lib/bundle/types.json | 4 +---
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/pkg/lib/bundle/types.gen.go b/pkg/lib/bundle/types.gen.go
index df36c8b8e..e5bf897e8 100644
--- a/pkg/lib/bundle/types.gen.go
+++ b/pkg/lib/bundle/types.gen.go
@@ -9,7 +9,7 @@ import (
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
)
-const TypeChecksum = "91c804ca7dd4df74fafbdaff99e50fa2ffcc6cb0fb073887a90bdf1b4a3d98d5"
+const TypeChecksum = "f2672b9f52915f228e335b78ed94ce1b6c7b195ceb1cba9a44b25a870a3b2ac0"
const (
TypePrefix = "_ot"
)
@@ -426,7 +426,7 @@ var (
Name: "Task",
PluralName: "Tasks",
Readonly: true,
- RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDone), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyLinkedProjects), MustGetRelationLink(RelationKeyPriority), MustGetRelationLink(RelationKeyStatus), MustGetRelationLink(RelationKeyTasks)},
+ RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDone), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyLinkedProjects), MustGetRelationLink(RelationKeyStatus)},
Revision: 2,
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "task",
diff --git a/pkg/lib/bundle/types.json b/pkg/lib/bundle/types.json
index 96cabd17d..9d9bccac6 100644
--- a/pkg/lib/bundle/types.json
+++ b/pkg/lib/bundle/types.json
@@ -107,9 +107,7 @@
"done",
"dueDate",
"linkedProjects",
- "priority",
- "status",
- "tasks"
+ "status"
],
"description": "A piece of work to be done or undertaken",
"revision": 2
From 1dec3131e358c0f4594e3c739b6364b06bee3f93 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 17:53:41 +0200
Subject: [PATCH 131/132] GO-4459 export: fix gateway service init
---
core/block/export/export.go | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/core/block/export/export.go b/core/block/export/export.go
index e453221d7..0de884a91 100644
--- a/core/block/export/export.go
+++ b/core/block/export/export.go
@@ -103,7 +103,7 @@ func (e *export) Init(a *app.App) (err error) {
e.spaceService = app.MustComponent[space.Service](a)
e.accountService = app.MustComponent[account.Service](a)
e.notificationService = app.MustComponent[notifications.Notifications](a)
- e.gatewayService = app.MustComponent[gateway.Gateway](a)
+ e.gatewayService, _ = app.GetComponent[gateway.Gateway](a)
return
}
@@ -212,9 +212,11 @@ func newExportContext(e *export, req pb.RpcObjectListExportRequest) *exportConte
setOfList: make(map[string]struct{}),
objectTypes: make(map[string]struct{}),
relations: make(map[string]struct{}),
- gatewayUrl: "http://" + e.gatewayService.Addr(),
export: e,
}
+ if e.gatewayService != nil {
+ ec.gatewayUrl = "http://" + e.gatewayService.Addr()
+ }
return ec
}
From 05f04c24ab8a957cdcb690d69c4b3701f83c9e74 Mon Sep 17 00:00:00 2001
From: Roman Khafizianov
Date: Mon, 31 Mar 2025 18:20:58 +0200
Subject: [PATCH 132/132] GO-4459 add comment
---
core/api/internal/object/model.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/api/internal/object/model.go b/core/api/internal/object/model.go
index cef220e5e..22340b52f 100644
--- a/core/api/internal/object/model.go
+++ b/core/api/internal/object/model.go
@@ -26,7 +26,7 @@ type Object struct {
Snippet string `json:"snippet" example:"The beginning of the object body..."` // The snippet of the object, especially important for notes as they don't have a name
Layout string `json:"layout" example:"basic"` // The layout of the object
Type Type `json:"type"` // The type of the object
- Blocks []Block `json:"blocks"` // The blocks of the object
+ Blocks []Block `json:"blocks"` // The blocks of the object. Omitted in Search endpoints, returned only in GetObject endpoint
Properties []Property `json:"properties"` // The properties of the object
}